changeset 19352:dd7d436a7e19

Merge
author Paul Woegerer <paul.woegerer@oracle.com>
date Fri, 13 Feb 2015 12:00:26 +0100
parents ef292a5bb79d (current diff) 78510d27786b (diff)
children 343e0e71031b
files
diffstat 3 files changed, 24 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ComputeAddressNode.java	Fri Feb 13 11:37:13 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ComputeAddressNode.java	Fri Feb 13 12:00:26 2015 +0100
@@ -52,6 +52,6 @@
     @Override
     public void generate(NodeLIRBuilderTool gen) {
         Value addr = getLocation().generateAddress(gen, gen.getLIRGeneratorTool(), gen.operand(getObject()));
-        gen.setResult(this, addr);
+        gen.setResult(this, gen.getLIRGeneratorTool().asAllocatable(addr));
     }
 }
--- a/graal/com.oracle.graal.word/src/com/oracle/graal/word/nodes/WordCastNode.java	Fri Feb 13 11:37:13 2015 +0100
+++ b/graal/com.oracle.graal.word/src/com/oracle/graal/word/nodes/WordCastNode.java	Fri Feb 13 12:00:26 2015 +0100
@@ -65,6 +65,17 @@
             /* If the cast is unused, it can be eliminated. */
             return input;
         }
+
+        assert !stamp().isCompatible(input.stamp());
+        if (input.isConstant()) {
+            /* Null pointers are uncritical for GC, so they can be constant folded. */
+            if (input.asJavaConstant().isNull()) {
+                return ConstantNode.forIntegerStamp(stamp(), 0);
+            } else if (input.asJavaConstant().getKind().isNumericInteger() && input.asJavaConstant().asLong() == 0) {
+                return ConstantNode.forConstant(stamp(), JavaConstant.NULL_POINTER, tool.getMetaAccess());
+            }
+        }
+
         return this;
     }
 
--- a/graal/com.oracle.graal.word/src/com/oracle/graal/word/phases/WordTypeRewriterPhase.java	Fri Feb 13 11:37:13 2015 +0100
+++ b/graal/com.oracle.graal.word/src/com/oracle/graal/word/phases/WordTypeRewriterPhase.java	Fri Feb 13 12:00:26 2015 +0100
@@ -113,6 +113,8 @@
     protected void rewriteNode(StructuredGraph graph, Node node) {
         if (node instanceof CheckCastNode) {
             rewriteCheckCast(graph, (CheckCastNode) node);
+        } else if (node instanceof PiNode) {
+            rewritePi(graph, (PiNode) node);
         } else if (node instanceof LoadFieldNode) {
             rewriteLoadField(graph, (LoadFieldNode) node);
         } else if (node instanceof AccessIndexedNode) {
@@ -133,6 +135,16 @@
     }
 
     /**
+     * Remove casts between word types (which by now no longer have kind Object).
+     */
+    protected void rewritePi(StructuredGraph graph, PiNode node) {
+        if (node.getKind() == wordKind) {
+            node.replaceAtUsages(node.object());
+            graph.removeFloating(node);
+        }
+    }
+
+    /**
      * Fold constant field reads, e.g. enum constants.
      */
     protected void rewriteLoadField(StructuredGraph graph, LoadFieldNode node) {