use of com.oracle.truffle.api.frame.FrameDescriptor in project graal by oracle.
the class TruffleExceptionPartialEvaluationTest method createCallerChain.
private static RootTestNode createCallerChain(int framesAbove, int framesBelow) {
FrameDescriptor fd = new FrameDescriptor();
AbstractTestNode calleeNode = new ThrowTruffleExceptionTestNode(-1, true);
RootTestNode calleeRoot = new RootTestNode(fd, "testTruffleException", calleeNode);
for (int i = 0; i < framesAbove; i++) {
AbstractTestNode call = new CallTestNode(Truffle.getRuntime().createCallTarget(calleeRoot));
calleeRoot = new RootTestNode(fd, "testTruffleException", call);
}
AbstractTestNode callerNode = new CallTestNode(Truffle.getRuntime().createCallTarget(calleeRoot));
AbstractTestNode catchNode = new CatchTruffleExceptionTestNode(callerNode);
RootTestNode callerRoot = new RootTestNode(fd, "testTruffleException", catchNode);
for (int i = 0; i < framesBelow; i++) {
AbstractTestNode call = new CallTestNode(Truffle.getRuntime().createCallTarget(callerRoot));
callerRoot = new RootTestNode(fd, "testTruffleException", call);
}
return callerRoot;
}
use of com.oracle.truffle.api.frame.FrameDescriptor in project graal by oracle.
the class InstrumentBranchesPhaseTest method simpleIfTest.
@Test
public void simpleIfTest() {
InstrumentPhase.Instrumentation instrumentation = truffleCompiler.getInstrumentation();
FrameDescriptor descriptor = new FrameDescriptor();
SimpleIfTestNode result = new SimpleIfTestNode(5);
RootTestNode rootNode = new RootTestNode(descriptor, "simpleIfRoot", result);
OptimizedCallTarget target = compileHelper("simpleIfRoot", rootNode, new Object[0]);
Assert.assertTrue(target.isValid());
target.call();
String stackOutput = instrumentation.accessTableToList(getOptions()).get(0);
Assert.assertTrue(stackOutput, stackOutput.contains("org.graalvm.compiler.truffle.test.InstrumentBranchesPhaseTest$SimpleIfTestNode.execute(InstrumentBranchesPhaseTest.java"));
Assert.assertTrue(stackOutput, stackOutput.contains("[bci: 4]\n[0] state = ELSE(if=0#, else=1#)"));
String histogramOutput = instrumentation.accessTableToHistogram().get(0);
Assert.assertEquals(" 0: ********************************************************************************", histogramOutput);
}
use of com.oracle.truffle.api.frame.FrameDescriptor in project graal by oracle.
the class InstrumentBranchesPhaseTest method twoIfsTest.
@Test
public void twoIfsTest() {
InstrumentPhase.Instrumentation instrumentation = truffleCompiler.getInstrumentation();
FrameDescriptor descriptor = new FrameDescriptor();
TwoIfsTestNode result = new TwoIfsTestNode(5, -1);
RootTestNode rootNode = new RootTestNode(descriptor, "twoIfsRoot", result);
OptimizedCallTarget target = compileHelper("twoIfsRoot", rootNode, new Object[0]);
Assert.assertTrue(target.isValid());
// We run this twice to make sure that it comes first in the sorted access list.
target.call();
target.call();
String stackOutput1 = instrumentation.accessTableToList(getOptions()).get(0);
Assert.assertTrue(stackOutput1, stackOutput1.contains("org.graalvm.compiler.truffle.test.InstrumentBranchesPhaseTest$TwoIfsTestNode.execute(InstrumentBranchesPhaseTest.java"));
Assert.assertTrue(stackOutput1, stackOutput1.contains("[bci: 4]\n[0] state = ELSE(if=0#, else=2#)"));
String stackOutput2 = instrumentation.accessTableToList(getOptions()).get(1);
Assert.assertTrue(stackOutput2, stackOutput2.contains("org.graalvm.compiler.truffle.test.InstrumentBranchesPhaseTest$TwoIfsTestNode.execute(InstrumentBranchesPhaseTest.java"));
Assert.assertTrue(stackOutput2, stackOutput2.contains("[bci: 18]\n[1] state = IF(if=2#, else=0#)"));
}
use of com.oracle.truffle.api.frame.FrameDescriptor in project graal by oracle.
the class BailoutPartialEvaluationTest method partialEvaluationConstantBailout2.
@Test(expected = BailoutException.class)
public void partialEvaluationConstantBailout2() {
FrameDescriptor fd = new FrameDescriptor();
RootTestNode rootNode = new RootTestNode(fd, "partialEvaluationConstantBailout2", new AbstractTestNode() {
@Override
public int execute(VirtualFrame frame) {
CompilerAsserts.partialEvaluationConstant(notConstantInt);
return 0;
}
});
compileHelper("partialEvaluationConstantBailout2", rootNode, new Object[] {});
}
use of com.oracle.truffle.api.frame.FrameDescriptor in project graal by oracle.
the class CompilationFinalWeakReferencePartialEvaluationTest method compilationFinalWeakReferenceTest.
/**
* {@link WeakReference} constant-folded but not embedded in compiled code.
*/
@Test
public void compilationFinalWeakReferenceTest() {
String name = "compilationFinalWeakReferenceTest";
FrameDescriptor fd = new FrameDescriptor();
IntSupplier data = generateTestData();
AbstractTestNode result = new CompilationFinalWeakReferenceTestNode(data);
RootTestNode rootNode = new RootTestNode(fd, name, result);
assertPartialEvalEquals("constant42", rootNode);
OptimizedCallTarget callTarget = compileHelper(name, rootNode, new Object[0]);
Assert.assertEquals(42, (int) callTarget.call(new Object[0]));
assert data != null;
WeakReference<IntSupplier> witness = new WeakReference<>(data);
data = null;
boolean cleared = false;
for (int i = 1; i <= 5 && !cleared; i++) {
System.gc();
cleared = witness.get() == null;
}
// Reference not embedded in compiled code
Assert.assertEquals(42, (int) callTarget.call(new Object[0]));
assertTrue(callTarget.isValid());
}
Aggregations