# HG changeset patch # User Thomas Wuerthinger # Date 1433689143 -7200 # Node ID b6309a7d5a44c9b641d5936d284a5aa676a134c3 # Parent e9100cc156a97c36fcdc3117d214c6eaf9a20adc Fix the anchoring node in the lowering phase to not skip over loop exits. diff -r e9100cc156a9 -r b6309a7d5a44 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 Sun Jun 07 16:21:00 2015 +0200 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/LoweringPhase.java Sun Jun 07 16:59:03 2015 +0200 @@ -284,7 +284,13 @@ @Override public Frame enterAlwaysReached(Block b) { - return new ProcessFrame(b, activeGuards, anchor, this); + AnchoringNode newAnchor = anchor; + if (parent != null && b.getLoop() != parent.block.getLoop() && !b.isLoopHeader()) { + // We are exiting a loop => cannot reuse the anchor without inserting loop + // proxies. + newAnchor = b.getBeginNode(); + } + return new ProcessFrame(b, activeGuards, newAnchor, this); } @Override @@ -401,7 +407,7 @@ * if (alwaysReachedBlock != null && alwaysReachedBlock.getDominator() == block) { * processBlock(alwaysReachedBlock); * } - * + * * // Now go for the other dominators. * for (Block dominated : block.getDominated()) { * if (dominated != alwaysReachedBlock) {