]> granicus.if.org Git - clang/commitdiff
Simplify setting dso_local. NFC.
authorRafael Espindola <rafael.espindola@gmail.com>
Fri, 23 Feb 2018 00:22:15 +0000 (00:22 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Fri, 23 Feb 2018 00:22:15 +0000 (00:22 +0000)
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.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@325846 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CodeGenModule.cpp
lib/CodeGen/CodeGenModule.h
lib/CodeGen/ItaniumCXXABI.cpp

index f21d40671cf756bcea3b42b29aadfb2bb562f5ad..e8577b0153fa0e73405dba6c351e7b463faa7a98 100644 (file)
@@ -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)) {
index d85537b1c285b414ce13dbd18f81ce25d3733001..65342fe7eb758aa476e7e47ce72e3f47d527a8d0 100644 (file)
@@ -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;
 
index 6ddbbd84eaeb53cd3f9c57f66d894b08b3f6faed..61ad525b80a79c2316c7a7bf975107e103dfb094 100644 (file)
@@ -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();