builtins.c (expand_builtin_strlen): Do not call emit_move_insn with a PLUS as source...
authorUlrich Weigand <uweigand@de.ibm.com>
Thu, 30 Sep 2004 01:39:35 +0000 (01:39 +0000)
committerUlrich Weigand <uweigand@gcc.gnu.org>
Thu, 30 Sep 2004 01:39:35 +0000 (01:39 +0000)
* builtins.c (expand_builtin_strlen): Do not call emit_move_insn
with a PLUS as source operand.
(expand_movstr): Likewise.
(expand_builtin_stpcpy): Likewise.

From-SVN: r88322

gcc/ChangeLog
gcc/builtins.c

index c58b388c96a2022cfd68cf7d2c6acb578ef73eab..8f4b3964445db0e133d9b0faa64edb0a62135468 100644 (file)
@@ -1,3 +1,10 @@
+2004-09-29  Ulrich Weigand  <uweigand@de.ibm.com>
+
+       * builtins.c (expand_builtin_strlen): Do not call emit_move_insn
+       with a PLUS as source operand.
+       (expand_movstr): Likewise.
+       (expand_builtin_stpcpy): Likewise.
+
 2004-09-29  Richard Henderson  <rth@redhat.com>
 
        PR 17739
index 1aeae9654017d51631d1ff19eff0da2a9c2aef6e..039110afe45b0de80f6378fe0def737246852472 100644 (file)
@@ -2433,8 +2433,7 @@ expand_builtin_strlen (tree arglist, rtx target,
 
       /* Now that we are assured of success, expand the source.  */
       start_sequence ();
-      pat = memory_address (BLKmode,
-                           expand_expr (src, src_reg, ptr_mode, EXPAND_SUM));
+      pat = expand_expr (src, src_reg, ptr_mode, EXPAND_NORMAL);
       if (pat != src_reg)
        emit_move_insn (src_reg, pat);
       pat = get_insns ();
@@ -3045,8 +3044,10 @@ expand_movstr (tree dest, tree src, rtx target, int endp)
      terminator.  If the caller requested a mempcpy-like return value,
      adjust it.  */
   if (endp == 1 && target != const0_rtx)
-    emit_move_insn (target, plus_constant (gen_lowpart (GET_MODE (target),
-                                                       end), 1));
+    {
+      rtx tem = plus_constant (gen_lowpart (GET_MODE (target), end), 1);
+      emit_move_insn (target, force_operand (tem, NULL_RTX));
+    }
 
   return target;
 }
@@ -3156,9 +3157,8 @@ expand_builtin_stpcpy (tree arglist, rtx target, enum machine_mode mode)
                  if (GET_MODE (target) != GET_MODE (ret))
                    ret = gen_lowpart (GET_MODE (target), ret);
 
-                 ret = emit_move_insn (target,
-                                       plus_constant (ret,
-                                                      INTVAL (len_rtx)));
+                 ret = plus_constant (ret, INTVAL (len_rtx));
+                 ret = emit_move_insn (target, force_operand (ret, NULL_RTX));
                  gcc_assert (ret);
 
                  return target;