https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79570
--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> --- The ICE is because on the DEBUG_INSN move_op_orig_expr_found removes it from the IL: remove_insn_from_stream and then move_op_ascend -> moveup_expr_cached 2531 if (DEBUG_INSN_P (EXPR_INSN_RTX (expr)) 2532 && (sel_bb_head (BLOCK_FOR_INSN (EXPR_INSN_RTX (expr))) 2533 == EXPR_INSN_RTX (expr))) ICEs on it. --- gcc/sel-sched.c.jj 2017-01-01 12:45:38.000000000 +0100 +++ gcc/sel-sched.c 2017-02-17 14:14:06.493525368 +0100 @@ -2529,6 +2529,7 @@ moveup_expr_cached (expr_t expr, insn_t } if (DEBUG_INSN_P (EXPR_INSN_RTX (expr)) + && BLOCK_FOR_INSN (EXPR_INSN_RTX (expr)) && (sel_bb_head (BLOCK_FOR_INSN (EXPR_INSN_RTX (expr))) == EXPR_INSN_RTX (expr))) /* Don't use cached information for debug insns that are heads of fixes the ICE, but as I know next to nothing about sel-sched, really don't know if it is appropriate to see deleted insns at this point, or why it doesn't want to use cached info for debug insns that are heads of bbs, whether removed debug insns shouldn't be perhaps treated the same (not cached).