# HG changeset patch # User Christian Wimmer # Date 1453401329 28800 # Node ID f868bd0c3f02d71dd036b2ee6bd4cabd0b3c7bec # Parent 59be481d0b4ce6902f836d20389697e42804d2fe Make CallingConvention in HotSpotHostBackend instead of passing it in as a parameter to GraalCompiler.compile diff -r 59be481d0b4c -r f868bd0c3f02 graal/com.oracle.graal.compiler.aarch64/src/com/oracle/graal/compiler/aarch64/AArch64LIRGenerator.java --- a/graal/com.oracle.graal.compiler.aarch64/src/com/oracle/graal/compiler/aarch64/AArch64LIRGenerator.java Thu Jan 21 10:20:11 2016 -0800 +++ b/graal/com.oracle.graal.compiler.aarch64/src/com/oracle/graal/compiler/aarch64/AArch64LIRGenerator.java Thu Jan 21 10:35:29 2016 -0800 @@ -27,6 +27,17 @@ import static com.oracle.graal.lir.LIRValueUtil.isStackSlotValue; import static jdk.vm.ci.code.ValueUtil.asAllocatableValue; import static jdk.vm.ci.code.ValueUtil.isStackSlot; +import jdk.vm.ci.aarch64.AArch64Kind; +import jdk.vm.ci.amd64.AMD64Kind; +import jdk.vm.ci.code.RegisterValue; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.PlatformKind; +import jdk.vm.ci.meta.Value; import com.oracle.graal.asm.NumUtil; import com.oracle.graal.asm.aarch64.AArch64Address; @@ -59,19 +70,6 @@ import com.oracle.graal.lir.gen.LIRGenerator; import com.oracle.graal.phases.util.Providers; -import jdk.vm.ci.aarch64.AArch64Kind; -import jdk.vm.ci.amd64.AMD64Kind; -import jdk.vm.ci.code.CallingConvention; -import jdk.vm.ci.code.RegisterValue; -import jdk.vm.ci.common.JVMCIError; -import jdk.vm.ci.meta.AllocatableValue; -import jdk.vm.ci.meta.Constant; -import jdk.vm.ci.meta.JavaConstant; -import jdk.vm.ci.meta.JavaKind; -import jdk.vm.ci.meta.LIRKind; -import jdk.vm.ci.meta.PlatformKind; -import jdk.vm.ci.meta.Value; - public abstract class AArch64LIRGenerator extends LIRGenerator { @SuppressWarnings("unused") private final ConstantTableBaseProvider constantTableBaseProvider; @@ -87,9 +85,9 @@ } } - public AArch64LIRGenerator(LIRKindTool lirKindTool, AArch64ArithmeticLIRGenerator arithmeticLIRGen, MoveFactory moveFactory, Providers providers, CallingConvention cc, - LIRGenerationResult lirGenRes, ConstantTableBaseProvider constantTableBaseProvider) { - super(lirKindTool, arithmeticLIRGen, moveFactory, providers, cc, lirGenRes); + public AArch64LIRGenerator(LIRKindTool lirKindTool, AArch64ArithmeticLIRGenerator arithmeticLIRGen, MoveFactory moveFactory, Providers providers, LIRGenerationResult lirGenRes, + ConstantTableBaseProvider constantTableBaseProvider) { + super(lirKindTool, arithmeticLIRGen, moveFactory, providers, lirGenRes); this.constantTableBaseProvider = constantTableBaseProvider; } diff -r 59be481d0b4c -r f868bd0c3f02 graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64LIRGenerator.java --- a/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64LIRGenerator.java Thu Jan 21 10:20:11 2016 -0800 +++ b/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64LIRGenerator.java Thu Jan 21 10:35:29 2016 -0800 @@ -90,8 +90,8 @@ */ public abstract class AMD64LIRGenerator extends LIRGenerator { - public AMD64LIRGenerator(LIRKindTool lirKindTool, AMD64ArithmeticLIRGenerator arithmeticLIRGen, MoveFactory moveFactory, Providers providers, CallingConvention cc, LIRGenerationResult lirGenRes) { - super(lirKindTool, arithmeticLIRGen, moveFactory, providers, cc, lirGenRes); + public AMD64LIRGenerator(LIRKindTool lirKindTool, AMD64ArithmeticLIRGenerator arithmeticLIRGen, MoveFactory moveFactory, Providers providers, LIRGenerationResult lirGenRes) { + super(lirKindTool, arithmeticLIRGen, moveFactory, providers, lirGenRes); } /** diff -r 59be481d0b4c -r f868bd0c3f02 graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCLIRGenerator.java --- a/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCLIRGenerator.java Thu Jan 21 10:20:11 2016 -0800 +++ b/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCLIRGenerator.java Thu Jan 21 10:35:29 2016 -0800 @@ -35,7 +35,6 @@ import static jdk.vm.ci.sparc.SPARCKind.SINGLE; import static jdk.vm.ci.sparc.SPARCKind.WORD; import static jdk.vm.ci.sparc.SPARCKind.XWORD; -import jdk.vm.ci.code.CallingConvention; import jdk.vm.ci.common.JVMCIError; import jdk.vm.ci.meta.AllocatableValue; import jdk.vm.ci.meta.Constant; @@ -106,9 +105,9 @@ } } - public SPARCLIRGenerator(LIRKindTool lirKindTool, SPARCArithmeticLIRGenerator arithmeticLIRGen, MoveFactory moveFactory, Providers providers, CallingConvention cc, LIRGenerationResult lirGenRes, + public SPARCLIRGenerator(LIRKindTool lirKindTool, SPARCArithmeticLIRGenerator arithmeticLIRGen, MoveFactory moveFactory, Providers providers, LIRGenerationResult lirGenRes, ConstantTableBaseProvider constantTableBaseProvider) { - super(lirKindTool, arithmeticLIRGen, moveFactory, providers, cc, lirGenRes); + super(lirKindTool, arithmeticLIRGen, moveFactory, providers, lirGenRes); this.constantTableBaseProvider = constantTableBaseProvider; } diff -r 59be481d0b4c -r f868bd0c3f02 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 Thu Jan 21 10:20:11 2016 -0800 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/GraalCompilerTest.java Thu Jan 21 10:35:29 2016 -0800 @@ -24,7 +24,6 @@ import static com.oracle.graal.compiler.GraalCompilerOptions.PrintCompilation; import static com.oracle.graal.nodes.ConstantNode.getConstantNodes; -import static jdk.vm.ci.code.CodeUtil.getCallingConvention; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; @@ -41,8 +40,6 @@ import java.util.function.Supplier; import jdk.vm.ci.code.Architecture; -import jdk.vm.ci.code.CallingConvention; -import jdk.vm.ci.code.CallingConvention.Type; import jdk.vm.ci.code.CodeCacheProvider; import jdk.vm.ci.code.CompiledCode; import jdk.vm.ci.code.InstalledCode; @@ -770,8 +767,7 @@ StructuredGraph graphToCompile = graph == null ? parseForCompile(installedCodeOwner) : graph; lastCompiledGraph = graphToCompile; try (Scope s = Debug.scope("Compile", graphToCompile)) { - CallingConvention cc = getCallingConvention(getCodeCache(), Type.JavaCallee, graphToCompile.method(), false); - Request request = new Request<>(graphToCompile, cc, installedCodeOwner, getProviders(), getBackend(), getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL, + Request request = new Request<>(graphToCompile, installedCodeOwner, getProviders(), getBackend(), getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL, graphToCompile.getProfilingInfo(), getSuites(), getLIRSuites(), new CompilationResult(), CompilationResultBuilderFactory.Default); return GraalCompiler.compile(request); } catch (Throwable e) { diff -r 59be481d0b4c -r f868bd0c3f02 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 Thu Jan 21 10:20:11 2016 -0800 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/InfopointReasonTest.java Thu Jan 21 10:35:29 2016 -0800 @@ -24,10 +24,7 @@ import static com.oracle.graal.compiler.GraalCompiler.compileGraph; import static com.oracle.graal.compiler.common.GraalOptions.OptAssumptions; -import static jdk.vm.ci.code.CodeUtil.getCallingConvention; import static org.junit.Assert.assertNotNull; -import jdk.vm.ci.code.CallingConvention; -import jdk.vm.ci.code.CallingConvention.Type; import jdk.vm.ci.code.site.Call; import jdk.vm.ci.code.site.Infopoint; import jdk.vm.ci.code.site.InfopointReason; @@ -65,8 +62,7 @@ public void callInfopoints() { final ResolvedJavaMethod method = getResolvedJavaMethod("testMethod"); final StructuredGraph graph = parseEager(method, AllowAssumptions.YES); - CallingConvention cc = getCallingConvention(getCodeCache(), Type.JavaCallee, graph.method(), false); - final CompilationResult cr = compileGraph(graph, cc, graph.method(), getProviders(), getBackend(), getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL, graph.getProfilingInfo(), + final CompilationResult cr = compileGraph(graph, graph.method(), getProviders(), getBackend(), getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL, graph.getProfilingInfo(), getSuites(), getLIRSuites(), new CompilationResult(), CompilationResultBuilderFactory.Default); for (Infopoint sp : cr.getInfopoints()) { assertNotNull(sp.reason); @@ -87,9 +83,8 @@ } } assertTrue(graphLineSPs > 0); - CallingConvention cc = getCallingConvention(getCodeCache(), Type.JavaCallee, graph.method(), false); PhaseSuite graphBuilderSuite = getCustomGraphBuilderSuite(GraphBuilderConfiguration.getFullDebugDefault(getDefaultGraphBuilderPlugins())); - final CompilationResult cr = compileGraph(graph, cc, graph.method(), getProviders(), getBackend(), graphBuilderSuite, OptimisticOptimizations.ALL, graph.getProfilingInfo(), getSuites(), + final CompilationResult cr = compileGraph(graph, graph.method(), getProviders(), getBackend(), graphBuilderSuite, OptimisticOptimizations.ALL, graph.getProfilingInfo(), getSuites(), getLIRSuites(), new CompilationResult(), CompilationResultBuilderFactory.Default); int lineSPs = 0; for (Infopoint sp : cr.getInfopoints()) { diff -r 59be481d0b4c -r f868bd0c3f02 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/backend/BackendTest.java --- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/backend/BackendTest.java Thu Jan 21 10:20:11 2016 -0800 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/backend/BackendTest.java Thu Jan 21 10:35:29 2016 -0800 @@ -22,10 +22,7 @@ */ package com.oracle.graal.compiler.test.backend; -import static jdk.vm.ci.code.CodeUtil.getCallingConvention; import jdk.vm.ci.code.Architecture; -import jdk.vm.ci.code.CallingConvention; -import jdk.vm.ci.code.CallingConvention.Type; import com.oracle.graal.compiler.GraalCompiler; import com.oracle.graal.compiler.test.GraalCompilerTest; @@ -53,8 +50,7 @@ throw Debug.handle(e); } - CallingConvention cc = getCallingConvention(getCodeCache(), Type.JavaCallee, graph.method(), false); - LIRGenerationResult lirGen = GraalCompiler.emitLIR(getBackend(), graph, null, cc, null, getLIRSuites()); + LIRGenerationResult lirGen = GraalCompiler.emitLIR(getBackend(), graph, null, null, getLIRSuites()); return lirGen; } diff -r 59be481d0b4c -r f868bd0c3f02 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/tutorial/InvokeGraal.java --- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/tutorial/InvokeGraal.java Thu Jan 21 10:20:11 2016 -0800 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/tutorial/InvokeGraal.java Thu Jan 21 10:35:29 2016 -0800 @@ -25,10 +25,7 @@ import java.lang.reflect.Method; import java.util.concurrent.atomic.AtomicInteger; -import jdk.vm.ci.code.CallingConvention; -import jdk.vm.ci.code.CallingConvention.Type; import jdk.vm.ci.code.CodeCacheProvider; -import jdk.vm.ci.code.CodeUtil; import jdk.vm.ci.code.CompiledCode; import jdk.vm.ci.code.InstalledCode; import jdk.vm.ci.meta.MetaAccessProvider; @@ -114,13 +111,6 @@ LIRSuites lirSuites = backend.getSuites().getDefaultLIRSuites(); /* - * The calling convention for the machine code. You should have a very good reason - * before you switch to a different calling convention than the one that the VM provides - * by default. - */ - CallingConvention callingConvention = CodeUtil.getCallingConvention(codeCache, Type.JavaCallee, method, false); - - /* * We want Graal to perform all speculative optimistic optimizations, using the * profiling information that comes with the method (collected by the interpreter) for * speculation. @@ -133,7 +123,7 @@ CompilationResultBuilderFactory factory = CompilationResultBuilderFactory.Default; /* Invoke the whole Graal compilation pipeline. */ - GraalCompiler.compileGraph(graph, callingConvention, method, providers, backend, graphBuilderSuite, optimisticOpts, profilingInfo, suites, lirSuites, compilationResult, factory); + GraalCompiler.compileGraph(graph, method, providers, backend, graphBuilderSuite, optimisticOpts, profilingInfo, suites, lirSuites, compilationResult, factory); /* * Install the compilation result into the VM, i.e., copy the byte[] array that contains diff -r 59be481d0b4c -r f868bd0c3f02 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 Thu Jan 21 10:20:11 2016 -0800 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java Thu Jan 21 10:35:29 2016 -0800 @@ -30,7 +30,6 @@ import java.util.List; -import jdk.vm.ci.code.CallingConvention; import jdk.vm.ci.code.RegisterConfig; import jdk.vm.ci.code.TargetDescription; import jdk.vm.ci.code.site.ConstantReference; @@ -98,7 +97,6 @@ */ public static class Request { public final StructuredGraph graph; - public final CallingConvention cc; public final ResolvedJavaMethod installedCodeOwner; public final Providers providers; public final Backend backend; @@ -112,7 +110,6 @@ /** * @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 associated with once * installed. This argument can be null. * @param providers @@ -125,10 +122,9 @@ * @param compilationResult * @param factory */ - public Request(StructuredGraph graph, CallingConvention cc, ResolvedJavaMethod installedCodeOwner, Providers providers, Backend backend, PhaseSuite graphBuilderSuite, + public Request(StructuredGraph graph, ResolvedJavaMethod installedCodeOwner, Providers providers, Backend backend, PhaseSuite graphBuilderSuite, OptimisticOptimizations optimisticOpts, ProfilingInfo profilingInfo, Suites suites, LIRSuites lirSuites, T compilationResult, CompilationResultBuilderFactory factory) { this.graph = graph; - this.cc = cc; this.installedCodeOwner = installedCodeOwner; this.providers = providers; this.backend = backend; @@ -155,15 +151,14 @@ * 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} * @param installedCodeOwner the method the compiled code will be associated with once * installed. This argument can be null. * @return the result of the compilation */ - public static T compileGraph(StructuredGraph graph, CallingConvention cc, ResolvedJavaMethod installedCodeOwner, Providers providers, Backend backend, + public static T compileGraph(StructuredGraph graph, ResolvedJavaMethod installedCodeOwner, Providers providers, Backend backend, PhaseSuite graphBuilderSuite, OptimisticOptimizations optimisticOpts, ProfilingInfo profilingInfo, Suites suites, LIRSuites lirSuites, T compilationResult, CompilationResultBuilderFactory factory) { - return compile(new Request<>(graph, cc, installedCodeOwner, providers, backend, graphBuilderSuite, optimisticOpts, profilingInfo, suites, lirSuites, compilationResult, factory)); + return compile(new Request<>(graph, installedCodeOwner, providers, backend, graphBuilderSuite, optimisticOpts, profilingInfo, suites, lirSuites, compilationResult, factory)); } /** @@ -176,7 +171,7 @@ assert !r.graph.isFrozen(); try (Scope s0 = Debug.scope("GraalCompiler", r.graph, r.providers.getCodeCache())) { emitFrontEnd(r.providers, r.backend, r.graph, r.graphBuilderSuite, r.optimisticOpts, r.profilingInfo, r.suites); - emitBackEnd(r.graph, null, r.cc, r.installedCodeOwner, r.backend, r.compilationResult, r.factory, null, r.lirSuites); + emitBackEnd(r.graph, null, r.installedCodeOwner, r.backend, r.compilationResult, r.factory, null, r.lirSuites); } catch (Throwable e) { throw Debug.handle(e); } @@ -218,18 +213,18 @@ } @SuppressWarnings("try") - public static void emitBackEnd(StructuredGraph graph, Object stub, CallingConvention cc, ResolvedJavaMethod installedCodeOwner, Backend backend, T compilationResult, + public static void emitBackEnd(StructuredGraph graph, Object stub, ResolvedJavaMethod installedCodeOwner, Backend backend, T compilationResult, CompilationResultBuilderFactory factory, RegisterConfig registerConfig, LIRSuites lirSuites) { try (Scope s = Debug.scope("BackEnd", graph.getLastSchedule()); DebugCloseable a = BackEnd.start()) { // Repeatedly run the LIR code generation pass to improve statistical profiling results. for (int i = 0; i < EmitLIRRepeatCount.getValue(); i++) { SchedulePhase dummySchedule = new SchedulePhase(); dummySchedule.apply(graph); - emitLIR(backend, graph, stub, cc, registerConfig, lirSuites); + emitLIR(backend, graph, stub, registerConfig, lirSuites); } LIRGenerationResult lirGen = null; - lirGen = emitLIR(backend, graph, stub, cc, registerConfig, lirSuites); + lirGen = emitLIR(backend, graph, stub, registerConfig, lirSuites); try (Scope s2 = Debug.scope("CodeGen", lirGen, lirGen.getLIR())) { int bytecodeSize = graph.method() == null ? 0 : graph.getBytecodeSize(); compilationResult.setHasUnsafeAccess(graph.hasUnsafeAccess()); @@ -243,14 +238,14 @@ } @SuppressWarnings("try") - public static LIRGenerationResult emitLIR(Backend backend, StructuredGraph graph, Object stub, CallingConvention cc, RegisterConfig registerConfig, LIRSuites lirSuites) { + public static LIRGenerationResult emitLIR(Backend backend, StructuredGraph graph, Object stub, RegisterConfig registerConfig, LIRSuites lirSuites) { try { - return emitLIR0(backend, graph, stub, cc, registerConfig, lirSuites); + return emitLIR0(backend, graph, stub, registerConfig, lirSuites); } catch (OutOfRegistersException e) { if (RegisterPressure.getValue() != null && !RegisterPressure.getValue().equals(ALL_REGISTERS)) { try (OverrideScope s = OptionValue.override(RegisterPressure, ALL_REGISTERS)) { // retry with default register set - return emitLIR0(backend, graph, stub, cc, registerConfig, lirSuites); + return emitLIR0(backend, graph, stub, registerConfig, lirSuites); } } else { throw e; @@ -259,7 +254,7 @@ } @SuppressWarnings("try") - private static LIRGenerationResult emitLIR0(Backend backend, StructuredGraph graph, Object stub, CallingConvention cc, RegisterConfig registerConfig, LIRSuites lirSuites) { + private static LIRGenerationResult emitLIR0(Backend backend, StructuredGraph graph, Object stub, RegisterConfig registerConfig, LIRSuites lirSuites) { try (Scope ds = Debug.scope("EmitLIR"); DebugCloseable a = EmitLIR.start()) { ScheduleResult schedule = graph.getLastSchedule(); List blocks = schedule.getCFG().getBlocks(); @@ -287,8 +282,8 @@ } else { compilationUnitName = method.format("%H.%n(%p)"); } - LIRGenerationResult lirGenRes = backend.newLIRGenerationResult(compilationUnitName, lir, frameMapBuilder, graph.method(), stub); - LIRGeneratorTool lirGen = backend.newLIRGenerator(cc, lirGenRes); + LIRGenerationResult lirGenRes = backend.newLIRGenerationResult(compilationUnitName, lir, frameMapBuilder, graph, stub); + LIRGeneratorTool lirGen = backend.newLIRGenerator(lirGenRes); NodeLIRBuilderTool nodeLirGen = backend.newNodeLIRBuilder(graph, lirGen); // LIR generation diff -r 59be481d0b4c -r f868bd0c3f02 graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/NodeLIRBuilder.java --- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/NodeLIRBuilder.java Thu Jan 21 10:20:11 2016 -0800 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/NodeLIRBuilder.java Thu Jan 21 10:35:29 2016 -0800 @@ -74,6 +74,7 @@ import com.oracle.graal.lir.SwitchStrategy; import com.oracle.graal.lir.Variable; import com.oracle.graal.lir.debug.LIRGenerationDebugContext; +import com.oracle.graal.lir.gen.LIRGenerator; import com.oracle.graal.lir.gen.LIRGenerator.Options; import com.oracle.graal.lir.gen.LIRGeneratorTool; import com.oracle.graal.lir.gen.LIRGeneratorTool.BlockScope; @@ -121,7 +122,7 @@ private final NodeMap nodeOperands; private final DebugInfoBuilder debugInfoBuilder; - protected final LIRGeneratorTool gen; + protected final LIRGenerator gen; private ValueNode currentInstruction; private ValueNode lastInstructionPrinted; // Debugging only @@ -132,7 +133,7 @@ private Map, List> matchRules; public NodeLIRBuilder(StructuredGraph graph, LIRGeneratorTool gen, NodeMatchRules nodeMatchRules) { - this.gen = gen; + this.gen = (LIRGenerator) gen; this.nodeMatchRules = nodeMatchRules; this.nodeOperands = graph.createNodeMap(); this.debugInfoBuilder = createDebugInfoBuilder(graph, this); @@ -462,7 +463,7 @@ } protected void emitPrologue(StructuredGraph graph) { - CallingConvention incomingArguments = gen.getCallingConvention(); + CallingConvention incomingArguments = gen.getResult().getCallingConvention(); Value[] params = new Value[incomingArguments.getArgumentCount()]; for (int i = 0; i < params.length; i++) { diff -r 59be481d0b4c -r f868bd0c3f02 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 Thu Jan 21 10:20:11 2016 -0800 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/target/Backend.java Thu Jan 21 10:35:29 2016 -0800 @@ -22,12 +22,10 @@ */ package com.oracle.graal.compiler.target; -import jdk.vm.ci.code.CallingConvention; import jdk.vm.ci.code.CodeCacheProvider; import jdk.vm.ci.code.CompiledCode; import jdk.vm.ci.code.RegisterConfig; import jdk.vm.ci.code.TargetDescription; -import jdk.vm.ci.common.JVMCIError; import jdk.vm.ci.meta.ConstantReflectionProvider; import jdk.vm.ci.meta.MetaAccessProvider; import jdk.vm.ci.meta.ResolvedJavaMethod; @@ -37,8 +35,6 @@ import com.oracle.graal.compiler.common.alloc.RegisterAllocationConfig; import com.oracle.graal.compiler.common.spi.ForeignCallDescriptor; import com.oracle.graal.compiler.common.spi.ForeignCallsProvider; -import com.oracle.graal.compiler.gen.BytecodeLIRBuilder; -import com.oracle.graal.compiler.gen.BytecodeParserTool; import com.oracle.graal.lir.LIR; import com.oracle.graal.lir.asm.CompilationResultBuilder; import com.oracle.graal.lir.asm.CompilationResultBuilderFactory; @@ -107,21 +103,13 @@ public abstract FrameMap newFrameMap(RegisterConfig registerConfig); - public abstract LIRGeneratorTool newLIRGenerator(CallingConvention cc, LIRGenerationResult lirGenRes); + public abstract LIRGeneratorTool newLIRGenerator(LIRGenerationResult lirGenRes); - public abstract LIRGenerationResult newLIRGenerationResult(String compilationUnitName, LIR lir, FrameMapBuilder frameMapBuilder, ResolvedJavaMethod method, Object stub); + public abstract LIRGenerationResult newLIRGenerationResult(String compilationUnitName, LIR lir, FrameMapBuilder frameMapBuilder, StructuredGraph graph, Object stub); public abstract NodeLIRBuilderTool newNodeLIRBuilder(StructuredGraph graph, LIRGeneratorTool lirGen); /** - * @param gen the LIRGenerator the BytecodeLIRBuilder should use - * @param parser the bytecode parser the BytecodeLIRBuilder should use - */ - public BytecodeLIRBuilder newBytecodeLIRBuilder(LIRGeneratorTool gen, BytecodeParserTool parser) { - throw JVMCIError.unimplemented("Baseline compilation is not available for this Backend!"); - } - - /** * Creates the assembler used to emit the machine code. */ protected abstract Assembler createAssembler(FrameMap frameMap); diff -r 59be481d0b4c -r f868bd0c3f02 graal/com.oracle.graal.hotspot.aarch64/src/com/oracle/graal/hotspot/aarch64/AArch64HotSpotBackend.java --- a/graal/com.oracle.graal.hotspot.aarch64/src/com/oracle/graal/hotspot/aarch64/AArch64HotSpotBackend.java Thu Jan 21 10:20:11 2016 -0800 +++ b/graal/com.oracle.graal.hotspot.aarch64/src/com/oracle/graal/hotspot/aarch64/AArch64HotSpotBackend.java Thu Jan 21 10:35:29 2016 -0800 @@ -97,13 +97,13 @@ } @Override - public LIRGeneratorTool newLIRGenerator(CallingConvention cc, LIRGenerationResult lirGenRes) { - return new AArch64HotSpotLIRGenerator(getProviders(), config(), cc, lirGenRes); + public LIRGeneratorTool newLIRGenerator(LIRGenerationResult lirGenRes) { + return new AArch64HotSpotLIRGenerator(getProviders(), config(), lirGenRes); } @Override - public LIRGenerationResult newLIRGenerationResult(String compilationUnitName, LIR lir, FrameMapBuilder frameMapBuilder, ResolvedJavaMethod method, Object stub) { - return new HotSpotLIRGenerationResult(compilationUnitName, lir, frameMapBuilder, stub); + public LIRGenerationResult newLIRGenerationResult(String compilationUnitName, LIR lir, FrameMapBuilder frameMapBuilder, StructuredGraph graph, Object stub) { + return new HotSpotLIRGenerationResult(compilationUnitName, lir, frameMapBuilder, makeCallingConvention(graph, (Stub) stub), stub); } @Override diff -r 59be481d0b4c -r f868bd0c3f02 graal/com.oracle.graal.hotspot.aarch64/src/com/oracle/graal/hotspot/aarch64/AArch64HotSpotLIRGenerator.java --- a/graal/com.oracle.graal.hotspot.aarch64/src/com/oracle/graal/hotspot/aarch64/AArch64HotSpotLIRGenerator.java Thu Jan 21 10:20:11 2016 -0800 +++ b/graal/com.oracle.graal.hotspot.aarch64/src/com/oracle/graal/hotspot/aarch64/AArch64HotSpotLIRGenerator.java Thu Jan 21 10:35:29 2016 -0800 @@ -66,18 +66,17 @@ final HotSpotVMConfig config; private HotSpotDebugInfoBuilder debugInfoBuilder; - protected AArch64HotSpotLIRGenerator(HotSpotProviders providers, HotSpotVMConfig config, CallingConvention cc, LIRGenerationResult lirGenRes) { - this(providers, config, cc, lirGenRes, new ConstantTableBaseProvider()); + protected AArch64HotSpotLIRGenerator(HotSpotProviders providers, HotSpotVMConfig config, LIRGenerationResult lirGenRes) { + this(providers, config, lirGenRes, new ConstantTableBaseProvider()); } - private AArch64HotSpotLIRGenerator(HotSpotProviders providers, HotSpotVMConfig config, CallingConvention cc, LIRGenerationResult lirGenRes, ConstantTableBaseProvider constantTableBaseProvider) { - this(new AArch64HotSpotLIRKindTool(), new AArch64ArithmeticLIRGenerator(), new AArch64HotSpotMoveFactory(constantTableBaseProvider), providers, config, cc, lirGenRes, - constantTableBaseProvider); + private AArch64HotSpotLIRGenerator(HotSpotProviders providers, HotSpotVMConfig config, LIRGenerationResult lirGenRes, ConstantTableBaseProvider constantTableBaseProvider) { + this(new AArch64HotSpotLIRKindTool(), new AArch64ArithmeticLIRGenerator(), new AArch64HotSpotMoveFactory(constantTableBaseProvider), providers, config, lirGenRes, constantTableBaseProvider); } protected AArch64HotSpotLIRGenerator(LIRKindTool lirKindTool, AArch64ArithmeticLIRGenerator arithmeticLIRGen, MoveFactory moveFactory, HotSpotProviders providers, HotSpotVMConfig config, - CallingConvention cc, LIRGenerationResult lirGenRes, ConstantTableBaseProvider constantTableBaseProvider) { - super(lirKindTool, arithmeticLIRGen, moveFactory, providers, cc, lirGenRes, constantTableBaseProvider); + LIRGenerationResult lirGenRes, ConstantTableBaseProvider constantTableBaseProvider) { + super(lirKindTool, arithmeticLIRGen, moveFactory, providers, lirGenRes, constantTableBaseProvider); this.config = config; } diff -r 59be481d0b4c -r f868bd0c3f02 graal/com.oracle.graal.hotspot.aarch64/src/com/oracle/graal/hotspot/aarch64/AArch64HotSpotNodeLIRBuilder.java --- a/graal/com.oracle.graal.hotspot.aarch64/src/com/oracle/graal/hotspot/aarch64/AArch64HotSpotNodeLIRBuilder.java Thu Jan 21 10:20:11 2016 -0800 +++ b/graal/com.oracle.graal.hotspot.aarch64/src/com/oracle/graal/hotspot/aarch64/AArch64HotSpotNodeLIRBuilder.java Thu Jan 21 10:35:29 2016 -0800 @@ -93,7 +93,7 @@ @Override protected void emitPrologue(StructuredGraph graph) { - CallingConvention incomingArguments = gen.getCallingConvention(); + CallingConvention incomingArguments = gen.getResult().getCallingConvention(); Value[] params = new Value[incomingArguments.getArgumentCount() + 2]; for (int i = 0; i < incomingArguments.getArgumentCount(); i++) { params[i] = incomingArguments.getArgument(i); diff -r 59be481d0b4c -r f868bd0c3f02 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 Thu Jan 21 10:20:11 2016 -0800 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBackend.java Thu Jan 21 10:35:29 2016 -0800 @@ -50,8 +50,6 @@ import com.oracle.graal.code.CompilationResult; import com.oracle.graal.compiler.amd64.AMD64NodeMatchRules; import com.oracle.graal.compiler.common.alloc.RegisterAllocationConfig; -import com.oracle.graal.compiler.gen.BytecodeLIRBuilder; -import com.oracle.graal.compiler.gen.BytecodeParserTool; import com.oracle.graal.compiler.target.Backend; import com.oracle.graal.hotspot.HotSpotDataBuilder; import com.oracle.graal.hotspot.HotSpotGraalRuntimeProvider; @@ -96,13 +94,13 @@ } @Override - public LIRGeneratorTool newLIRGenerator(CallingConvention cc, LIRGenerationResult lirGenRes) { - return new AMD64HotSpotLIRGenerator(getProviders(), config(), cc, lirGenRes); + public LIRGeneratorTool newLIRGenerator(LIRGenerationResult lirGenRes) { + return new AMD64HotSpotLIRGenerator(getProviders(), config(), lirGenRes); } @Override - public LIRGenerationResult newLIRGenerationResult(String compilationUnitName, LIR lir, FrameMapBuilder frameMapBuilder, ResolvedJavaMethod method, Object stub) { - return new HotSpotLIRGenerationResult(compilationUnitName, lir, frameMapBuilder, stub); + public LIRGenerationResult newLIRGenerationResult(String compilationUnitName, LIR lir, FrameMapBuilder frameMapBuilder, StructuredGraph graph, Object stub) { + return new HotSpotLIRGenerationResult(compilationUnitName, lir, frameMapBuilder, makeCallingConvention(graph, (Stub) stub), stub); } @Override @@ -111,12 +109,6 @@ } @Override - public BytecodeLIRBuilder newBytecodeLIRBuilder(LIRGeneratorTool gen, BytecodeParserTool parser) { - return new AMD64HotSpotBytecodeLIRBuilder(gen, parser); - - } - - @Override protected void bangStackWithOffset(CompilationResultBuilder crb, int bangOffset) { AMD64MacroAssembler asm = (AMD64MacroAssembler) crb.asm; int pos = asm.position(); diff -r 59be481d0b4c -r f868bd0c3f02 graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotLIRGenerator.java --- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotLIRGenerator.java Thu Jan 21 10:20:11 2016 -0800 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotLIRGenerator.java Thu Jan 21 10:35:29 2016 -0800 @@ -97,17 +97,17 @@ final HotSpotVMConfig config; private HotSpotDebugInfoBuilder debugInfoBuilder; - protected AMD64HotSpotLIRGenerator(HotSpotProviders providers, HotSpotVMConfig config, CallingConvention cc, LIRGenerationResult lirGenRes) { - this(providers, config, cc, lirGenRes, new BackupSlotProvider(lirGenRes.getFrameMapBuilder())); + protected AMD64HotSpotLIRGenerator(HotSpotProviders providers, HotSpotVMConfig config, LIRGenerationResult lirGenRes) { + this(providers, config, lirGenRes, new BackupSlotProvider(lirGenRes.getFrameMapBuilder())); } - private AMD64HotSpotLIRGenerator(HotSpotProviders providers, HotSpotVMConfig config, CallingConvention cc, LIRGenerationResult lirGenRes, BackupSlotProvider backupSlotProvider) { - this(new AMD64HotSpotLIRKindTool(), new AMD64ArithmeticLIRGenerator(), new AMD64HotSpotMoveFactory(backupSlotProvider), providers, config, cc, lirGenRes); + private AMD64HotSpotLIRGenerator(HotSpotProviders providers, HotSpotVMConfig config, LIRGenerationResult lirGenRes, BackupSlotProvider backupSlotProvider) { + this(new AMD64HotSpotLIRKindTool(), new AMD64ArithmeticLIRGenerator(), new AMD64HotSpotMoveFactory(backupSlotProvider), providers, config, lirGenRes); } protected AMD64HotSpotLIRGenerator(LIRKindTool lirKindTool, AMD64ArithmeticLIRGenerator arithmeticLIRGen, MoveFactory moveFactory, HotSpotProviders providers, HotSpotVMConfig config, - CallingConvention cc, LIRGenerationResult lirGenRes) { - super(lirKindTool, arithmeticLIRGen, moveFactory, providers, cc, lirGenRes); + LIRGenerationResult lirGenRes) { + super(lirKindTool, arithmeticLIRGen, moveFactory, providers, lirGenRes); assert config.basicLockSize == 8; this.config = config; } diff -r 59be481d0b4c -r f868bd0c3f02 graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotNodeLIRBuilder.java --- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotNodeLIRBuilder.java Thu Jan 21 10:20:11 2016 -0800 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotNodeLIRBuilder.java Thu Jan 21 10:35:29 2016 -0800 @@ -90,7 +90,7 @@ @Override protected void emitPrologue(StructuredGraph graph) { - CallingConvention incomingArguments = gen.getCallingConvention(); + CallingConvention incomingArguments = gen.getResult().getCallingConvention(); Value[] params = new Value[incomingArguments.getArgumentCount() + 1]; for (int i = 0; i < params.length - 1; i++) { diff -r 59be481d0b4c -r f868bd0c3f02 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 Thu Jan 21 10:20:11 2016 -0800 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotBackend.java Thu Jan 21 10:35:29 2016 -0800 @@ -134,13 +134,13 @@ } @Override - public LIRGeneratorTool newLIRGenerator(CallingConvention cc, LIRGenerationResult lirGenRes) { - return new SPARCHotSpotLIRGenerator(getProviders(), config(), cc, lirGenRes); + public LIRGeneratorTool newLIRGenerator(LIRGenerationResult lirGenRes) { + return new SPARCHotSpotLIRGenerator(getProviders(), config(), lirGenRes); } @Override - public LIRGenerationResult newLIRGenerationResult(String compilationUnitName, LIR lir, FrameMapBuilder frameMapBuilder, ResolvedJavaMethod method, Object stub) { - return new HotSpotLIRGenerationResult(compilationUnitName, lir, frameMapBuilder, stub); + public LIRGenerationResult newLIRGenerationResult(String compilationUnitName, LIR lir, FrameMapBuilder frameMapBuilder, StructuredGraph graph, Object stub) { + return new HotSpotLIRGenerationResult(compilationUnitName, lir, frameMapBuilder, makeCallingConvention(graph, (Stub) stub), stub); } @Override diff -r 59be481d0b4c -r f868bd0c3f02 graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotLIRGenerator.java --- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotLIRGenerator.java Thu Jan 21 10:20:11 2016 -0800 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotLIRGenerator.java Thu Jan 21 10:35:29 2016 -0800 @@ -126,17 +126,17 @@ private HotSpotDebugInfoBuilder debugInfoBuilder; private LIRFrameState currentRuntimeCallInfo; - public SPARCHotSpotLIRGenerator(HotSpotProviders providers, HotSpotVMConfig config, CallingConvention cc, LIRGenerationResult lirGenRes) { - this(providers, config, cc, lirGenRes, new ConstantTableBaseProvider()); + public SPARCHotSpotLIRGenerator(HotSpotProviders providers, HotSpotVMConfig config, LIRGenerationResult lirGenRes) { + this(providers, config, lirGenRes, new ConstantTableBaseProvider()); } - private SPARCHotSpotLIRGenerator(HotSpotProviders providers, HotSpotVMConfig config, CallingConvention cc, LIRGenerationResult lirGenRes, ConstantTableBaseProvider constantTableBaseProvider) { - this(new SPARCHotSpotLIRKindTool(), new SPARCArithmeticLIRGenerator(), new SPARCHotSpotMoveFactory(constantTableBaseProvider), providers, config, cc, lirGenRes, constantTableBaseProvider); + private SPARCHotSpotLIRGenerator(HotSpotProviders providers, HotSpotVMConfig config, LIRGenerationResult lirGenRes, ConstantTableBaseProvider constantTableBaseProvider) { + this(new SPARCHotSpotLIRKindTool(), new SPARCArithmeticLIRGenerator(), new SPARCHotSpotMoveFactory(constantTableBaseProvider), providers, config, lirGenRes, constantTableBaseProvider); } public SPARCHotSpotLIRGenerator(LIRKindTool lirKindTool, SPARCArithmeticLIRGenerator arithmeticLIRGen, MoveFactory moveFactory, HotSpotProviders providers, HotSpotVMConfig config, - CallingConvention cc, LIRGenerationResult lirGenRes, ConstantTableBaseProvider constantTableBaseProvider) { - super(lirKindTool, arithmeticLIRGen, moveFactory, providers, cc, lirGenRes, constantTableBaseProvider); + LIRGenerationResult lirGenRes, ConstantTableBaseProvider constantTableBaseProvider) { + super(lirKindTool, arithmeticLIRGen, moveFactory, providers, lirGenRes, constantTableBaseProvider); assert config.basicLockSize == 8; this.config = config; } diff -r 59be481d0b4c -r f868bd0c3f02 graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/AheadOfTimeCompilationTest.java --- a/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/AheadOfTimeCompilationTest.java Thu Jan 21 10:20:11 2016 -0800 +++ b/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/AheadOfTimeCompilationTest.java Thu Jan 21 10:35:29 2016 -0800 @@ -25,9 +25,6 @@ import static com.oracle.graal.compiler.GraalCompiler.compileGraph; import static com.oracle.graal.compiler.common.GraalOptions.ImmutableCode; import static com.oracle.graal.nodes.ConstantNode.getConstantNodes; -import static jdk.vm.ci.code.CodeUtil.getCallingConvention; -import jdk.vm.ci.code.CallingConvention; -import jdk.vm.ci.code.CallingConvention.Type; import jdk.vm.ci.hotspot.HotSpotResolvedObjectType; import jdk.vm.ci.meta.JavaConstant; import jdk.vm.ci.meta.JavaKind; @@ -215,12 +212,11 @@ try (OverrideScope s = OptionValue.override(ImmutableCode, compileAOT)) { StructuredGraph graph = parseEager(test, AllowAssumptions.YES); ResolvedJavaMethod method = graph.method(); - CallingConvention cc = getCallingConvention(getCodeCache(), Type.JavaCallee, graph.method(), false); // create suites everytime, as we modify options for the compiler SuitesProvider suitesProvider = Graal.getRequiredCapability(RuntimeProvider.class).getHostBackend().getSuites(); final Suites suitesLocal = suitesProvider.getDefaultSuites(); final LIRSuites lirSuitesLocal = suitesProvider.getDefaultLIRSuites(); - final CompilationResult compResult = compileGraph(graph, cc, method, getProviders(), getBackend(), getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL, graph.getProfilingInfo(), + final CompilationResult compResult = compileGraph(graph, method, getProviders(), getBackend(), getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL, graph.getProfilingInfo(), suitesLocal, lirSuitesLocal, new CompilationResult(), CompilationResultBuilderFactory.Default); addMethod(method, compResult); return graph; diff -r 59be481d0b4c -r f868bd0c3f02 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotGraalCompiler.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotGraalCompiler.java Thu Jan 21 10:20:11 2016 -0800 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotGraalCompiler.java Thu Jan 21 10:35:29 2016 -0800 @@ -25,17 +25,12 @@ import static com.oracle.graal.compiler.common.GraalOptions.OptAssumptions; import static com.oracle.graal.nodes.StructuredGraph.NO_PROFILING_INFO; import static com.oracle.graal.nodes.graphbuilderconf.IntrinsicContext.CompilationContext.ROOT_COMPILATION; -import static jdk.vm.ci.code.CallingConvention.Type.JavaCallee; -import static jdk.vm.ci.code.CodeUtil.getCallingConvention; -import jdk.vm.ci.code.CallingConvention; -import jdk.vm.ci.code.CallingConvention.Type; import jdk.vm.ci.code.CompilationRequest; import jdk.vm.ci.code.CompilationRequestResult; import jdk.vm.ci.hotspot.HotSpotCodeCacheProvider; import jdk.vm.ci.hotspot.HotSpotCompilationRequest; import jdk.vm.ci.hotspot.HotSpotJVMCIRuntimeProvider; import jdk.vm.ci.meta.DefaultProfilingInfo; -import jdk.vm.ci.meta.JavaType; import jdk.vm.ci.meta.ProfilingInfo; import jdk.vm.ci.meta.ResolvedJavaMethod; import jdk.vm.ci.meta.SpeculationLog; @@ -124,14 +119,6 @@ graph = new StructuredGraph(method, entryBCI, AllowAssumptions.from(OptAssumptions.getValue()), speculationLog, useProfilingInfo); } - CallingConvention cc = getCallingConvention(providers.getCodeCache(), Type.JavaCallee, graph.method(), false); - if (isOSR) { - // for OSR, only a pointer is passed to the method. - JavaType[] parameterTypes = new JavaType[]{providers.getMetaAccess().lookupJavaType(long.class)}; - CallingConvention tmp = providers.getCodeCache().getRegisterConfig().getCallingConvention(JavaCallee, providers.getMetaAccess().lookupJavaType(void.class), parameterTypes, - backend.getTarget(), false); - cc = new CallingConvention(cc.getStackSize(), cc.getReturn(), tmp.getArgument(0)); - } Suites suites = getSuites(providers); LIRSuites lirSuites = getLIRSuites(providers); ProfilingInfo profilingInfo = useProfilingInfo ? method.getProfilingInfo(!isOSR, isOSR) : DefaultProfilingInfo.get(TriState.FALSE); @@ -145,7 +132,7 @@ result.setEntryBCI(entryBCI); boolean shouldDebugNonSafepoints = providers.getCodeCache().shouldDebugNonSafepoints(); PhaseSuite graphBuilderSuite = configGraphBuilderSuite(providers.getSuites().getDefaultGraphBuilderSuite(), shouldDebugNonSafepoints, isOSR); - GraalCompiler.compileGraph(graph, cc, method, providers, backend, graphBuilderSuite, optimisticOpts, profilingInfo, suites, lirSuites, result, CompilationResultBuilderFactory.Default); + GraalCompiler.compileGraph(graph, method, providers, backend, graphBuilderSuite, optimisticOpts, profilingInfo, suites, lirSuites, result, CompilationResultBuilderFactory.Default); if (!isOSR && useProfilingInfo) { ProfilingInfo profile = profilingInfo; diff -r 59be481d0b4c -r f868bd0c3f02 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotHostBackend.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotHostBackend.java Thu Jan 21 10:20:11 2016 -0800 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotHostBackend.java Thu Jan 21 10:35:29 2016 -0800 @@ -24,11 +24,17 @@ import static com.oracle.graal.compiler.common.GraalOptions.BootstrapReplacements; import static com.oracle.graal.compiler.common.GraalOptions.Intrinsify; +import static jdk.vm.ci.code.CallingConvention.Type.JavaCallee; +import static jdk.vm.ci.code.CodeUtil.getCallingConvention; import static jdk.vm.ci.inittimer.InitTimer.timer; +import jdk.vm.ci.code.CallingConvention; +import jdk.vm.ci.code.CallingConvention.Type; import jdk.vm.ci.hotspot.HotSpotJVMCIRuntime; import jdk.vm.ci.hotspot.HotSpotVMConfig; import jdk.vm.ci.inittimer.InitTimer; +import jdk.vm.ci.meta.JavaType; import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.runtime.JVMCICompiler; import jdk.vm.ci.services.Services; import com.oracle.graal.compiler.common.spi.ForeignCallDescriptor; @@ -39,8 +45,10 @@ import com.oracle.graal.hotspot.meta.HotSpotLoweringProvider; import com.oracle.graal.hotspot.meta.HotSpotProviders; import com.oracle.graal.hotspot.stubs.DeoptimizationStub; +import com.oracle.graal.hotspot.stubs.Stub; import com.oracle.graal.hotspot.stubs.UncommonTrapStub; import com.oracle.graal.lir.asm.CompilationResultBuilder; +import com.oracle.graal.nodes.StructuredGraph; import com.oracle.graal.nodes.spi.ReplacementsProvider; /** @@ -104,6 +112,21 @@ } } + protected CallingConvention makeCallingConvention(StructuredGraph graph, Stub stub) { + if (stub != null) { + return stub.getLinkage().getIncomingCallingConvention(); + } + + CallingConvention cc = getCallingConvention(getCodeCache(), Type.JavaCallee, graph.method(), false); + if (graph.getEntryBCI() != JVMCICompiler.INVOCATION_ENTRY_BCI) { + // for OSR, only a pointer is passed to the method. + JavaType[] parameterTypes = new JavaType[]{getMetaAccess().lookupJavaType(long.class)}; + CallingConvention tmp = getCodeCache().getRegisterConfig().getCallingConvention(JavaCallee, getMetaAccess().lookupJavaType(void.class), parameterTypes, getTarget(), false); + cc = new CallingConvention(cc.getStackSize(), cc.getReturn(), tmp.getArgument(0)); + } + return cc; + } + public void emitStackOverflowCheck(CompilationResultBuilder crb) { if (config.useStackBanging) { // Each code entry causes one stack bang n pages down the stack where n diff -r 59be481d0b4c -r f868bd0c3f02 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotLIRGenerationResult.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotLIRGenerationResult.java Thu Jan 21 10:20:11 2016 -0800 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotLIRGenerationResult.java Thu Jan 21 10:35:29 2016 -0800 @@ -24,6 +24,7 @@ import java.util.Map; +import jdk.vm.ci.code.CallingConvention; import jdk.vm.ci.code.StackSlot; import com.oracle.graal.compiler.common.CollectionsFactory; @@ -52,8 +53,8 @@ */ private Map calleeSaveInfo = CollectionsFactory.newMap(); - public HotSpotLIRGenerationResult(String compilationUnitName, LIR lir, FrameMapBuilder frameMapBuilder, Object stub) { - super(compilationUnitName, lir, frameMapBuilder); + public HotSpotLIRGenerationResult(String compilationUnitName, LIR lir, FrameMapBuilder frameMapBuilder, CallingConvention callingConvention, Object stub) { + super(compilationUnitName, lir, frameMapBuilder, callingConvention); this.stub = stub; } diff -r 59be481d0b4c -r f868bd0c3f02 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 Thu Jan 21 10:20:11 2016 -0800 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/Stub.java Thu Jan 21 10:35:29 2016 -0800 @@ -29,7 +29,6 @@ import java.util.ListIterator; import java.util.Set; -import jdk.vm.ci.code.CallingConvention; import jdk.vm.ci.code.CodeCacheProvider; import jdk.vm.ci.code.InstalledCode; import jdk.vm.ci.code.Register; @@ -177,8 +176,6 @@ } CodeCacheProvider codeCache = providers.getCodeCache(); - // The stub itself needs the incoming calling convention. - CallingConvention incomingCc = linkage.getIncomingCallingConvention(); compResult = new CompilationResult(toString()); try (Scope s0 = Debug.scope("StubCompilation", graph, providers.getCodeCache())) { @@ -186,7 +183,7 @@ Suites suites = new Suites(new PhaseSuite<>(), defaultSuites.getMidTier(), defaultSuites.getLowTier()); emitFrontEnd(providers, backend, graph, providers.getSuites().getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL, DefaultProfilingInfo.get(TriState.UNKNOWN), suites); LIRSuites lirSuites = createLIRSuites(); - emitBackEnd(graph, Stub.this, incomingCc, getInstalledCodeOwner(), backend, compResult, CompilationResultBuilderFactory.Default, getRegisterConfig(), lirSuites); + emitBackEnd(graph, Stub.this, getInstalledCodeOwner(), backend, compResult, CompilationResultBuilderFactory.Default, getRegisterConfig(), lirSuites); assert checkStubInvariants(); } catch (Throwable e) { throw Debug.handle(e); diff -r 59be481d0b4c -r f868bd0c3f02 graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/LIRGenerationResult.java --- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/LIRGenerationResult.java Thu Jan 21 10:20:11 2016 -0800 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/LIRGenerationResult.java Thu Jan 21 10:35:29 2016 -0800 @@ -22,6 +22,8 @@ */ package com.oracle.graal.lir.gen; +import jdk.vm.ci.code.CallingConvention; + import com.oracle.graal.lir.LIR; import com.oracle.graal.lir.framemap.FrameMap; import com.oracle.graal.lir.framemap.FrameMapBuilder; @@ -29,6 +31,9 @@ public interface LIRGenerationResult { + /** Returns the incoming calling convention for the parameters of the method that is compiled. */ + CallingConvention getCallingConvention(); + /** * Returns the {@link FrameMapBuilder} for collecting the information to build a * {@link FrameMap}. diff -r 59be481d0b4c -r f868bd0c3f02 graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/LIRGenerationResultBase.java --- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/LIRGenerationResultBase.java Thu Jan 21 10:20:11 2016 -0800 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/LIRGenerationResultBase.java Thu Jan 21 10:35:29 2016 -0800 @@ -22,6 +22,8 @@ */ package com.oracle.graal.lir.gen; +import jdk.vm.ci.code.CallingConvention; + import com.oracle.graal.lir.LIR; import com.oracle.graal.lir.framemap.FrameMap; import com.oracle.graal.lir.framemap.FrameMapBuilder; @@ -31,6 +33,8 @@ private final LIR lir; private final FrameMapBuilder frameMapBuilder; private FrameMap frameMap; + private final CallingConvention callingConvention; + /** * Records whether the code being generated makes at least one foreign call. */ @@ -40,10 +44,16 @@ */ private final String compilationUnitName; - public LIRGenerationResultBase(String compilationUnitName, LIR lir, FrameMapBuilder frameMapBuilder) { + public LIRGenerationResultBase(String compilationUnitName, LIR lir, FrameMapBuilder frameMapBuilder, CallingConvention callingConvention) { this.lir = lir; this.frameMapBuilder = frameMapBuilder; this.compilationUnitName = compilationUnitName; + this.callingConvention = callingConvention; + } + + @Override + public CallingConvention getCallingConvention() { + return callingConvention; } public LIR getLIR() { diff -r 59be481d0b4c -r f868bd0c3f02 graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/LIRGenerator.java --- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/LIRGenerator.java Thu Jan 21 10:20:11 2016 -0800 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/LIRGenerator.java Thu Jan 21 10:35:29 2016 -0800 @@ -92,7 +92,6 @@ private final LIRKindTool lirKindTool; private final CodeGenProviders providers; - private final CallingConvention cc; private AbstractBlockBase currentBlock; @@ -101,12 +100,11 @@ protected final ArithmeticLIRGenerator arithmeticLIRGen; private final MoveFactory moveFactory; - public LIRGenerator(LIRKindTool lirKindTool, ArithmeticLIRGenerator arithmeticLIRGen, MoveFactory moveFactory, CodeGenProviders providers, CallingConvention cc, LIRGenerationResult res) { + public LIRGenerator(LIRKindTool lirKindTool, ArithmeticLIRGenerator arithmeticLIRGen, MoveFactory moveFactory, CodeGenProviders providers, LIRGenerationResult res) { this.lirKindTool = lirKindTool; this.arithmeticLIRGen = arithmeticLIRGen; this.res = res; this.providers = providers; - this.cc = cc; assert arithmeticLIRGen.lirGen == null; arithmeticLIRGen.lirGen = this; @@ -429,10 +427,6 @@ protected abstract void emitTableSwitch(int lowKey, LabelRef defaultTarget, LabelRef[] targets, Value key); - public CallingConvention getCallingConvention() { - return cc; - } - @Override public void beforeRegisterAllocation() { } diff -r 59be481d0b4c -r f868bd0c3f02 graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/LIRGeneratorTool.java --- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/LIRGeneratorTool.java Thu Jan 21 10:20:11 2016 -0800 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/LIRGeneratorTool.java Thu Jan 21 10:35:29 2016 -0800 @@ -23,7 +23,6 @@ package com.oracle.graal.lir.gen; import jdk.vm.ci.code.BytecodePosition; -import jdk.vm.ci.code.CallingConvention; import jdk.vm.ci.code.CodeCacheProvider; import jdk.vm.ci.code.Register; import jdk.vm.ci.code.RegisterAttributes; @@ -248,8 +247,6 @@ void emitStrategySwitch(SwitchStrategy strategy, Variable key, LabelRef[] keyTargets, LabelRef defaultTarget); - CallingConvention getCallingConvention(); - Variable emitByteSwap(Value operand); Variable emitArrayEquals(JavaKind kind, Value array1, Value array2, Value length); diff -r 59be481d0b4c -r f868bd0c3f02 graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/HotSpotTruffleRuntime.java --- a/graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/HotSpotTruffleRuntime.java Thu Jan 21 10:20:11 2016 -0800 +++ b/graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/HotSpotTruffleRuntime.java Thu Jan 21 10:35:29 2016 -0800 @@ -27,7 +27,6 @@ import static com.oracle.graal.truffle.TruffleCompilerOptions.TraceTruffleStackTraceLimit; import static com.oracle.graal.truffle.TruffleCompilerOptions.TraceTruffleTransferToInterpreter; import static com.oracle.graal.truffle.hotspot.UnsafeAccess.UNSAFE; -import static jdk.vm.ci.code.CodeUtil.getCallingConvention; import static jdk.vm.ci.hotspot.HotSpotVMConfig.config; import java.util.Arrays; @@ -39,8 +38,6 @@ import java.util.function.Supplier; import java.util.stream.Collectors; -import jdk.vm.ci.code.CallingConvention; -import jdk.vm.ci.code.CallingConvention.Type; import jdk.vm.ci.code.CodeCacheProvider; import jdk.vm.ci.code.CompiledCode; import jdk.vm.ci.code.stack.StackIntrospection; @@ -255,10 +252,9 @@ new GraphBuilderPhase.Instance(metaAccess, providers.getStampProvider(), providers.getConstantReflection(), config, OptimisticOptimizations.ALL, null).apply(graph); PhaseSuite graphBuilderSuite = getGraphBuilderSuite(codeCache, suitesProvider); - CallingConvention cc = getCallingConvention(codeCache, Type.JavaCallee, graph.method(), false); Backend backend = getHotSpotBackend(); CompilationResultBuilderFactory factory = getOptimizedCallTargetInstrumentationFactory(backend.getTarget().arch.getName()); - return compileGraph(graph, cc, javaMethod, providers, backend, graphBuilderSuite, OptimisticOptimizations.ALL, graph.getProfilingInfo(), suites, lirSuites, new CompilationResult(), factory); + return compileGraph(graph, javaMethod, providers, backend, graphBuilderSuite, OptimisticOptimizations.ALL, graph.getProfilingInfo(), suites, lirSuites, new CompilationResult(), factory); } private HotSpotBackend getHotSpotBackend() { diff -r 59be481d0b4c -r f868bd0c3f02 graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/nfi/HotSpotNativeFunctionInterface.java --- a/graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/nfi/HotSpotNativeFunctionInterface.java Thu Jan 21 10:20:11 2016 -0800 +++ b/graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/nfi/HotSpotNativeFunctionInterface.java Thu Jan 21 10:35:29 2016 -0800 @@ -23,14 +23,11 @@ package com.oracle.graal.truffle.hotspot.nfi; import static com.oracle.graal.truffle.hotspot.nfi.NativeCallStubGraphBuilder.getGraph; -import static jdk.vm.ci.code.CodeUtil.getCallingConvention; import static jdk.vm.ci.common.UnsafeUtil.createCString; import static jdk.vm.ci.common.UnsafeUtil.writeCString; import java.lang.reflect.Field; -import jdk.vm.ci.code.CallingConvention; -import jdk.vm.ci.code.CallingConvention.Type; import jdk.vm.ci.code.InstalledCode; import jdk.vm.ci.hotspot.HotSpotCompiledCode; import jdk.vm.ci.hotspot.HotSpotVMConfig; @@ -179,8 +176,7 @@ Suites suites = providers.getSuites().getDefaultSuites(); LIRSuites lirSuites = providers.getSuites().getDefaultLIRSuites(); PhaseSuite phaseSuite = backend.getSuites().getDefaultGraphBuilderSuite().copy(); - CallingConvention cc = getCallingConvention(providers.getCodeCache(), Type.JavaCallee, g.method(), false); - CompilationResult compResult = GraalCompiler.compileGraph(g, cc, g.method(), providers, backend, phaseSuite, OptimisticOptimizations.ALL, DefaultProfilingInfo.get(TriState.UNKNOWN), suites, + CompilationResult compResult = GraalCompiler.compileGraph(g, g.method(), providers, backend, phaseSuite, OptimisticOptimizations.ALL, DefaultProfilingInfo.get(TriState.UNKNOWN), suites, lirSuites, new CompilationResult(), CompilationResultBuilderFactory.Default); InstalledCode installedCode; try (Scope s = Debug.scope("CodeInstall", providers.getCodeCache(), g.method())) { diff -r 59be481d0b4c -r f868bd0c3f02 graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCompiler.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCompiler.java Thu Jan 21 10:20:11 2016 -0800 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCompiler.java Thu Jan 21 10:35:29 2016 -0800 @@ -23,14 +23,10 @@ package com.oracle.graal.truffle; import static com.oracle.graal.compiler.GraalCompiler.compileGraph; -import static jdk.vm.ci.code.CodeUtil.getCallingConvention; import java.util.ArrayList; import java.util.List; -import jdk.vm.ci.code.CallingConvention; -import jdk.vm.ci.code.CallingConvention.Type; -import jdk.vm.ci.code.CodeCacheProvider; import jdk.vm.ci.code.CompiledCode; import jdk.vm.ci.code.InstalledCode; import jdk.vm.ci.meta.ConstantReflectionProvider; @@ -182,10 +178,8 @@ speculationLog.collectFailedSpeculations(); } - CodeCacheProvider codeCache = providers.getCodeCache(); - CallingConvention cc = getCallingConvention(codeCache, Type.JavaCallee, graph.method(), false); CompilationResult compilationResult = new CompilationResult(name); - result = compileGraph(graph, cc, graph.method(), providers, backend, graphBuilderSuite, Optimizations, graph.getProfilingInfo(), suites, lirSuites, compilationResult, factory); + result = compileGraph(graph, graph.method(), providers, backend, graphBuilderSuite, Optimizations, graph.getProfilingInfo(), suites, lirSuites, compilationResult, factory); } catch (Throwable e) { throw Debug.handle(e); }