(simplify_comparison, case NEG): Replace large block of code with

equivalent call to num_sign_bit_copies.

From-SVN: r2972
This commit is contained in:
Richard Kenner 1992-12-28 06:08:28 -05:00
parent cbec710efc
commit 3bed814135
1 changed files with 3 additions and 22 deletions

View File

@ -8029,28 +8029,9 @@ simplify_comparison (code, pop0, pop1)
continue;
}
/* If we have NEG of something that is the result of a
SIGN_EXTEND, SIGN_EXTRACT, or ASHIFTRT, we know that the
two high-order bits must be the same and hence that
"(-a) < 0" is equivalent to "a > 0". Otherwise, we can't
do this. */
if (GET_CODE (XEXP (op0, 0)) == SIGN_EXTEND
|| (GET_CODE (XEXP (op0, 0)) == SIGN_EXTRACT
&& GET_CODE (XEXP (XEXP (op0, 0), 1)) == CONST_INT
&& (INTVAL (XEXP (XEXP (op0, 0), 1))
< GET_MODE_BITSIZE (GET_MODE (XEXP (XEXP (op0, 0), 0)))))
|| (GET_CODE (XEXP (op0, 0)) == ASHIFTRT
&& GET_CODE (XEXP (XEXP (op0, 0), 1)) == CONST_INT
&& XEXP (XEXP (op0, 0), 1) != const0_rtx)
|| ((tem = get_last_value (XEXP (op0, 0))) != 0
&& (GET_CODE (tem) == SIGN_EXTEND
|| (GET_CODE (tem) == SIGN_EXTRACT
&& GET_CODE (XEXP (tem, 1)) == CONST_INT
&& (INTVAL (XEXP (tem, 1))
< GET_MODE_BITSIZE (GET_MODE (XEXP (tem, 0)))))
|| (GET_CODE (tem) == ASHIFTRT
&& GET_CODE (XEXP (tem, 1)) == CONST_INT
&& XEXP (tem, 1) != const0_rtx))))
/* If we have NEG of something whose two high-order bits are the
same, we know that "(-a) < 0" is equivalent to "a > 0". */
if (num_sign_bit_copies (op0, mode) >= 2)
{
op0 = XEXP (op0, 0);
code = swap_condition (code);