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. */