# HG changeset patch # User Gilles Duboscq # Date 1383817357 -3600 # Node ID 44c0e08c4150134c7f631ab14fec32402567345e # Parent 42a60780c2c929afeb972b49ffbdbf9cb9c21911 Lowering should handle the case where the current guard anchor gets lowered and does not exist anymore diff -r 42a60780c2c9 -r 44c0e08c4150 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/LoweringPhase.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/LoweringPhase.java Wed Nov 06 16:47:48 2013 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/LoweringPhase.java Thu Nov 07 10:42:37 2013 +0100 @@ -50,8 +50,8 @@ final class LoweringToolImpl implements LoweringTool { private final PhaseContext context; - private final GuardingNode guardAnchor; private final NodeBitMap activeGuards; + private GuardingNode guardAnchor; private FixedWithNextNode lastFixedNode; private ControlFlowGraph cfg; @@ -237,7 +237,7 @@ if (anchor == null) { anchor = block.getBeginNode(); } - process(block, activeGuards, anchor); + anchor = process(block, activeGuards, anchor); // Process always reached block first. Block alwaysReachedBlock = block.getPostdominator(); @@ -262,9 +262,9 @@ } } - private void process(final Block b, final NodeBitMap activeGuards, final GuardingNode anchor) { + private GuardingNode process(final Block b, final NodeBitMap activeGuards, final GuardingNode startAnchor) { - final LoweringToolImpl loweringTool = new LoweringToolImpl(context, anchor, activeGuards, b.getBeginNode(), schedule.getCFG()); + final LoweringToolImpl loweringTool = new LoweringToolImpl(context, startAnchor, activeGuards, b.getBeginNode(), schedule.getCFG()); // Lower the instructions of this block. List nodes = schedule.nodesFor(b); @@ -288,6 +288,9 @@ assert checkUsagesAreScheduled(node); Mark preLoweringMark = node.graph().getMark(); ((Lowerable) node).lower(loweringTool); + if (node == startAnchor && node.isDeleted()) { + loweringTool.guardAnchor = BeginNode.prevBegin(nextNode); + } assert checkPostNodeLowering(node, loweringTool, preLoweringMark); } @@ -311,6 +314,7 @@ loweringTool.setLastFixedNode((FixedWithNextNode) nextLastFixed); } } + return loweringTool.getCurrentGuardAnchor(); } /**