Kenneth Zadeck <zad...@naturalbridge.com> 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

Reply via email to