# HG changeset patch # User Thomas Wuerthinger # Date 1423096090 -3600 # Node ID 18caaceabfdbf4c40d919e150edf6861180990b1 # Parent 41af11212ed308e59dbd87fe1b5c4dfc790cbba3 Create prototype for new graph builder plugin for loop explosion. diff -r 41af11212ed3 -r 18caaceabfdb graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderConfiguration.java --- 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; + } } diff -r 41af11212ed3 -r 18caaceabfdb graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPlugins.java --- 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. */ diff -r 41af11212ed3 -r 18caaceabfdb graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/PartialEvaluator.java --- 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 sl = Services.load(GraphBuilderPluginsProvider.class); for (GraphBuilderPluginsProvider p : sl) {