Index: src/compiler/register-allocator.h |
diff --git a/src/compiler/register-allocator.h b/src/compiler/register-allocator.h |
index 5a09c012d8234f42fb24db895130328b9be35b81..83f95cbac601608fe178fbcb7880bf77ad87191c 100644 |
--- a/src/compiler/register-allocator.h |
+++ b/src/compiler/register-allocator.h |
@@ -428,6 +428,15 @@ class LiveRange final : public ZoneObject { |
return spills_at_definition_; |
} |
+ // Used solely by the Greedy Allocator: |
+ unsigned GetSize(); |
+ float weight() const { return weight_; } |
+ void set_weight(float weight) { weight_ = weight; } |
+ |
+ static const int kInvalidSize = -1; |
+ static const float kInvalidWeight; |
+ static const float kMaxWeight; |
+ |
private: |
void set_spill_type(SpillType value) { |
bits_ = SpillTypeField::update(bits_, value); |
@@ -468,6 +477,14 @@ class LiveRange final : public ZoneObject { |
// This is used as a cache, it's invalid outside of BuildLiveRanges. |
mutable UsePosition* current_hint_position_; |
+ // greedy: the number of LifetimePositions covered by this range. Used to |
+ // prioritize selecting live ranges for register assignment, as well as |
+ // in weight calculations. |
+ int size_; |
+ |
+ // greedy: a metric for resolving conflicts between ranges with an assigned |
+ // register and ranges that intersect them and need a register. |
+ float weight_; |
DISALLOW_COPY_AND_ASSIGN(LiveRange); |
}; |
@@ -770,6 +787,7 @@ class RegisterAllocator : public ZoneObject { |
LifetimePosition pos); |
const ZoneVector<LiveRange*>& GetFixedRegisters() const; |
+ const char* RegisterName(int allocation_index) const; |
private: |
RegisterAllocationData* const data_; |
@@ -789,8 +807,6 @@ class LinearScanAllocator final : public RegisterAllocator { |
void AllocateRegisters(); |
private: |
- const char* RegisterName(int allocation_index) const; |
- |
ZoneVector<LiveRange*>& unhandled_live_ranges() { |
return unhandled_live_ranges_; |
} |