https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90096

            Bug ID: 90096
           Summary: Misleading option hint for AVX intrinsics
           Product: gcc
           Version: 9.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: marxin at gcc dot gnu.org
  Target Milestone: ---

I see following misleading hint for:

$ cat /tmp/avx512.c
#include <x86intrin.h>
volatile __m512i x1, x2;
volatile __mmask64 m64;

int foo(int i) {
    x1 = _mm512_gf2p8affineinv_epi64_epi8(x1, x2, 3);
    return 4;
}

$ ./xgcc -B. /tmp/avx512.c -c
In file included from ./include/immintrin.h:117,
                 from ./include/x86intrin.h:32,
                 from /tmp/avx512.c:1:
/tmp/avx512.c: In function ‘foo’:
/tmp/avx512.c:6:10: error: ‘__builtin_ia32_vgf2p8affineinvqb_v64qi’ needs isa
option -m32 -mgfni -mavx512f
    6 |     x1 = _mm512_gf2p8affineinv_epi64_epi8(x1, x2, 3);
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Where '-m32' is not needed of course:

$ ./xgcc -B. /tmp/avx512.c -c -mgfni -mavx512f
[OK]

It's caused by:

gcc/config/i386/gfniintrin.h-__attribute__((__gnu_inline__, __always_inline__,
__artificial__))
gcc/config/i386/gfniintrin.h:_mm512_gf2p8affineinv_epi64_epi8 (__m512i __A,
__m512i __B, const int __C)
gcc/config/i386/gfniintrin.h-{
gcc/config/i386/gfniintrin.h-  return (__m512i)
__builtin_ia32_vgf2p8affineinvqb_v64qi ((__v64qi) __A,
gcc/config/i386/gfniintrin.h-                                                  
   (__v64qi) __B, __C);
gcc/config/i386/gfniintrin.h-}
gcc/config/i386/gfniintrin.h-

Is it something we can improve?
Clang for instance prints:

clang /tmp/avx512.c
/tmp/avx512.c:6:10: error: '__builtin_ia32_vgf2p8affineinvqb_v64qi' needs
target feature avx512bw,gfni
    x1 = _mm512_gf2p8affineinv_epi64_epi8(x1, x2, 3);
         ^
/usr/lib64/clang/8.0.0/include/gfniintrin.h:64:12: note: expanded from macro
'_mm512_gf2p8affineinv_epi64_epi8'
  (__m512i)__builtin_ia32_vgf2p8affineinvqb_v64qi((__v64qi)(__m512i)(A),       
  \
           ^
1 error generated.

Apparently they use macros instead of gnu_inline attributes.

Reply via email to