changeset 23164:721b6e8d10a6

Simplify the implementation of simplify in the AbstractBeginNode hierarchy.
author Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
date Sun, 13 Dec 2015 12:33:10 +0100
parents 3cbe2cc6c9ef
children b322b2eec825
files graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractBeginNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractMergeNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/BeginNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/EntryMarkerNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LoopExitNode.java
diffstat 5 files changed, 22 insertions(+), 40 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractBeginNode.java	Sun Dec 13 11:37:49 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractBeginNode.java	Sun Dec 13 12:33:10 2015 +0100
@@ -31,8 +31,6 @@
 import com.oracle.graal.graph.Node;
 import com.oracle.graal.graph.NodeClass;
 import com.oracle.graal.graph.iterators.NodeIterable;
-import com.oracle.graal.graph.spi.Simplifiable;
-import com.oracle.graal.graph.spi.SimplifierTool;
 import com.oracle.graal.nodeinfo.InputType;
 import com.oracle.graal.nodeinfo.NodeInfo;
 import com.oracle.graal.nodes.extended.AnchoringNode;
@@ -41,7 +39,7 @@
 import com.oracle.graal.nodes.spi.NodeLIRBuilderTool;
 
 @NodeInfo(allowedUsageTypes = {InputType.Guard, InputType.Anchor})
-public abstract class AbstractBeginNode extends FixedWithNextNode implements LIRLowerable, Simplifiable, GuardingNode, AnchoringNode, IterableNodeType {
+public abstract class AbstractBeginNode extends FixedWithNextNode implements LIRLowerable, GuardingNode, AnchoringNode, IterableNodeType {
 
     public static final NodeClass<AbstractBeginNode> TYPE = NodeClass.create(AbstractBeginNode.class);
 
@@ -53,21 +51,6 @@
         super(c, stamp);
     }
 
-    @Override
-    public void simplify(SimplifierTool tool) {
-        FixedNode prev = (FixedNode) this.predecessor();
-        if (prev == null) {
-            // This is the start node.
-        } else 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();
-            tool.addToWorkList(next());
-            graph().removeFixed(this);
-        }
-    }
-
     public static AbstractBeginNode prevBegin(FixedNode from) {
         Node next = from;
         while (next != null) {
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractMergeNode.java	Sun Dec 13 11:37:49 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractMergeNode.java	Sun Dec 13 12:33:10 2015 +0100
@@ -32,6 +32,7 @@
 import com.oracle.graal.graph.NodeClass;
 import com.oracle.graal.graph.NodeInputList;
 import com.oracle.graal.graph.iterators.NodeIterable;
+import com.oracle.graal.graph.spi.Simplifiable;
 import com.oracle.graal.graph.spi.SimplifierTool;
 import com.oracle.graal.nodeinfo.InputType;
 import com.oracle.graal.nodeinfo.NodeInfo;
@@ -43,7 +44,7 @@
  * Denotes the merging of multiple control-flow paths.
  */
 @NodeInfo(allowedUsageTypes = {InputType.Association})
-public abstract class AbstractMergeNode extends BeginStateSplitNode implements IterableNodeType, LIRLowerable {
+public abstract class AbstractMergeNode extends BeginStateSplitNode implements IterableNodeType, Simplifiable, LIRLowerable {
     public static final NodeClass<AbstractMergeNode> TYPE = NodeClass.create(AbstractMergeNode.class);
 
     protected AbstractMergeNode(NodeClass<? extends AbstractMergeNode> c) {
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/BeginNode.java	Sun Dec 13 11:37:49 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/BeginNode.java	Sun Dec 13 12:33:10 2015 +0100
@@ -25,10 +25,12 @@
 import com.oracle.graal.compiler.common.type.Stamp;
 import com.oracle.graal.compiler.common.type.StampFactory;
 import com.oracle.graal.graph.NodeClass;
+import com.oracle.graal.graph.spi.Simplifiable;
+import com.oracle.graal.graph.spi.SimplifierTool;
 import com.oracle.graal.nodeinfo.NodeInfo;
 
 @NodeInfo
-public final class BeginNode extends AbstractBeginNode {
+public final class BeginNode extends AbstractBeginNode implements Simplifiable {
 
     public static final NodeClass<BeginNode> TYPE = NodeClass.create(BeginNode.class);
 
@@ -51,6 +53,21 @@
         }
     }
 
+    @Override
+    public void simplify(SimplifierTool tool) {
+        FixedNode prev = (FixedNode) this.predecessor();
+        if (prev == null) {
+            // This is the start node.
+        } else 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();
+            tool.addToWorkList(next());
+            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/EntryMarkerNode.java	Sun Dec 13 11:37:49 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/EntryMarkerNode.java	Sun Dec 13 12:33:10 2015 +0100
@@ -26,8 +26,6 @@
 
 import com.oracle.graal.graph.IterableNodeType;
 import com.oracle.graal.graph.NodeClass;
-import com.oracle.graal.graph.spi.Simplifiable;
-import com.oracle.graal.graph.spi.SimplifierTool;
 import com.oracle.graal.nodeinfo.InputType;
 import com.oracle.graal.nodeinfo.NodeInfo;
 import com.oracle.graal.nodes.spi.LIRLowerable;
@@ -38,7 +36,7 @@
  * by the graph builder.
  */
 @NodeInfo(allowedUsageTypes = {InputType.Association})
-public final class EntryMarkerNode extends BeginStateSplitNode implements IterableNodeType, Simplifiable, LIRLowerable {
+public final class EntryMarkerNode extends BeginStateSplitNode implements IterableNodeType, LIRLowerable {
     public static final NodeClass<EntryMarkerNode> TYPE = NodeClass.create(EntryMarkerNode.class);
 
     public EntryMarkerNode() {
@@ -46,11 +44,6 @@
     }
 
     @Override
-    public void simplify(SimplifierTool tool) {
-        // this node should not be removed, this overrides BeginNode.simplify
-    }
-
-    @Override
     public void generate(NodeLIRBuilderTool gen) {
         throw new JVMCIError("OnStackReplacementNode should not survive");
     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LoopExitNode.java	Sun Dec 13 11:37:49 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LoopExitNode.java	Sun Dec 13 12:33:10 2015 +0100
@@ -23,9 +23,7 @@
 package com.oracle.graal.nodes;
 
 import com.oracle.graal.graph.IterableNodeType;
-import com.oracle.graal.graph.Node;
 import com.oracle.graal.graph.NodeClass;
-import com.oracle.graal.graph.spi.SimplifierTool;
 import com.oracle.graal.nodeinfo.InputType;
 import com.oracle.graal.nodeinfo.NodeInfo;
 
@@ -44,14 +42,4 @@
     public LoopBeginNode loopBegin() {
         return loopBegin;
     }
-
-    @Override
-    public void simplify(SimplifierTool tool) {
-        Node prev = this.predecessor();
-        while (tool.allUsagesAvailable() && prev instanceof BeginNode && prev.hasNoUsages()) {
-            AbstractBeginNode begin = (AbstractBeginNode) prev;
-            prev = prev.predecessor();
-            graph().removeFixed(begin);
-        }
-    }
 }