https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121829
--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> ---
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).