use of org.graalvm.compiler.graph.Graph in project graal by oracle.
the class NodeUsagesTests method testReplaceAtUsagesWithPredicate01.
@Test
public void testReplaceAtUsagesWithPredicate01() {
OptionValues options = getOptions();
Graph graph = new Graph(options, getDebug(options));
Def def0 = graph.add(new Def());
Def def1 = graph.add(new Def());
Use use0 = graph.add(new Use(def0, null, null));
Use use1 = graph.add(new Use(null, def0, null));
Use use2 = graph.add(new Use(null, null, def0));
assertEquals(3, def0.getUsageCount());
assertThat(def0.usages(), contains(use0));
assertThat(def0.usages(), contains(use1));
assertThat(def0.usages(), contains(use2));
assertThat(def0.usages(), isNotEmpty());
assertThat(def1.usages(), isEmpty());
def0.replaceAtMatchingUsages(def1, u -> u != use2);
assertEquals(1, def0.getUsageCount());
assertThat(def0.usages(), contains(use2));
assertThat(def0.usages(), isNotEmpty());
assertEquals(2, def1.getUsageCount());
assertThat(def1.usages(), contains(use0));
assertThat(def1.usages(), contains(use1));
assertThat(def1.usages(), isNotEmpty());
}
use of org.graalvm.compiler.graph.Graph in project graal by oracle.
the class NodeUsagesTests method testReplaceAtUsagesWithPredicateNone.
@Test
public void testReplaceAtUsagesWithPredicateNone() {
OptionValues options = getOptions();
Graph graph = new Graph(options, getDebug(options));
Def def0 = graph.add(new Def());
Def def1 = graph.add(new Def());
Use use0 = graph.add(new Use(def0, null, null));
Use use1 = graph.add(new Use(null, def0, null));
Use use2 = graph.add(new Use(null, null, def0));
assertEquals(3, def0.getUsageCount());
assertThat(def0.usages(), contains(use0));
assertThat(def0.usages(), contains(use1));
assertThat(def0.usages(), contains(use2));
assertThat(def0.usages(), isNotEmpty());
assertThat(def1.usages(), isEmpty());
def0.replaceAtMatchingUsages(def1, u -> false);
assertThat(def1.usages(), isEmpty());
assertEquals(3, def0.getUsageCount());
assertThat(def0.usages(), contains(use0));
assertThat(def0.usages(), contains(use1));
assertThat(def0.usages(), contains(use2));
assertThat(def0.usages(), isNotEmpty());
}
use of org.graalvm.compiler.graph.Graph in project graal by oracle.
the class LoopFragmentWhole method getDuplicationReplacement.
@Override
protected DuplicationReplacement getDuplicationReplacement() {
final FixedNode entry = loop().entryPoint();
final Graph graph = this.graph();
return new DuplicationReplacement() {
private EndNode endNode;
@Override
public Node replacement(Node o) {
if (o == entry) {
if (endNode == null) {
endNode = graph.add(new EndNode());
}
return endNode;
}
return o;
}
};
}
use of org.graalvm.compiler.graph.Graph in project graal by oracle.
the class BinaryGraphPrinter method nodeProperties.
@Override
@SuppressWarnings({ "unchecked", "rawtypes" })
public void nodeProperties(GraphInfo info, Node node, Map<String, Object> props) {
node.getDebugProperties((Map) props);
Graph graph = info.graph;
ControlFlowGraph cfg = info.cfg;
NodeMap<Block> nodeToBlocks = info.nodeToBlocks;
if (cfg != null && DebugOptions.PrintGraphProbabilities.getValue(graph.getOptions()) && node instanceof FixedNode) {
try {
props.put("probability", cfg.blockFor(node).probability());
} catch (Throwable t) {
props.put("probability", 0.0);
props.put("probability-exception", t);
}
}
try {
props.put("NodeCost-Size", node.estimatedNodeSize());
props.put("NodeCost-Cycles", node.estimatedNodeCycles());
} catch (Throwable t) {
props.put("node-cost-exception", t.getMessage());
}
if (nodeToBlocks != null) {
Object block = getBlockForNode(node, nodeToBlocks);
if (block != null) {
props.put("node-to-block", block);
}
}
if (node instanceof ControlSinkNode) {
props.put("category", "controlSink");
} else if (node instanceof ControlSplitNode) {
props.put("category", "controlSplit");
} else if (node instanceof AbstractMergeNode) {
props.put("category", "merge");
} else if (node instanceof AbstractBeginNode) {
props.put("category", "begin");
} else if (node instanceof AbstractEndNode) {
props.put("category", "end");
} else if (node instanceof FixedNode) {
props.put("category", "fixed");
} else if (node instanceof VirtualState) {
props.put("category", "state");
} else if (node instanceof PhiNode) {
props.put("category", "phi");
} else if (node instanceof ProxyNode) {
props.put("category", "proxy");
} else {
if (node instanceof ConstantNode) {
ConstantNode cn = (ConstantNode) node;
updateStringPropertiesForConstant((Map) props, cn);
}
props.put("category", "floating");
}
if (getSnippetReflectionProvider() != null) {
for (Map.Entry<String, Object> prop : props.entrySet()) {
if (prop.getValue() instanceof JavaConstantFormattable) {
props.put(prop.getKey(), ((JavaConstantFormattable) prop.getValue()).format(this));
}
}
}
}
use of org.graalvm.compiler.graph.Graph in project graal by oracle.
the class NodeUsagesTests method testReplaceAtUsagesWithPredicate203.
@Test
public void testReplaceAtUsagesWithPredicate203() {
OptionValues options = getOptions();
Graph graph = new Graph(options, getDebug(options));
Def def0 = graph.add(new Def());
Def def1 = graph.add(new Def());
Use use0 = graph.add(new Use(def0, null, null));
Use use1 = graph.add(new Use(null, def0, null));
Use use2 = graph.add(new Use(null, null, def0));
Use use3 = graph.add(new Use(null, null, def0));
assertEquals(4, def0.getUsageCount());
assertThat(def0.usages(), contains(use0));
assertThat(def0.usages(), contains(use1));
assertThat(def0.usages(), contains(use2));
assertThat(def0.usages(), contains(use3));
assertThat(def0.usages(), isNotEmpty());
assertThat(def1.usages(), isEmpty());
def0.replaceAtMatchingUsages(def1, u -> u == use2);
assertEquals(1, def1.getUsageCount());
assertThat(def1.usages(), contains(use2));
assertThat(def1.usages(), isNotEmpty());
assertEquals(3, def0.getUsageCount());
assertThat(def0.usages(), contains(use0));
assertThat(def0.usages(), contains(use1));
assertThat(def0.usages(), contains(use3));
assertThat(def0.usages(), isNotEmpty());
}
Aggregations