https://github.com/FreddyLeaf updated https://github.com/llvm/llvm-project/pull/69277
>From 9e673f332b8f7a3cfdeb1a73f6a77aee651f7664 Mon Sep 17 00:00:00 2001 From: Freddy Ye <freddy...@intel.com> Date: Wed, 11 Oct 2023 10:25:36 +0800 Subject: [PATCH 1/2] [X86] Support -march=pantherlake,clearwaterforest --- clang/docs/ReleaseNotes.rst | 1 + clang/lib/Basic/Targets/X86.cpp | 4 +++ clang/test/CodeGen/attr-cpuspecific-cpus.c | 2 ++ clang/test/CodeGen/attr-target-mv.c | 10 +++++++ clang/test/CodeGen/target-builtin-noerror.c | 2 ++ clang/test/Driver/x86-march.c | 8 ++++++ clang/test/Misc/target-invalid-cpu-note.c | 8 +++--- .../Preprocessor/predefined-arch-macros.c | 26 +++++++++++++++++++ compiler-rt/lib/builtins/cpu_model.c | 15 +++++++++++ llvm/docs/ReleaseNotes.rst | 1 + .../llvm/TargetParser/X86TargetParser.def | 2 ++ .../llvm/TargetParser/X86TargetParser.h | 2 ++ llvm/lib/Target/X86/X86.td | 16 ++++++++++++ llvm/lib/TargetParser/Host.cpp | 13 ++++++++++ llvm/lib/TargetParser/X86TargetParser.cpp | 8 ++++++ llvm/test/CodeGen/X86/cpus-intel.ll | 4 +++ 16 files changed, 118 insertions(+), 4 deletions(-) diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst index 3f83cd71e64cbce..54f2e42ab15955d 100644 --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -564,6 +564,7 @@ X86 Support - Support ISA of ``USER_MSR``. * Support intrinsic of ``_urdmsr``. * Support intrinsic of ``_uwrmsr``. +- ``-march=pantherlake`` and ``-march=clearwaterforest`` are now supported. Arm and AArch64 Support ^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/clang/lib/Basic/Targets/X86.cpp b/clang/lib/Basic/Targets/X86.cpp index bea5c52a7b8d7c9..03978af3396ccfe 100644 --- a/clang/lib/Basic/Targets/X86.cpp +++ b/clang/lib/Basic/Targets/X86.cpp @@ -565,11 +565,13 @@ void X86TargetInfo::getTargetDefines(const LangOptions &Opts, case CK_Arrowlake: case CK_ArrowlakeS: case CK_Lunarlake: + case CK_Pantherlake: case CK_Sierraforest: case CK_Grandridge: case CK_Graniterapids: case CK_GraniterapidsD: case CK_Emeraldrapids: + case CK_Clearwaterforest: // FIXME: Historically, we defined this legacy name, it would be nice to // remove it at some point. We've never exposed fine-grained names for // recent primary x86 CPUs, and we should keep it that way. @@ -1470,11 +1472,13 @@ std::optional<unsigned> X86TargetInfo::getCPUCacheLineSize() const { case CK_Arrowlake: case CK_ArrowlakeS: case CK_Lunarlake: + case CK_Pantherlake: case CK_Sierraforest: case CK_Grandridge: case CK_Graniterapids: case CK_GraniterapidsD: case CK_Emeraldrapids: + case CK_Clearwaterforest: case CK_KNL: case CK_KNM: // K7 diff --git a/clang/test/CodeGen/attr-cpuspecific-cpus.c b/clang/test/CodeGen/attr-cpuspecific-cpus.c index f26871324e279d9..dd154fd227b25bf 100644 --- a/clang/test/CodeGen/attr-cpuspecific-cpus.c +++ b/clang/test/CodeGen/attr-cpuspecific-cpus.c @@ -84,3 +84,5 @@ ATTR(cpu_specific(arrowlake)) void CPU35(void){} ATTR(cpu_specific(arrowlake_s)) void CPU36(void){} ATTR(cpu_specific(lunarlake)) void CPU37(void){} ATTR(cpu_specific(gracemont)) void CPU38(void){} +ATTR(cpu_specific(pantherlake)) void CPU39(void){} +ATTR(cpu_specific(clearwaterforest)) void CPU40(void){} diff --git a/clang/test/CodeGen/attr-target-mv.c b/clang/test/CodeGen/attr-target-mv.c index 301cb704f203162..bdf8c49de4ae869 100644 --- a/clang/test/CodeGen/attr-target-mv.c +++ b/clang/test/CodeGen/attr-target-mv.c @@ -26,6 +26,8 @@ int __attribute__((target("arch=arrowlake"))) foo(void) {return 21;} int __attribute__((target("arch=arrowlake-s"))) foo(void) {return 22;} int __attribute__((target("arch=lunarlake"))) foo(void) {return 23;} int __attribute__((target("arch=gracemont"))) foo(void) {return 24;} +int __attribute__((target("arch=pantherlake"))) foo(void) {return 25;} +int __attribute__((target("arch=clearwaterforest"))) foo(void) {return 26;} int __attribute__((target("default"))) foo(void) { return 2; } int bar(void) { @@ -190,6 +192,10 @@ void calls_pr50025c(void) { pr50025c(); } // LINUX: ret i32 23 // LINUX: define{{.*}} i32 @foo.arch_gracemont() // LINUX: ret i32 24 +// LINUX: define{{.*}} i32 @foo.arch_pantherlake() +// LINUX: ret i32 25 +// LINUX: define{{.*}} i32 @foo.arch_clearwaterforest() +// LINUX: ret i32 26 // LINUX: define{{.*}} i32 @foo() // LINUX: ret i32 2 // LINUX: define{{.*}} i32 @bar() @@ -243,6 +249,10 @@ void calls_pr50025c(void) { pr50025c(); } // WINDOWS: ret i32 23 // WINDOWS: define dso_local i32 @foo.arch_gracemont() // WINDOWS: ret i32 24 +// WINDOWS: define dso_local i32 @foo.arch_pantherlake() +// WINDOWS: ret i32 25 +// WINDOWS: define dso_local i32 @foo.arch_clearwaterforest() +// WINDOWS: ret i32 26 // 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 60001fae1c0f4c0..505f4a3e94565d4 100644 --- a/clang/test/CodeGen/target-builtin-noerror.c +++ b/clang/test/CodeGen/target-builtin-noerror.c @@ -114,6 +114,8 @@ void verifycpustrings(void) { (void)__builtin_cpu_is("arrowlake"); (void)__builtin_cpu_is("arrowlake-s"); (void)__builtin_cpu_is("lunarlake"); + (void)__builtin_cpu_is("clearwaterforest"); + (void)__builtin_cpu_is("pantherlake"); (void)__builtin_cpu_is("haswell"); (void)__builtin_cpu_is("icelake-client"); (void)__builtin_cpu_is("icelake-server"); diff --git a/clang/test/Driver/x86-march.c b/clang/test/Driver/x86-march.c index b7134f79c5e21cf..cc993b53937c17b 100644 --- a/clang/test/Driver/x86-march.c +++ b/clang/test/Driver/x86-march.c @@ -112,6 +112,14 @@ // RUN: | FileCheck %s -check-prefix=gracemont // gracemont: "-target-cpu" "gracemont" // +// RUN: %clang --target=x86_64 -c -### %s -march=pantherlake 2>&1 \ +// RUN: | FileCheck %s -check-prefix=pantherlake +// pantherlake: "-target-cpu" "pantherlake" +// +// RUN: %clang --target=x86_64 -c -### %s -march=clearwaterforest 2>&1 \ +// RUN: | FileCheck %s -check-prefix=clearwaterforest +// clearwaterforest: "-target-cpu" "clearwaterforest" +// // RUN: %clang -target x86_64-unknown-unknown -c -### %s -march=lakemont 2>&1 \ // RUN: | FileCheck %s -check-prefix=lakemont // lakemont: "-target-cpu" "lakemont" diff --git a/clang/test/Misc/target-invalid-cpu-note.c b/clang/test/Misc/target-invalid-cpu-note.c index a639b0ddde85e5a..b2a04ebdbce628f 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, arrowlake, arrowlake-s, lunarlake, gracemont, sierraforest, grandridge, graniterapids, graniterapids-d, emeraldrapids, 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, znver4, 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, arrowlake, arrowlake-s, lunarlake, gracemont, pantherlake, sierraforest, grandridge, graniterapids, graniterapids-d, emeraldrapids, clearwaterforest, 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, znver4, 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, arrowlake, arrowlake-s, lunarlake, gracemont, sierraforest, grandridge, graniterapids, graniterapids-d, emeraldrapids, knl, knm, k8, athlon64, athlon-fx, opteron, k8-sse3, athlon64-sse3, opteron-sse3, amdfam10, barcelona, btver1, btver2, bdver1, bdver2, bdver3, bdver4, znver1, znver2, znver3, znver4, 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, arrowlake, arrowlake-s, lunarlake, gracemont, pantherlake, sierraforest, grandridge, graniterapids, graniterapids-d, emeraldrapids, clearwaterforest, knl, knm, k8, athlon64, athlon-fx, opteron, k8-sse3, athlon64-sse3, opteron-sse3, amdfam10, barcelona, btver1, btver2, bdver1, bdver2, bdver3, bdver4, znver1, znver2, znver3, znver4, 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, arrowlake, arrowlake-s, lunarlake, gracemont, sierraforest, grandridge, graniterapids, graniterapids-d, emeraldrapids, 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, znver4, 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, arrowlake, arrowlake-s, lunarlake, gracemont, pantherlake, sierraforest, grandridge, graniterapids, graniterapids-d, emeraldrapids, clearwaterforest, 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, znver4, 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, arrowlake, arrowlake-s, lunarlake, gracemont, sierraforest, grandridge, graniterapids, graniterapids-d, emeraldrapids, 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, znver4, 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, arrowlake, arrowlake-s, lunarlake, gracemont, pantherlake, sierraforest, grandridge, graniterapids, graniterapids-d, emeraldrapids, clearwaterforest, 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, znver4, 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 d95992dcdff2a94..f10793983b5e7c6 100644 --- a/clang/test/Preprocessor/predefined-arch-macros.c +++ b/clang/test/Preprocessor/predefined-arch-macros.c @@ -2503,6 +2503,12 @@ // RUN: %clang -march=lunarlake -m32 -E -dM %s -o - 2>&1 \ // RUN: -target i386-unknown-linux \ // RUN: | FileCheck -match-full-lines %s -check-prefixes=CHECK_SRF_M32,CHECK_ARLS_M32 +// RUN: %clang -march=pantherlake -m32 -E -dM %s -o - 2>&1 \ +// RUN: -target i386-unknown-linux \ +// RUN: | FileCheck -match-full-lines %s -check-prefixes=CHECK_SRF_M32,CHECK_ARLS_M32,CHECK_PTL_M32 +// RUN: %clang -march=clearwaterforest -m32 -E -dM %s -o - 2>&1 \ +// RUN: -target i386-unknown-linux \ +// RUN: | FileCheck -match-full-lines %s -check-prefixes=CHECK_SRF_M32,CHECK_ARLS_M32,CHECK_PTL_M32,CHECK_CWF_M32 // CHECK_SRF_M32: #define __ADX__ 1 // CHECK_SRF_M32: #define __AES__ 1 // CHECK_SRF_M32: #define __AVX2__ 1 @@ -2538,6 +2544,9 @@ // CHECK_SRF_M32: #define __PCONFIG__ 1 // CHECK_SRF_M32: #define __PKU__ 1 // CHECK_SRF_M32: #define __POPCNT__ 1 +// CHECK_SRF_M32-NOT: #define __PREFETCHI__ 1 +// CHECK_ARLS_M32-NOT: #define __PREFETCHI__ 1 +// CHECK_PTL_M32: #define __PREFETCHI__ 1 // CHECK_SRF_M32: #define __PRFCHW__ 1 // CHECK_SRF_M32: #define __PTWRITE__ 1 // CHECK_SRF_M32-NOT: #define __RAOINT__ 1 @@ -2563,6 +2572,10 @@ // CHECK_SRF_M32: #define __SSE__ 1 // CHECK_SRF_M32: #define __SSSE3__ 1 // CHECK_SRF_M32: #define __UINTR__ 1 +// CHECK_SRF_M32-NOT: #define __USERMSR__ 1 +// CHECK_ARLS_M32-NOT: #define __USERMSR__ 1 +// CHECK_PTL_M32-NOT: #define __USERMSR__ 1 +// CHECK_CWF_M32: #define __USERMSR__ 1 // CHECK_SRF_M32: #define __VAES__ 1 // CHECK_SRF_M32: #define __VPCLMULQDQ__ 1 // CHECK_SRF_M32: #define __WAITPKG__ 1 @@ -2593,6 +2606,12 @@ // RUN: %clang -march=lunarlake -m64 -E -dM %s -o - 2>&1 \ // RUN: -target i386-unknown-linux \ // RUN: | FileCheck -match-full-lines %s -check-prefixes=CHECK_SRF_M64,CHECK_ARLS_M64 +// RUN: %clang -march=pantherlake -m64 -E -dM %s -o - 2>&1 \ +// RUN: -target i386-unknown-linux \ +// RUN: | FileCheck -match-full-lines %s -check-prefixes=CHECK_SRF_M64,CHECK_ARLS_M64,CHECK_PTL_M64 +// RUN: %clang -march=clearwaterforest -m64 -E -dM %s -o - 2>&1 \ +// RUN: -target i386-unknown-linux \ +// RUN: | FileCheck -match-full-lines %s -check-prefixes=CHECK_SRF_M64,CHECK_ARLS_M64,CHECK_PTL_M64,CHECK_CWF_M64 // CHECK_SRF_M64: #define __ADX__ 1 // CHECK_SRF_M64: #define __AES__ 1 // CHECK_SRF_M64: #define __AVX2__ 1 @@ -2628,6 +2647,9 @@ // CHECK_SRF_M64: #define __PCONFIG__ 1 // CHECK_SRF_M64: #define __PKU__ 1 // CHECK_SRF_M64: #define __POPCNT__ 1 +// CHECK_SRF_M64-NOT: #define __PREFETCHI__ 1 +// CHECK_ARLS_M64-NOT: #define __PREFETCHI__ 1 +// CHECK_PTL_M64: #define __PREFETCHI__ 1 // CHECK_SRF_M64: #define __PRFCHW__ 1 // CHECK_SRF_M64: #define __PTWRITE__ 1 // CHECK_SRF_M64-NOT: #define __RAOINT__ 1 @@ -2654,6 +2676,10 @@ // CHECK_SRF_M64: #define __SSE__ 1 // CHECK_SRF_M64: #define __SSSE3__ 1 // CHECK_SRF_M64: #define __UINTR__ 1 +// CHECK_SRF_M64-NOT: #define __USERMSR__ 1 +// CHECK_ARLS_M64-NOT: #define __USERMSR__ 1 +// CHECK_PTL_M64-NOT: #define __USERMSR__ 1 +// CHECK_CWF_M64: #define __USERMSR__ 1 // CHECK_SRF_M64: #define __VAES__ 1 // CHECK_SRF_M64: #define __VPCLMULQDQ__ 1 // CHECK_SRF_M64: #define __WAITPKG__ 1 diff --git a/compiler-rt/lib/builtins/cpu_model.c b/compiler-rt/lib/builtins/cpu_model.c index e413a78817766c5..507758d0eaa9b7f 100644 --- a/compiler-rt/lib/builtins/cpu_model.c +++ b/compiler-rt/lib/builtins/cpu_model.c @@ -79,6 +79,7 @@ enum ProcessorTypes { ZHAOXIN_FAM7H, INTEL_SIERRAFOREST, INTEL_GRANDRIDGE, + INTEL_CLEARWATERFOREST, CPU_TYPE_MAX }; @@ -116,6 +117,7 @@ enum ProcessorSubtypes { INTEL_COREI7_GRANITERAPIDS_D, INTEL_COREI7_ARROWLAKE, INTEL_COREI7_ARROWLAKE_S, + INTEL_COREI7_PANTHERLAKE, CPU_SUBTYPE_MAX }; @@ -492,6 +494,13 @@ getIntelProcessorTypeAndSubtype(unsigned Family, unsigned Model, *Subtype = INTEL_COREI7_ARROWLAKE_S; break; + // Pantherlake: + case 0xcc: + CPU = "pantherlake"; + *Type = INTEL_COREI7; + *Subtype = INTEL_COREI7_PANTHERLAKE; + break; + // Icelake Xeon: case 0x6a: case 0x6c: @@ -572,6 +581,12 @@ getIntelProcessorTypeAndSubtype(unsigned Family, unsigned Model, *Type = INTEL_GRANDRIDGE; break; + // Clearwaterforest: + case 0xdd: + CPU = "clearwaterforest"; + *Type = INTEL_COREI7; + *Subtype = INTEL_CLEARWATERFOREST; + case 0x57: CPU = "knl"; *Type = INTEL_KNL; diff --git a/llvm/docs/ReleaseNotes.rst b/llvm/docs/ReleaseNotes.rst index 94b43800c17bd76..bd1bc261d7284ed 100644 --- a/llvm/docs/ReleaseNotes.rst +++ b/llvm/docs/ReleaseNotes.rst @@ -134,6 +134,7 @@ Changes to the X86 Backend with C, but also fixes code generation where LLVM already assumed that the type matched and called into libgcc helper functions. * Support ISA of ``USER_MSR``. +* ``-mcpu=pantherlake`` and ``-mcpu=clearwaterforest`` are now supported. Changes to the OCaml bindings ----------------------------- diff --git a/llvm/include/llvm/TargetParser/X86TargetParser.def b/llvm/include/llvm/TargetParser/X86TargetParser.def index 709ff8603b04276..6b6c84bfc3c4686 100644 --- a/llvm/include/llvm/TargetParser/X86TargetParser.def +++ b/llvm/include/llvm/TargetParser/X86TargetParser.def @@ -48,6 +48,7 @@ X86_CPU_TYPE(AMDFAM19H, "amdfam19h") X86_CPU_TYPE(ZHAOXIN_FAM7H, "zhaoxin_fam7h") X86_CPU_TYPE(INTEL_SIERRAFOREST, "sierraforest") X86_CPU_TYPE(INTEL_GRANDRIDGE, "grandridge") +X86_CPU_TYPE(INTEL_CLEARWATERFOREST, "clearwaterforest") // Alternate names supported by __builtin_cpu_is and target multiversioning. X86_CPU_TYPE_ALIAS(INTEL_BONNELL, "atom") @@ -102,6 +103,7 @@ X86_CPU_SUBTYPE(INTEL_COREI7_GRANITERAPIDS, "graniterapids") X86_CPU_SUBTYPE(INTEL_COREI7_GRANITERAPIDS_D,"graniterapids-d") X86_CPU_SUBTYPE(INTEL_COREI7_ARROWLAKE, "arrowlake") X86_CPU_SUBTYPE(INTEL_COREI7_ARROWLAKE_S, "arrowlake-s") +X86_CPU_SUBTYPE(INTEL_COREI7_PANTHERLAKE, "pantherlake") // Alternate names supported by __builtin_cpu_is and target multiversioning. X86_CPU_SUBTYPE_ALIAS(INTEL_COREI7_ALDERLAKE, "raptorlake") diff --git a/llvm/include/llvm/TargetParser/X86TargetParser.h b/llvm/include/llvm/TargetParser/X86TargetParser.h index d5465647205d1d4..2083e585af4ac85 100644 --- a/llvm/include/llvm/TargetParser/X86TargetParser.h +++ b/llvm/include/llvm/TargetParser/X86TargetParser.h @@ -114,11 +114,13 @@ enum CPUKind { CK_Arrowlake, CK_ArrowlakeS, CK_Lunarlake, + CK_Pantherlake, CK_Sierraforest, CK_Grandridge, CK_Graniterapids, CK_GraniterapidsD, CK_Emeraldrapids, + CK_Clearwaterforest, CK_KNL, CK_KNM, CK_Lakemont, diff --git a/llvm/lib/Target/X86/X86.td b/llvm/lib/Target/X86/X86.td index f3f8d5718dfc20b..8880b05b38783b4 100644 --- a/llvm/lib/Target/X86/X86.td +++ b/llvm/lib/Target/X86/X86.td @@ -1249,6 +1249,18 @@ def ProcessorFeatures { list<SubtargetFeature> ARLSFeatures = !listconcat(SRFFeatures, ARLSAdditionalFeatures); + // Pantherlake + list<SubtargetFeature> PTLAdditionalFeatures = [FeaturePREFETCHI]; + list<SubtargetFeature> PTLFeatures = + !listconcat(ARLSFeatures, PTLAdditionalFeatures); + + + // Clearwaterforest + list<SubtargetFeature> CWFAdditionalFeatures = [FeaturePREFETCHI, + FeatureUSERMSR]; + list<SubtargetFeature> CWFFeatures = + !listconcat(ARLSFeatures, CWFAdditionalFeatures); + // Knights Landing list<SubtargetFeature> KNLFeatures = [FeatureX87, FeatureCX8, @@ -1762,6 +1774,10 @@ foreach P = ["arrowlake-s", "arrowlake_s", "lunarlake"] in { def : ProcModel<P, AlderlakePModel, ProcessorFeatures.ARLSFeatures, ProcessorFeatures.ADLTuning>; } +def : ProcModel<"pantherlake", AlderlakePModel, + ProcessorFeatures.PTLFeatures, ProcessorFeatures.ADLTuning>; +def : ProcModel<"clearwaterforest", AlderlakePModel, + ProcessorFeatures.CWFFeatures, ProcessorFeatures.ADLTuning>; def : ProcModel<"graniterapids", SapphireRapidsModel, ProcessorFeatures.GNRFeatures, ProcessorFeatures.SPRTuning>; def : ProcModel<"emeraldrapids", SapphireRapidsModel, diff --git a/llvm/lib/TargetParser/Host.cpp b/llvm/lib/TargetParser/Host.cpp index b320911d3ce2721..4de95c23e946bea 100644 --- a/llvm/lib/TargetParser/Host.cpp +++ b/llvm/lib/TargetParser/Host.cpp @@ -852,6 +852,13 @@ getIntelProcessorTypeAndSubtype(unsigned Family, unsigned Model, *Subtype = X86::INTEL_COREI7_ARROWLAKE_S; break; + // Pantherlake: + case 0xcc: + CPU = "pantherlake"; + *Type = X86::INTEL_COREI7; + *Subtype = X86::INTEL_COREI7_PANTHERLAKE; + break; + // Graniterapids: case 0xad: CPU = "graniterapids"; @@ -932,6 +939,12 @@ getIntelProcessorTypeAndSubtype(unsigned Family, unsigned Model, *Type = X86::INTEL_GRANDRIDGE; break; + // Clearwaterforest: + case 0xdd: + CPU = "clearwaterforest"; + *Type = X86::INTEL_CLEARWATERFOREST; + break; + // Xeon Phi (Knights Landing + Knights Mill): case 0x57: CPU = "knl"; diff --git a/llvm/lib/TargetParser/X86TargetParser.cpp b/llvm/lib/TargetParser/X86TargetParser.cpp index 94849f915daa181..a4da99b32f63013 100644 --- a/llvm/lib/TargetParser/X86TargetParser.cpp +++ b/llvm/lib/TargetParser/X86TargetParser.cpp @@ -166,6 +166,10 @@ constexpr FeatureBitset FeaturesGrandridge = FeaturesSierraforest | FeatureRAOINT; constexpr FeatureBitset FeaturesArrowlakeS = FeaturesSierraforest | FeatureAVXVNNIINT16 | FeatureSHA512 | FeatureSM3 | FeatureSM4; +constexpr FeatureBitset FeaturesPantherlake = FeaturesArrowlakeS | + FeaturePREFETCHI; +constexpr FeatureBitset FeaturesClearwaterforest = FeaturesArrowlakeS | + FeatureUSERMSR | FeaturePREFETCHI; // Geode Processor. constexpr FeatureBitset FeaturesGeode = @@ -360,6 +364,8 @@ constexpr ProcInfo Processors[] = { { {"lunarlake"}, CK_Lunarlake, FEATURE_AVX2, FeaturesArrowlakeS, 'p', false }, // Gracemont microarchitecture based processors. { {"gracemont"}, CK_Gracemont, FEATURE_AVX2, FeaturesAlderlake, 'p', false }, + // Pantherlake microarchitecture based processors. + { {"pantherlake"}, CK_Lunarlake, FEATURE_AVX2, FeaturesPantherlake, 'p', false }, // Sierraforest microarchitecture based processors. { {"sierraforest"}, CK_Sierraforest, FEATURE_AVX2, FeaturesSierraforest, 'p', false }, // Grandridge microarchitecture based processors. @@ -371,6 +377,8 @@ constexpr ProcInfo Processors[] = { { {"graniterapids_d"}, CK_GraniterapidsD, FEATURE_AVX512BF16, FeaturesGraniteRapids | FeatureAMX_COMPLEX, 'n', true }, // Emerald Rapids microarchitecture based processors. { {"emeraldrapids"}, CK_Emeraldrapids, FEATURE_AVX512BF16, FeaturesSapphireRapids, 'n', false }, + // Clearwaterforest microarchitecture based processors. + { {"clearwaterforest"}, CK_Lunarlake, FEATURE_AVX2, FeaturesClearwaterforest, 'p', false }, // Knights Landing processor. { {"knl"}, CK_KNL, FEATURE_AVX512F, FeaturesKNL, 'Z', false }, { {"mic_avx512"}, CK_KNL, FEATURE_AVX512F, FeaturesKNL, 'Z', true }, diff --git a/llvm/test/CodeGen/X86/cpus-intel.ll b/llvm/test/CodeGen/X86/cpus-intel.ll index 8d4600c638c655a..5e4d09e081fec9c 100644 --- a/llvm/test/CodeGen/X86/cpus-intel.ll +++ b/llvm/test/CodeGen/X86/cpus-intel.ll @@ -37,6 +37,8 @@ ; RUN: llc < %s -o /dev/null -mtriple=i686-unknown-unknown -mcpu=arrowlake_s 2>&1 | FileCheck %s --check-prefix=CHECK-NO-ERROR --allow-empty ; RUN: llc < %s -o /dev/null -mtriple=i686-unknown-unknown -mcpu=lunarlake 2>&1 | FileCheck %s --check-prefix=CHECK-NO-ERROR --allow-empty ; RUN: llc < %s -o /dev/null -mtriple=i686-unknown-unknown -mcpu=gracemont 2>&1 | FileCheck %s --check-prefix=CHECK-NO-ERROR --allow-empty +; RUN: llc < %s -o /dev/null -mtriple=i686-unknown-unknown -mcpu=pantherlake 2>&1 | FileCheck %s --check-prefix=CHECK-NO-ERROR --allow-empty +; RUN: llc < %s -o /dev/null -mtriple=i686-unknown-unknown -mcpu=clearwaterforest 2>&1 | FileCheck %s --check-prefix=CHECK-NO-ERROR --allow-empty ; RUN: llc < %s -o /dev/null -mtriple=x86_64-unknown-unknown -mcpu=nocona 2>&1 | FileCheck %s --check-prefix=CHECK-NO-ERROR --allow-empty ; RUN: llc < %s -o /dev/null -mtriple=x86_64-unknown-unknown -mcpu=core2 2>&1 | FileCheck %s --check-prefix=CHECK-NO-ERROR --allow-empty @@ -100,6 +102,8 @@ ; RUN: llc < %s -o /dev/null -mtriple=x86_64-unknown-unknown -mcpu=arrowlake_s 2>&1 | FileCheck %s --check-prefix=CHECK-NO-ERROR --allow-empty ; RUN: llc < %s -o /dev/null -mtriple=x86_64-unknown-unknown -mcpu=lunarlake 2>&1 | FileCheck %s --check-prefix=CHECK-NO-ERROR --allow-empty ; RUN: llc < %s -o /dev/null -mtriple=x86_64-unknown-unknown -mcpu=gracemont 2>&1 | FileCheck %s --check-prefix=CHECK-NO-ERROR --allow-empty +; RUN: llc < %s -o /dev/null -mtriple=x86_64-unknown-unknown -mcpu=pantherlake 2>&1 | FileCheck %s --check-prefix=CHECK-NO-ERROR --allow-empty +; RUN: llc < %s -o /dev/null -mtriple=x86_64-unknown-unknown -mcpu=clearwaterforest 2>&1 | FileCheck %s --check-prefix=CHECK-NO-ERROR --allow-empty define void @foo() { ret void >From d1f8a0715489d260819fe230841330e652eb4165 Mon Sep 17 00:00:00 2001 From: Freddy Ye <freddy...@intel.com> Date: Tue, 17 Oct 2023 10:36:53 +0800 Subject: [PATCH 2/2] clang-format --- llvm/lib/TargetParser/X86TargetParser.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/llvm/lib/TargetParser/X86TargetParser.cpp b/llvm/lib/TargetParser/X86TargetParser.cpp index a4da99b32f63013..294273e017baa9a 100644 --- a/llvm/lib/TargetParser/X86TargetParser.cpp +++ b/llvm/lib/TargetParser/X86TargetParser.cpp @@ -166,10 +166,10 @@ constexpr FeatureBitset FeaturesGrandridge = FeaturesSierraforest | FeatureRAOINT; constexpr FeatureBitset FeaturesArrowlakeS = FeaturesSierraforest | FeatureAVXVNNIINT16 | FeatureSHA512 | FeatureSM3 | FeatureSM4; -constexpr FeatureBitset FeaturesPantherlake = FeaturesArrowlakeS | - FeaturePREFETCHI; -constexpr FeatureBitset FeaturesClearwaterforest = FeaturesArrowlakeS | - FeatureUSERMSR | FeaturePREFETCHI; +constexpr FeatureBitset FeaturesPantherlake = + FeaturesArrowlakeS | FeaturePREFETCHI; +constexpr FeatureBitset FeaturesClearwaterforest = + FeaturesArrowlakeS | FeatureUSERMSR | FeaturePREFETCHI; // Geode Processor. constexpr FeatureBitset FeaturesGeode = _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits