Mercurial > hg > graal-compiler
changeset 22956:26618cb3ff27
Fixed deopt stubs after JVMCI changes to the uncommon_trap/fetch_unroll_info signature
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotLIRGenerator.java Fri Nov 06 12:14:51 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotLIRGenerator.java Fri Nov 06 12:38:19 2015 +0100 @@ -411,12 +411,13 @@ return result; } - public Value emitUncommonTrapCall(Value trapRequest, SaveRegistersOp saveRegisterOp) { + @Override + public Value emitUncommonTrapCall(Value trapRequest, Value mode, SaveRegistersOp saveRegisterOp) { ForeignCallLinkage linkage = getForeignCalls().lookupForeignCall(UNCOMMON_TRAP); Register thread = getProviders().getRegisters().getThreadRegister(); append(new AMD64HotSpotCRuntimeCallPrologueOp(config.threadLastJavaSpOffset(), thread)); - Variable result = super.emitForeignCall(linkage, null, thread.asValue(LIRKind.value(AMD64Kind.QWORD)), trapRequest); + Variable result = super.emitForeignCall(linkage, null, thread.asValue(LIRKind.value(AMD64Kind.QWORD)), trapRequest, mode); append(new AMD64HotSpotCRuntimeCallEpilogueOp(config.threadLastJavaSpOffset(), config.threadLastJavaFpOffset(), thread)); Map<LIRFrameState, SaveRegistersOp> calleeSaveInfo = ((AMD64HotSpotLIRGenerationResult) getResult()).getCalleeSaveInfo(); @@ -426,12 +427,13 @@ return result; } - public Value emitDeoptimizationFetchUnrollInfoCall(SaveRegistersOp saveRegisterOp) { + @Override + public Value emitDeoptimizationFetchUnrollInfoCall(Value mode, SaveRegistersOp saveRegisterOp) { ForeignCallLinkage linkage = getForeignCalls().lookupForeignCall(FETCH_UNROLL_INFO); Register thread = getProviders().getRegisters().getThreadRegister(); append(new AMD64HotSpotCRuntimeCallPrologueOp(config.threadLastJavaSpOffset(), thread)); - Variable result = super.emitForeignCall(linkage, null, thread.asValue(LIRKind.value(AMD64Kind.QWORD))); + Variable result = super.emitForeignCall(linkage, null, thread.asValue(LIRKind.value(AMD64Kind.QWORD)), mode); append(new AMD64HotSpotCRuntimeCallEpilogueOp(config.threadLastJavaSpOffset(), config.threadLastJavaFpOffset(), thread)); Map<LIRFrameState, SaveRegistersOp> calleeSaveInfo = ((AMD64HotSpotLIRGenerationResult) getResult()).getCalleeSaveInfo();
--- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotLIRGenerator.java Fri Nov 06 12:14:51 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotLIRGenerator.java Fri Nov 06 12:38:19 2015 +0100 @@ -438,7 +438,8 @@ append(new SPARCHotSpotPushInterpreterFrameOp(frameSizeVariable, framePcVariable, senderSpVariable, initialInfoVariable)); } - public Value emitUncommonTrapCall(Value trapRequest, SaveRegistersOp saveRegisterOp) { + @Override + public Value emitUncommonTrapCall(Value trapRequest, Value mode, SaveRegistersOp saveRegisterOp) { ForeignCallLinkage linkage = getForeignCalls().lookupForeignCall(UNCOMMON_TRAP); Register threadRegister = getProviders().getRegisters().getThreadRegister(); @@ -446,7 +447,7 @@ Register stackPointerRegister = getProviders().getRegisters().getStackPointerRegister(); Variable spScratch = newVariable(LIRKind.value(target().arch.getWordKind())); append(new SPARCHotSpotCRuntimeCallPrologueOp(config.threadLastJavaSpOffset(), threadRegister, stackPointerRegister, threadTemp, spScratch)); - Variable result = super.emitForeignCall(linkage, null, threadRegister.asValue(LIRKind.value(target().arch.getWordKind())), trapRequest); + Variable result = super.emitForeignCall(linkage, null, threadRegister.asValue(LIRKind.value(target().arch.getWordKind())), trapRequest, mode); append(new SPARCHotSpotCRuntimeCallEpilogueOp(config.threadLastJavaSpOffset(), config.threadLastJavaPcOffset(), config.threadJavaFrameAnchorFlagsOffset(), threadRegister, threadTemp)); Map<LIRFrameState, SaveRegistersOp> calleeSaveInfo = ((SPARCHotSpotLIRGenerationResult) getResult()).getCalleeSaveInfo(); @@ -458,7 +459,7 @@ } @Override - public Value emitDeoptimizationFetchUnrollInfoCall(SaveRegistersOp saveRegisterOp) { + public Value emitDeoptimizationFetchUnrollInfoCall(Value mode, SaveRegistersOp saveRegisterOp) { ForeignCallLinkage linkage = getForeignCalls().lookupForeignCall(FETCH_UNROLL_INFO); Register threadRegister = getProviders().getRegisters().getThreadRegister(); @@ -466,7 +467,7 @@ Register stackPointerRegister = getProviders().getRegisters().getStackPointerRegister(); Variable spScratch = newVariable(LIRKind.value(target().arch.getWordKind())); append(new SPARCHotSpotCRuntimeCallPrologueOp(config.threadLastJavaSpOffset(), threadRegister, stackPointerRegister, threadTemp, spScratch)); - Variable result = super.emitForeignCall(linkage, null, threadRegister.asValue(LIRKind.value(target().arch.getWordKind()))); + Variable result = super.emitForeignCall(linkage, null, threadRegister.asValue(LIRKind.value(target().arch.getWordKind())), mode); append(new SPARCHotSpotCRuntimeCallEpilogueOp(config.threadLastJavaSpOffset(), config.threadLastJavaPcOffset(), config.threadJavaFrameAnchorFlagsOffset(), threadRegister, threadTemp)); Map<LIRFrameState, SaveRegistersOp> calleeSaveInfo = ((SPARCHotSpotLIRGenerationResult) getResult()).getCalleeSaveInfo();
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotBackend.java Fri Nov 06 12:14:51 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotBackend.java Fri Nov 06 12:38:19 2015 +0100 @@ -114,7 +114,7 @@ /** * @see DeoptimizationFetchUnrollInfoCallNode */ - public static final ForeignCallDescriptor FETCH_UNROLL_INFO = new ForeignCallDescriptor("fetchUnrollInfo", Word.class, long.class); + public static final ForeignCallDescriptor FETCH_UNROLL_INFO = new ForeignCallDescriptor("fetchUnrollInfo", Word.class, long.class, int.class); /** * @see DeoptimizationStub#unpackFrames(ForeignCallDescriptor, Word, int) @@ -164,7 +164,7 @@ /** * @see UncommonTrapCallNode */ - public static final ForeignCallDescriptor UNCOMMON_TRAP = new ForeignCallDescriptor("uncommonTrap", Word.class, Word.class, int.class); + public static final ForeignCallDescriptor UNCOMMON_TRAP = new ForeignCallDescriptor("uncommonTrap", Word.class, Word.class, int.class, int.class); public HotSpotBackend(HotSpotGraalRuntimeProvider runtime, HotSpotProviders providers) { super(providers);
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotLIRGenerator.java Fri Nov 06 12:14:51 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotLIRGenerator.java Fri Nov 06 12:38:19 2015 +0100 @@ -121,20 +121,22 @@ * Emits code for a {@link UncommonTrapCallNode}. * * @param trapRequest + * @param mode * @param saveRegisterOp * @return a {@code Deoptimization::UnrollBlock} pointer */ - default Value emitUncommonTrapCall(Value trapRequest, SaveRegistersOp saveRegisterOp) { + default Value emitUncommonTrapCall(Value trapRequest, Value mode, SaveRegistersOp saveRegisterOp) { throw JVMCIError.unimplemented(); } /** * Emits code for a {@link DeoptimizationFetchUnrollInfoCallNode}. * + * @param mode * @param saveRegisterOp * @return a {@code Deoptimization::UnrollBlock} pointer */ - default Value emitDeoptimizationFetchUnrollInfoCall(SaveRegistersOp saveRegisterOp) { + default Value emitDeoptimizationFetchUnrollInfoCall(Value mode, SaveRegistersOp saveRegisterOp) { throw JVMCIError.unimplemented(); }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/DeoptimizationFetchUnrollInfoCallNode.java Fri Nov 06 12:14:51 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/DeoptimizationFetchUnrollInfoCallNode.java Fri Nov 06 12:38:19 2015 +0100 @@ -49,11 +49,13 @@ public static final NodeClass<DeoptimizationFetchUnrollInfoCallNode> TYPE = NodeClass.create(DeoptimizationFetchUnrollInfoCallNode.class); @Input SaveAllRegistersNode registerSaver; + @Input ValueNode mode; protected final ForeignCallsProvider foreignCalls; - public DeoptimizationFetchUnrollInfoCallNode(@InjectedNodeParameter ForeignCallsProvider foreignCalls, ValueNode registerSaver) { + public DeoptimizationFetchUnrollInfoCallNode(@InjectedNodeParameter ForeignCallsProvider foreignCalls, ValueNode registerSaver, ValueNode mode) { super(TYPE, StampFactory.forKind(JavaKind.fromJavaClass(FETCH_UNROLL_INFO.getResultType()))); this.registerSaver = (SaveAllRegistersNode) registerSaver; + this.mode = mode; this.foreignCalls = foreignCalls; } @@ -66,12 +68,20 @@ return registerSaver.getSaveRegistersOp(); } + /** + * Returns the node representing the exec_mode/unpack_kind used during this fetch_unroll_info + * call. + */ + public ValueNode getMode() { + return mode; + } + @Override public void generate(NodeLIRBuilderTool gen) { - Value result = ((HotSpotLIRGenerator) gen.getLIRGeneratorTool()).emitDeoptimizationFetchUnrollInfoCall(getSaveRegistersOp()); + Value result = ((HotSpotLIRGenerator) gen.getLIRGeneratorTool()).emitDeoptimizationFetchUnrollInfoCall(gen.operand(getMode()), getSaveRegistersOp()); gen.setResult(this, result); } @NodeIntrinsic - public static native Word fetchUnrollInfo(long registerSaver); + public static native Word fetchUnrollInfo(long registerSaver, int mode); }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/UncommonTrapCallNode.java Fri Nov 06 12:14:51 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/UncommonTrapCallNode.java Fri Nov 06 12:38:19 2015 +0100 @@ -23,9 +23,6 @@ package com.oracle.graal.hotspot.nodes; import static com.oracle.graal.hotspot.HotSpotBackend.UNCOMMON_TRAP; -import jdk.vm.ci.meta.JavaKind; -import jdk.vm.ci.meta.LocationIdentity; -import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.spi.ForeignCallsProvider; import com.oracle.graal.compiler.common.type.StampFactory; @@ -41,6 +38,10 @@ import com.oracle.graal.nodes.spi.NodeLIRBuilderTool; import com.oracle.graal.word.Word; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LocationIdentity; +import jdk.vm.ci.meta.Value; + /** * A call to the runtime code implementing the uncommon trap logic. */ @@ -49,12 +50,14 @@ public static final NodeClass<UncommonTrapCallNode> TYPE = NodeClass.create(UncommonTrapCallNode.class); @Input ValueNode trapRequest; + @Input ValueNode mode; @Input SaveAllRegistersNode registerSaver; protected final ForeignCallsProvider foreignCalls; - public UncommonTrapCallNode(@InjectedNodeParameter ForeignCallsProvider foreignCalls, ValueNode registerSaver, ValueNode trapRequest) { + public UncommonTrapCallNode(@InjectedNodeParameter ForeignCallsProvider foreignCalls, ValueNode registerSaver, ValueNode trapRequest, ValueNode mode) { super(TYPE, StampFactory.forKind(JavaKind.fromJavaClass(UNCOMMON_TRAP.getResultType()))); this.trapRequest = trapRequest; + this.mode = mode; this.registerSaver = (SaveAllRegistersNode) registerSaver; this.foreignCalls = foreignCalls; } @@ -68,13 +71,22 @@ return registerSaver.getSaveRegistersOp(); } + /** + * Returns the node representing the exec_mode/unpack_kind used during this fetch_unroll_info + * call. + */ + public ValueNode getMode() { + return mode; + } + @Override public void generate(NodeLIRBuilderTool gen) { Value trapRequestValue = gen.operand(trapRequest); - Value result = ((HotSpotLIRGenerator) gen.getLIRGeneratorTool()).emitUncommonTrapCall(trapRequestValue, getSaveRegistersOp()); + Value modeValue = gen.operand(getMode()); + Value result = ((HotSpotLIRGenerator) gen.getLIRGeneratorTool()).emitUncommonTrapCall(trapRequestValue, modeValue, getSaveRegistersOp()); gen.setResult(this, result); } @NodeIntrinsic - public static native Word uncommonTrap(long registerSaver, int trapRequest); + public static native Word uncommonTrap(long registerSaver, int trapRequest, int mode); }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/DeoptimizationStub.java Fri Nov 06 12:14:51 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/DeoptimizationStub.java Fri Nov 06 12:38:19 2015 +0100 @@ -127,12 +127,12 @@ final Word thread = registerAsWord(threadRegister); final long registerSaver = SaveAllRegistersNode.saveAllRegisters(); - final Word unrollBlock = fetchUnrollInfo(registerSaver); + final Word unrollBlock = fetchUnrollInfo(registerSaver, deoptimizationUnpackDeopt()); - deoptimizationCommon(stackPointerRegister, thread, registerSaver, unrollBlock, deoptimizationUnpackDeopt()); + deoptimizationCommon(stackPointerRegister, thread, registerSaver, unrollBlock); } - static void deoptimizationCommon(Register stackPointerRegister, final Word thread, final long registerSaver, final Word unrollBlock, final int mode) { + static void deoptimizationCommon(Register stackPointerRegister, final Word thread, final long registerSaver, final Word unrollBlock) { // Pop all the frames we must move/replace. // // Frame picture (youngest to oldest) @@ -205,6 +205,7 @@ final Word senderFp = initialInfo; EnterUnpackFramesStackFrameNode.enterUnpackFramesStackFrame(framePc, senderSp, senderFp, registerSaver); + final int mode = unrollBlock.readInt(deoptimizationUnrollBlockUnpackKindOffset()); unpackFrames(UNPACK_FRAMES, thread, mode); LeaveUnpackFramesStackFrameNode.leaveUnpackFramesStackFrame(registerSaver); @@ -265,6 +266,11 @@ } @Fold + private static int deoptimizationUnrollBlockUnpackKindOffset() { + return config().deoptimizationUnrollBlockUnpackKindOffset; + } + + @Fold private static int deoptimizationUnrollBlockFrameSizesOffset() { return config().deoptimizationUnrollBlockFrameSizesOffset; }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/UncommonTrapStub.java Fri Nov 06 12:14:51 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/UncommonTrapStub.java Fri Nov 06 12:38:19 2015 +0100 @@ -134,9 +134,9 @@ final int actionAndReason = readPendingDeoptimization(thread); writePendingDeoptimization(thread, -1); - final Word unrollBlock = UncommonTrapCallNode.uncommonTrap(registerSaver, actionAndReason); + final Word unrollBlock = UncommonTrapCallNode.uncommonTrap(registerSaver, actionAndReason, deoptimizationUnpackUncommonTrap()); - DeoptimizationStub.deoptimizationCommon(stackPointerRegister, thread, registerSaver, unrollBlock, deoptimizationUnpackUncommonTrap()); + DeoptimizationStub.deoptimizationCommon(stackPointerRegister, thread, registerSaver, unrollBlock); } /**
--- a/mx.graal/suite.py Fri Nov 06 12:14:51 2015 +0100 +++ b/mx.graal/suite.py Fri Nov 06 12:38:19 2015 +0100 @@ -39,7 +39,7 @@ { "name" : "jvmci", "optional" : "true", - "version" : "eada427470a3aa671dd7f4fdce5197b60d1e4351", + "version" : "9860aa60385f94d935ea1cc7802a99b0f2f68171", "urls" : [ {"url" : "http://lafo.ssw.uni-linz.ac.at/hg/graal-jvmci-8", "kind" : "hg"}, {"url" : "https://curio.ssw.jku.at/nexus/content/repositories/snapshots", "kind" : "binary"},