https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113576

--- Comment #29 from Richard Biener <rguenth at gcc dot gnu.org> ---
(In reply to Hongtao Liu from comment #28)
> I saw we already maskoff integral modes for vector mask in store_constructor
> 
>       /* Use sign-extension for uniform boolean vectors with
>          integer modes and single-bit mask entries.
>          Effectively "vec_duplicate" for bitmasks.  */
>       if (elt_size == 1
>           && !TREE_SIDE_EFFECTS (exp)
>           && VECTOR_BOOLEAN_TYPE_P (type)
>           && SCALAR_INT_MODE_P (TYPE_MODE (type))
>           && (elt = uniform_vector_p (exp))
>           && !VECTOR_TYPE_P (TREE_TYPE (elt)))
>         {
>           rtx op0 = force_reg (TYPE_MODE (TREE_TYPE (elt)),
>                                expand_normal (elt));
>           rtx tmp = gen_reg_rtx (mode);
>           convert_move (tmp, op0, 0);
> 
>           /* Ensure no excess bits are set.
>              GCN needs this for nunits < 64.
>              x86 needs this for nunits < 8.  */
>           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,
>                                 true, OPTAB_WIDEN);
>           if (tmp != target)
>             emit_move_insn (target, tmp);
>           break;
>         }

But that's just for CONSTRUCTORs, we got the VIEW_CONVERT_EXPR path for
VECTOR_CSTs.  But yeah, that _might_ argue we should perform the same
masking for VECTOR_CST expansion as well, instead of trying to fixup
in do_compare_and_jump?

Reply via email to