summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/Basic/Targets.cpp22
-rw-r--r--clang/lib/Driver/Tools.cpp6
2 files changed, 13 insertions, 15 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;
diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp
index 79d8dfb2a94..87111fa601f 100644
--- a/clang/lib/Driver/Tools.cpp
+++ b/clang/lib/Driver/Tools.cpp
@@ -6002,9 +6002,9 @@ std::string arm::getARMTargetCPU(StringRef CPU, StringRef Arch,
/// CPU (or Arch, if CPU is generic).
// FIXME: This is redundant with -mcpu, why does LLVM use this.
const char *arm::getLLVMArchSuffixForARM(StringRef CPU, StringRef Arch) {
- if (CPU == "generic" &&
- llvm::ARMTargetParser::parseArch(Arch) == llvm::ARM::AK_ARMV8_1A)
- return "v8.1a";
+ if (CPU == "generic")
+ return llvm::ARMTargetParser::getSubArch(
+ llvm::ARMTargetParser::parseArch(Arch));
unsigned ArchKind = llvm::ARMTargetParser::parseCPUArch(CPU);
if (ArchKind == llvm::ARM::AK_INVALID)
OpenPOWER on IntegriCloud