diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a373deb99f3..6d81369c7a9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +Thu Jul 9 18:24:56 1998 J"orn Rennecke + + * 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 * reload1.c (emit_reload_insns): If an output reload copies only diff --git a/gcc/reload1.c b/gcc/reload1.c index b115a94adba..3b1fd5665e9 100644 --- a/gcc/reload1.c +++ b/gcc/reload1.c @@ -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++)