r276958 - [AArch64] Using AArch64TargetParser in Clang.
Zijiao Ma via cfe-commits
cfe-commits at lists.llvm.org
Wed Jul 27 23:24:48 PDT 2016
Author: zijiaoma
Date: Thu Jul 28 01:24:48 2016
New Revision: 276958
URL: http://llvm.org/viewvc/llvm-project?rev=276958&view=rev
Log:
[AArch64] Using AArch64TargetParser in Clang.
This resubmit r270688 which broke some specific buildbots.That's because
there is incorrect indexing problem in the targetparser,and the problem is
fixed in r276957.
Differential Revision: https://reviews.llvm.org/D21277
Modified:
cfe/trunk/lib/Basic/Targets.cpp
cfe/trunk/lib/Driver/Tools.cpp
Modified: cfe/trunk/lib/Basic/Targets.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets.cpp?rev=276958&r1=276957&r2=276958&view=diff
==============================================================================
--- cfe/trunk/lib/Basic/Targets.cpp (original)
+++ cfe/trunk/lib/Basic/Targets.cpp Thu Jul 28 01:24:48 2016
@@ -5726,19 +5726,9 @@ public:
}
bool setCPU(const std::string &Name) override {
- bool CPUKnown = llvm::StringSwitch<bool>(Name)
- .Case("cortex-a35", true)
- .Case("cortex-a53", true)
- .Case("cortex-a57", true)
- .Case("cortex-a72", true)
- .Case("cortex-a73", true)
- .Case("cyclone", true)
- .Case("exynos-m1", true)
- .Case("generic", true)
- .Case("kryo", true)
- .Case("vulcan", true)
- .Default(false);
- return CPUKnown;
+ return Name == "generic" ||
+ llvm::AArch64::parseCPUArch(Name) !=
+ static_cast<unsigned>(llvm::AArch64::ArchKind::AK_INVALID);
}
void getTargetDefines(const LangOptions &Opts,
Modified: cfe/trunk/lib/Driver/Tools.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=276958&r1=276957&r2=276958&view=diff
==============================================================================
--- cfe/trunk/lib/Driver/Tools.cpp (original)
+++ cfe/trunk/lib/Driver/Tools.cpp Thu Jul 28 01:24:48 2016
@@ -2340,24 +2340,8 @@ static bool DecodeAArch64Features(const
text.split(Split, StringRef("+"), -1, false);
for (StringRef Feature : Split) {
- const char *result = llvm::StringSwitch<const char *>(Feature)
- .Case("fp", "+fp-armv8")
- .Case("simd", "+neon")
- .Case("crc", "+crc")
- .Case("crypto", "+crypto")
- .Case("fp16", "+fullfp16")
- .Case("profile", "+spe")
- .Case("ras", "+ras")
- .Case("nofp", "-fp-armv8")
- .Case("nosimd", "-neon")
- .Case("nocrc", "-crc")
- .Case("nocrypto", "-crypto")
- .Case("nofp16", "-fullfp16")
- .Case("noprofile", "-spe")
- .Case("noras", "-ras")
- .Default(nullptr);
- if (result)
- Features.push_back(result);
+ if (const char *FeatureName = llvm::AArch64::getArchExtFeature(Feature))
+ Features.push_back(FeatureName);
else if (Feature == "neon" || Feature == "noneon")
D.Diag(diag::err_drv_no_neon_modifier);
else
@@ -2372,20 +2356,16 @@ static bool DecodeAArch64Mcpu(const Driv
std::vector<const char *> &Features) {
std::pair<StringRef, StringRef> Split = Mcpu.split("+");
CPU = Split.first;
- if (CPU == "cortex-a53" || CPU == "cortex-a57" ||
- CPU == "cortex-a72" || CPU == "cortex-a35" || CPU == "exynos-m1" ||
- CPU == "kryo" || CPU == "cortex-a73" || CPU == "vulcan") {
- Features.push_back("+neon");
- Features.push_back("+crc");
- Features.push_back("+crypto");
- } else if (CPU == "cyclone") {
- Features.push_back("+neon");
- Features.push_back("+crypto");
- } else if (CPU == "generic") {
+
+ if (CPU == "generic") {
Features.push_back("+neon");
} else {
- return false;
- }
+ unsigned ArchKind = llvm::AArch64::parseCPUArch(CPU);
+ unsigned Extersion = llvm::AArch64::getDefaultExtensions(CPU, ArchKind);
+
+ if (!llvm::AArch64::getExtensionFeatures(Extersion, Features))
+ return false;
+ }
if (Split.second.size() && !DecodeAArch64Features(D, Split.second, Features))
return false;
@@ -2400,17 +2380,10 @@ getAArch64ArchFeaturesFromMarch(const Dr
std::string MarchLowerCase = March.lower();
std::pair<StringRef, StringRef> Split = StringRef(MarchLowerCase).split("+");
- if (Split.first == "armv8-a" || Split.first == "armv8a") {
- // ok, no additional features.
- } else if (Split.first == "armv8.1-a" || Split.first == "armv8.1a") {
- Features.push_back("+v8.1a");
- } else if (Split.first == "armv8.2-a" || Split.first == "armv8.2a" ) {
- Features.push_back("+v8.2a");
- } else {
- return false;
- }
-
- if (Split.second.size() && !DecodeAArch64Features(D, Split.second, Features))
+ unsigned ArchKind = llvm::AArch64::parseArch(Split.first);
+ if (ArchKind == static_cast<unsigned>(llvm::AArch64::ArchKind::AK_INVALID) ||
+ !llvm::AArch64::getArchFeatures(ArchKind, Features) ||
+ (Split.second.size() && !DecodeAArch64Features(D, Split.second, Features)))
return false;
return true;
More information about the cfe-commits
mailing list