aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Henderson <rth@cygnus.com>2000-04-14 10:38:35 -0700
committerRichard Henderson <rth@gcc.gnu.org>2000-04-14 10:38:35 -0700
commit6e628096889effd0046ea70a7c6910e181af7510 (patch)
treed5b8eaff0f37ffecf4917d6f49e8cdcd9e492811
parentb1ba4cc3a816154b5290595bd1ac73280e75116e (diff)
downloadgcc-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/ChangeLog5
-rw-r--r--gcc/flow.c10
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
diff --git a/gcc/flow.c b/gcc/flow.c
index a0b1266..33a54ae 100644
--- a/gcc/flow.c
+++ b/gcc/flow.c
@@ -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;