# HG changeset patch # User Lukas Stadler # Date 1352738727 -3600 # Node ID e9e724ea5097b9f8a935788279291db7e5f678c0 # Parent 0cb1ac637dd0f698220b79f5c1819c19f74e55d3 make LoopFragment deal correctly with GVN'd VirtualState diff -r 0cb1ac637dd0 -r e9e724ea5097 graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopFragment.java --- a/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopFragment.java Mon Nov 12 13:04:08 2012 +0100 +++ b/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopFragment.java Mon Nov 12 17:45:27 2012 +0100 @@ -258,7 +258,9 @@ FrameState newExitState = newEarlyExit.stateAfter(); FrameState state = null; if (exitState != null) { - state = exitState.duplicateWithVirtualState(); + state = exitState; + exitState = exitState.duplicateWithVirtualState(); + earlyExit.setStateAfter(exitState); merge.setStateAfter(state); } @@ -291,7 +293,7 @@ if (!merge.isPhiAtMerge(usage)) { if (usage instanceof VirtualState) { VirtualState stateUsage = (VirtualState) usage; - if (exitState.isPartOfThisState(stateUsage) || newExitState.isPartOfThisState(stateUsage)) { + if (exitState.isPartOfThisState(stateUsage)) { continue; } }