https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116879
--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> --- I'll note it is loop distribution that leaves around the forwarder which CFG cleanup is not able to remove (because it has a PHI, pass_merge_phi would). We might want to enhance CFG cleanup to handle the case of a single incoming edge to SRC and a DEST without PHIs (we can then simply move the PHIs without any problem). <bb 8> [local count: 134202633]: # .MEM_13 = PHI <.MEM_52(20), .MEM_12(7)> # b_lsm.5_23 = PHI <b_lsm.5_24(20), _2(7)> # ivtmp_15 = PHI <9(20), ivtmp_30(7)> ivtmp_30 = ivtmp_15 - 1; if (ivtmp_30 != 0) goto <bb 4>; [88.89%] else goto <bb 9>; [11.11%] <bb 4> [local count: 1073741823]: # .MEM_12 = PHI <.MEM_13(8)> _2 = b_lsm.5_23 + -1; <bb 7> [local count: 119292720]: goto <bb 8>;