Re-apply an earlier fix, with a small update
From-SVN: r37794
This commit is contained in:
parent
76e57b4589
commit
7dbe6ae9b3
|
@ -12,6 +12,11 @@
|
|||
htab_find_slot_with_hash.
|
||||
(cselib_lookup): Likewise.
|
||||
|
||||
Based on a patch from Geoff Keating <geoffk@redhat.com>:
|
||||
* loop.c (basic_induction_var): If a REG is set from something
|
||||
that is not a biv, then the REG is not a biv. Even if it is
|
||||
earlier set from something that is a biv.
|
||||
|
||||
2000-11-27 Alexandre Oliva <aoliva@redhat.com>
|
||||
|
||||
* configure.in (extra_objs): Enclose extra_headers in quotes.
|
||||
|
|
34
gcc/loop.c
34
gcc/loop.c
|
@ -5467,6 +5467,7 @@ basic_induction_var (loop, x, mode, dest_reg, p, inc_val, mult_val, location)
|
|||
insn = p;
|
||||
while (1)
|
||||
{
|
||||
rtx dest;
|
||||
do
|
||||
{
|
||||
insn = PREV_INSN (insn);
|
||||
|
@ -5479,21 +5480,26 @@ basic_induction_var (loop, x, mode, dest_reg, p, inc_val, mult_val, location)
|
|||
set = single_set (insn);
|
||||
if (set == 0)
|
||||
break;
|
||||
dest = SET_DEST (set);
|
||||
if (dest == x
|
||||
|| (GET_CODE (dest) == SUBREG
|
||||
&& (GET_MODE_SIZE (GET_MODE (dest)) <= UNITS_PER_WORD)
|
||||
&& (GET_MODE_CLASS (GET_MODE (dest)) == MODE_INT)
|
||||
&& SUBREG_REG (dest) == x))
|
||||
return basic_induction_var (loop, SET_SRC (set),
|
||||
(GET_MODE (SET_SRC (set)) == VOIDmode
|
||||
? GET_MODE (x)
|
||||
: GET_MODE (SET_SRC (set))),
|
||||
dest_reg, insn,
|
||||
inc_val, mult_val, location);
|
||||
|
||||
if ((SET_DEST (set) == x
|
||||
|| (GET_CODE (SET_DEST (set)) == SUBREG
|
||||
&& (GET_MODE_SIZE (GET_MODE (SET_DEST (set)))
|
||||
<= UNITS_PER_WORD)
|
||||
&& (GET_MODE_CLASS (GET_MODE (SET_DEST (set)))
|
||||
== MODE_INT)
|
||||
&& SUBREG_REG (SET_DEST (set)) == x))
|
||||
&& basic_induction_var (loop, SET_SRC (set),
|
||||
(GET_MODE (SET_SRC (set)) == VOIDmode
|
||||
? GET_MODE (x)
|
||||
: GET_MODE (SET_SRC (set))),
|
||||
dest_reg, insn,
|
||||
inc_val, mult_val, location))
|
||||
return 1;
|
||||
while (GET_CODE (dest) == SIGN_EXTRACT
|
||||
|| GET_CODE (dest) == ZERO_EXTRACT
|
||||
|| GET_CODE (dest) == SUBREG
|
||||
|| GET_CODE (dest) == STRICT_LOW_PART)
|
||||
dest = XEXP (dest, 0);
|
||||
if (dest == x)
|
||||
break;
|
||||
}
|
||||
/* Fall through. */
|
||||
|
||||
|
|
Loading…
Reference in New Issue