changeset 19721:4df907480030

Simplify begin node immediately after removing if node.
author Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
date Mon, 09 Mar 2015 15:38:33 +0100
parents 79a472b4f024
children adccf364178b
files graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/BeginNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerTestNode.java graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/DominatorConditionalEliminationPhase.java
diffstat 3 files changed, 14 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/BeginNode.java	Mon Mar 09 15:38:17 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/BeginNode.java	Mon Mar 09 15:38:33 2015 +0100
@@ -39,6 +39,17 @@
         super(TYPE, stamp);
     }
 
+    public void trySimplify() {
+        FixedNode prev = (FixedNode) this.predecessor();
+        if (prev instanceof ControlSplitNode) {
+            // This begin node is necessary.
+        } else {
+            // This begin node can be removed and all guards moved up to the preceding begin node.
+            prepareDelete();
+            graph().removeFixed(this);
+        }
+    }
+
     public static AbstractBeginNode begin(FixedNode with) {
         if (with instanceof AbstractBeginNode) {
             return (AbstractBeginNode) with;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerTestNode.java	Mon Mar 09 15:38:17 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerTestNode.java	Mon Mar 09 15:38:33 2015 +0100
@@ -72,7 +72,6 @@
 
     @Override
     public TriState tryFold(Stamp xStampGeneric, Stamp yStampGeneric) {
-        System.out.println("try fold with " + xStampGeneric + " and " + yStampGeneric);
         return TriState.UNKNOWN;
     }
 }
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/DominatorConditionalEliminationPhase.java	Mon Mar 09 15:38:17 2015 +0100
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/DominatorConditionalEliminationPhase.java	Mon Mar 09 15:38:33 2015 +0100
@@ -221,6 +221,9 @@
                 survivingSuccessor.replaceAtPredecessor(null);
                 node.replaceAtPredecessor(survivingSuccessor);
                 GraphUtil.killCFG(node);
+                if (survivingSuccessor instanceof BeginNode) {
+                    ((BeginNode) survivingSuccessor).trySimplify();
+                }
             });
         }