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).

Reply via email to