https://gcc.gnu.org/g:239ad907b1fc08874042f8bea5f61eaf3ba2877d
commit r15-1806-g239ad907b1fc08874042f8bea5f61eaf3ba2877d Author: liuhongt <hongtao....@intel.com> Date: Wed Jul 3 14:47:33 2024 +0800 Move runtime check into a separate function and guard it with target ("no-avx") The patch can avoid SIGILL on non-AVX512 machine due to kmovd is generated in dynamic check. gcc/testsuite/ChangeLog: PR target/115748 * gcc.target/i386/avx512-check.h: Move runtime check into a separate function and guard it with target ("no-avx"). Diff: --- gcc/testsuite/gcc.target/i386/avx512-check.h | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/gcc/testsuite/gcc.target/i386/avx512-check.h b/gcc/testsuite/gcc.target/i386/avx512-check.h index 0ad9064f637..71858a33dac 100644 --- a/gcc/testsuite/gcc.target/i386/avx512-check.h +++ b/gcc/testsuite/gcc.target/i386/avx512-check.h @@ -34,8 +34,9 @@ check_osxsave (void) return (ecx & bit_OSXSAVE) != 0; } +__attribute__((noipa,target("no-avx"))) int -main () +avx512_runtime_support_p () { unsigned int eax, ebx, ecx, edx; @@ -100,6 +101,17 @@ main () && (edx & bit_AVX512VP2INTERSECT) #endif && avx512f_os_support ()) + { + return 1; + } + + return 0; +} + +int +main () +{ + if (avx512_runtime_support_p ()) { DO_TEST (); #ifdef DEBUG