]> gcc.gnu.org Git - gcc.git/commitdiff
expr.c (store_expr): Use clear_storage instead of direct memset libcall.
authorJan Hubicka <jh@suse.cz>
Thu, 27 Apr 2000 14:13:48 +0000 (14:13 +0000)
committerJan Hubicka <hubicka@gcc.gnu.org>
Thu, 27 Apr 2000 14:13:48 +0000 (14:13 +0000)
* expr.c (store_expr): Use clear_storage instead of direct memset
libcall.

From-SVN: r33484

gcc/ChangeLog
gcc/expr.c

index a642eb6768571e232f9c19bffd0de5934aee4a03..e2063af643bf77ba05ae91277311e567eae15015 100644 (file)
@@ -1,3 +1,8 @@
+Thu Apr 27 16:11:00 MET DST 2000  Jan Hubicka  <jh@suse.cz>
+
+       * expr.c (store_expr): Use clear_storage instead of direct memset
+       libcall.
+
 Thu Apr 27 10:36:51 2000  Alexandre Oliva  <aoliva@cygnus.com>
 
        * config/mn10300/mn10300.c (mn10300_address_cost): Test
index fa249bbddcd6c95cbf7b74230d0e5b98e23d1c18..a0b8465cab8ed813b5287d2ca8a12f82cc75dd9a 100644 (file)
@@ -3933,6 +3933,7 @@ store_expr (exp, target, want_value)
                = size_binop (MIN_EXPR,
                              make_tree (sizetype, size),
                              size_int (TREE_STRING_LENGTH (exp)));
+             int align = TYPE_ALIGN (TREE_TYPE (exp));
              rtx copy_size_rtx = expand_expr (copy_size, NULL_RTX,
                                               VOIDmode, 0);
              rtx label = 0;
@@ -3951,6 +3952,9 @@ store_expr (exp, target, want_value)
                {
                  addr = plus_constant (addr, TREE_STRING_LENGTH (exp));
                  size = plus_constant (size, - TREE_STRING_LENGTH (exp));
+                 align = MIN (align, (BITS_PER_UNIT
+                                      * (INTVAL (copy_size_rtx)
+                                         & - INTVAL (copy_size_rtx))));
                }
              else
                {
@@ -3963,10 +3967,12 @@ store_expr (exp, target, want_value)
                                       copy_size_rtx, NULL_RTX, 0,
                                       OPTAB_LIB_WIDEN);
 
+                 align = BITS_PER_UNIT;
                  label = gen_label_rtx ();
                  emit_cmp_and_jump_insns (size, const0_rtx, LT, NULL_RTX,
                                           GET_MODE (size), 0, 0, label);
                }
+             align = MIN (align, expr_align (copy_size));
 
              if (size != const0_rtx)
                {
@@ -3977,22 +3983,7 @@ store_expr (exp, target, want_value)
                                       size, TYPE_MODE (sizetype),
                                       GEN_INT (MEMORY_USE_WO), 
                                       TYPE_MODE (integer_type_node));
-#ifdef TARGET_MEM_FUNCTIONS
-                 emit_library_call (memset_libfunc, 0, VOIDmode, 3,
-                                    addr, ptr_mode,
-                                    const0_rtx, TYPE_MODE (integer_type_node),
-                                    convert_to_mode (TYPE_MODE (sizetype),
-                                                     size,
-                                                     TREE_UNSIGNED (sizetype)),
-                                    TYPE_MODE (sizetype));
-#else
-                 emit_library_call (bzero_libfunc, 0, VOIDmode, 2,
-                                    addr, ptr_mode,
-                                    convert_to_mode (TYPE_MODE (integer_type_node),
-                                                     size,
-                                                     TREE_UNSIGNED (integer_type_node)),
-                                    TYPE_MODE (integer_type_node));
-#endif
+                 clear_storage (gen_rtx_MEM (BLKmode, addr), size, align);
                }
 
              if (label)
This page took 0.108089 seconds and 5 git commands to generate.