rs6000.c (setup_incoming_varargs): Set MEM_NOTRAP_P.
authorDavid Edelsohn <edelsohn@gnu.org>
Fri, 2 Sep 2005 01:52:37 +0000 (01:52 +0000)
committerDavid Edelsohn <dje@gcc.gnu.org>
Fri, 2 Sep 2005 01:52:37 +0000 (21:52 -0400)
        * config/rs6000/rs6000.c (setup_incoming_varargs): Set MEM_NOTRAP_P.
        (rs6000_split_multireg_move): Use replace_equiv_address instead of
        gen_rtx_MEM.

From-SVN: r103760

gcc/ChangeLog
gcc/config/rs6000/rs6000.c

index 2ca4920ac965a4f40c9dc38bb8329216ec973488..bf777a4befecb7affd64ee119be5b5d75864c720 100644 (file)
@@ -1,3 +1,9 @@
+2005-09-01  David Edelsohn  <edelsohn@gnu.org>
+
+       * config/rs6000/rs6000.c (setup_incoming_varargs): Set MEM_NOTRAP_P.
+       (rs6000_split_multireg_move): Use replace_equiv_address instead of
+       gen_rtx_MEM.
+
 2005-09-01  Craig Rodrigues  <rodrigc@gcc.gnu.org>
 
        * c-decl.c (diagnose_mismatched_decls):  With -Wredundant-decls,
index ca58f306d7f2799f948f75051d809677c560de58..43c053288a52cb6c8977e59696acaf0462988362 100644 (file)
@@ -5459,7 +5459,8 @@ setup_incoming_varargs (CUMULATIVE_ARGS *cum, enum machine_mode mode,
 
       mem = gen_rtx_MEM (BLKmode,
                         plus_constant (save_area,
-                                       first_reg_offset * reg_size)),
+                                       first_reg_offset * reg_size));
+      MEM_NOTRAP_P (mem) = 1;
       set_mem_alias_set (mem, set);
       set_mem_align (mem, BITS_PER_WORD);
 
@@ -5494,6 +5495,7 @@ setup_incoming_varargs (CUMULATIVE_ARGS *cum, enum machine_mode mode,
           fregno++, off += UNITS_PER_FP_WORD, nregs++)
        {
          mem = gen_rtx_MEM (DFmode, plus_constant (save_area, off));
+         MEM_NOTRAP_P (mem) = 1;
          set_mem_alias_set (mem, set);
          set_mem_align (mem, GET_MODE_ALIGNMENT (DFmode));
          emit_move_insn (mem, gen_rtx_REG (DFmode, fregno));
@@ -12249,16 +12251,14 @@ rs6000_split_multireg_move (rtx dst, rtx src)
              emit_insn (TARGET_32BIT
                         ? gen_addsi3 (breg, breg, delta_rtx)
                         : gen_adddi3 (breg, breg, delta_rtx));
-             src = gen_rtx_MEM (mode, breg);
+             src = replace_equiv_address (src, breg);
            }
          else if (! offsettable_memref_p (src))
            {
-             rtx newsrc, basereg;
+             rtx basereg;
              basereg = gen_rtx_REG (Pmode, reg);
              emit_insn (gen_rtx_SET (VOIDmode, basereg, XEXP (src, 0)));
-             newsrc = gen_rtx_MEM (GET_MODE (src), basereg);
-             MEM_COPY_ATTRIBUTES (newsrc, src);
-             src = newsrc;
+             src = replace_equiv_address (src, basereg);
            }
 
          breg = XEXP (src, 0);
@@ -12303,7 +12303,7 @@ rs6000_split_multireg_move (rtx dst, rtx src)
                emit_insn (TARGET_32BIT
                           ? gen_addsi3 (breg, breg, delta_rtx)
                           : gen_adddi3 (breg, breg, delta_rtx));
-             dst = gen_rtx_MEM (mode, breg);
+             dst = replace_equiv_address (dst, breg);
            }
          else
            gcc_assert (offsettable_memref_p (dst));