diff options
author | Vladimir Sukharev <vladimir.sukharev@arm.com> | 2015-08-19 14:50:18 +0000 |
---|---|---|
committer | Vladimir Sukharev <vladimir.sukharev@arm.com> | 2015-08-19 14:50:18 +0000 |
commit | 457d34193e796e260258b036a1e6e7c175bd0b5c (patch) | |
tree | f88db5e2a308577cf687500b1ec670eb6c1d546b /clang/lib/Basic/Targets.cpp | |
parent | d966fb6fef351da66768cbe560c90dceeb6bf07a (diff) | |
download | bcm5719-llvm-457d34193e796e260258b036a1e6e7c175bd0b5c.tar.gz bcm5719-llvm-457d34193e796e260258b036a1e6e7c175bd0b5c.zip |
[ARM] Proper generic cpus handling
"generic" cpu was wrongly handled as exact real CPU name of ARMv8.1A architecture.
This has been fixed, now it is abstract name, suitable for any arch.
Reviewers: rengolin
Subscribers: cfe-commits
Differential Revision: http://reviews.llvm.org/D11640
llvm-svn: 245445
Diffstat (limited to 'clang/lib/Basic/Targets.cpp')
-rw-r--r-- | clang/lib/Basic/Targets.cpp | 22 |
1 files changed, 10 insertions, 12 deletions
diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp index 0ebe8a23c36..081b4caafd2 100644 --- a/clang/lib/Basic/Targets.cpp +++ b/clang/lib/Basic/Targets.cpp @@ -4257,21 +4257,18 @@ class ARMTargetInfo : public TargetInfo { ArchISA = llvm::ARMTargetParser::parseArchISA(ArchName); DefaultCPU = getDefaultCPU(ArchName); - // SubArch is specified by the target triple - if (!DefaultCPU.empty()) - setArchInfo(DefaultCPU); - else - // FIXME ArchInfo should be based on ArchName from triple, not on - // a hard-coded CPU name. Doing so currently causes regressions: - // test/Preprocessor/init.c: __ARM_ARCH_6J__ not defined - setArchInfo(CPU); + unsigned ArchKind = llvm::ARMTargetParser::parseArch(ArchName); + if (ArchKind == llvm::ARM::AK_INVALID) + // set arch of the CPU, either provided explicitly or hardcoded default + ArchKind = llvm::ARMTargetParser::parseCPUArch(CPU); + setArchInfo(ArchKind); } - void setArchInfo(StringRef CPU) { + void setArchInfo(unsigned Kind) { StringRef SubArch; // cache TargetParser info - ArchKind = llvm::ARMTargetParser::parseCPUArch(CPU); + ArchKind = Kind; SubArch = llvm::ARMTargetParser::getSubArch(ArchKind); ArchProfile = llvm::ARMTargetParser::parseArchProfile(SubArch); ArchVersion = llvm::ARMTargetParser::parseArchVersion(SubArch); @@ -4570,10 +4567,11 @@ public: } bool setCPU(const std::string &Name) override { - unsigned ArchKind = llvm::ARMTargetParser::parseCPUArch(Name); + if (Name != "generic") + setArchInfo(llvm::ARMTargetParser::parseCPUArch(Name)); + if (ArchKind == llvm::ARM::AK_INVALID) return false; - setArchInfo(Name); setAtomic(); CPU = Name; return true; |