[X86] Support -march=sierraforest, grandridge, graniterapids.

Reviewed By: skan, pengfei, MaskRay

Differential Revision: https://reviews.llvm.org/D137153
diff --git a/clang/test/CodeGen/attr-target-mv.c b/clang/test/CodeGen/attr-target-mv.c
index 581f18e..81dd815 100644
--- a/clang/test/CodeGen/attr-target-mv.c
+++ b/clang/test/CodeGen/attr-target-mv.c
@@ -17,6 +17,9 @@
 int __attribute__((target("arch=core2"))) foo(void) {return 13;}
 int __attribute__((target("arch=raptorlake"))) foo(void) {return 14;}
 int __attribute__((target("arch=meteorlake"))) foo(void) {return 15;}
+int __attribute__((target("arch=sierraforest"))) foo(void) {return 16;}
+int __attribute__((target("arch=grandridge"))) foo(void) {return 17;}
+int __attribute__((target("arch=graniterapids"))) foo(void) {return 18;}
 int __attribute__((target("default"))) foo(void) { return 2; }
 
 int bar(void) {
@@ -155,6 +158,12 @@
 // LINUX: ret i32 14
 // LINUX: define{{.*}} i32 @foo.arch_meteorlake()
 // LINUX: ret i32 15
+// LINUX: define{{.*}} i32 @foo.arch_sierraforest()
+// LINUX: ret i32 16
+// LINUX: define{{.*}} i32 @foo.arch_grandridge()
+// LINUX: ret i32 17
+// LINUX: define{{.*}} i32 @foo.arch_graniterapids()
+// LINUX: ret i32 18
 // LINUX: define{{.*}} i32 @foo()
 // LINUX: ret i32 2
 // LINUX: define{{.*}} i32 @bar()
@@ -190,6 +199,12 @@
 // WINDOWS: ret i32 14
 // WINDOWS: define dso_local i32 @foo.arch_meteorlake()
 // WINDOWS: ret i32 15
+// WINDOWS: define{{.*}} i32 @foo.arch_sierraforest()
+// WINDOWS: ret i32 16
+// WINDOWS: define{{.*}} i32 @foo.arch_grandridge()
+// WINDOWS: ret i32 17
+// WINDOWS: define{{.*}} i32 @foo.arch_graniterapids()
+// WINDOWS: ret i32 18
 // WINDOWS: define dso_local i32 @foo()
 // WINDOWS: ret i32 2
 // WINDOWS: define dso_local i32 @bar()
diff --git a/clang/test/CodeGen/target-builtin-noerror.c b/clang/test/CodeGen/target-builtin-noerror.c
index fc3d9ef..683fa02 100644
--- a/clang/test/CodeGen/target-builtin-noerror.c
+++ b/clang/test/CodeGen/target-builtin-noerror.c
@@ -107,6 +107,8 @@
   (void)__builtin_cpu_is("corei7");
   (void)__builtin_cpu_is("goldmont");
   (void)__builtin_cpu_is("goldmont-plus");
+  (void)__builtin_cpu_is("grandridge");
+  (void)__builtin_cpu_is("graniterapids");
   (void)__builtin_cpu_is("haswell");
   (void)__builtin_cpu_is("icelake-client");
   (void)__builtin_cpu_is("icelake-server");
@@ -121,6 +123,7 @@
   (void)__builtin_cpu_is("rocketlake");
   (void)__builtin_cpu_is("sandybridge");
   (void)__builtin_cpu_is("shanghai");
+  (void)__builtin_cpu_is("sierraforest");
   (void)__builtin_cpu_is("silvermont");
   (void)__builtin_cpu_is("skylake");
   (void)__builtin_cpu_is("skylake-avx512");
diff --git a/clang/test/Driver/x86-march.c b/clang/test/Driver/x86-march.c
index 6b8dcd7..5d2ac2d 100644
--- a/clang/test/Driver/x86-march.c
+++ b/clang/test/Driver/x86-march.c
@@ -119,6 +119,17 @@
 // RUN: %clang -target x86_64-unknown-unknown -c -### %s -march=tremont 2>&1 \
 // RUN:   | FileCheck %s -check-prefix=tremont
 // tremont: "-target-cpu" "tremont"
+// RUN: %clang -target x86_64-unknown-unknown -c -### %s -march=sierraforest 2>&1 \
+// RUN:   | FileCheck %s -check-prefix=sierraforest
+// sierraforest: "-target-cpu" "sierraforest"
+//
+// RUN: %clang -target x86_64-unknown-unknown -c -### %s -march=grandridge 2>&1 \
+// RUN:   | FileCheck %s -check-prefix=grandridge
+// grandridge: "-target-cpu" "grandridge"
+//
+// RUN: %clang -target x86_64-unknown-unknown -c -### %s -march=graniterapids 2>&1 \
+// RUN:   | FileCheck %s -check-prefix=graniterapids
+// graniterapids: "-target-cpu" "graniterapids"
 //
 // RUN: %clang -target x86_64-unknown-unknown -c -### %s -march=sapphirerapids 2>&1 \
 // RUN:   | FileCheck %s -check-prefix=sapphirerapids
diff --git a/clang/test/Misc/target-invalid-cpu-note.c b/clang/test/Misc/target-invalid-cpu-note.c
index 1ac8670..1d7d89e 100644
--- a/clang/test/Misc/target-invalid-cpu-note.c
+++ b/clang/test/Misc/target-invalid-cpu-note.c
@@ -13,19 +13,19 @@
 
 // RUN: not %clang_cc1 -triple i386--- -target-cpu not-a-cpu -fsyntax-only %s 2>&1 | FileCheck %s --check-prefix X86
 // X86: error: unknown target CPU 'not-a-cpu'
-// X86-NEXT: note: valid target CPU values are: i386, i486, winchip-c6, winchip2, c3, i586, pentium, pentium-mmx, pentiumpro, i686, pentium2, pentium3, pentium3m, pentium-m, c3-2, yonah, pentium4, pentium4m, prescott, nocona, core2, penryn, bonnell, atom, silvermont, slm, goldmont, goldmont-plus, tremont, nehalem, corei7, westmere, sandybridge, corei7-avx, ivybridge, core-avx-i, haswell, core-avx2, broadwell, skylake, skylake-avx512, skx, cascadelake, cooperlake, cannonlake, icelake-client, rocketlake, icelake-server, tigerlake, sapphirerapids, alderlake, raptorlake, meteorlake, knl, knm, lakemont, k6, k6-2, k6-3, athlon, athlon-tbird, athlon-xp, athlon-mp, athlon-4, k8, athlon64, athlon-fx, opteron, k8-sse3, athlon64-sse3, opteron-sse3, amdfam10, barcelona, btver1, btver2, bdver1, bdver2, bdver3, bdver4, znver1, znver2, znver3, x86-64, x86-64-v2, x86-64-v3, x86-64-v4, geode{{$}}
+// X86-NEXT: note: valid target CPU values are: i386, i486, winchip-c6, winchip2, c3, i586, pentium, pentium-mmx, pentiumpro, i686, pentium2, pentium3, pentium3m, pentium-m, c3-2, yonah, pentium4, pentium4m, prescott, nocona, core2, penryn, bonnell, atom, silvermont, slm, goldmont, goldmont-plus, tremont, nehalem, corei7, westmere, sandybridge, corei7-avx, ivybridge, core-avx-i, haswell, core-avx2, broadwell, skylake, skylake-avx512, skx, cascadelake, cooperlake, cannonlake, icelake-client, rocketlake, icelake-server, tigerlake, sapphirerapids, alderlake, raptorlake, meteorlake, sierraforest, grandridge, graniterapids, knl, knm, lakemont, k6, k6-2, k6-3, athlon, athlon-tbird, athlon-xp, athlon-mp, athlon-4, k8, athlon64, athlon-fx, opteron, k8-sse3, athlon64-sse3, opteron-sse3, amdfam10, barcelona, btver1, btver2, bdver1, bdver2, bdver3, bdver4, znver1, znver2, znver3, x86-64, x86-64-v2, x86-64-v3, x86-64-v4, geode{{$}}
 
 // RUN: not %clang_cc1 -triple x86_64--- -target-cpu not-a-cpu -fsyntax-only %s 2>&1 | FileCheck %s --check-prefix X86_64
 // X86_64: error: unknown target CPU 'not-a-cpu'
-// X86_64-NEXT: note: valid target CPU values are: nocona, core2, penryn, bonnell, atom, silvermont, slm, goldmont, goldmont-plus, tremont, nehalem, corei7, westmere, sandybridge, corei7-avx, ivybridge, core-avx-i, haswell, core-avx2, broadwell, skylake, skylake-avx512, skx, cascadelake, cooperlake, cannonlake, icelake-client, rocketlake, icelake-server, tigerlake, sapphirerapids, alderlake, raptorlake, meteorlake, knl, knm, k8, athlon64, athlon-fx, opteron, k8-sse3, athlon64-sse3, opteron-sse3, amdfam10, barcelona, btver1, btver2, bdver1, bdver2, bdver3, bdver4, znver1, znver2, znver3, x86-64, x86-64-v2, x86-64-v3, x86-64-v4{{$}}
+// X86_64-NEXT: note: valid target CPU values are: nocona, core2, penryn, bonnell, atom, silvermont, slm, goldmont, goldmont-plus, tremont, nehalem, corei7, westmere, sandybridge, corei7-avx, ivybridge, core-avx-i, haswell, core-avx2, broadwell, skylake, skylake-avx512, skx, cascadelake, cooperlake, cannonlake, icelake-client, rocketlake, icelake-server, tigerlake, sapphirerapids, alderlake, raptorlake, meteorlake, sierraforest, grandridge, graniterapids, knl, knm, k8, athlon64, athlon-fx, opteron, k8-sse3, athlon64-sse3, opteron-sse3, amdfam10, barcelona, btver1, btver2, bdver1, bdver2, bdver3, bdver4, znver1, znver2, znver3, x86-64, x86-64-v2, x86-64-v3, x86-64-v4{{$}}
 
 // RUN: not %clang_cc1 -triple i386--- -tune-cpu not-a-cpu -fsyntax-only %s 2>&1 | FileCheck %s --check-prefix TUNE_X86
 // TUNE_X86: error: unknown target CPU 'not-a-cpu'
-// TUNE_X86-NEXT: note: valid target CPU values are: i386, i486, winchip-c6, winchip2, c3, i586, pentium, pentium-mmx, pentiumpro, i686, pentium2, pentium3, pentium3m, pentium-m, c3-2, yonah, pentium4, pentium4m, prescott, nocona, core2, penryn, bonnell, atom, silvermont, slm, goldmont, goldmont-plus, tremont, nehalem, corei7, westmere, sandybridge, corei7-avx, ivybridge, core-avx-i, haswell, core-avx2, broadwell, skylake, skylake-avx512, skx, cascadelake, cooperlake, cannonlake, icelake-client, rocketlake, icelake-server, tigerlake, sapphirerapids, alderlake, raptorlake, meteorlake, knl, knm, lakemont, k6, k6-2, k6-3, athlon, athlon-tbird, athlon-xp, athlon-mp, athlon-4, k8, athlon64, athlon-fx, opteron, k8-sse3, athlon64-sse3, opteron-sse3, amdfam10, barcelona, btver1, btver2, bdver1, bdver2, bdver3, bdver4, znver1, znver2, znver3, x86-64, geode{{$}}
+// TUNE_X86-NEXT: note: valid target CPU values are: i386, i486, winchip-c6, winchip2, c3, i586, pentium, pentium-mmx, pentiumpro, i686, pentium2, pentium3, pentium3m, pentium-m, c3-2, yonah, pentium4, pentium4m, prescott, nocona, core2, penryn, bonnell, atom, silvermont, slm, goldmont, goldmont-plus, tremont, nehalem, corei7, westmere, sandybridge, corei7-avx, ivybridge, core-avx-i, haswell, core-avx2, broadwell, skylake, skylake-avx512, skx, cascadelake, cooperlake, cannonlake, icelake-client, rocketlake, icelake-server, tigerlake, sapphirerapids, alderlake, raptorlake, meteorlake, sierraforest, grandridge, graniterapids, knl, knm, lakemont, k6, k6-2, k6-3, athlon, athlon-tbird, athlon-xp, athlon-mp, athlon-4, k8, athlon64, athlon-fx, opteron, k8-sse3, athlon64-sse3, opteron-sse3, amdfam10, barcelona, btver1, btver2, bdver1, bdver2, bdver3, bdver4, znver1, znver2, znver3, x86-64, geode{{$}}
 
 // RUN: not %clang_cc1 -triple x86_64--- -tune-cpu not-a-cpu -fsyntax-only %s 2>&1 | FileCheck %s --check-prefix TUNE_X86_64
 // TUNE_X86_64: error: unknown target CPU 'not-a-cpu'
-// TUNE_X86_64-NEXT: note: valid target CPU values are: i386, i486, winchip-c6, winchip2, c3, i586, pentium, pentium-mmx, pentiumpro, i686, pentium2, pentium3, pentium3m, pentium-m, c3-2, yonah, pentium4, pentium4m, prescott, nocona, core2, penryn, bonnell, atom, silvermont, slm, goldmont, goldmont-plus, tremont, nehalem, corei7, westmere, sandybridge, corei7-avx, ivybridge, core-avx-i, haswell, core-avx2, broadwell, skylake, skylake-avx512, skx, cascadelake, cooperlake, cannonlake, icelake-client, rocketlake, icelake-server, tigerlake, sapphirerapids, alderlake, raptorlake, meteorlake, knl, knm, lakemont, k6, k6-2, k6-3, athlon, athlon-tbird, athlon-xp, athlon-mp, athlon-4, k8, athlon64, athlon-fx, opteron, k8-sse3, athlon64-sse3, opteron-sse3, amdfam10, barcelona, btver1, btver2, bdver1, bdver2, bdver3, bdver4, znver1, znver2, znver3, x86-64, geode{{$}}
+// TUNE_X86_64-NEXT: note: valid target CPU values are: i386, i486, winchip-c6, winchip2, c3, i586, pentium, pentium-mmx, pentiumpro, i686, pentium2, pentium3, pentium3m, pentium-m, c3-2, yonah, pentium4, pentium4m, prescott, nocona, core2, penryn, bonnell, atom, silvermont, slm, goldmont, goldmont-plus, tremont, nehalem, corei7, westmere, sandybridge, corei7-avx, ivybridge, core-avx-i, haswell, core-avx2, broadwell, skylake, skylake-avx512, skx, cascadelake, cooperlake, cannonlake, icelake-client, rocketlake, icelake-server, tigerlake, sapphirerapids, alderlake, raptorlake, meteorlake, sierraforest, grandridge, graniterapids, knl, knm, lakemont, k6, k6-2, k6-3, athlon, athlon-tbird, athlon-xp, athlon-mp, athlon-4, k8, athlon64, athlon-fx, opteron, k8-sse3, athlon64-sse3, opteron-sse3, amdfam10, barcelona, btver1, btver2, bdver1, bdver2, bdver3, bdver4, znver1, znver2, znver3, x86-64, geode{{$}}
 
 // RUN: not %clang_cc1 -triple nvptx--- -target-cpu not-a-cpu -fsyntax-only %s 2>&1 | FileCheck %s --check-prefix NVPTX
 // NVPTX: error: unknown target CPU 'not-a-cpu'
diff --git a/clang/test/Preprocessor/predefined-arch-macros.c b/clang/test/Preprocessor/predefined-arch-macros.c
index 10f0987..f1c0a14 100644
--- a/clang/test/Preprocessor/predefined-arch-macros.c
+++ b/clang/test/Preprocessor/predefined-arch-macros.c
@@ -1788,6 +1788,155 @@
 // CHECK_SPR_M64: #define __x86_64 1
 // CHECK_SPR_M64: #define __x86_64__ 1
 
+// RUN: %clang -march=graniterapids -m32 -E -dM %s -o - 2>&1 \
+// RUN:     --target=i386 \
+// RUN:   | FileCheck -match-full-lines %s -check-prefix=CHECK_GNR_M32
+// CHECK_GNR_M32: #define __AES__ 1
+// CHECK_GNR_M32: #define __AMXBF16__ 1
+// CHECK_GNR_M32: #define __AMXFP16__ 1
+// CHECK_GNR_M32: #define __AMXINT8__ 1
+// CHECK_GNR_M32: #define __AMXTILE__ 1
+// CHECK_GNR_M32: #define __AVX2__ 1
+// CHECK_GNR_M32: #define __AVX512BF16__ 1
+// CHECK_GNR_M32: #define __AVX512BITALG__ 1
+// CHECK_GNR_M32: #define __AVX512BW__ 1
+// CHECK_GNR_M32: #define __AVX512CD__ 1
+// CHECK_GNR_M32: #define __AVX512DQ__ 1
+// CHECK_GNR_M32: #define __AVX512FP16__ 1
+// CHECK_GNR_M32: #define __AVX512F__ 1
+// CHECK_GNR_M32: #define __AVX512IFMA__ 1
+// CHECK_GNR_M32: #define __AVX512VBMI2__ 1
+// CHECK_GNR_M32: #define __AVX512VBMI__ 1
+// CHECK_GNR_M32: #define __AVX512VL__ 1
+// CHECK_GNR_M32: #define __AVX512VNNI__ 1
+// CHECK_GNR_M32: #define __AVX512VPOPCNTDQ__ 1
+// CHECK_GNR_M32: #define __AVXVNNI__ 1
+// CHECK_GNR_M32: #define __AVX__ 1
+// CHECK_GNR_M32: #define __BMI2__ 1
+// CHECK_GNR_M32: #define __BMI__ 1
+// CHECK_GNR_M32: #define __CLDEMOTE__ 1
+// CHECK_GNR_M32: #define __CLFLUSHOPT__ 1
+// CHECK_GNR_M32: #define __CLWB__ 1
+// CHECK_GNR_M32: #define __ENQCMD__ 1
+// CHECK_GNR_M32: #define __F16C__ 1
+// CHECK_GNR_M32: #define __FMA__ 1
+// CHECK_GNR_M32: #define __GFNI__ 1
+// CHECK_GNR_M32: #define __INVPCID__ 1
+// CHECK_GNR_M32: #define __LZCNT__ 1
+// CHECK_GNR_M32: #define __MMX__ 1
+// CHECK_GNR_M32: #define __MOVBE__ 1
+// CHECK_GNR_M32: #define __PCLMUL__ 1
+// CHECK_GNR_M32: #define __PCONFIG__ 1
+// CHECK_GNR_M32: #define __PKU__ 1
+// CHECK_GNR_M32: #define __POPCNT__ 1
+// CHECK_GNR_M32: #define __PREFETCHI__ 1
+// CHECK_GNR_M32: #define __PRFCHW__ 1
+// CHECK_GNR_M32: #define __PTWRITE__ 1
+// CHECK_GNR_M32: #define __RDPID__ 1
+// CHECK_GNR_M32: #define __RDRND__ 1
+// CHECK_GNR_M32: #define __RDSEED__ 1
+// CHECK_GNR_M32: #define __SERIALIZE__ 1
+// CHECK_GNR_M32: #define __SGX__ 1
+// CHECK_GNR_M32: #define __SHA__ 1
+// CHECK_GNR_M32: #define __SHSTK__ 1
+// CHECK_GNR_M32: #define __SSE2__ 1
+// CHECK_GNR_M32: #define __SSE3__ 1
+// CHECK_GNR_M32: #define __SSE4_1__ 1
+// CHECK_GNR_M32: #define __SSE4_2__ 1
+// CHECK_GNR_M32: #define __SSE__ 1
+// CHECK_GNR_M32: #define __SSSE3__ 1
+// CHECK_GNR_M32: #define __TSXLDTRK__ 1
+// CHECK_GNR_M32: #define __UINTR__ 1
+// CHECK_GNR_M32: #define __VAES__ 1
+// CHECK_GNR_M32: #define __VPCLMULQDQ__ 1
+// CHECK_GNR_M32: #define __WAITPKG__ 1
+// CHECK_GNR_M32: #define __WBNOINVD__ 1
+// CHECK_GNR_M32: #define __XSAVEC__ 1
+// CHECK_GNR_M32: #define __XSAVEOPT__ 1
+// CHECK_GNR_M32: #define __XSAVES__ 1
+// CHECK_GNR_M32: #define __XSAVE__ 1
+// CHECK_GNR_M32: #define __corei7 1
+// CHECK_GNR_M32: #define __corei7__ 1
+// CHECK_GNR_M32: #define __i386 1
+// CHECK_GNR_M32: #define __i386__ 1
+// CHECK_GNR_M32: #define __tune_corei7__ 1
+// CHECK_GNR_M32: #define i386 1
+
+// RUN: %clang -march=graniterapids -m64 -E -dM %s -o - 2>&1 \
+// RUN:     --target=x86_64 \
+// RUN:   | FileCheck -match-full-lines %s -check-prefix=CHECK_GNR_M64
+// CHECK_GNR_M64: #define __AES__ 1
+// CHECK_GNR_M64: #define __AMXBF16__ 1
+// CHECK_GNR_M64: #define __AMXFP16__ 1
+// CHECK_GNR_M64: #define __AMXINT8__ 1
+// CHECK_GNR_M64: #define __AMXTILE__ 1
+// CHECK_GNR_M64: #define __AVX2__ 1
+// CHECK_GNR_M64: #define __AVX512BF16__ 1
+// CHECK_GNR_M64: #define __AVX512BITALG__ 1
+// CHECK_GNR_M64: #define __AVX512BW__ 1
+// CHECK_GNR_M64: #define __AVX512CD__ 1
+// CHECK_GNR_M64: #define __AVX512DQ__ 1
+// CHECK_GNR_M64: #define __AVX512FP16__ 1
+// CHECK_GNR_M64: #define __AVX512F__ 1
+// CHECK_GNR_M64: #define __AVX512IFMA__ 1
+// CHECK_GNR_M64: #define __AVX512VBMI2__ 1
+// CHECK_GNR_M64: #define __AVX512VBMI__ 1
+// CHECK_GNR_M64: #define __AVX512VL__ 1
+// CHECK_GNR_M64: #define __AVX512VNNI__ 1
+// CHECK_GNR_M64: #define __AVX512VPOPCNTDQ__ 1
+// CHECK_GNR_M64: #define __AVXVNNI__ 1
+// CHECK_GNR_M64: #define __AVX__ 1
+// CHECK_GNR_M64: #define __BMI2__ 1
+// CHECK_GNR_M64: #define __BMI__ 1
+// CHECK_GNR_M64: #define __CLDEMOTE__ 1
+// CHECK_GNR_M64: #define __CLFLUSHOPT__ 1
+// CHECK_GNR_M64: #define __CLWB__ 1
+// CHECK_GNR_M64: #define __ENQCMD__ 1
+// CHECK_GNR_M64: #define __F16C__ 1
+// CHECK_GNR_M64: #define __FMA__ 1
+// CHECK_GNR_M64: #define __GFNI__ 1
+// CHECK_GNR_M64: #define __INVPCID__ 1
+// CHECK_GNR_M64: #define __LZCNT__ 1
+// CHECK_GNR_M64: #define __MMX__ 1
+// CHECK_GNR_M64: #define __MOVBE__ 1
+// CHECK_GNR_M64: #define __PCLMUL__ 1
+// CHECK_GNR_M64: #define __PCONFIG__ 1
+// CHECK_GNR_M64: #define __PKU__ 1
+// CHECK_GNR_M64: #define __POPCNT__ 1
+// CHECK_GNR_M64: #define __PREFETCHI__ 1
+// CHECK_GNR_M64: #define __PRFCHW__ 1
+// CHECK_GNR_M64: #define __PTWRITE__ 1
+// CHECK_GNR_M64: #define __RDPID__ 1
+// CHECK_GNR_M64: #define __RDRND__ 1
+// CHECK_GNR_M64: #define __RDSEED__ 1
+// CHECK_GNR_M64: #define __SERIALIZE__ 1
+// CHECK_GNR_M64: #define __SGX__ 1
+// CHECK_GNR_M64: #define __SHA__ 1
+// CHECK_GNR_M64: #define __SHSTK__ 1
+// CHECK_GNR_M64: #define __SSE2__ 1
+// CHECK_GNR_M64: #define __SSE3__ 1
+// CHECK_GNR_M64: #define __SSE4_1__ 1
+// CHECK_GNR_M64: #define __SSE4_2__ 1
+// CHECK_GNR_M64: #define __SSE__ 1
+// CHECK_GNR_M64: #define __SSSE3__ 1
+// CHECK_GNR_M64: #define __TSXLDTRK__ 1
+// CHECK_GNR_M64: #define __UINTR__ 1
+// CHECK_GNR_M64: #define __VAES__ 1
+// CHECK_GNR_M64: #define __VPCLMULQDQ__ 1
+// CHECK_GNR_M64: #define __WAITPKG__ 1
+// CHECK_GNR_M64: #define __WBNOINVD__ 1
+// CHECK_GNR_M64: #define __XSAVEC__ 1
+// CHECK_GNR_M64: #define __XSAVEOPT__ 1
+// CHECK_GNR_M64: #define __XSAVES__ 1
+// CHECK_GNR_M64: #define __XSAVE__ 1
+// CHECK_GNR_M64: #define __amd64 1
+// CHECK_GNR_M64: #define __amd64__ 1
+// CHECK_GNR_M64: #define __corei7 1
+// CHECK_GNR_M64: #define __corei7__ 1
+// CHECK_GNR_M64: #define __tune_corei7__ 1
+// CHECK_GNR_M64: #define __x86_64 1
+// CHECK_GNR_M64: #define __x86_64__ 1
+
 // RUN: %clang -march=alderlake -m32 -E -dM %s -o - 2>&1 \
 // RUN:     -target i386-unknown-linux \
 // RUN:   | FileCheck -match-full-lines %s -check-prefix=CHECK_ADL_M32
@@ -2242,6 +2391,276 @@
 // RUN:   | FileCheck %s -check-prefix=CHECK_LAKEMONT_M64
 // CHECK_LAKEMONT_M64: error:
 
+// RUN: %clang -march=sierraforest -m32 -E -dM %s -o - 2>&1 \
+// RUN:     --target=i386 \
+// RUN:   | FileCheck -match-full-lines %s -check-prefix=CHECK_SRF_M32
+// CHECK_SRF_M32: #define __ADX__ 1
+// CHECK_SRF_M32: #define __AES__ 1
+// CHECK_SRF_M32: #define __AVX2__ 1
+// CHECK_SRF_M32-NOT: AVX512
+// CHECK_SRF_M32: #define __AVXIFMA__ 1
+// CHECK_SRF_M32: #define __AVXNECONVERT__ 1
+// CHECK_SRF_M32: #define __AVXVNNIINT8__ 1
+// CHECK_SRF_M32: #define __AVXVNNI__ 1
+// CHECK_SRF_M32: #define __AVX__ 1
+// CHECK_SRF_M32: #define __BMI2__ 1
+// CHECK_SRF_M32: #define __BMI__ 1
+// CHECK_SRF_M32: #define __CLDEMOTE__ 1
+// CHECK_SRF_M32: #define __CLFLUSHOPT__ 1
+// CHECK_SRF_M32: #define __CLWB__ 1
+// CHECK_SRF_M32: #define __CMPCCXADD__ 1
+// CHECK_SRF_M32: #define __F16C__ 1
+// CHECK_SRF_M32: #define __FMA__ 1
+// CHECK_SRF_M32: #define __FSGSBASE__ 1
+// CHECK_SRF_M32: #define __FXSR__ 1
+// CHECK_SRF_M32: #define __GFNI__ 1
+// CHECK_SRF_M32: #define __HRESET__ 1
+// CHECK_SRF_M32: #define __INVPCID__ 1
+// CHECK_SRF_M32: #define __KL__ 1
+// CHECK_SRF_M32: #define __LZCNT__ 1
+// CHECK_SRF_M32: #define __MMX__ 1
+// CHECK_SRF_M32: #define __MOVBE__ 1
+// CHECK_SRF_M32: #define __MOVDIR64B__ 1
+// CHECK_SRF_M32: #define __MOVDIRI__ 1
+// CHECK_SRF_M32: #define __PCLMUL__ 1
+// CHECK_SRF_M32: #define __PCONFIG__ 1
+// CHECK_SRF_M32: #define __PKU__ 1
+// CHECK_SRF_M32: #define __POPCNT__ 1
+// CHECK_SRF_M32: #define __PRFCHW__ 1
+// CHECK_SRF_M32: #define __PTWRITE__ 1
+// CHECK_SRF_M32: #define __RDPID__ 1
+// CHECK_SRF_M32: #define __RDRND__ 1
+// CHECK_SRF_M32: #define __RDSEED__ 1
+// CHECK_SRF_M32: #define __SERIALIZE__ 1
+// CHECK_SRF_M32: #define __SGX__ 1
+// CHECK_SRF_M32: #define __SHA__ 1
+// CHECK_SRF_M32: #define __SHSTK__ 1
+// CHECK_SRF_M32: #define __SSE2__ 1
+// CHECK_SRF_M32: #define __SSE3__ 1
+// CHECK_SRF_M32: #define __SSE4_1__ 1
+// CHECK_SRF_M32: #define __SSE4_2__ 1
+// CHECK_SRF_M32: #define __SSE_MATH__ 1
+// CHECK_SRF_M32: #define __SSE__ 1
+// CHECK_SRF_M32: #define __SSSE3__ 1
+// CHECK_SRF_M32: #define __VAES__ 1
+// CHECK_SRF_M32: #define __VPCLMULQDQ__ 1
+// CHECK_SRF_M32: #define __WAITPKG__ 1
+// CHECK_SRF_M32: #define __WIDEKL__ 1
+// CHECK_SRF_M32: #define __XSAVEC__ 1
+// CHECK_SRF_M32: #define __XSAVEOPT__ 1
+// CHECK_SRF_M32: #define __XSAVES__ 1
+// CHECK_SRF_M32: #define __XSAVE__ 1
+// CHECK_SRF_M32: #define __corei7 1
+// CHECK_SRF_M32: #define __corei7__ 1
+// CHECK_SRF_M32: #define __i386 1
+// CHECK_SRF_M32: #define __i386__ 1
+// CHECK_SRF_M32: #define __tune_corei7__ 1
+// CHECK_SRF_M32: #define i386 1
+
+// RUN: %clang -march=sierraforest -m64 -E -dM %s -o - 2>&1 \
+// RUN:     --target=i386 \
+// RUN:   | FileCheck -match-full-lines %s -check-prefix=CHECK_SRF_M64
+// CHECK_SRF_M64: #define __ADX__ 1
+// CHECK_SRF_M64: #define __AES__ 1
+// CHECK_SRF_M64: #define __AVX2__ 1
+// CHECK_SRF_M64-NOT: AVX512
+// CHECK_SRF_M64: #define __AVXIFMA__ 1
+// CHECK_SRF_M64: #define __AVXNECONVERT__ 1
+// CHECK_SRF_M64: #define __AVXVNNIINT8__ 1
+// CHECK_SRF_M64: #define __AVXVNNI__ 1
+// CHECK_SRF_M64: #define __AVX__ 1
+// CHECK_SRF_M64: #define __BMI2__ 1
+// CHECK_SRF_M64: #define __BMI__ 1
+// CHECK_SRF_M64: #define __CLDEMOTE__ 1
+// CHECK_SRF_M64: #define __CLFLUSHOPT__ 1
+// CHECK_SRF_M64: #define __CLWB__ 1
+// CHECK_SRF_M64: #define __CMPCCXADD__ 1
+// CHECK_SRF_M64: #define __F16C__ 1
+// CHECK_SRF_M64: #define __FMA__ 1
+// CHECK_SRF_M64: #define __FSGSBASE__ 1
+// CHECK_SRF_M64: #define __FXSR__ 1
+// CHECK_SRF_M64: #define __GFNI__ 1
+// CHECK_SRF_M64: #define __HRESET__ 1
+// CHECK_SRF_M64: #define __INVPCID__ 1
+// CHECK_SRF_M64: #define __KL__ 1
+// CHECK_SRF_M64: #define __LZCNT__ 1
+// CHECK_SRF_M64: #define __MMX__ 1
+// CHECK_SRF_M64: #define __MOVBE__ 1
+// CHECK_SRF_M64: #define __MOVDIR64B__ 1
+// CHECK_SRF_M64: #define __MOVDIRI__ 1
+// CHECK_SRF_M64: #define __PCLMUL__ 1
+// CHECK_SRF_M64: #define __PCONFIG__ 1
+// CHECK_SRF_M64: #define __PKU__ 1
+// CHECK_SRF_M64: #define __POPCNT__ 1
+// CHECK_SRF_M64: #define __PRFCHW__ 1
+// CHECK_SRF_M64: #define __PTWRITE__ 1
+// CHECK_SRF_M64: #define __RDPID__ 1
+// CHECK_SRF_M64: #define __RDRND__ 1
+// CHECK_SRF_M64: #define __RDSEED__ 1
+// CHECK_SRF_M64: #define __SERIALIZE__ 1
+// CHECK_SRF_M64: #define __SGX__ 1
+// CHECK_SRF_M64: #define __SHA__ 1
+// CHECK_SRF_M64: #define __SHSTK__ 1
+// CHECK_SRF_M64: #define __SSE2_MATH__ 1
+// CHECK_SRF_M64: #define __SSE2__ 1
+// CHECK_SRF_M64: #define __SSE3__ 1
+// CHECK_SRF_M64: #define __SSE4_1__ 1
+// CHECK_SRF_M64: #define __SSE4_2__ 1
+// CHECK_SRF_M64: #define __SSE_MATH__ 1
+// CHECK_SRF_M64: #define __SSE__ 1
+// CHECK_SRF_M64: #define __SSSE3__ 1
+// CHECK_SRF_M64: #define __VAES__ 1
+// CHECK_SRF_M64: #define __VPCLMULQDQ__ 1
+// CHECK_SRF_M64: #define __WAITPKG__ 1
+// CHECK_SRF_M64: #define __WIDEKL__ 1
+// CHECK_SRF_M64: #define __XSAVEC__ 1
+// CHECK_SRF_M64: #define __XSAVEOPT__ 1
+// CHECK_SRF_M64: #define __XSAVES__ 1
+// CHECK_SRF_M64: #define __XSAVE__ 1
+// CHECK_SRF_M64: #define __amd64 1
+// CHECK_SRF_M64: #define __amd64__ 1
+// CHECK_SRF_M64: #define __corei7 1
+// CHECK_SRF_M64: #define __corei7__ 1
+// CHECK_SRF_M64: #define __tune_corei7__ 1
+// CHECK_SRF_M64: #define __x86_64 1
+// CHECK_SRF_M64: #define __x86_64__ 1
+
+// RUN: %clang -march=grandridge -m32 -E -dM %s -o - 2>&1 \
+// RUN:     --target=i386 \
+// RUN:   | FileCheck -match-full-lines %s -check-prefix=CHECK_GRR_M32
+// CHECK_GRR_M32: #define __ADX__ 1
+// CHECK_GRR_M32: #define __AES__ 1
+// CHECK_GRR_M32: #define __AVX2__ 1
+// CHECK_GRR_M32-NOT: AVX512
+// CHECK_GRR_M32: #define __AVXIFMA__ 1
+// CHECK_GRR_M32: #define __AVXNECONVERT__ 1
+// CHECK_GRR_M32: #define __AVXVNNIINT8__ 1
+// CHECK_GRR_M32: #define __AVXVNNI__ 1
+// CHECK_GRR_M32: #define __AVX__ 1
+// CHECK_GRR_M32: #define __BMI2__ 1
+// CHECK_GRR_M32: #define __BMI__ 1
+// CHECK_GRR_M32: #define __CLDEMOTE__ 1
+// CHECK_GRR_M32: #define __CLFLUSHOPT__ 1
+// CHECK_GRR_M32: #define __CLWB__ 1
+// CHECK_GRR_M32: #define __CMPCCXADD__ 1
+// CHECK_GRR_M32: #define __F16C__ 1
+// CHECK_GRR_M32: #define __FMA__ 1
+// CHECK_GRR_M32: #define __FSGSBASE__ 1
+// CHECK_GRR_M32: #define __FXSR__ 1
+// CHECK_GRR_M32: #define __GFNI__ 1
+// CHECK_GRR_M32: #define __HRESET__ 1
+// CHECK_GRR_M32: #define __INVPCID__ 1
+// CHECK_GRR_M32: #define __KL__ 1
+// CHECK_GRR_M32: #define __LZCNT__ 1
+// CHECK_GRR_M32: #define __MMX__ 1
+// CHECK_GRR_M32: #define __MOVBE__ 1
+// CHECK_GRR_M32: #define __MOVDIR64B__ 1
+// CHECK_GRR_M32: #define __MOVDIRI__ 1
+// CHECK_GRR_M32: #define __PCLMUL__ 1
+// CHECK_GRR_M32: #define __PCONFIG__ 1
+// CHECK_GRR_M32: #define __PKU__ 1
+// CHECK_GRR_M32: #define __POPCNT__ 1
+// CHECK_GRR_M32: #define __PRFCHW__ 1
+// CHECK_GRR_M32: #define __PTWRITE__ 1
+// CHECK_GRR_M32: #define __RAOINT__ 1
+// CHECK_GRR_M32: #define __RDPID__ 1
+// CHECK_GRR_M32: #define __RDRND__ 1
+// CHECK_GRR_M32: #define __RDSEED__ 1
+// CHECK_GRR_M32: #define __SERIALIZE__ 1
+// CHECK_GRR_M32: #define __SGX__ 1
+// CHECK_GRR_M32: #define __SHA__ 1
+// CHECK_GRR_M32: #define __SHSTK__ 1
+// CHECK_GRR_M32: #define __SSE2__ 1
+// CHECK_GRR_M32: #define __SSE3__ 1
+// CHECK_GRR_M32: #define __SSE4_1__ 1
+// CHECK_GRR_M32: #define __SSE4_2__ 1
+// CHECK_GRR_M32: #define __SSE_MATH__ 1
+// CHECK_GRR_M32: #define __SSE__ 1
+// CHECK_GRR_M32: #define __SSSE3__ 1
+// CHECK_GRR_M32: #define __VAES__ 1
+// CHECK_GRR_M32: #define __VPCLMULQDQ__ 1
+// CHECK_GRR_M32: #define __WAITPKG__ 1
+// CHECK_GRR_M32: #define __WIDEKL__ 1
+// CHECK_GRR_M32: #define __XSAVEC__ 1
+// CHECK_GRR_M32: #define __XSAVEOPT__ 1
+// CHECK_GRR_M32: #define __XSAVES__ 1
+// CHECK_GRR_M32: #define __XSAVE__ 1
+// CHECK_GRR_M32: #define __corei7 1
+// CHECK_GRR_M32: #define __corei7__ 1
+// CHECK_GRR_M32: #define __i386 1
+// CHECK_GRR_M32: #define __i386__ 1
+// CHECK_GRR_M32: #define __tune_corei7__ 1
+// CHECK_GRR_M32: #define i386 1
+
+// RUN: %clang -march=grandridge -m64 -E -dM %s -o - 2>&1 \
+// RUN:     --target=x86_64 \
+// RUN:   | FileCheck -match-full-lines %s -check-prefix=CHECK_GRR_M64
+// CHECK_GRR_M64: #define __ADX__ 1
+// CHECK_GRR_M64: #define __AES__ 1
+// CHECK_GRR_M64: #define __AVX2__ 1
+// CHECK_GRR_M64-NOT: AVX512
+// CHECK_GRR_M64: #define __AVXIFMA__ 1
+// CHECK_GRR_M64: #define __AVXNECONVERT__ 1
+// CHECK_GRR_M64: #define __AVXVNNIINT8__ 1
+// CHECK_GRR_M64: #define __AVXVNNI__ 1
+// CHECK_GRR_M64: #define __AVX__ 1
+// CHECK_GRR_M64: #define __BMI2__ 1
+// CHECK_GRR_M64: #define __BMI__ 1
+// CHECK_GRR_M64: #define __CLDEMOTE__ 1
+// CHECK_GRR_M64: #define __CLFLUSHOPT__ 1
+// CHECK_GRR_M64: #define __CLWB__ 1
+// CHECK_GRR_M64: #define __CMPCCXADD__ 1
+// CHECK_GRR_M64: #define __F16C__ 1
+// CHECK_GRR_M64: #define __FMA__ 1
+// CHECK_GRR_M64: #define __FSGSBASE__ 1
+// CHECK_GRR_M64: #define __FXSR__ 1
+// CHECK_GRR_M64: #define __GFNI__ 1
+// CHECK_GRR_M64: #define __HRESET__ 1
+// CHECK_GRR_M64: #define __INVPCID__ 1
+// CHECK_GRR_M64: #define __KL__ 1
+// CHECK_GRR_M64: #define __LZCNT__ 1
+// CHECK_GRR_M64: #define __MMX__ 1
+// CHECK_GRR_M64: #define __MOVBE__ 1
+// CHECK_GRR_M64: #define __MOVDIR64B__ 1
+// CHECK_GRR_M64: #define __MOVDIRI__ 1
+// CHECK_GRR_M64: #define __PCLMUL__ 1
+// CHECK_GRR_M64: #define __PCONFIG__ 1
+// CHECK_GRR_M64: #define __PKU__ 1
+// CHECK_GRR_M64: #define __POPCNT__ 1
+// CHECK_GRR_M64: #define __PRFCHW__ 1
+// CHECK_GRR_M64: #define __PTWRITE__ 1
+// CHECK_GRR_M64: #define __RAOINT__ 1
+// CHECK_GRR_M64: #define __RDPID__ 1
+// CHECK_GRR_M64: #define __RDRND__ 1
+// CHECK_GRR_M64: #define __RDSEED__ 1
+// CHECK_GRR_M64: #define __SERIALIZE__ 1
+// CHECK_GRR_M64: #define __SGX__ 1
+// CHECK_GRR_M64: #define __SHA__ 1
+// CHECK_GRR_M64: #define __SHSTK__ 1
+// CHECK_GRR_M64: #define __SSE2_MATH__ 1
+// CHECK_GRR_M64: #define __SSE2__ 1
+// CHECK_GRR_M64: #define __SSE3__ 1
+// CHECK_GRR_M64: #define __SSE4_1__ 1
+// CHECK_GRR_M64: #define __SSE4_2__ 1
+// CHECK_GRR_M64: #define __SSE_MATH__ 1
+// CHECK_GRR_M64: #define __SSE__ 1
+// CHECK_GRR_M64: #define __SSSE3__ 1
+// CHECK_GRR_M64: #define __VAES__ 1
+// CHECK_GRR_M64: #define __VPCLMULQDQ__ 1
+// CHECK_GRR_M64: #define __WAITPKG__ 1
+// CHECK_GRR_M64: #define __WIDEKL__ 1
+// CHECK_GRR_M64: #define __XSAVEC__ 1
+// CHECK_GRR_M64: #define __XSAVEOPT__ 1
+// CHECK_GRR_M64: #define __XSAVES__ 1
+// CHECK_GRR_M64: #define __XSAVE__ 1
+// CHECK_GRR_M64: #define __amd64 1
+// CHECK_GRR_M64: #define __amd64__ 1
+// CHECK_GRR_M64: #define __corei7 1
+// CHECK_GRR_M64: #define __corei7__ 1
+// CHECK_GRR_M64: #define __tune_corei7__ 1
+// CHECK_GRR_M64: #define __x86_64 1
+// CHECK_GRR_M64: #define __x86_64__ 1
+
 // RUN: %clang -march=geode -m32 -E -dM %s -o - 2>&1 \
 // RUN:     -target i386-unknown-linux \
 // RUN:   | FileCheck -match-full-lines %s -check-prefix=CHECK_GEODE_M32