Mercurial > hg > graal-compiler
changeset 2786:39a9d62e4c60
IdealGraph visualization: Create a graph that is identical to the GraphViz one, except for some missing unconnected slots
author | Peter Hofer <peter.hofer@jku.at> |
---|---|
date | Wed, 25 May 2011 17:10:53 +0200 |
parents | 847dcd4dbd4c |
children | 9253df721472 |
files | graal/GraalCompiler/src/com/sun/c1x/debug/IdealGraphPrinter.java src/share/tools/IdealGraphVisualizer/ServerCompiler/src/com/sun/hotspot/igv/servercompiler/ServerCompilerScheduler.java |
diffstat | 2 files changed, 22 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/GraalCompiler/src/com/sun/c1x/debug/IdealGraphPrinter.java Wed May 25 12:20:08 2011 +0200 +++ b/graal/GraalCompiler/src/com/sun/c1x/debug/IdealGraphPrinter.java Wed May 25 17:10:53 2011 +0200 @@ -36,12 +36,14 @@ private static class Edge { final int from; final int to; - final int index; + final int fromIndex; + final int toIndex; - Edge(int from, int to, int index) { + Edge(int from, int fromIndex, int to, int toIndex) { this.from = from; + this.fromIndex = fromIndex; this.to = to; - this.index = index; + this.toIndex = toIndex; } } @@ -139,18 +141,22 @@ stream.printf("<p name='name'>%s</p>", escape(name)); stream.println("</properties></node>"); - int index = 0; - for (Node predecessor : node.predecessors()) { - if (predecessor != Node.Null && !omittedClasses.contains(predecessor.getClass())) { - edges.add(new Edge(predecessor.id(), node.id(), index)); + // successors + int fromIndex = 0; + for (Node successor : node.successors()) { + if (successor != Node.Null && !omittedClasses.contains(successor.getClass())) { + edges.add(new Edge(node.id(), fromIndex, successor.id(), 0)); } - index++; + fromIndex++; } + + // inputs + int toIndex = 1; for (Node input : node.inputs()) { if (input != Node.Null && !omittedClasses.contains(input.getClass())) { - edges.add(new Edge(input.id(), node.id(), index)); + edges.add(new Edge(input.id(), input.successors().size(), node.id(), toIndex)); } - index++; + toIndex++; } } @@ -158,7 +164,7 @@ } private void printEdge(Edge edge) { - stream.printf(" <edge from='%d' to='%d' index='%d'/>%n", edge.from, edge.to, edge.index); + stream.printf(" <edge from='%d' fromIndex='%d' to='%d' toIndex='%d'/>%n", edge.from, edge.fromIndex, edge.to, edge.toIndex); } private String escape(String s) {
--- a/src/share/tools/IdealGraphVisualizer/ServerCompiler/src/com/sun/hotspot/igv/servercompiler/ServerCompilerScheduler.java Wed May 25 12:20:08 2011 +0200 +++ b/src/share/tools/IdealGraphVisualizer/ServerCompiler/src/com/sun/hotspot/igv/servercompiler/ServerCompilerScheduler.java Wed May 25 17:10:53 2011 +0200 @@ -538,15 +538,19 @@ } private Node findRoot() { + Node node0 = null; for (Node n : nodes) { InputNode inputNode = n.inputNode; if (inputNode.getProperties().get("name").equals("Root")) { return n; + } else if (inputNode.getId() == 0) { + // use as fallback in case no root node is found + node0 = n; } } - return null; + return node0; } public void buildUpGraph() {