Message ID | f776d98c-d5db-edd7-54b8-995b3eb08a19@suse.cz |
---|---|
State | New |
Headers | show |
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(-) > >
> 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 --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" } } */