[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