[Bug debug/56950] compare-debug failure for gcc.dg/pr41345.c with fschedule-insns
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56950 Uroš Bizjak changed: What|Removed |Added Status|NEW |RESOLVED Resolution|--- |FIXED --- Comment #10 from Uroš Bizjak --- Works OK with gcc-7.
[Bug debug/56950] compare-debug failure for gcc.dg/pr41345.c with fschedule-insns
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56950 Steven Bosscher changed: What|Removed |Added Keywords||build, wrong-debug Status|UNCONFIRMED |NEW Last reconfirmed||2013-04-13 CC||aoliva at gcc dot gnu.org, ||jakub at gcc dot gnu.org Ever Confirmed|0 |1 --- Comment #1 from Steven Bosscher 2013-04-13 23:15:07 UTC --- Breaks bootstrap with -fschedule-insn on i686.
[Bug debug/56950] compare-debug failure for gcc.dg/pr41345.c with fschedule-insns
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56950 --- Comment #2 from Steven Bosscher 2013-04-14 15:09:20 UTC --- I am testing this fix: Index: haifa-sched.c === --- haifa-sched.c (revision 197942) +++ haifa-sched.c (working copy) @@ -7431,14 +7431,14 @@ sched_extend_bb (void) /* The following is done to keep current_sched_info->next_tail non null. */ insn = BB_END (EXIT_BLOCK_PTR->prev_bb); - if (NEXT_INSN (insn) == 0 + if (next_nondebug_insn (insn) == 0 || (!NOTE_P (insn) && !LABEL_P (insn) /* Don't emit a NOTE if it would end up before a BARRIER. */ && !BARRIER_P (NEXT_INSN (insn { rtx note = emit_note_after (NOTE_INSN_DELETED, insn); - /* Make insn appear outside BB. */ + /* Make note appear outside BB. */ set_block_for_insn (note, NULL); BB_END (EXIT_BLOCK_PTR->prev_bb) = insn; }
[Bug debug/56950] compare-debug failure for gcc.dg/pr41345.c with fschedule-insns
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56950 --- Comment #3 from Steven Bosscher 2013-04-14 19:30:38 UTC --- (In reply to comment #2) > I am testing this fix: Hmm, no that is not a fix...
[Bug debug/56950] compare-debug failure for gcc.dg/pr41345.c with fschedule-insns
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56950 Steven Bosscher changed: What|Removed |Added CC||ubizjak at gmail dot com --- Comment #4 from Steven Bosscher --- *** Bug 57257 has been marked as a duplicate of this bug. ***
[Bug debug/56950] compare-debug failure for gcc.dg/pr41345.c with fschedule-insns
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56950 --- Comment #5 from Steven Bosscher --- This patch makes the ICE go away, but it doesn't really solve the bug. The scheduler inserts (in this case) notes between basic blocks in the sched1 pass, which runs in cfglayout mode. But "between basic blocks" in cfglayout mode means nothing: such things belong in BB_HEADER and BB_FOOTER. But that happens before and after this patch, so the patch merely puts things back to the status ante quo. So be solved properly later... Index: haifa-sched.c === --- haifa-sched.c (revision 199028) +++ haifa-sched.c (working copy) @@ -7442,11 +7442,12 @@ sched_extend_bb (void) if (NEXT_INSN (insn) == 0 || (!NOTE_P (insn) && !LABEL_P (insn) + && !DEBUG_INSN_P (insn) /* Don't emit a NOTE if it would end up before a BARRIER. */ && !BARRIER_P (NEXT_INSN (insn { rtx note = emit_note_after (NOTE_INSN_DELETED, insn); - /* Make insn appear outside BB. */ + /* Make note appear outside BB. */ set_block_for_insn (note, NULL); BB_END (EXIT_BLOCK_PTR->prev_bb) = insn; }
[Bug debug/56950] compare-debug failure for gcc.dg/pr41345.c with fschedule-insns
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56950 --- Comment #6 from Jakub Jelinek --- That still doesn't look safe -fcompare-debug wise. I mean, if BB ends in a DEBUG_INSN (or more), it could be preceeded by note, label, or some other insns. So shouldn't that be instead rtx insn2 = DEBUG_INSN_P (insn) ? prev_nondebug_insn (insn2) : insn; (I'd hope there shouldn't be DEBUG_INSN only bb's, because then with -g0 insn ought to be NULL and NEXT_INSN (insn) should crash), and use this in the !NOTE_P and !LABEL_P tests? When NEXT_INSN (insn) is used, it should keep using the BB_END insn, even if it is a DEBUG_INSN, we are looking at what comes afterwards.
[Bug debug/56950] compare-debug failure for gcc.dg/pr41345.c with fschedule-insns
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56950 --- Comment #7 from Steven Bosscher --- Index: haifa-sched.c === --- haifa-sched.c (revision 199028) +++ haifa-sched.c (working copy) @@ -7435,20 +7435,19 @@ find_fallthru_edge_from (basic_block pre static void sched_extend_bb (void) { - rtx insn; - /* The following is done to keep current_sched_info->next_tail non null. */ - insn = BB_END (EXIT_BLOCK_PTR->prev_bb); + rtx end = BB_END (EXIT_BLOCK_PTR->prev_bb); + rtx insn = DEBUG_INSN_P (end) ? prev_nondebug_insn (end) : end; if (NEXT_INSN (insn) == 0 || (!NOTE_P (insn) && !LABEL_P (insn) /* Don't emit a NOTE if it would end up before a BARRIER. */ && !BARRIER_P (NEXT_INSN (insn { - rtx note = emit_note_after (NOTE_INSN_DELETED, insn); - /* Make insn appear outside BB. */ + rtx note = emit_note_after (NOTE_INSN_DELETED, end); + /* Make note appear outside BB. */ set_block_for_insn (note, NULL); - BB_END (EXIT_BLOCK_PTR->prev_bb) = insn; + BB_END (EXIT_BLOCK_PTR->prev_bb) = end; } }
[Bug debug/56950] compare-debug failure for gcc.dg/pr41345.c with fschedule-insns
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56950 --- Comment #8 from stevenb.gcc at gmail dot com --- > --- Comment #6 from Jakub Jelinek --- > That still doesn't look safe -fcompare-debug wise. > I mean, if BB ends in a DEBUG_INSN (or more), it could be preceeded by note, > label, or some other insns. So shouldn't that be instead > rtx insn2 = DEBUG_INSN_P (insn) ? prev_nondebug_insn (insn2) : insn; I suppose so, yes. > (I'd hope there shouldn't be DEBUG_INSN only bb's, because then with -g0 insn > ought to be NULL and NEXT_INSN (insn) should crash), and use this in the > !NOTE_P and !LABEL_P tests? This block is a DEBUG_INSN-only block, but insn is never NULL: BB_END will be the basic block note.
[Bug debug/56950] compare-debug failure for gcc.dg/pr41345.c with fschedule-insns
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56950 --- Comment #9 from Jakub Jelinek --- (In reply to Steven Bosscher from comment #7) > Index: haifa-sched.c > === > --- haifa-sched.c (revision 199028) > +++ haifa-sched.c (working copy) > @@ -7435,20 +7435,19 @@ find_fallthru_edge_from (basic_block pre > static void > sched_extend_bb (void) > { > - rtx insn; > - >/* The following is done to keep current_sched_info->next_tail non null. > */ > - insn = BB_END (EXIT_BLOCK_PTR->prev_bb); > + rtx end = BB_END (EXIT_BLOCK_PTR->prev_bb); > + rtx insn = DEBUG_INSN_P (end) ? prev_nondebug_insn (end) : end; >if (NEXT_INSN (insn) == 0 This should be NEXT_INSN (end) == 0 >|| (!NOTE_P (insn) > && !LABEL_P (insn) > /* Don't emit a NOTE if it would end up before a BARRIER. */ > && !BARRIER_P (NEXT_INSN (insn and this && !BARRIER_P (NEXT_INSN (end > { > - rtx note = emit_note_after (NOTE_INSN_DELETED, insn); > - /* Make insn appear outside BB. */ > + rtx note = emit_note_after (NOTE_INSN_DELETED, end); > + /* Make note appear outside BB. */ >set_block_for_insn (note, NULL); > - BB_END (EXIT_BLOCK_PTR->prev_bb) = insn; > + BB_END (EXIT_BLOCK_PTR->prev_bb) = end; > } > }