Never set reload_override_in for optional reloads.
authorBernd Schmidt <bernds@redhat.co.uk>
Sat, 28 Oct 2000 19:36:04 +0000 (19:36 +0000)
committerBernd Schmidt <bernds@gcc.gnu.org>
Sat, 28 Oct 2000 19:36:04 +0000 (19:36 +0000)
From-SVN: r37103

gcc/ChangeLog
gcc/reload1.c

index c0653d8ce915ac12760f7f376fd6027a28289798..755ad30eb114685e85daf04acef9af2319eb2f45 100644 (file)
@@ -3,6 +3,8 @@
        * reload.c (find_reloads): Distinguish "wins" so that we know whether
        a given operand won because of a matching constraint or not; then use
        that information to compute goal_alternative_matched properly.
+       * reload1.c (choose_reload_regs): Never set reload_override_in for an
+       optional reload.
 
 2000-10-28  Neil Booth  <neilb@earthling.net>
 
index c194361118d4b2f5c01c84c50402fb0199cd642b..66c98f545953fd38a1a8584757f01b5fbc1493ad 100644 (file)
@@ -5417,9 +5417,12 @@ choose_reload_regs (chain)
                              || (rld[r].out && rld[r].reg_rtx
                                  && rtx_equal_p (rld[r].out, rld[r].reg_rtx)))
                            {
-                             reload_override_in[r] = last_reg;
-                             reload_inheritance_insn[r]
-                               = reg_reloaded_insn[i];
+                             if (! rld[r].optional)
+                               {
+                                 reload_override_in[r] = last_reg;
+                                 reload_inheritance_insn[r]
+                                   = reg_reloaded_insn[i];
+                               }
                            }
                          else
                            {
@@ -5518,7 +5521,8 @@ choose_reload_regs (chain)
                  if (reg_overlap_mentioned_for_reload_p (equiv,
                                                          reload_earlyclobbers[i]))
                    {
-                     reload_override_in[r] = equiv;
+                     if (! rld[r].optional)
+                       reload_override_in[r] = equiv;
                      equiv = 0;
                      break;
                    }
@@ -5541,7 +5545,8 @@ choose_reload_regs (chain)
                    case RELOAD_OTHER:
                    case RELOAD_FOR_INPUT:
                    case RELOAD_FOR_OPERAND_ADDRESS:
-                     reload_override_in[r] = equiv;
+                     if (! rld[r].optional)
+                       reload_override_in[r] = equiv;
                      /* Fall through.  */
                    default:
                      equiv = 0;