# HG changeset patch # User Lukas Stadler # Date 1404728144 -7200 # Node ID 24af0805e135f14334c5127106b808ecb82073e2 # Parent 3d424f8a2beae74217d087d5bc58eac688a8a4a7 hasValueProxies on StructuredGraph diff -r 3d424f8a2bea -r 24af0805e135 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StructuredGraph.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StructuredGraph.java Fri Jul 04 21:29:40 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StructuredGraph.java Mon Jul 07 12:15:44 2014 +0200 @@ -78,6 +78,7 @@ private final int entryBCI; private GuardsStage guardsStage = GuardsStage.FLOATING_GUARDS; private boolean isAfterFloatingReadPhase = false; + private boolean hasValueProxies = true; /** * Creates a new Graph containing a single {@link BeginNode} as the {@link #start() start} node. @@ -429,4 +430,13 @@ assert state : "cannot 'unapply' floating read phase on graph"; isAfterFloatingReadPhase = state; } + + public boolean hasValueProxies() { + return hasValueProxies; + } + + public void setHasValueProxies(boolean state) { + assert !state : "cannot 'unapply' value proxy removal on graph"; + hasValueProxies = state; + } } diff -r 3d424f8a2bea -r 24af0805e135 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/RemoveValueProxyPhase.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/RemoveValueProxyPhase.java Fri Jul 04 21:29:40 2014 +0200 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/RemoveValueProxyPhase.java Mon Jul 07 12:15:44 2014 +0200 @@ -44,5 +44,6 @@ } } } + graph.setHasValueProxies(false); } } diff -r 3d424f8a2bea -r 24af0805e135 graal/com.oracle.graal.phases/src/com/oracle/graal/phases/util/GraphOrder.java --- a/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/util/GraphOrder.java Fri Jul 04 21:29:40 2014 +0200 +++ b/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/util/GraphOrder.java Mon Jul 07 12:15:44 2014 +0200 @@ -188,7 +188,7 @@ } } } else if (node instanceof LoopExitNode) { - if (!graph.isAfterFloatingReadPhase()) { + if (graph.hasValueProxies()) { // loop contents are only accessible via proxies at the exit currentState.clearAll(); currentState.markAll(loopEntryStates.get(((LoopExitNode) node).loopBegin()));