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.