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;
     }