# HG changeset patch # User Doug Simon # Date 1368017898 -7200 # Node ID 1089d63ef1684babb3b51cb9e711a33924dafff7 # Parent 59ec6eb8612ee5bb2a92f333db31394265f343a9 removed 'method' parameter from GraalCompiler.compiledMethod() and renamed the latter to 'compileGraph'. diff -r 59ec6eb8612e -r 1089d63ef168 graal/com.oracle.graal.compiler.ptx.test/src/com/oracle/graal/compiler/ptx/test/PTXTestBase.java --- 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; } diff -r 59ec6eb8612e -r 1089d63ef168 graal/com.oracle.graal.compiler.ptx/src/com/oracle/graal/compiler/ptx/PTXBackend.java --- 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"); diff -r 59ec6eb8612e -r 1089d63ef168 graal/com.oracle.graal.compiler.ptx/src/com/oracle/graal/compiler/ptx/PTXTargetMethodAssembler.java --- 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) { diff -r 59ec6eb8612e -r 1089d63ef168 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/GraalCompilerTest.java --- 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())); } diff -r 59ec6eb8612e -r 1089d63ef168 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/InfopointReasonTest.java --- 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); diff -r 59ec6eb8612e -r 1089d63ef168 graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java --- 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); } diff -r 59ec6eb8612e -r 1089d63ef168 graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/target/Backend.java --- 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); } diff -r 59ec6eb8612e -r 1089d63ef168 graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBackend.java --- 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) { diff -r 59ec6eb8612e -r 1089d63ef168 graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotBackend.java --- 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 } } diff -r 59ec6eb8612e -r 1089d63ef168 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/CompilationTask.java --- 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 { diff -r 59ec6eb8612e -r 1089d63ef168 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/Stub.java --- 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); diff -r 59ec6eb8612e -r 1089d63ef168 graal/com.oracle.graal.lir/src/com/oracle/graal/lir/asm/TargetMethodAssembler.java --- 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; } diff -r 59ec6eb8612e -r 1089d63ef168 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StructuredGraph.java --- 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; } diff -r 59ec6eb8612e -r 1089d63ef168 graal/com.oracle.graal.printer/src/com/oracle/graal/printer/GraphPrinterDumpHandler.java --- 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 getInlineContext() { List 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()) {