On Thu, Jul 4, 2024, 9:12 AM Hongtao Liu <crazy...@gmail.com> wrote:
> 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. > Doesn't the built-in CPU supports also check the OS support? 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 >