changeset 6706:e9e724ea5097

make LoopFragment deal correctly with GVN'd VirtualState
author Lukas Stadler <lukas.stadler@jku.at>
date Mon, 12 Nov 2012 17:45:27 +0100
parents 0cb1ac637dd0
children 847bab44637b
files graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopFragment.java
diffstat 1 files changed, 4 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- 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;
                             }
                         }