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_COMPILER_INSTRUCTION_H_ | 5 #ifndef V8_COMPILER_INSTRUCTION_H_ |
6 #define V8_COMPILER_INSTRUCTION_H_ | 6 #define V8_COMPILER_INSTRUCTION_H_ |
7 | 7 |
8 #include <deque> | 8 #include <deque> |
9 #include <map> | 9 #include <map> |
10 #include <set> | 10 #include <set> |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
82 // Calls SetUpCache()/TearDownCache() for each subclass. | 82 // Calls SetUpCache()/TearDownCache() for each subclass. |
83 static void SetUpCaches(); | 83 static void SetUpCaches(); |
84 static void TearDownCaches(); | 84 static void TearDownCaches(); |
85 | 85 |
86 protected: | 86 protected: |
87 typedef BitField<Kind, 0, 3> KindField; | 87 typedef BitField<Kind, 0, 3> KindField; |
88 | 88 |
89 unsigned value_; | 89 unsigned value_; |
90 }; | 90 }; |
91 | 91 |
92 typedef std::vector<InstructionOperand*, zone_allocator<InstructionOperand*> > | 92 typedef ZoneVector<InstructionOperand*> InstructionOperandVector; |
93 InstructionOperandVector; | |
94 | 93 |
95 OStream& operator<<(OStream& os, const InstructionOperand& op); | 94 OStream& operator<<(OStream& os, const InstructionOperand& op); |
96 | 95 |
97 class UnallocatedOperand : public InstructionOperand { | 96 class UnallocatedOperand : public InstructionOperand { |
98 public: | 97 public: |
99 enum BasicPolicy { FIXED_SLOT, EXTENDED_POLICY }; | 98 enum BasicPolicy { FIXED_SLOT, EXTENDED_POLICY }; |
100 | 99 |
101 enum ExtendedPolicy { | 100 enum ExtendedPolicy { |
102 NONE, | 101 NONE, |
103 ANY, | 102 ANY, |
(...skipping 614 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
718 | 717 |
719 private: | 718 private: |
720 BailoutId bailout_id_; | 719 BailoutId bailout_id_; |
721 int parameters_count_; | 720 int parameters_count_; |
722 int locals_count_; | 721 int locals_count_; |
723 int stack_count_; | 722 int stack_count_; |
724 }; | 723 }; |
725 | 724 |
726 OStream& operator<<(OStream& os, const Constant& constant); | 725 OStream& operator<<(OStream& os, const Constant& constant); |
727 | 726 |
728 typedef std::deque<Constant, zone_allocator<Constant> > ConstantDeque; | 727 typedef ZoneDeque<Constant> ConstantDeque; |
729 typedef std::map<int, Constant, std::less<int>, | 728 typedef std::map<int, Constant, std::less<int>, |
730 zone_allocator<std::pair<int, Constant> > > ConstantMap; | 729 zone_allocator<std::pair<int, Constant> > > ConstantMap; |
731 | 730 |
732 | 731 typedef ZoneDeque<Instruction*> InstructionDeque; |
733 typedef std::deque<Instruction*, zone_allocator<Instruction*> > | 732 typedef ZoneDeque<PointerMap*> PointerMapDeque; |
734 InstructionDeque; | 733 typedef ZoneVector<FrameStateDescriptor*> DeoptimizationVector; |
735 typedef std::deque<PointerMap*, zone_allocator<PointerMap*> > PointerMapDeque; | |
736 typedef std::vector<FrameStateDescriptor*, | |
737 zone_allocator<FrameStateDescriptor*> > | |
738 DeoptimizationVector; | |
739 | |
740 | 734 |
741 // Represents architecture-specific generated code before, during, and after | 735 // Represents architecture-specific generated code before, during, and after |
742 // register allocation. | 736 // register allocation. |
743 // TODO(titzer): s/IsDouble/IsFloat64/ | 737 // TODO(titzer): s/IsDouble/IsFloat64/ |
744 class InstructionSequence V8_FINAL { | 738 class InstructionSequence V8_FINAL { |
745 public: | 739 public: |
746 InstructionSequence(Linkage* linkage, Graph* graph, Schedule* schedule) | 740 InstructionSequence(Linkage* linkage, Graph* graph, Schedule* schedule) |
747 : graph_(graph), | 741 : graph_(graph), |
748 linkage_(linkage), | 742 linkage_(linkage), |
749 schedule_(schedule), | 743 schedule_(schedule), |
750 constants_(ConstantMap::key_compare(), | 744 constants_(ConstantMap::key_compare(), |
751 ConstantMap::allocator_type(zone())), | 745 ConstantMap::allocator_type(zone())), |
752 immediates_(ConstantDeque::allocator_type(zone())), | 746 immediates_(zone()), |
753 instructions_(InstructionDeque::allocator_type(zone())), | 747 instructions_(zone()), |
754 next_virtual_register_(graph->NodeCount()), | 748 next_virtual_register_(graph->NodeCount()), |
755 pointer_maps_(PointerMapDeque::allocator_type(zone())), | 749 pointer_maps_(zone()), |
756 doubles_(std::less<int>(), VirtualRegisterSet::allocator_type(zone())), | 750 doubles_(std::less<int>(), VirtualRegisterSet::allocator_type(zone())), |
757 references_(std::less<int>(), | 751 references_(std::less<int>(), |
758 VirtualRegisterSet::allocator_type(zone())), | 752 VirtualRegisterSet::allocator_type(zone())), |
759 deoptimization_entries_(DeoptimizationVector::allocator_type(zone())) {} | 753 deoptimization_entries_(zone()) {} |
760 | 754 |
761 int NextVirtualRegister() { return next_virtual_register_++; } | 755 int NextVirtualRegister() { return next_virtual_register_++; } |
762 int VirtualRegisterCount() const { return next_virtual_register_; } | 756 int VirtualRegisterCount() const { return next_virtual_register_; } |
763 | 757 |
764 int ValueCount() const { return graph_->NodeCount(); } | 758 int ValueCount() const { return graph_->NodeCount(); } |
765 | 759 |
766 int BasicBlockCount() const { | 760 int BasicBlockCount() const { |
767 return static_cast<int>(schedule_->rpo_order()->size()); | 761 return static_cast<int>(schedule_->rpo_order()->size()); |
768 } | 762 } |
769 | 763 |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
867 DeoptimizationVector deoptimization_entries_; | 861 DeoptimizationVector deoptimization_entries_; |
868 }; | 862 }; |
869 | 863 |
870 OStream& operator<<(OStream& os, const InstructionSequence& code); | 864 OStream& operator<<(OStream& os, const InstructionSequence& code); |
871 | 865 |
872 } // namespace compiler | 866 } // namespace compiler |
873 } // namespace internal | 867 } // namespace internal |
874 } // namespace v8 | 868 } // namespace v8 |
875 | 869 |
876 #endif // V8_COMPILER_INSTRUCTION_H_ | 870 #endif // V8_COMPILER_INSTRUCTION_H_ |
OLD | NEW |