flow.c (find_auto_inc): Don't autoinc eliminable registers.
authorRichard Henderson <rth@cygnus.com>
Fri, 14 Apr 2000 17:38:35 +0000 (10:38 -0700)
committerRichard Henderson <rth@gcc.gnu.org>
Fri, 14 Apr 2000 17:38:35 +0000 (10:38 -0700)
* 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

gcc/ChangeLog
gcc/flow.c

index d068b59f3036532b22d9619cdac25a9000f368b6..4465c292dfcd3ec5a388e1ca9879f5d9ae671d3e 100644 (file)
@@ -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
index a0b1266b032e16430ce6130b5630b4e9b8ea2bec..33a54ae1883916a447914b3354a244f14d7ba4f1 100644 (file)
@@ -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;