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

--- Comment #5 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
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.

Reply via email to