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