https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81175
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Target| |x86_64-*-*, i?86-*-* --- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> --- #5 0x00000000012c72c0 in slpeel_duplicate_current_defs_from_edges ( from=<edge 0x7ffff6a85850 (27 -> 75)>, to=<edge 0x7ffff6a850e0 (22 -> 67)>) at /space/rguenther/src/svn/gcc-7-branch/gcc/tree-vect-loop-manip.c:353 353 get_current_def (PHI_ARG_DEF_FROM_EDGE (from_phi, from))); (gdb) l 348 349 gphi *from_phi = get_virtual_phi (from->dest); 350 gphi *to_phi = get_virtual_phi (to->dest); 351 if (from_phi) 352 set_current_def (PHI_ARG_DEF_FROM_EDGE (to_phi, to), 353 get_current_def (PHI_ARG_DEF_FROM_EDGE (from_phi, from))); 354 } 355 356 357 /* Given LOOP this function generates a new copy of it and puts it (gdb) p from_phi $1 = (gphi *) 0x7ffff66d3b00 (gdb) p to_phi $2 = (gphi *) 0x0 ok, so that's unexpected... As we do the peeling from the non-ifconverted copy we have a virtual loop-closed PHI for the scalar loop but not for the to be vectorized loop. For some reason. Looks like update_ssa done by vect_loop_versioning produces that. Ah, and that is because we vectorize gathers with a x86_64 builtin that has a VDEF ... (ISTR a bug about that).