| OLD | NEW |
| 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, 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 interface OptimizationPhase { | 5 interface OptimizationPhase { |
| 6 String get name(); | 6 String get name(); |
| 7 void visitGraph(HGraph graph); | 7 void visitGraph(HGraph graph); |
| 8 } | 8 } |
| 9 | 9 |
| 10 class SsaOptimizerTask extends CompilerTask { | 10 class SsaOptimizerTask extends CompilerTask { |
| (...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 188 HInstruction value = node.guarded; | 188 HInstruction value = node.guarded; |
| 189 return (value.type.combine(node.type) == value.type) ? value : node; | 189 return (value.type.combine(node.type) == value.type) ? value : node; |
| 190 } | 190 } |
| 191 | 191 |
| 192 HInstruction visitIntegerCheck(HIntegerCheck node) { | 192 HInstruction visitIntegerCheck(HIntegerCheck node) { |
| 193 HInstruction value = node.value; | 193 HInstruction value = node.value; |
| 194 return value.isInteger() ? value : node; | 194 return value.isInteger() ? value : node; |
| 195 } | 195 } |
| 196 | 196 |
| 197 HInstruction visitIs(HIs node) { | 197 HInstruction visitIs(HIs node) { |
| 198 Element element = node.typeExpression; | 198 Type type = node.typeName; |
| 199 Element element = type.element; |
| 199 if (element.kind === ElementKind.TYPE_VARIABLE) { | 200 if (element.kind === ElementKind.TYPE_VARIABLE) { |
| 200 compiler.unimplemented("visitIs for type variables"); | 201 compiler.unimplemented("visitIs for type variables"); |
| 201 } | 202 } |
| 202 | 203 |
| 203 HType expressionType = node.expression.type; | 204 HType expressionType = node.expression.type; |
| 204 if (element === compiler.objectClass | 205 if (element === compiler.objectClass |
| 205 || element === compiler.dynamicClass) { | 206 || element === compiler.dynamicClass) { |
| 206 return graph.addConstantBool(true); | 207 return graph.addConstantBool(true); |
| 207 } else if (expressionType.isInteger()) { | 208 } else if (expressionType.isInteger()) { |
| 208 if (element === compiler.intClass || element === compiler.numClass) { | 209 if (element === compiler.intClass || element === compiler.numClass) { |
| (...skipping 495 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 704 } | 705 } |
| 705 } | 706 } |
| 706 if (!canBeMoved) continue; | 707 if (!canBeMoved) continue; |
| 707 | 708 |
| 708 // This is safe because we are running after GVN. | 709 // This is safe because we are running after GVN. |
| 709 // TODO(ngeoffray): ensure GVN has been run. | 710 // TODO(ngeoffray): ensure GVN has been run. |
| 710 set_.add(current); | 711 set_.add(current); |
| 711 } | 712 } |
| 712 } | 713 } |
| 713 } | 714 } |
| OLD | NEW |