Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(480)

Side by Side Diff: src/compiler/register-allocator.h

Issue 1501363002: [turbofan] regalloc: model context and function mark as reg-defined. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | src/compiler/register-allocator.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/register-configuration.h" 10 #include "src/register-configuration.h"
(...skipping 654 matching lines...) Expand 10 before | Expand all | Expand 10 after
665 class SpillRange final : public ZoneObject { 665 class SpillRange final : public ZoneObject {
666 public: 666 public:
667 static const int kUnassignedSlot = -1; 667 static const int kUnassignedSlot = -1;
668 SpillRange(TopLevelLiveRange* range, Zone* zone); 668 SpillRange(TopLevelLiveRange* range, Zone* zone);
669 669
670 UseInterval* interval() const { return use_interval_; } 670 UseInterval* interval() const { return use_interval_; }
671 // Currently, only 4 or 8 byte slots are supported. 671 // Currently, only 4 or 8 byte slots are supported.
672 int ByteWidth() const; 672 int ByteWidth() const;
673 bool IsEmpty() const { return live_ranges_.empty(); } 673 bool IsEmpty() const { return live_ranges_.empty(); }
674 bool TryMerge(SpillRange* other); 674 bool TryMerge(SpillRange* other);
675 bool HasSlot() const { return assigned_slot_ != kUnassignedSlot; }
675 676
676 void set_assigned_slot(int index) { 677 void set_assigned_slot(int index) {
677 DCHECK_EQ(kUnassignedSlot, assigned_slot_); 678 DCHECK_EQ(kUnassignedSlot, assigned_slot_);
678 assigned_slot_ = index; 679 assigned_slot_ = index;
679 } 680 }
680 int assigned_slot() { 681 int assigned_slot() {
681 DCHECK_NE(kUnassignedSlot, assigned_slot_); 682 DCHECK_NE(kUnassignedSlot, assigned_slot_);
682 return assigned_slot_; 683 return assigned_slot_;
683 } 684 }
684 const ZoneVector<TopLevelLiveRange*>& live_ranges() const { 685 const ZoneVector<TopLevelLiveRange*>& live_ranges() const {
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
731 ZoneVector<InstructionOperand*> incoming_operands_; 732 ZoneVector<InstructionOperand*> incoming_operands_;
732 int assigned_register_; 733 int assigned_register_;
733 }; 734 };
734 typedef ZoneMap<int, PhiMapValue*> PhiMap; 735 typedef ZoneMap<int, PhiMapValue*> PhiMap;
735 736
736 struct DelayedReference { 737 struct DelayedReference {
737 ReferenceMap* map; 738 ReferenceMap* map;
738 InstructionOperand* operand; 739 InstructionOperand* operand;
739 }; 740 };
740 typedef ZoneVector<DelayedReference> DelayedReferences; 741 typedef ZoneVector<DelayedReference> DelayedReferences;
742 typedef ZoneVector<std::pair<TopLevelLiveRange*, int>>
743 RangesWithPreassignedSlots;
741 744
742 RegisterAllocationData(const RegisterConfiguration* config, 745 RegisterAllocationData(const RegisterConfiguration* config,
743 Zone* allocation_zone, Frame* frame, 746 Zone* allocation_zone, Frame* frame,
744 InstructionSequence* code, 747 InstructionSequence* code,
745 const char* debug_name = nullptr); 748 const char* debug_name = nullptr);
746 749
747 const ZoneVector<TopLevelLiveRange*>& live_ranges() const { 750 const ZoneVector<TopLevelLiveRange*>& live_ranges() const {
748 return live_ranges_; 751 return live_ranges_;
749 } 752 }
750 ZoneVector<TopLevelLiveRange*>& live_ranges() { return live_ranges_; } 753 ZoneVector<TopLevelLiveRange*>& live_ranges() { return live_ranges_; }
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
797 bool RangesDefinedInDeferredStayInDeferred(); 800 bool RangesDefinedInDeferredStayInDeferred();
798 801
799 void MarkAllocated(RegisterKind kind, int index); 802 void MarkAllocated(RegisterKind kind, int index);
800 803
801 PhiMapValue* InitializePhiMap(const InstructionBlock* block, 804 PhiMapValue* InitializePhiMap(const InstructionBlock* block,
802 PhiInstruction* phi); 805 PhiInstruction* phi);
803 PhiMapValue* GetPhiMapValueFor(TopLevelLiveRange* top_range); 806 PhiMapValue* GetPhiMapValueFor(TopLevelLiveRange* top_range);
804 PhiMapValue* GetPhiMapValueFor(int virtual_register); 807 PhiMapValue* GetPhiMapValueFor(int virtual_register);
805 bool IsBlockBoundary(LifetimePosition pos) const; 808 bool IsBlockBoundary(LifetimePosition pos) const;
806 809
810 RangesWithPreassignedSlots& preassigned_slot_ranges() {
811 return preassigned_slot_ranges_;
812 }
813
807 void Print(const InstructionSequence* instructionSequence); 814 void Print(const InstructionSequence* instructionSequence);
808 void Print(const Instruction* instruction); 815 void Print(const Instruction* instruction);
809 void Print(const LiveRange* range, bool with_children = false); 816 void Print(const LiveRange* range, bool with_children = false);
810 void Print(const InstructionOperand& op); 817 void Print(const InstructionOperand& op);
811 void Print(const MoveOperands* move); 818 void Print(const MoveOperands* move);
812 void Print(const SpillRange* spill_range); 819 void Print(const SpillRange* spill_range);
813 820
814 private: 821 private:
815 int GetNextLiveRangeId(); 822 int GetNextLiveRangeId();
816 823
817 Zone* const allocation_zone_; 824 Zone* const allocation_zone_;
818 Frame* const frame_; 825 Frame* const frame_;
819 InstructionSequence* const code_; 826 InstructionSequence* const code_;
820 const char* const debug_name_; 827 const char* const debug_name_;
821 const RegisterConfiguration* const config_; 828 const RegisterConfiguration* const config_;
822 PhiMap phi_map_; 829 PhiMap phi_map_;
823 ZoneVector<int> allocatable_codes_; 830 ZoneVector<int> allocatable_codes_;
824 ZoneVector<int> allocatable_double_codes_; 831 ZoneVector<int> allocatable_double_codes_;
825 ZoneVector<BitVector*> live_in_sets_; 832 ZoneVector<BitVector*> live_in_sets_;
826 ZoneVector<BitVector*> live_out_sets_; 833 ZoneVector<BitVector*> live_out_sets_;
827 ZoneVector<TopLevelLiveRange*> live_ranges_; 834 ZoneVector<TopLevelLiveRange*> live_ranges_;
828 ZoneVector<TopLevelLiveRange*> fixed_live_ranges_; 835 ZoneVector<TopLevelLiveRange*> fixed_live_ranges_;
829 ZoneVector<TopLevelLiveRange*> fixed_double_live_ranges_; 836 ZoneVector<TopLevelLiveRange*> fixed_double_live_ranges_;
830 ZoneVector<SpillRange*> spill_ranges_; 837 ZoneVector<SpillRange*> spill_ranges_;
831 DelayedReferences delayed_references_; 838 DelayedReferences delayed_references_;
832 BitVector* assigned_registers_; 839 BitVector* assigned_registers_;
833 BitVector* assigned_double_registers_; 840 BitVector* assigned_double_registers_;
834 int virtual_register_count_; 841 int virtual_register_count_;
842 RangesWithPreassignedSlots preassigned_slot_ranges_;
835 843
836 DISALLOW_COPY_AND_ASSIGN(RegisterAllocationData); 844 DISALLOW_COPY_AND_ASSIGN(RegisterAllocationData);
837 }; 845 };
838 846
839 847
840 class ConstraintBuilder final : public ZoneObject { 848 class ConstraintBuilder final : public ZoneObject {
841 public: 849 public:
842 explicit ConstraintBuilder(RegisterAllocationData* data); 850 explicit ConstraintBuilder(RegisterAllocationData* data);
843 851
844 // Phase 1 : insert moves to account for fixed register operands. 852 // Phase 1 : insert moves to account for fixed register operands.
(...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after
1147 RegisterAllocationData* const data_; 1155 RegisterAllocationData* const data_;
1148 1156
1149 DISALLOW_COPY_AND_ASSIGN(LiveRangeConnector); 1157 DISALLOW_COPY_AND_ASSIGN(LiveRangeConnector);
1150 }; 1158 };
1151 1159
1152 } // namespace compiler 1160 } // namespace compiler
1153 } // namespace internal 1161 } // namespace internal
1154 } // namespace v8 1162 } // namespace v8
1155 1163
1156 #endif // V8_REGISTER_ALLOCATOR_H_ 1164 #endif // V8_REGISTER_ALLOCATOR_H_
OLDNEW
« no previous file with comments | « no previous file | src/compiler/register-allocator.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698