https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88652
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2019-03-21 Ever confirmed|0 |1 --- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> --- (In reply to Andrey Belevantsev from comment #2) > (In reply to Martin Liška from comment #1) > > Any progress on this please? > > Maybe a stupid question, but how do I debug this > If I read that source line correctly, we're just assuming that for a > HARD_REG_SET set and a (regno, mode) pair we can always have enough space in > the set for regno, regno + 1, ..., regno + hard_regno_nregs (regno, mode) - > 1. Is that not true anymore? I suppose place in a gcc_assert (regno + i < FIRST_PSEUDO_REGISTER) and have it assert? I don't see where the code checks that regno is a hard register. With the following I get during RTL pass: sched1 pr87759.c:39:1: internal compiler error: in verify_target_availability, at sel-sched.c:1545 39 | } | ^ 0x110f7c3 verify_target_availability /space/rguenther/src/svn/trunk2/gcc/sel-sched.c:1545 0x110fc31 find_best_reg_for_expr /space/rguenther/src/svn/trunk2/gcc/sel-sched.c:1680 0x11147e9 fill_vec_av_set /space/rguenther/src/svn/trunk2/gcc/sel-sched.c:3800 0x1114fea fill_ready_list ... Index: gcc/sel-sched.c =================================================================== --- gcc/sel-sched.c (revision 269832) +++ gcc/sel-sched.c (working copy) @@ -1542,6 +1542,7 @@ verify_target_availability (expr_t expr, { if (bitmap_bit_p (used_regs, regno + i)) live_available = false; + gcc_assert (regno + i < FIRST_PSEUDO_REGISTER); if (TEST_HARD_REG_BIT (reg_rename_p->unavailable_hard_regs, regno + i)) hard_available = false; } (gdb) p regno $1 = 158