https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114164
--- Comment #5 from Richard Biener <rguenth at gcc dot gnu.org> --- The following fixes this, it also shows that even with -mavx2 we don't support this (as was expected after the analysis). Note since we emit mask ? {true,..} : {false,...} we only support in-branch clones when the target has corresponding vcond_mask expanders. For vcondeq we'd need to emit a redundant mask != mask_false_cst compare diff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc index be0e1a9c69d..14a3ffb5f02 100644 --- a/gcc/tree-vect-stmts.cc +++ b/gcc/tree-vect-stmts.cc @@ -4210,6 +4210,16 @@ vectorizable_simd_clone_call (vec_info *vinfo, stmt_vec_info stmt_info, " supported for mismatched vector sizes.\n"); return false; } + if (!expand_vec_cond_expr_p (clone_arg_vectype, + arginfo[i].vectype, ERROR_MARK)) + { + if (dump_enabled_p ()) + dump_printf_loc (MSG_MISSED_OPTIMIZATION, + vect_location, + "cannot compute mask argument for" + " in-branch vector clones.\n"); + return false; + } } else if (SCALAR_INT_MODE_P (bestn->simdclone->mask_mode)) {