reload1.c (choose_reload_regs): If using an equivalence from find_equiv_reg and reg_r...
authorJ"orn Rennecke <amylaar@cygnus.co.uk>
Thu, 9 Jul 1998 10:29:03 +0000 (10:29 +0000)
committerJoern Rennecke <amylaar@gcc.gnu.org>
Thu, 9 Jul 1998 10:29:03 +0000 (11:29 +0100)
* reload1.c (choose_reload_regs): If using an equivalence from
find_equiv_reg and reg_reloaded_valid is not set for this register,
clear the associated spill_reg_store.

From-SVN: r21035

gcc/ChangeLog
gcc/reload1.c

index a373deb..6d81369 100644 (file)
@@ -1,3 +1,9 @@
+Thu Jul  9 18:24:56 1998  J"orn Rennecke <amylaar@cygnus.co.uk>
+
+       * reload1.c (choose_reload_regs): If using an equivalence from
+       find_equiv_reg and reg_reloaded_valid is not set for this register,
+       clear the associated spill_reg_store.
+
 Thu Jul  9 18:12:49 1998  J"orn Rennecke <amylaar@cygnus.co.uk>
 
        * reload1.c (emit_reload_insns): If an output reload copies only
index b115a94..3b1fd56 100644 (file)
@@ -5861,6 +5861,12 @@ choose_reload_regs (insn, avoid_return_reg)
                  reload_reg_rtx[r] = equiv;
                  reload_inherited[r] = 1;
 
+                 /* If reg_reloaded_valid is not set for this register,
+                    there might be a stale spill_reg_store lying around.
+                    We must clear it, since otherwise emit_reload_insns
+                    might delete the store.  */
+                 if (! TEST_HARD_REG_BIT (reg_reloaded_valid, regno))
+                   spill_reg_store[regno] = NULL_RTX;
                  /* If any of the hard registers in EQUIV are spill
                     registers, mark them as in use for this insn.  */
                  for (k = 0; k < nr; k++)