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(); +}