https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94618
--- Comment #7 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Perhaps if we checked DEBUG_INSN_P on BB_END, we could then use prev_nondebug_insn, so like: if (INSN_P (insn) && BLOCK_FOR_INSN (insn)) { basic_block bb = BLOCK_FOR_INSN (insn); if (BB_END (bb) == insn || (DEBUG_INSN_P (BB_END (bb)) && prev_nondebug_insn (BB_END (bb)) == insn)) purge = true; } ?