# HG changeset patch # User Gilles Duboscq # Date 1415696784 -3600 # Node ID db6b7d3dfa1d6dba22f2f87eeb8105eac076600e # Parent 65a160d9d259ef6f85b1aa95b5e2c8428046a115 ConditionalElimination: only clear the state on loop exits if the graph needs to remain in loop closed form diff -r 65a160d9d259 -r db6b7d3dfa1d graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConditionalEliminationPhase.java --- 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(); }