| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | |
| 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. | |
| 4 | |
| 5 library cps_ir.optimization.remove_refinements; | |
| 6 | |
| 7 import 'optimizers.dart' show Pass; | |
| 8 import 'cps_ir_nodes.dart'; | |
| 9 | |
| 10 /// Removes all [Refinement] nodes from the IR. | |
| 11 /// | |
| 12 /// This simplifies subsequent passes that don't rely on path-sensitive | |
| 13 /// type information but depend on equality between primitives. | |
| 14 class RemoveRefinements extends TrampolineRecursiveVisitor implements Pass { | |
| 15 String get passName => 'Remove refinement nodes'; | |
| 16 | |
| 17 void rewrite(FunctionDefinition node) { | |
| 18 visit(node); | |
| 19 } | |
| 20 | |
| 21 @override | |
| 22 Expression traverseLetPrim(LetPrim node) { | |
| 23 Expression next = node.body; | |
| 24 if (node.primitive is Refinement) { | |
| 25 Refinement refinement = node.primitive; | |
| 26 Primitive value = refinement.value.definition; | |
| 27 if (refinement.hint != null && value.hint == null) { | |
| 28 value.hint = refinement.hint; | |
| 29 } | |
| 30 refinement..replaceUsesWith(value)..destroy(); | |
| 31 node.remove(); | |
| 32 } | |
| 33 return next; | |
| 34 } | |
| 35 } | |
| OLD | NEW |