* loop.c (strength_reduce): When doing biv->giv conversion, update
reg note of NEXT->insn.
From-SVN: r27574
+Thu Jun 17 21:34:24 1999 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * loop.c (strength_reduce): When doing biv->giv conversion, update
+ reg note of NEXT->insn.
+
Thu Jun 17 14:25:08 1999 Jeffrey A Law (law@cygnus.com)
* loop.c (move_movables): Note issues with replacing REGs with
Thu Jun 17 14:25:08 1999 Jeffrey A Law (law@cygnus.com)
* loop.c (move_movables): Note issues with replacing REGs with
for (vp = &bl->biv, next = *vp; v = next, next = v->next_iv;)
{
HOST_WIDE_INT offset;
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
int old_regno, new_regno;
if (! v->always_executed
REG_IV_TYPE (new_regno) = GENERAL_INDUCT;
REG_IV_INFO (new_regno) = v;
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;
/* Remove the increment from the list of biv increments,
and record it as a giv. */
*vp = next;