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

Reply via email to