aboutsummaryrefslogtreecommitdiff
path: root/gcc/value-prof.c
diff options
context:
space:
mode:
authorMartin Liska <mliska@suse.cz>2018-08-01 12:21:49 +0200
committerMartin Liska <marxin@gcc.gnu.org>2018-08-01 10:21:49 +0000
commit181f2e99d142db78be636becfe6966fdbef61cb8 (patch)
tree0d354dc225c4450a7c650abe655f83e23517f035 /gcc/value-prof.c
parent00d29b97d9ed9af957f896b8279ae85d2e16deb4 (diff)
downloadgcc-181f2e99d142db78be636becfe6966fdbef61cb8.zip
gcc-181f2e99d142db78be636becfe6966fdbef61cb8.tar.gz
gcc-181f2e99d142db78be636becfe6966fdbef61cb8.tar.bz2
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
Diffstat (limited to 'gcc/value-prof.c')
-rw-r--r--gcc/value-prof.c8
1 files changed, 3 insertions, 5 deletions
diff --git a/gcc/value-prof.c b/gcc/value-prof.c
index 77d4849..a7c4be7 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)))