Search in sources :

Example 36 with Node

use of org.graalvm.compiler.graph.Node in project graal by oracle.

the class ReferenceGetLoopTest method checkMidTierGraph.

@Override
protected boolean checkMidTierGraph(StructuredGraph graph) {
    final LoopsData loops = new LoopsData(graph);
    boolean found = false;
    for (LoopEx loop : loops.loops()) {
        for (Node node : loop.inside().nodes()) {
            if (node instanceof Access) {
                Access access = (Access) node;
                LocationIdentity location = access.getLocationIdentity();
                if (location instanceof FieldLocationIdentity) {
                    ResolvedJavaField field = ((FieldLocationIdentity) location).getField();
                    if (field.getName().equals("referent") && field.getDeclaringClass().equals(getMetaAccess().lookupJavaType(Reference.class))) {
                        found = true;
                    }
                }
            }
        }
    }
    if (!found) {
        assertTrue(false, "Reference.referent not found in loop: " + getCanonicalGraphString(graph, true, false));
    }
    return true;
}
Also used : FieldLocationIdentity(org.graalvm.compiler.nodes.FieldLocationIdentity) LoopsData(org.graalvm.compiler.loop.LoopsData) LoopEx(org.graalvm.compiler.loop.LoopEx) Node(org.graalvm.compiler.graph.Node) Access(org.graalvm.compiler.nodes.memory.Access) FieldLocationIdentity(org.graalvm.compiler.nodes.FieldLocationIdentity) LocationIdentity(org.graalvm.word.LocationIdentity) ResolvedJavaField(jdk.vm.ci.meta.ResolvedJavaField)

Example 37 with Node

use of org.graalvm.compiler.graph.Node in project graal by oracle.

the class EscapeAnalysisTest method testChangeHandling.

/**
 * Tests that a graph with allocations that does not make progress during PEA will not be
 * changed.
 */
@Test
public void testChangeHandling() {
    prepareGraph("testChangeHandlingSnippet", false);
    Assert.assertEquals(2, graph.getNodes().filter(CommitAllocationNode.class).count());
    Assert.assertEquals(1, graph.getNodes().filter(BoxNode.class).count());
    List<Node> nodes = graph.getNodes().snapshot();
    // verify that an additional run doesn't add or remove nodes
    new PartialEscapePhase(false, false, new CanonicalizerPhase(), null, graph.getOptions()).apply(graph, context);
    Assert.assertEquals(nodes.size(), graph.getNodeCount());
    for (Node node : nodes) {
        Assert.assertTrue(node.isAlive());
    }
}
Also used : PartialEscapePhase(org.graalvm.compiler.virtual.phases.ea.PartialEscapePhase) ValueAnchorNode(org.graalvm.compiler.nodes.extended.ValueAnchorNode) ReturnNode(org.graalvm.compiler.nodes.ReturnNode) BoxNode(org.graalvm.compiler.nodes.extended.BoxNode) LoadFieldNode(org.graalvm.compiler.nodes.java.LoadFieldNode) ConstantNode(org.graalvm.compiler.nodes.ConstantNode) AllocatedObjectNode(org.graalvm.compiler.nodes.virtual.AllocatedObjectNode) CommitAllocationNode(org.graalvm.compiler.nodes.virtual.CommitAllocationNode) Node(org.graalvm.compiler.graph.Node) CanonicalizerPhase(org.graalvm.compiler.phases.common.CanonicalizerPhase) Test(org.junit.Test)

Example 38 with Node

use of org.graalvm.compiler.graph.Node in project graal by oracle.

the class TypeSystemTest method outputGraph.

public static void outputGraph(StructuredGraph graph, String message) {
    TTY.println("========================= " + message);
    SchedulePhase schedulePhase = new SchedulePhase(graph.getOptions());
    schedulePhase.apply(graph);
    ScheduleResult schedule = graph.getLastSchedule();
    for (Block block : schedule.getCFG().getBlocks()) {
        TTY.print("Block " + block + " ");
        if (block == schedule.getCFG().getStartBlock()) {
            TTY.print("* ");
        }
        TTY.print("-> ");
        for (Block succ : block.getSuccessors()) {
            TTY.print(succ + " ");
        }
        TTY.println();
        for (Node node : schedule.getBlockToNodesMap().get(block)) {
            outputNode(node);
        }
    }
}
Also used : SchedulePhase(org.graalvm.compiler.phases.schedule.SchedulePhase) ScheduleResult(org.graalvm.compiler.nodes.StructuredGraph.ScheduleResult) AbstractMergeNode(org.graalvm.compiler.nodes.AbstractMergeNode) InstanceOfNode(org.graalvm.compiler.nodes.java.InstanceOfNode) Node(org.graalvm.compiler.graph.Node) PhiNode(org.graalvm.compiler.nodes.PhiNode) Block(org.graalvm.compiler.nodes.cfg.Block)

Example 39 with Node

use of org.graalvm.compiler.graph.Node in project graal by oracle.

the class MemoryScheduleTest method assertReadBeforeAllWritesInStartBlock.

private static void assertReadBeforeAllWritesInStartBlock(ScheduleResult schedule) {
    boolean writeNodeFound = false;
    boolean readNodeFound = false;
    for (Node node : schedule.nodesFor(schedule.getCFG().getStartBlock())) {
        if (node instanceof FloatingReadNode) {
            assertTrue(!writeNodeFound);
            readNodeFound = true;
        } else if (node instanceof WriteNode) {
            writeNodeFound = true;
        }
    }
    assertTrue(readNodeFound);
}
Also used : 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) WriteNode(org.graalvm.compiler.nodes.memory.WriteNode)

Example 40 with Node

use of org.graalvm.compiler.graph.Node in project graal by oracle.

the class MonitorGraphTest method parseAndProcess.

private StructuredGraph parseAndProcess(String snippet) {
    StructuredGraph graph = parseEager(snippet, AllowAssumptions.NO);
    ParameterNode param = graph.getNodes(ParameterNode.TYPE).first();
    if (param != null) {
        ConstantNode constant = ConstantNode.forInt(0, graph);
        for (Node n : param.usages().snapshot()) {
            if (!(n instanceof FrameState)) {
                n.replaceFirstInput(param, constant);
            }
        }
    }
    Map<Invoke, Double> hints = new HashMap<>();
    for (Invoke invoke : graph.getInvokes()) {
        hints.put(invoke, 1000d);
    }
    HighTierContext context = getDefaultHighTierContext();
    new InliningPhase(hints, new CanonicalizerPhase()).apply(graph, context);
    new CanonicalizerPhase().apply(graph, context);
    new DeadCodeEliminationPhase().apply(graph);
    return graph;
}
Also used : HashMap(java.util.HashMap) ConstantNode(org.graalvm.compiler.nodes.ConstantNode) MonitorExitNode(org.graalvm.compiler.nodes.java.MonitorExitNode) Node(org.graalvm.compiler.graph.Node) ParameterNode(org.graalvm.compiler.nodes.ParameterNode) FrameState(org.graalvm.compiler.nodes.FrameState) Invoke(org.graalvm.compiler.nodes.Invoke) ConstantNode(org.graalvm.compiler.nodes.ConstantNode) StructuredGraph(org.graalvm.compiler.nodes.StructuredGraph) ParameterNode(org.graalvm.compiler.nodes.ParameterNode) CanonicalizerPhase(org.graalvm.compiler.phases.common.CanonicalizerPhase) HighTierContext(org.graalvm.compiler.phases.tiers.HighTierContext) InliningPhase(org.graalvm.compiler.phases.common.inlining.InliningPhase) DeadCodeEliminationPhase(org.graalvm.compiler.phases.common.DeadCodeEliminationPhase)

Aggregations

Node (org.graalvm.compiler.graph.Node)189 ValueNode (org.graalvm.compiler.nodes.ValueNode)105 FixedNode (org.graalvm.compiler.nodes.FixedNode)91 AbstractMergeNode (org.graalvm.compiler.nodes.AbstractMergeNode)75 FixedWithNextNode (org.graalvm.compiler.nodes.FixedWithNextNode)74 AbstractBeginNode (org.graalvm.compiler.nodes.AbstractBeginNode)73 PhiNode (org.graalvm.compiler.nodes.PhiNode)64 ConstantNode (org.graalvm.compiler.nodes.ConstantNode)61 LoopBeginNode (org.graalvm.compiler.nodes.LoopBeginNode)53 AbstractEndNode (org.graalvm.compiler.nodes.AbstractEndNode)47 StructuredGraph (org.graalvm.compiler.nodes.StructuredGraph)43 FloatingNode (org.graalvm.compiler.nodes.calc.FloatingNode)41 ParameterNode (org.graalvm.compiler.nodes.ParameterNode)38 EndNode (org.graalvm.compiler.nodes.EndNode)37 LoopExitNode (org.graalvm.compiler.nodes.LoopExitNode)37 MethodCallTargetNode (org.graalvm.compiler.nodes.java.MethodCallTargetNode)37 MergeNode (org.graalvm.compiler.nodes.MergeNode)35 ReturnNode (org.graalvm.compiler.nodes.ReturnNode)35 VirtualObjectNode (org.graalvm.compiler.nodes.virtual.VirtualObjectNode)32 LogicNode (org.graalvm.compiler.nodes.LogicNode)31