OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #ifndef VM_INTERMEDIATE_LANGUAGE_H_ | 5 #ifndef VM_INTERMEDIATE_LANGUAGE_H_ |
6 #define VM_INTERMEDIATE_LANGUAGE_H_ | 6 #define VM_INTERMEDIATE_LANGUAGE_H_ |
7 | 7 |
8 #include "vm/allocation.h" | 8 #include "vm/allocation.h" |
9 #include "vm/ast.h" | 9 #include "vm/ast.h" |
10 #include "vm/growable_array.h" | 10 #include "vm/growable_array.h" |
(...skipping 879 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
890 | 890 |
891 void Unsupported(FlowGraphCompiler* compiler); | 891 void Unsupported(FlowGraphCompiler* compiler); |
892 | 892 |
893 protected: | 893 protected: |
894 // GetDeoptId and/or CopyDeoptIdFrom. | 894 // GetDeoptId and/or CopyDeoptIdFrom. |
895 friend class CallSiteInliner; | 895 friend class CallSiteInliner; |
896 friend class LICM; | 896 friend class LICM; |
897 friend class ComparisonInstr; | 897 friend class ComparisonInstr; |
898 friend class Scheduler; | 898 friend class Scheduler; |
899 friend class BlockEntryInstr; | 899 friend class BlockEntryInstr; |
| 900 friend class CatchBlockEntryInstr; // deopt_id_ |
900 | 901 |
901 // Fetch deopt id without checking if this computation can deoptimize. | 902 // Fetch deopt id without checking if this computation can deoptimize. |
902 intptr_t GetDeoptId() const { | 903 intptr_t GetDeoptId() const { |
903 return deopt_id_; | 904 return deopt_id_; |
904 } | 905 } |
905 | 906 |
906 void CopyDeoptIdFrom(const Instruction& instr) { | 907 void CopyDeoptIdFrom(const Instruction& instr) { |
907 deopt_id_ = instr.deopt_id_; | 908 deopt_id_ = instr.deopt_id_; |
908 } | 909 } |
909 | 910 |
(...skipping 647 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1557 | 1558 |
1558 class CatchBlockEntryInstr : public BlockEntryInstr { | 1559 class CatchBlockEntryInstr : public BlockEntryInstr { |
1559 public: | 1560 public: |
1560 CatchBlockEntryInstr(intptr_t block_id, | 1561 CatchBlockEntryInstr(intptr_t block_id, |
1561 intptr_t try_index, | 1562 intptr_t try_index, |
1562 GraphEntryInstr* graph_entry, | 1563 GraphEntryInstr* graph_entry, |
1563 const Array& handler_types, | 1564 const Array& handler_types, |
1564 intptr_t catch_try_index, | 1565 intptr_t catch_try_index, |
1565 const LocalVariable& exception_var, | 1566 const LocalVariable& exception_var, |
1566 const LocalVariable& stacktrace_var, | 1567 const LocalVariable& stacktrace_var, |
1567 bool needs_stacktrace) | 1568 bool needs_stacktrace, |
| 1569 intptr_t deopt_id) |
1568 : BlockEntryInstr(block_id, try_index), | 1570 : BlockEntryInstr(block_id, try_index), |
1569 graph_entry_(graph_entry), | 1571 graph_entry_(graph_entry), |
1570 predecessor_(NULL), | 1572 predecessor_(NULL), |
1571 catch_handler_types_(Array::ZoneHandle(handler_types.raw())), | 1573 catch_handler_types_(Array::ZoneHandle(handler_types.raw())), |
1572 catch_try_index_(catch_try_index), | 1574 catch_try_index_(catch_try_index), |
1573 exception_var_(exception_var), | 1575 exception_var_(exception_var), |
1574 stacktrace_var_(stacktrace_var), | 1576 stacktrace_var_(stacktrace_var), |
1575 needs_stacktrace_(needs_stacktrace) { } | 1577 needs_stacktrace_(needs_stacktrace) { |
| 1578 deopt_id_ = deopt_id; |
| 1579 } |
1576 | 1580 |
1577 DECLARE_INSTRUCTION(CatchBlockEntry) | 1581 DECLARE_INSTRUCTION(CatchBlockEntry) |
1578 | 1582 |
1579 virtual intptr_t PredecessorCount() const { | 1583 virtual intptr_t PredecessorCount() const { |
1580 return (predecessor_ == NULL) ? 0 : 1; | 1584 return (predecessor_ == NULL) ? 0 : 1; |
1581 } | 1585 } |
1582 virtual BlockEntryInstr* PredecessorAt(intptr_t index) const { | 1586 virtual BlockEntryInstr* PredecessorAt(intptr_t index) const { |
1583 ASSERT((index == 0) && (predecessor_ != NULL)); | 1587 ASSERT((index == 0) && (predecessor_ != NULL)); |
1584 return predecessor_; | 1588 return predecessor_; |
1585 } | 1589 } |
(...skipping 6710 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8296 LocationSummary* Name::MakeLocationSummary(Zone* zone, bool opt) const { \ | 8300 LocationSummary* Name::MakeLocationSummary(Zone* zone, bool opt) const { \ |
8297 UNIMPLEMENTED(); \ | 8301 UNIMPLEMENTED(); \ |
8298 return NULL; \ | 8302 return NULL; \ |
8299 } \ | 8303 } \ |
8300 void Name::EmitNativeCode(FlowGraphCompiler* compiler) { UNIMPLEMENTED(); } | 8304 void Name::EmitNativeCode(FlowGraphCompiler* compiler) { UNIMPLEMENTED(); } |
8301 | 8305 |
8302 | 8306 |
8303 } // namespace dart | 8307 } // namespace dart |
8304 | 8308 |
8305 #endif // VM_INTERMEDIATE_LANGUAGE_H_ | 8309 #endif // VM_INTERMEDIATE_LANGUAGE_H_ |
OLD | NEW |