summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/include/llvm/Bitcode/ReaderWriter.h4
-rw-r--r--llvm/include/llvm/IR/FunctionInfo.h30
-rw-r--r--llvm/include/llvm/Object/FunctionIndexObjectFile.h5
-rw-r--r--llvm/lib/Bitcode/Reader/BitcodeReader.cpp5
-rw-r--r--llvm/lib/Linker/LinkModules.cpp2
-rw-r--r--llvm/lib/Object/FunctionIndexObjectFile.cpp10
-rw-r--r--llvm/tools/llvm-link/llvm-link.cpp2
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';
OpenPOWER on IntegriCloud