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...

Reply via email to