https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92275
--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> --- We run into tree guard_arg = find_guard_arg (loop, epilog, update_phi); /* If the var is live after loop but not a reduction, we simply use the old arg. */ if (!guard_arg) guard_arg = old_arg; which means we failed to generate a LC PHI for the LIVE stmt during peeling. Then epilogue creation simply does /* Find the loop-closed-use at the loop exit of the original scalar result. (The reduction result is expected to have two immediate uses, one at the latch block, and one at the loop exit). For double reductions we are looking for exit phis of the outer loop. */ FOR_EACH_IMM_USE_FAST (use_p, imm_iter, scalar_dest) { but doesn't do any dominance sanity checks that it found a valid PHI (it simply assumes LC SSA is correct).