]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
i386: Guard 128 bit VAES builtins with AVX512VL
authorHaochen Jiang <haochen.jiang@intel.com>
Fri, 7 Jul 2023 07:53:42 +0000 (15:53 +0800)
committerHaochen Jiang <haochen.jiang@intel.com>
Wed, 12 Jul 2023 05:08:42 +0000 (13:08 +0800)
Since commit 24a8acc, 128 bit intrin is enabled for VAES. However,
AVX512VL is not checked until we reached into pattern, which reports an
ICE.

Added an AVX512VL guard at builtin to report error when checking ISA
flags.

gcc/ChangeLog:

* config/i386/i386-builtins.cc (ix86_init_mmx_sse_builtins):
Add OPTION_MASK_ISA_AVX512VL.
* config/i386/i386-expand.cc (ix86_check_builtin_isa_match):
Ditto.

gcc/testsuite/ChangeLog:

* gcc.target/i386/avx512vl-vaes-1.c: New test.

gcc/config/i386/i386-builtins.cc
gcc/config/i386/i386-expand.cc
gcc/testsuite/gcc.target/i386/avx512vl-vaes-1.c [new file with mode: 0644]

index 28f404da288aae0f36a51628c1cf9a8c1a14cff7..e436ca4e5b154a13136003ac756e82b32c36a1b6 100644 (file)
@@ -662,19 +662,23 @@ ix86_init_mmx_sse_builtins (void)
               VOID_FTYPE_UNSIGNED_UNSIGNED, IX86_BUILTIN_MWAIT);
 
   /* AES */
-  def_builtin_const (OPTION_MASK_ISA_AES | OPTION_MASK_ISA_SSE2,
+  def_builtin_const (OPTION_MASK_ISA_AES | OPTION_MASK_ISA_SSE2
+                    | OPTION_MASK_ISA_AVX512VL,
                     OPTION_MASK_ISA2_VAES,
                     "__builtin_ia32_aesenc128",
                     V2DI_FTYPE_V2DI_V2DI, IX86_BUILTIN_AESENC128);
-  def_builtin_const (OPTION_MASK_ISA_AES | OPTION_MASK_ISA_SSE2,
+  def_builtin_const (OPTION_MASK_ISA_AES | OPTION_MASK_ISA_SSE2
+                    | OPTION_MASK_ISA_AVX512VL,
                     OPTION_MASK_ISA2_VAES,
                     "__builtin_ia32_aesenclast128",
                     V2DI_FTYPE_V2DI_V2DI, IX86_BUILTIN_AESENCLAST128);
-  def_builtin_const (OPTION_MASK_ISA_AES | OPTION_MASK_ISA_SSE2,
+  def_builtin_const (OPTION_MASK_ISA_AES | OPTION_MASK_ISA_SSE2
+                    | OPTION_MASK_ISA_AVX512VL,
                     OPTION_MASK_ISA2_VAES,
                     "__builtin_ia32_aesdec128",
                     V2DI_FTYPE_V2DI_V2DI, IX86_BUILTIN_AESDEC128);
-  def_builtin_const (OPTION_MASK_ISA_AES | OPTION_MASK_ISA_SSE2,
+  def_builtin_const (OPTION_MASK_ISA_AES | OPTION_MASK_ISA_SSE2
+                    | OPTION_MASK_ISA_AVX512VL,
                     OPTION_MASK_ISA2_VAES,
                     "__builtin_ia32_aesdeclast128",
                     V2DI_FTYPE_V2DI_V2DI, IX86_BUILTIN_AESDECLAST128);
index 92ffa4b676a5c92cbf7e4a3de70dc86313dd1f58..fd5d103d2d5112328032a3cd0d77b3f86efe5a87 100644 (file)
@@ -12654,6 +12654,7 @@ ix86_check_builtin_isa_match (unsigned int fcode,
        OPTION_MASK_ISA2_AVXIFMA
      (OPTION_MASK_ISA_AVX512VL | OPTION_MASK_ISA2_AVX512BF16) or
        OPTION_MASK_ISA2_AVXNECONVERT
+     OPTION_MASK_ISA_AES or (OPTION_MASK_ISA_AVX512VL | OPTION_MASK_ISA2_VAES)
      where for each such pair it is sufficient if either of the ISAs is
      enabled, plus if it is ored with other options also those others.
      OPTION_MASK_ISA_MMX in bisa is satisfied also if TARGET_MMX_WITH_SSE.  */
@@ -12677,7 +12678,8 @@ ix86_check_builtin_isa_match (unsigned int fcode,
                 OPTION_MASK_ISA2_AVXIFMA);
   SHARE_BUILTIN (OPTION_MASK_ISA_AVX512VL, OPTION_MASK_ISA2_AVX512BF16, 0,
                 OPTION_MASK_ISA2_AVXNECONVERT);
-  SHARE_BUILTIN (OPTION_MASK_ISA_AES, 0, 0, OPTION_MASK_ISA2_VAES);
+  SHARE_BUILTIN (OPTION_MASK_ISA_AES, 0, OPTION_MASK_ISA_AVX512VL,
+                OPTION_MASK_ISA2_VAES);
   isa = tmp_isa;
   isa2 = tmp_isa2;
 
diff --git a/gcc/testsuite/gcc.target/i386/avx512vl-vaes-1.c b/gcc/testsuite/gcc.target/i386/avx512vl-vaes-1.c
new file mode 100644 (file)
index 0000000..fabb170
--- /dev/null
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+/* { dg-options "-mvaes -mno-avx512vl -mno-aes" } */
+
+#include <immintrin.h>
+
+typedef long long v2di __attribute__((vector_size (16)));
+
+v2di
+f1 (v2di x, v2di y)
+{
+  return __builtin_ia32_aesenc128 (x, y); /* { dg-error "needs isa option" } */
+}