| 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 1143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1154 BailoutId bailout_id_; | 1154 BailoutId bailout_id_; |
| 1155 OutputFrameStateCombine frame_state_combine_; | 1155 OutputFrameStateCombine frame_state_combine_; |
| 1156 size_t parameters_count_; | 1156 size_t parameters_count_; |
| 1157 size_t locals_count_; | 1157 size_t locals_count_; |
| 1158 size_t stack_count_; | 1158 size_t stack_count_; |
| 1159 StateValueDescriptor values_; | 1159 StateValueDescriptor values_; |
| 1160 MaybeHandle<SharedFunctionInfo> const shared_info_; | 1160 MaybeHandle<SharedFunctionInfo> const shared_info_; |
| 1161 FrameStateDescriptor* outer_state_; | 1161 FrameStateDescriptor* outer_state_; |
| 1162 }; | 1162 }; |
| 1163 | 1163 |
| 1164 // A deoptimization entry is a pair of the reason why we deoptimize and the |
| 1165 // frame state descriptor that we have to go back to. |
| 1166 class DeoptimizationEntry final { |
| 1167 public: |
| 1168 DeoptimizationEntry() {} |
| 1169 DeoptimizationEntry(FrameStateDescriptor* descriptor, DeoptimizeReason reason) |
| 1170 : descriptor_(descriptor), reason_(reason) {} |
| 1164 | 1171 |
| 1165 typedef ZoneVector<FrameStateDescriptor*> DeoptimizationVector; | 1172 FrameStateDescriptor* descriptor() const { return descriptor_; } |
| 1173 DeoptimizeReason reason() const { return reason_; } |
| 1166 | 1174 |
| 1175 private: |
| 1176 FrameStateDescriptor* descriptor_ = nullptr; |
| 1177 DeoptimizeReason reason_ = DeoptimizeReason::kNoReason; |
| 1178 }; |
| 1179 |
| 1180 typedef ZoneVector<DeoptimizationEntry> DeoptimizationVector; |
| 1167 | 1181 |
| 1168 class PhiInstruction final : public ZoneObject { | 1182 class PhiInstruction final : public ZoneObject { |
| 1169 public: | 1183 public: |
| 1170 typedef ZoneVector<InstructionOperand> Inputs; | 1184 typedef ZoneVector<InstructionOperand> Inputs; |
| 1171 | 1185 |
| 1172 PhiInstruction(Zone* zone, int virtual_register, size_t input_count); | 1186 PhiInstruction(Zone* zone, int virtual_register, size_t input_count); |
| 1173 | 1187 |
| 1174 void SetInput(size_t offset, int virtual_register); | 1188 void SetInput(size_t offset, int virtual_register); |
| 1175 | 1189 |
| 1176 int virtual_register() const { return virtual_register_; } | 1190 int virtual_register() const { return virtual_register_; } |
| (...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1407 int index = op->indexed_value(); | 1421 int index = op->indexed_value(); |
| 1408 DCHECK(index >= 0); | 1422 DCHECK(index >= 0); |
| 1409 DCHECK(index < static_cast<int>(immediates_.size())); | 1423 DCHECK(index < static_cast<int>(immediates_.size())); |
| 1410 return immediates_[index]; | 1424 return immediates_[index]; |
| 1411 } | 1425 } |
| 1412 } | 1426 } |
| 1413 UNREACHABLE(); | 1427 UNREACHABLE(); |
| 1414 return Constant(static_cast<int32_t>(0)); | 1428 return Constant(static_cast<int32_t>(0)); |
| 1415 } | 1429 } |
| 1416 | 1430 |
| 1417 class StateId { | 1431 int AddDeoptimizationEntry(FrameStateDescriptor* descriptor, |
| 1418 public: | 1432 DeoptimizeReason reason); |
| 1419 static StateId FromInt(int id) { return StateId(id); } | 1433 DeoptimizationEntry const& GetDeoptimizationEntry(int deoptimization_id); |
| 1420 int ToInt() const { return id_; } | 1434 int GetDeoptimizationEntryCount() const { |
| 1421 | 1435 return static_cast<int>(deoptimization_entries_.size()); |
| 1422 private: | |
| 1423 explicit StateId(int id) : id_(id) {} | |
| 1424 int id_; | |
| 1425 }; | |
| 1426 | |
| 1427 StateId AddFrameStateDescriptor(FrameStateDescriptor* descriptor); | |
| 1428 FrameStateDescriptor* GetFrameStateDescriptor(StateId deoptimization_id); | |
| 1429 int GetFrameStateDescriptorCount(); | |
| 1430 DeoptimizationVector const& frame_state_descriptors() const { | |
| 1431 return deoptimization_entries_; | |
| 1432 } | 1436 } |
| 1433 | 1437 |
| 1434 RpoNumber InputRpo(Instruction* instr, size_t index); | 1438 RpoNumber InputRpo(Instruction* instr, size_t index); |
| 1435 | 1439 |
| 1436 bool GetSourcePosition(const Instruction* instr, | 1440 bool GetSourcePosition(const Instruction* instr, |
| 1437 SourcePosition* result) const; | 1441 SourcePosition* result) const; |
| 1438 void SetSourcePosition(const Instruction* instr, SourcePosition value); | 1442 void SetSourcePosition(const Instruction* instr, SourcePosition value); |
| 1439 | 1443 |
| 1440 bool ContainsCall() const { | 1444 bool ContainsCall() const { |
| 1441 for (Instruction* instr : instructions_) { | 1445 for (Instruction* instr : instructions_) { |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1486 | 1490 |
| 1487 | 1491 |
| 1488 std::ostream& operator<<(std::ostream& os, | 1492 std::ostream& operator<<(std::ostream& os, |
| 1489 const PrintableInstructionSequence& code); | 1493 const PrintableInstructionSequence& code); |
| 1490 | 1494 |
| 1491 } // namespace compiler | 1495 } // namespace compiler |
| 1492 } // namespace internal | 1496 } // namespace internal |
| 1493 } // namespace v8 | 1497 } // namespace v8 |
| 1494 | 1498 |
| 1495 #endif // V8_COMPILER_INSTRUCTION_H_ | 1499 #endif // V8_COMPILER_INSTRUCTION_H_ |
| OLD | NEW |