summaryrefslogtreecommitdiffstats
path: root/clang/lib/Basic
diff options
context:
space:
mode:
Diffstat (limited to 'clang/lib/Basic')
-rw-r--r--clang/lib/Basic/Targets.cpp22
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;
OpenPOWER on IntegriCloud