https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110792

--- Comment #5 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
When this is split:
(insn 12 11 18 2 (set (reg:DI 0 ax [87])
        (rotate:DI (mem:DI (plus:SI (mult:SI (reg:SI 0 ax [orig:89 x0 ] [89])
                        (const_int 8 [0x8]))
                    (symbol_ref:SI ("WHIRL_S") [flags 0x2]  <var_decl
0x7f3d8ca03cf0 WHIRL_S>)) [1 WHIRL_S[_1]+0 S8 A64])
            (const_int 32 [0x20]))) "/app/example.cpp":4:75 971
{rotl32di2_doubleword}
     (nil))

It gets split incorrectly into:
(insn 21 11 22 2 (set (reg:SI 0 ax [87])
        (mem:SI (plus:SI (mult:SI (reg:SI 0 ax [orig:89 x0 ] [89])
                    (const_int 8 [0x8]))
                (const:SI (plus:SI (symbol_ref:SI ("WHIRL_S") [flags 0x2] 
<var_decl 0x7fec90c18cf0 WHIRL_S>)
                        (const_int 4 [0x4])))) [1 WHIRL_S[_1]+4 S4 A32]))
"/app/example.cpp":4:75 91 {*movsi_internal}
     (nil))
(insn 22 21 18 2 (set (reg:SI 1 dx [+4 ])
        (mem:SI (plus:SI (mult:SI (reg:SI 0 ax [orig:89 x0 ] [89])
                    (const_int 8 [0x8]))
                (symbol_ref:SI ("WHIRL_S") [flags 0x2]  <var_decl
0x7fec90c18cf0 WHIRL_S>)) [1 WHIRL_S[_1]+0 S4 A64])) "/app/example.cpp":4:75 91
{*movsi_internal}
     (nil))

Basically ax set before its use in the memory ...

Reply via email to