combine.c (simplify_rtx): Recognize another case of a synthesized sign extension.

* combine.c (simplify_rtx): Recognize another case of a synthesized
        sign extension.

From-SVN: r29055
This commit is contained in:
Jeffrey A Law 1999-09-02 09:02:33 +00:00 committed by Jeff Law
parent 08e105064f
commit e6380233ff
2 changed files with 7 additions and 2 deletions

View File

@ -13,6 +13,9 @@ Thu Sep 2 00:43:59 1999 Finn Hakansson <finn@axis.com>
Thu Sep 2 00:06:43 1999 Jeffrey A Law (law@cygnus.com)
* combine.c (simplify_rtx): Recognize another case of a synthesized
sign extension.
* varasm.c (mark_constant_pool): When marking indirect references,
only look at SYMBOL_REFs.

View File

@ -3913,12 +3913,14 @@ simplify_rtx (x, op0_mode, last, in_dest)
/* (plus (xor (and <foo> (const_int pow2 - 1)) <c>) <-c>)
when c is (const_int (pow2 + 1) / 2) is a sign extension of a
bit-field and can be replaced by either a sign_extend or a
sign_extract. The `and' may be a zero_extend. */
sign_extract. The `and' may be a zero_extend and the two
<c>, -<c> constants may be reversed. */
if (GET_CODE (XEXP (x, 0)) == XOR
&& GET_CODE (XEXP (x, 1)) == CONST_INT
&& GET_CODE (XEXP (XEXP (x, 0), 1)) == CONST_INT
&& INTVAL (XEXP (x, 1)) == - INTVAL (XEXP (XEXP (x, 0), 1))
&& (i = exact_log2 (INTVAL (XEXP (XEXP (x, 0), 1)))) >= 0
&& ((i = exact_log2 (INTVAL (XEXP (XEXP (x, 0), 1)))) >= 0
|| (i = exact_log2 (INTVAL (XEXP (x, 1)))) >= 0)
&& GET_MODE_BITSIZE (mode) <= HOST_BITS_PER_WIDE_INT
&& ((GET_CODE (XEXP (XEXP (x, 0), 0)) == AND
&& GET_CODE (XEXP (XEXP (XEXP (x, 0), 0), 1)) == CONST_INT