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: > > 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? > > 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 > > >