14 #include "llvm/ADT/StringSwitch.h" 15 #include "llvm/Option/ArgList.h" 16 #include "llvm/Support/Host.h" 20 using namespace clang;
25 if (Arg *A = Args.getLastArg(clang::driver::options::OPT_mcpu_EQ)) {
26 StringRef CPUName = A->getValue();
28 if (CPUName ==
"native") {
29 std::string CPU = llvm::sys::getHostCPUName();
30 if (!CPU.empty() && CPU !=
"generic")
36 return llvm::StringSwitch<const char *>(CPUName)
37 .Case(
"common",
"generic")
45 .Case(
"603ev",
"603ev")
62 .Case(
"e500mc",
"e500mc")
63 .Case(
"e5500",
"e5500")
64 .Case(
"power3",
"pwr3")
65 .Case(
"power4",
"pwr4")
66 .Case(
"power5",
"pwr5")
67 .Case(
"power5x",
"pwr5x")
68 .Case(
"power6",
"pwr6")
69 .Case(
"power6x",
"pwr6x")
70 .Case(
"power7",
"pwr7")
71 .Case(
"power8",
"pwr8")
72 .Case(
"power9",
"pwr9")
73 .Case(
"future",
"future")
77 .Case(
"pwr5x",
"pwr5x")
79 .Case(
"pwr6x",
"pwr6x")
83 .Case(
"powerpc",
"ppc")
84 .Case(
"powerpc64",
"ppc64")
85 .Case(
"powerpc64le",
"ppc64le")
93 return llvm::StringSwitch<const char *>(Name)
94 .Case(
"pwr7",
"-mpower7")
95 .Case(
"power7",
"-mpower7")
96 .Case(
"pwr8",
"-mpower8")
97 .Case(
"power8",
"-mpower8")
98 .Case(
"ppc64le",
"-mpower8")
99 .Case(
"pwr9",
"-mpower9")
100 .Case(
"power9",
"-mpower9")
106 std::vector<StringRef> &Features) {
107 if (Triple.getSubArch() == llvm::Triple::PPCSubArch_spe)
108 Features.push_back(
"+spe");
114 Features.push_back(
"-hard-float");
118 Features.push_back(
"+secure-plt");
122 const ArgList &Args) {
123 if (Args.getLastArg(options::OPT_msecure_plt))
125 if ((Triple.isOSFreeBSD() && Triple.getOSMajorVersion() >= 13) ||
126 Triple.isOSNetBSD() || Triple.isOSOpenBSD() || Triple.isMusl())
135 Args.getLastArg(options::OPT_msoft_float, options::OPT_mhard_float,
136 options::OPT_mfloat_abi_EQ)) {
137 if (A->getOption().matches(options::OPT_msoft_float))
139 else if (A->getOption().matches(options::OPT_mhard_float))
142 ABI = llvm::StringSwitch<ppc::FloatABI>(A->getValue())
147 D.
Diag(clang::diag::err_drv_invalid_mfloat_abi) << A->getAsString(Args);
162 Arg *A = Args.getLastArg(options::OPT_mabi_EQ);
163 return A && (A->getValue() == StringRef(Value));
DiagnosticBuilder Diag(unsigned DiagID) const
Driver - Encapsulate logic for constructing compilation processes from a set of gcc-driver-like comma...
Dataflow Directional Tag Classes.