[Bug target/90492] simple array-copy not use available simd-registers

rguenth at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Thu May 16 08:45:00 GMT 2019


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

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |missed-optimization
             Target|x86_64-suse-linux           |x86_64-*-*, i?86-*-*
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2019-05-16
                 CC|                            |hjl.tools at gmail dot com
     Ever confirmed|0                           |1

--- Comment #5 from Richard Biener <rguenth at gcc dot gnu.org> ---
Confirmed.  This is probably the generic block-copying (move_by_pieces)
code expanding

  MEM[(char * {ref-all})&b] = MEM[(char * {ref-all})&a];

and the target directing it to at most use SSE regs:

/* MOVE_MAX_PIECES is the number of bytes at a time which we can
   move efficiently, as opposed to  MOVE_MAX which is the maximum
   number of bytes we can move with a single instruction.

   ??? We should use TImode in 32-bit mode and use OImode or XImode
   if they are available.  But since by_pieces_ninsns determines the
   widest mode with MAX_FIXED_MODE_SIZE, we can only use TImode in
   64-bit mode.  */
#define MOVE_MAX_PIECES \
  ((TARGET_64BIT \
    && TARGET_SSE2 \
    && TARGET_SSE_UNALIGNED_LOAD_OPTIMAL \
    && TARGET_SSE_UNALIGNED_STORE_OPTIMAL) \
   ? GET_MODE_SIZE (TImode) : UNITS_PER_WORD)

not sure if the MAX_FIXED_MODE_SIZE comment is still valid.


More information about the Gcc-bugs mailing list