Mercurial > hg > graal-jvmci-8
changeset 19398:e4d40c71954b
added InlineInvokePlugin for Graal
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Mon, 16 Feb 2015 14:22:15 +0100 |
parents | 1307b475f10d |
children | 7d924ac67522 |
files | graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotSuitesProvider.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/Replacements.java graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/ReplacementsImpl.java |
diffstat | 3 files changed, 35 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotSuitesProvider.java Mon Feb 16 14:15:52 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotSuitesProvider.java Mon Feb 16 14:22:15 2015 +0100 @@ -25,6 +25,7 @@ import static com.oracle.graal.compiler.common.GraalOptions.*; import com.oracle.graal.api.meta.*; +import com.oracle.graal.api.replacements.*; import com.oracle.graal.compiler.common.*; import com.oracle.graal.hotspot.*; import com.oracle.graal.hotspot.bridge.*; @@ -35,6 +36,7 @@ import com.oracle.graal.java.GraphBuilderPlugin.LoadFieldPlugin; import com.oracle.graal.lir.phases.*; import com.oracle.graal.nodes.*; +import com.oracle.graal.nodes.spi.*; import com.oracle.graal.options.*; import com.oracle.graal.options.DerivedOptionValue.OptionSupplier; import com.oracle.graal.phases.*; @@ -128,7 +130,26 @@ public boolean apply(GraphBuilderContext builder, ResolvedJavaField staticField) { return tryConstantFold(builder, runtime.getHostProviders().getMetaAccess(), runtime.getHostProviders().getConstantReflection(), staticField, null); } - + }); + config.setInlineInvokePlugin(new InlineInvokePlugin() { + public ResolvedJavaMethod getInlinedMethod(GraphBuilderContext builder, ResolvedJavaMethod method, ValueNode[] args, JavaType returnType, int depth) { + if (GraalOptions.InlineDuringParsing.getValue()) { + if (builder.parsingReplacement()) { + if (method.getAnnotation(MethodSubstitution.class) != null) { + HotSpotProviders providers = runtime.getHostProviders(); + Replacements replacements = providers.getReplacements(); + ResolvedJavaMethod subst = replacements.getMethodSubstitutionMethod(method); + if (subst != null) { + return subst; + } + } + } + if (method.hasBytecodes() && method.getCode().length <= GraalOptions.TrivialInliningSize.getValue() && depth < GraalOptions.InlineDuringParsingMaxDepth.getValue()) { + return method; + } + } + return null; + } }); suite.appendPhase(new GraphBuilderPhase(config)); return suite;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/Replacements.java Mon Feb 16 14:15:52 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/Replacements.java Mon Feb 16 14:22:15 2015 +0100 @@ -73,6 +73,13 @@ StructuredGraph getMethodSubstitution(ResolvedJavaMethod method); /** + * Gets the method that is a substitution for a given method. + * + * @return the method, if any, that is a substitution for {@code method} + */ + ResolvedJavaMethod getMethodSubstitutionMethod(ResolvedJavaMethod method); + + /** * Gets the node class with which a method invocation should be replaced. * * @param method target of an invocation
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/ReplacementsImpl.java Mon Feb 16 14:15:52 2015 +0100 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/ReplacementsImpl.java Mon Feb 16 14:22:15 2015 +0100 @@ -828,6 +828,12 @@ } @Override + public ResolvedJavaMethod getMethodSubstitutionMethod(ResolvedJavaMethod original) { + ClassReplacements cr = getClassReplacements(original.getDeclaringClass().getName()); + return cr == null ? null : cr.methodSubstitutions.get(original); + } + + @Override public void registerSnippetTemplateCache(SnippetTemplateCache templates) { assert snippetTemplateCache.get(templates.getClass().getName()) == null; snippetTemplateCache.put(templates.getClass().getName(), templates);