From 1541bfd5d287758832212bcb946ad479192d1fcf Mon Sep 17 00:00:00 2001 From: sayle Date: Tue, 26 Apr 2005 04:11:56 +0000 Subject: * 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@98762 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/sched-deps.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'gcc/sched-deps.c') diff --git a/gcc/sched-deps.c b/gcc/sched-deps.c index 933d74da60c..6b54fc8fd93 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)]; -- cgit v1.2.1