Hi!

The builtins used in avx512bf16vlintrin.h implementation need both
avx512bf16 and avx512vl ISAs, which the header ensures for them, but
the builtins weren't actually requiring avx512vl, so when used by hand
with just -mavx512bf16 -mno-avx512vl it resulted in ICEs.

Fixed by adding OPTION_MASK_ISA_AVX512VL to their BDESC.

Bootstrapped/regtested on x86_64-linux and i686-linux, preapproved by
Hongtao in the PR, committed to trunk.

2023-02-23  Jakub Jelinek  <ja...@redhat.com>

        PR target/108881
        * config/i386/i386-builtin.def (__builtin_ia32_cvtne2ps2bf16_v16bf,
        __builtin_ia32_cvtne2ps2bf16_v16bf_mask,
        __builtin_ia32_cvtne2ps2bf16_v16bf_maskz,
        __builtin_ia32_cvtne2ps2bf16_v8bf,
        __builtin_ia32_cvtne2ps2bf16_v8bf_mask,
        __builtin_ia32_cvtne2ps2bf16_v8bf_maskz,
        __builtin_ia32_cvtneps2bf16_v8sf_mask,
        __builtin_ia32_cvtneps2bf16_v8sf_maskz,
        __builtin_ia32_cvtneps2bf16_v4sf_mask,
        __builtin_ia32_cvtneps2bf16_v4sf_maskz,
        __builtin_ia32_dpbf16ps_v8sf, __builtin_ia32_dpbf16ps_v8sf_mask,
        __builtin_ia32_dpbf16ps_v8sf_maskz, __builtin_ia32_dpbf16ps_v4sf,
        __builtin_ia32_dpbf16ps_v4sf_mask,
        __builtin_ia32_dpbf16ps_v4sf_maskz): Require also
        OPTION_MASK_ISA_AVX512VL.

        * gcc.target/i386/avx512bf16-pr108881.c: New test.

--- gcc/config/i386/i386-builtin.def.jj 2023-01-16 11:52:15.955735951 +0100
+++ gcc/config/i386/i386-builtin.def    2023-02-23 18:20:37.139676726 +0100
@@ -2814,30 +2814,30 @@ BDESC (0, OPTION_MASK_ISA2_VAES, CODE_FO
 BDESC (0, OPTION_MASK_ISA2_AVX512BF16, CODE_FOR_avx512f_cvtne2ps2bf16_v32bf, 
"__builtin_ia32_cvtne2ps2bf16_v32bf", IX86_BUILTIN_CVTNE2PS2BF16_V32BF, 
UNKNOWN, (int) V32BF_FTYPE_V16SF_V16SF)
 BDESC (0, OPTION_MASK_ISA2_AVX512BF16, 
CODE_FOR_avx512f_cvtne2ps2bf16_v32bf_mask, 
"__builtin_ia32_cvtne2ps2bf16_v32bf_mask", 
IX86_BUILTIN_CVTNE2PS2BF16_V32BF_MASK, UNKNOWN, (int) 
V32BF_FTYPE_V16SF_V16SF_V32BF_USI)
 BDESC (0, OPTION_MASK_ISA2_AVX512BF16, 
CODE_FOR_avx512f_cvtne2ps2bf16_v32bf_maskz, 
"__builtin_ia32_cvtne2ps2bf16_v32bf_maskz", 
IX86_BUILTIN_CVTNE2PS2BF16_V32BF_MASKZ, UNKNOWN, (int) 
V32BF_FTYPE_V16SF_V16SF_USI)
-BDESC (0, OPTION_MASK_ISA2_AVX512BF16, CODE_FOR_avx512f_cvtne2ps2bf16_v16bf, 
"__builtin_ia32_cvtne2ps2bf16_v16bf", IX86_BUILTIN_CVTNE2PS2BF16_V16BF, 
UNKNOWN, (int) V16BF_FTYPE_V8SF_V8SF)
-BDESC (0, OPTION_MASK_ISA2_AVX512BF16, 
CODE_FOR_avx512f_cvtne2ps2bf16_v16bf_mask, 
"__builtin_ia32_cvtne2ps2bf16_v16bf_mask", 
IX86_BUILTIN_CVTNE2PS2BF16_V16BF_MASK, UNKNOWN, (int) 
V16BF_FTYPE_V8SF_V8SF_V16BF_UHI)
-BDESC (0, OPTION_MASK_ISA2_AVX512BF16, 
CODE_FOR_avx512f_cvtne2ps2bf16_v16bf_maskz, 
"__builtin_ia32_cvtne2ps2bf16_v16bf_maskz", 
IX86_BUILTIN_CVTNE2PS2BF16_V16BF_MASKZ, UNKNOWN, (int) 
V16BF_FTYPE_V8SF_V8SF_UHI)
-BDESC (0, OPTION_MASK_ISA2_AVX512BF16, CODE_FOR_avx512f_cvtne2ps2bf16_v8bf, 
"__builtin_ia32_cvtne2ps2bf16_v8bf", IX86_BUILTIN_CVTNE2PS2BF16_V8BF, UNKNOWN, 
(int) V8BF_FTYPE_V4SF_V4SF)
-BDESC (0, OPTION_MASK_ISA2_AVX512BF16, 
CODE_FOR_avx512f_cvtne2ps2bf16_v8bf_mask, 
"__builtin_ia32_cvtne2ps2bf16_v8bf_mask", IX86_BUILTIN_CVTNE2PS2BF16_V8BF_MASK, 
UNKNOWN, (int) V8BF_FTYPE_V4SF_V4SF_V8BF_UQI)
-BDESC (0, OPTION_MASK_ISA2_AVX512BF16, 
CODE_FOR_avx512f_cvtne2ps2bf16_v8bf_maskz, 
"__builtin_ia32_cvtne2ps2bf16_v8bf_maskz", 
IX86_BUILTIN_CVTNE2PS2BF16_V8BF_MASKZ, UNKNOWN, (int) V8BF_FTYPE_V4SF_V4SF_UQI)
+BDESC (OPTION_MASK_ISA_AVX512VL, OPTION_MASK_ISA2_AVX512BF16, 
CODE_FOR_avx512f_cvtne2ps2bf16_v16bf, "__builtin_ia32_cvtne2ps2bf16_v16bf", 
IX86_BUILTIN_CVTNE2PS2BF16_V16BF, UNKNOWN, (int) V16BF_FTYPE_V8SF_V8SF)
+BDESC (OPTION_MASK_ISA_AVX512VL, OPTION_MASK_ISA2_AVX512BF16, 
CODE_FOR_avx512f_cvtne2ps2bf16_v16bf_mask, 
"__builtin_ia32_cvtne2ps2bf16_v16bf_mask", 
IX86_BUILTIN_CVTNE2PS2BF16_V16BF_MASK, UNKNOWN, (int) 
V16BF_FTYPE_V8SF_V8SF_V16BF_UHI)
+BDESC (OPTION_MASK_ISA_AVX512VL, OPTION_MASK_ISA2_AVX512BF16, 
CODE_FOR_avx512f_cvtne2ps2bf16_v16bf_maskz, 
"__builtin_ia32_cvtne2ps2bf16_v16bf_maskz", 
IX86_BUILTIN_CVTNE2PS2BF16_V16BF_MASKZ, UNKNOWN, (int) 
V16BF_FTYPE_V8SF_V8SF_UHI)
+BDESC (OPTION_MASK_ISA_AVX512VL, OPTION_MASK_ISA2_AVX512BF16, 
CODE_FOR_avx512f_cvtne2ps2bf16_v8bf, "__builtin_ia32_cvtne2ps2bf16_v8bf", 
IX86_BUILTIN_CVTNE2PS2BF16_V8BF, UNKNOWN, (int) V8BF_FTYPE_V4SF_V4SF)
+BDESC (OPTION_MASK_ISA_AVX512VL, OPTION_MASK_ISA2_AVX512BF16, 
CODE_FOR_avx512f_cvtne2ps2bf16_v8bf_mask, 
"__builtin_ia32_cvtne2ps2bf16_v8bf_mask", IX86_BUILTIN_CVTNE2PS2BF16_V8BF_MASK, 
UNKNOWN, (int) V8BF_FTYPE_V4SF_V4SF_V8BF_UQI)
+BDESC (OPTION_MASK_ISA_AVX512VL, OPTION_MASK_ISA2_AVX512BF16, 
CODE_FOR_avx512f_cvtne2ps2bf16_v8bf_maskz, 
"__builtin_ia32_cvtne2ps2bf16_v8bf_maskz", 
IX86_BUILTIN_CVTNE2PS2BF16_V8BF_MASKZ, UNKNOWN, (int) V8BF_FTYPE_V4SF_V4SF_UQI)
 BDESC (0, OPTION_MASK_ISA2_AVX512BF16, CODE_FOR_avx512f_cvtneps2bf16_v16sf, 
"__builtin_ia32_cvtneps2bf16_v16sf", IX86_BUILTIN_CVTNEPS2BF16_V16SF, UNKNOWN, 
(int) V16BF_FTYPE_V16SF)
 BDESC (0, OPTION_MASK_ISA2_AVX512BF16, 
CODE_FOR_avx512f_cvtneps2bf16_v16sf_mask, 
"__builtin_ia32_cvtneps2bf16_v16sf_mask", IX86_BUILTIN_CVTNEPS2BF16_V16SF_MASK, 
UNKNOWN, (int) V16BF_FTYPE_V16SF_V16BF_UHI)
 BDESC (0, OPTION_MASK_ISA2_AVX512BF16, 
CODE_FOR_avx512f_cvtneps2bf16_v16sf_maskz, 
"__builtin_ia32_cvtneps2bf16_v16sf_maskz", 
IX86_BUILTIN_CVTNE2PS2BF16_V16SF_MASKZ, UNKNOWN, (int) V16BF_FTYPE_V16SF_UHI)
 BDESC (OPTION_MASK_ISA_AVX512VL, OPTION_MASK_ISA2_AVXNECONVERT | 
OPTION_MASK_ISA2_AVX512BF16, CODE_FOR_vcvtneps2bf16_v8sf, 
"__builtin_ia32_cvtneps2bf16_v8sf", IX86_BUILTIN_CVTNEPS2BF16_V8SF, UNKNOWN, 
(int) V8BF_FTYPE_V8SF)
-BDESC (0, OPTION_MASK_ISA2_AVX512BF16, 
CODE_FOR_avx512f_cvtneps2bf16_v8sf_mask, 
"__builtin_ia32_cvtneps2bf16_v8sf_mask", IX86_BUILTIN_CVTNEPS2BF16_V8SF_MASK, 
UNKNOWN, (int) V8BF_FTYPE_V8SF_V8BF_UQI)
-BDESC (0, OPTION_MASK_ISA2_AVX512BF16, 
CODE_FOR_avx512f_cvtneps2bf16_v8sf_maskz, 
"__builtin_ia32_cvtneps2bf16_v8sf_maskz", 
IX86_BUILTIN_CVTNE2PS2BF16_V8SF_MASKZ, UNKNOWN, (int) V8BF_FTYPE_V8SF_UQI)
+BDESC (OPTION_MASK_ISA_AVX512VL, OPTION_MASK_ISA2_AVX512BF16, 
CODE_FOR_avx512f_cvtneps2bf16_v8sf_mask, 
"__builtin_ia32_cvtneps2bf16_v8sf_mask", IX86_BUILTIN_CVTNEPS2BF16_V8SF_MASK, 
UNKNOWN, (int) V8BF_FTYPE_V8SF_V8BF_UQI)
+BDESC (OPTION_MASK_ISA_AVX512VL, OPTION_MASK_ISA2_AVX512BF16, 
CODE_FOR_avx512f_cvtneps2bf16_v8sf_maskz, 
"__builtin_ia32_cvtneps2bf16_v8sf_maskz", 
IX86_BUILTIN_CVTNE2PS2BF16_V8SF_MASKZ, UNKNOWN, (int) V8BF_FTYPE_V8SF_UQI)
 BDESC (OPTION_MASK_ISA_AVX512VL, OPTION_MASK_ISA2_AVXNECONVERT | 
OPTION_MASK_ISA2_AVX512BF16, CODE_FOR_vcvtneps2bf16_v4sf, 
"__builtin_ia32_cvtneps2bf16_v4sf", IX86_BUILTIN_CVTNEPS2BF16_V4SF, UNKNOWN, 
(int) V8BF_FTYPE_V4SF)
-BDESC (0, OPTION_MASK_ISA2_AVX512BF16, 
CODE_FOR_avx512f_cvtneps2bf16_v4sf_mask, 
"__builtin_ia32_cvtneps2bf16_v4sf_mask", IX86_BUILTIN_CVTNEPS2BF16_V4SF_MASK, 
UNKNOWN, (int) V8BF_FTYPE_V4SF_V8BF_UQI)
-BDESC (0, OPTION_MASK_ISA2_AVX512BF16, 
CODE_FOR_avx512f_cvtneps2bf16_v4sf_maskz, 
"__builtin_ia32_cvtneps2bf16_v4sf_maskz", 
IX86_BUILTIN_CVTNE2PS2BF16_V4SF_MASKZ, UNKNOWN, (int) V8BF_FTYPE_V4SF_UQI)
+BDESC (OPTION_MASK_ISA_AVX512VL, OPTION_MASK_ISA2_AVX512BF16, 
CODE_FOR_avx512f_cvtneps2bf16_v4sf_mask, 
"__builtin_ia32_cvtneps2bf16_v4sf_mask", IX86_BUILTIN_CVTNEPS2BF16_V4SF_MASK, 
UNKNOWN, (int) V8BF_FTYPE_V4SF_V8BF_UQI)
+BDESC (OPTION_MASK_ISA_AVX512VL, OPTION_MASK_ISA2_AVX512BF16, 
CODE_FOR_avx512f_cvtneps2bf16_v4sf_maskz, 
"__builtin_ia32_cvtneps2bf16_v4sf_maskz", 
IX86_BUILTIN_CVTNE2PS2BF16_V4SF_MASKZ, UNKNOWN, (int) V8BF_FTYPE_V4SF_UQI)
 BDESC (0, OPTION_MASK_ISA2_AVX512BF16, CODE_FOR_avx512f_dpbf16ps_v16sf, 
"__builtin_ia32_dpbf16ps_v16sf", IX86_BUILTIN_DPBF16PS_V16SF, UNKNOWN, (int) 
V16SF_FTYPE_V16SF_V32BF_V32BF)
 BDESC (0, OPTION_MASK_ISA2_AVX512BF16, CODE_FOR_avx512f_dpbf16ps_v16sf_mask, 
"__builtin_ia32_dpbf16ps_v16sf_mask", IX86_BUILTIN_DPBF16PS_V16SF_MASK, 
UNKNOWN, (int) V16SF_FTYPE_V16SF_V32BF_V32BF_UHI)
 BDESC (0, OPTION_MASK_ISA2_AVX512BF16, CODE_FOR_avx512f_dpbf16ps_v16sf_maskz, 
"__builtin_ia32_dpbf16ps_v16sf_maskz", IX86_BUILTIN_DPBF16PS_V16SF_MASKZ, 
UNKNOWN, (int) V16SF_FTYPE_V16SF_V32BF_V32BF_UHI)
-BDESC (0, OPTION_MASK_ISA2_AVX512BF16, CODE_FOR_avx512f_dpbf16ps_v8sf, 
"__builtin_ia32_dpbf16ps_v8sf", IX86_BUILTIN_DPBF16PS_V8SF, UNKNOWN, (int) 
V8SF_FTYPE_V8SF_V16BF_V16BF)
-BDESC (0, OPTION_MASK_ISA2_AVX512BF16, CODE_FOR_avx512f_dpbf16ps_v8sf_mask, 
"__builtin_ia32_dpbf16ps_v8sf_mask", IX86_BUILTIN_DPBF16PS_V8SF_MASK, UNKNOWN, 
(int) V8SF_FTYPE_V8SF_V16BF_V16BF_UQI)
-BDESC (0, OPTION_MASK_ISA2_AVX512BF16, CODE_FOR_avx512f_dpbf16ps_v8sf_maskz, 
"__builtin_ia32_dpbf16ps_v8sf_maskz", IX86_BUILTIN_DPBF16PS_V8SF_MASKZ, 
UNKNOWN, (int) V8SF_FTYPE_V8SF_V16BF_V16BF_UQI)
-BDESC (0, OPTION_MASK_ISA2_AVX512BF16, CODE_FOR_avx512f_dpbf16ps_v4sf, 
"__builtin_ia32_dpbf16ps_v4sf", IX86_BUILTIN_DPBF16PS_V4SF, UNKNOWN, (int) 
V4SF_FTYPE_V4SF_V8BF_V8BF)
-BDESC (0, OPTION_MASK_ISA2_AVX512BF16, CODE_FOR_avx512f_dpbf16ps_v4sf_mask, 
"__builtin_ia32_dpbf16ps_v4sf_mask", IX86_BUILTIN_DPBF16PS_V4SF_MASK, UNKNOWN, 
(int) V4SF_FTYPE_V4SF_V8BF_V8BF_UQI)
-BDESC (0, OPTION_MASK_ISA2_AVX512BF16, CODE_FOR_avx512f_dpbf16ps_v4sf_maskz, 
"__builtin_ia32_dpbf16ps_v4sf_maskz", IX86_BUILTIN_DPBF16PS_V4SF_MASKZ, 
UNKNOWN, (int) V4SF_FTYPE_V4SF_V8BF_V8BF_UQI)
+BDESC (OPTION_MASK_ISA_AVX512VL, OPTION_MASK_ISA2_AVX512BF16, 
CODE_FOR_avx512f_dpbf16ps_v8sf, "__builtin_ia32_dpbf16ps_v8sf", 
IX86_BUILTIN_DPBF16PS_V8SF, UNKNOWN, (int) V8SF_FTYPE_V8SF_V16BF_V16BF)
+BDESC (OPTION_MASK_ISA_AVX512VL, OPTION_MASK_ISA2_AVX512BF16, 
CODE_FOR_avx512f_dpbf16ps_v8sf_mask, "__builtin_ia32_dpbf16ps_v8sf_mask", 
IX86_BUILTIN_DPBF16PS_V8SF_MASK, UNKNOWN, (int) V8SF_FTYPE_V8SF_V16BF_V16BF_UQI)
+BDESC (OPTION_MASK_ISA_AVX512VL, OPTION_MASK_ISA2_AVX512BF16, 
CODE_FOR_avx512f_dpbf16ps_v8sf_maskz, "__builtin_ia32_dpbf16ps_v8sf_maskz", 
IX86_BUILTIN_DPBF16PS_V8SF_MASKZ, UNKNOWN, (int) 
V8SF_FTYPE_V8SF_V16BF_V16BF_UQI)
+BDESC (OPTION_MASK_ISA_AVX512VL, OPTION_MASK_ISA2_AVX512BF16, 
CODE_FOR_avx512f_dpbf16ps_v4sf, "__builtin_ia32_dpbf16ps_v4sf", 
IX86_BUILTIN_DPBF16PS_V4SF, UNKNOWN, (int) V4SF_FTYPE_V4SF_V8BF_V8BF)
+BDESC (OPTION_MASK_ISA_AVX512VL, OPTION_MASK_ISA2_AVX512BF16, 
CODE_FOR_avx512f_dpbf16ps_v4sf_mask, "__builtin_ia32_dpbf16ps_v4sf_mask", 
IX86_BUILTIN_DPBF16PS_V4SF_MASK, UNKNOWN, (int) V4SF_FTYPE_V4SF_V8BF_V8BF_UQI)
+BDESC (OPTION_MASK_ISA_AVX512VL, OPTION_MASK_ISA2_AVX512BF16, 
CODE_FOR_avx512f_dpbf16ps_v4sf_maskz, "__builtin_ia32_dpbf16ps_v4sf_maskz", 
IX86_BUILTIN_DPBF16PS_V4SF_MASKZ, UNKNOWN, (int) V4SF_FTYPE_V4SF_V8BF_V8BF_UQI)
 BDESC (OPTION_MASK_ISA_SSE2, 0, CODE_FOR_extendbfsf2_1, 
"__builtin_ia32_cvtbf2sf", IX86_BUILTIN_CVTBF2SF, UNKNOWN, (int) 
FLOAT_FTYPE_BFLOAT16)
 
 
--- gcc/testsuite/gcc.target/i386/avx512bf16-pr108881.c.jj      2023-02-23 
18:26:12.505845206 +0100
+++ gcc/testsuite/gcc.target/i386/avx512bf16-pr108881.c 2023-02-23 
18:25:30.818445790 +0100
@@ -0,0 +1,14 @@
+/* PR target/108881 */
+/* { dg-do compile } */
+/* { dg-options "-mavx512bf16 -mno-avx512vl" } */
+
+typedef float __m256 __attribute__((__vector_size__(32)));
+typedef __bf16 __v16bf __attribute__((__vector_size__(32)));
+__v16bf a;
+__m256 b, c;
+
+void
+foo (void)
+{
+  a = __builtin_ia32_cvtne2ps2bf16_v16bf (b, c);       /* { dg-warning 
"implicit declaration of function" } */
+}                                                      /* { dg-error 
"incompatible types when assigning to type" "" { target *-*-* } .-1 } */

        Jakub

Reply via email to