Mercurial > hg > graal-jvmci-8
changeset 19145:18caaceabfdb
Create prototype for new graph builder plugin for loop explosion.
author | Thomas Wuerthinger <thomas.wuerthinger@oracle.com> |
---|---|
date | Thu, 05 Feb 2015 01:28:10 +0100 |
parents | 41af11212ed3 |
children | df63505aa8e9 |
files | graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderConfiguration.java graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPlugins.java graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/PartialEvaluator.java |
diffstat | 3 files changed, 22 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderConfiguration.java Thu Feb 05 01:24:09 2015 +0100 +++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderConfiguration.java Thu Feb 05 01:28:10 2015 +0100 @@ -39,6 +39,7 @@ private GraphBuilderPlugins.LoadFieldPlugin loadFieldPlugin; private GraphBuilderPlugins.ParameterPlugin parameterPlugin; private GraphBuilderPlugins.InlineInvokePlugin inlineInvokePlugin; + private GraphBuilderPlugins.LoopExplosionPlugin loopExplosionPlugin; public static enum DebugInfoMode { SafePointsOnly, @@ -167,4 +168,12 @@ public void setInlineInvokePlugin(GraphBuilderPlugins.InlineInvokePlugin inlineInvokePlugin) { this.inlineInvokePlugin = inlineInvokePlugin; } + + public GraphBuilderPlugins.LoopExplosionPlugin getLoopExplosionPlugin() { + return loopExplosionPlugin; + } + + public void setLoopExplosionPlugin(GraphBuilderPlugins.LoopExplosionPlugin loopExplosionPlugin) { + this.loopExplosionPlugin = loopExplosionPlugin; + } }
--- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPlugins.java Thu Feb 05 01:24:09 2015 +0100 +++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPlugins.java Thu Feb 05 01:28:10 2015 +0100 @@ -49,6 +49,10 @@ boolean shouldInlineInvoke(ResolvedJavaMethod method, int depth); } + public interface LoopExplosionPlugin extends GraphBuilderPlugin { + boolean shouldExplodeLoops(ResolvedJavaMethod method); + } + /** * Plugin for handling a method invocation. */
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/PartialEvaluator.java Thu Feb 05 01:24:09 2015 +0100 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/PartialEvaluator.java Thu Feb 05 01:28:10 2015 +0100 @@ -185,12 +185,21 @@ } + private class LoopExplosionPlugin implements GraphBuilderPlugins.LoopExplosionPlugin { + + public boolean shouldExplodeLoops(ResolvedJavaMethod method) { + return method.getAnnotation(ExplodeLoop.class) == null; + } + + } + @SuppressWarnings("unused") private void fastPartialEvaluation(OptimizedCallTarget callTarget, Assumptions assumptions, StructuredGraph graph, PhaseContext baseContext, HighTierContext tierContext) { GraphBuilderConfiguration newConfig = configForRoot.copy(); newConfig.setLoadFieldPlugin(new InterceptLoadFieldPlugin()); newConfig.setParameterPlugin(new InterceptReceiverPlugin(callTarget)); newConfig.setInlineInvokePlugin(new InlineInvokePlugin()); + newConfig.setLoopExplosionPlugin(new LoopExplosionPlugin()); DefaultGraphBuilderPlugins plugins = new DefaultGraphBuilderPlugins(); Iterable<GraphBuilderPluginsProvider> sl = Services.load(GraphBuilderPluginsProvider.class); for (GraphBuilderPluginsProvider p : sl) {