Search in sources :

Example 1 with ConstantTestNode

use of org.graalvm.compiler.truffle.test.nodes.ConstantTestNode in project graal by oracle.

the class OptimizedCallTargetTest method testRewriteAssumption.

@Test
public void testRewriteAssumption() {
    String testName = "testRewriteAssumption";
    assertTrue("test only works with inlining enabled", TruffleCompilerOptions.getValue(TruffleFunctionInlining));
    try (TruffleOptionsOverrideScope s = TruffleCompilerOptions.overrideOptions(TruffleCompilerOptions.TruffleCompilationThreshold, 20)) {
        final int compilationThreshold = TruffleCompilerOptions.getValue(TruffleCompilationThreshold);
        assertTrue(compilationThreshold >= 2);
        OptimizedCallTarget innermostCallTarget = (OptimizedCallTarget) runtime.createCallTarget(new RootTestNode(new FrameDescriptor(), testName + 0, new AbstractTestNode() {

            @Child
            private AbstractTestNode child = new ConstantTestNode(42);

            @Child
            private AbstractTestNode dummy = new ConstantTestNode(17);

            @Override
            public int execute(VirtualFrame frame) {
                int k = (int) frame.getArguments()[0];
                if (k > compilationThreshold) {
                    CompilerDirectives.transferToInterpreter();
                    dummy.replace(new ConstantTestNode(k));
                }
                return child.execute(frame);
            }
        }));
        OptimizedCallTarget ct = innermostCallTarget;
        ct = (OptimizedCallTarget) runtime.createCallTarget(new RootTestNode(new FrameDescriptor(), testName + 1, new CallTestNode(ct)));
        ct = (OptimizedCallTarget) runtime.createCallTarget(new RootTestNode(new FrameDescriptor(), testName + 2, new CallTestNode(ct)));
        final OptimizedCallTarget outermostCallTarget = ct;
        assertNull("assumption is initially null", getRewriteAssumption(innermostCallTarget));
        IntStream.range(0, compilationThreshold / 2).parallel().forEach(k -> {
            assertEquals(42, outermostCallTarget.call(k));
            assertNull("assumption stays null in the interpreter", getRewriteAssumption(innermostCallTarget));
        });
        outermostCallTarget.compile();
        assertCompiled(outermostCallTarget);
        Assumption firstRewriteAssumption = getRewriteAssumption(innermostCallTarget);
        assertNotNull("assumption must not be null after compilation", firstRewriteAssumption);
        assertTrue(firstRewriteAssumption.isValid());
        List<Assumption> rewriteAssumptions = IntStream.range(0, 2 * compilationThreshold).parallel().mapToObj(k -> {
            assertEquals(42, outermostCallTarget.call(k));
            Assumption rewriteAssumptionAfter = getRewriteAssumption(innermostCallTarget);
            assertNotNull("assumption must not be null after compilation", rewriteAssumptionAfter);
            return rewriteAssumptionAfter;
        }).collect(Collectors.toList());
        Assumption finalRewriteAssumption = getRewriteAssumption(innermostCallTarget);
        assertNotNull("assumption must not be null after compilation", finalRewriteAssumption);
        assertNotSame(firstRewriteAssumption, finalRewriteAssumption);
        assertFalse(firstRewriteAssumption.isValid());
        assertTrue(finalRewriteAssumption.isValid());
        assertFalse(rewriteAssumptions.stream().filter(a -> a != finalRewriteAssumption).anyMatch(Assumption::isValid));
    }
}
Also used : FrameDescriptor(com.oracle.truffle.api.frame.FrameDescriptor) IntStream(java.util.stream.IntStream) AbstractTestNode(org.graalvm.compiler.truffle.test.nodes.AbstractTestNode) DirectCallNode(com.oracle.truffle.api.nodes.DirectCallNode) ConstantTestNode(org.graalvm.compiler.truffle.test.nodes.ConstantTestNode) Assert.assertNotSame(org.junit.Assert.assertNotSame) TruffleCompileOnly(org.graalvm.compiler.truffle.common.TruffleCompilerOptions.TruffleCompileOnly) TruffleOptionsOverrideScope(org.graalvm.compiler.truffle.common.TruffleCompilerOptions.TruffleOptionsOverrideScope) FrameDescriptor(com.oracle.truffle.api.frame.FrameDescriptor) CompilerDirectives(com.oracle.truffle.api.CompilerDirectives) RootTestNode(org.graalvm.compiler.truffle.test.nodes.RootTestNode) LoopNode(com.oracle.truffle.api.nodes.LoopNode) RootNode(com.oracle.truffle.api.nodes.RootNode) TruffleReplaceReprofileCount(org.graalvm.compiler.truffle.common.TruffleCompilerOptions.TruffleReplaceReprofileCount) TruffleOSRCompilationThreshold(org.graalvm.compiler.truffle.common.TruffleCompilerOptions.TruffleOSRCompilationThreshold) RepeatingNode(com.oracle.truffle.api.nodes.RepeatingNode) Node(com.oracle.truffle.api.nodes.Node) TruffleFunctionInlining(org.graalvm.compiler.truffle.common.TruffleCompilerOptions.TruffleFunctionInlining) Assert.assertNotNull(org.junit.Assert.assertNotNull) Assert.assertTrue(org.junit.Assert.assertTrue) Assumption(com.oracle.truffle.api.Assumption) Test(org.junit.Test) VirtualFrame(com.oracle.truffle.api.frame.VirtualFrame) OptimizedCallTarget(org.graalvm.compiler.truffle.runtime.OptimizedCallTarget) CallTarget(com.oracle.truffle.api.CallTarget) Field(java.lang.reflect.Field) Collectors(java.util.stream.Collectors) GraalTruffleRuntime(org.graalvm.compiler.truffle.runtime.GraalTruffleRuntime) List(java.util.List) Assert.assertNull(org.junit.Assert.assertNull) Ignore(org.junit.Ignore) Assert.assertFalse(org.junit.Assert.assertFalse) OptimizedOSRLoopNode(org.graalvm.compiler.truffle.runtime.OptimizedOSRLoopNode) TruffleCompilerOptions(org.graalvm.compiler.truffle.common.TruffleCompilerOptions) Truffle(com.oracle.truffle.api.Truffle) TruffleCompilationThreshold(org.graalvm.compiler.truffle.common.TruffleCompilerOptions.TruffleCompilationThreshold) Assert(org.junit.Assert) Assert.assertEquals(org.junit.Assert.assertEquals) Util(org.graalvm.compiler.core.common.util.Util) AbstractTestNode(org.graalvm.compiler.truffle.test.nodes.AbstractTestNode) OptimizedCallTarget(org.graalvm.compiler.truffle.runtime.OptimizedCallTarget) Assumption(com.oracle.truffle.api.Assumption) VirtualFrame(com.oracle.truffle.api.frame.VirtualFrame) ConstantTestNode(org.graalvm.compiler.truffle.test.nodes.ConstantTestNode) TruffleOptionsOverrideScope(org.graalvm.compiler.truffle.common.TruffleCompilerOptions.TruffleOptionsOverrideScope) RootTestNode(org.graalvm.compiler.truffle.test.nodes.RootTestNode) Test(org.junit.Test)

Example 2 with ConstantTestNode

use of org.graalvm.compiler.truffle.test.nodes.ConstantTestNode in project graal by oracle.

the class CompilerAssertsTest method compilationConstantTest.

@Test
public void compilationConstantTest() {
    FrameDescriptor descriptor = new FrameDescriptor();
    CompilationConstantTestNode result = new CompilationConstantTestNode(new ConstantTestNode(5));
    RootTestNode rootNode = new RootTestNode(descriptor, "compilationConstant", result);
    compileHelper("compilationConstant", rootNode, new Object[0]);
}
Also used : FrameDescriptor(com.oracle.truffle.api.frame.FrameDescriptor) ConstantTestNode(org.graalvm.compiler.truffle.test.nodes.ConstantTestNode) NonConstantTestNode(org.graalvm.compiler.truffle.test.nodes.NonConstantTestNode) RootTestNode(org.graalvm.compiler.truffle.test.nodes.RootTestNode) Test(org.junit.Test)

Example 3 with ConstantTestNode

use of org.graalvm.compiler.truffle.test.nodes.ConstantTestNode in project graal by oracle.

the class SimplePartialEvaluationTest method longSequenceConstants.

@Test
public void longSequenceConstants() {
    FrameDescriptor fd = new FrameDescriptor();
    int length = 40;
    AbstractTestNode[] children = new AbstractTestNode[length];
    for (int i = 0; i < children.length; ++i) {
        children[i] = new ConstantTestNode(42);
    }
    AbstractTestNode result = new BlockTestNode(children);
    assertPartialEvalEquals("constant42", new RootTestNode(fd, "longSequenceConstants", result));
}
Also used : FrameDescriptor(com.oracle.truffle.api.frame.FrameDescriptor) BlockTestNode(org.graalvm.compiler.truffle.test.nodes.BlockTestNode) AbstractTestNode(org.graalvm.compiler.truffle.test.nodes.AbstractTestNode) ConstantTestNode(org.graalvm.compiler.truffle.test.nodes.ConstantTestNode) RootTestNode(org.graalvm.compiler.truffle.test.nodes.RootTestNode) Test(org.junit.Test)

Example 4 with ConstantTestNode

use of org.graalvm.compiler.truffle.test.nodes.ConstantTestNode in project graal by oracle.

the class SimplePartialEvaluationTest method sequenceConstants.

@Test
public void sequenceConstants() {
    FrameDescriptor fd = new FrameDescriptor();
    AbstractTestNode result = new BlockTestNode(new AbstractTestNode[] { new ConstantTestNode(40), new ConstantTestNode(42) });
    assertPartialEvalEquals("constant42", new RootTestNode(fd, "sequenceConstants", result));
}
Also used : FrameDescriptor(com.oracle.truffle.api.frame.FrameDescriptor) BlockTestNode(org.graalvm.compiler.truffle.test.nodes.BlockTestNode) AbstractTestNode(org.graalvm.compiler.truffle.test.nodes.AbstractTestNode) ConstantTestNode(org.graalvm.compiler.truffle.test.nodes.ConstantTestNode) RootTestNode(org.graalvm.compiler.truffle.test.nodes.RootTestNode) Test(org.junit.Test)

Example 5 with ConstantTestNode

use of org.graalvm.compiler.truffle.test.nodes.ConstantTestNode in project graal by oracle.

the class SimplePartialEvaluationTest method twoMergesLoopExplosion.

@Test
public void twoMergesLoopExplosion() {
    FrameDescriptor fd = new FrameDescriptor();
    AbstractTestNode result = new AddTestNode(new TwoMergesExplodedLoopTestNode(5), new ConstantTestNode(37));
    assertPartialEvalEquals("constant42", new RootTestNode(fd, "twoMergesLoopExplosion", result));
}
Also used : FrameDescriptor(com.oracle.truffle.api.frame.FrameDescriptor) AbstractTestNode(org.graalvm.compiler.truffle.test.nodes.AbstractTestNode) ConstantTestNode(org.graalvm.compiler.truffle.test.nodes.ConstantTestNode) TwoMergesExplodedLoopTestNode(org.graalvm.compiler.truffle.test.nodes.TwoMergesExplodedLoopTestNode) RootTestNode(org.graalvm.compiler.truffle.test.nodes.RootTestNode) AddTestNode(org.graalvm.compiler.truffle.test.nodes.AddTestNode) Test(org.junit.Test)

Aggregations

FrameDescriptor (com.oracle.truffle.api.frame.FrameDescriptor)14 ConstantTestNode (org.graalvm.compiler.truffle.test.nodes.ConstantTestNode)14 RootTestNode (org.graalvm.compiler.truffle.test.nodes.RootTestNode)14 Test (org.junit.Test)14 AbstractTestNode (org.graalvm.compiler.truffle.test.nodes.AbstractTestNode)13 AddTestNode (org.graalvm.compiler.truffle.test.nodes.AddTestNode)7 BlockTestNode (org.graalvm.compiler.truffle.test.nodes.BlockTestNode)6 LoadLocalTestNode (org.graalvm.compiler.truffle.test.nodes.LoadLocalTestNode)4 StoreLocalTestNode (org.graalvm.compiler.truffle.test.nodes.StoreLocalTestNode)4 NestedExplodedLoopTestNode (org.graalvm.compiler.truffle.test.nodes.NestedExplodedLoopTestNode)3 TwoMergesExplodedLoopTestNode (org.graalvm.compiler.truffle.test.nodes.TwoMergesExplodedLoopTestNode)3 LoopTestNode (org.graalvm.compiler.truffle.test.nodes.LoopTestNode)2 Assumption (com.oracle.truffle.api.Assumption)1 CallTarget (com.oracle.truffle.api.CallTarget)1 CompilerDirectives (com.oracle.truffle.api.CompilerDirectives)1 Truffle (com.oracle.truffle.api.Truffle)1 VirtualFrame (com.oracle.truffle.api.frame.VirtualFrame)1 DirectCallNode (com.oracle.truffle.api.nodes.DirectCallNode)1 LoopNode (com.oracle.truffle.api.nodes.LoopNode)1 Node (com.oracle.truffle.api.nodes.Node)1