https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121829

--- Comment #4 from Richard Biener <rguenth at gcc dot gnu.org> ---
(In reply to Richard Biener from comment #3)
> I belive it's redirect_edge_and_branch called from split_edge done during
> vectorizer peeling.  We are  splitting the loop entry edge which produces
> the label copy and then we remove the (temporary) forwarder again with
> 
>       /* And remove the non-necessary forwarder again.  Keep the other
>          one so we have a proper pre-header for the loop at the exit edge. 
> */
>       redirect_edge_pred (single_succ_edge (preheader),
>                           single_pred (preheader));
>       delete_basic_block (preheader);
> 
> which does not adjust the branch (it's a forwarder, so no branch stmt ... in
> theory).

Oh, and we do it this way because it preserves PHI node args at the loop
header nicely while

      redirect_edge_and_branch_force (single_pred_edge (preheader),
                                      single_succ (preheader));

does not and requires extra work.  It _does_ adjust the asm() goto label
correctly though.

Reply via email to