changeset 23173:ccca06a06894

Make EntryProxyNode independent from ProxyNode hierarchy.
author Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
date Mon, 14 Dec 2015 12:46:19 +0100
parents 827a777e8dc4
children 009b2ed708fd
files graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/EntryProxyNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardProxyNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ProxyNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ValueProxyNode.java graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/RemoveValueProxyPhase.java
diffstat 5 files changed, 16 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/EntryProxyNode.java	Mon Dec 14 09:20:26 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/EntryProxyNode.java	Mon Dec 14 12:46:19 2015 +0100
@@ -23,7 +23,9 @@
 package com.oracle.graal.nodes;
 
 import com.oracle.graal.graph.NodeClass;
+import com.oracle.graal.nodeinfo.InputType;
 import com.oracle.graal.nodeinfo.NodeInfo;
+import com.oracle.graal.nodes.calc.FloatingNode;
 import com.oracle.graal.nodes.spi.ValueProxy;
 
 /**
@@ -31,17 +33,18 @@
  * types we see during OSR may be too precise (if a branch was not parsed for example).
  */
 @NodeInfo(nameTemplate = "EntryProxy({i#value})")
-public final class EntryProxyNode extends ProxyNode implements ValueProxy {
+public final class EntryProxyNode extends FloatingNode implements ValueProxy {
 
     public static final NodeClass<EntryProxyNode> TYPE = NodeClass.create(EntryProxyNode.class);
+    @Input(InputType.Association) EntryMarkerNode proxyPoint;
     @Input ValueNode value;
 
-    public EntryProxyNode(ValueNode value, AbstractBeginNode proxyPoint) {
-        super(TYPE, value.stamp().unrestricted(), proxyPoint);
+    public EntryProxyNode(ValueNode value, EntryMarkerNode proxyPoint) {
+        super(TYPE, value.stamp().unrestricted());
         this.value = value;
+        this.proxyPoint = proxyPoint;
     }
 
-    @Override
     public ValueNode value() {
         return value;
     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardProxyNode.java	Mon Dec 14 09:20:26 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardProxyNode.java	Mon Dec 14 12:46:19 2015 +0100
@@ -40,7 +40,7 @@
     public static final NodeClass<GuardProxyNode> TYPE = NodeClass.create(GuardProxyNode.class);
     @OptionalInput(InputType.Guard) GuardingNode value;
 
-    public GuardProxyNode(GuardingNode value, AbstractBeginNode proxyPoint) {
+    public GuardProxyNode(GuardingNode value, LoopExitNode proxyPoint) {
         super(TYPE, StampFactory.forVoid(), proxyPoint);
         this.value = value;
     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ProxyNode.java	Mon Dec 14 09:20:26 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ProxyNode.java	Mon Dec 14 12:46:19 2015 +0100
@@ -39,9 +39,9 @@
 public abstract class ProxyNode extends FloatingNode implements IterableNodeType, ValueNumberable {
 
     public static final NodeClass<ProxyNode> TYPE = NodeClass.create(ProxyNode.class);
-    @Input(InputType.Association) AbstractBeginNode proxyPoint;
+    @Input(InputType.Association) LoopExitNode proxyPoint;
 
-    protected ProxyNode(NodeClass<? extends ProxyNode> c, Stamp stamp, AbstractBeginNode proxyPoint) {
+    protected ProxyNode(NodeClass<? extends ProxyNode> c, Stamp stamp, LoopExitNode proxyPoint) {
         super(c, stamp);
         assert proxyPoint != null;
         this.proxyPoint = proxyPoint;
@@ -49,7 +49,7 @@
 
     public abstract ValueNode value();
 
-    public AbstractBeginNode proxyPoint() {
+    public LoopExitNode proxyPoint() {
         return proxyPoint;
     }
 
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ValueProxyNode.java	Mon Dec 14 09:20:26 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ValueProxyNode.java	Mon Dec 14 12:46:19 2015 +0100
@@ -40,10 +40,10 @@
 
     private final boolean loopPhiProxy;
 
-    public ValueProxyNode(ValueNode value, AbstractBeginNode proxyPoint) {
+    public ValueProxyNode(ValueNode value, LoopExitNode proxyPoint) {
         super(TYPE, value.stamp(), proxyPoint);
         this.value = value;
-        loopPhiProxy = (proxyPoint instanceof LoopExitNode && value instanceof PhiNode && ((PhiNode) value).merge() == ((LoopExitNode) proxyPoint).loopBegin());
+        loopPhiProxy = (value instanceof PhiNode && ((PhiNode) value).merge() == proxyPoint.loopBegin());
     }
 
     @Override
@@ -61,10 +61,10 @@
         if (value.isConstant()) {
             return value;
         }
-        if (loopPhiProxy && proxyPoint instanceof LoopExitNode) {
+        if (loopPhiProxy) {
             if (!(value instanceof PhiNode)) {
                 return value;
-            } else if (((PhiNode) value).merge() != ((LoopExitNode) proxyPoint).loopBegin()) {
+            } else if (((PhiNode) value).merge() != proxyPoint.loopBegin()) {
                 return value;
             }
         }
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/RemoveValueProxyPhase.java	Mon Dec 14 09:20:26 2015 +0100
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/RemoveValueProxyPhase.java	Mon Dec 14 12:46:19 2015 +0100
@@ -22,7 +22,6 @@
  */
 package com.oracle.graal.phases.common;
 
-import com.oracle.graal.nodes.EntryProxyNode;
 import com.oracle.graal.nodes.FrameState;
 import com.oracle.graal.nodes.LoopExitNode;
 import com.oracle.graal.nodes.ProxyNode;
@@ -35,9 +34,7 @@
     @Override
     protected void run(StructuredGraph graph) {
         for (ProxyNode vpn : graph.getNodes(ProxyNode.TYPE)) {
-            if (!(vpn instanceof EntryProxyNode)) {
-                graph.replaceFloating(vpn, vpn.value());
-            }
+            graph.replaceFloating(vpn, vpn.value());
         }
         for (LoopExitNode exit : graph.getNodes(LoopExitNode.TYPE)) {
             FrameState stateAfter = exit.stateAfter();