aboutsummaryrefslogtreecommitdiff
path: root/gcc/combine.c
diff options
context:
space:
mode:
authorJ"orn Rennecke <amylaar@redhat.com>2000-11-07 06:28:34 +0000
committerJoern Rennecke <amylaar@gcc.gnu.org>2000-11-07 06:28:34 +0000
commitc762163eba799f5cf9a48a017640c60a65dc107c (patch)
treed3c82a5e573ea88ecd8bc4ed6a39bf16e84f8a4e /gcc/combine.c
parentaa17a5f382c64274d536116aa0a862aff41e9ec5 (diff)
downloadgcc-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.c29
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;