# HG changeset patch # User Doug Simon # Date 1386090131 -3600 # Node ID 7e237378923df5110ba4f94ef66412879b9ac8d8 # Parent 8ea51438445c983292f94522091ba7aa8652980e made the frameContext of a CompilationResultBuilder always non-null and added FrameContext.hasFrame() to determine if a frame is actually generated diff -r 8ea51438445c -r 7e237378923d 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 Tue Dec 03 17:11:06 2013 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBackend.java Tue Dec 03 18:02:11 2013 +0100 @@ -126,6 +126,10 @@ this.omitFrame = omitFrame; } + public boolean hasFrame() { + return !omitFrame; + } + @Override public void enter(CompilationResultBuilder crb) { FrameMap frameMap = crb.frameMap; @@ -283,7 +287,7 @@ public void emitCodeSuffix(ResolvedJavaMethod installedCodeOwner, CompilationResultBuilder crb, LIRGenerator lirGen, AMD64MacroAssembler asm, FrameMap frameMap) { HotSpotProviders providers = getProviders(); HotSpotFrameContext frameContext = (HotSpotFrameContext) crb.frameContext; - if (frameContext != null && !frameContext.isStub) { + if (!frameContext.isStub) { HotSpotForeignCallsProvider foreignCalls = providers.getForeignCalls(); crb.recordMark(Marks.MARK_EXCEPTION_HANDLER_ENTRY); AMD64Call.directCall(crb, asm, foreignCalls.lookupForeignCall(EXCEPTION_HANDLER), null, false, null); diff -r 8ea51438445c -r 7e237378923d graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotEpilogueOp.java --- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotEpilogueOp.java Tue Dec 03 17:11:06 2013 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotEpilogueOp.java Tue Dec 03 18:02:11 2013 +0100 @@ -57,8 +57,6 @@ masm.movq(rbp, framePointer); } } - if (crb.frameContext != null) { - crb.frameContext.leave(crb); - } + crb.frameContext.leave(crb); } } diff -r 8ea51438445c -r 7e237378923d graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotReturnOp.java --- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotReturnOp.java Tue Dec 03 17:11:06 2013 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotReturnOp.java Tue Dec 03 18:02:11 2013 +0100 @@ -51,7 +51,7 @@ @Override public void emitCode(CompilationResultBuilder crb, AMD64MacroAssembler masm) { leaveFrameAndRestoreRbp(crb, masm); - if (!isStub && (crb.frameContext != null || !OptEliminateSafepoints.getValue())) { + if (!isStub && (crb.frameContext.hasFrame() || !OptEliminateSafepoints.getValue())) { AMD64HotSpotSafepointOp.emitCode(crb, masm, runtime().getConfig(), true, null, scratchForSafepointOnReturn); } masm.ret(0); diff -r 8ea51438445c -r 7e237378923d graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/HSAILHotSpotBackend.java --- a/graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/HSAILHotSpotBackend.java Tue Dec 03 17:11:06 2013 +0100 +++ b/graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/HSAILHotSpotBackend.java Tue Dec 03 18:02:11 2013 +0100 @@ -94,6 +94,10 @@ class HotSpotFrameContext implements FrameContext { + public boolean hasFrame() { + return true; + } + @Override public void enter(CompilationResultBuilder crb) { Debug.log("Nothing to do here"); diff -r 8ea51438445c -r 7e237378923d graal/com.oracle.graal.hotspot.ptx/src/com/oracle/graal/hotspot/ptx/PTXHotSpotBackend.java --- a/graal/com.oracle.graal.hotspot.ptx/src/com/oracle/graal/hotspot/ptx/PTXHotSpotBackend.java Tue Dec 03 17:11:06 2013 +0100 +++ b/graal/com.oracle.graal.hotspot.ptx/src/com/oracle/graal/hotspot/ptx/PTXHotSpotBackend.java Tue Dec 03 18:02:11 2013 +0100 @@ -164,6 +164,10 @@ @Override public void leave(CompilationResultBuilder crb) { } + + public boolean hasFrame() { + return true; + } } @Override diff -r 8ea51438445c -r 7e237378923d 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 Tue Dec 03 17:11:06 2013 +0100 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotBackend.java Tue Dec 03 18:02:11 2013 +0100 @@ -115,6 +115,10 @@ this.isStub = isStub; } + public boolean hasFrame() { + return true; + } + @Override public void enter(CompilationResultBuilder crb) { final int frameSize = crb.frameMap.totalFrameSize(); @@ -207,7 +211,7 @@ HotSpotFrameContext frameContext = (HotSpotFrameContext) crb.frameContext; HotSpotForeignCallsProvider foreignCalls = getProviders().getForeignCalls(); - if (frameContext != null && !frameContext.isStub) { + if (!frameContext.isStub) { crb.recordMark(Marks.MARK_EXCEPTION_HANDLER_ENTRY); SPARCCall.directCall(crb, masm, foreignCalls.lookupForeignCall(EXCEPTION_HANDLER), null, false, null); crb.recordMark(Marks.MARK_DEOPT_HANDLER_ENTRY); diff -r 8ea51438445c -r 7e237378923d graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotEpilogueOp.java --- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotEpilogueOp.java Tue Dec 03 17:11:06 2013 +0100 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotEpilogueOp.java Tue Dec 03 18:02:11 2013 +0100 @@ -31,8 +31,6 @@ abstract class SPARCHotSpotEpilogueOp extends SPARCLIRInstruction { protected void leaveFrame(CompilationResultBuilder crb) { - if (crb.frameContext != null) { - crb.frameContext.leave(crb); - } + crb.frameContext.leave(crb); } } diff -r 8ea51438445c -r 7e237378923d graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotReturnOp.java --- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotReturnOp.java Tue Dec 03 17:11:06 2013 +0100 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotReturnOp.java Tue Dec 03 18:02:11 2013 +0100 @@ -49,7 +49,7 @@ @Override public void emitCode(CompilationResultBuilder crb, SPARCMacroAssembler masm) { - if (!isStub && (crb.frameContext != null || !OptEliminateSafepoints.getValue())) { + if (!isStub && (crb.frameContext.hasFrame() || !OptEliminateSafepoints.getValue())) { // Using the same scratch register as LIR_Assembler::return_op // in c1_LIRAssembler_sparc.cpp SPARCHotSpotSafepointOp.emitCode(crb, masm, runtime().getConfig(), true, null, SPARC.l0); diff -r 8ea51438445c -r 7e237378923d graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64ControlFlow.java --- a/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64ControlFlow.java Tue Dec 03 17:11:06 2013 +0100 +++ b/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64ControlFlow.java Tue Dec 03 18:02:11 2013 +0100 @@ -51,9 +51,7 @@ @Override public void emitCode(CompilationResultBuilder crb, AMD64MacroAssembler masm) { - if (crb.frameContext != null) { - crb.frameContext.leave(crb); - } + crb.frameContext.leave(crb); masm.ret(0); } } diff -r 8ea51438445c -r 7e237378923d graal/com.oracle.graal.lir.hsail/src/com/oracle/graal/lir/hsail/HSAILControlFlow.java --- a/graal/com.oracle.graal.lir.hsail/src/com/oracle/graal/lir/hsail/HSAILControlFlow.java Tue Dec 03 17:11:06 2013 +0100 +++ b/graal/com.oracle.graal.lir.hsail/src/com/oracle/graal/lir/hsail/HSAILControlFlow.java Tue Dec 03 18:02:11 2013 +0100 @@ -137,9 +137,7 @@ @Override public void emitCode(CompilationResultBuilder crb, HSAILAssembler masm) { - if (crb.frameContext != null) { - crb.frameContext.leave(crb); - } + crb.frameContext.leave(crb); masm.exit(); } } diff -r 8ea51438445c -r 7e237378923d graal/com.oracle.graal.lir.ptx/src/com/oracle/graal/lir/ptx/PTXControlFlow.java --- a/graal/com.oracle.graal.lir.ptx/src/com/oracle/graal/lir/ptx/PTXControlFlow.java Tue Dec 03 17:11:06 2013 +0100 +++ b/graal/com.oracle.graal.lir.ptx/src/com/oracle/graal/lir/ptx/PTXControlFlow.java Tue Dec 03 18:02:11 2013 +0100 @@ -50,9 +50,7 @@ @Override public void emitCode(CompilationResultBuilder crb, PTXMacroAssembler masm) { - if (crb.frameContext != null) { - crb.frameContext.leave(crb); - } + crb.frameContext.leave(crb); masm.exit(); } } @@ -64,9 +62,7 @@ @Override public void emitCode(CompilationResultBuilder crb, PTXMacroAssembler masm) { - if (crb.frameContext != null) { - crb.frameContext.leave(crb); - } + crb.frameContext.leave(crb); masm.ret(); } } diff -r 8ea51438445c -r 7e237378923d graal/com.oracle.graal.lir/src/com/oracle/graal/lir/LIR.java --- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/LIR.java Tue Dec 03 17:11:06 2013 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/LIR.java Tue Dec 03 18:02:11 2013 +0100 @@ -137,9 +137,7 @@ } public void emitCode(CompilationResultBuilder crb) { - if (crb.frameContext != null) { - crb.frameContext.enter(crb); - } + crb.frameContext.enter(crb); for (Block b : codeEmittingOrder()) { emitBlock(crb, b); diff -r 8ea51438445c -r 7e237378923d graal/com.oracle.graal.lir/src/com/oracle/graal/lir/asm/CompilationResultBuilder.java --- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/asm/CompilationResultBuilder.java Tue Dec 03 17:11:06 2013 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/asm/CompilationResultBuilder.java Tue Dec 03 18:02:11 2013 +0100 @@ -74,6 +74,7 @@ this.asm = asm; this.compilationResult = compilationResult; this.frameContext = frameContext; + assert frameContext != null; } public void setFrameSize(int frameSize) { diff -r 8ea51438445c -r 7e237378923d graal/com.oracle.graal.lir/src/com/oracle/graal/lir/asm/FrameContext.java --- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/asm/FrameContext.java Tue Dec 03 17:11:06 2013 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/asm/FrameContext.java Tue Dec 03 18:02:11 2013 +0100 @@ -46,4 +46,9 @@ * */ void leave(CompilationResultBuilder crb); + + /** + * Determines if a frame is set up and torn down by this object. + */ + boolean hasFrame(); }