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