On 30/04/13 16:56, Richard Sandiford wrote:
> This patch fixes out the GEN_INT/gen_int_mode that Richard pointed out
> in the wide-int review.  It also passes "mode" rather than "VOIDmode"
> to immed_double_int_const.  (As discussed in that thread, the latter
> change shouldn't make any difference in practice, but is still more
> correct in principle.)
> 
> Bootstrapped & regression-tested on x86_64-linux-gnu.  OK to install?
> 
> Richard
> 
> gcc/
>       * explow.c (plus_constant): Pass "mode" to immed_double_int_const.
>       Use gen_int_mode rather than GEN_INT.
> 
> Index: gcc/explow.c
> ===================================================================
> --- gcc/explow.c      2013-02-25 09:41:58.000000000 +0000
> +++ gcc/explow.c      2013-04-30 15:52:57.270362112 +0100
> @@ -106,10 +106,10 @@ plus_constant (enum machine_mode mode, r
>         if (overflow)
>           gcc_unreachable ();
> 
> -       return immed_double_int_const (v, VOIDmode);
> +       return immed_double_int_const (v, mode);
>       }
> 
> -      return GEN_INT (INTVAL (x) + c);
> +      return gen_int_mode (INTVAL (x) + c, mode);

This calls trunc_int_for_mode which fails for mode == VOIDmode.
On s390x gcc.c-torture/compile/20021008-1.c fails due to this.

-Andreas-

> 
>      case CONST_DOUBLE:
>        {
> @@ -124,7 +124,7 @@ plus_constant (enum machine_mode mode, r
>            To fix, add constant support wider than CONST_DOUBLE.  */
>         gcc_assert (GET_MODE_BITSIZE (mode) <= HOST_BITS_PER_DOUBLE_INT);
> 
> -     return immed_double_int_const (v, VOIDmode);
> +     return immed_double_int_const (v, mode);
>        }
> 
>      case MEM:
> 

Reply via email to