This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Zen tuning part 4: Avoid 512bit memcpy/memset expansions on AVX128 optimal targets
- From: Jan Hubicka <hubicka at ucw dot cz>
- To: gcc-patches at gcc dot gnu dot org
- Date: Sun, 8 Oct 2017 12:57:18 +0200
- Subject: Zen tuning part 4: Avoid 512bit memcpy/memset expansions on AVX128 optimal targets
- Authentication-results: sourceware.org; auth=none
Hi,
ix86_expand_set_or_movmem is trying to use widest possible vector mode available.
This does not help for ryzen, because 512 operations are performed by halves.
This patch by itself does not affect generated code because memcpy/memset expansion
tables needs to be updated.
Bootstrapped/regtested x86_64-linux.
Honza
* i386.c (ix86_expand_set_or_movmem): Disable 512bit loops for targets
that preffer 128bit.
Index: i386.c
===================================================================
--- i386.c (revision 253513)
+++ i386.c (working copy)
@@ -28947,6 +28947,9 @@ ix86_expand_set_or_movmem (rtx dst, rtx
&& optab_handler (mov_optab, wider_mode) != CODE_FOR_nothing)
move_mode = wider_mode;
+ if (TARGET_AVX128_OPTIMAL && GET_MODE_BITSIZE (move_mode) > 128)
+ move_mode = TImode;
+
/* Find the corresponding vector mode with the same size as MOVE_MODE.
MOVE_MODE is an integer mode at the moment (SI, DI, TI, etc.). */
if (GET_MODE_SIZE (move_mode) > GET_MODE_SIZE (word_mode))