aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/i386/i386-options.c27
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.target/i386/pr93089-2.c12
-rw-r--r--gcc/testsuite/gcc.target/i386/pr93089-3.c12
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;
+}