* combine.c (make_extraction): Reapply to the argument of an ASHIFT.

From-SVN: r54846
This commit is contained in:
Richard Sandiford 2002-06-20 18:04:00 +00:00 committed by Richard Sandiford
parent 0ab2e54bc3
commit 988ef418eb
2 changed files with 19 additions and 0 deletions

View File

@ -1,3 +1,7 @@
2002-06-20 Richard Sandiford <rsandifo@redhat.com>
* combine.c (make_extraction): Reapply to the argument of an ASHIFT.
2002-06-20 Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
* config/sparc/t-crtfm (crtfastmath.o): Prefix with $(T) for

View File

@ -5968,6 +5968,21 @@ make_extraction (mode, inner, pos, pos_rtx, len,
is_mode = GET_MODE (SUBREG_REG (inner));
inner = SUBREG_REG (inner);
}
else if (GET_CODE (inner) == ASHIFT
&& GET_CODE (XEXP (inner, 1)) == CONST_INT
&& pos_rtx == 0 && pos == 0
&& len > INTVAL (XEXP (inner, 1)))
{
/* We're extracting the least significant bits of an rtx
(ashift X (const_int C)), where LEN > C. Extract the
least significant (LEN - C) bits of X, giving an rtx
whose mode is MODE, then shift it left C times. */
new = make_extraction (mode, XEXP (inner, 0),
0, 0, len - INTVAL (XEXP (inner, 1)),
unsignedp, in_dest, in_compare);
if (new != 0)
return gen_rtx_ASHIFT (mode, new, XEXP (inner, 1));
}
inner_mode = GET_MODE (inner);