> Hi. > > This is format clean-up of value transformations that can happen. > It makes it easier to grep them and find how many were actually > applied. > > Patch can bootstrap on x86_64-linux-gnu and survives regression tests. > > Ready to be installed? > Martin > > gcc/ChangeLog: > > 2018-07-31 Martin Liska <mli...@suse.cz> > > * value-prof.c (gimple_divmod_fixed_value_transform): Unify > format how successful transformation is dumped. > (gimple_mod_pow2_value_transform): Likewise. > (gimple_mod_subtract_transform): Likewise. > (gimple_stringops_transform): Likewise.
OK, thanks! Honza > > gcc/testsuite/ChangeLog: > > 2018-07-31 Martin Liska <mli...@suse.cz> > > * gcc.dg/tree-prof/stringop-1.c: Adjust scanned pattern. > * gcc.dg/tree-prof/stringop-2.c: Likewise. > * gcc.dg/tree-prof/val-prof-1.c: Likewise. > * gcc.dg/tree-prof/val-prof-2.c: Likewise. > * gcc.dg/tree-prof/val-prof-3.c: Likewise. > * gcc.dg/tree-prof/val-prof-4.c: Likewise. > * gcc.dg/tree-prof/val-prof-5.c: Likewise. > * gcc.dg/tree-prof/val-prof-7.c: Likewise. > --- > gcc/testsuite/gcc.dg/tree-prof/stringop-1.c | 2 +- > gcc/testsuite/gcc.dg/tree-prof/stringop-2.c | 2 +- > gcc/testsuite/gcc.dg/tree-prof/val-prof-1.c | 2 +- > gcc/testsuite/gcc.dg/tree-prof/val-prof-2.c | 2 +- > gcc/testsuite/gcc.dg/tree-prof/val-prof-3.c | 2 +- > gcc/testsuite/gcc.dg/tree-prof/val-prof-4.c | 2 +- > gcc/testsuite/gcc.dg/tree-prof/val-prof-5.c | 2 +- > gcc/testsuite/gcc.dg/tree-prof/val-prof-7.c | 24 ++++++++--------- > gcc/value-prof.c | 29 +++++++-------------- > 9 files changed, 28 insertions(+), 39 deletions(-) > > > diff --git a/gcc/testsuite/gcc.dg/tree-prof/stringop-1.c > b/gcc/testsuite/gcc.dg/tree-prof/stringop-1.c > index 6f8908a3431..d75b2548dbc 100644 > --- a/gcc/testsuite/gcc.dg/tree-prof/stringop-1.c > +++ b/gcc/testsuite/gcc.dg/tree-prof/stringop-1.c > @@ -15,7 +15,7 @@ main() > return 0; > } > /* autofdo doesn't support value profiling for now: */ > -/* { dg-final-use-not-autofdo { scan-ipa-dump "Single value 4 stringop" > "profile"} } */ > +/* { dg-final-use-not-autofdo { scan-ipa-dump "Transformation done: single > value 4 stringop" "profile"} } */ > /* Really this ought to simplify into assignment, but we are not there yet. > */ > /* a[0] = b[0] is what we fold the resulting memcpy into. */ > /* { dg-final-use-not-autofdo { scan-tree-dump " = MEM.*&b" "optimized"} } */ > diff --git a/gcc/testsuite/gcc.dg/tree-prof/stringop-2.c > b/gcc/testsuite/gcc.dg/tree-prof/stringop-2.c > index 330b159b7fc..3242cf5b8a2 100644 > --- a/gcc/testsuite/gcc.dg/tree-prof/stringop-2.c > +++ b/gcc/testsuite/gcc.dg/tree-prof/stringop-2.c > @@ -20,6 +20,6 @@ main() > return 0; > } > /* autofdo doesn't support value profiling for now: */ > -/* { dg-final-use-not-autofdo { scan-ipa-dump "Single value 4 stringop" > "profile"} } */ > +/* { dg-final-use-not-autofdo { scan-ipa-dump "Transformation done: single > value 4 stringop" "profile"} } */ > /* The versioned memset of size 4 should be optimized to an assignment. */ > /* { dg-final-use-not-autofdo { scan-tree-dump "MEM\\\[\\(void .\\)&a\\\] = > 168430090" "optimized"} } */ > diff --git a/gcc/testsuite/gcc.dg/tree-prof/val-prof-1.c > b/gcc/testsuite/gcc.dg/tree-prof/val-prof-1.c > index 35e0f908f24..492c4c1c4b2 100644 > --- a/gcc/testsuite/gcc.dg/tree-prof/val-prof-1.c > +++ b/gcc/testsuite/gcc.dg/tree-prof/val-prof-1.c > @@ -17,6 +17,6 @@ main () > return 0; > } > /* autofdo does not do value profiling so far */ > -/* { dg-final-use-not-autofdo { scan-ipa-dump "Div.mod by constant > n_\[0-9\]*=257 transformation on insn" "profile"} } */ > +/* { dg-final-use-not-autofdo { scan-ipa-dump "Transformation done: div.mod > by constant 257" "profile"} } */ > /* { dg-final-use-not-autofdo { scan-tree-dump "if \\(n_\[0-9\]* != 257\\)" > "optimized"} } */ > /* { dg-final-use { scan-tree-dump-not "Invalid sum" "optimized"} } */ > diff --git a/gcc/testsuite/gcc.dg/tree-prof/val-prof-2.c > b/gcc/testsuite/gcc.dg/tree-prof/val-prof-2.c > index ad78043ddd6..8cb3c64fd17 100644 > --- a/gcc/testsuite/gcc.dg/tree-prof/val-prof-2.c > +++ b/gcc/testsuite/gcc.dg/tree-prof/val-prof-2.c > @@ -25,7 +25,7 @@ main () > return 0; > } > /* autofdo does not do value profiling so far */ > -/* { dg-final-use-not-autofdo { scan-ipa-dump "Mod power of 2 transformation > on insn" "profile" } } */ > +/* { dg-final-use-not-autofdo { scan-ipa-dump "Transformation done: mod > power of 2" "profile" } } */ > /* This is part of code checking that n is power of 2, so we are sure that > the transformation > didn't get optimized out. */ > /* { dg-final-use-not-autofdo { scan-tree-dump "n_\[0-9\]* \\+ > (4294967295|0x0*ffffffff)" "optimized"} } */ > diff --git a/gcc/testsuite/gcc.dg/tree-prof/val-prof-3.c > b/gcc/testsuite/gcc.dg/tree-prof/val-prof-3.c > index 366ada1fa22..60953d09b15 100644 > --- a/gcc/testsuite/gcc.dg/tree-prof/val-prof-3.c > +++ b/gcc/testsuite/gcc.dg/tree-prof/val-prof-3.c > @@ -25,7 +25,7 @@ main () > return 0; > } > /* autofdo does not do value profiling so far */ > -/* { dg-final-use-not-autofdo { scan-ipa-dump "Mod subtract transformation > on insn" "profile" } } */ > +/* { dg-final-use-not-autofdo { scan-ipa-dump "Transformation done: mod > subtract" "profile" } } */ > /* This is part of code checking that n is greater than the divisor so we > are sure that it > didn't get optimized out. */ > /* { dg-final-use-not-autofdo { scan-tree-dump "if \\(_\[0-9\]* \\< > n_\[0-9\]*" "optimized"} } */ > diff --git a/gcc/testsuite/gcc.dg/tree-prof/val-prof-4.c > b/gcc/testsuite/gcc.dg/tree-prof/val-prof-4.c > index 374428e720e..50ae2de792a 100644 > --- a/gcc/testsuite/gcc.dg/tree-prof/val-prof-4.c > +++ b/gcc/testsuite/gcc.dg/tree-prof/val-prof-4.c > @@ -25,7 +25,7 @@ main () > return 0; > } > /* autofdo does not do value profiling so far */ > -/* { dg-final-use-not-autofdo { scan-ipa-dump "Mod subtract transformation > on insn" "profile" } } */ > +/* { dg-final-use-not-autofdo { scan-ipa-dump "Transformation done: mod > subtract" "profile" } } */ > /* This is part of code checking that n is greater than the divisor so we > are sure that it > didn't get optimized out. */ > /* { dg-final-use-not-autofdo { scan-tree-dump "if \\(n_\[0-9\]* \\>" > "optimized"} } */ > diff --git a/gcc/testsuite/gcc.dg/tree-prof/val-prof-5.c > b/gcc/testsuite/gcc.dg/tree-prof/val-prof-5.c > index 7f4a15b7786..80eb3205a4f 100644 > --- a/gcc/testsuite/gcc.dg/tree-prof/val-prof-5.c > +++ b/gcc/testsuite/gcc.dg/tree-prof/val-prof-5.c > @@ -13,5 +13,5 @@ main() > return 0; > } > /* autofdo does not do value profiling so far */ > -/* { dg-final-use-not-autofdo { scan-ipa-dump "Div.mod by constant b.*=997 > transformation on insn" "profile" } } */ > +/* { dg-final-use-not-autofdo { scan-ipa-dump "Transformation done: div.mod > by constant 997" "profile" } } */ > /* { dg-final-use { scan-tree-dump-not "Invalid sum" "optimized"} } */ > diff --git a/gcc/testsuite/gcc.dg/tree-prof/val-prof-7.c > b/gcc/testsuite/gcc.dg/tree-prof/val-prof-7.c > index bb9dd210eec..18b2b2590ac 100644 > --- a/gcc/testsuite/gcc.dg/tree-prof/val-prof-7.c > +++ b/gcc/testsuite/gcc.dg/tree-prof/val-prof-7.c > @@ -65,18 +65,18 @@ int main() { > return 0; > } > > -/* { dg-final-use-not-autofdo { scan-ipa-dump "Single value 8 stringop > transformation on __builtin_memcpy" "profile" } } */ > -/* { dg-final-use-not-autofdo { scan-ipa-dump "Single value 55 stringop > transformation on __builtin_memcpy" "profile" } } */ > -/* { dg-final-use-not-autofdo { scan-ipa-dump-times "Single value 32 > stringop transformation on __builtin_memcpy" 0 "profile" } } */ > +/* { dg-final-use-not-autofdo { scan-ipa-dump "Transformation done: single > value 8 stringop for BUILT_IN_MEMCPY" "profile" } } */ > +/* { dg-final-use-not-autofdo { scan-ipa-dump "Transformation done: single > value 55 stringop for BUILT_IN_MEMCPY" "profile" } } */ > +/* { dg-final-use-not-autofdo { scan-ipa-dump-times "Transformation done: > single value 32 stringop for BUILT_IN_MEMCPY" 0 "profile" } } */ > > -/* { dg-final-use-not-autofdo { scan-ipa-dump "Single value 8 stringop > transformation on __builtin_mempcpy" "profile" } } */ > -/* { dg-final-use-not-autofdo { scan-ipa-dump "Single value 55 stringop > transformation on __builtin_mempcpy" "profile" } } */ > -/* { dg-final-use-not-autofdo { scan-ipa-dump-times "Single value 32 > stringop transformation on __builtin_mempcpy" 0 "profile" } } */ > +/* { dg-final-use-not-autofdo { scan-ipa-dump "Transformation done: single > value 8 stringop for BUILT_IN_MEMPCPY" "profile" } } */ > +/* { dg-final-use-not-autofdo { scan-ipa-dump "Transformation done: single > value 55 stringop for BUILT_IN_MEMPCPY" "profile" } } */ > +/* { dg-final-use-not-autofdo { scan-ipa-dump-times "Transformation done: > single value 32 stringop for BUILT_IN_MEMPCPY" 0 "profile" } } */ > > -/* { dg-final-use-not-autofdo { scan-ipa-dump "Single value 8 stringop > transformation on __builtin_memset" "profile" } } */ > -/* { dg-final-use-not-autofdo { scan-ipa-dump "Single value 55 stringop > transformation on __builtin_memset" "profile" } } */ > -/* { dg-final-use-not-autofdo { scan-ipa-dump-times "Single value 32 > stringop transformation on __builtin_memset" 0 "profile" } } */ > +/* { dg-final-use-not-autofdo { scan-ipa-dump "Transformation done: single > value 8 stringop for BUILT_IN_MEMSET" "profile" } } */ > +/* { dg-final-use-not-autofdo { scan-ipa-dump "Transformation done: single > value 55 stringop for BUILT_IN_MEMSET" "profile" } } */ > +/* { dg-final-use-not-autofdo { scan-ipa-dump-times "Transformation done: > single value 32 stringop for BUILT_IN_MEMSET" 0 "profile" } } */ > > -/* { dg-final-use-not-autofdo { scan-ipa-dump "Single value 8 stringop > transformation on __builtin_memmove" "profile" } } */ > -/* { dg-final-use-not-autofdo { scan-ipa-dump "Single value 55 stringop > transformation on __builtin_memmove" "profile" } } */ > -/* { dg-final-use-not-autofdo { scan-ipa-dump-times "Single value 32 > stringop transformation on __builtin_memmove" 0 "profile" } } */ > +/* { dg-final-use-not-autofdo { scan-ipa-dump "Transformation done: single > value 8 stringop for BUILT_IN_MEMMOVE" "profile" } } */ > +/* { dg-final-use-not-autofdo { scan-ipa-dump "Transformation done: single > value 55 stringop for BUILT_IN_MEMMOVE" "profile" } } */ > +/* { dg-final-use-not-autofdo { scan-ipa-dump-times "Transformation done: > single value 32 stringop for BUILT_IN_MEMMOVE" 0 "profile" } } */ > diff --git a/gcc/value-prof.c b/gcc/value-prof.c > index 416eea18ae1..d1c69b9bc1e 100644 > --- a/gcc/value-prof.c > +++ b/gcc/value-prof.c > @@ -727,12 +727,9 @@ gimple_divmod_fixed_value_transform > (gimple_stmt_iterator *si) > > if (dump_file) > { > - fprintf (dump_file, "Div/mod by constant "); > - print_generic_expr (dump_file, value, TDF_SLIM); > - fprintf (dump_file, "="); > + fprintf (dump_file, "Transformation done: div/mod by constant "); > print_generic_expr (dump_file, tree_val, TDF_SLIM); > - fprintf (dump_file, " transformation on insn "); > - print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM); > + fprintf (dump_file, "\n"); > } > > gimple_assign_set_rhs_from_tree (si, result); > @@ -860,18 +857,15 @@ gimple_mod_pow2_value_transform (gimple_stmt_iterator > *si) > || optimize_bb_for_size_p (gimple_bb (stmt))) > return false; > > - if (dump_file) > - { > - fprintf (dump_file, "Mod power of 2 transformation on insn "); > - print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM); > - } > - > /* Compute probability of taking the optimal path. */ > all = count + wrong_values; > > if (check_counter (stmt, "pow2", &count, &all, gimple_bb (stmt)->count)) > return false; > > + if (dump_file) > + fprintf (dump_file, "Transformation done: mod power of 2\n"); > + > if (all > 0) > prob = profile_probability::probability_in_gcov_type (count, all); > else > @@ -1051,10 +1045,7 @@ gimple_mod_subtract_transform (gimple_stmt_iterator > *si) > return false; > > if (dump_file) > - { > - fprintf (dump_file, "Mod subtract transformation on insn "); > - print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM); > - } > + fprintf (dump_file, "Transformation done: mod subtract\n"); > > /* Compute probability of taking the optimal path(s). */ > if (all > 0) > @@ -1637,11 +1628,9 @@ gimple_stringops_transform (gimple_stmt_iterator *gsi) > } > > if (dump_file) > - { > - fprintf (dump_file, "Single value %i stringop transformation on ", > - (int)val); > - print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM); > - } > + fprintf (dump_file, > + "Transformation done: single value %i stringop for %s\n", > + (int)val, built_in_names[(int)fcode]); > > gimple_stringop_fixed_value (stmt, tree_val, prob, count, all); > >