changeset 19787:7117697d11e1

refactored graph builder plugins into a separate class renamed AnnotatedInvocationPlugins to GenericInvocationPlugin
author Doug Simon <doug.simon@oracle.com>
date Tue, 10 Mar 2015 21:59:29 +0100
parents 2ddc2ddd89ac
children 94d87f6324a3
files graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotHostBackend.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotAnnotatedInvocationPlugin.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotSuitesProvider.java graal/com.oracle.graal.java/src/com/oracle/graal/java/AbstractBytecodeParser.java graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderConfiguration.java graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPlugin.java graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/PartialEvaluator.java graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCompilerImpl.java
diffstat 9 files changed, 105 insertions(+), 74 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotHostBackend.java	Tue Mar 10 21:39:31 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotHostBackend.java	Tue Mar 10 21:59:29 2015 +0100
@@ -73,7 +73,7 @@
 
         try (InitTimer st = timer("graphBuilderPlugins.initialize")) {
             GraphBuilderPhase phase = (GraphBuilderPhase) providers.getSuites().getDefaultGraphBuilderSuite().findPhase(GraphBuilderPhase.class).previous();
-            InvocationPlugins plugins = phase.getGraphBuilderConfig().getInvocationPlugins();
+            InvocationPlugins plugins = phase.getGraphBuilderConfig().getPlugins().getInvocationPlugins();
             registerInvocationPlugins(providers, plugins);
         }
 
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotAnnotatedInvocationPlugin.java	Tue Mar 10 21:39:31 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotAnnotatedInvocationPlugin.java	Tue Mar 10 21:59:29 2015 +0100
@@ -35,7 +35,7 @@
 import com.oracle.graal.nodes.*;
 import com.oracle.graal.replacements.*;
 
-final class HotSpotAnnotatedInvocationPlugin implements AnnotatedInvocationPlugin {
+final class HotSpotAnnotatedInvocationPlugin implements GenericInvocationPlugin {
     private final HotSpotSuitesProvider suites;
 
     public HotSpotAnnotatedInvocationPlugin(HotSpotSuitesProvider suites) {
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotSuitesProvider.java	Tue Mar 10 21:39:31 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotSuitesProvider.java	Tue Mar 10 21:59:29 2015 +0100
@@ -119,9 +119,9 @@
     protected PhaseSuite<HighTierContext> createGraphBuilderSuite(MetaAccessProvider metaAccess, ConstantReflectionProvider constantReflection, Replacements replacements) {
         PhaseSuite<HighTierContext> suite = new PhaseSuite<>();
         GraphBuilderConfiguration config = GraphBuilderConfiguration.getDefault();
-        config.setLoadFieldPlugin(new HotSpotLoadFieldPlugin(metaAccess, constantReflection));
-        config.setInlineInvokePlugin(new HotSpotInlineInvokePlugin(this, replacements));
-        config.setAnnotatedInvocationPlugin(new HotSpotAnnotatedInvocationPlugin(this));
+        config.getPlugins().setLoadFieldPlugin(new HotSpotLoadFieldPlugin(metaAccess, constantReflection));
+        config.getPlugins().setInlineInvokePlugin(new HotSpotInlineInvokePlugin(this, replacements));
+        config.getPlugins().setGenericInvocationPlugin(new HotSpotAnnotatedInvocationPlugin(this));
         suite.appendPhase(new GraphBuilderPhase(config));
         return suite;
     }
--- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/AbstractBytecodeParser.java	Tue Mar 10 21:39:31 2015 +0100
+++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/AbstractBytecodeParser.java	Tue Mar 10 21:59:29 2015 +0100
@@ -689,7 +689,7 @@
         Kind kind = field.getKind();
         ValueNode receiver = frameState.apop();
         if ((field instanceof ResolvedJavaField) && ((ResolvedJavaField) field).getDeclaringClass().isInitialized()) {
-            LoadFieldPlugin loadFieldPlugin = this.graphBuilderConfig.getLoadFieldPlugin();
+            LoadFieldPlugin loadFieldPlugin = this.graphBuilderConfig.getPlugins().getLoadFieldPlugin();
             if (loadFieldPlugin == null || !loadFieldPlugin.apply((GraphBuilderContext) this, receiver, (ResolvedJavaField) field)) {
                 appendOptimizedLoadField(kind, genLoadField(receiver, (ResolvedJavaField) field));
             }
@@ -738,7 +738,7 @@
     private void genGetStatic(JavaField field) {
         Kind kind = field.getKind();
         if (field instanceof ResolvedJavaField && ((ResolvedJavaType) field.getDeclaringClass()).isInitialized()) {
-            LoadFieldPlugin loadFieldPlugin = this.graphBuilderConfig.getLoadFieldPlugin();
+            LoadFieldPlugin loadFieldPlugin = this.graphBuilderConfig.getPlugins().getLoadFieldPlugin();
             if (loadFieldPlugin == null || !loadFieldPlugin.apply((GraphBuilderContext) this, (ResolvedJavaField) field)) {
                 appendOptimizedLoadField(kind, genLoadField(null, (ResolvedJavaField) field));
             }
--- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderConfiguration.java	Tue Mar 10 21:39:31 2015 +0100
+++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderConfiguration.java	Tue Mar 10 21:59:29 2015 +0100
@@ -26,7 +26,7 @@
 
 import com.oracle.graal.api.meta.*;
 import com.oracle.graal.compiler.common.*;
-import com.oracle.graal.java.GraphBuilderPlugin.AnnotatedInvocationPlugin;
+import com.oracle.graal.java.GraphBuilderPlugin.GenericInvocationPlugin;
 import com.oracle.graal.java.GraphBuilderPlugin.InlineInvokePlugin;
 import com.oracle.graal.java.GraphBuilderPlugin.LoadFieldPlugin;
 import com.oracle.graal.java.GraphBuilderPlugin.LoopExplosionPlugin;
@@ -34,6 +34,80 @@
 import com.oracle.graal.nodes.*;
 
 public class GraphBuilderConfiguration {
+
+    public static class Plugins {
+        private InvocationPlugins invocationPlugins;
+        private LoadFieldPlugin loadFieldPlugin;
+        private ParameterPlugin parameterPlugin;
+        private InlineInvokePlugin inlineInvokePlugin;
+        private GenericInvocationPlugin genericInvocationPlugin;
+        private LoopExplosionPlugin loopExplosionPlugin;
+
+        public Plugins() {
+            invocationPlugins = new InvocationPlugins();
+        }
+
+        public Plugins(InvocationPlugins invocationPlugins) {
+            this.invocationPlugins = invocationPlugins;
+        }
+
+        public InvocationPlugins getInvocationPlugins() {
+            return invocationPlugins;
+        }
+
+        public GenericInvocationPlugin getGenericInvocationPlugin() {
+            return genericInvocationPlugin;
+        }
+
+        public void setGenericInvocationPlugin(GenericInvocationPlugin plugin) {
+            this.genericInvocationPlugin = plugin;
+        }
+
+        public LoadFieldPlugin getLoadFieldPlugin() {
+            return loadFieldPlugin;
+        }
+
+        public void setLoadFieldPlugin(LoadFieldPlugin plugin) {
+            this.loadFieldPlugin = plugin;
+        }
+
+        public ParameterPlugin getParameterPlugin() {
+            return parameterPlugin;
+        }
+
+        public void setParameterPlugin(ParameterPlugin plugin) {
+            this.parameterPlugin = plugin;
+        }
+
+        public InlineInvokePlugin getInlineInvokePlugin() {
+            return inlineInvokePlugin;
+        }
+
+        public void setInlineInvokePlugin(InlineInvokePlugin plugin) {
+            this.inlineInvokePlugin = plugin;
+        }
+
+        public LoopExplosionPlugin getLoopExplosionPlugin() {
+            return loopExplosionPlugin;
+        }
+
+        public void setLoopExplosionPlugin(LoopExplosionPlugin plugin) {
+            this.loopExplosionPlugin = plugin;
+        }
+
+        public Plugins updateFrom(Plugins other, boolean includeInvocationPlugins) {
+            if (includeInvocationPlugins) {
+                this.invocationPlugins.updateFrom(other.getInvocationPlugins());
+            }
+            this.parameterPlugin = other.parameterPlugin;
+            this.loadFieldPlugin = other.loadFieldPlugin;
+            this.inlineInvokePlugin = other.inlineInvokePlugin;
+            this.loopExplosionPlugin = other.loopExplosionPlugin;
+            this.genericInvocationPlugin = other.genericInvocationPlugin;
+            return this;
+        }
+    }
+
     private static final ResolvedJavaType[] EMPTY = new ResolvedJavaType[]{};
 
     private final boolean eagerResolving;
@@ -41,13 +115,8 @@
     private final ResolvedJavaType[] skippedExceptionTypes;
     private final DebugInfoMode debugInfoMode;
     private final boolean doLivenessAnalysis;
-    private InvocationPlugins invocationPlugins = new InvocationPlugins();
-    private LoadFieldPlugin loadFieldPlugin;
-    private ParameterPlugin parameterPlugin;
-    private InlineInvokePlugin inlineInvokePlugin;
-    private AnnotatedInvocationPlugin annotatedInvocationPlugin;
-    private LoopExplosionPlugin loopExplosionPlugin;
     private boolean useProfiling;
+    private Plugins plugins = new Plugins();
 
     public static enum DebugInfoMode {
         SafePointsOnly,
@@ -114,26 +183,6 @@
         return new GraphBuilderConfiguration(eagerResolving, omitAllExceptionEdges, debugInfoMode, skippedExceptionTypes, newLivenessAnalysis);
     }
 
-    public InvocationPlugins getInvocationPlugins() {
-        return invocationPlugins;
-    }
-
-    public AnnotatedInvocationPlugin getAnnotatedInvocationPlugin() {
-        return annotatedInvocationPlugin;
-    }
-
-    public void setAnnotatedInvocationPlugin(AnnotatedInvocationPlugin plugin) {
-        this.annotatedInvocationPlugin = plugin;
-    }
-
-    public LoadFieldPlugin getLoadFieldPlugin() {
-        return loadFieldPlugin;
-    }
-
-    public void setLoadFieldPlugin(LoadFieldPlugin plugin) {
-        this.loadFieldPlugin = plugin;
-    }
-
     public ResolvedJavaType[] getSkippedExceptionTypes() {
         return skippedExceptionTypes;
     }
@@ -183,37 +232,16 @@
         return eagerResolving;
     }
 
-    public ParameterPlugin getParameterPlugin() {
-        return parameterPlugin;
-    }
-
-    public void setParameterPlugin(ParameterPlugin plugin) {
-        this.parameterPlugin = plugin;
+    public Plugins getPlugins() {
+        return plugins;
     }
 
-    public InlineInvokePlugin getInlineInvokePlugin() {
-        return inlineInvokePlugin;
-    }
-
-    public void setInlineInvokePlugin(InlineInvokePlugin plugin) {
-        this.inlineInvokePlugin = plugin;
-    }
-
-    public LoopExplosionPlugin getLoopExplosionPlugin() {
-        return loopExplosionPlugin;
-    }
-
-    public void setLoopExplosionPlugin(LoopExplosionPlugin plugin) {
-        this.loopExplosionPlugin = plugin;
+    public void setPlugins(Plugins plugins) {
+        this.plugins = plugins;
     }
 
     public GraphBuilderConfiguration copyPluginsFrom(GraphBuilderConfiguration other) {
-        this.invocationPlugins.updateFrom(other.getInvocationPlugins());
-        this.parameterPlugin = other.parameterPlugin;
-        this.loadFieldPlugin = other.loadFieldPlugin;
-        this.inlineInvokePlugin = other.inlineInvokePlugin;
-        this.loopExplosionPlugin = other.loopExplosionPlugin;
-        this.annotatedInvocationPlugin = other.annotatedInvocationPlugin;
+        this.plugins.updateFrom(other.plugins, true);
         return this;
     }
 }
--- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java	Tue Mar 10 21:39:31 2015 +0100
+++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java	Tue Mar 10 21:59:29 2015 +0100
@@ -47,7 +47,7 @@
 import com.oracle.graal.graph.iterators.*;
 import com.oracle.graal.java.BciBlockMapping.BciBlock;
 import com.oracle.graal.java.BciBlockMapping.ExceptionDispatchBlock;
-import com.oracle.graal.java.GraphBuilderPlugin.AnnotatedInvocationPlugin;
+import com.oracle.graal.java.GraphBuilderPlugin.GenericInvocationPlugin;
 import com.oracle.graal.java.GraphBuilderPlugin.InlineInvokePlugin;
 import com.oracle.graal.java.GraphBuilderPlugin.InvocationPlugin;
 import com.oracle.graal.java.GraphBuilderPlugin.LoopExplosionPlugin;
@@ -129,7 +129,7 @@
             assert method.getCode() != null : "method must contain bytecodes: " + method;
             this.currentGraph = graph;
             HIRFrameStateBuilder frameState = new HIRFrameStateBuilder(method, graph, true, null);
-            frameState.initializeForMethodStart(graphBuilderConfig.eagerResolving(), this.graphBuilderConfig.getParameterPlugin());
+            frameState.initializeForMethodStart(graphBuilderConfig.eagerResolving(), this.graphBuilderConfig.getPlugins().getParameterPlugin());
             TTY.Filter filter = new TTY.Filter(PrintFilter.getValue(), method);
             try {
                 BytecodeParser parser = new BytecodeParser(null, metaAccess, method, graphBuilderConfig, optimisticOpts, entryBCI, rootMethodIsReplacement);
@@ -231,7 +231,7 @@
                     previousLineNumber = -1;
                 }
 
-                LoopExplosionPlugin loopExplosionPlugin = graphBuilderConfig.getLoopExplosionPlugin();
+                LoopExplosionPlugin loopExplosionPlugin = graphBuilderConfig.getPlugins().getLoopExplosionPlugin();
                 if (loopExplosionPlugin != null) {
                     explodeLoops = loopExplosionPlugin.shouldExplodeLoops(method);
                     if (explodeLoops) {
@@ -1093,7 +1093,7 @@
             }
 
             private boolean tryInvocationPlugin(ValueNode[] args, ResolvedJavaMethod targetMethod, Kind resultType) {
-                InvocationPlugin plugin = graphBuilderConfig.getInvocationPlugins().lookupInvocation(targetMethod);
+                InvocationPlugin plugin = graphBuilderConfig.getPlugins().getInvocationPlugins().lookupInvocation(targetMethod);
                 if (plugin != null) {
                     int beforeStackSize = frameState.stackSize;
                     boolean needsNullCheck = !targetMethod.isStatic() && args[0].getKind() == Kind.Object && !StampTool.isPointerNonNull(args[0].stamp());
@@ -1112,7 +1112,7 @@
             }
 
             private boolean tryAnnotatedInvocationPlugin(ValueNode[] args, ResolvedJavaMethod targetMethod) {
-                AnnotatedInvocationPlugin plugin = graphBuilderConfig.getAnnotatedInvocationPlugin();
+                GenericInvocationPlugin plugin = graphBuilderConfig.getPlugins().getGenericInvocationPlugin();
                 return plugin != null && plugin.apply(this, targetMethod, args);
             }
 
@@ -1129,7 +1129,7 @@
             }
 
             private boolean tryInline(ValueNode[] args, ResolvedJavaMethod targetMethod, InvokeKind invokeKind, JavaType returnType) {
-                InlineInvokePlugin plugin = graphBuilderConfig.getInlineInvokePlugin();
+                InlineInvokePlugin plugin = graphBuilderConfig.getPlugins().getInlineInvokePlugin();
                 if (plugin == null || !invokeKind.isDirect() || !targetMethod.canBeInlined()) {
                     return false;
                 }
--- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPlugin.java	Tue Mar 10 21:39:31 2015 +0100
+++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPlugin.java	Tue Mar 10 21:59:29 2015 +0100
@@ -89,9 +89,10 @@
     }
 
     /**
-     * Plugin for handling an invocation based on the annotations of the invoked method.
+     * Plugin for handling an invocation based on some property of the method being invoked such as
+     * any annotations it may have.
      */
-    public interface AnnotatedInvocationPlugin extends GraphBuilderPlugin {
+    public interface GenericInvocationPlugin extends GraphBuilderPlugin {
         /**
          * Executes this plugin for an invocation of a given method with a given set of arguments.
          *
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/PartialEvaluator.java	Tue Mar 10 21:39:31 2015 +0100
+++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/PartialEvaluator.java	Tue Mar 10 21:59:29 2015 +0100
@@ -38,6 +38,7 @@
 import com.oracle.graal.graph.*;
 import com.oracle.graal.graph.Node;
 import com.oracle.graal.java.*;
+import com.oracle.graal.java.GraphBuilderConfiguration.Plugins;
 import com.oracle.graal.java.GraphBuilderPlugin.LoadFieldPlugin;
 import com.oracle.graal.java.GraphBuilderPlugin.ParameterPlugin;
 import com.oracle.graal.loop.*;
@@ -252,12 +253,13 @@
     private void fastPartialEvaluation(OptimizedCallTarget callTarget, StructuredGraph graph, PhaseContext baseContext, HighTierContext tierContext) {
         GraphBuilderConfiguration newConfig = configForRoot.copy();
         newConfig.setUseProfiling(false);
-        newConfig.setLoadFieldPlugin(new InterceptLoadFieldPlugin());
-        newConfig.setParameterPlugin(new InterceptReceiverPlugin(callTarget));
+        Plugins plugins = newConfig.getPlugins();
+        plugins.setLoadFieldPlugin(new InterceptLoadFieldPlugin());
+        plugins.setParameterPlugin(new InterceptReceiverPlugin(callTarget));
         callTarget.setInlining(new TruffleInlining(callTarget, new DefaultInliningPolicy()));
-        newConfig.setInlineInvokePlugin(new InlineInvokePlugin(callTarget.getInlining(), providers.getReplacements()));
-        newConfig.setLoopExplosionPlugin(new LoopExplosionPlugin());
-        TruffleGraphBuilderPlugins.registerInvocationPlugins(providers.getMetaAccess(), newConfig.getInvocationPlugins());
+        plugins.setInlineInvokePlugin(new InlineInvokePlugin(callTarget.getInlining(), providers.getReplacements()));
+        plugins.setLoopExplosionPlugin(new LoopExplosionPlugin());
+        TruffleGraphBuilderPlugins.registerInvocationPlugins(providers.getMetaAccess(), newConfig.getPlugins().getInvocationPlugins());
         new GraphBuilderPhase.Instance(providers.getMetaAccess(), providers.getStampProvider(), this.snippetReflection, providers.getConstantReflection(), newConfig,
                         TruffleCompilerImpl.Optimizations, false).apply(graph);
         Debug.dump(graph, "After FastPE");
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCompilerImpl.java	Tue Mar 10 21:39:31 2015 +0100
+++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCompilerImpl.java	Tue Mar 10 21:59:29 2015 +0100
@@ -93,7 +93,7 @@
         this.config = GraphBuilderConfiguration.getDefault().withSkippedExceptionTypes(skippedExceptionTypes);
         if (TruffleCompilerOptions.FastPE.getValue()) {
             GraphBuilderPhase phase = (GraphBuilderPhase) backend.getSuites().getDefaultGraphBuilderSuite().findPhase(GraphBuilderPhase.class).previous();
-            this.config.getInvocationPlugins().setDefaults(phase.getGraphBuilderConfig().getInvocationPlugins());
+            this.config.getPlugins().getInvocationPlugins().setDefaults(phase.getGraphBuilderConfig().getPlugins().getInvocationPlugins());
         }
 
         this.truffleCache = new TruffleCacheImpl(providers, eagerConfig, TruffleCompilerImpl.Optimizations);