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.