https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96015
--- Comment #30 from Eric Botcazou <ebotcazou at gcc dot gnu.org> --- Not clear what the right fix is... The hot spot in relax_delay_slots: /* If this is a jump insn, see if it now jumps to a jump, jumps to the next insn, or jumps to a label that is not the last of a group of consecutive labels. */ if (is_a <rtx_jump_insn *> (insn) && (condjump_p (insn) || condjump_in_parallel_p (insn)) && !ANY_RETURN_P (target_label = JUMP_LABEL (insn))) { rtx_jump_insn *jump_insn = as_a <rtx_jump_insn *> (insn); target_label = skip_consecutive_labels (follow_jumps (target_label, jump_insn, &crossing)); if (ANY_RETURN_P (target_label)) target_label = find_end_label (target_label); if (target_label && next_active_insn (as_a<rtx_insn *> (target_label)) == next && ! condjump_in_parallel_p (jump_insn) && ! (next && switch_text_sections_between_p (jump_insn, next))) { delete_jump (jump_insn); continue; } IIRC Jeff already dealt with this kind of issues in the past, so maybe he knows what the best way out would be?