Search in sources :

Example 1 with DefaultLoopPolicies

use of org.graalvm.compiler.nodes.loop.DefaultLoopPolicies in project graal by oracle.

the class BoxingEliminationTest method compareGraphs.

private void compareGraphs(final String snippet, final String referenceSnippet, final boolean loopPeeling, final boolean excludeVirtual) {
    graph = parseEager(snippet, AllowAssumptions.NO);
    HighTierContext context = getDefaultHighTierContext();
    CanonicalizerPhase canonicalizer = this.createCanonicalizerPhase();
    canonicalizer.apply(graph, context);
    createInliningPhase().apply(graph, context);
    if (loopPeeling) {
        new LoopPeelingPhase(new DefaultLoopPolicies()).apply(graph, context);
    }
    new DeadCodeEliminationPhase().apply(graph);
    canonicalizer.apply(graph, context);
    new PartialEscapePhase(false, canonicalizer, graph.getOptions()).apply(graph, context);
    new DeadCodeEliminationPhase().apply(graph);
    canonicalizer.apply(graph, context);
    StructuredGraph referenceGraph = parseEager(referenceSnippet, AllowAssumptions.YES);
    createInliningPhase().apply(referenceGraph, context);
    new DeadCodeEliminationPhase().apply(referenceGraph);
    this.createCanonicalizerPhase().apply(referenceGraph, context);
    assertEquals(referenceGraph, graph, excludeVirtual, true);
}
Also used : LoopPeelingPhase(org.graalvm.compiler.loop.phases.LoopPeelingPhase) PartialEscapePhase(org.graalvm.compiler.virtual.phases.ea.PartialEscapePhase) StructuredGraph(org.graalvm.compiler.nodes.StructuredGraph) DefaultLoopPolicies(org.graalvm.compiler.nodes.loop.DefaultLoopPolicies) CanonicalizerPhase(org.graalvm.compiler.phases.common.CanonicalizerPhase) HighTierContext(org.graalvm.compiler.phases.tiers.HighTierContext) DeadCodeEliminationPhase(org.graalvm.compiler.phases.common.DeadCodeEliminationPhase)

Example 2 with DefaultLoopPolicies

use of org.graalvm.compiler.nodes.loop.DefaultLoopPolicies in project graal by oracle.

the class LockEliminationTest method testUnrolledSync.

@Test
public void testUnrolledSync() {
    StructuredGraph graph = getGraph("testUnrolledSyncSnippet", false);
    CanonicalizerPhase canonicalizer = createCanonicalizerPhase();
    canonicalizer.apply(graph, getProviders());
    HighTierContext context = getDefaultHighTierContext();
    new LoopFullUnrollPhase(canonicalizer, new DefaultLoopPolicies()).apply(graph, context);
    new LockEliminationPhase().apply(graph);
    assertDeepEquals(1, graph.getNodes().filter(MonitorEnterNode.class).count());
    assertDeepEquals(1, graph.getNodes().filter(MonitorExitNode.class).count());
}
Also used : LoopFullUnrollPhase(org.graalvm.compiler.loop.phases.LoopFullUnrollPhase) StructuredGraph(org.graalvm.compiler.nodes.StructuredGraph) DefaultLoopPolicies(org.graalvm.compiler.nodes.loop.DefaultLoopPolicies) CanonicalizerPhase(org.graalvm.compiler.phases.common.CanonicalizerPhase) HighTierContext(org.graalvm.compiler.phases.tiers.HighTierContext) LockEliminationPhase(org.graalvm.compiler.phases.common.LockEliminationPhase) Test(org.junit.Test)

Example 3 with DefaultLoopPolicies

use of org.graalvm.compiler.nodes.loop.DefaultLoopPolicies in project graal by oracle.

the class LoopFullUnrollTest method test.

@SuppressWarnings("try")
private void test(String snippet, int loopCount) {
    DebugContext debug = getDebugContext();
    try (DebugContext.Scope s = debug.scope(getClass().getSimpleName(), new DebugDumpScope(snippet))) {
        final StructuredGraph graph = parseEager(snippet, AllowAssumptions.NO, debug);
        CoreProviders context = getProviders();
        new LoopFullUnrollPhase(createCanonicalizerPhase(), new DefaultLoopPolicies()).apply(graph, context);
        assertTrue(graph.getNodes().filter(LoopBeginNode.class).count() == loopCount);
    } catch (Throwable e) {
        throw debug.handle(e);
    }
}
Also used : CoreProviders(org.graalvm.compiler.nodes.spi.CoreProviders) LoopFullUnrollPhase(org.graalvm.compiler.loop.phases.LoopFullUnrollPhase) LoopBeginNode(org.graalvm.compiler.nodes.LoopBeginNode) StructuredGraph(org.graalvm.compiler.nodes.StructuredGraph) DebugDumpScope(org.graalvm.compiler.debug.DebugDumpScope) DefaultLoopPolicies(org.graalvm.compiler.nodes.loop.DefaultLoopPolicies) DebugContext(org.graalvm.compiler.debug.DebugContext)

Example 4 with DefaultLoopPolicies

use of org.graalvm.compiler.nodes.loop.DefaultLoopPolicies in project graal by oracle.

the class EscapeAnalysisTest method testFullyUnrolledLoop.

@Test
public void testFullyUnrolledLoop() {
    prepareGraph("testFullyUnrolledLoopSnippet", false);
    new LoopFullUnrollPhase(createCanonicalizerPhase(), new DefaultLoopPolicies()).apply(graph, context);
    new PartialEscapePhase(false, createCanonicalizerPhase(), graph.getOptions()).apply(graph, context);
    Assert.assertEquals(1, returnNodes.size());
    Assert.assertTrue(returnNodes.get(0).result() instanceof AllocatedObjectNode);
    CommitAllocationNode commit = ((AllocatedObjectNode) returnNodes.get(0).result()).getCommit();
    Assert.assertEquals(2, commit.getValues().size());
    Assert.assertEquals(1, commit.getVirtualObjects().size());
    Assert.assertTrue("non-cyclic data structure expected", commit.getVirtualObjects().get(0) != commit.getValues().get(0));
}
Also used : LoopFullUnrollPhase(org.graalvm.compiler.loop.phases.LoopFullUnrollPhase) PartialEscapePhase(org.graalvm.compiler.virtual.phases.ea.PartialEscapePhase) AllocatedObjectNode(org.graalvm.compiler.nodes.virtual.AllocatedObjectNode) DefaultLoopPolicies(org.graalvm.compiler.nodes.loop.DefaultLoopPolicies) CommitAllocationNode(org.graalvm.compiler.nodes.virtual.CommitAllocationNode) Test(org.junit.Test)

Example 5 with DefaultLoopPolicies

use of org.graalvm.compiler.nodes.loop.DefaultLoopPolicies in project graal by oracle.

the class EscapeAnalysisTest method testPeeledLoop.

@Test
public void testPeeledLoop() {
    prepareGraph("testPeeledLoopSnippet", false);
    new LoopPeelingPhase(new DefaultLoopPolicies()).apply(graph, getDefaultHighTierContext());
    new SchedulePhase(graph.getOptions()).apply(graph, getDefaultHighTierContext());
}
Also used : LoopPeelingPhase(org.graalvm.compiler.loop.phases.LoopPeelingPhase) SchedulePhase(org.graalvm.compiler.phases.schedule.SchedulePhase) DefaultLoopPolicies(org.graalvm.compiler.nodes.loop.DefaultLoopPolicies) Test(org.junit.Test)

Aggregations

DefaultLoopPolicies (org.graalvm.compiler.nodes.loop.DefaultLoopPolicies)7 StructuredGraph (org.graalvm.compiler.nodes.StructuredGraph)5 LoopFullUnrollPhase (org.graalvm.compiler.loop.phases.LoopFullUnrollPhase)4 Test (org.junit.Test)4 DebugContext (org.graalvm.compiler.debug.DebugContext)2 DebugDumpScope (org.graalvm.compiler.debug.DebugDumpScope)2 LoopPeelingPhase (org.graalvm.compiler.loop.phases.LoopPeelingPhase)2 CanonicalizerPhase (org.graalvm.compiler.phases.common.CanonicalizerPhase)2 HighTierContext (org.graalvm.compiler.phases.tiers.HighTierContext)2 PartialEscapePhase (org.graalvm.compiler.virtual.phases.ea.PartialEscapePhase)2 InstalledCode (jdk.vm.ci.code.InstalledCode)1 LoopUnswitchingPhase (org.graalvm.compiler.loop.phases.LoopUnswitchingPhase)1 LoopBeginNode (org.graalvm.compiler.nodes.LoopBeginNode)1 CoreProviders (org.graalvm.compiler.nodes.spi.CoreProviders)1 AllocatedObjectNode (org.graalvm.compiler.nodes.virtual.AllocatedObjectNode)1 CommitAllocationNode (org.graalvm.compiler.nodes.virtual.CommitAllocationNode)1 OptionValues (org.graalvm.compiler.options.OptionValues)1 DeadCodeEliminationPhase (org.graalvm.compiler.phases.common.DeadCodeEliminationPhase)1 LockEliminationPhase (org.graalvm.compiler.phases.common.LockEliminationPhase)1 SchedulePhase (org.graalvm.compiler.phases.schedule.SchedulePhase)1