Patchwork give graphs from graph dump a name

login
register
mail settings
Submitter Steven Bosscher
Date Feb. 15, 2013, midnight
Message ID <CABu31nMy-rghvqBCR=f=W+v11mAyHcf5zCR0sq-dH2aJURB1OQ@mail.gmail.com>
Download mbox | patch
Permalink /patch/220546/
State New
Headers show

Comments

Steven Bosscher - Feb. 15, 2013, midnight
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.
Richard Guenther - Feb. 15, 2013, 9:07 a.m.
On Fri, Feb 15, 2013 at 1:00 AM, Steven Bosscher <stevenb.gcc@gmail.com> wrote:
> 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?

Ok.

Thanks,
Richard.

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

Patch

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