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

Reply via email to