Mercurial > hg > graal-jvmci-8
changeset 20843:a74c785068e0
converted @MethodSubstitutions for jString.equals to MethodSubstitutionPlugins
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Wed, 08 Apr 2015 11:24:16 +0200 |
parents | 1f7ef92cb660 |
children | 3081a57f95fd |
files | graal/com.oracle.graal.graphbuilderconf/src/com/oracle/graal/graphbuilderconf/MethodSubstitutionPlugin.java graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/GraalMethodSubstitutions.java graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/StandardGraphBuilderPlugins.java graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/StringSubstitutions.java |
diffstat | 4 files changed, 17 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.graphbuilderconf/src/com/oracle/graal/graphbuilderconf/MethodSubstitutionPlugin.java Wed Apr 08 11:06:07 2015 +0200 +++ b/graal/com.oracle.graal.graphbuilderconf/src/com/oracle/graal/graphbuilderconf/MethodSubstitutionPlugin.java Wed Apr 08 11:24:16 2015 +0200 @@ -149,7 +149,20 @@ @Override public boolean execute(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver, ValueNode[] argsIncludingReceiver) { ResolvedJavaMethod subst = getSubstitute(b.getMetaAccess()); + if (receiver != null) { + receiver.get(); + } b.intrinsify(targetMethod, subst, argsIncludingReceiver); return true; } + + public StackTraceElement getApplySourceLocation(MetaAccessProvider metaAccess) { + Class<?> c = getClass(); + for (Method m : c.getDeclaredMethods()) { + if (m.getName().equals("execute")) { + return metaAccess.lookupJavaMethod(m).asStackTraceElement(0); + } + } + throw new GraalInternalError("could not find method named \"execute\" in " + c.getName()); + } }
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/GraalMethodSubstitutions.java Wed Apr 08 11:06:07 2015 +0200 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/GraalMethodSubstitutions.java Wed Apr 08 11:24:16 2015 +0200 @@ -38,7 +38,6 @@ public void registerReplacements(MetaAccessProvider metaAccess, LoweringProvider loweringProvider, SnippetReflectionProvider snippetReflection, Replacements replacements, TargetDescription target) { if (Intrinsify.getValue()) { - replacements.registerSubstitutions(String.class, StringSubstitutions.class); replacements.registerSubstitutions(Math.class, MathSubstitutionsX86.class); } }
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/StandardGraphBuilderPlugins.java Wed Apr 08 11:06:07 2015 +0200 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/StandardGraphBuilderPlugins.java Wed Apr 08 11:24:16 2015 +0200 @@ -96,7 +96,10 @@ } private static void registerStringPlugins(InvocationPlugins plugins) { - Registration r = new Registration(plugins, StringSubstitutions.class); + Registration r = new Registration(plugins, String.class); + r.registerMethodSubstitution(StringSubstitutions.class, "equals", Receiver.class, Object.class); + + r = new Registration(plugins, StringSubstitutions.class); r.register1("getValue", String.class, new InvocationPlugin() { public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver, ValueNode value) { ResolvedJavaField field = b.getMetaAccess().lookupJavaField(STRING_VALUE_FIELD);
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/StringSubstitutions.java Wed Apr 08 11:06:07 2015 +0200 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/StringSubstitutions.java Wed Apr 08 11:24:16 2015 +0200 @@ -22,7 +22,6 @@ */ package com.oracle.graal.replacements; -import com.oracle.graal.api.replacements.*; import com.oracle.graal.graphbuilderconf.*; import com.oracle.graal.nodes.java.*; import com.oracle.graal.replacements.nodes.*; @@ -32,10 +31,8 @@ /** * Substitutions for {@link java.lang.String} methods. */ -@ClassSubstitution(value = java.lang.String.class) public class StringSubstitutions { - @MethodSubstitution(isStatic = false) @SuppressFBWarnings(value = "ES_COMPARING_PARAMETER_STRING_WITH_EQ", justification = "reference equality on the receiver is what we want") public static boolean equals(final String thisString, Object obj) { if (thisString == obj) {