reload1.c (reload_reg_reaches_end_p): A RELOAD_OTHER can overwrite the value in a...
authorGeoff Keating <geoffk@cygnus.com>
Mon, 23 Oct 2000 18:45:15 +0000 (18:45 +0000)
committerGeoffrey Keating <geoffk@gcc.gnu.org>
Mon, 23 Oct 2000 18:45:15 +0000 (18:45 +0000)
* reload1.c (reload_reg_reaches_end_p): A RELOAD_OTHER can
overwrite the value in a RELOAD_FOR_INPUT and other kinds of
reloads just like an RELOAD_FOR_OUTPUT would.

From-SVN: r37019

gcc/ChangeLog
gcc/reload1.c

index 8a97f077e584896e3616afeac3091588b0ed3d1e..b8d1ab6772355072a6806154715844cbc73df2c6 100644 (file)
@@ -1,5 +1,9 @@
 2000-10-23  Geoff Keating  <geoffk@cygnus.com>
 
+       * reload1.c (reload_reg_reaches_end_p): A RELOAD_OTHER can
+       overwrite the value in a RELOAD_FOR_INPUT and other kinds of
+       reloads just like an RELOAD_FOR_OUTPUT would.
+
        * local-alloc.c (update_equiv_regs): Add an abort().  When
        deleting or moving insns, update reg_equiv[regno].init_insns.
 
index f90897adcacc646d977fa68644a1e7538abdcb91..c194361118d4b2f5c01c84c50402fb0199cd642b 100644 (file)
@@ -4480,8 +4480,9 @@ reload_reg_reaches_end_p (regno, opnum, type)
       if (TEST_HARD_REG_BIT (reload_reg_used_in_op_addr_reload, regno))
        return 0;
 
-      return (! TEST_HARD_REG_BIT (reload_reg_used_in_op_addr, regno)
-             && ! TEST_HARD_REG_BIT (reload_reg_used_in_insn, regno));
+      return (!TEST_HARD_REG_BIT (reload_reg_used_in_op_addr, regno)
+             && !TEST_HARD_REG_BIT (reload_reg_used_in_insn, regno)
+             && !TEST_HARD_REG_BIT (reload_reg_used, regno));
 
     case RELOAD_FOR_INPUT:
       /* Similar to input address, except we start at the next operand for
@@ -4506,7 +4507,7 @@ reload_reg_reaches_end_p (regno, opnum, type)
            || TEST_HARD_REG_BIT (reload_reg_used_in_output[i], regno))
          return 0;
 
-      return 1;
+      return (!TEST_HARD_REG_BIT (reload_reg_used, regno));
 
     case RELOAD_FOR_OPADDR_ADDR:
       for (i = 0; i < reload_n_operands; i++)
@@ -4515,8 +4516,9 @@ reload_reg_reaches_end_p (regno, opnum, type)
            || TEST_HARD_REG_BIT (reload_reg_used_in_output[i], regno))
          return 0;
 
-      return (! TEST_HARD_REG_BIT (reload_reg_used_in_op_addr, regno)
-             && !TEST_HARD_REG_BIT (reload_reg_used_in_insn, regno));
+      return (!TEST_HARD_REG_BIT (reload_reg_used_in_op_addr, regno)
+             && !TEST_HARD_REG_BIT (reload_reg_used_in_insn, regno)
+             && !TEST_HARD_REG_BIT (reload_reg_used, regno));
 
     case RELOAD_FOR_INSN:
       /* These conflict with other outputs with RELOAD_OTHER.  So