Mercurial > hg > graal-compiler
changeset 6577:f170a0d2b3b9
disabled IfNode materialization simplification if associated merge has a non-null frame state
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Thu, 25 Oct 2012 12:29:39 +0200 |
parents | a63e3305c0ac |
children | 1112609bb5dc |
files | graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/BeginNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/IfNode.java |
diffstat | 2 files changed, 5 insertions(+), 20 deletions(-) [+] |
line wrap: on
line diff
--- 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); }
--- 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}