Search in sources :

Example 36 with Block

use of org.graalvm.compiler.nodes.cfg.Block in project graal by oracle.

the class MemoryScheduleTest method assertReadWithinAllReturnBlocks.

private void assertReadWithinAllReturnBlocks(ScheduleResult schedule, boolean withinReturnBlock) {
    StructuredGraph graph = schedule.getCFG().graph;
    assertTrue(graph.getNodes(ReturnNode.TYPE).isNotEmpty());
    int withRead = 0;
    int returnBlocks = 0;
    for (ReturnNode returnNode : graph.getNodes(ReturnNode.TYPE)) {
        Block block = schedule.getCFG().getNodeToBlock().get(returnNode);
        for (Node node : schedule.getBlockToNodesMap().get(block)) {
            if (node instanceof FloatingReadNode) {
                withRead++;
                break;
            }
        }
        returnBlocks++;
    }
    assertDeepEquals(withRead == returnBlocks, withinReturnBlock);
}
Also used : ReturnNode(org.graalvm.compiler.nodes.ReturnNode) StructuredGraph(org.graalvm.compiler.nodes.StructuredGraph) WriteNode(org.graalvm.compiler.nodes.memory.WriteNode) StartNode(org.graalvm.compiler.nodes.StartNode) FloatingReadNode(org.graalvm.compiler.nodes.memory.FloatingReadNode) ReturnNode(org.graalvm.compiler.nodes.ReturnNode) Node(org.graalvm.compiler.graph.Node) FloatingReadNode(org.graalvm.compiler.nodes.memory.FloatingReadNode) Block(org.graalvm.compiler.nodes.cfg.Block)

Example 37 with Block

use of org.graalvm.compiler.nodes.cfg.Block in project graal by oracle.

the class MemoryScheduleTest method testLoop9.

@Test
public void testLoop9() {
    ScheduleResult schedule = getFinalSchedule("testLoop9Snippet", TestMode.WITHOUT_FRAMESTATES);
    StructuredGraph graph = schedule.getCFG().getStartBlock().getBeginNode().graph();
    assertThat(graph.getNodes(ReturnNode.TYPE), hasCount(1));
    ReturnNode ret = graph.getNodes(ReturnNode.TYPE).first();
    assertThat(ret.result(), instanceOf(FloatingReadNode.class));
    Block readBlock = schedule.getNodeToBlockMap().get(ret.result());
    Assert.assertEquals(0, readBlock.getLoopDepth());
}
Also used : ReturnNode(org.graalvm.compiler.nodes.ReturnNode) ScheduleResult(org.graalvm.compiler.nodes.StructuredGraph.ScheduleResult) StructuredGraph(org.graalvm.compiler.nodes.StructuredGraph) FloatingReadNode(org.graalvm.compiler.nodes.memory.FloatingReadNode) Block(org.graalvm.compiler.nodes.cfg.Block) Test(org.junit.Test)

Example 38 with Block

use of org.graalvm.compiler.nodes.cfg.Block in project graal by oracle.

the class NestedLoopTest method contains.

private static boolean contains(Loop<Block> loop, Invoke node, ControlFlowGraph cfg) {
    Block block = cfg.blockFor((Node) node);
    Assert.assertNotNull(block);
    return loop.getBlocks().contains(block);
}
Also used : Block(org.graalvm.compiler.nodes.cfg.Block)

Example 39 with Block

use of org.graalvm.compiler.nodes.cfg.Block in project graal by oracle.

the class NestedLoopTest method test.

private void test(String snippet, int rootExits, int nestedExits, int innerExits) {
    StructuredGraph graph = parseEager(snippet, AllowAssumptions.YES);
    DebugContext debug = graph.getDebug();
    debug.dump(DebugContext.BASIC_LEVEL, graph, "Graph");
    ControlFlowGraph cfg = ControlFlowGraph.compute(graph, true, true, true, true);
    Assert.assertEquals(3, cfg.getLoops().size());
    Loop<Block> rootLoop = cfg.getLoops().get(0);
    Loop<Block> nestedLoop = cfg.getLoops().get(1);
    Loop<Block> innerMostLoop = cfg.getLoops().get(2);
    Invoke a = getInvoke("a", graph);
    Invoke b = getInvoke("b", graph);
    Invoke c = getInvoke("c", graph);
    Invoke d = getInvoke("d", graph);
    Assert.assertTrue(containsDirect(rootLoop, a, cfg));
    Assert.assertTrue(containsDirect(nestedLoop, b, cfg));
    Assert.assertTrue(containsDirect(innerMostLoop, c, cfg));
    Assert.assertTrue(containsDirect(innerMostLoop, d, cfg));
    Assert.assertTrue(contains(rootLoop, d, cfg));
    Assert.assertTrue(contains(nestedLoop, d, cfg));
    Assert.assertEquals(rootExits, rootLoop.getExits().size());
    Assert.assertEquals(nestedExits, nestedLoop.getExits().size());
    Assert.assertEquals(innerExits, innerMostLoop.getExits().size());
    debug.dump(DebugContext.BASIC_LEVEL, graph, "Graph");
}
Also used : StructuredGraph(org.graalvm.compiler.nodes.StructuredGraph) ControlFlowGraph(org.graalvm.compiler.nodes.cfg.ControlFlowGraph) Block(org.graalvm.compiler.nodes.cfg.Block) DebugContext(org.graalvm.compiler.debug.DebugContext) Invoke(org.graalvm.compiler.nodes.Invoke)

Example 40 with Block

use of org.graalvm.compiler.nodes.cfg.Block in project graal by oracle.

the class SchedulingTest method testValueProxyInputs.

@Test
public void testValueProxyInputs() {
    StructuredGraph graph = parseEager("testValueProxyInputsSnippet", AllowAssumptions.YES);
    for (FrameState fs : graph.getNodes().filter(FrameState.class).snapshot()) {
        fs.replaceAtUsages(null);
        GraphUtil.killWithUnusedFloatingInputs(fs);
    }
    SchedulePhase schedulePhase = new SchedulePhase(SchedulingStrategy.LATEST);
    schedulePhase.apply(graph);
    ScheduleResult schedule = graph.getLastSchedule();
    NodeMap<Block> nodeToBlock = schedule.getCFG().getNodeToBlock();
    assertTrue(graph.getNodes().filter(LoopExitNode.class).count() == 1);
    LoopExitNode loopExit = graph.getNodes().filter(LoopExitNode.class).first();
    List<Node> list = schedule.nodesFor(nodeToBlock.get(loopExit));
    for (BinaryArithmeticNode<?> node : graph.getNodes().filter(BinaryArithmeticNode.class)) {
        if (!(node instanceof AddNode)) {
            assertTrue(node.toString(), nodeToBlock.get(node) == nodeToBlock.get(loopExit));
            assertTrue(list.indexOf(node) + " < " + list.indexOf(loopExit) + ", " + node + ", " + loopExit, list.indexOf(node) < list.indexOf(loopExit));
        }
    }
}
Also used : SchedulePhase(org.graalvm.compiler.phases.schedule.SchedulePhase) ScheduleResult(org.graalvm.compiler.nodes.StructuredGraph.ScheduleResult) StructuredGraph(org.graalvm.compiler.nodes.StructuredGraph) LoopExitNode(org.graalvm.compiler.nodes.LoopExitNode) AddNode(org.graalvm.compiler.nodes.calc.AddNode) LoopExitNode(org.graalvm.compiler.nodes.LoopExitNode) BinaryArithmeticNode(org.graalvm.compiler.nodes.calc.BinaryArithmeticNode) Node(org.graalvm.compiler.graph.Node) Block(org.graalvm.compiler.nodes.cfg.Block) FrameState(org.graalvm.compiler.nodes.FrameState) AddNode(org.graalvm.compiler.nodes.calc.AddNode) Test(org.junit.Test)

Aggregations

Block (org.graalvm.compiler.nodes.cfg.Block)54 Node (org.graalvm.compiler.graph.Node)20 FixedNode (org.graalvm.compiler.nodes.FixedNode)17 StructuredGraph (org.graalvm.compiler.nodes.StructuredGraph)14 ScheduleResult (org.graalvm.compiler.nodes.StructuredGraph.ScheduleResult)14 ValueNode (org.graalvm.compiler.nodes.ValueNode)14 AbstractBeginNode (org.graalvm.compiler.nodes.AbstractBeginNode)13 AbstractMergeNode (org.graalvm.compiler.nodes.AbstractMergeNode)13 FixedWithNextNode (org.graalvm.compiler.nodes.FixedWithNextNode)13 LoopBeginNode (org.graalvm.compiler.nodes.LoopBeginNode)13 ControlFlowGraph (org.graalvm.compiler.nodes.cfg.ControlFlowGraph)12 SchedulePhase (org.graalvm.compiler.phases.schedule.SchedulePhase)11 ConstantNode (org.graalvm.compiler.nodes.ConstantNode)9 LoopExitNode (org.graalvm.compiler.nodes.LoopExitNode)9 PhiNode (org.graalvm.compiler.nodes.PhiNode)9 List (java.util.List)8 DebugContext (org.graalvm.compiler.debug.DebugContext)8 AbstractEndNode (org.graalvm.compiler.nodes.AbstractEndNode)8 ArrayList (java.util.ArrayList)7 ReturnNode (org.graalvm.compiler.nodes.ReturnNode)7