Chromium Code Reviews| 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 <iosfwd> | 9 #include <iosfwd> |
| 10 #include <map> | 10 #include <map> |
| (...skipping 749 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 760 // Represents architecture-specific generated code before, during, and after | 760 // Represents architecture-specific generated code before, during, and after |
| 761 // register allocation. | 761 // register allocation. |
| 762 // TODO(titzer): s/IsDouble/IsFloat64/ | 762 // TODO(titzer): s/IsDouble/IsFloat64/ |
| 763 class InstructionSequence FINAL { | 763 class InstructionSequence FINAL { |
| 764 public: | 764 public: |
| 765 InstructionSequence(Linkage* linkage, Graph* graph, Schedule* schedule); | 765 InstructionSequence(Linkage* linkage, Graph* graph, Schedule* schedule); |
| 766 | 766 |
| 767 int NextVirtualRegister() { return next_virtual_register_++; } | 767 int NextVirtualRegister() { return next_virtual_register_++; } |
| 768 int VirtualRegisterCount() const { return next_virtual_register_; } | 768 int VirtualRegisterCount() const { return next_virtual_register_; } |
| 769 | 769 |
| 770 int ValueCount() const { return graph_->NodeCount(); } | 770 int ValueCount() const { return node_count_; } |
|
Benedikt Meurer
2014/10/13 08:01:51
Nit: Can we rename this to node_count() on the way
| |
| 771 | 771 |
| 772 int BasicBlockCount() const { | 772 int BasicBlockCount() const { |
| 773 return static_cast<int>(schedule_->rpo_order()->size()); | 773 return static_cast<int>(schedule_->rpo_order()->size()); |
| 774 } | 774 } |
| 775 | 775 |
| 776 BasicBlock* BlockAt(int rpo_number) const { | 776 BasicBlock* BlockAt(int rpo_number) const { |
| 777 return (*schedule_->rpo_order())[rpo_number]; | 777 return (*schedule_->rpo_order())[rpo_number]; |
| 778 } | 778 } |
| 779 | 779 |
| 780 BasicBlock* GetContainingLoop(BasicBlock* block) { | 780 BasicBlock* GetContainingLoop(BasicBlock* block) { |
| (...skipping 27 matching lines...) Expand all Loading... | |
| 808 return GapInstruction::cast(InstructionAt(index)); | 808 return GapInstruction::cast(InstructionAt(index)); |
| 809 } | 809 } |
| 810 bool IsGapAt(int index) const { return InstructionAt(index)->IsGapMoves(); } | 810 bool IsGapAt(int index) const { return InstructionAt(index)->IsGapMoves(); } |
| 811 Instruction* InstructionAt(int index) const { | 811 Instruction* InstructionAt(int index) const { |
| 812 DCHECK(index >= 0); | 812 DCHECK(index >= 0); |
| 813 DCHECK(index < static_cast<int>(instructions_.size())); | 813 DCHECK(index < static_cast<int>(instructions_.size())); |
| 814 return instructions_[index]; | 814 return instructions_[index]; |
| 815 } | 815 } |
| 816 | 816 |
| 817 Frame* frame() { return &frame_; } | 817 Frame* frame() { return &frame_; } |
| 818 Graph* graph() const { return graph_; } | |
| 819 Isolate* isolate() const { return zone()->isolate(); } | 818 Isolate* isolate() const { return zone()->isolate(); } |
| 820 Linkage* linkage() const { return linkage_; } | 819 Linkage* linkage() const { return linkage_; } |
| 821 Schedule* schedule() const { return schedule_; } | 820 Schedule* schedule() const { return schedule_; } |
| 822 const PointerMapDeque* pointer_maps() const { return &pointer_maps_; } | 821 const PointerMapDeque* pointer_maps() const { return &pointer_maps_; } |
| 823 Zone* zone() const { return graph_->zone(); } | 822 Zone* zone() const { return zone_; } |
| 824 | 823 |
| 825 // Used by the code generator while adding instructions. | 824 // Used by the code generator while adding instructions. |
| 826 int AddInstruction(Instruction* instr, BasicBlock* block); | 825 int AddInstruction(Instruction* instr, BasicBlock* block); |
| 827 void StartBlock(BasicBlock* block); | 826 void StartBlock(BasicBlock* block); |
| 828 void EndBlock(BasicBlock* block); | 827 void EndBlock(BasicBlock* block); |
| 829 | 828 |
| 830 int AddConstant(Node* node, Constant constant) { | 829 int AddConstant(Node* node, Constant constant) { |
| 831 int virtual_register = GetVirtualRegister(node); | 830 int virtual_register = GetVirtualRegister(node); |
| 832 DCHECK(constants_.find(virtual_register) == constants_.end()); | 831 DCHECK(constants_.find(virtual_register) == constants_.end()); |
| 833 constants_.insert(std::make_pair(virtual_register, constant)); | 832 constants_.insert(std::make_pair(virtual_register, constant)); |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 867 StateId AddFrameStateDescriptor(FrameStateDescriptor* descriptor); | 866 StateId AddFrameStateDescriptor(FrameStateDescriptor* descriptor); |
| 868 FrameStateDescriptor* GetFrameStateDescriptor(StateId deoptimization_id); | 867 FrameStateDescriptor* GetFrameStateDescriptor(StateId deoptimization_id); |
| 869 int GetFrameStateDescriptorCount(); | 868 int GetFrameStateDescriptorCount(); |
| 870 | 869 |
| 871 private: | 870 private: |
| 872 friend std::ostream& operator<<(std::ostream& os, | 871 friend std::ostream& operator<<(std::ostream& os, |
| 873 const InstructionSequence& code); | 872 const InstructionSequence& code); |
| 874 | 873 |
| 875 typedef std::set<int, std::less<int>, ZoneIntAllocator> VirtualRegisterSet; | 874 typedef std::set<int, std::less<int>, ZoneIntAllocator> VirtualRegisterSet; |
| 876 | 875 |
| 877 Graph* graph_; | 876 Zone* zone_; |
| 877 int node_count_; | |
| 878 int* node_map_; | 878 int* node_map_; |
| 879 Linkage* linkage_; | 879 Linkage* linkage_; |
| 880 Schedule* schedule_; | 880 Schedule* schedule_; |
| 881 ConstantMap constants_; | 881 ConstantMap constants_; |
| 882 ConstantDeque immediates_; | 882 ConstantDeque immediates_; |
| 883 InstructionDeque instructions_; | 883 InstructionDeque instructions_; |
| 884 int next_virtual_register_; | 884 int next_virtual_register_; |
| 885 PointerMapDeque pointer_maps_; | 885 PointerMapDeque pointer_maps_; |
| 886 VirtualRegisterSet doubles_; | 886 VirtualRegisterSet doubles_; |
| 887 VirtualRegisterSet references_; | 887 VirtualRegisterSet references_; |
| 888 Frame frame_; | 888 Frame frame_; |
| 889 DeoptimizationVector deoptimization_entries_; | 889 DeoptimizationVector deoptimization_entries_; |
| 890 }; | 890 }; |
| 891 | 891 |
| 892 std::ostream& operator<<(std::ostream& os, const InstructionSequence& code); | 892 std::ostream& operator<<(std::ostream& os, const InstructionSequence& code); |
| 893 | 893 |
| 894 } // namespace compiler | 894 } // namespace compiler |
| 895 } // namespace internal | 895 } // namespace internal |
| 896 } // namespace v8 | 896 } // namespace v8 |
| 897 | 897 |
| 898 #endif // V8_COMPILER_INSTRUCTION_H_ | 898 #endif // V8_COMPILER_INSTRUCTION_H_ |
| OLD | NEW |