| 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.optimizers; | 5 part of dart2js.optimizers; |
| 6 | 6 |
| 7 /** | 7 /** |
| 8 * Propagates constants throughout the IR, and replaces branches with fixed | 8 * Propagates constants throughout the IR, and replaces branches with fixed |
| 9 * jumps as well as side-effect free expressions with known constant results. | 9 * jumps as well as side-effect free expressions with known constant results. |
| 10 * Should be followed by the [ShrinkingReducer] pass. | 10 * Should be followed by the [ShrinkingReducer] pass. |
| (...skipping 10 matching lines...) Expand all Loading... |
| 21 // arguments. | 21 // arguments. |
| 22 final dart2js.ConstantSystem _constantSystem; | 22 final dart2js.ConstantSystem _constantSystem; |
| 23 | 23 |
| 24 ConstantPropagator(this._compiler, this._constantSystem); | 24 ConstantPropagator(this._compiler, this._constantSystem); |
| 25 | 25 |
| 26 void rewrite(FunctionDefinition root) { | 26 void rewrite(FunctionDefinition root) { |
| 27 if (root.isAbstract) return; | 27 if (root.isAbstract) return; |
| 28 | 28 |
| 29 // Set all parent pointers. | 29 // Set all parent pointers. |
| 30 | 30 |
| 31 new _ParentVisitor().visit(root); | 31 new ParentVisitor().visit(root); |
| 32 | 32 |
| 33 // Analyze. In this phase, the entire term is analyzed for reachability | 33 // Analyze. In this phase, the entire term is analyzed for reachability |
| 34 // and the constant status of each expression. | 34 // and the constant status of each expression. |
| 35 | 35 |
| 36 _ConstPropagationVisitor analyzer = | 36 _ConstPropagationVisitor analyzer = |
| 37 new _ConstPropagationVisitor(_compiler, _constantSystem); | 37 new _ConstPropagationVisitor(_compiler, _constantSystem); |
| 38 analyzer.analyze(root); | 38 analyzer.analyze(root); |
| 39 | 39 |
| 40 // Transform. Uses the data acquired in the previous analysis phase to | 40 // Transform. Uses the data acquired in the previous analysis phase to |
| 41 // replace branches with fixed targets and side-effect-free expressions | 41 // replace branches with fixed targets and side-effect-free expressions |
| (...skipping 615 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 657 return that; | 657 return that; |
| 658 } | 658 } |
| 659 | 659 |
| 660 if (this.constant == that.constant) { | 660 if (this.constant == that.constant) { |
| 661 return this; | 661 return this; |
| 662 } | 662 } |
| 663 | 663 |
| 664 return NonConst; | 664 return NonConst; |
| 665 } | 665 } |
| 666 } | 666 } |
| OLD | NEW |