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;
}
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());
}
}
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);
}
}
}
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);
}
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;
}
Aggregations