Testing with the shrink-wrapping patch added reveals a problem with the
mips16 "save" insn: sometimes we store registers that shouldn't be
considered saved registers; we have to clear RTX_FRAME_RELATED_P for
these. Testing in progress with mips-elf, "ips16/arch=mips32r2/abi=32"
and some other multilibs. Ok?


Bernd
        * config/mips/mips.c (mips16e_build_save_restore): Clear
        RTX_FRAME_RELATED_P for argument stores stolen from the first
        block.

Index: gcc/config/mips/mips.c
===================================================================
--- gcc/config/mips/mips.c      (revision 178135)
+++ gcc/config/mips/mips.c      (working copy)
@@ -8448,6 +8456,7 @@ mips16e_build_save_restore (bool restore
       offset = top_offset + i * UNITS_PER_WORD;
       set = mips16e_save_restore_reg (restore_p, offset, GP_ARG_FIRST + i);
       XVECEXP (pattern, 0, n++) = set;
+      RTX_FRAME_RELATED_P (set) = 0;
     }
 
   /* Then fill in the other register moves.  */

Reply via email to