mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-08 12:10:39 +08:00
* combine.c (make_extraction): Reapply to the argument of an ASHIFT.
From-SVN: r54846
This commit is contained in:
parent
0ab2e54bc3
commit
988ef418eb
@ -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
|
||||
|
@ -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);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user