https://gcc.gnu.org/bugzilla/show_bug.cgi?id=123983
--- Comment #12 from Tamar Christina <tnfchris at gcc dot gnu.org> --- (In reply to Richard Biener from comment #11) > (In reply to Tamar Christina from comment #9) > > IMHO, the right fix is to have it not update out of loop uses that come from > > a live value. The code was intended to fixup the IVs that were not live. > > > > But will defer to you :) > > I'll note the function takes an update_e edge, the edge to update IVs on. > It also only iterates over that edge destination PHIs. As said, I'm going > to see where it fails (eventually). I'm away today so can't look it up at (back tomorrow) But yes (from memory) it does get the edge, however because of the moving of the call to vect_update_ivs_after_vectorizer until after the skip_epilog edge we now can have a value which that code copied into the skip epilog destination edge. Previously it was OK to just update the destination of update_e, and when we add the skip edge the correct value is copied in, because it copies from the updated PHI. But now we do it in reverse. And the reverse order was to make vect_update_ivs_after_vectorizer_for_early_break not have to walk the edges again to update them. But a regression run should indeed point it out.
