reload1.c (emit_reload_insns): When rewriting the SET_DEST of a previous insn to...
authorBernd Schmidt <crux@pool.informatik.rwth-aachen.de>
Fri, 6 Nov 1998 19:22:36 +0000 (19:22 +0000)
committerJeff Law <law@gcc.gnu.org>
Fri, 6 Nov 1998 19:22:36 +0000 (12:22 -0700)
        * reload1.c (emit_reload_insns):  When rewriting the SET_DEST of a
        previous insn to store directly into our reload register, make sure
        that if the source of the previous insn is a reload register, its
        spill_reg_store and spill_reg_stored_to values are cleared.

From-SVN: r23550

gcc/ChangeLog
gcc/reload1.c

index 87c79fe54c8bac68bc3065d08639f67b95f63815..1c94751d33ebb55000fa33cede54b24cb2c0b95b 100644 (file)
@@ -1,3 +1,10 @@
+Fri Nov  6 20:15:19 1998  Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
+
+       * reload1.c (emit_reload_insns):  When rewriting the SET_DEST of a
+       previous insn to store directly into our reload register, make sure
+       that if the source of the previous insn is a reload register, its
+       spill_reg_store and spill_reg_stored_to values are cleared.
+
 Fri Nov  6 16:35:10 1998  David Edelsohn  <edelsohn@mhpcc.edu>
 
        * rs6000.md (floatunssidf2_internal splitter): Use base register
index 685d7830fa01082e832b4c6892c04e2d872c4617..ce574a15e37f26748456813ace86f619d718f3e4 100644 (file)
@@ -6774,6 +6774,18 @@ emit_reload_insns (chain)
                {
                  /* Store into the reload register instead of the pseudo.  */
                  SET_DEST (PATTERN (temp)) = reloadreg;
+
+                 /* If the previous insn is an output reload, the source is
+                    a reload register, and its spill_reg_store entry will
+                    contain the previous destination.  This is now
+                    invalid.  */
+                 if (GET_CODE (SET_SRC (PATTERN (temp))) == REG
+                     && REGNO (SET_SRC (PATTERN (temp))) < FIRST_PSEUDO_REGISTER)
+                   {
+                     spill_reg_store[REGNO (SET_SRC (PATTERN (temp)))] = 0;
+                     spill_reg_stored_to[REGNO (SET_SRC (PATTERN (temp)))] = 0;
+                   }
+
                  /* If these are the only uses of the pseudo reg,
                     pretend for GDB it lives in the reload reg we used.  */
                  if (REG_N_DEATHS (REGNO (old)) == 1