https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91896
--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> --- For some reason if (ncopies > 1 && STMT_VINFO_RELEVANT (reduc_stmt_info) <= vect_used_only_live && (use_stmt_info = loop_vinfo->lookup_single_use (phi_result)) && vect_stmt_to_vectorize (use_stmt_info) == reduc_stmt_info) single_defuse_cycle = true; triggers. Here we have detected a pattern for the et *= 3 operation (somehow 8 byte vectors do not have multiplication?). But honestly I don't remember what the condition above tries to guard (nested cycles?). But we clearly cannot handle this case when the actual stmt vectorization is not under control of vectorizable_reduction ... So the problem must be somehow latent. Ah, of course - with operand swapping the et = et * 3 appears as et = 3 * et and that is not recognized by vect_synth_mult_by_constant. So the issue _is_ latent, we're likely just missing a pattern that applies to reduction ops and produces a pattern def sequence...