diff options
author | Renato Golin <renato.golin@linaro.org> | 2016-05-25 12:36:31 +0000 |
---|---|---|
committer | Renato Golin <renato.golin@linaro.org> | 2016-05-25 12:36:31 +0000 |
commit | 3b8709c58375518dcfdf5a1c1fbf9e2590b8dc39 (patch) | |
tree | 8b89b08e7bc58e88b24a5c94ca6e47a77561764c | |
parent | 8b42706a6eaf5dda91e8b2fe81c9bce39893cca4 (diff) | |
download | bcm5719-llvm-3b8709c58375518dcfdf5a1c1fbf9e2590b8dc39.tar.gz bcm5719-llvm-3b8709c58375518dcfdf5a1c1fbf9e2590b8dc39.zip |
Revert "[AArch64] Using new TargetParser in Clang"
This reverts commit r270688 and r270689. The issue is not a random order, but a
different order for some targets and others (prob. Linux vs Darwin). Reverting until
we have a better fix.
llvm-svn: 270691
-rw-r--r-- | clang/lib/Basic/Targets.cpp | 12 | ||||
-rw-r--r-- | clang/lib/Driver/Tools.cpp | 54 | ||||
-rw-r--r-- | clang/test/Preprocessor/aarch64-target-features.c | 5 |
3 files changed, 48 insertions, 23 deletions
diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp index 059dd62aea1..4d06ebb724b 100644 --- a/clang/lib/Basic/Targets.cpp +++ b/clang/lib/Basic/Targets.cpp @@ -5665,10 +5665,14 @@ public: } bool setCPU(const std::string &Name) override { - if (Name == "generic" || llvm::AArch64::parseCPUArch(Name) != llvm::ARM::AK_INVALID) - return true; - - return false; + bool CPUKnown = llvm::StringSwitch<bool>(Name) + .Case("generic", true) + .Cases("cortex-a53", "cortex-a57", "cortex-a72", + "cortex-a35", "exynos-m1", true) + .Case("cyclone", true) + .Case("kryo", true) + .Default(false); + return CPUKnown; } void getTargetDefines(const LangOptions &Opts, diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp index f4d234907f2..7c363e0d9ef 100644 --- a/clang/lib/Driver/Tools.cpp +++ b/clang/lib/Driver/Tools.cpp @@ -2262,9 +2262,22 @@ static bool DecodeAArch64Features(const Driver &D, StringRef text, text.split(Split, StringRef("+"), -1, false); for (StringRef Feature : Split) { - const char *FeatureName = llvm::AArch64::getArchExtFeature(Feature); - if (FeatureName) - Features.push_back(FeatureName); + 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("nofp", "-fp-armv8") + .Case("nosimd", "-neon") + .Case("nocrc", "-crc") + .Case("nocrypto", "-crypto") + .Case("nofp16", "-fullfp16") + .Case("noprofile", "-spe") + .Default(nullptr); + if (result) + Features.push_back(result); else if (Feature == "neon" || Feature == "noneon") D.Diag(diag::err_drv_no_neon_modifier); else @@ -2279,16 +2292,20 @@ static bool DecodeAArch64Mcpu(const Driver &D, StringRef Mcpu, StringRef &CPU, std::vector<const char *> &Features) { std::pair<StringRef, StringRef> Split = Mcpu.split("+"); CPU = Split.first; - - if (CPU == "generic") { + if (CPU == "cortex-a53" || CPU == "cortex-a57" || + CPU == "cortex-a72" || CPU == "cortex-a35" || CPU == "exynos-m1" || + CPU == "kryo") { + 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") { Features.push_back("+neon"); } else { - unsigned ArchKind = llvm::AArch64::parseCPUArch(CPU); - unsigned Extersion = llvm::AArch64::getDefaultExtensions(CPU,ArchKind); - - if (!llvm::AArch64::getExtensionFeatures(Extersion,Features)) - return false; - } + return false; + } if (Split.second.size() && !DecodeAArch64Features(D, Split.second, Features)) return false; @@ -2300,13 +2317,20 @@ static bool getAArch64ArchFeaturesFromMarch(const Driver &D, StringRef March, const ArgList &Args, std::vector<const char *> &Features) { - unsigned ArchKind; std::string MarchLowerCase = March.lower(); std::pair<StringRef, StringRef> Split = StringRef(MarchLowerCase).split("+"); - ArchKind = llvm::AArch64::parseArch(Split.first); - if (ArchKind == llvm::ARM::AK_INVALID || !llvm::AArch64::getArchFeatures(ArchKind, Features) || - (Split.second.size() && !DecodeAArch64Features(D, Split.second, Features))) + 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)) return false; return true; diff --git a/clang/test/Preprocessor/aarch64-target-features.c b/clang/test/Preprocessor/aarch64-target-features.c index 0fa95451c32..f218e5eb109 100644 --- a/clang/test/Preprocessor/aarch64-target-features.c +++ b/clang/test/Preprocessor/aarch64-target-features.c @@ -94,10 +94,7 @@ // RUN: %clang -target aarch64 -mcpu=cortex-a72 -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-MCPU-A72 %s // RUN: %clang -target aarch64 -mcpu=exynos-m1 -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-MCPU-M1 %s // RUN: %clang -target aarch64 -mcpu=kryo -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-MCPU-KRYO %s -// CHECK-MCPU-CYCLONE: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-feature" "+neon" -// CHECK-MCPU-CYCLONE-DAG: "-target-feature" "+crypto" -// CHECK-MCPU-CYCLONE-DAG: "-target-feature" "+zcm" -// CHECK-MCPU-CYCLONE-DAG: "-target-feature" "+zcz" +// CHECK-MCPU-CYCLONE: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-feature" "+neon" "-target-feature" "+crypto" "-target-feature" "+zcm" "-target-feature" "+zcz" // CHECK-MCPU-A35: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-feature" "+neon" "-target-feature" "+crc" "-target-feature" "+crypto" // CHECK-MCPU-A53: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-feature" "+neon" "-target-feature" "+crc" "-target-feature" "+crypto" // CHECK-MCPU-A57: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-feature" "+neon" "-target-feature" "+crc" "-target-feature" "+crypto" |