[X86] Add a stub for znver3 based on the little public information there is in AMD's manuals
No scheduling, no autodetection. Just enough so -march=znver3 works.
diff --git a/clang/test/Misc/target-invalid-cpu-note.c b/clang/test/Misc/target-invalid-cpu-note.c
index a2d20c3..82165de 100644
--- a/clang/test/Misc/target-invalid-cpu-note.c
+++ b/clang/test/Misc/target-invalid-cpu-note.c
@@ -24,7 +24,7 @@
// X86-SAME: skx, cascadelake, cooperlake, cannonlake, icelake-client, icelake-server, tigerlake, sapphirerapids, knl, knm, lakemont, k6, k6-2, k6-3,
// X86-SAME: athlon, athlon-tbird, athlon-xp, athlon-mp, athlon-4, k8, athlon64,
// X86-SAME: athlon-fx, opteron, k8-sse3, athlon64-sse3, opteron-sse3, amdfam10,
-// X86-SAME: barcelona, btver1, btver2, bdver1, bdver2, bdver3, bdver4, znver1, znver2,
+// X86-SAME: barcelona, btver1, btver2, bdver1, bdver2, bdver3, bdver4, znver1, znver2, znver3,
// X86-SAME: 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
@@ -35,7 +35,7 @@
// X86_64-SAME: core-avx2, broadwell, skylake, skylake-avx512, skx, cascadelake, cooperlake, cannonlake,
// X86_64-SAME: icelake-client, icelake-server, tigerlake, sapphirerapids, knl, knm, k8, athlon64, athlon-fx, opteron, k8-sse3,
// X86_64-SAME: athlon64-sse3, opteron-sse3, amdfam10, barcelona, btver1,
-// X86_64-SAME: btver2, bdver1, bdver2, bdver3, bdver4, znver1, znver2,
+// X86_64-SAME: btver2, bdver1, bdver2, bdver3, bdver4, znver1, znver2, znver3,
// X86_64-SAME: 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
@@ -49,7 +49,7 @@
// TUNE_X86-SAME: skx, cascadelake, cooperlake, cannonlake, icelake-client, icelake-server, tigerlake, sapphirerapids, knl, knm, lakemont, k6, k6-2, k6-3,
// TUNE_X86-SAME: athlon, athlon-tbird, athlon-xp, athlon-mp, athlon-4, k8, athlon64,
// TUNE_X86-SAME: athlon-fx, opteron, k8-sse3, athlon64-sse3, opteron-sse3, amdfam10,
-// TUNE_X86-SAME: barcelona, btver1, btver2, bdver1, bdver2, bdver3, bdver4, znver1, znver2,
+// TUNE_X86-SAME: barcelona, btver1, btver2, bdver1, bdver2, bdver3, bdver4, znver1, znver2, znver3,
// TUNE_X86-SAME: 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
@@ -63,7 +63,7 @@
// TUNE_X86_64-SAME: skx, cascadelake, cooperlake, cannonlake, icelake-client, icelake-server, tigerlake, sapphirerapids, knl, knm, lakemont, k6, k6-2, k6-3,
// TUNE_X86_64-SAME: athlon, athlon-tbird, athlon-xp, athlon-mp, athlon-4, k8, athlon64,
// TUNE_X86_64-SAME: athlon-fx, opteron, k8-sse3, athlon64-sse3, opteron-sse3, amdfam10,
-// TUNE_X86_64-SAME: barcelona, btver1, btver2, bdver1, bdver2, bdver3, bdver4, znver1, znver2,
+// TUNE_X86_64-SAME: barcelona, btver1, btver2, bdver1, bdver2, bdver3, bdver4, znver1, znver2, znver3,
// TUNE_X86_64-SAME: x86-64, geode{{$}}
// RUN: not %clang_cc1 -triple nvptx--- -target-cpu not-a-cpu -fsyntax-only %s 2>&1 | FileCheck %s --check-prefix NVPTX
diff --git a/clang/test/Preprocessor/predefined-arch-macros.c b/clang/test/Preprocessor/predefined-arch-macros.c
index f8ee187..65089e8 100644
--- a/clang/test/Preprocessor/predefined-arch-macros.c
+++ b/clang/test/Preprocessor/predefined-arch-macros.c
@@ -3154,6 +3154,110 @@
// CHECK_ZNVER2_M64: #define __znver2 1
// CHECK_ZNVER2_M64: #define __znver2__ 1
+// RUN: %clang -march=znver3 -m32 -E -dM %s -o - 2>&1 \
+// RUN: -target i386-unknown-linux \
+// RUN: | FileCheck -match-full-lines %s -check-prefix=CHECK_ZNVER3_M32
+// CHECK_ZNVER3_M32-NOT: #define __3dNOW_A__ 1
+// CHECK_ZNVER3_M32-NOT: #define __3dNOW__ 1
+// CHECK_ZNVER3_M32: #define __ADX__ 1
+// CHECK_ZNVER3_M32: #define __AES__ 1
+// CHECK_ZNVER3_M32: #define __AVX2__ 1
+// CHECK_ZNVER3_M32: #define __AVX__ 1
+// CHECK_ZNVER3_M32: #define __BMI2__ 1
+// CHECK_ZNVER3_M32: #define __BMI__ 1
+// CHECK_ZNVER3_M32: #define __CLFLUSHOPT__ 1
+// CHECK_ZNVER3_M32: #define __CLWB__ 1
+// CHECK_ZNVER3_M32: #define __CLZERO__ 1
+// CHECK_ZNVER3_M32: #define __F16C__ 1
+// CHECK_ZNVER3_M32-NOT: #define __FMA4__ 1
+// CHECK_ZNVER3_M32: #define __FMA__ 1
+// CHECK_ZNVER3_M32: #define __FSGSBASE__ 1
+// CHECK_ZNVER3_M32: #define __LZCNT__ 1
+// CHECK_ZNVER3_M32: #define __MMX__ 1
+// CHECK_ZNVER3_M32: #define __PCLMUL__ 1
+// CHECK_ZNVER3_M32: #define __PKU__ 1
+// CHECK_ZNVER3_M32: #define __POPCNT__ 1
+// CHECK_ZNVER3_M32: #define __PRFCHW__ 1
+// CHECK_ZNVER3_M32: #define __RDPID__ 1
+// CHECK_ZNVER3_M32: #define __RDRND__ 1
+// CHECK_ZNVER3_M32: #define __RDSEED__ 1
+// CHECK_ZNVER3_M32: #define __SHA__ 1
+// CHECK_ZNVER3_M32: #define __SSE2_MATH__ 1
+// CHECK_ZNVER3_M32: #define __SSE2__ 1
+// CHECK_ZNVER3_M32: #define __SSE3__ 1
+// CHECK_ZNVER3_M32: #define __SSE4A__ 1
+// CHECK_ZNVER3_M32: #define __SSE4_1__ 1
+// CHECK_ZNVER3_M32: #define __SSE4_2__ 1
+// CHECK_ZNVER3_M32: #define __SSE_MATH__ 1
+// CHECK_ZNVER3_M32: #define __SSE__ 1
+// CHECK_ZNVER3_M32: #define __SSSE3__ 1
+// CHECK_ZNVER3_M32-NOT: #define __TBM__ 1
+// CHECK_ZNVER3_M32: #define __WBNOINVD__ 1
+// CHECK_ZNVER3_M32-NOT: #define __XOP__ 1
+// CHECK_ZNVER3_M32: #define __XSAVEC__ 1
+// CHECK_ZNVER3_M32: #define __XSAVEOPT__ 1
+// CHECK_ZNVER3_M32: #define __XSAVES__ 1
+// CHECK_ZNVER3_M32: #define __XSAVE__ 1
+// CHECK_ZNVER3_M32: #define __i386 1
+// CHECK_ZNVER3_M32: #define __i386__ 1
+// CHECK_ZNVER3_M32: #define __tune_znver3__ 1
+// CHECK_ZNVER3_M32: #define __znver3 1
+// CHECK_ZNVER3_M32: #define __znver3__ 1
+
+// RUN: %clang -march=znver3 -m64 -E -dM %s -o - 2>&1 \
+// RUN: -target i386-unknown-linux \
+// RUN: | FileCheck -match-full-lines %s -check-prefix=CHECK_ZNVER3_M64
+// CHECK_ZNVER3_M64-NOT: #define __3dNOW_A__ 1
+// CHECK_ZNVER3_M64-NOT: #define __3dNOW__ 1
+// CHECK_ZNVER3_M64: #define __ADX__ 1
+// CHECK_ZNVER3_M64: #define __AES__ 1
+// CHECK_ZNVER3_M64: #define __AVX2__ 1
+// CHECK_ZNVER3_M64: #define __AVX__ 1
+// CHECK_ZNVER3_M64: #define __BMI2__ 1
+// CHECK_ZNVER3_M64: #define __BMI__ 1
+// CHECK_ZNVER3_M64: #define __CLFLUSHOPT__ 1
+// CHECK_ZNVER3_M64: #define __CLWB__ 1
+// CHECK_ZNVER3_M64: #define __CLZERO__ 1
+// CHECK_ZNVER3_M64: #define __F16C__ 1
+// CHECK_ZNVER3_M64-NOT: #define __FMA4__ 1
+// CHECK_ZNVER3_M64: #define __FMA__ 1
+// CHECK_ZNVER3_M64: #define __FSGSBASE__ 1
+// CHECK_ZNVER3_M64: #define __LZCNT__ 1
+// CHECK_ZNVER3_M64: #define __MMX__ 1
+// CHECK_ZNVER3_M64: #define __PCLMUL__ 1
+// CHECK_ZNVER3_M64: #define __PKU__ 1
+// CHECK_ZNVER3_M64: #define __POPCNT__ 1
+// CHECK_ZNVER3_M64: #define __PRFCHW__ 1
+// CHECK_ZNVER3_M64: #define __RDPID__ 1
+// CHECK_ZNVER3_M64: #define __RDRND__ 1
+// CHECK_ZNVER3_M64: #define __RDSEED__ 1
+// CHECK_ZNVER3_M64: #define __SHA__ 1
+// CHECK_ZNVER3_M64: #define __SSE2_MATH__ 1
+// CHECK_ZNVER3_M64: #define __SSE2__ 1
+// CHECK_ZNVER3_M64: #define __SSE3__ 1
+// CHECK_ZNVER3_M64: #define __SSE4A__ 1
+// CHECK_ZNVER3_M64: #define __SSE4_1__ 1
+// CHECK_ZNVER3_M64: #define __SSE4_2__ 1
+// CHECK_ZNVER3_M64: #define __SSE_MATH__ 1
+// CHECK_ZNVER3_M64: #define __SSE__ 1
+// CHECK_ZNVER3_M64: #define __SSSE3__ 1
+// CHECK_ZNVER3_M64-NOT: #define __TBM__ 1
+// CHECK_ZNVER3_M64: #define __VAES__ 1
+// CHECK_ZNVER3_M64: #define __VPCLMULQDQ__ 1
+// CHECK_ZNVER3_M64: #define __WBNOINVD__ 1
+// CHECK_ZNVER3_M64-NOT: #define __XOP__ 1
+// CHECK_ZNVER3_M64: #define __XSAVEC__ 1
+// CHECK_ZNVER3_M64: #define __XSAVEOPT__ 1
+// CHECK_ZNVER3_M64: #define __XSAVES__ 1
+// CHECK_ZNVER3_M64: #define __XSAVE__ 1
+// CHECK_ZNVER3_M64: #define __amd64 1
+// CHECK_ZNVER3_M64: #define __amd64__ 1
+// CHECK_ZNVER3_M64: #define __tune_znver3__ 1
+// CHECK_ZNVER3_M64: #define __x86_64 1
+// CHECK_ZNVER3_M64: #define __x86_64__ 1
+// CHECK_ZNVER3_M64: #define __znver3 1
+// CHECK_ZNVER3_M64: #define __znver3__ 1
+
// End X86/GCC/Linux tests ------------------
// Begin PPC/GCC/Linux tests ----------------