re PR rtl-optimization/12147 (Wrong code with -O2 in context of reload)
authorUlrich Weigand <uweigand@de.ibm.com>
Fri, 30 Jan 2004 23:10:36 +0000 (23:10 +0000)
committerUlrich Weigand <uweigand@gcc.gnu.org>
Fri, 30 Jan 2004 23:10:36 +0000 (23:10 +0000)
PR optimization/12147
* reload1.c (reload_reg_free_p): RELOAD_OTHER conflicts with
RELOAD_FOR_OPADDR_ADDR.
(reload_reg_reaches_end_p): RELOAD_FOR_OTHER_ADDRESS register
might be reused as RELOAD_FOR_OPADDR_ADDR register.

From-SVN: r77003

gcc/ChangeLog
gcc/reload1.c

index b201e50821210389262f9b0cd7a0e980a5f94f77..9431083cc469bf2a1a8d78a75e47c0867743842d 100644 (file)
@@ -1,3 +1,11 @@
+2004-01-30  Ulrich Weigand  <uweigand@de.ibm.com>
+
+       PR optimization/12147
+       * reload1.c (reload_reg_free_p): RELOAD_OTHER conflicts with
+       RELOAD_FOR_OPADDR_ADDR.
+       (reload_reg_reaches_end_p): RELOAD_FOR_OTHER_ADDRESS register
+       might be reused as RELOAD_FOR_OPADDR_ADDR register.
+
 2004-01-30  Jan Hubicka  <jh@suse.cz>
 
        * reload.c (get_secondary_mem):  Fix updating of
index 1df667e8f88828ba48aa70c8b493ca030985f7f2..d53b27be6d639dfbb53049dd2ef8fe2ac66d7735 100644 (file)
@@ -4316,6 +4316,7 @@ reload_reg_free_p (unsigned int regno, int opnum, enum reload_type type)
       /* In use for anything means we can't use it for RELOAD_OTHER.  */
       if (TEST_HARD_REG_BIT (reload_reg_used_in_other_addr, regno)
          || TEST_HARD_REG_BIT (reload_reg_used_in_op_addr, regno)
+         || TEST_HARD_REG_BIT (reload_reg_used_in_op_addr_reload, regno)
          || TEST_HARD_REG_BIT (reload_reg_used_in_insn, regno))
        return 0;
 
@@ -4494,6 +4495,7 @@ reload_reg_reaches_end_p (unsigned int regno, int opnum, enum reload_type type)
          return 0;
 
       return (! TEST_HARD_REG_BIT (reload_reg_used_in_op_addr, regno)
+             && ! TEST_HARD_REG_BIT (reload_reg_used_in_op_addr_reload, regno)
              && ! TEST_HARD_REG_BIT (reload_reg_used_in_insn, regno)
              && ! TEST_HARD_REG_BIT (reload_reg_used, regno));