diff options
| author | Rafael Espindola <rafael.espindola@gmail.com> | 2016-06-27 20:19:14 +0000 |
|---|---|---|
| committer | Rafael Espindola <rafael.espindola@gmail.com> | 2016-06-27 20:19:14 +0000 |
| commit | 8121becac31168d7540f6915a6bc33473dcb3e36 (patch) | |
| tree | 47d0a97395d8456dc776e076202863b90b905930 /llvm/lib/Target | |
| parent | ca5170e3e46a1ae878408c68a1a0d90e67ad58e4 (diff) | |
| download | bcm5719-llvm-8121becac31168d7540f6915a6bc33473dcb3e36.tar.gz bcm5719-llvm-8121becac31168d7540f6915a6bc33473dcb3e36.zip | |
Teach shouldAssumeDSOLocal about tls.
Fixes a fixme about handling other visibilities.
llvm-svn: 273921
Diffstat (limited to 'llvm/lib/Target')
| -rw-r--r-- | llvm/lib/Target/TargetMachine.cpp | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/llvm/lib/Target/TargetMachine.cpp b/llvm/lib/Target/TargetMachine.cpp index b62471597e0..220f1f3183d 100644 --- a/llvm/lib/Target/TargetMachine.cpp +++ b/llvm/lib/Target/TargetMachine.cpp @@ -13,6 +13,7 @@ #include "llvm/Target/TargetMachine.h" #include "llvm/Analysis/TargetTransformInfo.h" +#include "llvm/CodeGen/Analysis.h" #include "llvm/CodeGen/MachineFunction.h" #include "llvm/IR/Function.h" #include "llvm/IR/GlobalAlias.h" @@ -106,22 +107,19 @@ static TLSModel::Model getSelectedTLSModel(const GlobalValue *GV) { } TLSModel::Model TargetMachine::getTLSModel(const GlobalValue *GV) const { - bool isLocal = GV->hasLocalLinkage(); - bool isDeclaration = GV->isDeclaration(); - bool isPIC = getRelocationModel() == Reloc::PIC_; - bool isPIE = GV->getParent()->getPIELevel() != PIELevel::Default; - // FIXME: what should we do for protected and internal visibility? - // For variables, is internal different from hidden? - bool isHidden = GV->hasHiddenVisibility(); + bool IsPIE = GV->getParent()->getPIELevel() != PIELevel::Default; + Reloc::Model RM = getRelocationModel(); + bool IsSharedLibrary = RM == Reloc::PIC_ && !IsPIE; + bool IsLocal = shouldAssumeDSOLocal(RM, TargetTriple, *GV->getParent(), GV); TLSModel::Model Model; - if (isPIC && !isPIE) { - if (isLocal || isHidden) + if (IsSharedLibrary) { + if (IsLocal) Model = TLSModel::LocalDynamic; else Model = TLSModel::GeneralDynamic; } else { - if (!isDeclaration || isHidden) + if (IsLocal) Model = TLSModel::LocalExec; else Model = TLSModel::InitialExec; |

