OSDN Git Service

* (find_auto_inc): In *p=expr;q=p+size case, avoid clobbering q
authordje <dje@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 2 Jul 1993 02:51:57 +0000 (02:51 +0000)
committerdje <dje@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 2 Jul 1993 02:51:57 +0000 (02:51 +0000)
if referenced in expr.

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

gcc/flow.c

index a5cc476..8d4fc6c 100644 (file)
@@ -1989,11 +1989,14 @@ find_auto_inc (needed, x, insn)
 
          if (dead_or_set_p (incr, addr))
            win = 1;
-         else if (GET_CODE (q) == REG && ! reg_used_between_p (q, insn, incr))
+         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))
            {
-             /* We have *p followed by q = p+size.
+             /* We have *p followed sometime later by q = p+size.
                 Both p and q must be live afterward,
-                and q must be dead before.
+                and q is not used between INSN and it's assignment.
                 Change it to q = p, ...*q..., q = q+size.
                 Then fall into the usual case.  */
              rtx insns, temp;