OSDN Git Service

(reload_reg_free_p, case RELOAD_OTHER): Allowed to conflict with
authorkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 16 Jun 1994 22:54:00 +0000 (22:54 +0000)
committerkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 16 Jun 1994 22:54:00 +0000 (22:54 +0000)
RELOAD_FOR_OTHER_ADDRESS.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@7505 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/reload1.c

index 6de6b1d..11e0a1b 100644 (file)
@@ -4156,10 +4156,22 @@ reload_reg_free_p (regno, opnum, type)
   switch (type)
     {
     case RELOAD_OTHER:
-      /* In use for anything means not available for a RELOAD_OTHER.  */
-      return ! TEST_HARD_REG_BIT (reload_reg_used_at_all, regno);
+      /* In use for anything except RELOAD_FOR_OTHER_ADDRESS means
+        we can't use it for RELOAD_OTHER.  */
+      if (TEST_HARD_REG_BIT (reload_reg_used, regno)
+         || TEST_HARD_REG_BIT (reload_reg_used_in_op_addr, regno)
+         || TEST_HARD_REG_BIT (reload_reg_used_in_insn, regno))
+       return 0;
+
+      for (i = 0; i < reload_n_operands; i++)
+       if (TEST_HARD_REG_BIT (reload_reg_used_in_input_addr[i], regno)
+           || TEST_HARD_REG_BIT (reload_reg_used_in_output_addr[i], regno)
+           || TEST_HARD_REG_BIT (reload_reg_used_in_input[i], regno)
+           || TEST_HARD_REG_BIT (reload_reg_used_in_output[i], regno))
+         return 0;
+
+      return 1;
 
-      /* The other kinds of use can sometimes share a register.  */
     case RELOAD_FOR_INPUT:
       if (TEST_HARD_REG_BIT (reload_reg_used_in_insn, regno)
          || TEST_HARD_REG_BIT (reload_reg_used_in_op_addr, regno))