changeset 9615:1089d63ef168

removed 'method' parameter from GraalCompiler.compiledMethod() and renamed the latter to 'compileGraph'.
author Doug Simon <doug.simon@oracle.com>
date Wed, 08 May 2013 14:58:18 +0200
parents 59ec6eb8612e
children ff62d13ad3e7
files graal/com.oracle.graal.compiler.ptx.test/src/com/oracle/graal/compiler/ptx/test/PTXTestBase.java graal/com.oracle.graal.compiler.ptx/src/com/oracle/graal/compiler/ptx/PTXBackend.java graal/com.oracle.graal.compiler.ptx/src/com/oracle/graal/compiler/ptx/PTXTargetMethodAssembler.java graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/GraalCompilerTest.java graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/InfopointReasonTest.java graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/target/Backend.java graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBackend.java graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotBackend.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/CompilationTask.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/Stub.java graal/com.oracle.graal.lir/src/com/oracle/graal/lir/asm/TargetMethodAssembler.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StructuredGraph.java graal/com.oracle.graal.printer/src/com/oracle/graal/printer/GraphPrinterDumpHandler.java
diffstat 14 files changed, 67 insertions(+), 54 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.compiler.ptx.test/src/com/oracle/graal/compiler/ptx/test/PTXTestBase.java	Wed May 08 12:19:31 2013 +0200
+++ b/graal/com.oracle.graal.compiler.ptx.test/src/com/oracle/graal/compiler/ptx/test/PTXTestBase.java	Wed May 08 14:58:18 2013 +0200
@@ -57,9 +57,9 @@
         phasePlan.addPhase(PhasePosition.AFTER_PARSING, new PTXPhase());
         new PTXPhase().apply(graph);
         CallingConvention cc = getCallingConvention(runtime, Type.JavaCallee, graph.method(), false);
-        CompilationResult result = GraalCompiler.compileMethod(runtime, graalRuntime().getReplacements(),
-                                                               ptxBackend, target, graph.method(), graph, cc, null, phasePlan,
-                                                               OptimisticOptimizations.NONE, new SpeculationLog());
+        CompilationResult result = GraalCompiler.compileGraph(graph, cc,
+                                                               runtime, graalRuntime().getReplacements(), ptxBackend, target, null, phasePlan, OptimisticOptimizations.NONE,
+                                                               new SpeculationLog());
         return result;
     }
 
--- a/graal/com.oracle.graal.compiler.ptx/src/com/oracle/graal/compiler/ptx/PTXBackend.java	Wed May 08 12:19:31 2013 +0200
+++ b/graal/com.oracle.graal.compiler.ptx/src/com/oracle/graal/compiler/ptx/PTXBackend.java	Wed May 08 14:58:18 2013 +0200
@@ -79,8 +79,10 @@
     }
 
     @Override
-    public void emitCode(TargetMethodAssembler tasm, ResolvedJavaMethod method, LIRGenerator lirGen) {
+    public void emitCode(TargetMethodAssembler tasm, LIRGenerator lirGen) {
         // Emit the prologue
+        ResolvedJavaMethod method = lirGen.getGraph().method();
+        assert method != null : lirGen.getGraph() + " is not associated wth a method";
         final String name = method.getName();
         Buffer codeBuffer = tasm.asm.codeBuffer;
         codeBuffer.emitString(".version 1.4");
--- a/graal/com.oracle.graal.compiler.ptx/src/com/oracle/graal/compiler/ptx/PTXTargetMethodAssembler.java	Wed May 08 12:19:31 2013 +0200
+++ b/graal/com.oracle.graal.compiler.ptx/src/com/oracle/graal/compiler/ptx/PTXTargetMethodAssembler.java	Wed May 08 14:58:18 2013 +0200
@@ -22,16 +22,14 @@
  */
 package com.oracle.graal.compiler.ptx;
 
-import com.oracle.graal.api.code.CodeCacheProvider;
-import com.oracle.graal.api.code.CompilationResult;
-import com.oracle.graal.api.code.TargetDescription;
-import com.oracle.graal.asm.AbstractAssembler;
-import com.oracle.graal.hotspot.HotSpotGraalRuntime;
-import com.oracle.graal.hotspot.bridge.CompilerToGPU;
-import com.oracle.graal.hotspot.meta.HotSpotMethod;
-import com.oracle.graal.lir.FrameMap;
-import com.oracle.graal.lir.asm.FrameContext;
-import com.oracle.graal.lir.asm.TargetMethodAssembler;
+import com.oracle.graal.api.code.*;
+import com.oracle.graal.api.meta.*;
+import com.oracle.graal.asm.*;
+import com.oracle.graal.hotspot.*;
+import com.oracle.graal.hotspot.bridge.*;
+import com.oracle.graal.lir.*;
+import com.oracle.graal.lir.asm.*;
+import com.oracle.graal.nodes.*;
 
 public class PTXTargetMethodAssembler extends TargetMethodAssembler {
 
@@ -40,20 +38,18 @@
 
     // detach ??
 
-    public PTXTargetMethodAssembler(TargetDescription target,
-                                    CodeCacheProvider runtime, FrameMap frameMap,
-                                    AbstractAssembler asm, FrameContext frameContext,
-                                    CompilationResult compilationResult) {
+    public PTXTargetMethodAssembler(TargetDescription target, CodeCacheProvider runtime, FrameMap frameMap, AbstractAssembler asm, FrameContext frameContext, CompilationResult compilationResult) {
         super(target, runtime, frameMap, asm, frameContext, compilationResult);
     }
 
     @Override
-    public CompilationResult finishTargetMethod(Object name, boolean isStub) {
-        CompilationResult graalCompile = super.finishTargetMethod(name, isStub);
+    public CompilationResult finishTargetMethod(StructuredGraph graph) {
+        ResolvedJavaMethod method = graph.method();
+        assert method != null : graph + " is not associated wth a method";
+        CompilationResult graalCompile = super.finishTargetMethod(graph);
 
         try {
             if (validDevice) {
-                HotSpotMethod method = (HotSpotMethod) name;
                 toGPU.generateKernel(graalCompile.getTargetCode(), method.getName());
             }
         } catch (Throwable th) {
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/GraalCompilerTest.java	Wed May 08 12:19:31 2013 +0200
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/GraalCompilerTest.java	Wed May 08 14:58:18 2013 +0200
@@ -414,8 +414,7 @@
                 phasePlan.addPhase(PhasePosition.LOW_LEVEL, new WriteBarrierAdditionPhase());
                 editPhasePlan(method, graph, phasePlan);
                 CallingConvention cc = getCallingConvention(runtime, Type.JavaCallee, graph.method(), false);
-                CompilationResult compResult = GraalCompiler.compileMethod(runtime, replacements, backend, runtime().getTarget(), method, graph, cc, null, phasePlan, OptimisticOptimizations.ALL,
-                                new SpeculationLog());
+                CompilationResult compResult = GraalCompiler.compileGraph(graph, cc, runtime, replacements, backend, runtime().getTarget(), null, phasePlan, OptimisticOptimizations.ALL, new SpeculationLog());
                 if (printCompilation) {
                     TTY.println(String.format("@%-6d Graal %-70s %-45s %-50s | %4dms %5dB", id, "", "", "", System.currentTimeMillis() - start, compResult.getTargetCodeSize()));
                 }
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/InfopointReasonTest.java	Wed May 08 12:19:31 2013 +0200
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/InfopointReasonTest.java	Wed May 08 14:58:18 2013 +0200
@@ -59,8 +59,8 @@
         final Method method = getMethod("testMethod");
         final StructuredGraph graph = parse(method);
         CallingConvention cc = getCallingConvention(runtime, Type.JavaCallee, graph.method(), false);
-        final CompilationResult cr = GraalCompiler.compileMethod(runtime, replacements, backend, runtime.getTarget(), runtime.lookupJavaMethod(method), graph, cc, null, getDefaultPhasePlan(),
-                        OptimisticOptimizations.ALL, new SpeculationLog());
+        final CompilationResult cr = GraalCompiler.compileGraph(graph, cc, runtime, replacements, backend, runtime.getTarget(), null, getDefaultPhasePlan(), OptimisticOptimizations.ALL,
+                        new SpeculationLog());
         for (Infopoint sp : cr.getInfopoints()) {
             assertNotNull(sp.reason);
             if (sp instanceof Call) {
@@ -81,8 +81,8 @@
         }
         assertTrue(graphLineSPs > 0);
         CallingConvention cc = getCallingConvention(runtime, Type.JavaCallee, graph.method(), false);
-        final CompilationResult cr = GraalCompiler.compileMethod(runtime, replacements, backend, runtime.getTarget(), runtime.lookupJavaMethod(method), graph, cc, null, getDefaultPhasePlan(true),
-                        OptimisticOptimizations.ALL, new SpeculationLog());
+        final CompilationResult cr = GraalCompiler.compileGraph(graph, cc, runtime, replacements, backend, runtime.getTarget(), null, getDefaultPhasePlan(true), OptimisticOptimizations.ALL,
+                        new SpeculationLog());
         int lineSPs = 0;
         for (Infopoint sp : cr.getInfopoints()) {
             assertNotNull(sp.reason);
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java	Wed May 08 12:19:31 2013 +0200
+++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java	Wed May 08 14:58:18 2013 +0200
@@ -22,13 +22,11 @@
  */
 package com.oracle.graal.compiler;
 
-import java.lang.reflect.*;
 import java.util.*;
 import java.util.concurrent.*;
 
 import com.oracle.graal.alloc.*;
 import com.oracle.graal.api.code.*;
-import com.oracle.graal.api.meta.*;
 import com.oracle.graal.compiler.alloc.*;
 import com.oracle.graal.compiler.gen.*;
 import com.oracle.graal.compiler.target.*;
@@ -47,15 +45,22 @@
 import com.oracle.graal.phases.tiers.*;
 import com.oracle.graal.virtual.phases.ea.*;
 
+/**
+ * Static methods for orchestrating the compilation of a {@linkplain StructuredGraph graph}.
+ */
 public class GraalCompiler {
 
-    public static CompilationResult compileMethod(final GraalCodeCacheProvider runtime, final Replacements replacements, final Backend backend, final TargetDescription target,
-                    final ResolvedJavaMethod method, final StructuredGraph graph, final CallingConvention cc, final GraphCache cache, final PhasePlan plan,
-                    final OptimisticOptimizations optimisticOpts, final SpeculationLog speculationLog) {
-        assert (method.getModifiers() & Modifier.NATIVE) == 0 : "compiling native methods is not supported";
-
+    /**
+     * Requests compilation of a given graph.
+     * 
+     * @param graph the graph to be compiled
+     * @param cc the calling convention for calls to the code compiled for {@code graph}
+     * @return the result of the compilation
+     */
+    public static CompilationResult compileGraph(final StructuredGraph graph, final CallingConvention cc, final GraalCodeCacheProvider runtime, final Replacements replacements, final Backend backend,
+                    final TargetDescription target, final GraphCache cache, final PhasePlan plan, final OptimisticOptimizations optimisticOpts, final SpeculationLog speculationLog) {
         final CompilationResult compilationResult = new CompilationResult();
-        Debug.scope("GraalCompiler", new Object[]{graph, method, runtime}, new Runnable() {
+        Debug.scope("GraalCompiler", new Object[]{graph, runtime}, new Runnable() {
 
             public void run() {
                 final Assumptions assumptions = new Assumptions(GraalOptions.OptAssumptions);
@@ -74,7 +79,7 @@
                 Debug.scope("CodeGen", lirGen, new Runnable() {
 
                     public void run() {
-                        emitCode(backend, getLeafGraphIdArray(graph), assumptions, method, lirGen, compilationResult);
+                        emitCode(backend, getLeafGraphIdArray(graph), assumptions, lirGen, compilationResult);
                     }
 
                 });
@@ -211,10 +216,10 @@
         return lirGen;
     }
 
-    public static void emitCode(Backend backend, long[] leafGraphIds, Assumptions assumptions, ResolvedJavaMethod method, LIRGenerator lirGen, CompilationResult compilationResult) {
+    public static void emitCode(Backend backend, long[] leafGraphIds, Assumptions assumptions, LIRGenerator lirGen, CompilationResult compilationResult) {
         TargetMethodAssembler tasm = backend.newAssembler(lirGen, compilationResult);
-        backend.emitCode(tasm, method, lirGen);
-        CompilationResult result = tasm.finishTargetMethod(method, false);
+        backend.emitCode(tasm, lirGen);
+        CompilationResult result = tasm.finishTargetMethod(lirGen.getGraph());
         if (!assumptions.isEmpty()) {
             result.setAssumptions(assumptions);
         }
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/target/Backend.java	Wed May 08 12:19:31 2013 +0200
+++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/target/Backend.java	Wed May 08 14:58:18 2013 +0200
@@ -63,5 +63,5 @@
      * callee-save registers, stack overflow checking, handling multiple entry points etc. A suffix
      * may contain out-of-line stubs and method end guard instructions.
      */
-    public abstract void emitCode(TargetMethodAssembler tasm, ResolvedJavaMethod method, LIRGenerator lirGen);
+    public abstract void emitCode(TargetMethodAssembler tasm, LIRGenerator lirGen);
 }
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBackend.java	Wed May 08 12:19:31 2013 +0200
+++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBackend.java	Wed May 08 14:58:18 2013 +0200
@@ -219,12 +219,13 @@
     }
 
     @Override
-    public void emitCode(TargetMethodAssembler tasm, ResolvedJavaMethod method, LIRGenerator lirGen) {
+    public void emitCode(TargetMethodAssembler tasm, LIRGenerator lirGen) {
         AMD64MacroAssembler asm = (AMD64MacroAssembler) tasm.asm;
         FrameMap frameMap = tasm.frameMap;
         RegisterConfig regConfig = frameMap.registerConfig;
         HotSpotVMConfig config = runtime().config;
-        boolean isStatic = Modifier.isStatic(method.getModifiers());
+        ResolvedJavaMethod method = lirGen.getGraph().method();
+        boolean isStatic = method == null || Modifier.isStatic(method.getModifiers());
         Label unverifiedStub = isStatic ? null : new Label();
 
         // Emit the prefix
@@ -257,7 +258,7 @@
         } else {
             // No need to emit the stubs for entries back into the method since
             // it has no calls that can cause such "return" entries
-            assert !frameMap.accessesCallerFrame() : method;
+            assert !frameMap.accessesCallerFrame() : lirGen.getGraph();
         }
 
         if (unverifiedStub != null) {
--- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotBackend.java	Wed May 08 12:19:31 2013 +0200
+++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotBackend.java	Wed May 08 14:58:18 2013 +0200
@@ -23,7 +23,6 @@
 package com.oracle.graal.hotspot.sparc;
 
 import com.oracle.graal.api.code.*;
-import com.oracle.graal.api.meta.*;
 import com.oracle.graal.asm.*;
 import com.oracle.graal.compiler.gen.*;
 import com.oracle.graal.compiler.sparc.*;
@@ -60,7 +59,7 @@
     }
 
     @Override
-    public void emitCode(TargetMethodAssembler tasm, ResolvedJavaMethod method, LIRGenerator lirGen) {
+    public void emitCode(TargetMethodAssembler tasm, LIRGenerator lirGen) {
         // SPARC: Emit code
     }
 }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/CompilationTask.java	Wed May 08 12:19:31 2013 +0200
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/CompilationTask.java	Wed May 08 14:58:18 2013 +0200
@@ -161,8 +161,8 @@
                         InlinedBytecodes.add(method.getCodeSize());
                         HotSpotRuntime runtime = graalRuntime.getRuntime();
                         CallingConvention cc = getCallingConvention(runtime, Type.JavaCallee, graph.method(), false);
-                        return GraalCompiler.compileMethod(runtime, replacements, graalRuntime.getBackend(), graalRuntime.getTarget(), method, graph, cc, graalRuntime.getCache(), plan,
-                                        optimisticOpts, method.getSpeculationLog());
+                        return GraalCompiler.compileGraph(graph, cc, runtime, replacements, graalRuntime.getBackend(), graalRuntime.getTarget(), graalRuntime.getCache(), plan, optimisticOpts,
+                                        method.getSpeculationLog());
                     }
                 });
             } finally {
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/Stub.java	Wed May 08 12:19:31 2013 +0200
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/Stub.java	Wed May 08 14:58:18 2013 +0200
@@ -213,8 +213,8 @@
                     GraphBuilderPhase graphBuilderPhase = new GraphBuilderPhase(runtime, GraphBuilderConfiguration.getDefault(), OptimisticOptimizations.ALL);
                     phasePlan.addPhase(PhasePosition.AFTER_PARSING, graphBuilderPhase);
                     CallingConvention cc = linkage.getCallingConvention();
-                    final CompilationResult compResult = GraalCompiler.compileMethod(runtime(), replacements, backend, runtime().getTarget(), getMethod(), graph, cc, null, phasePlan,
-                                    OptimisticOptimizations.ALL, new SpeculationLog());
+                    final CompilationResult compResult = GraalCompiler.compileGraph(graph, cc, runtime(), replacements, backend, runtime().getTarget(), null, phasePlan, OptimisticOptimizations.ALL,
+                                    new SpeculationLog());
 
                     assert checkStubInvariants(compResult);
 
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/asm/TargetMethodAssembler.java	Wed May 08 12:19:31 2013 +0200
+++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/asm/TargetMethodAssembler.java	Wed May 08 14:58:18 2013 +0200
@@ -33,6 +33,7 @@
 import com.oracle.graal.debug.*;
 import com.oracle.graal.graph.*;
 import com.oracle.graal.lir.*;
+import com.oracle.graal.nodes.*;
 
 public class TargetMethodAssembler {
 
@@ -88,7 +89,7 @@
         compilationResult.addAnnotation(new CompilationResult.CodeComment(asm.codeBuffer.position(), s));
     }
 
-    public CompilationResult finishTargetMethod(Object name, boolean isStub) {
+    public CompilationResult finishTargetMethod(StructuredGraph graph) {
         // Install code, data and frame size
         compilationResult.setTargetCode(asm.codeBuffer.close(false), asm.codeBuffer.position());
 
@@ -117,7 +118,7 @@
             Debug.metric("DataPatches").add(ldp.size());
             Debug.metric("ExceptionHandlersEmitted").add(compilationResult.getExceptionHandlers().size());
         }
-        Debug.log("Finished target method %s, isStub %b", name, isStub);
+        Debug.log("Finished compiling %s", graph);
         return compilationResult;
     }
 
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StructuredGraph.java	Wed May 08 12:19:31 2013 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StructuredGraph.java	Wed May 08 14:58:18 2013 +0200
@@ -106,6 +106,11 @@
         return start;
     }
 
+    /**
+     * Gets the method from which this graph was built.
+     * 
+     * @return null if this method was not built from a method or the method is not available
+     */
     public ResolvedJavaMethod method() {
         return method;
     }
--- a/graal/com.oracle.graal.printer/src/com/oracle/graal/printer/GraphPrinterDumpHandler.java	Wed May 08 12:19:31 2013 +0200
+++ b/graal/com.oracle.graal.printer/src/com/oracle/graal/printer/GraphPrinterDumpHandler.java	Wed May 08 14:58:18 2013 +0200
@@ -32,6 +32,7 @@
 import com.oracle.graal.api.meta.*;
 import com.oracle.graal.debug.*;
 import com.oracle.graal.graph.*;
+import com.oracle.graal.nodes.*;
 import com.oracle.graal.phases.*;
 import com.oracle.graal.phases.schedule.*;
 
@@ -181,9 +182,13 @@
     private static List<String> getInlineContext() {
         List<String> result = new ArrayList<>();
         for (Object o : Debug.context()) {
-            if (o instanceof ResolvedJavaMethod) {
-                ResolvedJavaMethod method = (ResolvedJavaMethod) o;
-                result.add(MetaUtil.format("%H::%n(%p)", method));
+            if (o instanceof StructuredGraph) {
+                ResolvedJavaMethod method = ((StructuredGraph) o).method();
+                if (method != null) {
+                    result.add(MetaUtil.format("%H::%n(%p)", method));
+                } else {
+                    result.add(String.valueOf(o));
+                }
             } else if (o instanceof DebugDumpScope) {
                 DebugDumpScope debugDumpScope = (DebugDumpScope) o;
                 if (debugDumpScope.decorator && !result.isEmpty()) {