Index: pkg/compiler/lib/src/ssa/optimize.dart |
diff --git a/pkg/compiler/lib/src/ssa/optimize.dart b/pkg/compiler/lib/src/ssa/optimize.dart |
index 28f0632fd1ad6a96d65176f166615ed9a5305a26..3672a9b135ef0aad3e12576af994aaba3d0e16d1 100644 |
--- a/pkg/compiler/lib/src/ssa/optimize.dart |
+++ b/pkg/compiler/lib/src/ssa/optimize.dart |
@@ -46,9 +46,9 @@ class SsaOptimizerTask extends CompilerTask { |
// After type propagation, more instructions can be |
// simplified. |
new SsaInstructionSimplifier(constantSystem, backend, work), |
- new SsaCheckInserter(backend, work, context.boundsChecked), |
+ new SsaCheckInserter(compiler, backend, work, context.boundsChecked), |
new SsaInstructionSimplifier(constantSystem, backend, work), |
- new SsaCheckInserter(backend, work, context.boundsChecked), |
+ new SsaCheckInserter(compiler, backend, work, context.boundsChecked), |
new SsaTypePropagator(compiler), |
// Run a dead code eliminator before LICM because dead |
// interceptors are often in the way of LICM'able instructions. |
@@ -65,7 +65,7 @@ class SsaOptimizerTask extends CompilerTask { |
// Previous optimizations may have generated new |
// opportunities for instruction simplification. |
new SsaInstructionSimplifier(constantSystem, backend, work), |
- new SsaCheckInserter(backend, work, context.boundsChecked), |
+ new SsaCheckInserter(compiler, backend, work, context.boundsChecked), |
new SsaSimplifyInterceptors(compiler, constantSystem, work), |
dce = new SsaDeadCodeEliminator(compiler), |
new SsaTypePropagator(compiler)]; |
@@ -76,7 +76,8 @@ class SsaOptimizerTask extends CompilerTask { |
new SsaCodeMotion(), |
new SsaValueRangeAnalyzer(compiler, constantSystem, work), |
new SsaInstructionSimplifier(constantSystem, backend, work), |
- new SsaCheckInserter(backend, work, context.boundsChecked), |
+ new SsaCheckInserter( |
+ compiler, backend, work, context.boundsChecked), |
new SsaSimplifyInterceptors(compiler, constantSystem, work), |
new SsaDeadCodeEliminator(compiler)]; |
} else { |
@@ -886,16 +887,24 @@ class SsaInstructionSimplifier extends HBaseVisitor |
class SsaCheckInserter extends HBaseVisitor implements OptimizationPhase { |
final Set<HInstruction> boundsChecked; |
final CodegenWorkItem work; |
+ final Compiler compiler; |
final JavaScriptBackend backend; |
final String name = "SsaCheckInserter"; |
HGraph graph; |
- SsaCheckInserter(this.backend, |
+ SsaCheckInserter(this.compiler, |
+ this.backend, |
this.work, |
this.boundsChecked); |
void visitGraph(HGraph graph) { |
this.graph = graph; |
+ |
+ // In --trust-primitives mode we don't add bounds checks. This is better |
+ // than trying to remove them later as the limit expression would become |
+ // dead and require DCE. |
+ if (compiler.trustPrimitives) return; |
floitsch
2014/11/11 10:02:04
Ok for this CL, but in the future (i.e. the CPS IR
sra1
2014/11/12 02:27:37
I passed the bool.
|
+ |
visitDominatorTree(graph); |
} |