http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58365

--- Comment #6 from Maxim Kuvyrkov <mkuvyrkov at gcc dot gnu.org> ---
(In reply to Jakub Jelinek from comment #5)
> That is actually the crossjumping pass after csa (jump2; though yes,
> previously it has been part of csa).  In any case, I don't see anything
> wrong with the cross jumping, it turns the two:
>             (set (mem/c:BLK (reg:DI 5 di [81]) [3 D.1761+0 S20 A32])
>                 (mem/c:BLK (reg:DI 4 si [82]) [3 x6+0 S20 A32]))
> and
>             (set (mem/c:BLK (reg:DI 5 di [84]) [3 D.1761+0 S20 A32])
>                 (mem/u/c:BLK (reg:DI 4 si [85]) [3 x7+0 S20 A128]))
> into:
>             (set (mem/c:BLK (reg:DI 5 di [84]) [3 D.1761+0 S20 A32])
>                 (mem/u/c:BLK (reg:DI 4 si [85]) [3 S20 A32]))
> (note, MEM_EXPR cleared), where si is set conditionally to x6 or x7.
> And then we have the:
> (insn 29 27 31 6 (set (mem/c:SI (const:DI (plus:DI (symbol_ref:DI ("x6") 
> <var_decl 0x7f9ce47572f8 x6>)
>                     (const_int 4 [0x4]))) [2 x6.x2+0 S4 A32])
>         (const_int 1 [0x1])) pr58365.c:31 86 {*movsi_internal}
>      (nil))
> store that sched2 moves over the above rep_movsi, although there is a
> (conditional, may, but doesn't have to) aliasing case.

Jacub, I don't quite understand whether you are saying that the bug is /not/ in
csa (at GCC 4.7 age) or whether you are providing additional analysis.

I'm debugging the gcc-4.7-era revision 162592 and here the source MEM in
rep_movsi references stack variable instead of x6, which causes wrong aliasing
decision.

Reply via email to