]> gcc.gnu.org Git - gcc.git/commit
Align ix86_{move_max,store_max} with vectorizer.
authorliuhongt <hongtao.liu@intel.com>
Thu, 15 Aug 2024 04:54:07 +0000 (12:54 +0800)
committerliuhongt <hongtao.liu@intel.com>
Thu, 22 Aug 2024 02:30:25 +0000 (10:30 +0800)
commit6ea25c041964bf63014fcf7bb68fb1f5a0a4e123
treea9c2b0a496c098a0035099637aa38186363b7fc1
parentf155534979e367c189d5210daa54af93c39ce683
Align ix86_{move_max,store_max} with vectorizer.

When none of mprefer-vector-width, avx256_optimal/avx128_optimal,
avx256_store_by_pieces/avx512_store_by_pieces is specified, GCC will
set ix86_{move_max,store_max} as max available vector length except
for AVX part.

      if (TARGET_AVX512F_P (opts->x_ix86_isa_flags)
  && TARGET_EVEX512_P (opts->x_ix86_isa_flags2))
opts->x_ix86_move_max = PVW_AVX512;
      else
opts->x_ix86_move_max = PVW_AVX128;

So for -mavx2, vectorizer will choose 256-bit for vectorization, but
128-bit is used for struct copy, there could be a potential STLF issue
due to this "misalign".

The patch fixes that.

gcc/ChangeLog:

* config/i386/i386-options.cc (ix86_option_override_internal):
set ix86_{move_max,store_max} to PVW_AVX256 when TARGET_AVX
instead of PVW_AVX128.

gcc/testsuite/ChangeLog:
* gcc.target/i386/pieces-memcpy-10.c: Add -mprefer-vector-width=128.
* gcc.target/i386/pieces-memcpy-6.c: Ditto.
* gcc.target/i386/pieces-memset-38.c: Ditto.
* gcc.target/i386/pieces-memset-40.c: Ditto.
* gcc.target/i386/pieces-memset-41.c: Ditto.
* gcc.target/i386/pieces-memset-42.c: Ditto.
* gcc.target/i386/pieces-memset-43.c: Ditto.
* gcc.target/i386/pieces-strcpy-2.c: Ditto.
* gcc.target/i386/pieces-memcpy-22.c: New test.
* gcc.target/i386/pieces-memset-51.c: New test.
* gcc.target/i386/pieces-strcpy-3.c: New test.
12 files changed:
gcc/config/i386/i386-options.cc
gcc/testsuite/gcc.target/i386/pieces-memcpy-10.c
gcc/testsuite/gcc.target/i386/pieces-memcpy-22.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pieces-memcpy-6.c
gcc/testsuite/gcc.target/i386/pieces-memset-38.c
gcc/testsuite/gcc.target/i386/pieces-memset-40.c
gcc/testsuite/gcc.target/i386/pieces-memset-41.c
gcc/testsuite/gcc.target/i386/pieces-memset-42.c
gcc/testsuite/gcc.target/i386/pieces-memset-43.c
gcc/testsuite/gcc.target/i386/pieces-memset-51.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pieces-strcpy-2.c
gcc/testsuite/gcc.target/i386/pieces-strcpy-3.c [new file with mode: 0644]
This page took 0.061279 seconds and 5 git commands to generate.