[Bug tree-optimization/91896] [10 Regression] ICE in vect_get_vec_def_for_stmt_copy, at tree-vect-stmts.c:1687

rguenth at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Wed Sep 25 10:39:00 GMT 2019


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


More information about the Gcc-bugs mailing list