[patch] give graphs from graph dump a name

Steven Bosscher stevenb.gcc@gmail.com
Fri Feb 15 00:01:00 GMT 2013


Hello,

A user sent me a request to give names to the digraph in a graph dump.
This name can be used as a key for the dump, for a tool that can
generate graph metrics to see GCC transforms code as it passes through
the pipeline. Another user requested the same thing for a hacked xdot
that can plot multiple digraphs.

The dumpfile base name seemed like a good name for the digraph. This
patch prints it as the digraph label.

Bootstrapped&tested on powerpc64-unknown-linux-gnu. Tested the graph
dump by dumping the .pre dump for my cc1-i files and plotting them
(*).

OK for trunk?

Ciao!
Steven

(*) note to self: manually tail-merge mark_stmt_necessary calls in
mark_stmt_if_obviously_necessary, or make mark_stmt_necessary
non-inline -- the graphs nicely show terrible code duplication :-)


        * graph.c (start_graph_dump): Print dumpfile base name as digraph label.
        (clean_graph_dump_file): Pass base to start_graph_dump.

Index: graph.c
===================================================================
--- graph.c     (revision 196059)
+++ graph.c     (working copy)
@@ -308,11 +308,16 @@ print_graph_cfg (const char *base, struct function

 /* Start the dump of a graph.  */
 static void
-start_graph_dump (FILE *fp)
+start_graph_dump (FILE *fp, const char *base)
 {
-  fputs ("digraph \"\" {\n"
-        "overlap=false;\n",
-        fp);
+  pretty_printer *pp = init_graph_slim_pretty_print (fp);
+  pp_string (pp, "digraph \"");
+  pp_write_text_to_stream (pp);
+  pp_string (pp, base);
+  pp_write_text_as_dot_label_to_stream (pp, /*for_record=*/false);
+  pp_string (pp, "\" {\n");
+  pp_string (pp, "overlap=false;\n");
+  pp_flush (pp);
 }

 /* End the dump of a graph.  */
@@ -327,7 +332,7 @@ void
 clean_graph_dump_file (const char *base)
 {
   FILE *fp = open_graph_file (base, "w");
-  start_graph_dump (fp);
+  start_graph_dump (fp, base);
   fclose (fp);
 }



More information about the Gcc-patches mailing list