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 798 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
809 IntVector operands_; | 809 IntVector operands_; |
810 InstructionOperand* output_; | 810 InstructionOperand* output_; |
811 Inputs inputs_; | 811 Inputs inputs_; |
812 }; | 812 }; |
813 | 813 |
814 | 814 |
815 // Analogue of BasicBlock for Instructions instead of Nodes. | 815 // Analogue of BasicBlock for Instructions instead of Nodes. |
816 class InstructionBlock FINAL : public ZoneObject { | 816 class InstructionBlock FINAL : public ZoneObject { |
817 public: | 817 public: |
818 InstructionBlock(Zone* zone, BasicBlock::Id id, | 818 InstructionBlock(Zone* zone, BasicBlock::Id id, |
819 BasicBlock::RpoNumber ao_number, | |
820 BasicBlock::RpoNumber rpo_number, | 819 BasicBlock::RpoNumber rpo_number, |
821 BasicBlock::RpoNumber loop_header, | 820 BasicBlock::RpoNumber loop_header, |
822 BasicBlock::RpoNumber loop_end, bool deferred); | 821 BasicBlock::RpoNumber loop_end, bool deferred); |
823 | 822 |
824 // Instruction indexes (used by the register allocator). | 823 // Instruction indexes (used by the register allocator). |
825 int first_instruction_index() const { | 824 int first_instruction_index() const { |
826 DCHECK(code_start_ >= 0); | 825 DCHECK(code_start_ >= 0); |
827 DCHECK(code_end_ > 0); | 826 DCHECK(code_end_ > 0); |
828 DCHECK(code_end_ >= code_start_); | 827 DCHECK(code_end_ >= code_start_); |
829 return code_start_; | 828 return code_start_; |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
898 struct PrintableInstructionSequence; | 897 struct PrintableInstructionSequence; |
899 | 898 |
900 | 899 |
901 // Represents architecture-specific generated code before, during, and after | 900 // Represents architecture-specific generated code before, during, and after |
902 // register allocation. | 901 // register allocation. |
903 // TODO(titzer): s/IsDouble/IsFloat64/ | 902 // TODO(titzer): s/IsDouble/IsFloat64/ |
904 class InstructionSequence FINAL : public ZoneObject { | 903 class InstructionSequence FINAL : public ZoneObject { |
905 public: | 904 public: |
906 static InstructionBlocks* InstructionBlocksFor(Zone* zone, | 905 static InstructionBlocks* InstructionBlocksFor(Zone* zone, |
907 const Schedule* schedule); | 906 const Schedule* schedule); |
| 907 // Puts the deferred blocks last. |
| 908 static void ComputeAssemblyOrder(InstructionBlocks* blocks); |
908 | 909 |
909 InstructionSequence(Zone* zone, InstructionBlocks* instruction_blocks); | 910 InstructionSequence(Zone* zone, InstructionBlocks* instruction_blocks); |
910 | 911 |
911 int NextVirtualRegister() { return next_virtual_register_++; } | 912 int NextVirtualRegister() { return next_virtual_register_++; } |
912 int VirtualRegisterCount() const { return next_virtual_register_; } | 913 int VirtualRegisterCount() const { return next_virtual_register_; } |
913 | 914 |
914 const InstructionBlocks& instruction_blocks() const { | 915 const InstructionBlocks& instruction_blocks() const { |
915 return *instruction_blocks_; | 916 return *instruction_blocks_; |
916 } | 917 } |
917 | 918 |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1048 | 1049 |
1049 | 1050 |
1050 std::ostream& operator<<(std::ostream& os, | 1051 std::ostream& operator<<(std::ostream& os, |
1051 const PrintableInstructionSequence& code); | 1052 const PrintableInstructionSequence& code); |
1052 | 1053 |
1053 } // namespace compiler | 1054 } // namespace compiler |
1054 } // namespace internal | 1055 } // namespace internal |
1055 } // namespace v8 | 1056 } // namespace v8 |
1056 | 1057 |
1057 #endif // V8_COMPILER_INSTRUCTION_H_ | 1058 #endif // V8_COMPILER_INSTRUCTION_H_ |
OLD | NEW |