Skip to content

Commit 405639a

Browse files
author
Chen Zheng
committed
[PowerPC] add TargetParser for PPC target
For now only focus on the CPU type, will work on the CPU features part later.
1 parent 6a992bc commit 405639a

File tree

12 files changed

+250
-113
lines changed

12 files changed

+250
-113
lines changed

clang/lib/Basic/Targets/PPC.cpp

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#include "clang/Basic/Diagnostic.h"
1515
#include "clang/Basic/MacroBuilder.h"
1616
#include "clang/Basic/TargetBuiltins.h"
17+
#include "llvm/TargetParser/PPCTargetParser.h"
1718

1819
using namespace clang;
1920
using namespace clang::targets;
@@ -866,25 +867,12 @@ ArrayRef<TargetInfo::AddlRegName> PPCTargetInfo::getGCCAddlRegNames() const {
866867
return llvm::ArrayRef(GCCAddlRegNames);
867868
}
868869

869-
static constexpr llvm::StringLiteral ValidCPUNames[] = {
870-
{"generic"}, {"440"}, {"450"}, {"601"}, {"602"},
871-
{"603"}, {"603e"}, {"603ev"}, {"604"}, {"604e"},
872-
{"620"}, {"630"}, {"g3"}, {"7400"}, {"g4"},
873-
{"7450"}, {"g4+"}, {"750"}, {"8548"}, {"970"},
874-
{"g5"}, {"a2"}, {"e500"}, {"e500mc"}, {"e5500"},
875-
{"power3"}, {"pwr3"}, {"power4"}, {"pwr4"}, {"power5"},
876-
{"pwr5"}, {"power5x"}, {"pwr5x"}, {"power6"}, {"pwr6"},
877-
{"power6x"}, {"pwr6x"}, {"power7"}, {"pwr7"}, {"power8"},
878-
{"pwr8"}, {"power9"}, {"pwr9"}, {"power10"}, {"pwr10"},
879-
{"powerpc"}, {"ppc"}, {"ppc32"}, {"powerpc64"}, {"ppc64"},
880-
{"powerpc64le"}, {"ppc64le"}, {"future"}};
881-
882870
bool PPCTargetInfo::isValidCPUName(StringRef Name) const {
883-
return llvm::is_contained(ValidCPUNames, Name);
871+
return llvm::PPC::isValidCPU(Name);
884872
}
885873

886874
void PPCTargetInfo::fillValidCPUList(SmallVectorImpl<StringRef> &Values) const {
887-
Values.append(std::begin(ValidCPUNames), std::end(ValidCPUNames));
875+
llvm::PPC::fillValidCPUList(Values);
888876
}
889877

890878
void PPCTargetInfo::adjust(DiagnosticsEngine &Diags, LangOptions &Opts) {

clang/lib/Driver/ToolChains/Arch/PPC.cpp

Lines changed: 0 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -20,78 +20,6 @@ using namespace clang::driver::tools;
2020
using namespace clang;
2121
using namespace llvm::opt;
2222

23-
static std::string getPPCGenericTargetCPU(const llvm::Triple &T) {
24-
// LLVM may default to generating code for the native CPU,
25-
// but, like gcc, we default to a more generic option for
26-
// each architecture. (except on AIX)
27-
if (T.isOSAIX())
28-
return "pwr7";
29-
else if (T.getArch() == llvm::Triple::ppc64le)
30-
return "ppc64le";
31-
else if (T.getArch() == llvm::Triple::ppc64)
32-
return "ppc64";
33-
else
34-
return "ppc";
35-
}
36-
37-
static std::string normalizeCPUName(StringRef CPUName, const llvm::Triple &T) {
38-
// Clang/LLVM does not actually support code generation
39-
// for the 405 CPU. However, there are uses of this CPU ID
40-
// in projects that previously used GCC and rely on Clang
41-
// accepting it. Clang has always ignored it and passed the
42-
// generic CPU ID to the back end.
43-
if (CPUName == "generic" || CPUName == "405")
44-
return getPPCGenericTargetCPU(T);
45-
46-
if (CPUName == "native") {
47-
std::string CPU = std::string(llvm::sys::getHostCPUName());
48-
if (!CPU.empty() && CPU != "generic")
49-
return CPU;
50-
else
51-
return getPPCGenericTargetCPU(T);
52-
}
53-
54-
return llvm::StringSwitch<const char *>(CPUName)
55-
.Case("common", "generic")
56-
.Case("440fp", "440")
57-
.Case("630", "pwr3")
58-
.Case("G3", "g3")
59-
.Case("G4", "g4")
60-
.Case("G4+", "g4+")
61-
.Case("8548", "e500")
62-
.Case("G5", "g5")
63-
.Case("power3", "pwr3")
64-
.Case("power4", "pwr4")
65-
.Case("power5", "pwr5")
66-
.Case("power5x", "pwr5x")
67-
.Case("power6", "pwr6")
68-
.Case("power6x", "pwr6x")
69-
.Case("power7", "pwr7")
70-
.Case("power8", "pwr8")
71-
.Case("power9", "pwr9")
72-
.Case("power10", "pwr10")
73-
.Case("future", "future")
74-
.Case("powerpc", "ppc")
75-
.Case("powerpc64", "ppc64")
76-
.Case("powerpc64le", "ppc64le")
77-
.Default(CPUName.data());
78-
}
79-
80-
/// Get the (LLVM) name of the PowerPC cpu we are tuning for.
81-
std::string ppc::getPPCTuneCPU(const ArgList &Args, const llvm::Triple &T) {
82-
if (Arg *A = Args.getLastArg(clang::driver::options::OPT_mtune_EQ))
83-
return normalizeCPUName(A->getValue(), T);
84-
return getPPCGenericTargetCPU(T);
85-
}
86-
87-
/// Get the (LLVM) name of the PowerPC cpu we are targeting.
88-
std::string ppc::getPPCTargetCPU(const Driver &D, const ArgList &Args,
89-
const llvm::Triple &T) {
90-
if (Arg *A = Args.getLastArg(clang::driver::options::OPT_mcpu_EQ))
91-
return normalizeCPUName(A->getValue(), T);
92-
return getPPCGenericTargetCPU(T);
93-
}
94-
9523
const char *ppc::getPPCAsmModeForCPU(StringRef Name) {
9624
return llvm::StringSwitch<const char *>(Name)
9725
.Case("pwr7", "-mpower7")

clang/lib/Driver/ToolChains/Arch/PPC.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,6 @@ enum class ReadGOTPtrMode {
3535

3636
FloatABI getPPCFloatABI(const Driver &D, const llvm::opt::ArgList &Args);
3737

38-
std::string getPPCTargetCPU(const Driver &D, const llvm::opt::ArgList &Args,
39-
const llvm::Triple &T);
40-
std::string getPPCTuneCPU(const llvm::opt::ArgList &Args,
41-
const llvm::Triple &T);
4238
const char *getPPCAsmModeForCPU(StringRef Name);
4339
ReadGOTPtrMode getPPCReadGOTPtrMode(const Driver &D, const llvm::Triple &Triple,
4440
const llvm::opt::ArgList &Args);

clang/lib/Driver/ToolChains/Clang.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
#include "llvm/TargetParser/ARMTargetParserCommon.h"
6161
#include "llvm/TargetParser/Host.h"
6262
#include "llvm/TargetParser/LoongArchTargetParser.h"
63+
#include "llvm/TargetParser/PPCTargetParser.h"
6364
#include "llvm/TargetParser/RISCVISAInfo.h"
6465
#include "llvm/TargetParser/RISCVTargetParser.h"
6566
#include <cctype>
@@ -1963,8 +1964,11 @@ void Clang::AddPPCTargetArgs(const ArgList &Args,
19631964
const llvm::Triple &T = getToolChain().getTriple();
19641965
if (Args.getLastArg(options::OPT_mtune_EQ)) {
19651966
CmdArgs.push_back("-tune-cpu");
1966-
std::string CPU = ppc::getPPCTuneCPU(Args, T);
1967-
CmdArgs.push_back(Args.MakeArgString(CPU));
1967+
StringRef CPU = "";
1968+
if (Arg *A = Args.getLastArg(clang::driver::options::OPT_mtune_EQ))
1969+
CPU = A->getValue();
1970+
CPU = llvm::PPC::getPPCGenericTuneCPU(T, CPU);
1971+
CmdArgs.push_back(Args.MakeArgString(CPU.str()));
19681972
}
19691973

19701974
// Select the ABI to use.

clang/lib/Driver/ToolChains/CommonArgs.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@
6464
#include "llvm/Support/VirtualFileSystem.h"
6565
#include "llvm/Support/YAMLParser.h"
6666
#include "llvm/TargetParser/Host.h"
67+
#include "llvm/TargetParser/PPCTargetParser.h"
6768
#include "llvm/TargetParser/TargetParser.h"
6869
#include <optional>
6970

@@ -629,7 +630,9 @@ std::string tools::getCPUName(const Driver &D, const ArgList &Args,
629630
case llvm::Triple::ppcle:
630631
case llvm::Triple::ppc64:
631632
case llvm::Triple::ppc64le:
632-
return ppc::getPPCTargetCPU(D, Args, T);
633+
if (Arg *A = Args.getLastArg(clang::driver::options::OPT_mcpu_EQ))
634+
return std::string(llvm::PPC::getPPCGenericTargetCPU(T, A->getValue()));
635+
return std::string(llvm::PPC::getPPCGenericTargetCPU(T));
633636

634637
case llvm::Triple::csky:
635638
if (const Arg *A = Args.getLastArg(options::OPT_mcpu_EQ))

clang/test/CodeGen/aix-builtin-cpu-is.c

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,60 @@
1-
// RUN: echo "int main() { return __builtin_cpu_is(\"ppc970\");}" > %t.c
1+
// RUN: echo "int main() { return __builtin_cpu_is(\"ppc970\");}" > %t.c
22
// RUN: %clang_cc1 -triple powerpc-ibm-aix7.2.0.0 -emit-llvm -o - %t.c | FileCheck %s
33

4-
// RUN: echo "int main() { return __builtin_cpu_is(\"ppc-cell-be\");}" > %t.c
4+
// RUN: echo "int main() { return __builtin_cpu_is(\"ppc-cell-be\");}" > %t.c
55
// RUN: %clang_cc1 -triple powerpc-ibm-aix7.2.0.0 -emit-llvm -o - %t.c | FileCheck %s
66

7-
// RUN: echo "int main() { return __builtin_cpu_is(\"ppca2\");}" > %t.c
7+
// RUN: echo "int main() { return __builtin_cpu_is(\"ppca2\");}" > %t.c
88
// RUN: %clang_cc1 -triple powerpc-ibm-aix7.2.0.0 -emit-llvm -o - %t.c | FileCheck %s
99

10-
// RUN: echo "int main() { return __builtin_cpu_is(\"ppc405\");}" > %t.c
10+
// RUN: echo "int main() { return __builtin_cpu_is(\"ppc405\");}" > %t.c
1111
// RUN: %clang_cc1 -triple powerpc-ibm-aix7.2.0.0 -emit-llvm -o - %t.c | FileCheck %s
1212

13-
// RUN: echo "int main() { return __builtin_cpu_is(\"ppc440\");}" > %t.c
13+
// RUN: echo "int main() { return __builtin_cpu_is(\"ppc440\");}" > %t.c
1414
// RUN: %clang_cc1 -triple powerpc-ibm-aix7.2.0.0 -emit-llvm -o - %t.c | FileCheck %s
1515

16-
// RUN: echo "int main() { return __builtin_cpu_is(\"ppc464\");}" > %t.c
16+
// RUN: echo "int main() { return __builtin_cpu_is(\"ppc464\");}" > %t.c
1717
// RUN: %clang_cc1 -triple powerpc-ibm-aix7.2.0.0 -emit-llvm -o - %t.c | FileCheck %s
1818

19-
// RUN: echo "int main() { return __builtin_cpu_is(\"ppc476\");}" > %t.c
19+
// RUN: echo "int main() { return __builtin_cpu_is(\"ppc476\");}" > %t.c
2020
// RUN: %clang_cc1 -triple powerpc-ibm-aix7.2.0.0 -emit-llvm -o - %t.c | FileCheck %s
2121

22-
// RUN: echo "int main() { return __builtin_cpu_is(\"power4\");}" > %t.c
22+
// RUN: echo "int main() { return __builtin_cpu_is(\"power4\");}" > %t.c
2323
// RUN: %clang_cc1 -triple powerpc-ibm-aix7.2.0.0 -emit-llvm -o - %t.c | FileCheck %s
2424

25-
// RUN: echo "int main() { return __builtin_cpu_is(\"power5\");}" > %t.c
25+
// RUN: echo "int main() { return __builtin_cpu_is(\"power5\");}" > %t.c
2626
// RUN: %clang_cc1 -triple powerpc-ibm-aix7.2.0.0 -emit-llvm -o - %t.c | FileCheck %s
2727

28-
// RUN: echo "int main() { return __builtin_cpu_is(\"power5+\");}" > %t.c
28+
// RUN: echo "int main() { return __builtin_cpu_is(\"power5+\");}" > %t.c
2929
// RUN: %clang_cc1 -triple powerpc-ibm-aix7.2.0.0 -emit-llvm -o - %t.c | FileCheck %s
3030

31-
// RUN: echo "int main() { return __builtin_cpu_is(\"power6\");}" > %t.c
31+
// RUN: echo "int main() { return __builtin_cpu_is(\"power6\");}" > %t.c
3232
// RUN: %clang_cc1 -triple powerpc-ibm-aix7.2.0.0 -emit-llvm -o - %t.c | FileCheck %s
3333

34-
// RUN: echo "int main() { return __builtin_cpu_is(\"power6x\");}" > %t.c
34+
// RUN: echo "int main() { return __builtin_cpu_is(\"power6x\");}" > %t.c
3535
// RUN: %clang_cc1 -triple powerpc-ibm-aix7.2.0.0 -emit-llvm -o - %t.c | FileCheck %s
3636

37-
// RUN: echo "int main() { return __builtin_cpu_is(\"power7\");}" > %t.c
37+
// RUN: echo "int main() { return __builtin_cpu_is(\"power7\");}" > %t.c
3838
// RUN: %clang_cc1 -triple powerpc-ibm-aix7.2.0.0 -emit-llvm -o - %t.c | FileCheck %s -DVALUE=32768 \
3939
// RUN: --check-prefix=CHECKOP
4040

41-
// RUN: echo "int main() { return __builtin_cpu_is(\"power8\");}" > %t.c
41+
// RUN: echo "int main() { return __builtin_cpu_is(\"pwr7\");}" > %t.c
42+
// RUN: %clang_cc1 -triple powerpc-ibm-aix7.2.0.0 -emit-llvm -o - %t.c | FileCheck %s -DVALUE=32768 \
43+
// RUN: --check-prefix=CHECKOP
44+
45+
// RUN: echo "int main() { return __builtin_cpu_is(\"power8\");}" > %t.c
4246
// RUN: %clang_cc1 -triple powerpc-ibm-aix7.2.0.0 -emit-llvm -o - %t.c | FileCheck %s -DVALUE=65536 \
4347
// RUN: --check-prefix=CHECKOP
4448

45-
// RUN: echo "int main() { return __builtin_cpu_is(\"power9\");}" > %t.c
49+
// RUN: echo "int main() { return __builtin_cpu_is(\"power9\");}" > %t.c
4650
// RUN: %clang_cc1 -triple powerpc-ibm-aix7.2.0.0 -emit-llvm -o - %t.c | FileCheck %s -DVALUE=131072\
4751
// RUN: --check-prefix=CHECKOP
4852

49-
// RUN: echo "int main() { return __builtin_cpu_is(\"power10\");}" > %t.c
53+
// RUN: echo "int main() { return __builtin_cpu_is(\"power10\");}" > %t.c
54+
// RUN: %clang_cc1 -triple powerpc-ibm-aix7.2.0.0 -emit-llvm -o - %t.c | FileCheck %s -DVALUE=262144 \
55+
// RUN: --check-prefix=CHECKOP
56+
57+
// RUN: echo "int main() { return __builtin_cpu_is(\"pwr10\");}" > %t.c
5058
// RUN: %clang_cc1 -triple powerpc-ibm-aix7.2.0.0 -emit-llvm -o - %t.c | FileCheck %s -DVALUE=262144 \
5159
// RUN: --check-prefix=CHECKOP
5260

@@ -63,7 +71,7 @@
6371
// CHECKOP-NEXT: %retval = alloca i32, align 4
6472
// CHECKOP-NEXT: store i32 0, ptr %retval, align 4
6573
// CHECKOP-NEXT: %0 = load i32, ptr getelementptr inbounds ({ i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i64, i32, i32, i32, i32, i64, i64, i64, i64, i32, i32, i32, i32, i32, i32, i64, i32, i8, i8, i8, i8, i32, i32, i16, i16, [3 x i32], i32 }, ptr @_system_configuration, i32 0, i32 1), align 4
66-
// CHECKOP-NEXT: %1 = icmp eq i32 %0, [[VALUE]]
74+
// CHECKOP-NEXT: %1 = icmp eq i32 %0, [[VALUE]]
6775
// CHECKOP-NEXT: %conv = zext i1 %1 to i32
6876
// CHECKOP-NEXT: ret i32 %conv
6977
// CHECKOP-NEXT: }

clang/test/Misc/target-invalid-cpu-note.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@
5757

5858
// RUN: not %clang_cc1 -triple powerpc--- -target-cpu not-a-cpu -fsyntax-only %s 2>&1 | FileCheck %s --check-prefix PPC
5959
// PPC: error: unknown target CPU 'not-a-cpu'
60-
// PPC-NEXT: note: valid target CPU values are: generic, 440, 450, 601, 602, 603, 603e, 603ev, 604, 604e, 620, 630, g3, 7400, g4, 7450, g4+, 750, 8548, 970, g5, a2, e500, e500mc, e5500, power3, pwr3, power4, pwr4, power5, pwr5, power5x, pwr5x, power6, pwr6, power6x, pwr6x, power7, pwr7, power8, pwr8, power9, pwr9, power10, pwr10, powerpc, ppc, ppc32, powerpc64, ppc64, powerpc64le, ppc64le, future{{$}}
60+
// PPC-NEXT: note: valid target CPU values are: generic, 440, 440fp, 450, 601, 602, 603, 603e, 603ev, 604, 604e, 620, 630, g3, 7400, g4, 7450, g4+, 750, 8548, 970, g5, a2, e500, e500mc, e5500, power3, pwr3, pwr4, pwr5, pwr5+, power5x, pwr5x, pwr6, pwr6x, pwr7, pwr8, pwr9, pwr10, powerpc, ppc, ppc32, powerpc64, ppc64, powerpc64le, ppc64le, future, power4, ppc970, power5, power5+, power6, ppc-cell-be, power6x, power7, ppca2, ppc405, ppc440, ppc464, ppc476, power8, power9, power10{{$}}
6161

6262
// RUN: not %clang_cc1 -triple mips--- -target-cpu not-a-cpu -fsyntax-only %s 2>&1 | FileCheck %s --check-prefix MIPS
6363
// MIPS: error: unknown target CPU 'not-a-cpu'

llvm/include/llvm/TargetParser/PPCTargetParser.def

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,59 @@
8585
#define AIX_PPC9_VALUE 0x00020000
8686
#define AIX_PPC10_VALUE 0x00040000
8787

88-
// __builtin_cpu_is() and __builtin_cpu_supports() are supported only on Power7 and up on AIX.
8988
// PPC_CPU(Name, Linux_SUPPORT_METHOD, LinuxID, AIX_SUPPORT_METHOD, AIXID)
89+
90+
// Valid CPUs not supported by __builtin_cpu_is()
91+
PPC_CPU("generic",BUILTIN_PPC_FALSE,0,BUILTIN_PPC_FALSE,0)
92+
PPC_CPU("440",SYS_CALL,42,BUILTIN_PPC_FALSE,0)
93+
PPC_CPU("440fp",SYS_CALL,42,BUILTIN_PPC_FALSE,0)
94+
PPC_CPU("450",BUILTIN_PPC_FALSE,0,BUILTIN_PPC_FALSE,0)
95+
PPC_CPU("601",BUILTIN_PPC_FALSE,0,BUILTIN_PPC_FALSE,0)
96+
PPC_CPU("602",BUILTIN_PPC_FALSE,0,BUILTIN_PPC_FALSE,0)
97+
PPC_CPU("603",BUILTIN_PPC_FALSE,0,BUILTIN_PPC_FALSE,0)
98+
PPC_CPU("603e",BUILTIN_PPC_FALSE,0,BUILTIN_PPC_FALSE,0)
99+
PPC_CPU("603ev",BUILTIN_PPC_FALSE,0,BUILTIN_PPC_FALSE,0)
100+
PPC_CPU("604",BUILTIN_PPC_FALSE,0,BUILTIN_PPC_FALSE,0)
101+
PPC_CPU("604e",BUILTIN_PPC_FALSE,0,BUILTIN_PPC_FALSE,0)
102+
PPC_CPU("620",BUILTIN_PPC_FALSE,0,BUILTIN_PPC_FALSE,0)
103+
PPC_CPU("630",BUILTIN_PPC_FALSE,0,BUILTIN_PPC_FALSE,0)
104+
PPC_CPU("g3",BUILTIN_PPC_FALSE,0,BUILTIN_PPC_FALSE,0)
105+
PPC_CPU("7400",BUILTIN_PPC_FALSE,0,BUILTIN_PPC_FALSE,0)
106+
PPC_CPU("g4",BUILTIN_PPC_FALSE,0,BUILTIN_PPC_FALSE,0)
107+
PPC_CPU("7450",BUILTIN_PPC_FALSE,0,BUILTIN_PPC_FALSE,0)
108+
PPC_CPU("g4+",BUILTIN_PPC_FALSE,0,BUILTIN_PPC_FALSE,0)
109+
PPC_CPU("750",BUILTIN_PPC_FALSE,0,BUILTIN_PPC_FALSE,0)
110+
PPC_CPU("8548",BUILTIN_PPC_FALSE,0,BUILTIN_PPC_FALSE,0)
111+
PPC_CPU("970",SYS_CALL,33,BUILTIN_PPC_FALSE,0)
112+
PPC_CPU("g5",BUILTIN_PPC_FALSE,0,BUILTIN_PPC_FALSE,0)
113+
PPC_CPU("a2",SYS_CALL,40,BUILTIN_PPC_FALSE,0)
114+
PPC_CPU("e500",BUILTIN_PPC_FALSE,0,BUILTIN_PPC_FALSE,0)
115+
PPC_CPU("e500mc",BUILTIN_PPC_FALSE,0,BUILTIN_PPC_FALSE,0)
116+
PPC_CPU("e5500",BUILTIN_PPC_FALSE,0,BUILTIN_PPC_FALSE,0)
117+
PPC_CPU("power3",BUILTIN_PPC_FALSE,0,BUILTIN_PPC_FALSE,0)
118+
PPC_CPU("pwr3",BUILTIN_PPC_FALSE,0,BUILTIN_PPC_FALSE,0)
119+
PPC_CPU("pwr4",SYS_CALL,32,BUILTIN_PPC_FALSE,0)
120+
PPC_CPU("pwr5",SYS_CALL,34,BUILTIN_PPC_FALSE,0)
121+
PPC_CPU("pwr5+",SYS_CALL,35,BUILTIN_PPC_FALSE,0)
122+
PPC_CPU("power5x",BUILTIN_PPC_FALSE,0,BUILTIN_PPC_FALSE,0)
123+
PPC_CPU("pwr5x",BUILTIN_PPC_FALSE,0,BUILTIN_PPC_FALSE,0)
124+
PPC_CPU("pwr6",SYS_CALL,36,BUILTIN_PPC_FALSE,0)
125+
PPC_CPU("pwr6x",SYS_CALL,38,BUILTIN_PPC_FALSE,0)
126+
PPC_CPU("pwr7",SYS_CALL,39,USE_SYS_CONF,AIX_PPC7_VALUE)
127+
PPC_CPU("pwr8",SYS_CALL,45,USE_SYS_CONF,AIX_PPC8_VALUE)
128+
PPC_CPU("pwr9",SYS_CALL,46,USE_SYS_CONF,AIX_PPC9_VALUE)
129+
PPC_CPU("pwr10",SYS_CALL,47,USE_SYS_CONF,AIX_PPC10_VALUE)
130+
PPC_CPU("powerpc",BUILTIN_PPC_FALSE,0,BUILTIN_PPC_FALSE,0)
131+
PPC_CPU("ppc",BUILTIN_PPC_FALSE,0,BUILTIN_PPC_FALSE,0)
132+
PPC_CPU("ppc32",BUILTIN_PPC_FALSE,0,BUILTIN_PPC_FALSE,0)
133+
PPC_CPU("powerpc64",BUILTIN_PPC_FALSE,0,BUILTIN_PPC_FALSE,0)
134+
PPC_CPU("ppc64",BUILTIN_PPC_FALSE,0,BUILTIN_PPC_FALSE,0)
135+
PPC_CPU("powerpc64le",BUILTIN_PPC_FALSE,0,BUILTIN_PPC_FALSE,0)
136+
PPC_CPU("ppc64le",BUILTIN_PPC_FALSE,0,BUILTIN_PPC_FALSE,0)
137+
PPC_CPU("future",BUILTIN_PPC_FALSE,0,BUILTIN_PPC_FALSE,0)
138+
139+
// __builtin_cpu_is() and __builtin_cpu_supports() are supported only on Power7 and up on AIX.
140+
// CPUs supported by __builtin_cpu_is().
90141
PPC_CPU("power4",SYS_CALL,32,BUILTIN_PPC_FALSE,0)
91142
PPC_CPU("ppc970",SYS_CALL,33,BUILTIN_PPC_FALSE,0)
92143
PPC_CPU("power5",SYS_CALL,34,BUILTIN_PPC_FALSE,0)
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
//===---- PPCTargetParser - Parser for target features ----------*- C++ -*-===//
2+
//
3+
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4+
// See https://llvm.org/LICENSE.txt for license information.
5+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
//
7+
//===----------------------------------------------------------------------===//
8+
//
9+
// This file implements a target parser to recognise hardware features
10+
// for PPC CPUs.
11+
//
12+
//===----------------------------------------------------------------------===//
13+
14+
#ifndef LLVM_TARGETPARSER_PPCTARGETPARSER_H
15+
#define LLVM_TARGETPARSER_PPCTARGETPARSER_H
16+
17+
#include "llvm/ADT/StringRef.h"
18+
#include "llvm/TargetParser/Triple.h"
19+
20+
namespace llvm {
21+
namespace PPC {
22+
bool isValidCPU(StringRef CPU);
23+
void fillValidCPUList(SmallVectorImpl<StringRef> &Values);
24+
void fillValidTuneCPUList(SmallVectorImpl<StringRef> &Values);
25+
26+
// Get default target CPU for PPC.
27+
StringRef getPPCGenericTargetCPU(const Triple &T, StringRef CPUName = "");
28+
// Get default tune CPU for PPC.
29+
StringRef getPPCGenericTuneCPU(const Triple &T, StringRef CPUName = "");
30+
31+
// For PPC, there are some cpu names for same CPU, like pwr10 and power10,
32+
// normalize them.
33+
StringRef normalizeCPUName(StringRef CPUName);
34+
} // namespace PPC
35+
} // namespace llvm
36+
37+
#endif

llvm/lib/TargetParser/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ add_llvm_component_library(LLVMTargetParser
2020
CSKYTargetParser.cpp
2121
Host.cpp
2222
LoongArchTargetParser.cpp
23+
PPCTargetParser.cpp
2324
RISCVISAInfo.cpp
2425
RISCVTargetParser.cpp
2526
SubtargetFeature.cpp

0 commit comments

Comments
 (0)