diff options
author | Roger Sayle <roger@eyesopen.com> | 2005-04-26 04:11:56 +0000 |
---|---|---|
committer | Roger Sayle <sayle@gcc.gnu.org> | 2005-04-26 04:11:56 +0000 |
commit | c3bdeea8f3a629555c7de26b2f49079b01b7a6fc (patch) | |
tree | 750c0c54709164debb5d4dcac47541a1e6d2b318 | |
parent | 21dad7e6b95a0b777b1b4f7d6c57e8813bd733f0 (diff) | |
download | gcc-c3bdeea8f3a629555c7de26b2f49079b01b7a6fc.zip gcc-c3bdeea8f3a629555c7de26b2f49079b01b7a6fc.tar.gz gcc-c3bdeea8f3a629555c7de26b2f49079b01b7a6fc.tar.bz2 |
sched-deps.c (sched_analyze_1): On STACK_REGS targets...
* 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
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/sched-deps.c | 19 |
2 files changed, 26 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 44b5d65..06506ed 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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. diff --git a/gcc/sched-deps.c b/gcc/sched-deps.c index 933d74d..6b54fc8 100644 --- a/gcc/sched-deps.c +++ b/gcc/sched-deps.c @@ -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)]; |