Add memmove to value profiling.

2018-08-01  Martin Liska  <mliska@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.
2018-08-01  Martin Liska  <mliska@suse.cz>

        PR value-prof/35543
	* gcc.dg/tree-prof/val-prof-7.c: Add __builtin_memmove.

From-SVN: r263201
This commit is contained in:
Martin Liska 2018-08-01 12:21:49 +02:00 committed by Martin Liska
parent 00d29b97d9
commit 181f2e99d1
4 changed files with 25 additions and 5 deletions

View file

@ -1,3 +1,10 @@
2018-08-01 Martin Liska <mliska@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.
2018-08-01 Sam Tebbs <sam.tebbs@arm.com>
* config/aarch64/aarch64-simd.md

View file

@ -1,3 +1,8 @@
2018-08-01 Martin Liska <mliska@suse.cz>
PR value-prof/35543
* gcc.dg/tree-prof/val-prof-7.c: Add __builtin_memmove.
2018-08-01 Sam Tebbs <sam.tebbs@arm.com>
* gcc.target/aarch64/extract_zero_extend.c: New file.

View file

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

View file

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