https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97073
Uroš Bizjak <ubizjak at gmail dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- Component|target |middle-end --- Comment #2 from Uroš Bizjak <ubizjak at gmail dot com> --- Middle-end expands double mode operation to: 2: r85:DI=[r76:SI] 3: NOTE_INSN_FUNCTION_BEG 6: r86:SI=`gs2' 7: r87:SI=`gs2' 10: {r89:SI=r85:DI#0&[r87:SI];clobber flags:CC;} 11: [r86:SI+0x4]=r89:SI 14: {r91:SI=r85:DI#4&[r87:SI+0x4];clobber flags:CC;} 15: [r86:SI+0x8]=r91:SI Please note how (insn 11) partially clobbers input value, needed by (insn 14). When -msse2 is used, we expand with: 6: r86:SI=`gs2' 7: r87:SI=`gs2' 10: {r89:DI=r85:DI&[r87:SI];clobber flags:CC;} 11: [r86:SI+0x4]=r89:DI that bypasses generic middle-end expansion.