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 <[email protected]>
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 <[email protected]>
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();
+}