summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2018-02-23 00:22:15 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2018-02-23 00:22:15 +0000
commit3dd4981298b75226172f435382ddc110b7680129 (patch)
treee4d9280a3f74c867e0743459d7366d1298dcd024 /clang/lib/CodeGen
parent0dcc88a500e120f50716e6d3efc2a9cf5db6d570 (diff)
downloadbcm5719-llvm-3dd4981298b75226172f435382ddc110b7680129.tar.gz
bcm5719-llvm-3dd4981298b75226172f435382ddc110b7680129.zip
Simplify setting dso_local. NFC.
The value of dso_local can be computed from just IR properties and global information (object file type, command line options, etc). With this patch we no longer pass in the Decl. It was almost unused and making it fully unused guarantees that dso_local is consistent with the rest of the IR. llvm-svn: 325846
Diffstat (limited to 'clang/lib/CodeGen')
-rw-r--r--clang/lib/CodeGen/CodeGenModule.cpp18
-rw-r--r--clang/lib/CodeGen/CodeGenModule.h2
-rw-r--r--clang/lib/CodeGen/ItaniumCXXABI.cpp4
3 files changed, 12 insertions, 12 deletions
diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp
index f21d40671cf..e8577b0153f 100644
--- a/clang/lib/CodeGen/CodeGenModule.cpp
+++ b/clang/lib/CodeGen/CodeGenModule.cpp
@@ -712,7 +712,7 @@ void CodeGenModule::setGlobalVisibility(llvm::GlobalValue *GV,
}
static bool shouldAssumeDSOLocal(const CodeGenModule &CGM,
- llvm::GlobalValue *GV, const NamedDecl *D) {
+ llvm::GlobalValue *GV) {
const llvm::Triple &TT = CGM.getTriple();
// Only handle ELF for now.
if (!TT.isOSBinFormatELF())
@@ -742,31 +742,30 @@ static bool shouldAssumeDSOLocal(const CodeGenModule &CGM,
return false;
// If we can use copy relocations we can assume it is local.
- if (auto *VD = dyn_cast<VarDecl>(D))
- if (VD->getTLSKind() == VarDecl::TLS_None &&
+ if (auto *Var = dyn_cast<llvm::GlobalVariable>(GV))
+ if (!Var->isThreadLocal() &&
(RM == llvm::Reloc::Static || CGOpts.PIECopyRelocations))
return true;
// If we can use a plt entry as the symbol address we can assume it
// is local.
// FIXME: This should work for PIE, but the gold linker doesn't support it.
- if (isa<FunctionDecl>(D) && !CGOpts.NoPLT && RM == llvm::Reloc::Static)
+ if (isa<llvm::Function>(GV) && !CGOpts.NoPLT && RM == llvm::Reloc::Static)
return true;
// Otherwise don't assue it is local.
return false;
}
-void CodeGenModule::setDSOLocal(llvm::GlobalValue *GV,
- const NamedDecl *D) const {
- if (shouldAssumeDSOLocal(*this, GV, D))
+void CodeGenModule::setDSOLocal(llvm::GlobalValue *GV) const {
+ if (shouldAssumeDSOLocal(*this, GV))
GV->setDSOLocal(true);
}
void CodeGenModule::setGVProperties(llvm::GlobalValue *GV,
const NamedDecl *D) const {
setGlobalVisibility(GV, D);
- setDSOLocal(GV, D);
+ setDSOLocal(GV);
}
static llvm::GlobalVariable::ThreadLocalMode GetLLVMTLSModel(StringRef S) {
@@ -2749,7 +2748,6 @@ CodeGenModule::GetOrCreateLLVMGlobal(StringRef MangledName,
GV->setAlignment(getContext().getDeclAlign(D).getQuantity());
setLinkageForGV(GV, D);
- setGVProperties(GV, D);
if (D->getTLSKind()) {
if (D->getTLSKind() == VarDecl::TLS_Dynamic)
@@ -2757,6 +2755,8 @@ CodeGenModule::GetOrCreateLLVMGlobal(StringRef MangledName,
setTLSMode(GV, *D);
}
+ setGVProperties(GV, D);
+
// If required by the ABI, treat declarations of static data members with
// inline initializers as definitions.
if (getContext().isMSStaticDataMemberInlineDefinition(D)) {
diff --git a/clang/lib/CodeGen/CodeGenModule.h b/clang/lib/CodeGen/CodeGenModule.h
index d85537b1c28..65342fe7eb7 100644
--- a/clang/lib/CodeGen/CodeGenModule.h
+++ b/clang/lib/CodeGen/CodeGenModule.h
@@ -721,7 +721,7 @@ public:
/// Set the visibility for the given LLVM GlobalValue.
void setGlobalVisibility(llvm::GlobalValue *GV, const NamedDecl *D) const;
- void setDSOLocal(llvm::GlobalValue *GV, const NamedDecl *D) const;
+ void setDSOLocal(llvm::GlobalValue *GV) const;
void setGVProperties(llvm::GlobalValue *GV, const NamedDecl *D) const;
diff --git a/clang/lib/CodeGen/ItaniumCXXABI.cpp b/clang/lib/CodeGen/ItaniumCXXABI.cpp
index 6ddbbd84eae..61ad525b80a 100644
--- a/clang/lib/CodeGen/ItaniumCXXABI.cpp
+++ b/clang/lib/CodeGen/ItaniumCXXABI.cpp
@@ -3214,10 +3214,10 @@ llvm::Constant *ItaniumRTTIBuilder::BuildTypeInfo(QualType Ty, bool Force,
llvmVisibility = CodeGenModule::GetLLVMVisibility(Ty->getVisibility());
TypeName->setVisibility(llvmVisibility);
- CGM.setDSOLocal(TypeName, Ty->getAsCXXRecordDecl());
+ CGM.setDSOLocal(TypeName);
GV->setVisibility(llvmVisibility);
- CGM.setDSOLocal(GV, Ty->getAsCXXRecordDecl());
+ CGM.setDSOLocal(GV);
if (CGM.getTriple().isWindowsItaniumEnvironment()) {
auto RD = Ty->getAsCXXRecordDecl();
OpenPOWER on IntegriCloud