Kenneth Zadeck <[email protected]> writes:
> diff --git a/gcc/combine.c b/gcc/combine.c
> index 4e0a579..b531305 100644
> --- a/gcc/combine.c
> +++ b/gcc/combine.c
> @@ -2617,16 +2617,19 @@ try_combine (rtx i3, rtx i2, rtx i1, rtx i0, int
> *new_direct_jump_p,
> constant. */
> if (i1 == 0
> && (temp = single_set (i2)) != 0
> - && (CONST_INT_P (SET_SRC (temp))
> - || CONST_DOUBLE_AS_INT_P (SET_SRC (temp)))
> + && CONST_SCALAR_INT_P (SET_SRC (temp))
> && GET_CODE (PATTERN (i3)) == SET
> - && (CONST_INT_P (SET_SRC (PATTERN (i3)))
> - || CONST_DOUBLE_AS_INT_P (SET_SRC (PATTERN (i3))))
> + && CONST_SCALAR_INT_P (SET_SRC (PATTERN (i3)))
> && reg_subword_p (SET_DEST (PATTERN (i3)), SET_DEST (temp)))
> {
> rtx dest = SET_DEST (PATTERN (i3));
> int offset = -1;
> int width = 0;
> +
> + /* There are not explicit tests to make sure that this is not a
> + float, but there is code here that would not be correct if it
> + was. */
> + gcc_assert (GET_MODE_CLASS (GET_MODE (SET_SRC (temp))) != MODE_FLOAT);
No need for this assert: CONST_SCALAR_INT_P (SET_SRC (temp)) should cover it.
> @@ -1009,9 +1007,7 @@ rtx_equal_for_cselib_1 (rtx x, rtx y, enum machine_mode
> memmode)
> static rtx
> wrap_constant (enum machine_mode mode, rtx x)
> {
> - if (!CONST_INT_P (x)
> - && GET_CODE (x) != CONST_FIXED
> - && !CONST_DOUBLE_AS_INT_P (x))
> + if ((!CONST_SCALAR_INT_P (x)) && GET_CODE (x) != CONST_FIXED)
Redundant brackets.
Looks good to me otherwise, thanks.
Richard