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_FLOW_GRAPH_H_ | 5 #ifndef VM_FLOW_GRAPH_H_ |
6 #define VM_FLOW_GRAPH_H_ | 6 #define VM_FLOW_GRAPH_H_ |
7 | 7 |
8 #include "vm/growable_array.h" | 8 #include "vm/growable_array.h" |
9 #include "vm/intermediate_language.h" | 9 #include "vm/intermediate_language.h" |
10 #include "vm/parser.h" | 10 #include "vm/parser.h" |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
126 // Always allocate a second index. This index is unused except | 126 // Always allocate a second index. This index is unused except |
127 // for Definitions with register pair outputs. | 127 // for Definitions with register pair outputs. |
128 alloc_ssa_temp_index(); | 128 alloc_ssa_temp_index(); |
129 } | 129 } |
130 | 130 |
131 intptr_t InstructionCount() const; | 131 intptr_t InstructionCount() const; |
132 | 132 |
133 ConstantInstr* GetConstant(const Object& object); | 133 ConstantInstr* GetConstant(const Object& object); |
134 void AddToInitialDefinitions(Definition* defn); | 134 void AddToInitialDefinitions(Definition* defn); |
135 | 135 |
| 136 enum UseKind { kEffect, kValue }; |
| 137 |
136 void InsertBefore(Instruction* next, | 138 void InsertBefore(Instruction* next, |
137 Instruction* instr, | 139 Instruction* instr, |
138 Environment* env, | 140 Environment* env, |
139 Definition::UseKind use_kind); | 141 UseKind use_kind); |
140 void InsertAfter(Instruction* prev, | 142 void InsertAfter(Instruction* prev, |
141 Instruction* instr, | 143 Instruction* instr, |
142 Environment* env, | 144 Environment* env, |
143 Definition::UseKind use_kind); | 145 UseKind use_kind); |
144 Instruction* AppendTo(Instruction* prev, | 146 Instruction* AppendTo(Instruction* prev, |
145 Instruction* instr, | 147 Instruction* instr, |
146 Environment* env, | 148 Environment* env, |
147 Definition::UseKind use_kind); | 149 UseKind use_kind); |
148 | 150 |
149 // Operations on the flow graph. | 151 // Operations on the flow graph. |
150 void ComputeSSA(intptr_t next_virtual_register_number, | 152 void ComputeSSA(intptr_t next_virtual_register_number, |
151 ZoneGrowableArray<Definition*>* inlining_parameters); | 153 ZoneGrowableArray<Definition*>* inlining_parameters); |
152 | 154 |
153 // TODO(zerny): Once the SSA is feature complete this should be removed. | 155 // TODO(zerny): Once the SSA is feature complete this should be removed. |
154 void Bailout(const char* reason) const; | 156 void Bailout(const char* reason) const; |
155 | 157 |
156 #ifdef DEBUG | 158 #ifdef DEBUG |
157 // Verification methods for debugging. | 159 // Verification methods for debugging. |
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
392 // Per block sets of available blocks. Block A is available at the block B if | 394 // Per block sets of available blocks. Block A is available at the block B if |
393 // and only if A dominates B and all paths from A to B are free of side | 395 // and only if A dominates B and all paths from A to B are free of side |
394 // effects. | 396 // effects. |
395 GrowableArray<BitVector*> available_at_; | 397 GrowableArray<BitVector*> available_at_; |
396 }; | 398 }; |
397 | 399 |
398 | 400 |
399 } // namespace dart | 401 } // namespace dart |
400 | 402 |
401 #endif // VM_FLOW_GRAPH_H_ | 403 #endif // VM_FLOW_GRAPH_H_ |
OLD | NEW |