Bug 85410 - ICE in create_block_for_bookkeeping, at sel-sched.c:4563
Summary: ICE in create_block_for_bookkeeping, at sel-sched.c:4563
Status: NEW
Alias: None
Product: gcc
Classification: Unclassified
Component: rtl-optimization (show other bugs)
Version: 8.0.1
: P3 normal
Target Milestone: ---
Assignee: Not yet assigned to anyone
URL:
Keywords: ice-on-invalid-code
: 99347 101086 110517 110525 (view as bug list)
Depends on:
Blocks: selective-scheduling
  Show dependency treegraph
 
Reported: 2018-04-16 08:24 UTC by Arseny Solokha
Modified: 2023-07-03 02:29 UTC (History)
7 users (show)

See Also:
Host:
Target: powerpc-*-linux-gnu, x86_64-pc-linux-gnu
Build:
Known to work:
Known to fail:
Last reconfirmed: 2018-04-24 00:00:00


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Arseny Solokha 2018-04-16 08:24:30 UTC
gcc-8.0.0-alpha20180415 snapshot (r259389) ICEs when compiling the following snippet w/ -O3 (-Ofast) -fselective-scheduling -fvar-tracking-assignments:

void
nl (int fg, int lb)
{
  long long unsigned int xj = ~0;
  double vu;

  while ((lb - (!fg + 1)) != xj)
    lb = fg = vu;
}

% powerpc-e300c3-linux-gnu-gcc-8.0.0-alpha20180415 -O3 -fselective-scheduling -fvar-tracking-assignments -w -c chreru5r.c
during RTL pass: sched1
chreru5r.c: In function 'nl':
chreru5r.c:9:1: internal compiler error: in create_block_for_bookkeeping, at sel-sched.c:4563
 }
 ^
0xc0f988 create_block_for_bookkeeping
	/var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-8.0.0_alpha20180415/work/gcc-8-20180415/gcc/sel-sched.c:4563
0xc0f988 find_place_for_bookkeeping
	/var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-8.0.0_alpha20180415/work/gcc-8-20180415/gcc/sel-sched.c:4700
0xc0f988 generate_bookkeeping_insn
	/var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-8.0.0_alpha20180415/work/gcc-8-20180415/gcc/sel-sched.c:4800
0xc0f988 move_op_at_first_insn
	/var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-8.0.0_alpha20180415/work/gcc-8-20180415/gcc/sel-sched.c:6077
0xc10243 code_motion_path_driver
	/var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-8.0.0_alpha20180415/work/gcc-8-20180415/gcc/sel-sched.c:6669
0xc10bc9 code_motion_process_successors
	/var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-8.0.0_alpha20180415/work/gcc-8-20180415/gcc/sel-sched.c:6356
0xc10bc9 code_motion_path_driver
	/var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-8.0.0_alpha20180415/work/gcc-8-20180415/gcc/sel-sched.c:6622
0xc10bc9 code_motion_process_successors
	/var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-8.0.0_alpha20180415/work/gcc-8-20180415/gcc/sel-sched.c:6356
0xc10bc9 code_motion_path_driver
	/var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-8.0.0_alpha20180415/work/gcc-8-20180415/gcc/sel-sched.c:6622
0xc10bc9 code_motion_process_successors
	/var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-8.0.0_alpha20180415/work/gcc-8-20180415/gcc/sel-sched.c:6356
0xc10bc9 code_motion_path_driver
	/var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-8.0.0_alpha20180415/work/gcc-8-20180415/gcc/sel-sched.c:6622
0xc11415 move_op
	/var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-8.0.0_alpha20180415/work/gcc-8-20180415/gcc/sel-sched.c:6714
0xc11415 move_exprs_to_boundary
	/var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-8.0.0_alpha20180415/work/gcc-8-20180415/gcc/sel-sched.c:5237
0xc11415 schedule_expr_on_boundary
	/var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-8.0.0_alpha20180415/work/gcc-8-20180415/gcc/sel-sched.c:5450
0xc15488 fill_insns
	/var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-8.0.0_alpha20180415/work/gcc-8-20180415/gcc/sel-sched.c:5592
0xc172ce schedule_on_fences
	/var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-8.0.0_alpha20180415/work/gcc-8-20180415/gcc/sel-sched.c:7366
0xc172ce sel_sched_region_2
	/var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-8.0.0_alpha20180415/work/gcc-8-20180415/gcc/sel-sched.c:7504
0xc18341 sel_sched_region_1
	/var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-8.0.0_alpha20180415/work/gcc-8-20180415/gcc/sel-sched.c:7546
0xc19935 sel_sched_region(int)
	/var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-8.0.0_alpha20180415/work/gcc-8-20180415/gcc/sel-sched.c:7647
0xc1a289 run_selective_scheduling()
	/var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-8.0.0_alpha20180415/work/gcc-8-20180415/gcc/sel-sched.c:7733
Comment 1 Andrey Belevantsev 2018-04-24 08:55:12 UTC
Confirmed.  We hit an assert saying that the split block (which is supposed to be empty) doesn't have any bb notes.  But it may have a NOTE_INSN_DELETED now because there is the code emitting that when the bb only has debug insns.  It is easy to relax the assert and properly merge bb notes list in this case.

So far so good, but then the df_verify assert hits late in IRA.  It is because of the code that was added to rotate bb indexes to avoid debug/non-debug differences around sel-sched.c:4585, there if (MAY_HAVE_DEBUG_INSNS) we do the long list of sel-sched data structures exchanges but nobody takes care of df structures.  There I can do a df_bb_refs_record for the changed bbs, but still the reg_chain structures are bogus and we ICE in df_reg_chain_verify_unmarked.  At this point I'm unclear what to do, thoughts?
Comment 2 Arseny Solokha 2018-04-27 06:42:58 UTC
Here's another snippet. gcc-8.0.0-alpha20180422 snapshot (r259553) w/ r259563 applied ICEs when compiling it for x86_64 w/ -O2 (-O3, -Os) -ftree-slp-vectorize -fschedule-insns -fsel-sched-pipelining -fselective-scheduling -fvar-tracking-assignments -fno-tree-pre -fno-tree-dce -fno-tree-ch -fno-move-loop-invariants:

int ce, jq;

int
vc (void)
{
  int g4 = 0;

  return g4;
}

void
sg (void)
{
  while (jq < 2)
    {
      int tv[] = { 1, 0, 0, 0, 0, };

      if (jq == 0)
        {
        }
      else
        while (ce > 0)
          ce = 0;

      jq = vc ();
    }
}

% x86_64-pc-linux-gnu-gcc-8.0.0-alpha20180422 -O2 -ftree-slp-vectorize -fschedule-insns -fsel-sched-pipelining -fselective-scheduling -fvar-tracking-assignments -fno-tree-pre -fno-tree-dce -fno-tree-ch -fno-move-loop-invariants -w -c gbhm444y.c
during RTL pass: sched1
gbhm444y.c: In function 'sg':
gbhm444y.c:27:1: internal compiler error: in create_block_for_bookkeeping, at sel-sched.c:4563
 }
 ^
0x64e07f create_block_for_bookkeeping
	/var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180422/work/gcc-8-20180422/gcc/sel-sched.c:4563
0x64e07f find_place_for_bookkeeping
	/var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180422/work/gcc-8-20180422/gcc/sel-sched.c:4700
0x64e07f generate_bookkeeping_insn
	/var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180422/work/gcc-8-20180422/gcc/sel-sched.c:4800
0x64e07f move_op_at_first_insn
	/var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180422/work/gcc-8-20180422/gcc/sel-sched.c:6077
0xc6774c code_motion_path_driver
	/var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180422/work/gcc-8-20180422/gcc/sel-sched.c:6669
0xc67ad6 code_motion_process_successors
	/var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180422/work/gcc-8-20180422/gcc/sel-sched.c:6356
0xc67ad6 code_motion_path_driver
	/var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180422/work/gcc-8-20180422/gcc/sel-sched.c:6622
0xc67ad6 code_motion_process_successors
	/var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180422/work/gcc-8-20180422/gcc/sel-sched.c:6356
0xc67ad6 code_motion_path_driver
	/var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180422/work/gcc-8-20180422/gcc/sel-sched.c:6622
0xc67ad6 code_motion_process_successors
	/var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180422/work/gcc-8-20180422/gcc/sel-sched.c:6356
0xc67ad6 code_motion_path_driver
	/var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180422/work/gcc-8-20180422/gcc/sel-sched.c:6622
0xc68172 move_op
	/var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180422/work/gcc-8-20180422/gcc/sel-sched.c:6714
0xc68172 move_exprs_to_boundary
	/var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180422/work/gcc-8-20180422/gcc/sel-sched.c:5237
0xc68172 schedule_expr_on_boundary
	/var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180422/work/gcc-8-20180422/gcc/sel-sched.c:5450
0xc6c20c fill_insns
	/var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180422/work/gcc-8-20180422/gcc/sel-sched.c:5592
0xc6c20c schedule_on_fences
	/var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180422/work/gcc-8-20180422/gcc/sel-sched.c:7366
0xc6c20c sel_sched_region_2
	/var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180422/work/gcc-8-20180422/gcc/sel-sched.c:7504
0xc6d958 sel_sched_region_1
	/var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180422/work/gcc-8-20180422/gcc/sel-sched.c:7546
0xc6e1de sel_sched_region(int)
	/var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180422/work/gcc-8-20180422/gcc/sel-sched.c:7647
0xc6f0e8 run_selective_scheduling()
	/var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180422/work/gcc-8-20180422/gcc/sel-sched.c:7733
Comment 3 Arseny Solokha 2018-10-27 08:54:45 UTC
Testcase from #c2 doesn't fail for me anymore w/ the current trunk snapshot (as of r265361), but the following one does:

int py, up;

void
ro (int *tr, int et)
{
  while (et < 1)
    {
      int s7 = !!*tr ? 0 : py;

      if (s7 != 0)
        {
        }
      else
        {
          up /= 2;

          if (py * py == 0)
            tr = &py;
        }

      ++et;
    }
}

% x86_64-unknown-linux-gnu-gcc-9.0.0-alpha20181021 -O1 -fschedule-insns -fsel-sched-pipelining -fselective-scheduling -fvar-tracking-assignments -fno-if-conversion -fno-tree-loop-im -w -c ebmjprna.c
during RTL pass: sched1
ebmjprna.c: In function 'ro':
ebmjprna.c:23:1: internal compiler error: in create_block_for_bookkeeping, at sel-sched.c:4563
   23 | }
      | ^
0x65a9e8 create_block_for_bookkeeping
	/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20181021/work/gcc-9-20181021/gcc/sel-sched.c:4563
0x65a9e8 find_place_for_bookkeeping
	/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20181021/work/gcc-9-20181021/gcc/sel-sched.c:4700
0x65a9e8 generate_bookkeeping_insn
	/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20181021/work/gcc-9-20181021/gcc/sel-sched.c:4800
0x65a9e8 move_op_at_first_insn
	/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20181021/work/gcc-9-20181021/gcc/sel-sched.c:6077
0xc9016c code_motion_path_driver
	/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20181021/work/gcc-9-20181021/gcc/sel-sched.c:6669
0xc90516 code_motion_process_successors
	/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20181021/work/gcc-9-20181021/gcc/sel-sched.c:6356
0xc90516 code_motion_path_driver
	/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20181021/work/gcc-9-20181021/gcc/sel-sched.c:6622
0xc90516 code_motion_process_successors
	/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20181021/work/gcc-9-20181021/gcc/sel-sched.c:6356
0xc90516 code_motion_path_driver
	/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20181021/work/gcc-9-20181021/gcc/sel-sched.c:6622
0xc93292 move_op
	/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20181021/work/gcc-9-20181021/gcc/sel-sched.c:6714
0xc93292 move_exprs_to_boundary
	/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20181021/work/gcc-9-20181021/gcc/sel-sched.c:5237
0xc93292 schedule_expr_on_boundary
	/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20181021/work/gcc-9-20181021/gcc/sel-sched.c:5450
0xc951cc fill_insns
	/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20181021/work/gcc-9-20181021/gcc/sel-sched.c:5592
0xc951cc schedule_on_fences
	/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20181021/work/gcc-9-20181021/gcc/sel-sched.c:7366
0xc951cc sel_sched_region_2
	/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20181021/work/gcc-9-20181021/gcc/sel-sched.c:7504
0xc96a56 sel_sched_region_1
	/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20181021/work/gcc-9-20181021/gcc/sel-sched.c:7546
0xc9822e sel_sched_region(int)
	/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20181021/work/gcc-9-20181021/gcc/sel-sched.c:7647
0xc9822e sel_sched_region(int)
	/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20181021/work/gcc-9-20181021/gcc/sel-sched.c:7632
0xc99141 run_selective_scheduling()
	/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20181021/work/gcc-9-20181021/gcc/sel-sched.c:7733
0xc78edd rest_of_handle_sched
	/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20181021/work/gcc-9-20181021/gcc/sched-rgn.c:3718
Comment 4 Andrew Pinski 2022-11-09 05:57:37 UTC
*** Bug 101086 has been marked as a duplicate of this bug. ***
Comment 5 Andrew Pinski 2022-11-09 05:58:15 UTC
*** Bug 99347 has been marked as a duplicate of this bug. ***
Comment 6 Andrew Pinski 2023-07-02 16:56:27 UTC
*** Bug 110517 has been marked as a duplicate of this bug. ***
Comment 7 Andrew Pinski 2023-07-03 02:29:28 UTC
*** Bug 110525 has been marked as a duplicate of this bug. ***