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...

Reply via email to