[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