diff options
-rw-r--r-- | llvm/include/llvm/Bitcode/ReaderWriter.h | 4 | ||||
-rw-r--r-- | llvm/include/llvm/IR/FunctionInfo.h | 30 | ||||
-rw-r--r-- | llvm/include/llvm/Object/FunctionIndexObjectFile.h | 5 | ||||
-rw-r--r-- | llvm/lib/Bitcode/Reader/BitcodeReader.cpp | 5 | ||||
-rw-r--r-- | llvm/lib/Linker/LinkModules.cpp | 2 | ||||
-rw-r--r-- | llvm/lib/Object/FunctionIndexObjectFile.cpp | 10 | ||||
-rw-r--r-- | llvm/tools/llvm-link/llvm-link.cpp | 2 |
7 files changed, 16 insertions, 42 deletions
diff --git a/llvm/include/llvm/Bitcode/ReaderWriter.h b/llvm/include/llvm/Bitcode/ReaderWriter.h index 1c08ded1656..3e127290f37 100644 --- a/llvm/include/llvm/Bitcode/ReaderWriter.h +++ b/llvm/include/llvm/Bitcode/ReaderWriter.h @@ -71,15 +71,13 @@ namespace llvm { DiagnosticHandlerFunction DiagnosticHandler); /// Parse the specified bitcode buffer, returning the function info index. - /// If ExportingModule is true, check for functions in the index from this - /// module when the combined index is built during parsing and set flag. /// If IsLazy is true, parse the entire function summary into /// the index. Otherwise skip the function summary section, and only create /// an index object with a map from function name to function summary offset. /// The index is used to perform lazy function summary reading later. ErrorOr<std::unique_ptr<FunctionInfoIndex>> getFunctionInfoIndex( MemoryBufferRef Buffer, DiagnosticHandlerFunction DiagnosticHandler, - const Module *ExportingModule = nullptr, bool IsLazy = false); + bool IsLazy = false); /// This method supports lazy reading of function summary data from the /// combined index during function importing. When reading the combined index diff --git a/llvm/include/llvm/IR/FunctionInfo.h b/llvm/include/llvm/IR/FunctionInfo.h index b8801693ab5..eba088a61bc 100644 --- a/llvm/include/llvm/IR/FunctionInfo.h +++ b/llvm/include/llvm/IR/FunctionInfo.h @@ -165,19 +165,8 @@ private: /// Holds strings for combined index, mapping to the corresponding module ID. ModulePathStringTableTy ModulePathStringTable; - /// The main module being compiled, that we are importing into, if applicable. - /// Used to check if any of its functions are in the index and therefore - /// potentially exported. - const Module *ExportingModule; - - /// Flag indicating whether the exporting module has any functions in the - /// index and therefore potentially exported (imported into another module). - bool HasExportedFunctions; - public: - FunctionInfoIndex(const Module *M = nullptr) - : ExportingModule(M), HasExportedFunctions(false){}; - ~FunctionInfoIndex() = default; + FunctionInfoIndex() = default; // Disable the copy constructor and assignment operators, so // no unexpected copying/moving occurs. @@ -201,14 +190,6 @@ public: /// Add a function info for a function of the given name. void addFunctionInfo(StringRef FuncName, std::unique_ptr<FunctionInfo> Info) { - // Update the HasExportedFunctions flag, but only if we had a function - // summary (i.e. we aren't parsing them lazily or have a bitcode file - // without a function summary section). - if (ExportingModule && Info->functionSummary()) { - if (ExportingModule->getModuleIdentifier() == - Info->functionSummary()->modulePath()) - HasExportedFunctions = true; - } FunctionMap[FuncName].push_back(std::move(Info)); } @@ -248,11 +229,10 @@ public: } /// Check if the given Module has any functions available for exporting - /// in the index. - bool hasExportedFunctions(const Module *M) const { - assert(M == ExportingModule && - "Checking for exported functions on unexpected module"); - return HasExportedFunctions; + /// in the index. We consider any module present in the ModulePathStringTable + /// to have exported functions. + bool hasExportedFunctions(const Module &M) const { + return ModulePathStringTable.count(M.getModuleIdentifier()); } }; diff --git a/llvm/include/llvm/Object/FunctionIndexObjectFile.h b/llvm/include/llvm/Object/FunctionIndexObjectFile.h index 511a237881e..74b461dc7cc 100644 --- a/llvm/include/llvm/Object/FunctionIndexObjectFile.h +++ b/llvm/include/llvm/Object/FunctionIndexObjectFile.h @@ -88,7 +88,7 @@ public: /// summary/index. static ErrorOr<std::unique_ptr<FunctionIndexObjectFile>> create(MemoryBufferRef Object, DiagnosticHandlerFunction DiagnosticHandler, - const Module *ExportingModule = nullptr, bool IsLazy = false); + bool IsLazy = false); /// \brief Parse the function summary information for function with the /// given name out of the given buffer. Parsed information is @@ -104,8 +104,7 @@ public: /// index object if found, or nullptr if not. ErrorOr<std::unique_ptr<FunctionInfoIndex>> getFunctionIndexForFile(StringRef Path, - DiagnosticHandlerFunction DiagnosticHandler, - const Module *ExportingModule = nullptr); + DiagnosticHandlerFunction DiagnosticHandler); } #endif diff --git a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp index 11c9b131da7..e95aba771b9 100644 --- a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp +++ b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp @@ -5991,12 +5991,11 @@ llvm::getBitcodeProducerString(MemoryBufferRef Buffer, LLVMContext &Context, ErrorOr<std::unique_ptr<FunctionInfoIndex>> llvm::getFunctionInfoIndex(MemoryBufferRef Buffer, DiagnosticHandlerFunction DiagnosticHandler, - const Module *ExportingModule, bool IsLazy) { + bool IsLazy) { std::unique_ptr<MemoryBuffer> Buf = MemoryBuffer::getMemBuffer(Buffer, false); FunctionIndexBitcodeReader R(Buf.get(), DiagnosticHandler, IsLazy); - std::unique_ptr<FunctionInfoIndex> Index = - llvm::make_unique<FunctionInfoIndex>(ExportingModule); + auto Index = llvm::make_unique<FunctionInfoIndex>(); auto cleanupOnError = [&](std::error_code EC) { R.releaseBuffer(); // Never take ownership on error. diff --git a/llvm/lib/Linker/LinkModules.cpp b/llvm/lib/Linker/LinkModules.cpp index 21df66863e5..4f740587272 100644 --- a/llvm/lib/Linker/LinkModules.cpp +++ b/llvm/lib/Linker/LinkModules.cpp @@ -435,7 +435,7 @@ public: // backend compilation, and we need to see if it has functions that // may be exported to another backend compilation. if (ImportIndex && !ImportFunction) - HasExportedFunctions = ImportIndex->hasExportedFunctions(&SrcM); + HasExportedFunctions = ImportIndex->hasExportedFunctions(SrcM); } bool run(); diff --git a/llvm/lib/Object/FunctionIndexObjectFile.cpp b/llvm/lib/Object/FunctionIndexObjectFile.cpp index 717c56bc901..fe111de1a9c 100644 --- a/llvm/lib/Object/FunctionIndexObjectFile.cpp +++ b/llvm/lib/Object/FunctionIndexObjectFile.cpp @@ -86,7 +86,7 @@ bool FunctionIndexObjectFile::hasFunctionSummaryInMemBuffer( ErrorOr<std::unique_ptr<FunctionIndexObjectFile>> FunctionIndexObjectFile::create(MemoryBufferRef Object, DiagnosticHandlerFunction DiagnosticHandler, - const Module *ExportingModule, bool IsLazy) { + bool IsLazy) { std::unique_ptr<FunctionInfoIndex> Index; ErrorOr<MemoryBufferRef> BCOrErr = findBitcodeInMemBuffer(Object); @@ -94,7 +94,7 @@ FunctionIndexObjectFile::create(MemoryBufferRef Object, return BCOrErr.getError(); ErrorOr<std::unique_ptr<FunctionInfoIndex>> IOrErr = getFunctionInfoIndex( - BCOrErr.get(), DiagnosticHandler, ExportingModule, IsLazy); + BCOrErr.get(), DiagnosticHandler, IsLazy); if (std::error_code EC = IOrErr.getError()) return EC; @@ -125,8 +125,7 @@ std::error_code FunctionIndexObjectFile::findFunctionSummaryInMemBuffer( // index object if found, or nullptr if not. ErrorOr<std::unique_ptr<FunctionInfoIndex>> llvm::getFunctionIndexForFile(StringRef Path, - DiagnosticHandlerFunction DiagnosticHandler, - const Module *ExportingModule) { + DiagnosticHandlerFunction DiagnosticHandler) { ErrorOr<std::unique_ptr<MemoryBuffer>> FileOrErr = MemoryBuffer::getFileOrSTDIN(Path); std::error_code EC = FileOrErr.getError(); @@ -134,8 +133,7 @@ llvm::getFunctionIndexForFile(StringRef Path, return EC; MemoryBufferRef BufferRef = (FileOrErr.get())->getMemBufferRef(); ErrorOr<std::unique_ptr<object::FunctionIndexObjectFile>> ObjOrErr = - object::FunctionIndexObjectFile::create(BufferRef, DiagnosticHandler, - ExportingModule); + object::FunctionIndexObjectFile::create(BufferRef, DiagnosticHandler); EC = ObjOrErr.getError(); if (EC) return EC; diff --git a/llvm/tools/llvm-link/llvm-link.cpp b/llvm/tools/llvm-link/llvm-link.cpp index 9a373c25cc5..39034aaf672 100644 --- a/llvm/tools/llvm-link/llvm-link.cpp +++ b/llvm/tools/llvm-link/llvm-link.cpp @@ -229,7 +229,7 @@ static bool linkFiles(const char *argv0, LLVMContext &Context, Linker &L, std::unique_ptr<FunctionInfoIndex> Index; if (!FunctionIndex.empty()) { ErrorOr<std::unique_ptr<FunctionInfoIndex>> IndexOrErr = - llvm::getFunctionIndexForFile(FunctionIndex, diagnosticHandler, &*M); + llvm::getFunctionIndexForFile(FunctionIndex, diagnosticHandler); std::error_code EC = IndexOrErr.getError(); if (EC) { errs() << EC.message() << '\n'; |