summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authoramylaar <amylaar@138bc75d-0d04-0410-961f-82ee72b054a4>2000-11-07 06:28:34 +0000
committeramylaar <amylaar@138bc75d-0d04-0410-961f-82ee72b054a4>2000-11-07 06:28:34 +0000
commitf9b79678b07276efa8cf542c140f685b9fc59119 (patch)
treed3c82a5e573ea88ecd8bc4ed6a39bf16e84f8a4e /gcc
parent3daf5542bae629a4a7bf9032629a192f8721dd16 (diff)
downloadgcc-f9b79678b07276efa8cf542c140f685b9fc59119.tar.gz
* 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@37284 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/combine.c29
-rw-r--r--gcc/flow.c21
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 <amylaar@redhat.com>
+
+ * 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 <amylaar@redhat.com>
* 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);
});
}
}