diff mbox

Enhance dump_probability function.

Message ID f776d98c-d5db-edd7-54b8-995b3eb08a19@suse.cz
State New
Headers show

Commit Message

Martin Liška June 13, 2017, 8:14 a.m. UTC
Hi.

This is pre-approved patch that displays edge counts in dump files:

...
  _85 = _83 + _84;
  len_86 = SQRT (_85);
  if (_85 u>= 0.0)
    goto <bb 6>; [99.00%] [count: 778568]
  else
    goto <bb 5>; [1.00%] [count: 7864]

  <bb 5> [0.01%] [count: 7864]:
  sqrt (_85);
...

That makes it possible to understand why a profile mismatch happens.
Patch can bootstrap on ppc64le-redhat-linux and survives regression tests.

Martin

gcc/ChangeLog:

2017-06-12  Martin Liska  <mliska@suse.cz>

	* gimple-pretty-print.c (dump_probability): Add new argument.
	(dump_edge_probability): Dump both probability and count.
	(dump_gimple_label): Likewise.
	(dump_gimple_bb_header): Likewise.

gcc/testsuite/ChangeLog:

2017-06-12  Martin Liska  <mliska@suse.cz>

	* gcc.dg/tree-ssa/builtin-sprintf-2.c: Adjust scanned pattern.
	* gcc.dg/tree-ssa/dump-2.c: Likewise.
	* gcc.dg/tree-ssa/vrp101.c: Likewise.
---
 gcc/gimple-pretty-print.c                         | 22 ++++++++++++++--------
 gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-2.c |  4 ++--
 gcc/testsuite/gcc.dg/tree-ssa/dump-2.c            |  2 +-
 gcc/testsuite/gcc.dg/tree-ssa/vrp101.c            |  2 +-
 4 files changed, 18 insertions(+), 12 deletions(-)

Comments

Paul Hua June 14, 2017, 2:02 a.m. UTC | #1
New "ERROR: (DejaGnu)" on mips64el target.

my DejaGnu version is 1.5.1.

1)
make check-gcc RUNTESTFLAGS="tree-ssa.exp=builtin-sprintf-2.c"
...
ERROR: (DejaGnu) proc "^:\\" does not exist.
The error code is TCL LOOKUP COMMAND ^:\\
The info on the error is:
invalid command name "^:\"
    while executing
"::tcl_unknown ^:\\"
    ("uplevel" body line 1)
    invoked from within
"uplevel 1 ::tcl_unknown $args"
...

2)
make check-gcc RUNTESTFLAGS="tree-ssa.exp=vrp101.c"
...
ERROR: (DejaGnu) proc "^:\\" does not exist.
The error code is TCL LOOKUP COMMAND ^:\\
The info on the error is:
invalid command name "^:\"
    while executing
"::tcl_unknown ^:\\"
    ("uplevel" body line 1)
    invoked from within
"uplevel 1 ::tcl_unknown $args"
...

I don't known how to debug this, any advice ?

Paul.


On Tue, Jun 13, 2017 at 4:14 PM, Martin Liška <mliska@suse.cz> wrote:
> Hi.
>
> This is pre-approved patch that displays edge counts in dump files:
>
> ...
>   _85 = _83 + _84;
>   len_86 = SQRT (_85);
>   if (_85 u>= 0.0)
>     goto <bb 6>; [99.00%] [count: 778568]
>   else
>     goto <bb 5>; [1.00%] [count: 7864]
>
>   <bb 5> [0.01%] [count: 7864]:
>   sqrt (_85);
> ...
>
> That makes it possible to understand why a profile mismatch happens.
> Patch can bootstrap on ppc64le-redhat-linux and survives regression tests.
>
> Martin
>
> gcc/ChangeLog:
>
> 2017-06-12  Martin Liska  <mliska@suse.cz>
>
>         * gimple-pretty-print.c (dump_probability): Add new argument.
>         (dump_edge_probability): Dump both probability and count.
>         (dump_gimple_label): Likewise.
>         (dump_gimple_bb_header): Likewise.
>
> gcc/testsuite/ChangeLog:
>
> 2017-06-12  Martin Liska  <mliska@suse.cz>
>
>         * gcc.dg/tree-ssa/builtin-sprintf-2.c: Adjust scanned pattern.
>         * gcc.dg/tree-ssa/dump-2.c: Likewise.
>         * gcc.dg/tree-ssa/vrp101.c: Likewise.
> ---
>  gcc/gimple-pretty-print.c                         | 22 ++++++++++++++--------
>  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-2.c |  4 ++--
>  gcc/testsuite/gcc.dg/tree-ssa/dump-2.c            |  2 +-
>  gcc/testsuite/gcc.dg/tree-ssa/vrp101.c            |  2 +-
>  4 files changed, 18 insertions(+), 12 deletions(-)
>
>
Jan Hubicka June 16, 2017, 11:38 a.m. UTC | #2
> Hi.
> 
> This is pre-approved patch that displays edge counts in dump files:
> 
> ...
>   _85 = _83 + _84;
>   len_86 = SQRT (_85);
>   if (_85 u>= 0.0)
>     goto <bb 6>; [99.00%] [count: 778568]
>   else
>     goto <bb 5>; [1.00%] [count: 7864]
> 
>   <bb 5> [0.01%] [count: 7864]:
>   sqrt (_85);
> ...
> 
> That makes it possible to understand why a profile mismatch happens.
> Patch can bootstrap on ppc64le-redhat-linux and survives regression tests.
> 
> Martin
> 
> gcc/ChangeLog:
> 
> 2017-06-12  Martin Liska  <mliska@suse.cz>
> 
> 	* gimple-pretty-print.c (dump_probability): Add new argument.
> 	(dump_edge_probability): Dump both probability and count.
> 	(dump_gimple_label): Likewise.
> 	(dump_gimple_bb_header): Likewise.
> 
> gcc/testsuite/ChangeLog:
> 
> 2017-06-12  Martin Liska  <mliska@suse.cz>
> 
> 	* gcc.dg/tree-ssa/builtin-sprintf-2.c: Adjust scanned pattern.
> 	* gcc.dg/tree-ssa/dump-2.c: Likewise.
> 	* gcc.dg/tree-ssa/vrp101.c: Likewise.

OK 
Honza
> ---
>  gcc/gimple-pretty-print.c                         | 22 ++++++++++++++--------
>  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-2.c |  4 ++--
>  gcc/testsuite/gcc.dg/tree-ssa/dump-2.c            |  2 +-
>  gcc/testsuite/gcc.dg/tree-ssa/vrp101.c            |  2 +-
>  4 files changed, 18 insertions(+), 12 deletions(-)
> 
> 

> diff --git a/gcc/gimple-pretty-print.c b/gcc/gimple-pretty-print.c
> index 5ff63a167a1..447921be036 100644
> --- a/gcc/gimple-pretty-print.c
> +++ b/gcc/gimple-pretty-print.c
> @@ -80,17 +80,22 @@ debug_gimple_stmt (gimple *gs)
>     by xstrdup_for_dump.  */
>  
>  static const char *
> -dump_probability (int value)
> +dump_probability (int frequency, profile_count &count)
>  {
>    float minimum = 0.01f;
>  
> -  gcc_assert (0 <= value && value <= REG_BR_PROB_BASE);
> -  float fvalue = value * 100.0f / REG_BR_PROB_BASE;
> -  if (fvalue < minimum && value > 0)
> +  gcc_assert (0 <= frequency && frequency <= REG_BR_PROB_BASE);
> +  float fvalue = frequency * 100.0f / REG_BR_PROB_BASE;
> +  if (fvalue < minimum && frequency > 0)
>      return "[0.01%]";
>  
>    char *buf;
> -  asprintf (&buf, "[%.2f%%]", fvalue);
> +  if (count.initialized_p ())
> +    asprintf (&buf, "[%.2f%%] [count: %" PRId64 "]", fvalue,
> +	      count.to_gcov_type ());
> +  else
> +    asprintf (&buf, "[%.2f%%] [count: INV]", fvalue);
> +
>    const char *ret = xstrdup_for_dump (buf);
>    free (buf);
>  
> @@ -102,7 +107,7 @@ dump_probability (int value)
>  static void
>  dump_edge_probability (pretty_printer *buffer, edge e)
>  {
> -  pp_scalar (buffer, " %s", dump_probability (e->probability));
> +  pp_scalar (buffer, " %s", dump_probability (e->probability, e->count));
>  }
>  
>  /* Print GIMPLE statement G to FILE using SPC indentation spaces and
> @@ -1085,7 +1090,7 @@ dump_gimple_label (pretty_printer *buffer, glabel *gs, int spc,
>        dump_generic_node (buffer, label, spc, flags, false);
>        basic_block bb = gimple_bb (gs);
>        if (bb && !(flags & TDF_GIMPLE))
> -	pp_scalar (buffer, " %s", dump_probability (bb->frequency));
> +	pp_scalar (buffer, " %s", dump_probability (bb->frequency, bb->count));
>        pp_colon (buffer);
>      }
>    if (flags & TDF_GIMPLE)
> @@ -2665,7 +2670,8 @@ dump_gimple_bb_header (FILE *outf, basic_block bb, int indent,
>  	    fprintf (outf, "%*sbb_%d:\n", indent, "", bb->index);
>  	  else
>  	    fprintf (outf, "%*s<bb %d> %s:\n",
> -		     indent, "", bb->index, dump_probability (bb->frequency));
> +		     indent, "", bb->index, dump_probability (bb->frequency,
> +							      bb->count));
>  	}
>      }
>  }
> diff --git a/gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-2.c b/gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-2.c
> index 8a13f33d2a1..e15d88b7341 100644
> --- a/gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-2.c
> +++ b/gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-2.c
> @@ -290,7 +290,7 @@ RNG (0,  6,   8, "%s%ls", "1", L"2");
>  
>  /*  Only conditional calls to must_not_eliminate must be made (with
>      any probability):
> -    { dg-final { scan-tree-dump-times "> \\\[\[0-9.\]+%\\\]:\n *must_not_eliminate" 127 "optimized" { target { ilp32 || lp64 } } } }
> -    { dg-final { scan-tree-dump-times "> \\\[\[0-9.\]+%\\\]:\n *must_not_eliminate" 96 "optimized" { target { { ! ilp32 } && { ! lp64 } } } } }
> +    { dg-final { scan-tree-dump-times "> \\\[\[0-9.\]+%\\\]\\ \\\[count:\\[^:\\]*\\\]:\n *must_not_eliminate" 127 "optimized" { target { ilp32 || lp64 } } } }
> +    { dg-final { scan-tree-dump-times "> \\\[\[0-9.\]+%\\\]\\ \\\[count:\\[^:\\]*\\\]:\n *must_not_eliminate" 96 "optimized" { target { { ! ilp32 } && { ! lp64 } } } } }
>      No unconditional calls to abort should be made:
>      { dg-final { scan-tree-dump-not ";\n *must_not_eliminate" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/tree-ssa/dump-2.c b/gcc/testsuite/gcc.dg/tree-ssa/dump-2.c
> index 8a63af4e0ef..6ae2ef5bf39 100644
> --- a/gcc/testsuite/gcc.dg/tree-ssa/dump-2.c
> +++ b/gcc/testsuite/gcc.dg/tree-ssa/dump-2.c
> @@ -6,4 +6,4 @@ int f(void)
>    return 0;
>  }
>  
> -/* { dg-final { scan-tree-dump "<bb \[0-9\]> \\\[100\\\.00%\\\]:" "optimized" } } */
> +/* { dg-final { scan-tree-dump "<bb \[0-9\]> \\\[100\\\.00%\\\] \\\[count: INV\\\]:" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/tree-ssa/vrp101.c b/gcc/testsuite/gcc.dg/tree-ssa/vrp101.c
> index bf4109f7156..e7cad289763 100644
> --- a/gcc/testsuite/gcc.dg/tree-ssa/vrp101.c
> +++ b/gcc/testsuite/gcc.dg/tree-ssa/vrp101.c
> @@ -10,4 +10,4 @@ int main ()
>    return 0;
>  }
>  
> -/* { dg-final { scan-tree-dump "<bb 2> \\\[\[0-9.\]+%\\\]:\[\n\r \]*return 0;" "optimized" } } */
> +/* { dg-final { scan-tree-dump "<bb 2> \\\[\[0-9.\]+%\\\] \\\[count: \\[^:\\]*\\\]:\[\n\r \]*return 0;" "optimized" } } */
>
diff mbox

Patch

diff --git a/gcc/gimple-pretty-print.c b/gcc/gimple-pretty-print.c
index 5ff63a167a1..447921be036 100644
--- a/gcc/gimple-pretty-print.c
+++ b/gcc/gimple-pretty-print.c
@@ -80,17 +80,22 @@  debug_gimple_stmt (gimple *gs)
    by xstrdup_for_dump.  */
 
 static const char *
-dump_probability (int value)
+dump_probability (int frequency, profile_count &count)
 {
   float minimum = 0.01f;
 
-  gcc_assert (0 <= value && value <= REG_BR_PROB_BASE);
-  float fvalue = value * 100.0f / REG_BR_PROB_BASE;
-  if (fvalue < minimum && value > 0)
+  gcc_assert (0 <= frequency && frequency <= REG_BR_PROB_BASE);
+  float fvalue = frequency * 100.0f / REG_BR_PROB_BASE;
+  if (fvalue < minimum && frequency > 0)
     return "[0.01%]";
 
   char *buf;
-  asprintf (&buf, "[%.2f%%]", fvalue);
+  if (count.initialized_p ())
+    asprintf (&buf, "[%.2f%%] [count: %" PRId64 "]", fvalue,
+	      count.to_gcov_type ());
+  else
+    asprintf (&buf, "[%.2f%%] [count: INV]", fvalue);
+
   const char *ret = xstrdup_for_dump (buf);
   free (buf);
 
@@ -102,7 +107,7 @@  dump_probability (int value)
 static void
 dump_edge_probability (pretty_printer *buffer, edge e)
 {
-  pp_scalar (buffer, " %s", dump_probability (e->probability));
+  pp_scalar (buffer, " %s", dump_probability (e->probability, e->count));
 }
 
 /* Print GIMPLE statement G to FILE using SPC indentation spaces and
@@ -1085,7 +1090,7 @@  dump_gimple_label (pretty_printer *buffer, glabel *gs, int spc,
       dump_generic_node (buffer, label, spc, flags, false);
       basic_block bb = gimple_bb (gs);
       if (bb && !(flags & TDF_GIMPLE))
-	pp_scalar (buffer, " %s", dump_probability (bb->frequency));
+	pp_scalar (buffer, " %s", dump_probability (bb->frequency, bb->count));
       pp_colon (buffer);
     }
   if (flags & TDF_GIMPLE)
@@ -2665,7 +2670,8 @@  dump_gimple_bb_header (FILE *outf, basic_block bb, int indent,
 	    fprintf (outf, "%*sbb_%d:\n", indent, "", bb->index);
 	  else
 	    fprintf (outf, "%*s<bb %d> %s:\n",
-		     indent, "", bb->index, dump_probability (bb->frequency));
+		     indent, "", bb->index, dump_probability (bb->frequency,
+							      bb->count));
 	}
     }
 }
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-2.c b/gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-2.c
index 8a13f33d2a1..e15d88b7341 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-2.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-2.c
@@ -290,7 +290,7 @@  RNG (0,  6,   8, "%s%ls", "1", L"2");
 
 /*  Only conditional calls to must_not_eliminate must be made (with
     any probability):
-    { dg-final { scan-tree-dump-times "> \\\[\[0-9.\]+%\\\]:\n *must_not_eliminate" 127 "optimized" { target { ilp32 || lp64 } } } }
-    { dg-final { scan-tree-dump-times "> \\\[\[0-9.\]+%\\\]:\n *must_not_eliminate" 96 "optimized" { target { { ! ilp32 } && { ! lp64 } } } } }
+    { dg-final { scan-tree-dump-times "> \\\[\[0-9.\]+%\\\]\\ \\\[count:\\[^:\\]*\\\]:\n *must_not_eliminate" 127 "optimized" { target { ilp32 || lp64 } } } }
+    { dg-final { scan-tree-dump-times "> \\\[\[0-9.\]+%\\\]\\ \\\[count:\\[^:\\]*\\\]:\n *must_not_eliminate" 96 "optimized" { target { { ! ilp32 } && { ! lp64 } } } } }
     No unconditional calls to abort should be made:
     { dg-final { scan-tree-dump-not ";\n *must_not_eliminate" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/dump-2.c b/gcc/testsuite/gcc.dg/tree-ssa/dump-2.c
index 8a63af4e0ef..6ae2ef5bf39 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/dump-2.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/dump-2.c
@@ -6,4 +6,4 @@  int f(void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump "<bb \[0-9\]> \\\[100\\\.00%\\\]:" "optimized" } } */
+/* { dg-final { scan-tree-dump "<bb \[0-9\]> \\\[100\\\.00%\\\] \\\[count: INV\\\]:" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/vrp101.c b/gcc/testsuite/gcc.dg/tree-ssa/vrp101.c
index bf4109f7156..e7cad289763 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/vrp101.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/vrp101.c
@@ -10,4 +10,4 @@  int main ()
   return 0;
 }
 
-/* { dg-final { scan-tree-dump "<bb 2> \\\[\[0-9.\]+%\\\]:\[\n\r \]*return 0;" "optimized" } } */
+/* { dg-final { scan-tree-dump "<bb 2> \\\[\[0-9.\]+%\\\] \\\[count: \\[^:\\]*\\\]:\[\n\r \]*return 0;" "optimized" } } */