https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97579
--- Comment #2 from Martin Liška <marxin at gcc dot gnu.org> --- (In reply to Richard Biener from comment #1) > So we have used_vec_cond_exprs == 1 and a V16SI eq/ne compare with a > vector(16) <signed-boolean:1> HImode result. We fall into > > gcc_assert (known_eq (GET_MODE_SIZE (mode), GET_MODE_SIZE (cmp_op_mode)) > && known_eq (GET_MODE_NUNITS (mode), > GET_MODE_NUNITS (cmp_op_mode))); > > then but this is clearly a case where we _have_ to use the vec_cmp_expr > (because of the scalar mode). So either simply remove the > used_vec_cond_exprs check or amend it with the negative of the above assert. No, used_vec_cond_exprs == 2, but we fail here: 166 if (used_vec_cond_exprs >= 2 167 && (get_vcond_mask_icode (mode, TYPE_MODE (op0a_type)) 168 != CODE_FOR_nothing) 169 && expand_vec_cmp_expr_p (op0a_type, TREE_TYPE (lhs), tcode)) where: #0 get_vcond_mask_icode (vmode=E_HImode, mmode=E_V16SImode) at /home/marxin/Programming/gcc/gcc/optabs-query.h:131 returns false.