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.
Showing
- gcc/config/i386/i386-options.cc 6 additions, 0 deletionsgcc/config/i386/i386-options.cc
- gcc/testsuite/gcc.target/i386/pieces-memcpy-10.c 1 addition, 1 deletiongcc/testsuite/gcc.target/i386/pieces-memcpy-10.c
- gcc/testsuite/gcc.target/i386/pieces-memcpy-22.c 12 additions, 0 deletionsgcc/testsuite/gcc.target/i386/pieces-memcpy-22.c
- gcc/testsuite/gcc.target/i386/pieces-memcpy-6.c 1 addition, 1 deletiongcc/testsuite/gcc.target/i386/pieces-memcpy-6.c
- gcc/testsuite/gcc.target/i386/pieces-memset-38.c 1 addition, 1 deletiongcc/testsuite/gcc.target/i386/pieces-memset-38.c
- gcc/testsuite/gcc.target/i386/pieces-memset-40.c 1 addition, 1 deletiongcc/testsuite/gcc.target/i386/pieces-memset-40.c
- gcc/testsuite/gcc.target/i386/pieces-memset-41.c 1 addition, 1 deletiongcc/testsuite/gcc.target/i386/pieces-memset-41.c
- gcc/testsuite/gcc.target/i386/pieces-memset-42.c 1 addition, 1 deletiongcc/testsuite/gcc.target/i386/pieces-memset-42.c
- gcc/testsuite/gcc.target/i386/pieces-memset-43.c 1 addition, 1 deletiongcc/testsuite/gcc.target/i386/pieces-memset-43.c
- gcc/testsuite/gcc.target/i386/pieces-memset-51.c 12 additions, 0 deletionsgcc/testsuite/gcc.target/i386/pieces-memset-51.c
- gcc/testsuite/gcc.target/i386/pieces-strcpy-2.c 1 addition, 1 deletiongcc/testsuite/gcc.target/i386/pieces-strcpy-2.c
- gcc/testsuite/gcc.target/i386/pieces-strcpy-3.c 15 additions, 0 deletionsgcc/testsuite/gcc.target/i386/pieces-strcpy-3.c
Loading
Please register or sign in to comment