Mercurial > hg > graal-compiler
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); } }