summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2016-06-27 20:19:14 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2016-06-27 20:19:14 +0000
commit8121becac31168d7540f6915a6bc33473dcb3e36 (patch)
tree47d0a97395d8456dc776e076202863b90b905930 /llvm/lib/Target
parentca5170e3e46a1ae878408c68a1a0d90e67ad58e4 (diff)
downloadbcm5719-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.cpp18
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;
OpenPOWER on IntegriCloud