| Index: src/compiler/register-allocator.h
|
| diff --git a/src/compiler/register-allocator.h b/src/compiler/register-allocator.h
|
| index 19cac29326bbeebfb4d621fe98fd2bd9d32d8bab..2440f35a6027a2a2d5d1b16a7898e7bf47445945 100644
|
| --- a/src/compiler/register-allocator.h
|
| +++ b/src/compiler/register-allocator.h
|
| @@ -197,7 +197,7 @@ class LiveRange FINAL : public ZoneObject {
|
| int assigned_register() const { return assigned_register_; }
|
| int spill_start_index() const { return spill_start_index_; }
|
| void set_assigned_register(int reg, Zone* zone);
|
| - void MakeSpilled();
|
| + void MakeSpilled(Zone* zone);
|
| bool is_phi() const { return is_phi_; }
|
| void set_is_phi(bool is_phi) { is_phi_ = is_phi; }
|
| bool is_non_loop_phi() const { return is_non_loop_phi_; }
|
| @@ -260,27 +260,13 @@ class LiveRange FINAL : public ZoneObject {
|
| return last_interval_->end();
|
| }
|
|
|
| - enum class SpillType { kNoSpillType, kSpillOperand, kSpillRange };
|
| - SpillType spill_type() const { return spill_type_; }
|
| - InstructionOperand* GetSpillOperand() const {
|
| - return spill_type_ == SpillType::kSpillOperand ? spill_operand_ : nullptr;
|
| - }
|
| - SpillRange* GetSpillRange() const {
|
| - return spill_type_ == SpillType::kSpillRange ? spill_range_ : nullptr;
|
| - }
|
| - bool HasNoSpillType() const { return spill_type_ == SpillType::kNoSpillType; }
|
| - bool HasSpillOperand() const {
|
| - return spill_type_ == SpillType::kSpillOperand;
|
| - }
|
| - bool HasSpillRange() const { return spill_type_ == SpillType::kSpillRange; }
|
| -
|
| - void SpillAtDefinition(Zone* zone, int gap_index,
|
| - InstructionOperand* operand);
|
| + bool HasAllocatedSpillOperand() const;
|
| + InstructionOperand* GetSpillOperand() const { return spill_operand_; }
|
| void SetSpillOperand(InstructionOperand* operand);
|
| - void SetSpillRange(SpillRange* spill_range);
|
| +
|
| + void SetSpillRange(SpillRange* spill_range) { spill_range_ = spill_range; }
|
| + SpillRange* GetSpillRange() const { return spill_range_; }
|
| void CommitSpillOperand(InstructionOperand* operand);
|
| - void CommitSpillsAtDefinition(InstructionSequence* sequence,
|
| - InstructionOperand* operand);
|
|
|
| void SetSpillStartIndex(int start) {
|
| spill_start_index_ = Min(start, spill_start_index_);
|
| @@ -307,14 +293,12 @@ class LiveRange FINAL : public ZoneObject {
|
| #endif
|
|
|
| private:
|
| - struct SpillAtDefinitionList;
|
| -
|
| + void ConvertOperands(Zone* zone);
|
| void ConvertUsesToOperand(InstructionOperand* op);
|
| UseInterval* FirstSearchIntervalForPosition(LifetimePosition position) const;
|
| void AdvanceLastProcessedMarker(UseInterval* to_start_of,
|
| LifetimePosition but_not_past) const;
|
|
|
| - // TODO(dcarney): pack this structure better.
|
| int id_;
|
| bool spilled_;
|
| bool is_phi_;
|
| @@ -331,13 +315,9 @@ class LiveRange FINAL : public ZoneObject {
|
| UsePosition* last_processed_use_;
|
| // This is used as a cache, it's invalid outside of BuildLiveRanges.
|
| InstructionOperand* current_hint_operand_;
|
| + InstructionOperand* spill_operand_;
|
| int spill_start_index_;
|
| - SpillType spill_type_;
|
| - union {
|
| - InstructionOperand* spill_operand_;
|
| - SpillRange* spill_range_;
|
| - };
|
| - SpillAtDefinitionList* spills_at_definition_;
|
| + SpillRange* spill_range_;
|
|
|
| friend class RegisterAllocator; // Assigns to kind_.
|
|
|
| @@ -408,16 +388,13 @@ class RegisterAllocator FINAL : public ZoneObject {
|
| // Phase 5: reassign spill splots for maximal reuse.
|
| void ReuseSpillSlots();
|
|
|
| - // Phase 6: commit assignment.
|
| - void CommitAssignment();
|
| -
|
| - // Phase 7: compute values for pointer maps.
|
| + // Phase 6: compute values for pointer maps.
|
| void PopulatePointerMaps(); // TODO(titzer): rename to PopulateReferenceMaps.
|
|
|
| - // Phase 8: reconnect split ranges with moves.
|
| + // Phase 7: reconnect split ranges with moves.
|
| void ConnectRanges();
|
|
|
| - // Phase 9: insert moves to connect ranges across basic blocks.
|
| + // Phase 8: insert moves to connect ranges across basic blocks.
|
| void ResolveControlFlow();
|
|
|
| private:
|
|
|