Chromium Code Reviews| Index: runtime/vm/flow_graph.cc | 
| diff --git a/runtime/vm/flow_graph.cc b/runtime/vm/flow_graph.cc | 
| index 34ca6932d6aad8b34e57e39fe44fab42b493ba5d..6157a160756049d76e732e80ba8ece9715b067ca 100644 | 
| --- a/runtime/vm/flow_graph.cc | 
| +++ b/runtime/vm/flow_graph.cc | 
| @@ -847,6 +847,24 @@ void FlowGraph::RemoveDeadPhis(GrowableArray<PhiInstr*>* live_phis) { | 
| } | 
| +void FlowGraph::RemoveRedefinitions() { | 
| 
 
Florian Schneider
2013/05/03 10:41:36
This is very similar to what we do with Constraint
 
Kevin Millikin (Google)
2013/05/03 11:47:38
That one uses a maintained list of constraints, th
 
 | 
| + // Remove redefinition instructions inserted to inhibit hoisting. | 
| + for (BlockIterator block_it = reverse_postorder_iterator(); | 
| + !block_it.Done(); | 
| + block_it.Advance()) { | 
| + for (ForwardInstructionIterator instr_it(block_it.Current()); | 
| + !instr_it.Done(); | 
| + instr_it.Advance()) { | 
| + RedefinitionInstr* redefinition = instr_it.Current()->AsRedefinition(); | 
| + if (redefinition != NULL) { | 
| + redefinition->ReplaceUsesWith(redefinition->value()->definition()); | 
| + instr_it.RemoveCurrentFromGraph(); | 
| + } | 
| + } | 
| + } | 
| +} | 
| + | 
| + | 
| // Find the natural loop for the back edge m->n and attach loop information | 
| // to block n (loop header). The algorithm is described in "Advanced Compiler | 
| // Design & Implementation" (Muchnick) p192. |