https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115406
--- Comment #6 from Hongtao Liu <liuhongt at gcc dot gnu.org> --- For 1 element vector, when backend doesn't support it's vector mode, the scalar mode is used for the type, which makes expand_vec_cond_expr_p use QImode for icode check.(vcond_mask_qiqi) It could also be the case when both data type and cmp_type are vector_boolean_type. It looks like vcond_mask_qiqi is dichotomous. For the former, it should be operands[3] == 1 ? operands[1] : operands[2] since mask is vector 1 boolean. For the latter, it should be (operand[1] & operand[3]) | (operand[2] & ~operand[3]) BTW, when assign -1 to vector(1) <signed-boolean:8>, should the upper bit be cleared? Look like only 1 element boolean vector is cleared, but not vector(2) <signed-boolean:8>. If the upper bits are not cleared, both 2 cases are equal.