diff options
author | Diogo N. Sampaio <diogo.sampaio@arm.com> | 2019-05-09 10:24:36 +0000 |
---|---|---|
committer | Diogo N. Sampaio <diogo.sampaio@arm.com> | 2019-05-09 10:24:36 +0000 |
commit | 543913c3b41f7d8dcede4f446ffcd2dce496a084 (patch) | |
tree | 12e81bf60d8abbd1e87b0f6ea985da167c6b45d4 /clang/lib | |
parent | 3cdf8981054bf7b607aed1b6c921341516a94174 (diff) | |
download | bcm5719-llvm-543913c3b41f7d8dcede4f446ffcd2dce496a084.tar.gz bcm5719-llvm-543913c3b41f7d8dcede4f446ffcd2dce496a084.zip |
[ARM] Fix the extensions implied by a cpu name
Summary:
When using `clang -mcpu=CPUNAME+FEATURELIST`,
the implied features defined by CPUNAME are
not obtained, as the entire string is passed.
This fixes that by spiting the cpuname
string in the first `+`, if any.
For example, when using
```clang -### --target=arm-arm-none-eabi -march=armv7-a -mcpu=cortex-a8+nocrc```
the intrinsic
```"target-feature" "+dsp"```
implied by `cortex-a8` is missing.
Reviewers: keith.walker.arm, DavidSpickett, carwil
Reviewed By: DavidSpickett
Subscribers: javed.absar, kristof.beyls, cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D61668
llvm-svn: 360324
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/Driver/ToolChains/Arch/ARM.cpp | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/clang/lib/Driver/ToolChains/Arch/ARM.cpp b/clang/lib/Driver/ToolChains/Arch/ARM.cpp index 81aba547104..9e0c4835716 100644 --- a/clang/lib/Driver/ToolChains/Arch/ARM.cpp +++ b/clang/lib/Driver/ToolChains/Arch/ARM.cpp @@ -88,6 +88,7 @@ static bool DecodeARMFeatures(const Driver &D, StringRef text, static void DecodeARMFeaturesFromCPU(const Driver &D, StringRef CPU, std::vector<StringRef> &Features) { + CPU = CPU.split("+").first; if (CPU != "generic") { llvm::ARM::ArchKind ArchKind = llvm::ARM::parseCPUArch(CPU); unsigned Extension = llvm::ARM::getDefaultExtensions(CPU, ArchKind); @@ -350,11 +351,9 @@ void arm::getARMTargetFeatures(const ToolChain &TC, D.Diag(clang::diag::warn_drv_unused_argument) << CPUArg->getAsString(Args); CPUName = StringRef(WaCPU->getValue()).substr(6); - checkARMCPUName(D, WaCPU, Args, CPUName, ArchName, Features, Triple); - } else if (CPUArg) { + CPUArg = WaCPU; + } else if (CPUArg) CPUName = CPUArg->getValue(); - checkARMCPUName(D, CPUArg, Args, CPUName, ArchName, Features, Triple); - } // Add CPU features for generic CPUs if (CPUName == "native") { @@ -367,6 +366,8 @@ void arm::getARMTargetFeatures(const ToolChain &TC, DecodeARMFeaturesFromCPU(D, CPUName, Features); } + if (CPUArg) + checkARMCPUName(D, CPUArg, Args, CPUName, ArchName, Features, Triple); // Honor -mfpu=. ClangAs gives preference to -Wa,-mfpu=. const Arg *FPUArg = Args.getLastArg(options::OPT_mfpu_EQ); if (WaFPU) { |