diff options
author | Richard Kenner <kenner@gcc.gnu.org> | 1996-04-15 07:46:28 -0400 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 1996-04-15 07:46:28 -0400 |
commit | b55f96db06a8706fbdb2c19f627bc05d6b15dadf (patch) | |
tree | 14758be275794bdcc1ecc1bcd52f7fe7cbde4dc9 | |
parent | bf8b4985abe198142d29a1f570f489ac2de29a2d (diff) | |
download | gcc-b55f96db06a8706fbdb2c19f627bc05d6b15dadf.zip gcc-b55f96db06a8706fbdb2c19f627bc05d6b15dadf.tar.gz gcc-b55f96db06a8706fbdb2c19f627bc05d6b15dadf.tar.bz2 |
(find_dead_or_set_registers): Only kill spill regs after label made
before jump2.
From-SVN: r11778
-rw-r--r-- | gcc/reorg.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/gcc/reorg.c b/gcc/reorg.c index a9101a9..11e5fc7 100644 --- a/gcc/reorg.c +++ b/gcc/reorg.c @@ -133,6 +133,10 @@ Boston, MA 02111-1307, USA. */ /* Import list of registers used as spill regs from reload. */ extern HARD_REG_SET used_spill_regs; +/* Import highest label used in function at end of reload. */ +extern int max_label_num_after_reload; + + #ifdef DELAY_SLOTS #define obstack_chunk_alloc xmalloc @@ -2468,11 +2472,14 @@ find_dead_or_set_registers (target, res, jump_target, jump_count, set, needed) AND_COMPL_HARD_REG_SET (res->regs, pending_dead_regs); CLEAR_HARD_REG_SET (pending_dead_regs); - /* All spill registers are dead at a label, so kill all of the - ones that aren't needed also. */ - COPY_HARD_REG_SET (scratch, used_spill_regs); - AND_COMPL_HARD_REG_SET (scratch, needed.regs); - AND_COMPL_HARD_REG_SET (res->regs, scratch); + if (CODE_LABEL_NUMBER (insn) < max_label_num_after_reload) + { + /* All spill registers are dead at a label, so kill all of the + ones that aren't needed also. */ + COPY_HARD_REG_SET (scratch, used_spill_regs); + AND_COMPL_HARD_REG_SET (scratch, needed.regs); + AND_COMPL_HARD_REG_SET (res->regs, scratch); + } continue; case BARRIER: |