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?

Reply via email to