Mercurial > hg > graal-compiler
changeset 22475:cef905a78886
Truffle: register invocation plugins only once
author | Andreas Woess <andreas.woess@oracle.com> |
---|---|
date | Tue, 18 Aug 2015 12:37:18 +0200 |
parents | 0a93b83091fb |
children | 360295240c97 |
files | graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/PartialEvaluator.java |
diffstat | 1 files changed, 27 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/PartialEvaluator.java Tue Aug 18 14:09:28 2015 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/PartialEvaluator.java Tue Aug 18 12:37:18 2015 +0200 @@ -29,8 +29,10 @@ import jdk.internal.jvmci.code.*; import jdk.internal.jvmci.common.*; + import com.oracle.graal.debug.*; import com.oracle.graal.debug.Debug.*; + import jdk.internal.jvmci.meta.*; import jdk.internal.jvmci.options.*; @@ -78,7 +80,9 @@ private final ResolvedJavaMethod callInlinedMethod; private final ResolvedJavaMethod callSiteProxyMethod; private final ResolvedJavaMethod callRootMethod; - private final GraphBuilderConfiguration configForRoot; + private final GraphBuilderConfiguration configForPartialEvaluation; + private final GraphBuilderConfiguration configForParsing; + private final InvocationPlugins decodingInvocationPlugins; public PartialEvaluator(Providers providers, GraphBuilderConfiguration configForRoot, SnippetReflectionProvider snippetReflection, Architecture architecture) { this.providers = providers; @@ -88,13 +92,16 @@ this.callDirectMethod = providers.getMetaAccess().lookupJavaMethod(OptimizedCallTarget.getCallDirectMethod()); this.callInlinedMethod = providers.getMetaAccess().lookupJavaMethod(OptimizedCallTarget.getCallInlinedMethod()); this.callSiteProxyMethod = providers.getMetaAccess().lookupJavaMethod(GraalFrameInstance.CallNodeFrame.METHOD); - this.configForRoot = configForRoot; try { callRootMethod = providers.getMetaAccess().lookupJavaMethod(OptimizedCallTarget.class.getDeclaredMethod("callRoot", Object[].class)); } catch (NoSuchMethodException ex) { throw new RuntimeException(ex); } + + this.configForPartialEvaluation = createGraphBuilderConfig(configForRoot, false); + this.configForParsing = createGraphBuilderConfig(configForRoot, true); + this.decodingInvocationPlugins = createDecodingInvocationPlugins(); } public Providers getProviders() { @@ -287,9 +294,7 @@ } protected void doFastPE(OptimizedCallTarget callTarget, StructuredGraph graph) { - GraphBuilderConfiguration newConfig = configForRoot.copy(); - InvocationPlugins invocationPlugins = newConfig.getPlugins().getInvocationPlugins(); - TruffleGraphBuilderPlugins.registerInvocationPlugins(providers.getMetaAccess(), invocationPlugins, false, snippetReflection); + GraphBuilderConfiguration newConfig = configForPartialEvaluation.copy(); newConfig.setUseProfiling(false); Plugins plugins = newConfig.getPlugins(); @@ -315,9 +320,8 @@ } protected PEGraphDecoder createGraphDecoder(StructuredGraph graph) { - GraphBuilderConfiguration newConfig = configForRoot.copy(); + GraphBuilderConfiguration newConfig = configForParsing.copy(); InvocationPlugins parsingInvocationPlugins = newConfig.getPlugins().getInvocationPlugins(); - TruffleGraphBuilderPlugins.registerInvocationPlugins(providers.getMetaAccess(), parsingInvocationPlugins, true, snippetReflection); LoopExplosionPlugin loopExplosionPlugin = new PELoopExplosionPlugin(); @@ -341,7 +345,6 @@ LoopExplosionPlugin loopExplosionPlugin = new PELoopExplosionPlugin(); ParameterPlugin parameterPlugin = new InterceptReceiverPlugin(callTarget); - InvocationPlugins invocationPlugins = createDecodingInvocationPlugins(); ReplacementsImpl replacements = (ReplacementsImpl) providers.getReplacements(); InlineInvokePlugin[] inlineInvokePlugins; @@ -355,16 +358,30 @@ inlineInvokePlugins = new InlineInvokePlugin[]{replacements, inlineInvokePlugin}; } - decoder.decode(graph, graph.method(), loopExplosionPlugin, invocationPlugins, inlineInvokePlugins, parameterPlugin); + decoder.decode(graph, graph.method(), loopExplosionPlugin, decodingInvocationPlugins, inlineInvokePlugins, parameterPlugin); if (PrintTruffleExpansionHistogram.getValue()) { histogramPlugin.print(callTarget); } } + protected GraphBuilderConfiguration createGraphBuilderConfig(GraphBuilderConfiguration config, boolean canDelayIntrinsification) { + GraphBuilderConfiguration newConfig = config.copy(); + InvocationPlugins invocationPlugins = newConfig.getPlugins().getInvocationPlugins(); + registerTruffleInvocationPlugins(invocationPlugins, canDelayIntrinsification); + invocationPlugins.closeRegistration(); + return newConfig; + } + + protected void registerTruffleInvocationPlugins(InvocationPlugins invocationPlugins, boolean canDelayIntrinsification) { + TruffleGraphBuilderPlugins.registerInvocationPlugins(providers.getMetaAccess(), invocationPlugins, canDelayIntrinsification, snippetReflection); + } + protected InvocationPlugins createDecodingInvocationPlugins() { + @SuppressWarnings("hiding") InvocationPlugins decodingInvocationPlugins = new InvocationPlugins(providers.getMetaAccess()); - TruffleGraphBuilderPlugins.registerInvocationPlugins(providers.getMetaAccess(), decodingInvocationPlugins, false, snippetReflection); + registerTruffleInvocationPlugins(decodingInvocationPlugins, false); + decodingInvocationPlugins.closeRegistration(); return decodingInvocationPlugins; }