changeset 13452:8275a0d0c90a

create profiling info, phase plan and optimistic opts when running a CompilationTask, not when creating it (GRAAL-640)
author Doug Simon <doug.simon@oracle.com>
date Wed, 18 Dec 2013 11:26:37 +0100
parents 02f27ecb4f3a
children e3ec81d3e976
files graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/CompilationTask.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/CompileTheWorld.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/VMToCompilerImpl.java
diffstat 3 files changed, 50 insertions(+), 46 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/CompilationTask.java	Wed Dec 18 00:00:24 2013 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/CompilationTask.java	Wed Dec 18 11:26:37 2013 +0100
@@ -41,11 +41,15 @@
 import com.oracle.graal.debug.internal.*;
 import com.oracle.graal.hotspot.bridge.*;
 import com.oracle.graal.hotspot.meta.*;
+import com.oracle.graal.hotspot.phases.*;
+import com.oracle.graal.java.*;
 import com.oracle.graal.lir.asm.*;
 import com.oracle.graal.nodes.*;
 import com.oracle.graal.nodes.spi.*;
 import com.oracle.graal.phases.*;
+import com.oracle.graal.phases.PhasePlan.*;
 import com.oracle.graal.phases.tiers.*;
+import com.oracle.graal.phases.util.*;
 
 public class CompilationTask implements Runnable {
 
@@ -62,9 +66,6 @@
     }
 
     private final HotSpotBackend backend;
-    private final PhasePlan plan;
-    private final OptimisticOptimizations optimisticOpts;
-    private final ProfilingInfo profilingInfo;
     private final HotSpotResolvedJavaMethod method;
     private final int entryBCI;
     private final int id;
@@ -72,18 +73,10 @@
 
     private StructuredGraph graph;
 
-    public static CompilationTask create(HotSpotBackend backend, PhasePlan plan, OptimisticOptimizations optimisticOpts, ProfilingInfo profilingInfo, HotSpotResolvedJavaMethod method, int entryBCI,
-                    int id) {
-        return new CompilationTask(backend, plan, optimisticOpts, profilingInfo, method, entryBCI, id);
-    }
-
-    protected CompilationTask(HotSpotBackend backend, PhasePlan plan, OptimisticOptimizations optimisticOpts, ProfilingInfo profilingInfo, HotSpotResolvedJavaMethod method, int entryBCI, int id) {
+    public CompilationTask(HotSpotBackend backend, HotSpotResolvedJavaMethod method, int entryBCI, int id) {
         assert id >= 0;
         this.backend = backend;
-        this.plan = plan;
         this.method = method;
-        this.optimisticOpts = optimisticOpts;
-        this.profilingInfo = profilingInfo;
         this.entryBCI = entryBCI;
         this.id = id;
         this.status = new AtomicReference<>(CompilationStatus.Queued);
@@ -124,6 +117,27 @@
         return providers.getSuites().getDefaultSuites();
     }
 
+    protected PhasePlan getPhasePlan(Providers providers, OptimisticOptimizations optimisticOpts) {
+        boolean osrCompilation = entryBCI != StructuredGraph.INVOCATION_ENTRY_BCI;
+        PhasePlan phasePlan = new PhasePlan();
+        MetaAccessProvider metaAccess = providers.getMetaAccess();
+        ForeignCallsProvider foreignCalls = providers.getForeignCalls();
+        phasePlan.addPhase(PhasePosition.AFTER_PARSING, new GraphBuilderPhase(metaAccess, foreignCalls, GraphBuilderConfiguration.getDefault(), optimisticOpts));
+        if (osrCompilation) {
+            phasePlan.addPhase(PhasePosition.AFTER_PARSING, new OnStackReplacementPhase());
+        }
+        return phasePlan;
+    }
+
+    protected OptimisticOptimizations getOptimisticOpts(ProfilingInfo profilingInfo) {
+        return new OptimisticOptimizations(profilingInfo);
+    }
+
+    protected ProfilingInfo getProfilingInfo() {
+        boolean osrCompilation = entryBCI != StructuredGraph.INVOCATION_ENTRY_BCI;
+        return method.getCompilationProfilingInfo(osrCompilation);
+    }
+
     public void runCompilation(boolean clearFromCompilationQueue) {
         /*
          * no code must be outside this try/finally because it could happen otherwise that
@@ -169,7 +183,10 @@
                 InlinedBytecodes.add(method.getCodeSize());
                 CallingConvention cc = getCallingConvention(providers.getCodeCache(), Type.JavaCallee, graph.method(), false);
                 Suites suites = getSuites(providers);
-                result = compileGraph(graph, cc, method, providers, backend, backend.getTarget(), graphCache, plan, optimisticOpts, profilingInfo, method.getSpeculationLog(), suites, true,
+                ProfilingInfo profilingInfo = getProfilingInfo();
+                OptimisticOptimizations optimisticOpts = getOptimisticOpts(profilingInfo);
+                PhasePlan phasePlan = getPhasePlan(providers, optimisticOpts);
+                result = compileGraph(graph, cc, method, providers, backend, backend.getTarget(), graphCache, phasePlan, optimisticOpts, profilingInfo, method.getSpeculationLog(), suites, true,
                                 new CompilationResult(), CompilationResultBuilderFactory.Default);
 
             } catch (Throwable e) {
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/CompileTheWorld.java	Wed Dec 18 00:00:24 2013 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/CompileTheWorld.java	Wed Dec 18 11:26:37 2013 +0100
@@ -43,7 +43,6 @@
 import com.oracle.graal.hotspot.meta.*;
 import com.oracle.graal.options.*;
 import com.oracle.graal.options.OptionValue.OverrideScope;
-import com.oracle.graal.phases.*;
 import com.oracle.graal.phases.tiers.*;
 import com.oracle.graal.replacements.*;
 
@@ -318,21 +317,30 @@
         TTY.println("CompileTheWorld : Done (%d classes, %d methods, %d ms)", classFileCounter, compiledMethodsCounter, compileTime);
     }
 
-    /**
-     * A compilation task that creates a fresh compilation suite for its compilation. This is
-     * required so that a CTW compilation can be {@linkplain Config configured} differently from a
-     * VM triggered compilation.
-     */
-    static class CTWCompilationTask extends CompilationTask {
+    class CTWCompilationTask extends CompilationTask {
 
-        CTWCompilationTask(HotSpotBackend backend, PhasePlan plan, OptimisticOptimizations optimisticOpts, ProfilingInfo profilingInfo, HotSpotResolvedJavaMethod method, int entryBCI, int id) {
-            super(backend, plan, optimisticOpts, profilingInfo, method, entryBCI, id);
+        CTWCompilationTask(HotSpotBackend backend, HotSpotResolvedJavaMethod method, int id) {
+            super(backend, method, INVOCATION_ENTRY_BCI, id);
         }
 
+        /**
+         * Returns a fresh compilation suite for its compilation so that the CTW option value
+         * overriding configuration has effect.
+         */
         @Override
         protected Suites getSuites(HotSpotProviders providers) {
+            assert config.scope != null : "not inside a CTW option value overriding scope";
             return providers.getSuites().createSuites();
         }
+
+        /**
+         * Returns empty profiling info to be as close to the CTW behavior of C1 and C2 as possible.
+         */
+        @Override
+        protected ProfilingInfo getProfilingInfo() {
+            // Be optimistic and return false for exceptionSeen.
+            return DefaultProfilingInfo.get(TriState.FALSE);
+        }
     }
 
     /**
@@ -342,13 +350,9 @@
         try {
             long start = System.currentTimeMillis();
 
-            // Be optimistic and return false for exceptionSeen.
-            final ProfilingInfo profilingInfo = DefaultProfilingInfo.get(TriState.FALSE);
-            final OptimisticOptimizations optimisticOpts = new OptimisticOptimizations(profilingInfo);
             int id = vmToCompiler.allocateCompileTaskId();
             HotSpotBackend backend = runtime.getHostBackend();
-            PhasePlan phasePlan = vmToCompiler.createPhasePlan(backend.getProviders(), optimisticOpts, false);
-            CompilationTask task = new CTWCompilationTask(backend, phasePlan, optimisticOpts, profilingInfo, method, INVOCATION_ENTRY_BCI, id);
+            CompilationTask task = new CTWCompilationTask(backend, method, id);
             task.runCompilation(false);
 
             compileTime += (System.currentTimeMillis() - start);
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/VMToCompilerImpl.java	Wed Dec 18 00:00:24 2013 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/VMToCompilerImpl.java	Wed Dec 18 11:26:37 2013 +0100
@@ -35,7 +35,6 @@
 import java.util.concurrent.*;
 import java.util.concurrent.atomic.*;
 
-import com.oracle.graal.api.code.*;
 import com.oracle.graal.api.meta.*;
 import com.oracle.graal.compiler.*;
 import com.oracle.graal.compiler.CompilerThreadFactory.DebugConfigAccess;
@@ -46,12 +45,9 @@
 import com.oracle.graal.hotspot.CompileTheWorld.Config;
 import com.oracle.graal.hotspot.debug.*;
 import com.oracle.graal.hotspot.meta.*;
-import com.oracle.graal.hotspot.phases.*;
 import com.oracle.graal.java.*;
 import com.oracle.graal.nodes.*;
 import com.oracle.graal.options.*;
-import com.oracle.graal.phases.*;
-import com.oracle.graal.phases.PhasePlan.PhasePosition;
 import com.oracle.graal.printer.*;
 import com.oracle.graal.replacements.*;
 
@@ -571,7 +567,7 @@
     /**
      * Compiles a method to machine code.
      */
-    public void compileMethod(final HotSpotResolvedJavaMethod method, final int entryBCI, final boolean blocking) {
+    void compileMethod(final HotSpotResolvedJavaMethod method, final int entryBCI, final boolean blocking) {
         boolean osrCompilation = entryBCI != StructuredGraph.INVOCATION_ENTRY_BCI;
         if (osrCompilation && bootstrapRunning) {
             // no OSR compilations during bootstrap - the compiler is just too slow at this point,
@@ -592,11 +588,9 @@
             if (method.tryToQueueForCompilation()) {
                 assert method.isQueuedForCompilation();
 
-                final ProfilingInfo profilingInfo = method.getCompilationProfilingInfo(osrCompilation);
-                final OptimisticOptimizations optimisticOpts = new OptimisticOptimizations(profilingInfo);
                 int id = allocateCompileTaskId();
                 HotSpotBackend backend = runtime.getHostBackend();
-                CompilationTask task = CompilationTask.create(backend, createPhasePlan(backend.getProviders(), optimisticOpts, osrCompilation), optimisticOpts, profilingInfo, method, entryBCI, id);
+                CompilationTask task = new CompilationTask(backend, method, entryBCI, id);
 
                 if (blocking) {
                     task.runCompilation(true);
@@ -690,17 +684,6 @@
         return type;
     }
 
-    public PhasePlan createPhasePlan(HotSpotProviders providers, OptimisticOptimizations optimisticOpts, boolean onStackReplacement) {
-        PhasePlan phasePlan = new PhasePlan();
-        MetaAccessProvider metaAccess = providers.getMetaAccess();
-        ForeignCallsProvider foreignCalls = providers.getForeignCalls();
-        phasePlan.addPhase(PhasePosition.AFTER_PARSING, new GraphBuilderPhase(metaAccess, foreignCalls, GraphBuilderConfiguration.getDefault(), optimisticOpts));
-        if (onStackReplacement) {
-            phasePlan.addPhase(PhasePosition.AFTER_PARSING, new OnStackReplacementPhase());
-        }
-        return phasePlan;
-    }
-
     @Override
     public PrintStream log() {
         return log;