[Bug rtl-optimization/80463] [6/7/8 Regression] ICE with -fselective-scheduling2 and -fvar-tracking-assignments
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80463 --- Comment #15 from Andrey Belevantsev --- Author: abel Date: Mon Apr 9 10:19:50 2018 New Revision: 259231 URL: https://gcc.gnu.org/viewcvs?rev=259231=gcc=rev Log: PR rtl-optimization/80463 PR rtl-optimization/83972 PR rtl-optimization/83480 * sel-sched-ir.c (has_dependence_note_mem_dep): Take into account the correct producer for the insn. (tidy_control_flow): Fixup seqnos in case of debug insns. * gcc.dg/pr80463.c: New test. * g++.dg/pr80463.C: Likewise. * gcc.dg/pr83972.c: Likewise. Added: trunk/gcc/testsuite/g++.dg/pr80463.C trunk/gcc/testsuite/gcc.dg/pr80463.c trunk/gcc/testsuite/gcc.dg/pr83972.c Modified: trunk/gcc/ChangeLog trunk/gcc/sel-sched-ir.c trunk/gcc/testsuite/ChangeLog
[Bug rtl-optimization/80463] [6/7/8 Regression] ICE with -fselective-scheduling2 and -fvar-tracking-assignments
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80463 --- Comment #14 from Arseny Solokha --- Thank you for the analysis. I can fill a separate PR for this testcase if that's more appropriate. Meanwhile, I got two more testcases which I've just reported as PR83972 and PR83973 not to clutter this PR too much, though both of them may be actually duplicates of this one.
[Bug rtl-optimization/80463] [6/7/8 Regression] ICE with -fselective-scheduling2 and -fvar-tracking-assignments
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80463 --- Comment #13 from Andrey Belevantsev --- (In reply to Andrey Belevantsev from comment #12) > (In reply to Arseny Solokha from comment #11) > > How about this one? It makes only trunk gcc ICE, though. > > > > short int t2; > > int cd, aa, ft; > > > > void > > dh (void) > > { > > int qs = 0; > > > > if (t2 < 1) > > { > > int bq = 0; > > > > while (bq < 1) > > { > > } > > > > while (t2 < 1) > > { > > if (t2 == 0) > > { > > bq = 0; > > cd = !!cd; > > } > > else > > { > > bq = 1; > > cd = bq > qs; > > } > > > > t2 += cd; > > bq = (t2 / qs) == bq; > > > > if (aa != ft) > > { > > qs %= 0; > > while (bq != 0) > > { > > ro: > > ; > > } > > } > > > > ++t2; > > } > > > > ia: > > goto ro; > > } > > > > goto ia; > > } > > > > % gcc-8.0.0-alpha20180114 -O2 -fvar-tracking-assignments > > -fselective-scheduling2 -ftree-loop-vectorize -fnon-call-exceptions > > -fno-tree-vrp -fno-gcse-lm -fno-tree-loop-im > > -fno-reorder-blocks-and-partition -fno-reorder-blocks > > -fno-move-loop-invariants -w -c rsd2aiem.c > > during RTL pass: sched2 > > rsd2aiem.c: In function 'dh': > > rsd2aiem.c:51:1: internal compiler error: in > > av_set_could_be_blocked_by_bookkeeping_p, at sel-sched.c:3622 > > } > > ^ > > 0x64ad85 av_set_could_be_blocked_by_bookkeeping_p > > > > /var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180114/work/gcc-8-20180114/gcc/ > > sel-sched.c:3622 > > 0x64ad85 code_motion_process_successors > > > > /var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180114/work/gcc-8-20180114/gcc/ > > sel-sched.c:6395 > > 0x64ad85 code_motion_path_driver > > > > /var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180114/work/gcc-8-20180114/gcc/ > > sel-sched.c:6617 > > 0xc59886 code_motion_process_successors > > > > /var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180114/work/gcc-8-20180114/gcc/ > > sel-sched.c:6351 > > 0xc59886 code_motion_path_driver > > > > /var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180114/work/gcc-8-20180114/gcc/ > > sel-sched.c:6617 > > 0xc59886 code_motion_process_successors > > > > /var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180114/work/gcc-8-20180114/gcc/ > > sel-sched.c:6351 > > 0xc59886 code_motion_path_driver > > > > /var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180114/work/gcc-8-20180114/gcc/ > > sel-sched.c:6617 > > 0xc5aa5a find_used_regs > > > > /var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180114/work/gcc-8-20180114/gcc/ > > sel-sched.c:3283 > > 0xc5aa5a collect_unavailable_regs_from_bnds > > > > /var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180114/work/gcc-8-20180114/gcc/ > > sel-sched.c:1598 > > 0xc5aa5a find_best_reg_for_expr > > > > /var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180114/work/gcc-8-20180114/gcc/ > > sel-sched.c:1661 > > 0xc5aa5a fill_vec_av_set > > > > /var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180114/work/gcc-8-20180114/gcc/ > > sel-sched.c:3797 > > 0xc5da87 fill_ready_list > > > > /var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180114/work/gcc-8-20180114/gcc/ > > sel-sched.c:4027 > > 0xc5da87 find_best_expr > > > > /var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180114/work/gcc-8-20180114/gcc/ > > sel-sched.c:4387 > > 0xc5da87 fill_insns > > > > /var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180114/work/gcc-8-20180114/gcc/ > > sel-sched.c:5544 > > 0xc5da87 schedule_on_fences > > > > /var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180114/work/gcc-8-20180114/gcc/ > > sel-sched.c:7361 > > 0xc5da87 sel_sched_region_2 > > > > /var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180114/work/gcc-8-20180114/gcc/ > > sel-sched.c:7499 > > 0xc61737 sel_sched_region_1 > > > > /var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180114/work/gcc-8-20180114/gcc/ > > sel-sched.c:7541 > > 0xc61737 sel_sched_region(int) > > > > /var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180114/work/gcc-8-20180114/gcc/ > > sel-sched.c:7642 > > 0xc627a8 run_selective_scheduling() > > > > /var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180114/work/gcc-8-20180114/gcc/ > > sel-sched.c:7718 > > 0xc42625 rest_of_handle_sched2 > > > > /var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180114/work/gcc-8-20180114/gcc/ > > sched-rgn.c:3729 > > > > (as of r256677) > > Give me a few more days for unrelated stuff and I'll have enough time to > look at this. If that turns to be the same dependence issue, we can check > in a patch without waiting for hot/cold bbs issue to be sorted out. So this one is unrelated to the original testcase. What happens is we have a usual if then else control flow like this: bb 4 --> bb 5, bb 6; bb 5 --> bb 7; bb 6 --> bb 7. There is a debug stmt in bb 6 sayng bq
[Bug rtl-optimization/80463] [6/7/8 Regression] ICE with -fselective-scheduling2 and -fvar-tracking-assignments
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80463 --- Comment #12 from Andrey Belevantsev --- (In reply to Arseny Solokha from comment #11) > How about this one? It makes only trunk gcc ICE, though. > > short int t2; > int cd, aa, ft; > > void > dh (void) > { > int qs = 0; > > if (t2 < 1) > { > int bq = 0; > > while (bq < 1) > { > } > > while (t2 < 1) > { > if (t2 == 0) > { > bq = 0; > cd = !!cd; > } > else > { > bq = 1; > cd = bq > qs; > } > > t2 += cd; > bq = (t2 / qs) == bq; > > if (aa != ft) > { > qs %= 0; > while (bq != 0) > { > ro: > ; > } > } > > ++t2; > } > > ia: > goto ro; > } > > goto ia; > } > > % gcc-8.0.0-alpha20180114 -O2 -fvar-tracking-assignments > -fselective-scheduling2 -ftree-loop-vectorize -fnon-call-exceptions > -fno-tree-vrp -fno-gcse-lm -fno-tree-loop-im > -fno-reorder-blocks-and-partition -fno-reorder-blocks > -fno-move-loop-invariants -w -c rsd2aiem.c > during RTL pass: sched2 > rsd2aiem.c: In function 'dh': > rsd2aiem.c:51:1: internal compiler error: in > av_set_could_be_blocked_by_bookkeeping_p, at sel-sched.c:3622 > } > ^ > 0x64ad85 av_set_could_be_blocked_by_bookkeeping_p > > /var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180114/work/gcc-8-20180114/gcc/ > sel-sched.c:3622 > 0x64ad85 code_motion_process_successors > > /var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180114/work/gcc-8-20180114/gcc/ > sel-sched.c:6395 > 0x64ad85 code_motion_path_driver > > /var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180114/work/gcc-8-20180114/gcc/ > sel-sched.c:6617 > 0xc59886 code_motion_process_successors > > /var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180114/work/gcc-8-20180114/gcc/ > sel-sched.c:6351 > 0xc59886 code_motion_path_driver > > /var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180114/work/gcc-8-20180114/gcc/ > sel-sched.c:6617 > 0xc59886 code_motion_process_successors > > /var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180114/work/gcc-8-20180114/gcc/ > sel-sched.c:6351 > 0xc59886 code_motion_path_driver > > /var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180114/work/gcc-8-20180114/gcc/ > sel-sched.c:6617 > 0xc5aa5a find_used_regs > > /var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180114/work/gcc-8-20180114/gcc/ > sel-sched.c:3283 > 0xc5aa5a collect_unavailable_regs_from_bnds > > /var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180114/work/gcc-8-20180114/gcc/ > sel-sched.c:1598 > 0xc5aa5a find_best_reg_for_expr > > /var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180114/work/gcc-8-20180114/gcc/ > sel-sched.c:1661 > 0xc5aa5a fill_vec_av_set > > /var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180114/work/gcc-8-20180114/gcc/ > sel-sched.c:3797 > 0xc5da87 fill_ready_list > > /var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180114/work/gcc-8-20180114/gcc/ > sel-sched.c:4027 > 0xc5da87 find_best_expr > > /var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180114/work/gcc-8-20180114/gcc/ > sel-sched.c:4387 > 0xc5da87 fill_insns > > /var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180114/work/gcc-8-20180114/gcc/ > sel-sched.c:5544 > 0xc5da87 schedule_on_fences > > /var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180114/work/gcc-8-20180114/gcc/ > sel-sched.c:7361 > 0xc5da87 sel_sched_region_2 > > /var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180114/work/gcc-8-20180114/gcc/ > sel-sched.c:7499 > 0xc61737 sel_sched_region_1 > > /var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180114/work/gcc-8-20180114/gcc/ > sel-sched.c:7541 > 0xc61737 sel_sched_region(int) > > /var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180114/work/gcc-8-20180114/gcc/ > sel-sched.c:7642 > 0xc627a8 run_selective_scheduling() > > /var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180114/work/gcc-8-20180114/gcc/ > sel-sched.c:7718 > 0xc42625 rest_of_handle_sched2 > > /var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180114/work/gcc-8-20180114/gcc/ > sched-rgn.c:3729 > > (as of r256677) Give me a few more days for unrelated stuff and I'll have enough time to look at this. If that turns to be the same dependence issue, we can check in a patch without waiting for hot/cold bbs issue to be sorted out.
[Bug rtl-optimization/80463] [6/7/8 Regression] ICE with -fselective-scheduling2 and -fvar-tracking-assignments
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80463 --- Comment #11 from Arseny Solokha --- How about this one? It makes only trunk gcc ICE, though. short int t2; int cd, aa, ft; void dh (void) { int qs = 0; if (t2 < 1) { int bq = 0; while (bq < 1) { } while (t2 < 1) { if (t2 == 0) { bq = 0; cd = !!cd; } else { bq = 1; cd = bq > qs; } t2 += cd; bq = (t2 / qs) == bq; if (aa != ft) { qs %= 0; while (bq != 0) { ro: ; } } ++t2; } ia: goto ro; } goto ia; } % gcc-8.0.0-alpha20180114 -O2 -fvar-tracking-assignments -fselective-scheduling2 -ftree-loop-vectorize -fnon-call-exceptions -fno-tree-vrp -fno-gcse-lm -fno-tree-loop-im -fno-reorder-blocks-and-partition -fno-reorder-blocks -fno-move-loop-invariants -w -c rsd2aiem.c during RTL pass: sched2 rsd2aiem.c: In function 'dh': rsd2aiem.c:51:1: internal compiler error: in av_set_could_be_blocked_by_bookkeeping_p, at sel-sched.c:3622 } ^ 0x64ad85 av_set_could_be_blocked_by_bookkeeping_p /var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180114/work/gcc-8-20180114/gcc/sel-sched.c:3622 0x64ad85 code_motion_process_successors /var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180114/work/gcc-8-20180114/gcc/sel-sched.c:6395 0x64ad85 code_motion_path_driver /var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180114/work/gcc-8-20180114/gcc/sel-sched.c:6617 0xc59886 code_motion_process_successors /var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180114/work/gcc-8-20180114/gcc/sel-sched.c:6351 0xc59886 code_motion_path_driver /var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180114/work/gcc-8-20180114/gcc/sel-sched.c:6617 0xc59886 code_motion_process_successors /var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180114/work/gcc-8-20180114/gcc/sel-sched.c:6351 0xc59886 code_motion_path_driver /var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180114/work/gcc-8-20180114/gcc/sel-sched.c:6617 0xc5aa5a find_used_regs /var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180114/work/gcc-8-20180114/gcc/sel-sched.c:3283 0xc5aa5a collect_unavailable_regs_from_bnds /var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180114/work/gcc-8-20180114/gcc/sel-sched.c:1598 0xc5aa5a find_best_reg_for_expr /var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180114/work/gcc-8-20180114/gcc/sel-sched.c:1661 0xc5aa5a fill_vec_av_set /var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180114/work/gcc-8-20180114/gcc/sel-sched.c:3797 0xc5da87 fill_ready_list /var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180114/work/gcc-8-20180114/gcc/sel-sched.c:4027 0xc5da87 find_best_expr /var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180114/work/gcc-8-20180114/gcc/sel-sched.c:4387 0xc5da87 fill_insns /var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180114/work/gcc-8-20180114/gcc/sel-sched.c:5544 0xc5da87 schedule_on_fences /var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180114/work/gcc-8-20180114/gcc/sel-sched.c:7361 0xc5da87 sel_sched_region_2 /var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180114/work/gcc-8-20180114/gcc/sel-sched.c:7499 0xc61737 sel_sched_region_1 /var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180114/work/gcc-8-20180114/gcc/sel-sched.c:7541 0xc61737 sel_sched_region(int) /var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180114/work/gcc-8-20180114/gcc/sel-sched.c:7642 0xc627a8 run_selective_scheduling() /var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180114/work/gcc-8-20180114/gcc/sel-sched.c:7718 0xc42625 rest_of_handle_sched2 /var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180114/work/gcc-8-20180114/gcc/sched-rgn.c:3729 (as of r256677)
[Bug rtl-optimization/80463] [6/7/8 Regression] ICE with -fselective-scheduling2 and -fvar-tracking-assignments
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80463 --- Comment #10 from Arseny Solokha --- (In reply to Jakub Jelinek from comment #9) > Seems this doesn't ICE starting with r248863, so it likely just went latent. I've seen ICEs in code_motion_process_successors() or bb_note() recently, will try to bring one soon.
[Bug rtl-optimization/80463] [6/7/8 Regression] ICE with -fselective-scheduling2 and -fvar-tracking-assignments
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80463 --- Comment #9 from Jakub Jelinek --- Seems this doesn't ICE starting with r248863, so it likely just went latent. Maybe we should just error out on selective scheduling and explicit -fvar-tracking-assignments or -gstatement-frontiers, this scheduler really can't handle any debug insns well.
[Bug rtl-optimization/80463] [6/7/8 Regression] ICE with -fselective-scheduling2 and -fvar-tracking-assignments
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80463 Arseny Solokha changed: What|Removed |Added CC||asolokha at gmx dot com --- Comment #8 from Arseny Solokha --- I cannot reproduce it anymore w/ r256677.
[Bug rtl-optimization/80463] [6/7/8 Regression] ICE with -fselective-scheduling2 and -fvar-tracking-assignments
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80463 Jakub Jelinek changed: What|Removed |Added CC||hubicka at gcc dot gnu.org --- Comment #7 from Jakub Jelinek --- CCing Honza.
[Bug rtl-optimization/80463] [6/7/8 Regression] ICE with -fselective-scheduling2 and -fvar-tracking-assignments
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80463 --- Comment #6 from Andrey Belevantsev --- (In reply to Jakub Jelinek from comment #5) > Any progress with this? I can make a patch for the dependency problem. I'm not sure what happened to the hot/cold block partitioning verification code -- I've heard Honza was going to remove it (or I have misinterpreted what Alex told me). It is unrelated to the dependence issue but is serious enough -- it's didn't allow me to test with sel-sched enabled at the time.
[Bug rtl-optimization/80463] [6/7/8 Regression] ICE with -fselective-scheduling2 and -fvar-tracking-assignments
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80463 --- Comment #5 from Jakub Jelinek --- Any progress with this?