From af1980974939d286cf7d8341a902c0824a52ad0e Mon Sep 17 00:00:00 2001 From: "J\"orn Rennecke" Date: Thu, 25 May 2000 01:30:51 +0000 Subject: [PATCH] * loop.c (basic_induction_var): Avoid double recording of an increment. From-SVN: r34153 --- gcc/ChangeLog | 4 ++++ gcc/loop.c | 8 +++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ded3ed7474f..5f2ac8d4407 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +Thu May 25 02:27:22 2000 J"orn Rennecke + + * loop.c (basic_induction_var): Avoid double recording of an increment. + Thu May 25 02:19:27 2000 J"orn Rennecke * Back out this patch: diff --git a/gcc/loop.c b/gcc/loop.c index ed396f4ab8f..6746c98c2b1 100644 --- a/gcc/loop.c +++ b/gcc/loop.c @@ -5995,6 +5995,11 @@ basic_induction_var (loop, x, mode, dest_reg, p, inc_val, mult_val, location) /* If this register is assigned in a previous insn, look at its source, but don't go outside the loop or past a label. */ + /* If this sets a register to itself, we would repeat any previous + biv increment if we applied this strategy blindly. */ + if (rtx_equal_p (dest_reg, x)) + return 0; + insn = p; while (1) { @@ -6066,7 +6071,8 @@ basic_induction_var (loop, x, mode, dest_reg, p, inc_val, mult_val, location) if (insn) set = single_set (insn); - if (set && SET_DEST (set) == XEXP (x, 0) + if (! rtx_equal_p (dest_reg, XEXP (x, 0)) + && set && SET_DEST (set) == XEXP (x, 0) && GET_CODE (XEXP (x, 1)) == CONST_INT && INTVAL (XEXP (x, 1)) >= 0 && GET_CODE (SET_SRC (set)) == ASHIFT -- 2.30.2