https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82831
--- Comment #3 from Martin Liška <marxin at gcc dot gnu.org> --- The problematic block (for which we trigger the assert is): (gdb) p debug_bb(bb) (code_label 8952 8954 310 18 1247 (nil) [2 uses]) (note 310 8952 311 18 [bb 18] NOTE_INSN_BASIC_BLOCK) (insn:TI 311 310 313 18 (set (reg/f:SI 0 ax [orig:873 MEM[(struct phi_arg_d *)gsi_240].args[0].def ] [873]) (mem/f:SI (plus:SI (reg/f:SI 3 bx [orig:127 gsi ] [127]) (const_int 56 [0x38])) [193 MEM[(struct phi_arg_d *)gsi_240].args[0].def+0 S4 A32])) "../../gcc/tree-ssa-strlen.c":2729 75 {*movsi_internal} (nil)) (call_insn:TI 313 311 315 18 (set (reg:SI 0 ax) (call (mem:QI (symbol_ref:SI ("_ZL10get_stridxP9tree_node") [flags 0x3] <function_decl 0xf46e1480 get_stridx>) [0 get_stridx S1 A8]) (const_int 0 [0]))) "../../gcc/tree-ssa-strlen.c":2729 553 {*call_value} (expr_list:REG_CALL_DECL (symbol_ref:SI ("_ZL10get_stridxP9tree_node") [flags 0x3] <function_decl 0xf46e1480 get_stridx>) (expr_list:REG_EH_REGION (const_int 0 [0]) (nil))) (expr_list:SI (use (reg:SI 0 ax)) (nil))) (insn:TI 315 313 314 18 (set (reg:CCZ 17 flags) (compare:CCZ (reg:SI 0 ax [orig:110 idx ] [110]) (const_int 0 [0]))) "../../gcc/tree-ssa-strlen.c":2730 3 {*cmpsi_ccno_1} (expr_list:REG_DEAD (reg:SI 0 ax [orig:110 idx ] [110]) (nil))) (insn 314 315 316 18 (set (reg/v:SI 5 di [orig:110 idx ] [110]) (reg:SI 0 ax)) "../../gcc/tree-ssa-strlen.c":2729 75 {*movsi_internal} (nil)) (jump_insn:TI 316 314 317 18 (set (pc) (if_then_else (eq (reg:CCZ 17 flags) (const_int 0 [0])) (label_ref:SI 343) (pc))) "../../gcc/tree-ssa-strlen.c":2730 536 {*jcc} (expr_list:REG_DEAD (reg:CCZ 17 flags) (int_list:REG_BR_PROB 1064185877 (nil))) -> 343) Has following count: (gdb) p bb->count $10 = {static n_bits = 61, static max_count = 2305843009213693950, static uninitialized_count = 2305843009213693951, m_val = 9888, m_quality = profile_precise} And previous block is: (gdb) p bb->prev_bb $11 = (basic_block) 0xf3afc3c0 (gdb) p debug_bb(bb->prev_bb) (note 8951 309 8953 17 [bb 17] NOTE_INSN_BASIC_BLOCK) (jump_insn/j:TI 8953 8951 8954 17 (set (pc) (label_ref 8952)) 537 {jump} (nil) -> 8952) Has count: (gdb) p bb->prev_bb.count $13 = {static n_bits = 61, static max_count = 2305843009213693950, static uninitialized_count = 2305843009213693951, m_val = 0, m_quality = profile_precise} And the count is set here: #0 0x084bce69 in force_nonfallthru_and_redirect (e=0xf4247400, target=0xf3fd4438, jump_label=0x0) at ../../gcc/cfgrtl.c:1631 #1 0x084bd902 in rtl_force_nonfallthru (e=0xf4247400) at ../../gcc/cfgrtl.c:1709 #2 0x084ac2a4 in force_nonfallthru(edge_def*) () #3 0x084c1257 in fixup_new_cold_bb (bb=0xf4233c6c) at ../../gcc/cfgrtl.c:1394 #4 fixup_partitions () at ../../gcc/cfgrtl.c:2384 #5 0x08d688e5 in cleanup_cfg(int) () #6 0x08d54afb in (anonymous namespace)::pass_reorder_blocks::execute (this=0x9938470, fun=0xf47733a8) at ../../gcc/bb-reorder.c:2593 #7 0x0873d5aa in execute_one_pass(opt_pass*) () #8 0x0873ddbf in execute_pass_list_1(opt_pass*) () #9 0x0873ddd2 in execute_pass_list_1(opt_pass*) () #10 0x0873ddd2 in execute_pass_list_1(opt_pass*) () #11 0x0873de19 in execute_pass_list(function*, opt_pass*) () #12 0x084d547c in cgraph_node::expand() () #13 0x084d65ba in symbol_table::compile() [clone .part.55] () #14 0x084d8389 in symbol_table::finalize_compilation_unit() () #15 0x087f613e in compile_file() () #16 0x082c03b9 in toplev::main(int, char**) () #17 0x082c2781 in main ()