From: Richard Kenner Date: Fri, 23 Feb 1996 13:46:45 +0000 (-0500) Subject: (reload): For special CONST_CALL_P NOTE_INSN_SETJMP, mark all X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=b453cb0b75e558aad1baa4f299b09b5af0616573;p=gcc.git (reload): For special CONST_CALL_P NOTE_INSN_SETJMP, mark all call-saved regs as used. From-SVN: r11341 --- diff --git a/gcc/reload1.c b/gcc/reload1.c index 788c36a6b14..9b27b47a741 100644 --- a/gcc/reload1.c +++ b/gcc/reload1.c @@ -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);