https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109086
Xi Ruoyao <xry111 at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |xry111 at gcc dot gnu.org --- Comment #5 from Xi Ruoyao <xry111 at gcc dot gnu.org> --- 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?