diff options
author | liuhongt <hongtao.liu@intel.com> | 2023-08-10 11:41:39 +0800 |
---|---|---|
committer | liuhongt <hongtao.liu@intel.com> | 2023-08-16 09:18:06 +0800 |
commit | 3064d1f5c48cb6ce1b4133570dd08ecca8abb52d (patch) | |
tree | 46ab8bae6faf850daa3843d6ffd6aaf2bc1e874a | |
parent | f5f7d03bb9634b052a7b4469f10db10e20a8bbc4 (diff) | |
download | gcc-3064d1f5c48cb6ce1b4133570dd08ecca8abb52d.zip gcc-3064d1f5c48cb6ce1b4133570dd08ecca8abb52d.tar.gz gcc-3064d1f5c48cb6ce1b4133570dd08ecca8abb52d.tar.bz2 |
Software mitigation: Disable gather generation in vectorization for GDS affected Intel Processors.
For more details of GDS (Gather Data Sampling), refer to
https://www.intel.com/content/www/us/en/developer/articles/technical/software-security-guidance/advisory-guidance/gather-data-sampling.html
After microcode update, there's performance regression. To avoid that,
the patch disables gather generation in autovectorization but uses
gather scalar emulation instead.
gcc/ChangeLog:
* config/i386/i386-options.cc (m_GDS): New macro.
* config/i386/x86-tune.def (X86_TUNE_USE_GATHER_2PARTS): Don't
enable for m_GDS.
(X86_TUNE_USE_GATHER_4PARTS): Ditto.
(X86_TUNE_USE_GATHER): Ditto.
gcc/testsuite/ChangeLog:
* gcc.target/i386/avx2-gather-2.c: Adjust options to keep
gather vectorization.
* gcc.target/i386/avx2-gather-6.c: Ditto.
* gcc.target/i386/avx512f-pr88464-1.c: Ditto.
* gcc.target/i386/avx512f-pr88464-5.c: Ditto.
* gcc.target/i386/avx512vl-pr88464-1.c: Ditto.
* gcc.target/i386/avx512vl-pr88464-11.c: Ditto.
* gcc.target/i386/avx512vl-pr88464-3.c: Ditto.
* gcc.target/i386/avx512vl-pr88464-9.c: Ditto.
* gcc.target/i386/pr88531-1b.c: Ditto.
* gcc.target/i386/pr88531-1c.c: Ditto.
-rw-r--r-- | gcc/config/i386/i386-options.cc | 5 | ||||
-rw-r--r-- | gcc/config/i386/x86-tune.def | 6 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/avx2-gather-2.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/avx2-gather-6.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/avx512f-pr88464-1.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/avx512f-pr88464-5.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/avx512vl-pr88464-1.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/avx512vl-pr88464-11.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/avx512vl-pr88464-3.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/avx512vl-pr88464-9.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr88531-1b.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr88531-1c.c | 2 |
12 files changed, 18 insertions, 13 deletions
diff --git a/gcc/config/i386/i386-options.cc b/gcc/config/i386/i386-options.cc index 127ee24..e6ba33c 100644 --- a/gcc/config/i386/i386-options.cc +++ b/gcc/config/i386/i386-options.cc @@ -141,6 +141,11 @@ along with GCC; see the file COPYING3. If not see #define m_ARROWLAKE (HOST_WIDE_INT_1U<<PROCESSOR_ARROWLAKE) #define m_CORE_ATOM (m_SIERRAFOREST | m_GRANDRIDGE) #define m_INTEL (HOST_WIDE_INT_1U<<PROCESSOR_INTEL) +/* Gather Data Sampling / CVE-2022-40982 / INTEL-SA-00828. + Software mitigation. */ +#define m_GDS (m_SKYLAKE | m_SKYLAKE_AVX512 | m_CANNONLAKE \ + | m_ICELAKE_CLIENT | m_ICELAKE_SERVER | m_CASCADELAKE \ + | m_TIGERLAKE | m_COOPERLAKE | m_ROCKETLAKE) #define m_LUJIAZUI (HOST_WIDE_INT_1U<<PROCESSOR_LUJIAZUI) diff --git a/gcc/config/i386/x86-tune.def b/gcc/config/i386/x86-tune.def index 40e04ec..22d26bb 100644 --- a/gcc/config/i386/x86-tune.def +++ b/gcc/config/i386/x86-tune.def @@ -491,7 +491,7 @@ DEF_TUNE (X86_TUNE_AVOID_4BYTE_PREFIXES, "avoid_4byte_prefixes", elements. */ DEF_TUNE (X86_TUNE_USE_GATHER_2PARTS, "use_gather_2parts", ~(m_ZNVER1 | m_ZNVER2 | m_ZNVER3 | m_ZNVER4 | m_ALDERLAKE - | m_ARROWLAKE | m_CORE_ATOM | m_GENERIC)) + | m_ARROWLAKE | m_CORE_ATOM | m_GENERIC | m_GDS)) /* X86_TUNE_USE_SCATTER_2PARTS: Use scater instructions for vectors with 2 elements. */ @@ -502,7 +502,7 @@ DEF_TUNE (X86_TUNE_USE_SCATTER_2PARTS, "use_scatter_2parts", elements. */ DEF_TUNE (X86_TUNE_USE_GATHER_4PARTS, "use_gather_4parts", ~(m_ZNVER1 | m_ZNVER2 | m_ZNVER3 | m_ZNVER4 | m_ALDERLAKE - | m_ARROWLAKE | m_CORE_ATOM | m_GENERIC)) + | m_ARROWLAKE | m_CORE_ATOM | m_GENERIC | m_GDS)) /* X86_TUNE_USE_SCATTER_4PARTS: Use scater instructions for vectors with 4 elements. */ @@ -513,7 +513,7 @@ DEF_TUNE (X86_TUNE_USE_SCATTER_4PARTS, "use_scatter_4parts", elements. */ DEF_TUNE (X86_TUNE_USE_GATHER, "use_gather", ~(m_ZNVER1 | m_ZNVER2 | m_ZNVER4 | m_ALDERLAKE | m_ARROWLAKE - | m_CORE_ATOM | m_GENERIC)) + | m_CORE_ATOM | m_GENERIC | m_GDS)) /* X86_TUNE_USE_SCATTER: Use scater instructions for vectors with 8 or more elements. */ diff --git a/gcc/testsuite/gcc.target/i386/avx2-gather-2.c b/gcc/testsuite/gcc.target/i386/avx2-gather-2.c index ad5ef73..978924b 100644 --- a/gcc/testsuite/gcc.target/i386/avx2-gather-2.c +++ b/gcc/testsuite/gcc.target/i386/avx2-gather-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O3 -fdump-tree-vect-details -march=skylake" } */ +/* { dg-options "-O3 -fdump-tree-vect-details -march=skylake -mtune=haswell" } */ #include "avx2-gather-1.c" diff --git a/gcc/testsuite/gcc.target/i386/avx2-gather-6.c b/gcc/testsuite/gcc.target/i386/avx2-gather-6.c index 47a95db..0bb40ac 100644 --- a/gcc/testsuite/gcc.target/i386/avx2-gather-6.c +++ b/gcc/testsuite/gcc.target/i386/avx2-gather-6.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O3 -mavx2 -fno-common -fdump-tree-vect-details -mtune=skylake -fno-split-loops" } */ +/* { dg-options "-O3 -mavx2 -fno-common -fdump-tree-vect-details -mtune=haswell -fno-split-loops" } */ #include "avx2-gather-5.c" diff --git a/gcc/testsuite/gcc.target/i386/avx512f-pr88464-1.c b/gcc/testsuite/gcc.target/i386/avx512f-pr88464-1.c index 06d21bb..d1a2298 100644 --- a/gcc/testsuite/gcc.target/i386/avx512f-pr88464-1.c +++ b/gcc/testsuite/gcc.target/i386/avx512f-pr88464-1.c @@ -1,6 +1,6 @@ /* PR tree-optimization/88464 */ /* { dg-do compile } */ -/* { dg-options "-O3 -mavx512f -mprefer-vector-width=512 -mtune=skylake-avx512 -fdump-tree-vect-details" } */ +/* { dg-options "-O3 -mavx512f -mprefer-vector-width=512 -mtune=haswell -fdump-tree-vect-details" } */ /* { dg-final { scan-tree-dump-times "loop vectorized using 64 byte vectors" 4 "vect" } } */ /* { dg-final { scan-tree-dump-times "vectorized 1 loops in function" 4 "vect" } } */ diff --git a/gcc/testsuite/gcc.target/i386/avx512f-pr88464-5.c b/gcc/testsuite/gcc.target/i386/avx512f-pr88464-5.c index 462e951..d7b0b2b 100644 --- a/gcc/testsuite/gcc.target/i386/avx512f-pr88464-5.c +++ b/gcc/testsuite/gcc.target/i386/avx512f-pr88464-5.c @@ -1,6 +1,6 @@ /* PR tree-optimization/88464 */ /* { dg-do compile } */ -/* { dg-options "-O3 -mavx512f -mprefer-vector-width=512 -mtune=skylake-avx512 -fdump-tree-vect-details" } */ +/* { dg-options "-O3 -mavx512f -mprefer-vector-width=512 -mtune=haswell -fdump-tree-vect-details" } */ /* { dg-final { scan-tree-dump-times "loop vectorized using 64 byte vectors" 4 "vect" } } */ /* { dg-final { scan-tree-dump-times "vectorized 1 loops in function" 4 "vect" } } */ diff --git a/gcc/testsuite/gcc.target/i386/avx512vl-pr88464-1.c b/gcc/testsuite/gcc.target/i386/avx512vl-pr88464-1.c index 55a28dd..0743918 100644 --- a/gcc/testsuite/gcc.target/i386/avx512vl-pr88464-1.c +++ b/gcc/testsuite/gcc.target/i386/avx512vl-pr88464-1.c @@ -1,6 +1,6 @@ /* PR tree-optimization/88464 */ /* { dg-do compile } */ -/* { dg-options "-O3 -mavx512vl -mprefer-vector-width=256 -mtune=skylake-avx512 -fdump-tree-vect-details" } */ +/* { dg-options "-O3 -mavx512vl -mprefer-vector-width=256 -mtune=haswell -fdump-tree-vect-details" } */ /* { dg-final { scan-tree-dump-times "loop vectorized using 32 byte vectors" 4 "vect" } } */ /* { dg-final { scan-tree-dump-times "vectorized 1 loops in function" 4 "vect" } } */ diff --git a/gcc/testsuite/gcc.target/i386/avx512vl-pr88464-11.c b/gcc/testsuite/gcc.target/i386/avx512vl-pr88464-11.c index 9696008..3a98108 100644 --- a/gcc/testsuite/gcc.target/i386/avx512vl-pr88464-11.c +++ b/gcc/testsuite/gcc.target/i386/avx512vl-pr88464-11.c @@ -1,6 +1,6 @@ /* PR tree-optimization/88464 */ /* { dg-do compile } */ -/* { dg-options "-O3 -mavx512vl -mprefer-vector-width=128 -mtune=skylake-avx512 -fdump-tree-vect-details" } */ +/* { dg-options "-O3 -mavx512vl -mprefer-vector-width=128 -mtune=haswell -fdump-tree-vect-details" } */ /* { dg-final { scan-tree-dump-times "loop vectorized using 16 byte vectors" 4 "vect" } } */ /* { dg-final { scan-tree-dump-times "vectorized 1 loops in function" 4 "vect" } } */ diff --git a/gcc/testsuite/gcc.target/i386/avx512vl-pr88464-3.c b/gcc/testsuite/gcc.target/i386/avx512vl-pr88464-3.c index 6b0c8a8..ac669e0 100644 --- a/gcc/testsuite/gcc.target/i386/avx512vl-pr88464-3.c +++ b/gcc/testsuite/gcc.target/i386/avx512vl-pr88464-3.c @@ -1,6 +1,6 @@ /* PR tree-optimization/88464 */ /* { dg-do compile } */ -/* { dg-options "-O3 -mavx512vl -mprefer-vector-width=128 -mtune=skylake-avx512 -fdump-tree-vect-details" } */ +/* { dg-options "-O3 -mavx512vl -mprefer-vector-width=128 -mtune=haswell -fdump-tree-vect-details" } */ /* { dg-final { scan-tree-dump-times "loop vectorized using 16 byte vectors" 4 "vect" } } */ /* { dg-final { scan-tree-dump-times "vectorized 1 loops in function" 4 "vect" } } */ diff --git a/gcc/testsuite/gcc.target/i386/avx512vl-pr88464-9.c b/gcc/testsuite/gcc.target/i386/avx512vl-pr88464-9.c index 3af568a..14a1083 100644 --- a/gcc/testsuite/gcc.target/i386/avx512vl-pr88464-9.c +++ b/gcc/testsuite/gcc.target/i386/avx512vl-pr88464-9.c @@ -1,6 +1,6 @@ /* PR tree-optimization/88464 */ /* { dg-do compile } */ -/* { dg-options "-O3 -mavx512vl -mprefer-vector-width=256 -mtune=skylake-avx512 -fdump-tree-vect-details" } */ +/* { dg-options "-O3 -mavx512vl -mprefer-vector-width=256 -mtune=haswell -fdump-tree-vect-details" } */ /* { dg-final { scan-tree-dump-times "loop vectorized using 32 byte vectors" 4 "vect" } } */ /* { dg-final { scan-tree-dump-times "vectorized 1 loops in function" 4 "vect" } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr88531-1b.c b/gcc/testsuite/gcc.target/i386/pr88531-1b.c index 812c8a1..e6df789 100644 --- a/gcc/testsuite/gcc.target/i386/pr88531-1b.c +++ b/gcc/testsuite/gcc.target/i386/pr88531-1b.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O3 -march=skylake -mfpmath=sse" } */ +/* { dg-options "-O3 -march=skylake -mfpmath=sse -mtune=haswell" } */ #include "pr88531-1a.c" diff --git a/gcc/testsuite/gcc.target/i386/pr88531-1c.c b/gcc/testsuite/gcc.target/i386/pr88531-1c.c index 43fc591..a093c87 100644 --- a/gcc/testsuite/gcc.target/i386/pr88531-1c.c +++ b/gcc/testsuite/gcc.target/i386/pr88531-1c.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O3 -march=skylake-avx512 -mfpmath=sse" } */ +/* { dg-options "-O3 -march=skylake-avx512 -mfpmath=sse -mtune=haswell" } */ #include "pr88531-1a.c" |