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.

Reply via email to