Hi.

The patch is adding missing AVX512 ISAs for target and target_clone
attributes.

Patch can bootstrap on x86_64-linux-gnu and survives regression tests.

Ready to be installed?
Thanks,
Martin

gcc/ChangeLog:

2019-04-10  Martin Liska  <mli...@suse.cz>

        PR target/89929
        * config/i386/i386.c (get_builtin_code_for_version): Add
        support for missing AVX512 ISAs.

gcc/testsuite/ChangeLog:

2019-04-10  Martin Liska  <mli...@suse.cz>

        PR target/89929
        * g++.target/i386/mv28.C: New test.
        * gcc.target/i386/mvc14.c: New test.
---
 gcc/config/i386/i386.c                | 34 ++++++++++++++++++++++++++-
 gcc/testsuite/g++.target/i386/mv28.C  | 30 +++++++++++++++++++++++
 gcc/testsuite/gcc.target/i386/mvc14.c | 16 +++++++++++++
 3 files changed, 79 insertions(+), 1 deletion(-)
 create mode 100644 gcc/testsuite/g++.target/i386/mv28.C
 create mode 100644 gcc/testsuite/gcc.target/i386/mvc14.c


diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 57d5a7b8432..2d09a006fb6 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -31883,6 +31883,22 @@ get_builtin_code_for_version (tree decl, tree *predicate_list)
     P_AVX2,
     P_PROC_AVX2,
     P_AVX512F,
+    P_AVX512VL,
+    P_AVX512BW,
+    P_AVX512DQ,
+    P_AVX512CD,
+    P_AVX512ER,
+    P_AVX512PF,
+    P_AVX512VBMI,
+    P_AVX512IFMA,
+    P_AVX5124VNNIW,
+    P_AVX5124FMAPS,
+    P_AVX512VPOPCNTDQ,
+    P_AVX512VBMI2,
+    P_GFNI,
+    P_VPCLMULQDQ,
+    P_AVX512VNNI,
+    P_AVX512BITALG,
     P_PROC_AVX512F
   };
 
@@ -31916,7 +31932,23 @@ get_builtin_code_for_version (tree decl, tree *predicate_list)
       {"fma", P_FMA},
       {"bmi2", P_BMI2},
       {"avx2", P_AVX2},
-      {"avx512f", P_AVX512F}
+      {"avx512f", P_AVX512F},
+      {"avx512vl", P_AVX512VL},
+      {"avx512bw", P_AVX512BW},
+      {"avx512dq", P_AVX512DQ},
+      {"avx512cd", P_AVX512CD},
+      {"avx512er", P_AVX512ER},
+      {"avx512pf", P_AVX512PF},
+      {"avx512vbmi", P_AVX512VBMI},
+      {"avx512ifma", P_AVX512IFMA},
+      {"avx5124vnniw", P_AVX5124VNNIW},
+      {"avx5124fmaps", P_AVX5124FMAPS},
+      {"avx512vpopcntdq", P_AVX512VPOPCNTDQ},
+      {"avx512vbmi2", P_AVX512VBMI2},
+      {"gfni", P_GFNI},
+      {"vpclmulqdq", P_VPCLMULQDQ},
+      {"avx512vnni", P_AVX512VNNI},
+      {"avx512bitalg", P_AVX512BITALG}
     };
 
 
diff --git a/gcc/testsuite/g++.target/i386/mv28.C b/gcc/testsuite/g++.target/i386/mv28.C
new file mode 100644
index 00000000000..401edc2585f
--- /dev/null
+++ b/gcc/testsuite/g++.target/i386/mv28.C
@@ -0,0 +1,30 @@
+/* { dg-do compile} */
+/* { dg-require-ifunc "" }  */
+
+#define FN(TARGET) \
+void __attribute__ ((target(TARGET))) foo () {}
+
+FN("avx512f")
+FN("avx512vl")
+FN("avx512bw")
+FN("avx512dq")
+FN("avx512cd")
+FN("avx512er")
+FN("avx512pf")
+FN("avx512vbmi")
+FN("avx512ifma")
+FN("avx5124vnniw")
+FN("avx5124fmaps")
+FN("avx512vpopcntdq")
+FN("avx512vbmi2")
+FN("gfni")
+FN("vpclmulqdq")
+FN("avx512vnni")
+FN("avx512bitalg")
+FN("default")
+
+int main()
+{
+  foo ();
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.target/i386/mvc14.c b/gcc/testsuite/gcc.target/i386/mvc14.c
new file mode 100644
index 00000000000..bff39af3998
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/mvc14.c
@@ -0,0 +1,16 @@
+/* { dg-do compile } */
+/* { dg-require-ifunc "" } */
+
+__attribute__((target_clones("avx512f", "avx512vl", "avx512bw", "avx512dq",
+			     "avx512cd", "avx512er", "avx512pf", "avx512vbmi",
+			     "avx512ifma", "avx5124vnniw", "avx5124fmaps",
+			     "avx512vpopcntdq", "avx512vbmi2", "gfni",
+			     "vpclmulqdq", "avx512vnni", "avx512bitalg",
+			     "default")))
+int foo ();
+
+int
+bar ()
+{
+  return foo();
+}

Reply via email to