# HG changeset patch # User Gilles Duboscq # Date 1445349378 -7200 # Node ID 3566ad79cf8669123f9c55237838cde5764b68c6 # Parent ad106dd2000ccb8edaabfee12800fe9b60325e5f Check guards stage before optimizing or inserting guards diff -r ad106dd2000c -r 3566ad79cf86 graal/com.oracle.graal.loop/src/com/oracle/graal/loop/CountedLoopInfo.java --- a/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/CountedLoopInfo.java Tue Oct 20 15:55:40 2015 +0200 +++ b/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/CountedLoopInfo.java Tue Oct 20 15:56:18 2015 +0200 @@ -175,6 +175,7 @@ } cond = graph.unique(new IntegerLessThanNode(end, v1)); } + assert graph.getGuardsStage().allowsFloatingGuards(); overflowGuard = graph.unique(new GuardNode(cond, AbstractBeginNode.prevBegin(loop.entryPoint()), DeoptimizationReason.LoopLimitCheck, DeoptimizationAction.InvalidateRecompile, true, JavaConstant.NULL_POINTER)); // TODO gd: use speculation loop.loopBegin().setOverflowGuard(overflowGuard); diff -r ad106dd2000c -r 3566ad79cf86 graal/com.oracle.graal.loop/src/com/oracle/graal/loop/phases/LoopSafepointEliminationPhase.java --- a/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/phases/LoopSafepointEliminationPhase.java Tue Oct 20 15:55:40 2015 +0200 +++ b/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/phases/LoopSafepointEliminationPhase.java Tue Oct 20 15:56:18 2015 +0200 @@ -38,7 +38,7 @@ @Override protected void run(StructuredGraph graph, MidTierContext context) { LoopsData loops = new LoopsData(graph); - if (context.getOptimisticOptimizations().useLoopLimitChecks()) { + if (context.getOptimisticOptimizations().useLoopLimitChecks() && graph.getGuardsStage().allowsFloatingGuards()) { loops.detectedCountedLoops(); for (LoopEx loop : loops.countedLoops()) { if (loop.loop().getChildren().isEmpty() && loop.counted().getStamp().getBits() <= 32) { diff -r ad106dd2000c -r 3566ad79cf86 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/OptimizeGuardAnchorsPhase.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/OptimizeGuardAnchorsPhase.java Tue Oct 20 15:55:40 2015 +0200 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/OptimizeGuardAnchorsPhase.java Tue Oct 20 15:56:18 2015 +0200 @@ -63,6 +63,9 @@ @Override protected void run(StructuredGraph graph) { + if (!graph.getGuardsStage().allowsFloatingGuards()) { + return; + } LazyCFG cfg = new LazyCFG(graph); for (AbstractBeginNode begin : graph.getNodes(AbstractBeginNode.TYPE)) { if (!(begin instanceof StartNode || begin.predecessor() instanceof ControlSplitNode)) {