https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91161
--- Comment #3 from Alexander Monakov <amonakov at gcc dot gnu.org> --- With -fno-dce, a NOTE_INSN_DELETED_LABEL appears between the last "real" insn in the basic block (a sibcall) and a barrier rtx: (call_insn/u/c 20 19 12 3 (call (mem:QI (symbol_ref:DI ("ni") [flags 0x3] <function_decl 0x7ff3c49afe00 ni>) [0 ni S1 A8]) (const_int 0 [0])) "pr91161.c":23:7 679 {*call} (expr_list:REG_DEAD (reg:DI 5 di) (expr_list:REG_DEAD (reg:QI 0 ax) (expr_list:REG_CALL_DECL (symbol_ref:DI ("ni") [flags 0x3] <function_decl 0x7ff3c49afe00 ni>) (expr_list:REG_ARGS_SIZE (const_int 0 [0]) (expr_list:REG_NORETURN (const_int 0 [0]) (expr_list:REG_EH_REGION (const_int 0 [0]) (nil))))))) (expr_list (use (reg:QI 0 ax)) (expr_list:DI (use (reg:DI 5 di)) (nil)))) (note 12 20 21 ("x6") NOTE_INSN_DELETED_LABEL 5) (barrier 21 12 22) Is this valid? I assume NOTE_INSN_DELETED can appear in that position as well? If so, shouldn't begin_move_insn use next_nonnote_insn rather than plain NEXT_INSN to find either the barrier or the label of the next bb?