sched-deps.c (sched_analyze_1): On STACK_REGS targets...
authorRoger Sayle <roger@eyesopen.com>
Tue, 26 Apr 2005 04:11:56 +0000 (04:11 +0000)
committerRoger Sayle <sayle@gcc.gnu.org>
Tue, 26 Apr 2005 04:11:56 +0000 (04:11 +0000)
* sched-deps.c (sched_analyze_1): On STACK_REGS targets, x87, treat
all writes to any stack register as a read/write dependency on
FIRST_STACK_REG.
(sched_analyze_2): Likewise, for reads from any stack register.

From-SVN: r98762

gcc/ChangeLog
gcc/sched-deps.c

index 44b5d65e7fce4be8b751cc4e354392dcceb39e08..06506ed977ef5d0ba3ac9bb569723fa7b5999d50 100644 (file)
@@ -1,3 +1,10 @@
+2005-04-25  Roger Sayle  <roger@eyesopen.com>
+
+       * sched-deps.c (sched_analyze_1): On STACK_REGS targets, x87, treat
+       all writes to any stack register as a read/write dependency on
+       FIRST_STACK_REG.
+       (sched_analyze_2): Likewise, for reads from any stack register.
+
 2005-04-25  Richard Henderson  <rth@redhat.com>
 
        * final.c (output_addr_const): Revert 2005-04-09 change.
index 933d74da60c7d8e5d22db6b988dff4ea8c00f296..6b54fc8fd9359c2481b0bc27f8558613db42d9e8 100644 (file)
@@ -534,6 +534,15 @@ sched_analyze_1 (struct deps *deps, rtx x, rtx insn)
     {
       regno = REGNO (dest);
 
+#ifdef STACK_REGS
+      /* Treat all writes to a stack register as modifying the TOS.  */
+      if (regno >= FIRST_STACK_REG && regno <= LAST_STACK_REG)
+       {
+         SET_REGNO_REG_SET (reg_pending_uses, FIRST_STACK_REG);
+         regno = FIRST_STACK_REG;
+       }
+#endif
+
       /* A hard reg in a wide mode may really be multiple registers.
          If so, mark all of them just like the first.  */
       if (regno < FIRST_PSEUDO_REGISTER)
@@ -684,6 +693,16 @@ sched_analyze_2 (struct deps *deps, rtx x, rtx insn)
     case REG:
       {
        int regno = REGNO (x);
+
+#ifdef STACK_REGS
+      /* Treat all reads of a stack register as modifying the TOS.  */
+      if (regno >= FIRST_STACK_REG && regno <= LAST_STACK_REG)
+       {
+         SET_REGNO_REG_SET (reg_pending_sets, FIRST_STACK_REG);
+         regno = FIRST_STACK_REG;
+       }
+#endif
+
        if (regno < FIRST_PSEUDO_REGISTER)
          {
            int i = hard_regno_nregs[regno][GET_MODE (x)];