OSDN Git Service

* reload1.c (reload): If we can not perform a particular elimination
authorlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 7 Nov 1998 00:02:03 +0000 (00:02 +0000)
committerlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 7 Nov 1998 00:02:03 +0000 (00:02 +0000)
        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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@23552 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/reload1.c

index e420927..32e2fe8 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 ce574a1..0d587ae 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;
            }
       }