diff options
Diffstat (limited to 'llvm/include/llvm/Transforms/Utils/FunctionImportUtils.h')
-rw-r--r-- | llvm/include/llvm/Transforms/Utils/FunctionImportUtils.h | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/llvm/include/llvm/Transforms/Utils/FunctionImportUtils.h b/llvm/include/llvm/Transforms/Utils/FunctionImportUtils.h index 2c6c3adc8dad..acdd8fffa1c1 100644 --- a/llvm/include/llvm/Transforms/Utils/FunctionImportUtils.h +++ b/llvm/include/llvm/Transforms/Utils/FunctionImportUtils.h @@ -39,6 +39,19 @@ class FunctionImportGlobalProcessing { /// as part of a different backend compilation process. bool HasExportedFunctions = false; + /// Set to true (only applicatable to ELF -fpic) if dso_local should be + /// dropped for a declaration. + /// + /// On ELF, the assembler is conservative and assumes a global default + /// visibility symbol can be interposable. No direct access relocation is + /// allowed, if the definition is not in the translation unit, even if the + /// definition is available in the linkage unit. Thus we need to clear + /// dso_local to disable direct access. + /// + /// This flag should not be set for -fno-pic or -fpie, which would + /// unnecessarily disable direct access. + bool ClearDSOLocalOnDeclarations; + /// Set of llvm.*used values, in order to validate that we don't try /// to promote any non-renamable values. SmallPtrSet<GlobalValue *, 8> Used; @@ -85,10 +98,11 @@ class FunctionImportGlobalProcessing { GlobalValue::LinkageTypes getLinkage(const GlobalValue *SGV, bool DoPromote); public: - FunctionImportGlobalProcessing( - Module &M, const ModuleSummaryIndex &Index, - SetVector<GlobalValue *> *GlobalsToImport = nullptr) - : M(M), ImportIndex(Index), GlobalsToImport(GlobalsToImport) { + FunctionImportGlobalProcessing(Module &M, const ModuleSummaryIndex &Index, + SetVector<GlobalValue *> *GlobalsToImport, + bool ClearDSOLocalOnDeclarations) + : M(M), ImportIndex(Index), GlobalsToImport(GlobalsToImport), + ClearDSOLocalOnDeclarations(ClearDSOLocalOnDeclarations) { // If we have a ModuleSummaryIndex but no function to import, // then this is the primary module being compiled in a ThinLTO // backend compilation, and we need to see if it has functions that @@ -111,6 +125,7 @@ public: /// exported local functions renamed and promoted for ThinLTO. bool renameModuleForThinLTO( Module &M, const ModuleSummaryIndex &Index, + bool ClearDSOLocalOnDeclarations, SetVector<GlobalValue *> *GlobalsToImport = nullptr); /// Compute synthetic function entry counts. |