diff graal/GraalCompiler/src/com/sun/c1x/debug/GraphvizPrinterObserver.java @ 2674:6ab73784566a

* BlockBegin.predecessors changed to List<BlockEnd> * Node: add input/successor with given back edge index, allows for explicit ordering of predecessors/usages * Graphviz: PDF output, option to omit FrameStates * runscimark.sh: forward additional options to JVM
author Lukas Stadler <lukas.stadler@jku.at>
date Fri, 13 May 2011 15:18:41 +0200
parents d456b679b6de
children 4149feada801
line wrap: on
line diff
--- a/graal/GraalCompiler/src/com/sun/c1x/debug/GraphvizPrinterObserver.java	Fri May 13 11:19:25 2011 +0200
+++ b/graal/GraalCompiler/src/com/sun/c1x/debug/GraphvizPrinterObserver.java	Fri May 13 15:18:41 2011 +0200
@@ -26,7 +26,9 @@
 
 import com.oracle.graal.graph.*;
 import com.oracle.graal.graph.vis.*;
+import com.sun.c1x.*;
 import com.sun.c1x.observer.*;
+import com.sun.c1x.value.*;
 
 /**
  * Observes compilation events and uses {@link GraphvizPrinter} to produce a control flow graph in the DOT language
@@ -36,9 +38,11 @@
  */
 public class GraphvizPrinterObserver implements CompilationObserver {
 
+    private final boolean pdf;
     private int n;
 
-    public GraphvizPrinterObserver() {
+    public GraphvizPrinterObserver(boolean pdf) {
+        this.pdf = pdf;
     }
 
     public void compilationStarted(CompilationEvent event) {
@@ -55,16 +59,34 @@
             String name = event.getMethod().holder().name();
             name = name.substring(1, name.length() - 1).replace('/', '.');
             name = name + "." + event.getMethod().name();
+            String filename = name + "_" + (n++) + "_" + event.getLabel();
             try {
-                FileOutputStream stream = new FileOutputStream(name + "_" + n + "_" + event.getLabel() + ".gv");
-                n++;
+                if (pdf) {
+                    ByteArrayOutputStream out = new ByteArrayOutputStream();
+                    GraphvizPrinter printer = new GraphvizPrinter(out);
+                    if (C1XOptions.OmitDOTFrameStates) {
+                        printer.addOmittedClass(FrameState.class);
+                    }
+                    printer.begin(name);
+                    printer.print(graph, true);
+                    printer.end();
 
-                GraphvizPrinter printer = new GraphvizPrinter(stream);
-                printer.begin(name);
-                printer.print(graph, true);
-                printer.end();
+                    FileOutputStream output = new FileOutputStream(filename + ".pdf");
+                    GraphvizRunner.process(GraphvizRunner.DOT_LAYOUT, new ByteArrayInputStream(out.toByteArray()), output, "pdf");
+                    output.close();
+                } else {
+                    final FileOutputStream stream = new FileOutputStream(filename + ".gv");
 
-                stream.close();
+                    GraphvizPrinter printer = new GraphvizPrinter(stream);
+                    if (C1XOptions.OmitDOTFrameStates) {
+                        printer.addOmittedClass(FrameState.class);
+                    }
+                    printer.begin(name);
+                    printer.print(graph, true);
+                    printer.end();
+
+                    stream.close();
+                }
             } catch (IOException e) {
                 e.printStackTrace();
             }