diff --git a/gcc/ChangeLog b/gcc/ChangeLog index abf78065e55..8f47f954e4b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +Wed Sep 8 16:41:27 1999 Richard Henderson + + * flow.c (new_insn_dead_notes): Don't early out for preexisting regs. + Wed Sep 8 16:07:52 1999 Richard Henderson * gengenrtl.c (CONST_DOUBLE_FORMAT): Take the size REAL_ARITHMETIC diff --git a/gcc/flow.c b/gcc/flow.c index 60be87a5c01..bd42a56bc5b 100644 --- a/gcc/flow.c +++ b/gcc/flow.c @@ -5351,6 +5351,7 @@ new_insn_dead_notes (pat, insn, first, last, orig_first_insn, orig_last_insn) if (GET_CODE (dest) == REG) { +#if 0 /* If the original insns already used this register, we may not add new notes for it. One example for a replacement that needs this test is when a multi-word memory access with @@ -5370,6 +5371,17 @@ new_insn_dead_notes (pat, insn, first, last, orig_first_insn, orig_last_insn) REG_DEAD notes. This can probably be accurately done by calling mark_referenced_resources() on the old stream before replacing the old insns. */ + /* ??? The conclusion reached here -- that we can't add DEAD notes + when the register is preexisting -- is false. I can't envision + a sequence postulated above that wouldn't be properly handled + by the code below. In the meantime, consider the 1->2 split + + (set (reg:SI 100) (ne:SI (reg:SI 100) (const_int 0))) + to + (set (reg:CC icc) (compare:CC (reg:SI 100) (const_int 0))) + (set (reg:SI 100) (ne:SI (reg:CC icc) (const_int 0))) + + We do in fact need a new DEAD note on the first insn for reg 100. */ for (tem = orig_first_insn; tem != NULL_RTX; tem = NEXT_INSN (tem)) { @@ -5379,6 +5391,7 @@ new_insn_dead_notes (pat, insn, first, last, orig_first_insn, orig_last_insn) if (tem == orig_last_insn) break; } +#endif /* So it's a new register, presumably only used within this group of insns. Find the last insn in the set of new insns