https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84566
Alexander Monakov <amonakov at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2018-02-26 CC| |abel at gcc dot gnu.org Ever confirmed|0 |1 --- Comment #3 from Alexander Monakov <amonakov at gcc dot gnu.org> --- Confirmed. Our comparator breaks here: /* Prefer SCHED_GROUP_P insns to any others. */ if (SCHED_GROUP_P (tmp_insn) != SCHED_GROUP_P (tmp2_insn)) { if (VINSN_UNIQUE_P (tmp_vinsn) && VINSN_UNIQUE_P (tmp2_vinsn)) return SCHED_GROUP_P (tmp2_insn) ? 1 : -1; /* Now uniqueness means SCHED_GROUP_P is set, because schedule groups cannot be cloned. */ if (VINSN_UNIQUE_P (tmp2_vinsn)) return 1; return -1; } when we have two non-unique insns such that one is in a sched group. That is not supposed to happen actually, since SCHED_GROUP_P should imply VINSN_UNIQUE_P. This invariant is broken when sched_macro_fuse_insns sets SCHED_GROUP_P without looking at deps->readonly. So while we could get rid of the issue by rewriting the problematic sel-sched code in terms of SCHED_GROUP_P only, lack of deps->readonly check for macro-fusion seems like a bigger issue and should be fixed too.