[gcc(refs/users/aoliva/heads/testme)] try store by multiple pieces before setmem for testing
Alexandre Oliva
aoliva@gcc.gnu.org
Wed Feb 17 23:27:08 GMT 2021
https://gcc.gnu.org/g:e1c0bfea0ca7e17a3f44fe4fb15f9c7da1305de1
commit e1c0bfea0ca7e17a3f44fe4fb15f9c7da1305de1
Author: Alexandre Oliva <oliva@adacore.com>
Date: Wed Feb 10 21:59:59 2021 +0000
try store by multiple pieces before setmem for testing
Diff:
---
gcc/builtins.c | 26 +++++++++++++++-----------
gcc/expr.c | 8 ++++----
2 files changed, 19 insertions(+), 15 deletions(-)
diff --git a/gcc/builtins.c b/gcc/builtins.c
index df2dc2536df..50e88abe4cf 100644
--- a/gcc/builtins.c
+++ b/gcc/builtins.c
@@ -6836,15 +6836,17 @@ expand_builtin_memset_args (tree dest, tree val, tree len,
builtin_memset_gen_str, val_rtx, dest_align,
true, RETURN_BEGIN);
}
- else if (!set_storage_via_setmem (dest_mem, len_rtx, val_rtx,
- dest_align, expected_align,
- expected_size, min_size, max_size,
- probable_max_size)
+ else if (1
&& !try_store_by_multiple_pieces (dest_mem, len_rtx,
tree_ctz (len),
min_size, max_size,
val_rtx, 0,
- dest_align))
+ dest_align)
+ && !set_storage_via_setmem (dest_mem, len_rtx, val_rtx,
+ dest_align, expected_align,
+ expected_size, min_size, max_size,
+ probable_max_size)
+ )
goto do_libcall;
dest_mem = force_operand (XEXP (dest_mem, 0), NULL_RTX);
@@ -6861,16 +6863,18 @@ expand_builtin_memset_args (tree dest, tree val, tree len,
store_by_pieces (dest_mem, tree_to_uhwi (len),
builtin_memset_read_str, &c, dest_align, true,
RETURN_BEGIN);
- else if (!set_storage_via_setmem (dest_mem, len_rtx,
- gen_int_mode (c, val_mode),
- dest_align, expected_align,
- expected_size, min_size, max_size,
- probable_max_size)
+ else if (1
&& !try_store_by_multiple_pieces (dest_mem, len_rtx,
tree_ctz (len),
min_size, max_size,
NULL_RTX, c,
- dest_align))
+ dest_align)
+ && !set_storage_via_setmem (dest_mem, len_rtx,
+ gen_int_mode (c, val_mode),
+ dest_align, expected_align,
+ expected_size, min_size, max_size,
+ probable_max_size)
+ )
goto do_libcall;
dest_mem = force_operand (XEXP (dest_mem, 0), NULL_RTX);
diff --git a/gcc/expr.c b/gcc/expr.c
index f92e4136f67..36288e82e16 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -3100,14 +3100,14 @@ clear_storage_hints (rtx object, rtx size, enum block_op_methods method,
CLEAR_BY_PIECES,
optimize_insn_for_speed_p ()))
clear_by_pieces (object, INTVAL (size), align);
- else if (set_storage_via_setmem (object, size, const0_rtx, align,
- expected_align, expected_size,
- min_size, max_size, probable_max_size))
- ;
else if (try_store_by_multiple_pieces (object, size, ctz_size,
min_size, max_size,
NULL_RTX, 0, align))
;
+ else if (set_storage_via_setmem (object, size, const0_rtx, align,
+ expected_align, expected_size,
+ min_size, max_size, probable_max_size))
+ ;
else if (ADDR_SPACE_GENERIC_P (MEM_ADDR_SPACE (object)))
return set_storage_via_libcall (object, size, const0_rtx,
method == BLOCK_OP_TAILCALL);
More information about the Gcc-cvs
mailing list