mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-02-22 13:49:49 +08:00
combine.c (make_compound_operation): Use simplify_subreg.
2005-06-19 Andreas Krebbel <krebbel1@de.ibm.com> * combine.c (make_compound_operation): Use simplify_subreg. Delete a optimization already done by simplify_subreg. From-SVN: r101183
This commit is contained in:
parent
9f24cc7361
commit
966b148a49
@ -1,3 +1,8 @@
|
||||
2005-06-19 Andreas Krebbel <krebbel1@de.ibm.com>
|
||||
|
||||
* combine.c (make_compound_operation): Use simplify_subreg. Delete
|
||||
a optimization already done by simplify_subreg.
|
||||
|
||||
2005-06-19 Ulrich Weigand <uweigand@de.ibm.com>
|
||||
|
||||
* loop.c (scan_loop): Do not consider insns setting the frame
|
||||
|
@ -6732,41 +6732,33 @@ make_compound_operation (rtx x, enum rtx_code in_code)
|
||||
what it originally did, do this SUBREG as a force_to_mode. */
|
||||
|
||||
tem = make_compound_operation (SUBREG_REG (x), in_code);
|
||||
if (GET_CODE (tem) != GET_CODE (SUBREG_REG (x))
|
||||
&& GET_MODE_SIZE (mode) < GET_MODE_SIZE (GET_MODE (tem))
|
||||
&& subreg_lowpart_p (x))
|
||||
{
|
||||
rtx newer = force_to_mode (tem, mode, ~(HOST_WIDE_INT) 0,
|
||||
NULL_RTX, 0);
|
||||
|
||||
/* If we have something other than a SUBREG, we might have
|
||||
done an expansion, so rerun ourselves. */
|
||||
if (GET_CODE (newer) != SUBREG)
|
||||
newer = make_compound_operation (newer, in_code);
|
||||
{
|
||||
rtx simplified;
|
||||
simplified = simplify_subreg (GET_MODE (x), tem, GET_MODE (tem),
|
||||
SUBREG_BYTE (x));
|
||||
|
||||
return newer;
|
||||
}
|
||||
if (simplified)
|
||||
tem = simplified;
|
||||
|
||||
/* If this is a paradoxical subreg, and the new code is a sign or
|
||||
zero extension, omit the subreg and widen the extension. If it
|
||||
is a regular subreg, we can still get rid of the subreg by not
|
||||
widening so much, or in fact removing the extension entirely. */
|
||||
if ((GET_CODE (tem) == SIGN_EXTEND
|
||||
|| GET_CODE (tem) == ZERO_EXTEND)
|
||||
&& subreg_lowpart_p (x))
|
||||
{
|
||||
if (GET_MODE_SIZE (mode) > GET_MODE_SIZE (GET_MODE (tem))
|
||||
|| (GET_MODE_SIZE (mode) >
|
||||
GET_MODE_SIZE (GET_MODE (XEXP (tem, 0)))))
|
||||
{
|
||||
if (! SCALAR_INT_MODE_P (mode))
|
||||
break;
|
||||
tem = gen_rtx_fmt_e (GET_CODE (tem), mode, XEXP (tem, 0));
|
||||
}
|
||||
else
|
||||
tem = gen_lowpart (mode, XEXP (tem, 0));
|
||||
if (GET_CODE (tem) != GET_CODE (SUBREG_REG (x))
|
||||
&& GET_MODE_SIZE (mode) < GET_MODE_SIZE (GET_MODE (tem))
|
||||
&& subreg_lowpart_p (x))
|
||||
{
|
||||
rtx newer = force_to_mode (tem, mode, ~(HOST_WIDE_INT) 0,
|
||||
NULL_RTX, 0);
|
||||
|
||||
/* If we have something other than a SUBREG, we might have
|
||||
done an expansion, so rerun ourselves. */
|
||||
if (GET_CODE (newer) != SUBREG)
|
||||
newer = make_compound_operation (newer, in_code);
|
||||
|
||||
return newer;
|
||||
}
|
||||
|
||||
if (simplified)
|
||||
return tem;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
|
Loading…
Reference in New Issue
Block a user