# HG changeset patch # User Thomas Wuerthinger # Date 1450007277 -3600 # Node ID b322b2eec8255c1e20a5fef46732cf67ed21f795 # Parent 721b6e8d10a6f22cc6b7a46870c07c1741a4130e Change phi nodes from simplifiable to canonicalizable. diff -r 721b6e8d10a6 -r b322b2eec825 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/PhiNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/PhiNode.java Sun Dec 13 12:33:10 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/PhiNode.java Sun Dec 13 12:47:57 2015 +0100 @@ -27,11 +27,10 @@ import jdk.vm.ci.meta.JavaKind; import com.oracle.graal.compiler.common.type.Stamp; -import com.oracle.graal.graph.Node; import com.oracle.graal.graph.NodeClass; import com.oracle.graal.graph.NodeInputList; -import com.oracle.graal.graph.spi.Simplifiable; -import com.oracle.graal.graph.spi.SimplifierTool; +import com.oracle.graal.graph.spi.Canonicalizable; +import com.oracle.graal.graph.spi.CanonicalizerTool; import com.oracle.graal.nodeinfo.InputType; import com.oracle.graal.nodeinfo.NodeInfo; import com.oracle.graal.nodeinfo.Verbosity; @@ -45,7 +44,7 @@ * {@link LoopEndNode}s. */ @NodeInfo -public abstract class PhiNode extends FloatingNode implements Simplifiable { +public abstract class PhiNode extends FloatingNode implements Canonicalizable { public static final NodeClass TYPE = NodeClass.create(PhiNode.class); @Input(InputType.Association) protected AbstractMergeNode merge; @@ -199,7 +198,7 @@ } @Override - public void simplify(SimplifierTool tool) { + public ValueNode canonical(CanonicalizerTool tool) { ValueNode singleValue; if (isLoopPhi() && singleBackValue() == this) { @@ -209,20 +208,9 @@ } if (singleValue != MULTIPLE_VALUES) { - for (Node node : usages().snapshot()) { - if (node instanceof ProxyNode && ((ProxyNode) node).proxyPoint() instanceof LoopExitNode && ((LoopExitNode) ((ProxyNode) node).proxyPoint()).loopBegin() == merge) { - tool.addToWorkList(node.usages()); - graph().replaceFloating((FloatingNode) node, singleValue); - } - } - for (Node usage : usages().snapshot()) { - if (usage != this) { - usage.replaceFirstInput(this, singleValue); - } - } - clearInputs(); - safeDelete(); + return singleValue; } + return this; } public ValueNode firstValue() {