diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/i386/i386-options.c | 27 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr93089-2.c | 12 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr93089-3.c | 12 |
5 files changed, 58 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c1936a5..8cbaa45 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,6 +1,12 @@ 2020-01-03 Jakub Jelinek <jakub@redhat.com> PR target/93089 + * config/i386/i386-options.c (ix86_simd_clone_adjust): If + TARGET_PREFER_AVX128, use prefer-vector-width=256 for 'c' and 'd' + simd clones. If TARGET_PREFER_AVX256, use prefer-vector-width=512 + for 'e' simd clones. + + PR target/93089 * config/i386/i386.opt (x_prefer_vector_width_type): Remove TargetSave entry. (mprefer-vector-width=): Add Save. diff --git a/gcc/config/i386/i386-options.c b/gcc/config/i386/i386-options.c index a4c66e4..2acc9fb 100644 --- a/gcc/config/i386/i386-options.c +++ b/gcc/config/i386/i386-options.c @@ -2950,15 +2950,36 @@ ix86_simd_clone_adjust (struct cgraph_node *node) str = "sse2"; break; case 'c': - if (!TARGET_AVX) + if (TARGET_PREFER_AVX128) + { + if (!TARGET_AVX) + str = "avx,prefer-vector-width=256"; + else + str = "prefer-vector-width=256"; + } + else if (!TARGET_AVX) str = "avx"; break; case 'd': - if (!TARGET_AVX2) + if (TARGET_PREFER_AVX128) + { + if (!TARGET_AVX2) + str = "avx2,prefer-vector-width=256"; + else + str = "prefer-vector-width=256"; + } + else if (!TARGET_AVX2) str = "avx2"; break; case 'e': - if (!TARGET_AVX512F) + if (TARGET_PREFER_AVX256) + { + if (!TARGET_AVX512F) + str = "avx512f,prefer-vector-width=512"; + else + str = "prefer-vector-width=512"; + } + else if (!TARGET_AVX512F) str = "avx512f"; break; default: diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 4849360..69f1fbd 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,6 +1,10 @@ 2020-01-03 Jakub Jelinek <jakub@redhat.com> PR target/93089 + * gcc.target/i386/pr93089-2.c: New test. + * gcc.target/i386/pr93089-3.c: New test. + + PR target/93089 * gcc.target/i386/pr93089-1.c: New test. PR target/93110 diff --git a/gcc/testsuite/gcc.target/i386/pr93089-2.c b/gcc/testsuite/gcc.target/i386/pr93089-2.c new file mode 100644 index 0000000..c167dd6 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr93089-2.c @@ -0,0 +1,12 @@ +/* PR target/93089 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -fopenmp-simd -mtune=znver1" } */ +/* { dg-final { scan-assembler "vmulps\[^\n\r]*zmm" } } */ +/* { dg-final { scan-assembler "vmulps\[^\n\r]*ymm" } } */ + +#pragma omp declare simd notinbranch +float +foo (float x, float y) +{ + return x * y; +} diff --git a/gcc/testsuite/gcc.target/i386/pr93089-3.c b/gcc/testsuite/gcc.target/i386/pr93089-3.c new file mode 100644 index 0000000..02f1fae --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr93089-3.c @@ -0,0 +1,12 @@ +/* PR target/93089 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -fopenmp-simd -mtune=skylake-avx512" } */ +/* { dg-final { scan-assembler "vmulps\[^\n\r]*zmm" } } */ +/* { dg-final { scan-assembler "vmulps\[^\n\r]*ymm" } } */ + +#pragma omp declare simd notinbranch +float +foo (float x, float y) +{ + return x * y; +} |