| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, 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 part of dart2js.cps_ir.optimizers; | 5 part of dart2js.cps_ir.optimizers; |
| 6 | 6 |
| 7 /// Eliminate redundant phis from the given [FunctionDefinition]. | 7 /// Eliminate redundant phis from the given [FunctionDefinition]. |
| 8 /// | 8 /// |
| 9 /// Phis in this case are [Continuations] together with corresponding | 9 /// Phis in this case are [Continuations] together with corresponding |
| 10 /// [InvokeContinuation]s. A [Continuation] parameter at position i is redundant | 10 /// [InvokeContinuation]s. A [Continuation] parameter at position i is redundant |
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 134 } | 134 } |
| 135 | 135 |
| 136 // Remove trailing items from parameter and argument lists. | 136 // Remove trailing items from parameter and argument lists. |
| 137 cont.parameters.length = dst; | 137 cont.parameters.length = dst; |
| 138 for (InvokeContinuation invoke in invokes) { | 138 for (InvokeContinuation invoke in invokes) { |
| 139 invoke.arguments.length = dst; | 139 invoke.arguments.length = dst; |
| 140 } | 140 } |
| 141 } | 141 } |
| 142 | 142 |
| 143 void processLetCont(LetCont node) { | 143 void processLetCont(LetCont node) { |
| 144 workSet.add(node.continuation); | 144 node.continuations.forEach(workSet.add); |
| 145 } | 145 } |
| 146 } | 146 } |
| 147 | 147 |
| 148 /// Returns true, iff [letCont] is not scope of [definition]. | 148 /// Returns true, iff [letCont] is not scope of [definition]. |
| 149 /// Linear in the depth of definition within the IR graph. | 149 /// Linear in the depth of definition within the IR graph. |
| 150 bool _isInScopeOf(LetCont letCont, Definition definition) { | 150 bool _isInScopeOf(LetCont letCont, Definition definition) { |
| 151 for (Node node = definition.parent; node != null; node = node.parent) { | 151 for (Node node = definition.parent; node != null; node = node.parent) { |
| 152 if (node == letCont) { | 152 if (node == letCont) { |
| 153 return false; | 153 return false; |
| 154 } | 154 } |
| (...skipping 16 matching lines...) Expand all Loading... |
| 171 | 171 |
| 172 // Insert it just below the binding of definition. | 172 // Insert it just below the binding of definition. |
| 173 InteriorNode binding = definition.parent; | 173 InteriorNode binding = definition.parent; |
| 174 | 174 |
| 175 letCont.body = binding.body; | 175 letCont.body = binding.body; |
| 176 binding.body.parent = letCont; | 176 binding.body.parent = letCont; |
| 177 | 177 |
| 178 binding.body = letCont; | 178 binding.body = letCont; |
| 179 letCont.parent = binding; | 179 letCont.parent = binding; |
| 180 } | 180 } |
| OLD | NEW |