changeset 10765:ae3d070ab223

make ValueNode.stamp() final, fix WordTypeRewriterPhase
author Lukas Stadler <lukas.stadler@jku.at>
date Mon, 15 Jul 2013 16:36:54 +0200
parents d2f8addaf504
children 3a044e575466
files graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ProxyNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/TypeProfileProxyNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ValueNode.java graal/com.oracle.graal.word/src/com/oracle/graal/word/phases/WordTypeRewriterPhase.java
diffstat 4 files changed, 10 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ProxyNode.java	Mon Jul 15 15:58:48 2013 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ProxyNode.java	Mon Jul 15 16:36:54 2013 +0200
@@ -27,7 +27,6 @@
 import com.oracle.graal.nodes.PhiNode.PhiType;
 import com.oracle.graal.nodes.calc.*;
 import com.oracle.graal.nodes.spi.*;
-import com.oracle.graal.nodes.type.*;
 
 /**
  * A value proxy that is inserted in the frame state of a loop exit for any value that is created
@@ -60,11 +59,6 @@
         return updateStamp(value.stamp());
     }
 
-    @Override
-    public Stamp stamp() {
-        return value().stamp();
-    }
-
     public AbstractBeginNode proxyPoint() {
         return proxyPoint;
     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/TypeProfileProxyNode.java	Mon Jul 15 15:58:48 2013 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/TypeProfileProxyNode.java	Mon Jul 15 16:36:54 2013 +0200
@@ -27,7 +27,6 @@
 import com.oracle.graal.graph.*;
 import com.oracle.graal.nodes.calc.*;
 import com.oracle.graal.nodes.spi.*;
-import com.oracle.graal.nodes.type.*;
 
 /**
  * A node that attaches a type profile to a proxied input node.
@@ -67,12 +66,7 @@
 
     @Override
     public boolean inferStamp() {
-        return object.inferStamp();
-    }
-
-    @Override
-    public Stamp stamp() {
-        return object.stamp();
+        return updateStamp(object.stamp());
     }
 
     @Override
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ValueNode.java	Mon Jul 15 15:58:48 2013 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ValueNode.java	Mon Jul 15 16:36:54 2013 +0200
@@ -44,7 +44,7 @@
         this.stamp = stamp;
     }
 
-    public Stamp stamp() {
+    public final Stamp stamp() {
         return stamp;
     }
 
@@ -80,7 +80,7 @@
         return false;
     }
 
-    public Kind kind() {
+    public final Kind kind() {
         return stamp().kind();
     }
 
--- a/graal/com.oracle.graal.word/src/com/oracle/graal/word/phases/WordTypeRewriterPhase.java	Mon Jul 15 15:58:48 2013 +0200
+++ b/graal/com.oracle.graal.word/src/com/oracle/graal/word/phases/WordTypeRewriterPhase.java	Mon Jul 15 16:36:54 2013 +0200
@@ -69,15 +69,20 @@
     @Override
     protected void run(StructuredGraph graph) {
         for (Node n : GraphOrder.forwardGraph(graph)) {
-            if (n instanceof ValueNode) {
+            if (n instanceof ValueNode && !(n instanceof PhiNode && ((PhiNode) n).isLoopPhi())) {
                 ValueNode valueNode = (ValueNode) n;
                 if (isWord(valueNode)) {
                     changeToWord(valueNode);
                 }
             }
         }
+        for (PhiNode phi : graph.getNodes(PhiNode.class)) {
+            if (phi.isLoopPhi() && isWord(phi)) {
+                changeToWord(phi);
+            }
+        }
 
-        // Remove casts between different word types (which are by now no longer have kind Object)
+        // Remove casts between different word types (which by now no longer have kind Object)
         for (CheckCastNode checkCastNode : graph.getNodes().filter(CheckCastNode.class).snapshot()) {
             if (!checkCastNode.isDeleted() && checkCastNode.kind() == wordKind) {
                 checkCastNode.replaceAtUsages(checkCastNode.object());