(reload): For special CONST_CALL_P NOTE_INSN_SETJMP, mark all
authorRichard Kenner <kenner@gcc.gnu.org>
Fri, 23 Feb 1996 13:46:45 +0000 (08:46 -0500)
committerRichard Kenner <kenner@gcc.gnu.org>
Fri, 23 Feb 1996 13:46:45 +0000 (08:46 -0500)
call-saved regs as used.

From-SVN: r11341

gcc/reload1.c

index 788c36a6b14522bd3d94ee3af46d7738a18b8d0a..9b27b47a74167bfdc6542630e4bec170e3997ee1 100644 (file)
@@ -551,12 +551,20 @@ reload (first, global, dumpfile)
   /* Look for REG_EQUIV notes; record what each pseudo is equivalent to.
      Also find all paradoxical subregs and find largest such for each pseudo.
      On machines with small register classes, record hard registers that
-     are used for user variables.  These can never be used for spills.  */
+     are used for user variables.  These can never be used for spills. 
+     Also look for a "constant" NOTE_INSN_SETJMP.  This means that all
+     caller-saved registers must be marked live.  */
 
   for (insn = first; insn; insn = NEXT_INSN (insn))
     {
       rtx set = single_set (insn);
 
+      if (GET_CODE (insn) == NOTE && CONST_CALL_P (insn)
+         && NOTE_LINE_NUMBER (insn) == NOTE_INSN_SETJMP)
+       for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
+         if (! call_used_regs[i])
+           regs_ever_live[i] = 1;
+
       if (set != 0 && GET_CODE (SET_DEST (set)) == REG)
        {
          rtx note = find_reg_note (insn, REG_EQUIV, NULL_RTX);