| OLD | NEW |
| 1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef V8_REGISTER_ALLOCATOR_H_ | 5 #ifndef V8_REGISTER_ALLOCATOR_H_ |
| 6 #define V8_REGISTER_ALLOCATOR_H_ | 6 #define V8_REGISTER_ALLOCATOR_H_ |
| 7 | 7 |
| 8 #include "src/compiler/instruction.h" | 8 #include "src/compiler/instruction.h" |
| 9 #include "src/ostreams.h" | 9 #include "src/ostreams.h" |
| 10 #include "src/zone-containers.h" | 10 #include "src/zone-containers.h" |
| (...skipping 527 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 538 int GetNextChildId() { return ++last_child_id_; } | 538 int GetNextChildId() { return ++last_child_id_; } |
| 539 bool IsSpilledOnlyInDeferredBlocks() const { | 539 bool IsSpilledOnlyInDeferredBlocks() const { |
| 540 return spilled_in_deferred_blocks_; | 540 return spilled_in_deferred_blocks_; |
| 541 } | 541 } |
| 542 | 542 |
| 543 struct SpillAtDefinitionList; | 543 struct SpillAtDefinitionList; |
| 544 | 544 |
| 545 SpillAtDefinitionList* spills_at_definition() const { | 545 SpillAtDefinitionList* spills_at_definition() const { |
| 546 return spills_at_definition_; | 546 return spills_at_definition_; |
| 547 } | 547 } |
| 548 void set_last_child(LiveRange* range) { last_child_ = range; } |
| 549 LiveRange* last_child() const { return last_child_; } |
| 548 | 550 |
| 549 private: | 551 private: |
| 550 typedef BitField<bool, 1, 1> HasSlotUseField; | 552 typedef BitField<bool, 1, 1> HasSlotUseField; |
| 551 typedef BitField<bool, 2, 1> IsPhiField; | 553 typedef BitField<bool, 2, 1> IsPhiField; |
| 552 typedef BitField<bool, 3, 1> IsNonLoopPhiField; | 554 typedef BitField<bool, 3, 1> IsNonLoopPhiField; |
| 553 typedef BitField<SpillType, 4, 2> SpillTypeField; | 555 typedef BitField<SpillType, 4, 2> SpillTypeField; |
| 554 | 556 |
| 555 LiveRange* GetLastChild(); | |
| 556 | |
| 557 int vreg_; | 557 int vreg_; |
| 558 int last_child_id_; | 558 int last_child_id_; |
| 559 TopLevelLiveRange* splintered_from_; | 559 TopLevelLiveRange* splintered_from_; |
| 560 union { | 560 union { |
| 561 // Correct value determined by spill_type() | 561 // Correct value determined by spill_type() |
| 562 InstructionOperand* spill_operand_; | 562 InstructionOperand* spill_operand_; |
| 563 SpillRange* spill_range_; | 563 SpillRange* spill_range_; |
| 564 }; | 564 }; |
| 565 SpillAtDefinitionList* spills_at_definition_; | 565 SpillAtDefinitionList* spills_at_definition_; |
| 566 // TODO(mtrofin): generalize spilling after definition, currently specialized | 566 // TODO(mtrofin): generalize spilling after definition, currently specialized |
| 567 // just for spill in a single deferred block. | 567 // just for spill in a single deferred block. |
| 568 bool spilled_in_deferred_blocks_; | 568 bool spilled_in_deferred_blocks_; |
| 569 int spill_start_index_; | 569 int spill_start_index_; |
| 570 LiveRange* last_child_; |
| 571 LiveRange* last_insertion_point_; |
| 570 | 572 |
| 571 DISALLOW_COPY_AND_ASSIGN(TopLevelLiveRange); | 573 DISALLOW_COPY_AND_ASSIGN(TopLevelLiveRange); |
| 572 }; | 574 }; |
| 573 | 575 |
| 574 | 576 |
| 575 struct PrintableLiveRange { | 577 struct PrintableLiveRange { |
| 576 const RegisterConfiguration* register_configuration_; | 578 const RegisterConfiguration* register_configuration_; |
| 577 const LiveRange* range_; | 579 const LiveRange* range_; |
| 578 }; | 580 }; |
| 579 | 581 |
| (...skipping 463 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1043 RegisterAllocationData* const data_; | 1045 RegisterAllocationData* const data_; |
| 1044 | 1046 |
| 1045 DISALLOW_COPY_AND_ASSIGN(LiveRangeConnector); | 1047 DISALLOW_COPY_AND_ASSIGN(LiveRangeConnector); |
| 1046 }; | 1048 }; |
| 1047 | 1049 |
| 1048 } // namespace compiler | 1050 } // namespace compiler |
| 1049 } // namespace internal | 1051 } // namespace internal |
| 1050 } // namespace v8 | 1052 } // namespace v8 |
| 1051 | 1053 |
| 1052 #endif // V8_REGISTER_ALLOCATOR_H_ | 1054 #endif // V8_REGISTER_ALLOCATOR_H_ |
| OLD | NEW |