On Fri, Feb 23, 2024 at 12:58:53PM +0000, Andrew Stubbs wrote:
> This is a follow-up to the previous patch to ensure that integer vector
> bit-masks do not have excess bits set. It fixes a bug, observed on
> amdgcn, in which the mask could be incorrectly set to zero, resulting in
> wrong-code.
> 
> The mask was broken when nunits==32. The patched version will probably
> be broken for nunits==64, but I don't think any current targets have
> masks with more than 64 bits.
> 
> OK for mainline?
> 
> Andrew
> 
> gcc/ChangeLog:
> 
>       * expr.cc (store_constructor): Use 64-bit shifts.

No, this isn't 64-bit shift on all hosts.
Use HOST_WIDE_INT_1U instead.

> --- a/gcc/expr.cc
> +++ b/gcc/expr.cc
> @@ -7879,7 +7879,7 @@ store_constructor (tree exp, rtx target, int cleared, 
> poly_int64 size,
>           auto nunits = TYPE_VECTOR_SUBPARTS (type).to_constant ();
>           if (maybe_ne (GET_MODE_PRECISION (mode), nunits))
>             tmp = expand_binop (mode, and_optab, tmp,
> -                               GEN_INT ((1 << nunits) - 1), target,
> +                               GEN_INT ((1UL << nunits) - 1), target,
>                                 true, OPTAB_WIDEN);
>           if (tmp != target)
>             emit_move_insn (target, tmp);
> -- 
> 2.41.0

        Jakub

Reply via email to