diff graal/com.oracle.max.graal.nodes/src/com/oracle/max/graal/nodes/BeginNode.java @ 4310:72d099e5be61

more CanonicalizerPhase simplifications, added Simplifiable interface
author Lukas Stadler <lukas.stadler@jku.at>
date Wed, 18 Jan 2012 15:09:19 +0100
parents 4a609a685fa4
children 97d11635f2bf
line wrap: on
line diff
--- a/graal/com.oracle.max.graal.nodes/src/com/oracle/max/graal/nodes/BeginNode.java	Tue Jan 17 19:45:39 2012 +0100
+++ b/graal/com.oracle.max.graal.nodes/src/com/oracle/max/graal/nodes/BeginNode.java	Wed Jan 18 15:09:19 2012 +0100
@@ -28,7 +28,7 @@
 import com.oracle.max.graal.nodes.spi.*;
 import com.oracle.max.graal.nodes.type.*;
 
-public class BeginNode extends AbstractStateSplit implements LIRLowerable, Canonicalizable {
+public class BeginNode extends AbstractStateSplit implements LIRLowerable, Simplifiable {
     public BeginNode() {
         super(StampFactory.illegal());
     }
@@ -50,22 +50,23 @@
     }
 
     @Override
-    public ValueNode canonical(CanonicalizerTool tool) {
+    public void simplify(SimplifierTool tool) {
         FixedNode prev = (FixedNode) this.predecessor();
         if (prev == null) {
             // This is the start node.
-            return this;
         } else if (prev instanceof ControlSplitNode) {
             // This begin node is necessary.
-            return this;
         } else {
             // This begin node can be removed and all guards moved up to the preceding begin node.
             Node prevBegin = prev;
             while (!(prevBegin instanceof BeginNode)) {
                 prevBegin = prevBegin.predecessor();
             }
-            this.replaceAtUsages(prevBegin);
-            return next();
+            for (Node usage : usages()) {
+                tool.addToWorkList(usage);
+            }
+            replaceAtUsages(prevBegin);
+            ((StructuredGraph) graph()).removeFixed(this);
         }
     }