> Hi.
> 
> As requested in the PR, I would like to add value profiling for
> BUILT_IN_MEMMOVE.
> 
> 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>
> 
>         PR value-prof/35543
>       * value-prof.c (interesting_stringop_to_profile_p):
>         Simplify the code and add BUILT_IN_MEMMOVE.
>       (gimple_stringops_transform): Likewise.
OK, thanks!
We have other builtins that may fold into string function which we expand
internally (str variants comes to mind) perhaps they could be instrumented,
too.

Honza
> 
> gcc/testsuite/ChangeLog:
> 
> 2018-07-31  Martin Liska  <mli...@suse.cz>
> 
>         PR value-prof/35543
>       * gcc.dg/tree-prof/val-prof-7.c: Add __builtin_memmove.
> ---
>  gcc/testsuite/gcc.dg/tree-prof/val-prof-7.c | 10 ++++++++++
>  gcc/value-prof.c                            |  8 +++-----
>  2 files changed, 13 insertions(+), 5 deletions(-)
> 
> 

> 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 c9303e053ee..bb9dd210eec 100644
> --- a/gcc/testsuite/gcc.dg/tree-prof/val-prof-7.c
> +++ b/gcc/testsuite/gcc.dg/tree-prof/val-prof-7.c
> @@ -23,6 +23,11 @@ __attribute__((noinline)) \
>  void memset_test_ ## N (int len) \
>  { \
>    __builtin_memset (buffer1, 'c', len); \
> +} \
> +__attribute__((noinline)) \
> +void memmove_test_ ## N (int len) \
> +{ \
> +  __builtin_memmove (buffer1, buffer2, len); \
>  } \
>   \
>  void test_stringops_ ## N(int len) \
> @@ -30,6 +35,7 @@ void test_stringops_ ## N(int len) \
>    memcpy_test_## N (len); \
>    mempcpy_test_ ## N (len); \
>    memset_test_ ## N (len); \
> +  memmove_test_ ## N (len); \
>  } \
>   \
>  void test_stringops_with_values_ ## N (int common, int not_common) \
> @@ -70,3 +76,7 @@ int main() {
>  /* { 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 "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" } } */
> diff --git a/gcc/value-prof.c b/gcc/value-prof.c
> index 77d4849d5b1..a7c4be7a7d8 100644
> --- a/gcc/value-prof.c
> +++ b/gcc/value-prof.c
> @@ -1527,14 +1527,11 @@ interesting_stringop_to_profile_p (gcall *call, int 
> *size_arg)
>    enum built_in_function fcode;
>  
>    fcode = DECL_FUNCTION_CODE (gimple_call_fndecl (call));
> -  if (fcode != BUILT_IN_MEMCPY && fcode != BUILT_IN_MEMPCPY
> -      && fcode != BUILT_IN_MEMSET && fcode != BUILT_IN_BZERO)
> -    return false;
> -
>    switch (fcode)
>      {
>       case BUILT_IN_MEMCPY:
>       case BUILT_IN_MEMPCPY:
> +     case BUILT_IN_MEMMOVE:
>         *size_arg = 2;
>         return validate_gimple_arglist (call, POINTER_TYPE, POINTER_TYPE,
>                                      INTEGER_TYPE, VOID_TYPE);
> @@ -1547,7 +1544,7 @@ interesting_stringop_to_profile_p (gcall *call, int 
> *size_arg)
>         return validate_gimple_arglist (call, POINTER_TYPE, INTEGER_TYPE,
>                                      VOID_TYPE);
>       default:
> -       gcc_unreachable ();
> +       return false;
>      }
>  }
>  
> @@ -1710,6 +1707,7 @@ gimple_stringops_transform (gimple_stmt_iterator *gsi)
>      {
>      case BUILT_IN_MEMCPY:
>      case BUILT_IN_MEMPCPY:
> +    case BUILT_IN_MEMMOVE:
>        src = gimple_call_arg (stmt, 1);
>        src_align = get_pointer_alignment (src);
>        if (!can_move_by_pieces (val, MIN (dest_align, src_align)))
> 

Reply via email to