# HG changeset patch # User Doug Simon # Date 1351160979 -7200 # Node ID f170a0d2b3b9432008f30e8a4c3c6956e30d4a1d # Parent a63e3305c0acb7efb581170f58d676b0247b7e87 disabled IfNode materialization simplification if associated merge has a non-null frame state diff -r a63e3305c0ac -r f170a0d2b3b9 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/BeginNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/BeginNode.java Thu Oct 25 08:42:26 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/BeginNode.java Thu Oct 25 12:29:39 2012 +0200 @@ -102,7 +102,6 @@ } public void prepareDelete(FixedNode evacuateFrom) { - // TODO (ds) shouldn't non-null framestate be evacutated as well? removeProxies(); evacuateGuards(evacuateFrom); } diff -r a63e3305c0ac -r f170a0d2b3b9 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/IfNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/IfNode.java Thu Oct 25 08:42:26 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/IfNode.java Thu Oct 25 12:29:39 2012 +0200 @@ -175,8 +175,6 @@ return false; } - private static final boolean NON_NULL_FRAMESTATE_EVACUATION_IN_BEGINNODE_SIMPLIFICATION_IMPLEMENTED = false; - /** * Tries to connect code that initializes a variable directly with the successors of an if construct * that switches on the variable. For example, the pseudo code below: @@ -235,6 +233,11 @@ return false; } + if (merge.stateAfter() != null) { + // Not sure how (or if) the frame state of the merge can be correctly propagated to the successors + return false; + } + NodeUsagesList usages = merge.usages(); if (usages.count() != 1) { return false; @@ -260,19 +263,6 @@ BeginNode falseSuccessor = falseSuccessor(); BeginNode trueSuccessor = trueSuccessor(); - if (merge.stateAfter() != null) { - if (!NON_NULL_FRAMESTATE_EVACUATION_IN_BEGINNODE_SIMPLIFICATION_IMPLEMENTED) { - return false; - } - - if (!isFrameStateNullOrEqualTo(falseSuccessor, merge) || !isFrameStateNullOrEqualTo(trueSuccessor, merge)) { - // Cannot proceed if the frame state of either successor is different from the merge's frame state - return false; - } - trueSuccessor.setStateAfter(merge.stateAfter()); - falseSuccessor.setStateAfter(merge.stateAfter()); - } - setFalseSuccessor(null); setTrueSuccessor(null); @@ -295,10 +285,6 @@ return true; } - protected static boolean isFrameStateNullOrEqualTo(BeginNode successor, MergeNode merge) { - return successor.stateAfter() == null || successor.stateAfter() == merge.stateAfter(); - } - /** * Connects a set of ends to a given successor, inserting a merge node if * there is more than one end. If {@code ends} is empty, then {@code successor}