aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJ"orn Rennecke <amylaar@cygnus.co.uk>1999-08-02 23:50:36 +0000
committerJoern Rennecke <amylaar@gcc.gnu.org>1999-08-03 00:50:36 +0100
commita47f48d8fc2ca345f52c851f0ce711d76fcc7a89 (patch)
tree28c8e5534186ab6d08dd8af2ed6313c642b40a55 /gcc
parentf634f682b246632fd128b3dfa0ee9f9d93706842 (diff)
downloadgcc-a47f48d8fc2ca345f52c851f0ce711d76fcc7a89.zip
gcc-a47f48d8fc2ca345f52c851f0ce711d76fcc7a89.tar.gz
gcc-a47f48d8fc2ca345f52c851f0ce711d76fcc7a89.tar.bz2
loop.c (strength_reduce): When doing biv->giv conversion, update reg note of NEXT->insn.
* loop.c (strength_reduce): When doing biv->giv conversion, update reg note of NEXT->insn. From-SVN: r28423
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/loop.c10
2 files changed, 13 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 7ec5204..fe7eec1 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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.
diff --git a/gcc/loop.c b/gcc/loop.c
index 0b02cc2..255af0e 100644
--- a/gcc/loop.c
+++ b/gcc/loop.c
@@ -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;