changeset 23091:ee40de319a24

Provide methods to create implicit load/store converts without adding them to the graph.
author Roland Schatz <roland.schatz@oracle.com>
date Thu, 26 Nov 2015 14:27:42 +0100
parents 9496d2b81bc2
children 407b3a638b04
files graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/DefaultHotSpotLoweringProvider.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ConstantNode.java graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/DefaultJavaLoweringProvider.java
diffstat 3 files changed, 47 insertions(+), 19 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/DefaultHotSpotLoweringProvider.java	Wed Nov 25 21:40:38 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/DefaultHotSpotLoweringProvider.java	Thu Nov 26 14:27:42 2015 +0100
@@ -63,6 +63,7 @@
 import com.oracle.graal.graph.NodeInputList;
 import com.oracle.graal.hotspot.HotSpotGraalRuntimeProvider;
 import com.oracle.graal.hotspot.nodes.CompressionNode;
+import com.oracle.graal.hotspot.nodes.CompressionNode.CompressionOp;
 import com.oracle.graal.hotspot.nodes.ComputeObjectAddressNode;
 import com.oracle.graal.hotspot.nodes.G1ArrayRangePostWriteBarrier;
 import com.oracle.graal.hotspot.nodes.G1ArrayRangePreWriteBarrier;
@@ -412,11 +413,11 @@
     }
 
     @Override
-    protected ValueNode implicitLoadConvert(StructuredGraph graph, JavaKind kind, ValueNode value, boolean compressible) {
+    protected ValueNode implicitLoadConvert(JavaKind kind, ValueNode value, boolean compressible) {
         if (kind == JavaKind.Object && compressible && config().useCompressedOops) {
-            return CompressionNode.uncompress(value, config().getOopEncoding());
+            return new CompressionNode(CompressionOp.Uncompress, value, config().getOopEncoding());
         }
-        return super.implicitLoadConvert(graph, kind, value, compressible);
+        return super.implicitLoadConvert(kind, value, compressible);
     }
 
     @Override
@@ -427,11 +428,11 @@
     }
 
     @Override
-    protected ValueNode implicitStoreConvert(StructuredGraph graph, JavaKind kind, ValueNode value, boolean compressible) {
+    protected ValueNode implicitStoreConvert(JavaKind kind, ValueNode value, boolean compressible) {
         if (kind == JavaKind.Object && compressible && config().useCompressedOops) {
-            return CompressionNode.compress(value, config().getOopEncoding());
+            return new CompressionNode(CompressionOp.Compress, value, config().getOopEncoding());
         }
-        return super.implicitStoreConvert(graph, kind, value, compressible);
+        return super.implicitStoreConvert(kind, value, compressible);
     }
 
     @Override
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ConstantNode.java	Wed Nov 25 21:40:38 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ConstantNode.java	Thu Nov 26 14:27:42 2015 +0100
@@ -463,21 +463,25 @@
     }
 
     public static ConstantNode defaultForKind(JavaKind kind, StructuredGraph graph) {
+        return unique(graph, defaultForKind(kind));
+    }
+
+    public static ConstantNode defaultForKind(JavaKind kind) {
         switch (kind) {
             case Boolean:
             case Byte:
             case Char:
             case Short:
             case Int:
-                return ConstantNode.forInt(0, graph);
+                return ConstantNode.forInt(0);
             case Double:
-                return ConstantNode.forDouble(0.0, graph);
+                return ConstantNode.forDouble(0.0);
             case Float:
-                return ConstantNode.forFloat(0.0f, graph);
+                return ConstantNode.forFloat(0.0f);
             case Long:
-                return ConstantNode.forLong(0L, graph);
+                return ConstantNode.forLong(0L);
             case Object:
-                return ConstantNode.forConstant(JavaConstant.NULL_POINTER, null, graph);
+                return ConstantNode.forConstant(JavaConstant.NULL_POINTER, null);
             default:
                 return null;
         }
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/DefaultJavaLoweringProvider.java	Wed Nov 25 21:40:38 2015 +0100
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/DefaultJavaLoweringProvider.java	Thu Nov 26 14:27:42 2015 +0100
@@ -715,35 +715,58 @@
         return stamp;
     }
 
-    public ValueNode implicitLoadConvert(StructuredGraph graph, JavaKind kind, ValueNode value) {
+    public final ValueNode implicitLoadConvert(StructuredGraph graph, JavaKind kind, ValueNode value) {
         return implicitLoadConvert(graph, kind, value, true);
+    }
 
+    public ValueNode implicitLoadConvert(JavaKind kind, ValueNode value) {
+        return implicitLoadConvert(kind, value, true);
     }
 
-    protected ValueNode implicitLoadConvert(StructuredGraph graph, JavaKind kind, ValueNode value, @SuppressWarnings("unused") boolean compressible) {
+    protected final ValueNode implicitLoadConvert(StructuredGraph graph, JavaKind kind, ValueNode value, boolean compressible) {
+        ValueNode ret = implicitLoadConvert(kind, value, compressible);
+        if (!ret.isAlive()) {
+            ret = graph.addOrUnique(ret);
+        }
+        return ret;
+    }
+
+    protected ValueNode implicitLoadConvert(JavaKind kind, ValueNode value, @SuppressWarnings("unused") boolean compressible) {
         switch (kind) {
             case Byte:
             case Short:
-                return graph.unique(new SignExtendNode(value, 32));
+                return new SignExtendNode(value, 32);
             case Boolean:
             case Char:
-                return graph.unique(new ZeroExtendNode(value, 32));
+                return new ZeroExtendNode(value, 32);
         }
         return value;
     }
 
-    public ValueNode implicitStoreConvert(StructuredGraph graph, JavaKind kind, ValueNode value) {
+    public final ValueNode implicitStoreConvert(StructuredGraph graph, JavaKind kind, ValueNode value) {
         return implicitStoreConvert(graph, kind, value, true);
     }
 
-    protected ValueNode implicitStoreConvert(StructuredGraph graph, JavaKind kind, ValueNode value, @SuppressWarnings("unused") boolean compressible) {
+    public ValueNode implicitStoreConvert(JavaKind kind, ValueNode value) {
+        return implicitStoreConvert(kind, value, true);
+    }
+
+    protected final ValueNode implicitStoreConvert(StructuredGraph graph, JavaKind kind, ValueNode value, boolean compressible) {
+        ValueNode ret = implicitStoreConvert(kind, value, compressible);
+        if (!ret.isAlive()) {
+            ret = graph.addOrUnique(ret);
+        }
+        return ret;
+    }
+
+    protected ValueNode implicitStoreConvert(JavaKind kind, ValueNode value, @SuppressWarnings("unused") boolean compressible) {
         switch (kind) {
             case Boolean:
             case Byte:
-                return graph.unique(new NarrowNode(value, 8));
+                return new NarrowNode(value, 8);
             case Char:
             case Short:
-                return graph.unique(new NarrowNode(value, 16));
+                return new NarrowNode(value, 16);
         }
         return value;
     }