https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109086
--- Comment #6 from Xi Ruoyao <xry111 at gcc dot gnu.org> --- (In reply to Xi Ruoyao from comment #5) > Definitely not a __builtin_strlen expansion issue. Things start to go wrong > in 318r.bbro pass. In 317r.rtl.dce: > > note 42 17 18 4 [bb 4] NOTE_INSN_BASIC_BLOCK) > (note 18 42 19 4 NOTE_INSN_DELETED) > (insn 19 18 20 4 (set (reg:DI 13 $r13 [orig:92 MEM <char[1:2]> [(void > *)filename_3(D)]+1 ] [92]) > (zero_extend:DI (mem:QI (plus:DI (reg/v/f:DI 4 $r4 [orig:82 filename > ] [82]) > (const_int 1 [0x1])) [0 MEM <char[1:2]> [(void > *)filename_3(D)]+1 S1 A8]))) "t.c":6:30 discrim 1 107 {zero_extendqidi2} > (nil)) > (code_label 20 19 43 5 3 (nil) [1 uses]) > (note 43 20 21 5 [bb 5] NOTE_INSN_BASIC_BLOCK) > (insn 21 43 22 5 (set (reg:DI 12 $r12 [orig:80 _1 ] [80]) > (sign_extend:DI (reg:SI 13 $r13 [orig:92 MEM <char[1:2]> [(void > *)filename_3(D)]+1 ] [92]))) "t.c":6:30 discrim 1 116 {extendsidi2} > (expr_list:REG_DEAD (reg:SI 13 $r13 [orig:92 MEM <char[1:2]> [(void > *)filename_3(D)]+1 ] [92]) > (nil))) > > But in 318r.bbro: > > Reordered sequence: > 2 bb 2 > 3 bb 3 > 4 bb 5 > 5 bb 7 > 6 bb 8 > 7 bb 4 > 8 duplicate of 5 > > and... > > (code_label 20 19 43 4 3 (nil) [1 uses]) > (note 43 20 21 4 [bb 4] NOTE_INSN_BASIC_BLOCK) > (insn 21 43 22 4 (set (reg:DI 12 $r12 [orig:80 _1 ] [80]) > (sign_extend:DI (reg:SI 13 $r13 [orig:92 MEM <char[1:2]> [(void > *)filename_3(D)]+1 ] [92]))) "t.c":6:30 discrim 1 116 {extendsidi2} > (expr_list:REG_DEAD (reg:SI 13 $r13 [orig:92 MEM <char[1:2]> [(void > *)filename_3(D)]+1 ] [92]) > (nil))) > > Apparently the BB reorder pass believe BB 5 does not depends on BB 4. Any > idea why this could even happen? Wrong analysis, looks like I was too sleepy yesterday. I'll try to post a new one now...