reload1.c (reload): If we can not perform a particular elimination when we thought...
authorJeffrey A Law <law@cygnus.com>
Sat, 7 Nov 1998 00:02:03 +0000 (00:02 +0000)
committerJeff Law <law@gcc.gnu.org>
Sat, 7 Nov 1998 00:02:03 +0000 (17:02 -0700)
        * reload1.c (reload): If we can not perform a particular elimination
        when we thought we could earlier, then we must always iterate through
        the loop at least one more time.
x86 should bootstrap with -O9 -fomit-frame-pointer again.

From-SVN: r23552

gcc/ChangeLog
gcc/reload1.c

index e4209278664457bbbcd4d474cdbd7dcdddd16b3f..32e2fe80a5d1355e27e7d4e50f15119996232736 100644 (file)
@@ -1,3 +1,9 @@
+Sat Nov  7 00:54:55 1998  Jeffrey A Law  (law@cygnus.com)
+
+       * reload1.c (reload): If we can not perform a particular elimination
+       when we thought we could earlier, then we must always iterate through
+       the loop at least one more time.
+
 Fri Nov  6 19:37:33 1998  Richard Henderson  <rth@cygnus.com>
 
        * alpha.c (add_operand): Simplify the CONST_INT match.
index ce574a15e37f26748456813ace86f619d718f3e4..0d587ae4040d26fd681b15ceb2af753a693c91bd 100644 (file)
@@ -927,6 +927,17 @@ reload (first, global, dumpfile)
            {
              spill_hard_reg (i, dumpfile, 1);
              did_spill = 1;
+
+             /* Regardless of the state of spills, if we previously had
+                a register that we thought we could eliminate, but no can
+                not eliminate, we must run another pass.
+
+                Consider pseudos which have an entry in reg_equiv_* which
+                reference an eliminable register.  We must make another pass
+                to update reg_equiv_* so that we do not substitute in the
+                old value from when we thought the elimination could be
+                performed.  */
+             something_changed = 1;
            }
       }