loop.c (strength_reduce): When doing biv->giv conversion, update reg note of NEXT...
authorJ"orn Rennecke <amylaar@cygnus.co.uk>
Mon, 2 Aug 1999 23:50:36 +0000 (23:50 +0000)
committerJoern Rennecke <amylaar@gcc.gnu.org>
Mon, 2 Aug 1999 23:50:36 +0000 (00:50 +0100)
* loop.c (strength_reduce): When doing biv->giv conversion, update
reg note of NEXT->insn.

From-SVN: r28423

gcc/ChangeLog
gcc/loop.c

index 7ec52047468fbcd37dc0d9b26cda130f05f0c5a9..fe7eec16a01988dbed239fb0063229a6bef1e693 100644 (file)
@@ -1,3 +1,8 @@
+Tue Aug  3 00:45:02 1999  J"orn Rennecke <amylaar@cygnus.co.uk>
+
+       * loop.c (strength_reduce): When doing biv->giv conversion, update
+       reg note of NEXT->insn.
+
 1999-08-02  Jakub Jelinek  <jj@ultra.linux.cz>
 
        * real.c (PUT_REAL): Clear unused bytes if long double is IEEE quad.
index 0b02cc2a41c5cda279a606220da67d232932f029..255af0e570311ec4738fc59740d2bc83e1f6be77 100644 (file)
@@ -4205,7 +4205,7 @@ strength_reduce (scan_start, end, loop_top, insn_count,
          for (vp = &bl->biv, next = *vp; v = next, next = v->next_iv;)
            {
              HOST_WIDE_INT offset;
-             rtx set, add_val, old_reg, dest_reg, last_use_insn;
+             rtx set, add_val, old_reg, dest_reg, last_use_insn, note;
              int old_regno, new_regno;
 
              if (! v->always_executed
@@ -4311,7 +4311,13 @@ strength_reduce (scan_start, end, loop_top, insn_count,
     
              REG_IV_TYPE (new_regno) = GENERAL_INDUCT;
              REG_IV_INFO (new_regno) = v;
-    
+
+             /* If next_insn has a REG_EQUAL note that mentiones OLD_REG,
+                it must be replaced.  */
+             note = find_reg_note (next->insn, REG_EQUAL, NULL_RTX);
+             if (note && reg_mentioned_p (old_reg, XEXP (note, 0)))
+               XEXP (note, 0) = copy_rtx (SET_SRC (single_set (next->insn)));
+
              /* Remove the increment from the list of biv increments,
                 and record it as a giv.  */
              *vp = next;