r325846 - Simplify setting dso_local. NFC.
Rafael Espindola via cfe-commits
cfe-commits at lists.llvm.org
Thu Feb 22 16:22:15 PST 2018
Author: rafael
Date: Thu Feb 22 16:22:15 2018
New Revision: 325846
URL: http://llvm.org/viewvc/llvm-project?rev=325846&view=rev
Log:
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.
Modified:
cfe/trunk/lib/CodeGen/CodeGenModule.cpp
cfe/trunk/lib/CodeGen/CodeGenModule.h
cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp
Modified: cfe/trunk/lib/CodeGen/CodeGenModule.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenModule.cpp?rev=325846&r1=325845&r2=325846&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CodeGenModule.cpp (original)
+++ cfe/trunk/lib/CodeGen/CodeGenModule.cpp Thu Feb 22 16:22:15 2018
@@ -712,7 +712,7 @@ void CodeGenModule::setGlobalVisibility(
}
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 C
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(Str
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(Str
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)) {
Modified: cfe/trunk/lib/CodeGen/CodeGenModule.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenModule.h?rev=325846&r1=325845&r2=325846&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CodeGenModule.h (original)
+++ cfe/trunk/lib/CodeGen/CodeGenModule.h Thu Feb 22 16:22:15 2018
@@ -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;
Modified: cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp?rev=325846&r1=325845&r2=325846&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp (original)
+++ cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp Thu Feb 22 16:22:15 2018
@@ -3214,10 +3214,10 @@ llvm::Constant *ItaniumRTTIBuilder::Buil
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();
More information about the cfe-commits
mailing list