# HG changeset patch # User Doug Simon # Date 1368046517 -7200 # Node ID e97dc9bbfedc5c699151ac2b34b582bb05c4c69b # Parent 0eda2b7df7484040f29e1f2f0ce2d39e5fd308c9 introduced installedCodeOwner parameter of type ResolvedJavaMethod to GraalCompiler.compileGraph to properly distinguish the source method of a graph from the method under which the code compiled for the graph will be installed diff -r 0eda2b7df748 -r e97dc9bbfedc 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 21:57:46 2013 +0200 +++ b/graal/com.oracle.graal.compiler.ptx.test/src/com/oracle/graal/compiler/ptx/test/PTXTestBase.java Wed May 08 22:55:17 2013 +0200 @@ -57,9 +57,8 @@ phasePlan.addPhase(PhasePosition.AFTER_PARSING, new PTXPhase()); new PTXPhase().apply(graph); CallingConvention cc = getCallingConvention(runtime, Type.JavaCallee, graph.method(), false); - CompilationResult result = GraalCompiler.compileGraph(graph, cc, - runtime, graalRuntime().getReplacements(), ptxBackend, target, null, phasePlan, OptimisticOptimizations.NONE, - new SpeculationLog()); + CompilationResult result = GraalCompiler.compileGraph(graph, cc, graph.method(), runtime, graalRuntime().getReplacements(), ptxBackend, target, null, phasePlan, OptimisticOptimizations.NONE, + new SpeculationLog()); return result; } @@ -72,7 +71,8 @@ try { // not quite yet - need multi-architecture Method changes from JDK-8013168 // Object[] executeArgs = argsWithReceiver(this, args); - // InstalledCode installedCode = runtime.addMethod(getStructuredGraph().method(), result); + // InstalledCode installedCode = + // runtime.addMethod(getStructuredGraph().method(), result); // installedCode.executeVarargs(executeArgs); } catch (Throwable th) { th.printStackTrace(); diff -r 0eda2b7df748 -r e97dc9bbfedc 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 21:57:46 2013 +0200 +++ b/graal/com.oracle.graal.compiler.ptx/src/com/oracle/graal/compiler/ptx/PTXBackend.java Wed May 08 22:55:17 2013 +0200 @@ -79,18 +79,17 @@ } @Override - public void emitCode(TargetMethodAssembler tasm, LIRGenerator lirGen) { + public void emitCode(TargetMethodAssembler tasm, LIRGenerator lirGen, ResolvedJavaMethod codeCacheOwner) { // Emit the prologue - ResolvedJavaMethod method = lirGen.getGraph().method(); - assert method != null : lirGen.getGraph() + " is not associated wth a method"; - final String name = method.getName(); + assert codeCacheOwner != null : lirGen.getGraph() + " is not associated with a method"; + final String name = codeCacheOwner.getName(); Buffer codeBuffer = tasm.asm.codeBuffer; codeBuffer.emitString(".version 1.4"); codeBuffer.emitString(".target sm_10"); codeBuffer.emitString0(".entry " + name + " ("); codeBuffer.emitString(""); - Signature signature = method.getSignature(); + Signature signature = codeCacheOwner.getSignature(); for (int i = 0; i < signature.getParameterCount(false); i++) { String param = ".param .u32 param" + i; codeBuffer.emitString(param); diff -r 0eda2b7df748 -r e97dc9bbfedc 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 21:57:46 2013 +0200 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/GraalCompilerTest.java Wed May 08 22:55:17 2013 +0200 @@ -414,7 +414,8 @@ phasePlan.addPhase(PhasePosition.LOW_LEVEL, new WriteBarrierAdditionPhase()); editPhasePlan(method, graph, phasePlan); CallingConvention cc = getCallingConvention(runtime, Type.JavaCallee, graph.method(), false); - CompilationResult compResult = GraalCompiler.compileGraph(graph, cc, runtime, replacements, backend, runtime().getTarget(), null, phasePlan, OptimisticOptimizations.ALL, new SpeculationLog()); + CompilationResult compResult = GraalCompiler.compileGraph(graph, cc, method, 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 0eda2b7df748 -r e97dc9bbfedc 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 21:57:46 2013 +0200 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/InfopointReasonTest.java Wed May 08 22:55:17 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.compileGraph(graph, cc, runtime, replacements, backend, runtime.getTarget(), null, getDefaultPhasePlan(), OptimisticOptimizations.ALL, - new SpeculationLog()); + final CompilationResult cr = GraalCompiler.compileGraph(graph, cc, graph.method(), 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.compileGraph(graph, cc, runtime, replacements, backend, runtime.getTarget(), null, getDefaultPhasePlan(true), OptimisticOptimizations.ALL, - new SpeculationLog()); + final CompilationResult cr = GraalCompiler.compileGraph(graph, cc, graph.method(), 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 0eda2b7df748 -r e97dc9bbfedc 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 21:57:46 2013 +0200 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java Wed May 08 22:55:17 2013 +0200 @@ -27,6 +27,7 @@ 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.*; @@ -55,10 +56,14 @@ * * @param graph the graph to be compiled * @param cc the calling convention for calls to the code compiled for {@code graph} + * @param installedCodeOwner the method the compiled code will be + * {@linkplain InstalledCode#getMethod() associated} with once installed. This + * argument can be null. * @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) { + public static CompilationResult compileGraph(final StructuredGraph graph, final CallingConvention cc, final ResolvedJavaMethod installedCodeOwner, 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, runtime}, new Runnable() { @@ -79,7 +84,7 @@ Debug.scope("CodeGen", lirGen, new Runnable() { public void run() { - emitCode(backend, getLeafGraphIdArray(graph), assumptions, lirGen, compilationResult); + emitCode(backend, getLeafGraphIdArray(graph), assumptions, lirGen, compilationResult, installedCodeOwner); } }); @@ -216,9 +221,9 @@ return lirGen; } - public static void emitCode(Backend backend, long[] leafGraphIds, Assumptions assumptions, LIRGenerator lirGen, CompilationResult compilationResult) { + public static void emitCode(Backend backend, long[] leafGraphIds, Assumptions assumptions, LIRGenerator lirGen, CompilationResult compilationResult, ResolvedJavaMethod installedCodeOwner) { TargetMethodAssembler tasm = backend.newAssembler(lirGen, compilationResult); - backend.emitCode(tasm, lirGen); + backend.emitCode(tasm, lirGen, installedCodeOwner); CompilationResult result = tasm.finishTargetMethod(lirGen.getGraph()); if (!assumptions.isEmpty()) { result.setAssumptions(assumptions); diff -r 0eda2b7df748 -r e97dc9bbfedc 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 21:57:46 2013 +0200 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/target/Backend.java Wed May 08 22:55:17 2013 +0200 @@ -23,6 +23,7 @@ package com.oracle.graal.compiler.target; 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.lir.*; @@ -57,10 +58,11 @@ public abstract TargetMethodAssembler newAssembler(LIRGenerator lirGen, CompilationResult compilationResult); /** - * Emits the code for a given method. This includes any architecture/runtime specific - * prefix/suffix. A prefix typically contains the code for setting up the frame, spilling - * callee-save registers, stack overflow checking, handling multiple entry points etc. A suffix - * may contain out-of-line stubs and method end guard instructions. + * Emits the code for a given graph. + * + * @param installedCodeOwner the method the compiled code will be + * {@linkplain InstalledCode#getMethod() associated} with once installed. This + * argument can be null. */ - public abstract void emitCode(TargetMethodAssembler tasm, LIRGenerator lirGen); + public abstract void emitCode(TargetMethodAssembler tasm, LIRGenerator lirGen, ResolvedJavaMethod installedCodeOwner); } diff -r 0eda2b7df748 -r e97dc9bbfedc 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 21:57:46 2013 +0200 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBackend.java Wed May 08 22:55:17 2013 +0200 @@ -26,8 +26,8 @@ import static com.oracle.graal.api.code.CallingConvention.Type.*; import static com.oracle.graal.api.code.ValueUtil.*; import static com.oracle.graal.phases.GraalOptions.*; +import static java.lang.reflect.Modifier.*; -import java.lang.reflect.*; import java.util.*; import sun.misc.*; @@ -219,18 +219,16 @@ } @Override - public void emitCode(TargetMethodAssembler tasm, LIRGenerator lirGen) { + public void emitCode(TargetMethodAssembler tasm, LIRGenerator lirGen, ResolvedJavaMethod installedCodeOwner) { AMD64MacroAssembler asm = (AMD64MacroAssembler) tasm.asm; FrameMap frameMap = tasm.frameMap; RegisterConfig regConfig = frameMap.registerConfig; HotSpotVMConfig config = runtime().config; - ResolvedJavaMethod method = lirGen.getGraph().method(); - boolean isStatic = method == null || Modifier.isStatic(method.getModifiers()); - Label unverifiedStub = isStatic ? null : new Label(); + Label unverifiedStub = installedCodeOwner == null || isStatic(installedCodeOwner.getModifiers()) ? null : new Label(); // Emit the prefix - if (!isStatic) { + if (unverifiedStub != null) { tasm.recordMark(Marks.MARK_UNVERIFIED_ENTRY); CallingConvention cc = regConfig.getCallingConvention(JavaCallee, null, new JavaType[]{runtime().lookupJavaType(Object.class)}, target, false); Register inlineCacheKlass = rax; // see definition of IC_Klass in diff -r 0eda2b7df748 -r e97dc9bbfedc 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 21:57:46 2013 +0200 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotBackend.java Wed May 08 22:55:17 2013 +0200 @@ -23,6 +23,7 @@ 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.*; @@ -59,7 +60,7 @@ } @Override - public void emitCode(TargetMethodAssembler tasm, LIRGenerator lirGen) { + public void emitCode(TargetMethodAssembler tasm, LIRGenerator lirGen, ResolvedJavaMethod codeCacheOwner) { // SPARC: Emit code } } diff -r 0eda2b7df748 -r e97dc9bbfedc 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 21:57:46 2013 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/CompilationTask.java Wed May 08 22:55:17 2013 +0200 @@ -161,7 +161,7 @@ InlinedBytecodes.add(method.getCodeSize()); HotSpotRuntime runtime = graalRuntime.getRuntime(); CallingConvention cc = getCallingConvention(runtime, Type.JavaCallee, graph.method(), false); - return GraalCompiler.compileGraph(graph, cc, runtime, replacements, graalRuntime.getBackend(), graalRuntime.getTarget(), graalRuntime.getCache(), plan, optimisticOpts, + return GraalCompiler.compileGraph(graph, cc, method, runtime, replacements, graalRuntime.getBackend(), graalRuntime.getTarget(), graalRuntime.getCache(), plan, optimisticOpts, method.getSpeculationLog()); } }); diff -r 0eda2b7df748 -r e97dc9bbfedc graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/SnippetStub.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/SnippetStub.java Wed May 08 21:57:46 2013 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/SnippetStub.java Wed May 08 22:55:17 2013 +0200 @@ -82,12 +82,13 @@ protected abstract Arguments makeArguments(SnippetInfo stub); @Override - public ResolvedJavaMethod getInstallationMethod() { + public ResolvedJavaMethod getInstalledCodeOwner() { return snippet.info.getMethod(); } @Override public String toString() { - return format("%h.%n", getInstallationMethod()); + ResolvedJavaMethod method = getInstalledCodeOwner(); + return "Stub<" + (method != null ? format("%h.%n", method) : linkage) + ">"; } } diff -r 0eda2b7df748 -r e97dc9bbfedc 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 21:57:46 2013 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/Stub.java Wed May 08 22:55:17 2013 +0200 @@ -136,13 +136,13 @@ public abstract String toString(); /** - * Gets the method under which the compiled code for this stub is - * {@linkplain CodeCacheProvider#addMethod(ResolvedJavaMethod, CompilationResult) installed}. + * Gets the method the stub's code will be {@linkplain InstalledCode#getMethod() associated} + * with once installed. This may be null. */ - protected abstract ResolvedJavaMethod getInstallationMethod(); + protected abstract ResolvedJavaMethod getInstalledCodeOwner(); protected Object debugScopeContext() { - return getInstallationMethod(); + return getInstalledCodeOwner(); } /** @@ -165,8 +165,8 @@ GraphBuilderPhase graphBuilderPhase = new GraphBuilderPhase(runtime, GraphBuilderConfiguration.getDefault(), OptimisticOptimizations.ALL); phasePlan.addPhase(PhasePosition.AFTER_PARSING, graphBuilderPhase); CallingConvention cc = linkage.getCallingConvention(); - final CompilationResult compResult = GraalCompiler.compileGraph(graph, cc, runtime, replacements, backend, runtime.getTarget(), null, phasePlan, OptimisticOptimizations.ALL, - new SpeculationLog()); + final CompilationResult compResult = GraalCompiler.compileGraph(graph, cc, getInstalledCodeOwner(), runtime, replacements, backend, runtime.getTarget(), null, phasePlan, + OptimisticOptimizations.ALL, new SpeculationLog()); assert checkStubInvariants(compResult); @@ -175,7 +175,7 @@ @Override public InstalledCode call() { - InstalledCode installedCode = runtime.addMethod(getInstallationMethod(), compResult); + InstalledCode installedCode = runtime.addMethod(getInstalledCodeOwner(), compResult); assert installedCode != null : "error installing stub " + this; if (Debug.isDumpEnabled()) { Debug.dump(new Object[]{compResult, installedCode}, "After code installation");