diff options
| author | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-12-15 02:28:33 +0000 |
|---|---|---|
| committer | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-12-15 02:28:33 +0000 |
| commit | 25ffe388e8b956f5dcd5291d5944daf8057b6cac (patch) | |
| tree | b61f267114d4f2f1c2effb45ff171a124cdbe9da | |
| parent | 709f72eab822a3dde46aeb9e6c8e76c88e78380d (diff) | |
| download | ppe42-gcc-25ffe388e8b956f5dcd5291d5944daf8057b6cac.tar.gz ppe42-gcc-25ffe388e8b956f5dcd5291d5944daf8057b6cac.zip | |
* config/ia64/ia64.c (spill_restore_mem): Mark iterator
initialization as possibly dead.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@48030 138bc75d-0d04-0410-961f-82ee72b054a4
| -rw-r--r-- | gcc/ChangeLog | 5 | ||||
| -rw-r--r-- | gcc/config/ia64/ia64.c | 21 |
2 files changed, 20 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2e4f175d1db..642395bc6ce 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,10 @@ 2001-12-14 Richard Henderson <rth@redhat.com> + * config/ia64/ia64.c (spill_restore_mem): Mark iterator + initialization as possibly dead. + +2001-12-14 Richard Henderson <rth@redhat.com> + * regrename.c (mode_change_ok): New. (find_oldest_value_reg): Use it. diff --git a/gcc/config/ia64/ia64.c b/gcc/config/ia64/ia64.c index b70f038390a..b7d3919bd4b 100644 --- a/gcc/config/ia64/ia64.c +++ b/gcc/config/ia64/ia64.c @@ -1771,7 +1771,7 @@ spill_restore_mem (reg, cfa_off) } else { - rtx seq; + rtx seq, insn; if (disp == 0) seq = gen_movdi (spill_fill_data.iter_reg[iter], @@ -1797,17 +1797,26 @@ spill_restore_mem (reg, cfa_off) /* Careful for being the first insn in a sequence. */ if (spill_fill_data.init_after) - spill_fill_data.init_after - = emit_insn_after (seq, spill_fill_data.init_after); + insn = emit_insn_after (seq, spill_fill_data.init_after); else { rtx first = get_insns (); if (first) - spill_fill_data.init_after - = emit_insn_before (seq, first); + insn = emit_insn_before (seq, first); else - spill_fill_data.init_after = emit_insn (seq); + insn = emit_insn (seq); } + spill_fill_data.init_after = insn; + + /* If DISP is 0, we may or may not have a further adjustment + afterward. If we do, then the load/store insn may be modified + to be a post-modify. If we don't, then this copy may be + eliminated by copyprop_hardreg_forward, which makes this + insn garbage, which runs afoul of the sanity check in + propagate_one_insn. So mark this insn as legal to delete. */ + if (disp == 0) + REG_NOTES(insn) = gen_rtx_EXPR_LIST (REG_MAYBE_DEAD, const0_rtx, + REG_NOTES (insn)); } mem = gen_rtx_MEM (GET_MODE (reg), spill_fill_data.iter_reg[iter]); |

