diff options
author | Richard Kenner <kenner@gcc.gnu.org> | 1996-02-23 08:46:45 -0500 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 1996-02-23 08:46:45 -0500 |
commit | b453cb0b75e558aad1baa4f299b09b5af0616573 (patch) | |
tree | 95639ac9abf386839a2bcdbf08e5ec7cef0bb74a /gcc | |
parent | 0dddb42d9003167d9485ef1079f0ecc8d37e34a5 (diff) | |
download | gcc-b453cb0b75e558aad1baa4f299b09b5af0616573.zip gcc-b453cb0b75e558aad1baa4f299b09b5af0616573.tar.gz gcc-b453cb0b75e558aad1baa4f299b09b5af0616573.tar.bz2 |
(reload): For special CONST_CALL_P NOTE_INSN_SETJMP, mark all
call-saved regs as used.
From-SVN: r11341
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/reload1.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/gcc/reload1.c b/gcc/reload1.c index 788c36a..9b27b47 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); |