On Wed, Nov 6, 2024 at 10:35 AM Hu, Lin1 <lin1...@intel.com> wrote:
>
> Hi, all
>
> This patch aims to add OPTION_MASK_ISA2_EVEX512 for all avx512 512-bits
> builtin functions, raise error when these builtin functions are used with
> -mno-evex512.
>
> Bootstrapped and Regtested on x86-64-pc-linux-gnu, OK for trunk and backport 
> to
> GCC14?
>
> BRs,
> Lin
>
> gcc/ChangeLog:
>
>         PR target/117304
>         * config/i386/i386-builtin.def: Add OPTION_MASK_ISA2_EVEX512 for some
>         AVX512 512-bits instructions.
>
> gcc/testsuite/ChangeLog:
>
>         PR target/117304
>         * gcc.target/i386/pr117304-1.c: New test.
> ---
>  gcc/config/i386/i386-builtin.def           | 10 ++++----
>  gcc/testsuite/gcc.target/i386/pr117304-1.c | 28 ++++++++++++++++++++++
>  2 files changed, 33 insertions(+), 5 deletions(-)
>  create mode 100644 gcc/testsuite/gcc.target/i386/pr117304-1.c
>
> diff --git a/gcc/config/i386/i386-builtin.def 
> b/gcc/config/i386/i386-builtin.def
> index c484e6dc29e..26c23780b1c 100644
> --- a/gcc/config/i386/i386-builtin.def
> +++ b/gcc/config/i386/i386-builtin.def
> @@ -3357,11 +3357,11 @@ BDESC (OPTION_MASK_ISA_AVX512F, 0, 
> CODE_FOR_sse_cvtsi2ss_round, "__builtin_ia32_
>  BDESC (OPTION_MASK_ISA_AVX512F | OPTION_MASK_ISA_64BIT, 0, 
> CODE_FOR_sse_cvtsi2ssq_round, "__builtin_ia32_cvtsi2ss64", 
> IX86_BUILTIN_CVTSI2SS64, UNKNOWN, (int) V4SF_FTYPE_V4SF_INT64_INT)
>  BDESC (OPTION_MASK_ISA_AVX512F, 0, CODE_FOR_sse2_cvtss2sd_round, 
> "__builtin_ia32_cvtss2sd_round", IX86_BUILTIN_CVTSS2SD_ROUND, UNKNOWN, (int) 
> V2DF_FTYPE_V2DF_V4SF_INT)
>  BDESC (OPTION_MASK_ISA_AVX512F, 0, CODE_FOR_sse2_cvtss2sd_mask_round, 
> "__builtin_ia32_cvtss2sd_mask_round", IX86_BUILTIN_CVTSS2SD_MASK_ROUND, 
> UNKNOWN, (int) V2DF_FTYPE_V2DF_V4SF_V2DF_UQI_INT)
> -BDESC (OPTION_MASK_ISA_AVX512F, 0, 
> CODE_FOR_unspec_fix_truncv8dfv8si2_mask_round, 
> "__builtin_ia32_cvttpd2dq512_mask", IX86_BUILTIN_CVTTPD2DQ512, UNKNOWN, (int) 
> V8SI_FTYPE_V8DF_V8SI_QI_INT)
> -BDESC (OPTION_MASK_ISA_AVX512F, 0, 
> CODE_FOR_unspec_fixuns_truncv8dfv8si2_mask_round, 
> "__builtin_ia32_cvttpd2udq512_mask", IX86_BUILTIN_CVTTPD2UDQ512, UNKNOWN, 
> (int) V8SI_FTYPE_V8DF_V8SI_QI_INT)
> -BDESC (OPTION_MASK_ISA_AVX512F, 0, 
> CODE_FOR_unspec_fix_truncv16sfv16si2_mask_round, 
> "__builtin_ia32_cvttps2dq512_mask", IX86_BUILTIN_CVTTPS2DQ512, UNKNOWN, (int) 
> V16SI_FTYPE_V16SF_V16SI_HI_INT)
> -BDESC (OPTION_MASK_ISA_AVX512F, 0, 
> CODE_FOR_unspec_fixuns_truncv16sfv16si2_mask_round, 
> "__builtin_ia32_cvttps2udq512_mask", IX86_BUILTIN_CVTTPS2UDQ512, UNKNOWN, 
> (int) V16SI_FTYPE_V16SF_V16SI_HI_INT)
> -BDESC (OPTION_MASK_ISA_AVX512F, 0, CODE_FOR_floatunsv16siv16sf2_mask_round, 
> "__builtin_ia32_cvtudq2ps512_mask", IX86_BUILTIN_CVTUDQ2PS512, UNKNOWN, (int) 
> V16SF_FTYPE_V16SI_V16SF_HI_INT)
> +BDESC (OPTION_MASK_ISA_AVX512F, OPTION_MASK_ISA2_EVEX512, 
> CODE_FOR_unspec_fix_truncv8dfv8si2_mask_round, 
> "__builtin_ia32_cvttpd2dq512_mask", IX86_BUILTIN_CVTTPD2DQ512, UNKNOWN, (int) 
> V8SI_FTYPE_V8DF_V8SI_QI_INT)
> +BDESC (OPTION_MASK_ISA_AVX512F, OPTION_MASK_ISA2_EVEX512, 
> CODE_FOR_unspec_fixuns_truncv8dfv8si2_mask_round, 
> "__builtin_ia32_cvttpd2udq512_mask", IX86_BUILTIN_CVTTPD2UDQ512, UNKNOWN, 
> (int) V8SI_FTYPE_V8DF_V8SI_QI_INT)
> +BDESC (OPTION_MASK_ISA_AVX512F, OPTION_MASK_ISA2_EVEX512, 
> CODE_FOR_unspec_fix_truncv16sfv16si2_mask_round, 
> "__builtin_ia32_cvttps2dq512_mask", IX86_BUILTIN_CVTTPS2DQ512, UNKNOWN, (int) 
> V16SI_FTYPE_V16SF_V16SI_HI_INT)
> +BDESC (OPTION_MASK_ISA_AVX512F, OPTION_MASK_ISA2_EVEX512, 
> CODE_FOR_unspec_fixuns_truncv16sfv16si2_mask_round, 
> "__builtin_ia32_cvttps2udq512_mask", IX86_BUILTIN_CVTTPS2UDQ512, UNKNOWN, 
> (int) V16SI_FTYPE_V16SF_V16SI_HI_INT)
> +BDESC (OPTION_MASK_ISA_AVX512F, OPTION_MASK_ISA2_EVEX512, 
> CODE_FOR_floatunsv16siv16sf2_mask_round, "__builtin_ia32_cvtudq2ps512_mask", 
> IX86_BUILTIN_CVTUDQ2PS512, UNKNOWN, (int) V16SF_FTYPE_V16SI_V16SF_HI_INT)
>  BDESC (OPTION_MASK_ISA_AVX512F | OPTION_MASK_ISA_64BIT, 0, 
> CODE_FOR_cvtusi2sd64_round, "__builtin_ia32_cvtusi2sd64", 
> IX86_BUILTIN_CVTUSI2SD64, UNKNOWN, (int) V2DF_FTYPE_V2DF_UINT64_INT)
>  BDESC (OPTION_MASK_ISA_AVX512F, 0, CODE_FOR_cvtusi2ss32_round, 
> "__builtin_ia32_cvtusi2ss32", IX86_BUILTIN_CVTUSI2SS32, UNKNOWN, (int) 
> V4SF_FTYPE_V4SF_UINT_INT)
>  BDESC (OPTION_MASK_ISA_AVX512F | OPTION_MASK_ISA_64BIT, 0, 
> CODE_FOR_cvtusi2ss64_round, "__builtin_ia32_cvtusi2ss64", 
> IX86_BUILTIN_CVTUSI2SS64, UNKNOWN, (int) V4SF_FTYPE_V4SF_UINT64_INT)
> diff --git a/gcc/testsuite/gcc.target/i386/pr117304-1.c 
> b/gcc/testsuite/gcc.target/i386/pr117304-1.c
> new file mode 100644
> index 00000000000..68419338524
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/i386/pr117304-1.c
> @@ -0,0 +1,28 @@
> +/* PR target/117304 */
> +/* { dg-do compile } */
> +/* { dg-options "-O2 -mavx10.1 -mno-evex512" } */
Please use -mavx512f -mno-evex512 to avoid warning when gcc is
configured --with-arch=native on avx512 machine.
Otherwise LGTM.
> +
> +typedef __attribute__((__vector_size__(32))) int __v8si;
> +typedef __attribute__((__vector_size__(32))) unsigned int __v8su;
> +typedef __attribute__((__vector_size__(64))) double __v8df;
> +typedef __attribute__((__vector_size__(64))) int __v16si;
> +typedef __attribute__((__vector_size__(64))) unsigned int __v16su;
> +typedef __attribute__((__vector_size__(64))) float __v16sf;
> +typedef float __m512 __attribute__ ((__vector_size__ (64), __may_alias__));
> +
> +volatile __v8df df;
> +volatile __v16sf sf;
> +volatile __v8si hi;
> +volatile __v8su hui;
> +volatile __v16si i;
> +volatile __v16su ui;
> +
> +void
> +foo()
> +{
> +  hi ^= __builtin_ia32_cvttpd2dq512_mask(df, hi, 0, 4); /* { dg-error 
> "implicit declaration of function '__builtin_ia32_cvttpd2dq512_mask'; did you 
> mean '__builtin_ia32_cvttpd2dq128_mask'?" } */
> +  hui ^= __builtin_ia32_cvttpd2udq512_mask(df, hui, 0, 4); /* { dg-error 
> "implicit declaration of function '__builtin_ia32_cvttpd2udq512_mask'; did 
> you mean '__builtin_ia32_cvttpd2udq128_mask'?" } */
> +  ui ^= __builtin_ia32_cvttps2dq512_mask(sf, ui, 0, 4); /* { dg-error 
> "implicit declaration of function '__builtin_ia32_cvttps2dq512_mask'; did you 
> mean '__builtin_ia32_cvttps2dq128_mask'?" } */
> +  ui ^= __builtin_ia32_cvttps2udq512_mask(sf, ui, 0, 4); /* { dg-error 
> "implicit declaration of function '__builtin_ia32_cvttps2udq512_mask'; did 
> you mean '__builtin_ia32_cvttps2udq128_mask'?" } */
> +  __builtin_ia32_cvtudq2ps512_mask(ui, sf, 0, 4); /* { dg-error "implicit 
> declaration of function '__builtin_ia32_cvtudq2ps512_mask'; did you mean 
> '__builtin_ia32_cvtudq2ps128_mask'?" } */
> +}
> --
> 2.31.1
>


-- 
BR,
Hongtao

Reply via email to