On Thu, Jul 4, 2024 at 6:17 AM H.J. Lu <hjl.to...@gmail.com> wrote: > > > On Wed, Jul 3, 2024, 9:37 PM Richard Biener <richard.guent...@gmail.com> > wrote: >> >> On Wed, Jul 3, 2024 at 9:25 AM liuhongt <hongtao....@intel.com> wrote: >> > >> > The patch can avoid SIGILL on non-AVX512 machine due to kmovd is >> > generated in dynamic check. >> > >> > Committed as an obvious fix. >> >> Hmm, now all avx512 tests SIGILL when testing with -m32: oops, I should have a test on non-avx512 machine. >> >> Dump of assembler code for function __get_cpuid_count: >> => 0x08049500 <+0>: kmovd %eax,%k2 >> 0x08049504 <+4>: kmovd %edx,%k1 >> 0x08049508 <+8>: pushf >> 0x08049509 <+9>: pushf >> 0x0804950a <+10>: pop %eax >> 0x0804950b <+11>: mov %eax,%edx >> >> looks like __get_cpuid_count is no longer inlined but AVX512 is in >> effect for it. >> >> Maybe use #pragma GCC target around the includes instead? > > > Can the built-in cpu supports be used? But we still need avx512f_os_support which is in avx512f-os-support.h. I'll try to push GCC target ("no-avx") to #include "cpuid.h" and "avx512f-os-support.h" > >> >> > 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"). >> > --- >> > 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 >> > -- >> > 2.31.1 >> >
-- BR, Hongtao