# HG changeset patch # User Lukas Stadler # Date 1373899014 -7200 # Node ID ae3d070ab223e0cc2d17d0fd794f022271caf4f3 # Parent d2f8addaf5049ec5844383706653fb66eff80640 make ValueNode.stamp() final, fix WordTypeRewriterPhase diff -r d2f8addaf504 -r ae3d070ab223 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ProxyNode.java --- 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; } diff -r d2f8addaf504 -r ae3d070ab223 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/TypeProfileProxyNode.java --- 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 diff -r d2f8addaf504 -r ae3d070ab223 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ValueNode.java --- 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(); } diff -r d2f8addaf504 -r ae3d070ab223 graal/com.oracle.graal.word/src/com/oracle/graal/word/phases/WordTypeRewriterPhase.java --- 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());