OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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_OPTIMIZER_H_ | 5 #ifndef VM_FLOW_GRAPH_OPTIMIZER_H_ |
6 #define VM_FLOW_GRAPH_OPTIMIZER_H_ | 6 #define VM_FLOW_GRAPH_OPTIMIZER_H_ |
7 | 7 |
8 #include "vm/intermediate_language.h" | 8 #include "vm/intermediate_language.h" |
9 #include "vm/flow_graph.h" | 9 #include "vm/flow_graph.h" |
10 | 10 |
11 namespace dart { | 11 namespace dart { |
12 | 12 |
| 13 class CSEInstructionMap; |
13 template <typename T> class GrowableArray; | 14 template <typename T> class GrowableArray; |
14 template <typename T> class DirectChainedHashMap; | 15 class ParsedFunction; |
15 template <typename T> class PointerKeyValueTrait; | |
16 | 16 |
17 class FlowGraphOptimizer : public FlowGraphVisitor { | 17 class FlowGraphOptimizer : public FlowGraphVisitor { |
18 public: | 18 public: |
19 FlowGraphOptimizer(FlowGraph* flow_graph, | 19 FlowGraphOptimizer(FlowGraph* flow_graph, |
20 GrowableArray<Field*>* guarded_fields) | 20 GrowableArray<Field*>* guarded_fields) |
21 : FlowGraphVisitor(flow_graph->reverse_postorder()), | 21 : FlowGraphVisitor(flow_graph->reverse_postorder()), |
22 flow_graph_(flow_graph), | 22 flow_graph_(flow_graph), |
23 guarded_fields_(guarded_fields) { } | 23 guarded_fields_(guarded_fields) { } |
24 virtual ~FlowGraphOptimizer() {} | 24 virtual ~FlowGraphOptimizer() {} |
25 | 25 |
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
170 | 170 |
171 void AddToGuardedFields(Field* field); | 171 void AddToGuardedFields(Field* field); |
172 | 172 |
173 FlowGraph* flow_graph_; | 173 FlowGraph* flow_graph_; |
174 GrowableArray<Field*>* guarded_fields_; | 174 GrowableArray<Field*>* guarded_fields_; |
175 | 175 |
176 DISALLOW_COPY_AND_ASSIGN(FlowGraphOptimizer); | 176 DISALLOW_COPY_AND_ASSIGN(FlowGraphOptimizer); |
177 }; | 177 }; |
178 | 178 |
179 | 179 |
180 class ParsedFunction; | |
181 | |
182 | |
183 // Loop invariant code motion. | 180 // Loop invariant code motion. |
184 class LICM : public ValueObject { | 181 class LICM : public ValueObject { |
185 public: | 182 public: |
186 explicit LICM(FlowGraph* flow_graph); | 183 explicit LICM(FlowGraph* flow_graph); |
187 | 184 |
188 void Optimize(); | 185 void Optimize(); |
189 | 186 |
190 private: | 187 private: |
191 FlowGraph* flow_graph() const { return flow_graph_; } | 188 FlowGraph* flow_graph() const { return flow_graph_; } |
192 | 189 |
(...skipping 15 matching lines...) Expand all Loading... |
208 class DominatorBasedCSE : public AllStatic { | 205 class DominatorBasedCSE : public AllStatic { |
209 public: | 206 public: |
210 // Return true, if the optimization changed the flow graph. | 207 // Return true, if the optimization changed the flow graph. |
211 // False, if nothing changed. | 208 // False, if nothing changed. |
212 static bool Optimize(FlowGraph* graph); | 209 static bool Optimize(FlowGraph* graph); |
213 | 210 |
214 private: | 211 private: |
215 static bool OptimizeRecursive( | 212 static bool OptimizeRecursive( |
216 FlowGraph* graph, | 213 FlowGraph* graph, |
217 BlockEntryInstr* entry, | 214 BlockEntryInstr* entry, |
218 DirectChainedHashMap<PointerKeyValueTrait<Instruction> >* map); | 215 CSEInstructionMap* map); |
219 }; | 216 }; |
220 | 217 |
221 | 218 |
222 // Sparse conditional constant propagation and unreachable code elimination. | 219 // Sparse conditional constant propagation and unreachable code elimination. |
223 // Assumes that use lists are computed and preserves them. | 220 // Assumes that use lists are computed and preserves them. |
224 class ConstantPropagator : public FlowGraphVisitor { | 221 class ConstantPropagator : public FlowGraphVisitor { |
225 public: | 222 public: |
226 ConstantPropagator(FlowGraph* graph, | 223 ConstantPropagator(FlowGraph* graph, |
227 const GrowableArray<BlockEntryInstr*>& ignored); | 224 const GrowableArray<BlockEntryInstr*>& ignored); |
228 | 225 |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
318 // platform. | 315 // platform. |
319 class IfConverter : public AllStatic { | 316 class IfConverter : public AllStatic { |
320 public: | 317 public: |
321 static void Simplify(FlowGraph* flow_graph); | 318 static void Simplify(FlowGraph* flow_graph); |
322 }; | 319 }; |
323 | 320 |
324 | 321 |
325 } // namespace dart | 322 } // namespace dart |
326 | 323 |
327 #endif // VM_FLOW_GRAPH_OPTIMIZER_H_ | 324 #endif // VM_FLOW_GRAPH_OPTIMIZER_H_ |
OLD | NEW |