https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110221
--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> --- So sth along the PR108979 patch doesn't help: diff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc index 61e508fcb6c..be963aea16f 100644 --- a/gcc/tree-vect-stmts.cc +++ b/gcc/tree-vect-stmts.cc @@ -3365,6 +3365,7 @@ vectorizable_call (vec_info *vinfo, if (internal_fn_p (cfn)) mask_opno = internal_fn_mask_index (as_internal_fn (cfn)); + bool is_invariant = true; for (i = 0; i < nargs; i++) { if ((int) i == mask_opno) @@ -3383,6 +3384,8 @@ vectorizable_call (vec_info *vinfo, "use not simple.\n"); return false; } + if (dt[i] != vect_external_def && dt[i] != vect_constant_def) + is_invariant = false; /* We can only handle calls with arguments of the same type. */ if (rhs_type @@ -3607,7 +3610,8 @@ vectorizable_call (vec_info *vinfo, scalar_dest = gimple_call_lhs (stmt); vec_dest = vect_create_destination_var (scalar_dest, vectype_out); - bool masked_loop_p = loop_vinfo && LOOP_VINFO_FULLY_MASKED_P (loop_vinfo); + bool masked_loop_p + = !is_invariant && loop_vinfo && LOOP_VINFO_FULLY_MASKED_P (loop_vinfo); unsigned int vect_nargs = nargs; if (masked_loop_p && reduc_idx >= 0) {