> 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 <mli...@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 <mli...@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" } } */ >