changeset 18333:db6b7d3dfa1d

ConditionalElimination: only clear the state on loop exits if the graph needs to remain in loop closed form
author Gilles Duboscq <duboscq@ssw.jku.at>
date Tue, 11 Nov 2014 10:06:24 +0100
parents 65a160d9d259
children 0950fa8782c7
files graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConditionalEliminationPhase.java
diffstat 1 files changed, 5 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConditionalEliminationPhase.java	Mon Nov 10 19:29:08 2014 +0100
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConditionalEliminationPhase.java	Tue Nov 11 10:06:24 2014 +0100
@@ -412,7 +412,11 @@
 
         private void registerControlSplitInfo(Node pred, BeginNode begin) {
             assert pred != null && begin != null;
-            if (begin instanceof LoopExitNode) {
+            /*
+             * We does not create value proxies for values it may connect accross loop exit node so
+             * we have to clear the state at loop exits if the graph needs value proxies
+             */
+            if (begin instanceof LoopExitNode && begin.graph().hasValueProxies()) {
                 state.clear();
             }