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?