From c762163eba799f5cf9a48a017640c60a65dc107c Mon Sep 17 00:00:00 2001 From: "J\"orn Rennecke" Date: Tue, 7 Nov 2000 06:28:34 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 8 ++++++++ gcc/combine.c | 29 +++++++++++++++++++++++++++++ gcc/flow.c | 21 ++++----------------- 3 files changed, 41 insertions(+), 17 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0bf70491b09..ec6df704f71 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +Tue Nov 7 06:24:02 2000 J"orn Rennecke + + * 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. + Mon Nov 6 20:08:13 2000 J"orn Rennecke * reload1.c (eliminate_regs_in_insn): Allow a set to be a PARALLEL diff --git a/gcc/combine.c b/gcc/combine.c index 21564403749..33de90c4988 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; diff --git a/gcc/flow.c b/gcc/flow.c index a48accf89d4..d286f91e2b3 100644 --- a/gcc/flow.c +++ b/gcc/flow.c @@ -2888,24 +2888,11 @@ verify_local_live_at_start (new_live_at_start, bb) EXECUTE_IF_SET_IN_REG_SET (new_live_at_start, 0, i, { - /* No pseudo registers should die. */ + /* No registers should die. */ if (REGNO_REG_SET_P (bb->global_live_at_start, i)) - { - /* But hard regs can reasonably die, e.g. when we combine - (insn 6 30 7 (set (reg/v:DI 83) - (reg:DI 5 r5)) (nil) - (expr_list:REG_DEAD (reg:DI 5 r5) (nil))) - ... and ... - (insn 17 15 18 (set (reg:SI 5 r5) - (subreg:SI (reg/v:DI 83) 1)) (insn_list 6 (nil)) - (expr_list:REG_DEAD (reg/v:DI 83) (nil))) . */ - - if (i >= FIRST_PSEUDO_REGISTER) - abort (); - } - else - /* Verify that the now-live register is wider than word_mode. */ - verify_wide_reg (i, bb->head, bb->end); + abort (); + /* Verify that the now-live register is wider than word_mode. */ + verify_wide_reg (i, bb->head, bb->end); }); } } -- 2.30.2