https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113576
--- Comment #28 from Hongtao Liu <liuhongt at gcc dot gnu.org> --- 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; }