changeset 22097:49530d60ec9b

Merge.
author Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
date Fri, 26 Jun 2015 00:40:01 +0200
parents 42ab3ffc9315 (current diff) eb025d2d7ce2 (diff)
children e635912529ea
files
diffstat 4 files changed, 41 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/NodeIntrinsificationPlugin.java	Fri Jun 26 00:04:44 2015 +0200
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/NodeIntrinsificationPlugin.java	Fri Jun 26 00:40:01 2015 +0200
@@ -195,8 +195,7 @@
 
     private ValueNode createNodeIntrinsic(GraphBuilderContext b, ResolvedJavaMethod method, NodeIntrinsic intrinsic, List<ValueNode> args, Stamp stamp) {
         ValueNode res = nodeIntrinsification.createIntrinsicNode(args, stamp, method, b.getGraph(), intrinsic);
-        assert res != null || b.getGraph().method().getAnnotation(Snippet.class) != null : String.format(
-                        "Could not create node intrinsic for call to %s as one of the arguments expected to be constant isn't: arguments=%s", method.format("%H.%n(%p)"), args);
+        assert res != null : String.format("Could not create node intrinsic for call to %s as one of the arguments expected to be constant isn't: arguments=%s", method.format("%H.%n(%p)"), args);
         return res;
     }
 }
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/SnippetTemplate.java	Fri Jun 26 00:04:44 2015 +0200
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/SnippetTemplate.java	Fri Jun 26 00:40:01 2015 +0200
@@ -28,7 +28,6 @@
 import static jdk.internal.jvmci.debug.Debug.*;
 import static jdk.internal.jvmci.meta.LocationIdentity.*;
 
-import java.io.*;
 import java.lang.reflect.*;
 import java.util.*;
 import java.util.concurrent.*;
@@ -163,8 +162,7 @@
         void notifyNewTemplate() {
             templateCount++;
             if (UseSnippetTemplateCache && templateCount == MaxTemplatesPerSnippet) {
-                PrintStream err = System.err;
-                err.printf("WARNING: Exceeded %d templates for snippet %s%n" + "         Adjust maximum with %s system property%n", MaxTemplatesPerSnippet, method.format("%h.%n(%p)"),
+                TTY.print("WARNING: Exceeded %d templates for snippet %s%n" + "         Adjust maximum with %s system property%n", MaxTemplatesPerSnippet, method.format("%h.%n(%p)"),
                                 MAX_TEMPLATES_PER_SNIPPET_PROPERTY_NAME);
             }
         }
@@ -256,6 +254,7 @@
         protected final CacheKey cacheKey;
         protected final Object[] values;
         protected final Stamp[] constStamps;
+        protected boolean cacheable;
 
         protected int nextParamIdx;
 
@@ -264,6 +263,7 @@
             this.cacheKey = new CacheKey(info, guardsStage, loweringStage);
             this.values = new Object[info.getParameterCount()];
             this.constStamps = new Stamp[info.getParameterCount()];
+            this.cacheable = true;
         }
 
         public Arguments add(String name, Object value) {
@@ -297,6 +297,10 @@
             return this;
         }
 
+        public void setCacheable(boolean cacheable) {
+            this.cacheable = cacheable;
+        }
+
         private boolean check(String name, boolean constParam, boolean varargsParam) {
             assert nextParamIdx < info.getParameterCount() : "too many parameters: " + name + "  " + this;
             assert info.getParameterName(nextParamIdx) == null || info.getParameterName(nextParamIdx).equals(name) : "wrong parameter name: " + name + "  " + this;
@@ -530,12 +534,12 @@
          * Gets a template for a given key, creating it first if necessary.
          */
         protected SnippetTemplate template(final Arguments args) {
-            SnippetTemplate template = UseSnippetTemplateCache ? templates.get(args.cacheKey) : null;
+            SnippetTemplate template = UseSnippetTemplateCache && args.cacheable ? templates.get(args.cacheKey) : null;
             if (template == null) {
                 SnippetTemplates.increment();
                 try (DebugCloseable a = SnippetTemplateCreationTime.start(); Scope s = Debug.scope("SnippetSpecialization", args.info.method)) {
                     template = new SnippetTemplate(providers, snippetReflection, args);
-                    if (UseSnippetTemplateCache) {
+                    if (UseSnippetTemplateCache && args.cacheable) {
                         templates.put(args.cacheKey, template);
                     }
                 } catch (Throwable e) {
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/DirectObjectStoreNode.java	Fri Jun 26 00:04:44 2015 +0200
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/DirectObjectStoreNode.java	Fri Jun 26 00:40:01 2015 +0200
@@ -36,7 +36,8 @@
 
 /**
  * A special purpose store node that differs from {@link UnsafeStoreNode} in that it is not a
- * {@link StateSplit} and does not include a write barrier.
+ * {@link StateSplit} and does not include a write barrier. Note that contrary to the sound of the
+ * name this node can be used for storing any kind.
  */
 @NodeInfo
 public final class DirectObjectStoreNode extends FixedWithNextNode implements Lowerable {
@@ -64,9 +65,37 @@
                     @ConstantNodeParameter Kind storeKind);
 
     @NodeIntrinsic
+    public static native void storeBoolean(Object obj, @ConstantNodeParameter int displacement, long offset, boolean value, @ConstantNodeParameter LocationIdentity locationIdenity,
+                    @ConstantNodeParameter Kind storeKind);
+
+    @NodeIntrinsic
+    public static native void storeByte(Object obj, @ConstantNodeParameter int displacement, long offset, byte value, @ConstantNodeParameter LocationIdentity locationIdenity,
+                    @ConstantNodeParameter Kind storeKind);
+
+    @NodeIntrinsic
+    public static native void storeChar(Object obj, @ConstantNodeParameter int displacement, long offset, char value, @ConstantNodeParameter LocationIdentity locationIdenity,
+                    @ConstantNodeParameter Kind storeKind);
+
+    @NodeIntrinsic
+    public static native void storeShort(Object obj, @ConstantNodeParameter int displacement, long offset, short value, @ConstantNodeParameter LocationIdentity locationIdenity,
+                    @ConstantNodeParameter Kind storeKind);
+
+    @NodeIntrinsic
+    public static native void storeInt(Object obj, @ConstantNodeParameter int displacement, long offset, int value, @ConstantNodeParameter LocationIdentity locationIdenity,
+                    @ConstantNodeParameter Kind storeKind);
+
+    @NodeIntrinsic
     public static native void storeLong(Object obj, @ConstantNodeParameter int displacement, long offset, long value, @ConstantNodeParameter LocationIdentity locationIdenity,
                     @ConstantNodeParameter Kind storeKind);
 
+    @NodeIntrinsic
+    public static native void storeFloat(Object obj, @ConstantNodeParameter int displacement, long offset, float value, @ConstantNodeParameter LocationIdentity locationIdenity,
+                    @ConstantNodeParameter Kind storeKind);
+
+    @NodeIntrinsic
+    public static native void storeDouble(Object obj, @ConstantNodeParameter int displacement, long offset, double value, @ConstantNodeParameter LocationIdentity locationIdenity,
+                    @ConstantNodeParameter Kind storeKind);
+
     @Override
     public void lower(LoweringTool tool) {
         ValueNode off = graph().unique(new AddNode(offset, ConstantNode.forIntegerStamp(offset.stamp(), displacement, graph())));
--- a/jvmci/jdk.internal.jvmci.hotspot/src/jdk/internal/jvmci/hotspot/HotSpotObjectConstantImpl.java	Fri Jun 26 00:04:44 2015 +0200
+++ b/jvmci/jdk.internal.jvmci.hotspot/src/jdk/internal/jvmci/hotspot/HotSpotObjectConstantImpl.java	Fri Jun 26 00:40:01 2015 +0200
@@ -260,7 +260,7 @@
     @Override
     public String toValueString() {
         if (object instanceof String) {
-            return (String) object;
+            return "\"" + (String) object + "\"";
         } else {
             return Kind.Object.format(object);
         }