# HG changeset patch # User Thomas Wuerthinger # Date 1435272001 -7200 # Node ID 49530d60ec9bd20afbf92165d8c83f5091082979 # Parent 42ab3ffc93154443c6d88fbbb9f3a99bdc6d2e08# Parent eb025d2d7ce23f232b8bd463496c8fbeb0245200 Merge. diff -r 42ab3ffc9315 -r 49530d60ec9b graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/NodeIntrinsificationPlugin.java --- 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 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; } } diff -r 42ab3ffc9315 -r 49530d60ec9b graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/SnippetTemplate.java --- 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) { diff -r 42ab3ffc9315 -r 49530d60ec9b graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/DirectObjectStoreNode.java --- 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()))); diff -r 42ab3ffc9315 -r 49530d60ec9b jvmci/jdk.internal.jvmci.hotspot/src/jdk/internal/jvmci/hotspot/HotSpotObjectConstantImpl.java --- 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); }