use of org.jikesrvm.compilers.opt.OptOptions in project JikesRVM by JikesRVM.
the class GenerationContextTest method noNullCheckGuardsCanBeCreatedAfterCloseWasCalled.
@Test(expected = NullPointerException.class)
public void noNullCheckGuardsCanBeCreatedAfterCloseWasCalled() throws Exception {
NormalMethod nm = TestingTools.getNormalMethod(MethodsForTests.class, "emptyInstanceMethodWithoutAnnotations");
OptOptions opts = new OptOptions();
GenerationContext gc = new GenerationContext(nm, null, null, opts, null);
RegisterOperand thisLocal = gc.makeLocal(0, nm.getDeclaringClass().getTypeRef());
Register thisReg = thisLocal.getRegister();
gc.close();
gc.makeNullCheckGuard(thisReg);
}
use of org.jikesrvm.compilers.opt.OptOptions in project JikesRVM by JikesRVM.
the class GenerationContextTest method methodsWithReturnValueHaveReturnInstructionInEpilogue.
@Test
public void methodsWithReturnValueHaveReturnInstructionInEpilogue() throws Exception {
NormalMethod nm = getNormalMethodForTest("staticMethodReturningLongMaxValue");
CompiledMethod cm = new OptCompiledMethod(-1, nm);
OptOptions opts = new OptOptions();
InlineOracle io = new DefaultInlineOracle();
GenerationContext gc = new GenerationContext(nm, null, cm, opts, io);
InlineSequence inlineSequence = new InlineSequence(nm);
assertThatInlineSequenceWasSetCorrectly(gc, inlineSequence);
assertThatNumberOfParametersIs(gc, 0);
BasicBlock prologue = gc.getPrologue();
assertThatPrologueBlockIsSetupCorrectly(gc, inlineSequence, prologue);
assertThatFirstInstructionInPrologueIsPrologue(inlineSequence, prologue);
assertThatBlockOnlyHasOneRealInstruction(prologue);
BasicBlock epilogue = gc.getEpilogue();
assertThatEpilogueBlockIsSetupCorrectly(gc, inlineSequence, epilogue);
assertThatLastInstructionInEpilogueIsReturn(gc, epilogue);
RegisterOperand returnValue = Return.getVal(epilogue.lastRealInstruction()).asRegister();
assertThat(returnValue.getType(), is(TypeReference.Long));
assertThatExitBlockIsSetCorrectly(gc);
assertThatDataIsSavedCorrectly(nm, cm, io, gc);
assertThat(gc.getResultReg().isLong(), is(true));
assertThatGCHasNoExceptionHandlers(gc);
assertThatRegisterPoolExists(gc);
assertThatChecksWontBeSkipped(gc);
}
use of org.jikesrvm.compilers.opt.OptOptions in project JikesRVM by JikesRVM.
the class GenerationContextTest method specializedParametersAreNotSanityChecked.
@Test
public void specializedParametersAreNotSanityChecked() throws Exception {
Class<?>[] argumentTypes = { Object.class };
TypeReference[] specializedArgumentTypes = {};
NormalMethod nm = getNormalMethodForTest("emptyStaticMethodWithObjectParam", argumentTypes);
CompiledMethod cm = new OptCompiledMethod(-1, nm);
OptOptions opts = new OptOptions();
InlineOracle io = new DefaultInlineOracle();
GenerationContext gc = new GenerationContext(nm, specializedArgumentTypes, cm, opts, io);
assertThatNumberOfParametersIs(gc, 0);
}
use of org.jikesrvm.compilers.opt.OptOptions in project JikesRVM by JikesRVM.
the class GenerationContextTest method methodIsSelectedForDebuggingWithMethodToPrintReturnsTrueIfOutermostParentMatches.
@Test
public void methodIsSelectedForDebuggingWithMethodToPrintReturnsTrueIfOutermostParentMatches() throws Exception {
String methodName = "emptyStaticMethodWithoutAnnotations";
NormalMethod nm = getNormalMethodForTest(methodName);
CompiledMethod cm = new OptCompiledMethod(-1, nm);
OptOptions opts = buildOptionsWithMethodToPrintOptionSet(methodName);
InlineOracle io = new DefaultInlineOracle();
GenerationContext gc = new GenerationContext(nm, null, cm, opts, io);
ExceptionHandlerBasicBlockBag ebag = getMockEbag();
NormalMethod callee = getNormalMethodForTest("emptyStaticMethodWithNoCheckStoreAnnotation");
Instruction noCheckStoreInstr = buildCallInstructionForStaticMethodWithoutReturn(callee, nm);
GenerationContext nextInnerContext = gc.createChildContext(ebag, callee, noCheckStoreInstr);
NormalMethod nextInnerCallee = getNormalMethodForTest("emptyStaticMethodWithNoNullCheckAnnotation");
Instruction noNullCheckInstr = buildCallInstructionForStaticMethodWithoutReturn(callee, nextInnerCallee);
GenerationContext innermostContext = nextInnerContext.createChildContext(ebag, nextInnerCallee, noNullCheckInstr);
assertThat(innermostContext.methodIsSelectedForDebuggingWithMethodToPrint(), is(true));
}
use of org.jikesrvm.compilers.opt.OptOptions in project JikesRVM by JikesRVM.
the class GenerationContextTest method resyncDeletesNullCheckGuardsThatMapToUnusedRegisters.
@Test
public void resyncDeletesNullCheckGuardsThatMapToUnusedRegisters() throws Exception {
NormalMethod nm = TestingTools.getNormalMethod(MethodsForTests.class, "emptyInstanceMethodWithoutAnnotations");
OptOptions opts = new OptOptions();
GenerationContext gc = new GenerationContext(nm, null, null, opts, null);
RegisterOperand thisLocal = gc.makeLocal(0, nm.getDeclaringClass().getTypeRef());
Register thisReg = thisLocal.getRegister();
RegisterOperand thisNullCheckGuard = gc.makeNullCheckGuard(thisReg);
assertNotNull(thisNullCheckGuard);
gc.getTemps().removeRegister(thisReg);
gc.resync();
RegisterOperand newNullCheckGuard = gc.makeNullCheckGuard(thisReg);
assertFalse(newNullCheckGuard.sameRegisterPropertiesAs(thisNullCheckGuard));
}
Aggregations