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?

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

Reply via email to