Mercurial > hg > graal-compiler
changeset 23179:4523d9fbfebe
Clean up of ValueProxy code. Use utility AbstractMergeNode#isPhiAtMerge.
author | Thomas Wuerthinger <thomas.wuerthinger@oracle.com> |
---|---|
date | Mon, 14 Dec 2015 16:52:26 +0100 |
parents | da442b04e130 |
children | ae1e007bbd2f |
files | graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ProxyNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ValueProxyNode.java |
diffstat | 2 files changed, 12 insertions(+), 16 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ProxyNode.java Mon Dec 14 15:24:27 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ProxyNode.java Mon Dec 14 16:52:26 2015 +0100 @@ -39,23 +39,23 @@ public abstract class ProxyNode extends FloatingNode implements IterableNodeType, ValueNumberable { public static final NodeClass<ProxyNode> TYPE = NodeClass.create(ProxyNode.class); - @Input(InputType.Association) LoopExitNode proxyPoint; + @Input(InputType.Association) LoopExitNode loopExit; protected ProxyNode(NodeClass<? extends ProxyNode> c, Stamp stamp, LoopExitNode proxyPoint) { super(c, stamp); assert proxyPoint != null; - this.proxyPoint = proxyPoint; + this.loopExit = proxyPoint; } public abstract ValueNode value(); public LoopExitNode proxyPoint() { - return proxyPoint; + return loopExit; } @Override public boolean verify() { - assert !(value() instanceof ProxyNode) || ((ProxyNode) value()).proxyPoint != proxyPoint; + assert !(value() instanceof ProxyNode) || ((ProxyNode) value()).loopExit != loopExit; return super.verify(); }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ValueProxyNode.java Mon Dec 14 15:24:27 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ValueProxyNode.java Mon Dec 14 16:52:26 2015 +0100 @@ -37,13 +37,12 @@ public static final NodeClass<ValueProxyNode> TYPE = NodeClass.create(ValueProxyNode.class); @Input ValueNode value; - private final boolean loopPhiProxy; - public ValueProxyNode(ValueNode value, LoopExitNode proxyPoint) { - super(TYPE, value.stamp(), proxyPoint); + public ValueProxyNode(ValueNode value, LoopExitNode loopExit) { + super(TYPE, value.stamp(), loopExit); this.value = value; - loopPhiProxy = (value instanceof PhiNode && ((PhiNode) value).merge() == proxyPoint.loopBegin()); + loopPhiProxy = loopExit.loopBegin().isPhiAtMerge(value); } @Override @@ -58,15 +57,12 @@ @Override public Node canonical(CanonicalizerTool tool) { - if (value.isConstant()) { - return value; + ValueNode curValue = value; + if (curValue.isConstant()) { + return curValue; } - if (loopPhiProxy) { - if (!(value instanceof PhiNode)) { - return value; - } else if (((PhiNode) value).merge() != proxyPoint.loopBegin()) { - return value; - } + if (loopPhiProxy && !loopExit.loopBegin().isPhiAtMerge(curValue)) { + return curValue; } return this; }