diff options
author | Sam Parker <sam.parker@arm.com> | 2019-02-08 07:57:42 +0000 |
---|---|---|
committer | Sam Parker <sam.parker@arm.com> | 2019-02-08 07:57:42 +0000 |
commit | 5b09834bc364313e48cc54dccd8f251232d84b65 (patch) | |
tree | 030e669eb5be27f9a814f9c0a6a838d442013542 /llvm/lib/Target/ARM/ARMTargetMachine.cpp | |
parent | 807960e6ef445971756389db7e0c0a001f411720 (diff) | |
download | bcm5719-llvm-5b09834bc364313e48cc54dccd8f251232d84b65.tar.gz bcm5719-llvm-5b09834bc364313e48cc54dccd8f251232d84b65.zip |
[ARM] Add OptMinSize to ARMSubtarget
In many places in the backend, we like to know whether we're
optimising for code size and this is performed by checking the
current machine function attributes. A subtarget is created on a
per-function basis, so it's possible to know when we're compiling for
code size on construction so record this in the new object.
Differential Revision: https://reviews.llvm.org/D57812
llvm-svn: 353501
Diffstat (limited to 'llvm/lib/Target/ARM/ARMTargetMachine.cpp')
-rw-r--r-- | llvm/lib/Target/ARM/ARMTargetMachine.cpp | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/llvm/lib/Target/ARM/ARMTargetMachine.cpp b/llvm/lib/Target/ARM/ARMTargetMachine.cpp index 433a1915a1a..9954eee2e5f 100644 --- a/llvm/lib/Target/ARM/ARMTargetMachine.cpp +++ b/llvm/lib/Target/ARM/ARMTargetMachine.cpp @@ -263,13 +263,20 @@ ARMBaseTargetMachine::getSubtargetImpl(const Function &F) const { if (SoftFloat) FS += FS.empty() ? "+soft-float" : ",+soft-float"; - auto &I = SubtargetMap[CPU + FS]; + // Use the optminsize to identify the subtarget, but don't use it in the + // feature string. + std::string Key = CPU + FS; + if (F.optForMinSize()) + Key += "+minsize"; + + auto &I = SubtargetMap[Key]; if (!I) { // This needs to be done before we create a new subtarget since any // creation will depend on the TM and the code generation flags on the // function that reside in TargetOptions. resetTargetOptions(F); - I = llvm::make_unique<ARMSubtarget>(TargetTriple, CPU, FS, *this, isLittle); + I = llvm::make_unique<ARMSubtarget>(TargetTriple, CPU, FS, *this, isLittle, + F.optForMinSize()); if (!I->isThumb() && !I->hasARMOps()) F.getContext().emitError("Function '" + F.getName() + "' uses ARM " |