---
gcc/ChangeLog:

        * common/config/i386/i386-common.cc (OPTION_MASK_ISA2_AMX_TILE_SET):
        (OPTION_MASK_ISA2_TILE_SET):
        (OPTION_MASK_ISA2_TILE_UNSET):
        (ix86_handle_option):
        * common/config/i386/i386-cpuinfo.h (enum processor_features):
        * common/config/i386/i386-isas.h:
        * config.gcc:
        * config/i386/amxtileintrin.h (__attribute__):
        (_tile_loadconfig):
        (_tile_storeconfig):
        (_tile_release):
        (_tile_zero):
        (_tile_zero_internal):
        * config/i386/i386-builtin.def (BDESC):
        * config/i386/i386-c.cc (ix86_target_macros_internal):
        * config/i386/i386-isa.def (TILE):
        * config/i386/i386-options.cc (ix86_valid_target_attribute_inner_p):
        * config/i386/i386.md:
        * config/i386/i386.opt:
        * config/i386/immintrin.h:
        * config/i386/tileintrin.h: New file.

gcc/testsuite/ChangeLog:

        * g++.dg/other/i386-2.C:
        * g++.dg/other/i386-3.C:
        * gcc.target/i386/funcspec-56.inc:
        * gcc.target/i386/tile-asmatt-1.c: New test.
        * gcc.target/i386/tile-asmintel-1.c: New test.
        * gcc.target/i386/tile-define-1.c: New test.
        * gcc.target/i386/tile-define-2.c: New test.

 gcc/common/config/i386/i386-common.cc         | 21 +++++-
 gcc/common/config/i386/i386-cpuinfo.h         |  1 +
 gcc/common/config/i386/i386-isas.h            |  1 +
 gcc/config.gcc                                |  2 +-
 gcc/config/i386/amxtileintrin.h               | 28 --------
 gcc/config/i386/i386-builtin.def              |  6 +-
 gcc/config/i386/i386-c.cc                     |  2 +
 gcc/config/i386/i386-isa.def                  |  1 +
 gcc/config/i386/i386-options.cc               |  4 +-
 gcc/config/i386/i386.md                       |  4 +-
 gcc/config/i386/i386.opt                      |  4 ++
 gcc/config/i386/immintrin.h                   |  2 +
 gcc/config/i386/tileintrin.h                  | 69 +++++++++++++++++++
 gcc/testsuite/g++.dg/other/i386-2.C           |  2 +-
 gcc/testsuite/g++.dg/other/i386-3.C           |  2 +-
 gcc/testsuite/gcc.target/i386/funcspec-56.inc |  2 +
 gcc/testsuite/gcc.target/i386/tile-asmatt-1.c | 19 +++++
 .../gcc.target/i386/tile-asmintel-1.c         | 18 +++++
 gcc/testsuite/gcc.target/i386/tile-define-1.c | 13 ++++
 gcc/testsuite/gcc.target/i386/tile-define-2.c | 13 ++++
 20 files changed, 175 insertions(+), 39 deletions(-)
 create mode 100644 gcc/config/i386/tileintrin.h
 create mode 100644 gcc/testsuite/gcc.target/i386/tile-asmatt-1.c
 create mode 100644 gcc/testsuite/gcc.target/i386/tile-asmintel-1.c
 create mode 100644 gcc/testsuite/gcc.target/i386/tile-define-1.c
 create mode 100644 gcc/testsuite/gcc.target/i386/tile-define-2.c

diff --git a/gcc/common/config/i386/i386-common.cc 
b/gcc/common/config/i386/i386-common.cc
index a57f7887b58..4a306827715 100644
--- a/gcc/common/config/i386/i386-common.cc
+++ b/gcc/common/config/i386/i386-common.cc
@@ -98,7 +98,8 @@ along with GCC; see the file COPYING3.  If not see
   (OPTION_MASK_ISA_XSAVEC | OPTION_MASK_ISA_XSAVE_SET)
 #define OPTION_MASK_ISA_CLWB_SET OPTION_MASK_ISA_CLWB
 #define OPTION_MASK_ISA2_AVX512VP2INTERSECT_SET 
OPTION_MASK_ISA2_AVX512VP2INTERSECT
-#define OPTION_MASK_ISA2_AMX_TILE_SET OPTION_MASK_ISA2_AMX_TILE
+#define OPTION_MASK_ISA2_AMX_TILE_SET \
+  (OPTION_MASK_ISA2_TILE_SET | OPTION_MASK_ISA2_AMX_TILE)
 #define OPTION_MASK_ISA2_AMX_INT8_SET \
   (OPTION_MASK_ISA2_AMX_TILE_SET | OPTION_MASK_ISA2_AMX_INT8)
 #define OPTION_MASK_ISA2_AMX_BF16_SET \
@@ -142,6 +143,8 @@ along with GCC; see the file COPYING3.  If not see
 #define OPTION_MASK_ISA2_AVX512BMM_SET OPTION_MASK_ISA2_AVX512BMM
 #define OPTION_MASK_ISA2_AVX10_V2_AUX_SET \
   (OPTION_MASK_ISA2_AVX10_1_SET | OPTION_MASK_ISA2_AVX10_V2_AUX)
+#define OPTION_MASK_ISA2_TILE_SET OPTION_MASK_ISA2_TILE
+
 /* SSE4 includes both SSE4.1 and SSE4.2. -msse4 should be the same
    as -msse4.2.  */
 #define OPTION_MASK_ISA_SSE4_SET OPTION_MASK_ISA_SSE4_2_SET
@@ -336,7 +339,8 @@ along with GCC; see the file COPYING3.  If not see
 #define OPTION_MASK_ISA2_AMX_MOVRS_UNSET OPTION_MASK_ISA2_AMX_MOVRS
 #define OPTION_MASK_ISA2_AVX512BMM_UNSET OPTION_MASK_ISA2_AVX512BMM
 #define OPTION_MASK_ISA2_AVX10_V2_AUX_UNSET OPTION_MASK_ISA2_AVX10_V2_AUX
-
+#define OPTION_MASK_ISA2_TILE_UNSET \
+  (OPTION_MASK_ISA2_TILE | OPTION_MASK_ISA2_AMX_TILE_UNSET)
 /* SSE4 includes both SSE4.1 and SSE4.2.  -mno-sse4 should the same
    as -mno-sse4.1. */
 #define OPTION_MASK_ISA_SSE4_UNSET OPTION_MASK_ISA_SSE4_1_UNSET
@@ -998,6 +1002,19 @@ ix86_handle_option (struct gcc_options *opts,
        }
       return true;
 
+    case OPT_mtile:
+      if (value)
+       {
+         opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_TILE_SET;
+         opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_TILE_SET;
+       }
+      else
+       {
+         opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_TILE_UNSET;
+         opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_TILE_UNSET;
+       }
+      return true;
+
     case OPT_msgx:
       if (value)
        {
diff --git a/gcc/common/config/i386/i386-cpuinfo.h 
b/gcc/common/config/i386/i386-cpuinfo.h
index 9291e3187d5..20444fae38b 100644
--- a/gcc/common/config/i386/i386-cpuinfo.h
+++ b/gcc/common/config/i386/i386-cpuinfo.h
@@ -285,6 +285,7 @@ enum processor_features
   FEATURE_AMX_MOVRS,
   FEATURE_AVX512BMM,
   FEATURE_AVX10_V2_AUX,
+  FEATURE_TILE,
   CPU_FEATURE_MAX
 };
 
diff --git a/gcc/common/config/i386/i386-isas.h 
b/gcc/common/config/i386/i386-isas.h
index 5959a3a17df..ec3e9273a47 100644
--- a/gcc/common/config/i386/i386-isas.h
+++ b/gcc/common/config/i386/i386-isas.h
@@ -194,4 +194,5 @@ ISA_NAMES_TABLE_START
   ISA_NAMES_TABLE_ENTRY("avx512bmm", FEATURE_AVX512BMM, P_NONE, "-mavx512bmm")
   ISA_NAMES_TABLE_ENTRY("avx10-v2-aux", FEATURE_AVX10_V2_AUX, P_NONE,
          "-mavx10-v2-aux")
+  ISA_NAMES_TABLE_ENTRY("tile", FEATURE_TILE, P_NONE, "-mtile")
 ISA_NAMES_TABLE_END
diff --git a/gcc/config.gcc b/gcc/config.gcc
index c21e263fc2f..8fc0b37c0f9 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -472,7 +472,7 @@ i[34567]86-*-* | x86_64-*-*)
                       avx10_2minmaxintrin.h avx10_2copyintrin.h
                       amxavx512intrin.h amxtf32intrin.h amxfp8intrin.h
                       movrsintrin.h amxmovrsintrin.h avx512bmmintrin.h
-                      avx512bmmvlintrin.h avx10_v2_auxintrin.h"
+                      avx512bmmvlintrin.h avx10_v2_auxintrin.h tileintrin.h"
        ;;
 ia64-*-*)
        extra_headers=ia64intrin.h
diff --git a/gcc/config/i386/amxtileintrin.h b/gcc/config/i386/amxtileintrin.h
index 7dd32c5bfc0..c120ef1d926 100644
--- a/gcc/config/i386/amxtileintrin.h
+++ b/gcc/config/i386/amxtileintrin.h
@@ -35,27 +35,6 @@
 #endif /* __AMX_TILE__ */
 
 #if defined(__x86_64__)
-extern __inline void
-__attribute__((__gnu_inline__, __always_inline__, __artificial__))
-_tile_loadconfig (const void *__config)
-{
-  __builtin_ia32_ldtilecfg (__config);
-}
-
-extern __inline void
-__attribute__((__gnu_inline__, __always_inline__, __artificial__))
-_tile_storeconfig (void *__config)
-{
-  __builtin_ia32_sttilecfg (__config);
-}
-
-extern __inline void
-__attribute__((__gnu_inline__, __always_inline__, __artificial__))
-_tile_release (void)
-{
-  __asm__ volatile ("tilerelease" ::);
-}
-
 #define _tile_loadd(dst,base,stride)           \
   _tile_loadd_internal (dst, base, stride)
 
@@ -81,13 +60,6 @@ _tile_release (void)
   :: "r" ((void*) (base)), "r" ((__PTRDIFF_TYPE__) (stride)), [_src]"i"(src) \
   : "memory")
 
-#define _tile_zero(dst)                                \
-  _tile_zero_internal (dst)
-
-#define _tile_zero_internal(dst)                                       \
-  __asm__ volatile                                                     \
-  ("{tilezero\t%%tmm%c[_dst]|tilezero\ttmm%c[_dst]}" :: [_dst]"i"(dst))
-
 #endif
 
 #ifdef __DISABLE_AMX_TILE__
diff --git a/gcc/config/i386/i386-builtin.def b/gcc/config/i386/i386-builtin.def
index 85895f19703..d486bd9f09a 100644
--- a/gcc/config/i386/i386-builtin.def
+++ b/gcc/config/i386/i386-builtin.def
@@ -126,9 +126,9 @@ BDESC (OPTION_MASK_ISA_XSAVES | OPTION_MASK_ISA_64BIT, 0, 
CODE_FOR_nothing, "__b
 BDESC (OPTION_MASK_ISA_XSAVES | OPTION_MASK_ISA_64BIT, 0, CODE_FOR_nothing, 
"__builtin_ia32_xrstors64", IX86_BUILTIN_XRSTORS64, UNKNOWN, (int) 
VOID_FTYPE_PVOID_INT64)
 BDESC (OPTION_MASK_ISA_XSAVEC | OPTION_MASK_ISA_64BIT, 0, CODE_FOR_nothing, 
"__builtin_ia32_xsavec64", IX86_BUILTIN_XSAVEC64, UNKNOWN, (int) 
VOID_FTYPE_PVOID_INT64)
 
-/* LDFILECFG and STFILECFG.  */
-BDESC (OPTION_MASK_ISA_64BIT, OPTION_MASK_ISA2_AMX_TILE, CODE_FOR_nothing, 
"__builtin_ia32_ldtilecfg", IX86_BUILTIN_LDTILECFG, UNKNOWN, (int) 
VOID_FTYPE_PCVOID)
-BDESC (OPTION_MASK_ISA_64BIT, OPTION_MASK_ISA2_AMX_TILE, CODE_FOR_nothing, 
"__builtin_ia32_sttilecfg", IX86_BUILTIN_STTILECFG, UNKNOWN, (int) 
VOID_FTYPE_PVOID)
+/* LDTILECFG and STTILECFG.  */
+BDESC (OPTION_MASK_ISA_64BIT, OPTION_MASK_ISA2_TILE, CODE_FOR_nothing, 
"__builtin_ia32_ldtilecfg", IX86_BUILTIN_LDTILECFG, UNKNOWN, (int) 
VOID_FTYPE_PCVOID)
+BDESC (OPTION_MASK_ISA_64BIT, OPTION_MASK_ISA2_TILE, CODE_FOR_nothing, 
"__builtin_ia32_sttilecfg", IX86_BUILTIN_STTILECFG, UNKNOWN, (int) 
VOID_FTYPE_PVOID)
 
 /* SSE */
 BDESC (OPTION_MASK_ISA_SSE, 0, CODE_FOR_movv4sf_internal, 
"__builtin_ia32_storeups", IX86_BUILTIN_STOREUPS, UNKNOWN, (int) 
VOID_FTYPE_PFLOAT_V4SF)
diff --git a/gcc/config/i386/i386-c.cc b/gcc/config/i386/i386-c.cc
index d8688f43563..7f2e2f58109 100644
--- a/gcc/config/i386/i386-c.cc
+++ b/gcc/config/i386/i386-c.cc
@@ -794,6 +794,8 @@ ix86_target_macros_internal (HOST_WIDE_INT isa_flag,
     def_or_undef (parse_in, "__AVX512BMM__");
   if (isa_flag2 & OPTION_MASK_ISA2_AVX10_V2_AUX)
     def_or_undef (parse_in, "__AVX10_V2_AUX__");
+  if (isa_flag2 & OPTION_MASK_ISA2_TILE)
+    def_or_undef (parse_in, "__TILE__");
   if (TARGET_IAMCU)
     {
       def_or_undef (parse_in, "__iamcu");
diff --git a/gcc/config/i386/i386-isa.def b/gcc/config/i386/i386-isa.def
index cd2a436295e..58800e1dc4f 100644
--- a/gcc/config/i386/i386-isa.def
+++ b/gcc/config/i386/i386-isa.def
@@ -127,3 +127,4 @@ DEF_PTA(MOVRS)
 DEF_PTA(AMX_MOVRS)
 DEF_PTA(AVX512BMM)
 DEF_PTA(AVX10_V2_AUX)
+DEF_PTA(TILE)
diff --git a/gcc/config/i386/i386-options.cc b/gcc/config/i386/i386-options.cc
index f780c3202ee..84f8cc683fe 100644
--- a/gcc/config/i386/i386-options.cc
+++ b/gcc/config/i386/i386-options.cc
@@ -276,7 +276,8 @@ static struct ix86_target_opts isa2_opts[] =
   { "-mmovrs",         OPTION_MASK_ISA2_MOVRS },
   { "-mamx-movrs",     OPTION_MASK_ISA2_AMX_MOVRS },
   { "-mavx512bmm",     OPTION_MASK_ISA2_AVX512BMM },
-  { "-mavx10-v2-aux",  OPTION_MASK_ISA2_AVX10_V2_AUX }
+  { "-mavx10-v2-aux",  OPTION_MASK_ISA2_AVX10_V2_AUX },
+  { "-mtile",  OPTION_MASK_ISA2_TILE }
 };
 static struct ix86_target_opts isa_opts[] =
 {
@@ -1143,6 +1144,7 @@ ix86_valid_target_attribute_inner_p (tree fndecl, tree 
args, char *p_strings[],
     IX86_ATTR_ISA ("amx-movrs", OPT_mamx_movrs),
     IX86_ATTR_ISA ("avx512bmm", OPT_mavx512bmm),
     IX86_ATTR_ISA ("avx10-v2-aux", OPT_mavx10_v2_aux),
+    IX86_ATTR_ISA ("tile", OPT_mtile),
 
     /* enum options */
     IX86_ATTR_ENUM ("fpmath=", OPT_mfpmath_),
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index 912fc1af018..4ba4688014f 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -31411,7 +31411,7 @@
 (define_insn "ldtilecfg"
   [(unspec_volatile [(match_operand:BLK 0 "memory_operand" "m")]
             UNSPECV_LDTILECFG)]
-  "TARGET_AMX_TILE"
+  "TARGET_TILE"
   "ldtilecfg\t%0"
   [(set_attr "type" "other")
    (set_attr "prefix" "maybe_evex")
@@ -31420,7 +31420,7 @@
 (define_insn "sttilecfg"
   [(set (match_operand:BLK 0 "memory_operand" "=m")
         (unspec_volatile:BLK [(const_int 0)] UNSPECV_STTILECFG))]
-  "TARGET_AMX_TILE"
+  "TARGET_TILE"
   "sttilecfg\t%0"
   [(set_attr "type" "other")
    (set_attr "prefix" "maybe_evex")
diff --git a/gcc/config/i386/i386.opt b/gcc/config/i386/i386.opt
index 6f6fc081448..db45ed64c61 100644
--- a/gcc/config/i386/i386.opt
+++ b/gcc/config/i386/i386.opt
@@ -1393,3 +1393,7 @@ Support AVX512BMM built-in functions and code generation.
 mavx10-v2-aux
 Target Mask(ISA2_AVX10_V2_AUX) Var(ix86_isa_flags2) Save
 Support AVX10_V2_AUX built-in functions and code generation.
+
+mtile
+Target Mask(ISA2_TILE) Var(ix86_isa_flags2) Save
+Support TILE built-in functions and code generation.
diff --git a/gcc/config/i386/immintrin.h b/gcc/config/i386/immintrin.h
index 9811f7a0bae..18afee336e7 100644
--- a/gcc/config/i386/immintrin.h
+++ b/gcc/config/i386/immintrin.h
@@ -124,6 +124,8 @@
 
 #include <avxneconvertintrin.h>
 
+#include <tileintrin.h>
+
 #include <amxtileintrin.h>
 
 #include <amxint8intrin.h>
diff --git a/gcc/config/i386/tileintrin.h b/gcc/config/i386/tileintrin.h
new file mode 100644
index 00000000000..9c0e1d93ce4
--- /dev/null
+++ b/gcc/config/i386/tileintrin.h
@@ -0,0 +1,69 @@
+/* Copyright (C) 2020-2026 Free Software Foundation, Inc.
+This file is part of GCC.
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+#if !defined _IMMINTRIN_H_INCLUDED
+#error "Never use <tileintrin.h> directly; include <immintrin.h> instead."
+#endif
+
+#ifndef _TILEINTRIN_H_INCLUDED
+#define _TILEINTRIN_H_INCLUDED
+
+#if !defined(__TILE__)
+#pragma GCC push_options
+#pragma GCC target("tile")
+#define __DISABLE_TILE__
+#endif /* __TILE__ */
+
+#if defined(__x86_64__)
+
+extern __inline void
+__attribute__((__gnu_inline__, __always_inline__, __artificial__))
+_tile_loadconfig (const void *__config)
+{
+  __builtin_ia32_ldtilecfg (__config);
+}
+
+extern __inline void
+__attribute__((__gnu_inline__, __always_inline__, __artificial__))
+_tile_storeconfig (void *__config)
+{
+  __builtin_ia32_sttilecfg (__config);
+}
+
+extern __inline void
+__attribute__((__gnu_inline__, __always_inline__, __artificial__))
+_tile_release (void)
+{
+  __asm__ volatile ("tilerelease" ::);
+}
+
+#define _tile_zero(dst)                                \
+  _tile_zero_internal (dst)
+
+#define _tile_zero_internal(dst)                                       \
+  __asm__ volatile                                                     \
+  ("{tilezero\t%%tmm%c[_dst]|tilezero\ttmm%c[_dst]}" :: [_dst]"i"(dst))
+
+#endif /* __x86_64__ */
+
+#ifdef __DISABLE_TILE__
+#undef __DISABLE_TILE__
+#pragma GCC pop_options
+#endif /* __DISABLE_TILE__ */
+
+#endif /* _TILEINTRIN_H_INCLUDED */
diff --git a/gcc/testsuite/g++.dg/other/i386-2.C 
b/gcc/testsuite/g++.dg/other/i386-2.C
index d4c73f541ca..89b9420397a 100644
--- a/gcc/testsuite/g++.dg/other/i386-2.C
+++ b/gcc/testsuite/g++.dg/other/i386-2.C
@@ -6,7 +6,7 @@
    xopintrin.h, abmintrin.h, bmiintrin.h, tbmintrin.h, lwpintrin.h,
    popcntintrin.h, fmaintrin.h, pkuintrin.h, avx512vpopcntdqintrin.h,
    gfniintrin.h, avx512bitalgintrin.h, avx512vp2intersectintrin.h,
-   tsxldtrkintrin.h, amxtileintrin.h, amxint8intrin.h, amxbf16intrin.h,
+   tsxldtrkintrin.h, tileintrin.h, amxtileintrin.h, amxint8intrin.h, 
amxbf16intrin.h,
    avx512vp2intersectvlintrin.h and mm_malloc.h.h are usable
    with -O -pedantic-errors.  */
 
diff --git a/gcc/testsuite/g++.dg/other/i386-3.C 
b/gcc/testsuite/g++.dg/other/i386-3.C
index e925607c486..6c25b028029 100644
--- a/gcc/testsuite/g++.dg/other/i386-3.C
+++ b/gcc/testsuite/g++.dg/other/i386-3.C
@@ -6,7 +6,7 @@
    xopintrin.h, abmintrin.h, bmiintrin.h, tbmintrin.h, lwpintrin.h,
    popcntintrin.h, fmaintrin.h, pkuintrin.h, avx512vpopcntdqintrin.h,
    gfniintrin.h, avx512bitalgintrin.h, avx512vp2intersectintrin.h,
-   tsxldtrkintrin.h, amxtileintrin.h, amxint8intrin.h, amxbf16intrin.h,
+   tsxldtrkintrin.h, tileintrin.h, amxtileintrin.h, amxint8intrin.h, 
amxbf16intrin.h,
    avx512vp2intersectvlintrin.h and mm_malloc.h are usable
    with -O -fkeep-inline-functions.  */
 
diff --git a/gcc/testsuite/gcc.target/i386/funcspec-56.inc 
b/gcc/testsuite/gcc.target/i386/funcspec-56.inc
index f41067560d0..9d4eb832b1e 100644
--- a/gcc/testsuite/gcc.target/i386/funcspec-56.inc
+++ b/gcc/testsuite/gcc.target/i386/funcspec-56.inc
@@ -93,6 +93,7 @@ extern void test_amx_tf32 (void)              
__attribute__((__target__("amx-tf32")));
 extern void test_amx_fp8 (void)                 
__attribute__((__target__("amx-fp8")));
 extern void test_movrs (void)                  
__attribute__((__target__("movrs")));
 extern void test_amx_movrs (void)              
__attribute__((__target__("amx-movrs")));
+extern void test_tile (void)                   
__attribute__((__target__("tile")));
 
 extern void test_no_sgx (void)                 
__attribute__((__target__("no-sgx")));
 extern void test_no_avx512vpopcntdq(void)      
__attribute__((__target__("no-avx512vpopcntdq")));
@@ -187,6 +188,7 @@ extern void test_no_amx_tf32 (void)         
__attribute__((__target__("no-amx-tf32")));
 extern void test_no_amx_fp8 (void)              
__attribute__((__target__("no-amx-fp8")));
 extern void test_no_movrs (void)               
__attribute__((__target__("no-movrs")));
 extern void test_no_amx_movrs (void)           
__attribute__((__target__("no-amx-movrs")));
+extern void test_no_tile (void)                        
__attribute__((__target__("no-tile")));
 
 extern void test_arch_nocona (void)            
__attribute__((__target__("arch=nocona")));
 extern void test_arch_core2 (void)             
__attribute__((__target__("arch=core2")));
diff --git a/gcc/testsuite/gcc.target/i386/tile-asmatt-1.c 
b/gcc/testsuite/gcc.target/i386/tile-asmatt-1.c
new file mode 100644
index 00000000000..cb350c19aee
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/tile-asmatt-1.c
@@ -0,0 +1,19 @@
+/* { dg-do compile { target { ! ia32 } } } */
+/* { dg-options "-O2 -mtile" } */
+/* { dg-final { scan-assembler "ldtilecfg\[ \\t]"  } } */
+/* { dg-final { scan-assembler "sttilecfg\[ \\t]"  } } */
+/* { dg-final { scan-assembler "tilerelease"  } } */
+/* { dg-final { scan-assembler "tilezero\[ \\t]+\[^\n\]*%tmm\[0-9\]"  } } */
+#include <immintrin.h>
+
+extern int a[];
+
+#define TMM0 0
+
+void TEST ()
+{
+  _tile_loadconfig (a);
+  _tile_storeconfig (a);
+  _tile_release ();
+  _tile_zero (TMM0);
+}
diff --git a/gcc/testsuite/gcc.target/i386/tile-asmintel-1.c 
b/gcc/testsuite/gcc.target/i386/tile-asmintel-1.c
new file mode 100644
index 00000000000..5023f15749e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/tile-asmintel-1.c
@@ -0,0 +1,18 @@
+/* { dg-do compile { target { ! ia32 } } } */
+/* { dg-require-effective-target masm_intel } */
+/* { dg-options "-O2 -mtile -masm=intel" } */
+/* { dg-final { scan-assembler "ldtilecfg\[ \\t]"  } } */
+/* { dg-final { scan-assembler "sttilecfg\[ \\t]"  } } */
+/* { dg-final { scan-assembler "tilerelease"  } } */
+/* { dg-final { scan-assembler "tilezero\[ \\t]+\[^\n%\]*tmm\[0-9\]"  } } */
+#include <immintrin.h>
+
+extern int a[];
+
+void TEST ()
+{
+  _tile_loadconfig (a);
+  _tile_storeconfig (a);
+  _tile_release ();
+  _tile_zero (2);
+}
diff --git a/gcc/testsuite/gcc.target/i386/tile-define-1.c 
b/gcc/testsuite/gcc.target/i386/tile-define-1.c
new file mode 100644
index 00000000000..cb98d9bcab3
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/tile-define-1.c
@@ -0,0 +1,13 @@
+/* Verify that -mtile defines __TILE__.  */
+/* { dg-do compile } */
+/* { dg-options "-mtile" } */
+
+#ifndef __TILE__
+#error "-mtile should define __TILE__"
+#endif
+
+int
+foo (void)
+{
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.target/i386/tile-define-2.c 
b/gcc/testsuite/gcc.target/i386/tile-define-2.c
new file mode 100644
index 00000000000..c090e49e0fb
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/tile-define-2.c
@@ -0,0 +1,13 @@
+/* Verify that -mamx-tile implies -mtile (AMX-TILE enables TILE).  */
+/* { dg-do compile } */
+/* { dg-options "-mamx-tile" } */
+
+#ifndef __TILE__
+#error "-mamx-tile should imply -mtile and define __TILE__"
+#endif
+
+int
+foo (void)
+{
+  return 0;
+}
-- 
2.34.1

Reply via email to