aboutsummaryrefslogtreecommitdiff
path: root/gcc/flow.c
diff options
context:
space:
mode:
authorJeff Law <law@gcc.gnu.org>1996-04-08 14:31:32 -0600
committerJeff Law <law@gcc.gnu.org>1996-04-08 14:31:32 -0600
commitb24884cd276925828c7e35e12b9e407ad32a1e70 (patch)
treee96c29160d302b92c3cb56fc3f8220e61a404cdd /gcc/flow.c
parent3066b88a9f1415d86d6b7ef05cd95e1e9e1f1f4c (diff)
downloadgcc-b24884cd276925828c7e35e12b9e407ad32a1e70.zip
gcc-b24884cd276925828c7e35e12b9e407ad32a1e70.tar.gz
gcc-b24884cd276925828c7e35e12b9e407ad32a1e70.tar.bz2
flow.c (find_auto_inc): Also make sure there aren't any sets of the incremented register between the...
* flow.c (find_auto_inc): Also make sure there aren't any sets of the incremented register between the memory reference and increment insn. From-SVN: r11682
Diffstat (limited to 'gcc/flow.c')
-rw-r--r--gcc/flow.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/gcc/flow.c b/gcc/flow.c
index a792e7f..7e55074 100644
--- a/gcc/flow.c
+++ b/gcc/flow.c
@@ -2231,7 +2231,11 @@ find_auto_inc (needed, x, insn)
else if (GET_CODE (q) == REG
/* PREV_INSN used here to check the semi-open interval
[insn,incr). */
- && ! reg_used_between_p (q, PREV_INSN (insn), incr))
+ && ! reg_used_between_p (q, PREV_INSN (insn), incr)
+ /* We must also check for sets of q as q may be
+ a call clobbered hard register and there may
+ be a call between PREV_INSN (insn) and incr. */
+ && ! reg_set_between_p (q, PREV_INSN (insn), incr))
{
/* We have *p followed sometime later by q = p+size.
Both p and q must be live afterward,