diff options
author | J"orn Rennecke <amylaar@redhat.com> | 2000-11-07 06:28:34 +0000 |
---|---|---|
committer | Joern Rennecke <amylaar@gcc.gnu.org> | 2000-11-07 06:28:34 +0000 |
commit | c762163eba799f5cf9a48a017640c60a65dc107c (patch) | |
tree | d3c82a5e573ea88ecd8bc4ed6a39bf16e84f8a4e /gcc/combine.c | |
parent | aa17a5f382c64274d536116aa0a862aff41e9ec5 (diff) | |
download | gcc-c762163eba799f5cf9a48a017640c60a65dc107c.zip gcc-c762163eba799f5cf9a48a017640c60a65dc107c.tar.gz gcc-c762163eba799f5cf9a48a017640c60a65dc107c.tar.bz2 |
flow.c (verify_local_live_at_start): Back out last change.
* flow.c (verify_local_live_at_start): Back out last change.
* combine.c (distribute_notes): When parts of a hard reg are
neither set nor referenced in PLACE, search backwards for a
place to put a REG_UNUSED note; if none found, ask for flow
info refresh.
From-SVN: r37284
Diffstat (limited to 'gcc/combine.c')
-rw-r--r-- | gcc/combine.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/gcc/combine.c b/gcc/combine.c index 2156440..33de90c 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -12499,6 +12499,7 @@ distribute_notes (notes, from_insn, i3, i2, elim_i2, elim_i1) i += HARD_REGNO_NREGS (i, reg_raw_mode[i])) { rtx piece = gen_rtx_REG (reg_raw_mode[i], i); + basic_block bb = BASIC_BLOCK (this_basic_block); if (! dead_or_set_p (place, piece) && ! reg_bitfield_target_p (piece, @@ -12510,6 +12511,34 @@ distribute_notes (notes, from_insn, i3, i2, elim_i2, elim_i1) distribute_notes (new_note, place, place, NULL_RTX, NULL_RTX, NULL_RTX); } + else if (! refers_to_regno_p (i, i + 1, + PATTERN (place), 0) + && ! find_regno_fusage (place, USE, i)) + for (tem = PREV_INSN (place); ; + tem = PREV_INSN (tem)) + { + if (! INSN_P (tem)) + { + if (tem == bb->head) + { + SET_BIT (refresh_blocks, + this_basic_block); + need_refresh = 1; + break; + } + continue; + } + if (dead_or_set_p (tem, piece) + || reg_bitfield_target_p (piece, + PATTERN (tem))) + { + REG_NOTES (tem) + = gen_rtx_EXPR_LIST (REG_DEAD, piece, + REG_NOTES (tem)); + break; + } + } + } place = 0; |