From 1b00f2d99abe369cede650af4c98f0db2aad9abe Mon Sep 17 00:00:00 2001 From: Teresa Johnson Date: Fri, 8 Jan 2016 17:06:29 +0000 Subject: [PATCH] [ThinLTO] Use new in-place symbol changes for exporting module Due to the new in-place ThinLTO symbol handling support added in r257174, we now invoke renameModuleForThinLTO on the current module from within the FunctionImport pass. Additionally, renameModuleForThinLTO no longer needs to return the Module as it is performing the renaming in place on the one provided. This commit will be immediately preceeded by a companion clang patch to remove its invocation of renameModuleForThinLTO. llvm-svn: 257181 --- llvm/include/llvm/Linker/Linker.h | 3 +-- llvm/lib/Linker/LinkModules.cpp | 10 +++------- llvm/lib/Transforms/IPO/FunctionImport.cpp | 9 +++++++-- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/llvm/include/llvm/Linker/Linker.h b/llvm/include/llvm/Linker/Linker.h index f09cf1029a4b..2b051e6d15c9 100644 --- a/llvm/include/llvm/Linker/Linker.h +++ b/llvm/include/llvm/Linker/Linker.h @@ -69,8 +69,7 @@ public: /// Perform in-place global value handling on the given Module for /// exported local functions renamed and promoted for ThinLTO. -std::unique_ptr renameModuleForThinLTO(std::unique_ptr M, - const FunctionInfoIndex *Index); +bool renameModuleForThinLTO(Module &M, const FunctionInfoIndex *Index); } // End llvm namespace diff --git a/llvm/lib/Linker/LinkModules.cpp b/llvm/lib/Linker/LinkModules.cpp index 653f639f28e5..6ffa71e14779 100644 --- a/llvm/lib/Linker/LinkModules.cpp +++ b/llvm/lib/Linker/LinkModules.cpp @@ -863,13 +863,9 @@ bool Linker::linkModules(Module &Dest, std::unique_ptr Src, return L.linkInModule(std::move(Src), Flags); } -std::unique_ptr -llvm::renameModuleForThinLTO(std::unique_ptr M, - const FunctionInfoIndex *Index) { - ThinLTOGlobalProcessing ThinLTOProcessing(*M, Index); - if (ThinLTOProcessing.run()) - return nullptr; - return M; +bool llvm::renameModuleForThinLTO(Module &M, const FunctionInfoIndex *Index) { + ThinLTOGlobalProcessing ThinLTOProcessing(M, Index); + return ThinLTOProcessing.run(); } //===----------------------------------------------------------------------===// diff --git a/llvm/lib/Transforms/IPO/FunctionImport.cpp b/llvm/lib/Transforms/IPO/FunctionImport.cpp index d194c5e424df..11418edbf7bc 100644 --- a/llvm/lib/Transforms/IPO/FunctionImport.cpp +++ b/llvm/lib/Transforms/IPO/FunctionImport.cpp @@ -413,14 +413,19 @@ public: Index = IndexPtr.get(); } + // First we need to promote to global scope and rename any local values that + // are potentially exported to other modules. + if (renameModuleForThinLTO(M, Index)) { + errs() << "Error renaming module\n"; + return false; + } + // Perform the import now. auto ModuleLoader = [&M](StringRef Identifier) { return loadFile(Identifier, M.getContext()); }; FunctionImporter Importer(*Index, ModuleLoader); return Importer.importFunctions(M); - - return false; } }; } // anonymous namespace