diff options
author | Richard Henderson <rth@cygnus.com> | 2000-04-14 10:38:35 -0700 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2000-04-14 10:38:35 -0700 |
commit | 6e628096889effd0046ea70a7c6910e181af7510 (patch) | |
tree | d5b8eaff0f37ffecf4917d6f49e8cdcd9e492811 | |
parent | b1ba4cc3a816154b5290595bd1ac73280e75116e (diff) | |
download | gcc-6e628096889effd0046ea70a7c6910e181af7510.zip gcc-6e628096889effd0046ea70a7c6910e181af7510.tar.gz gcc-6e628096889effd0046ea70a7c6910e181af7510.tar.bz2 |
flow.c (find_auto_inc): Don't autoinc eliminable registers.
* flow.c (find_auto_inc): Don't autoinc eliminable registers.
If the original source is dead in the incr insn, it's dead now.
From-SVN: r33150
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/flow.c | 10 |
2 files changed, 14 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d068b59..4465c29 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2000-04-14 Richard Henderson <rth@cygnus.com> + + * flow.c (find_auto_inc): Don't autoinc eliminable registers. + If the original source is dead in the incr insn, it's dead now. + Fri Apr 14 07:40:32 2000 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> * stor-layout.c (layout_decl): Properly compare KNOWN_ALIGN to @@ -4309,7 +4309,10 @@ find_auto_inc (pbi, x, insn) ? (offset ? PRE_INC : POST_INC) : (offset ? PRE_DEC : POST_DEC)); - if (dead_or_set_p (incr, addr)) + if (dead_or_set_p (incr, addr) + /* Mustn't autoinc an eliminable register. */ + && (regno >= FIRST_PSEUDO_REGISTER + || ! TEST_HARD_REG_BIT (elim_reg_set, regno))) { /* This is the simple case. Try to make the auto-inc. If we can't, we are done. Otherwise, we will do any @@ -4410,6 +4413,11 @@ find_auto_inc (pbi, x, insn) register. */ if (SET_DEST (set) == addr) { + /* If the original source was dead, it's dead now. */ + rtx note = find_reg_note (incr, REG_DEAD, NULL_RTX); + if (note && XEXP (note, 0) != addr) + SET_REGNO_REG_SET (pbi->new_dead, REGNO (XEXP (note, 0))); + PUT_CODE (incr, NOTE); NOTE_LINE_NUMBER (incr) = NOTE_INSN_DELETED; NOTE_SOURCE_FILE (incr) = 0; |