This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Improve dumping of value profiling transformations.


> 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  <mliska@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  <mliska@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);
>  
> 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]