mirror of
https://github.com/RPCSX/llvm.git
synced 2025-02-17 11:39:11 +00:00
[ThinLTO] Optionally ignore empty index file
Summary: In order to simplify distributed build system integration, where actions may be scheduled before the Thin Link which determines the list of objects selected by the linker. The gold plugin currently will emit 0-sized index files for objects not selected by the link, to enable checking for expected output files by the build system. If the build system then schedules a backend action for these bitcode files, we want to be able to fall back to normal compilation instead of failing. This is the LLVM side support for optionally enabling fallback instead of issuing an error. Return a null CombinedIndex from llvm::getModuleSummaryIndexForFile under the option when the file is empty. Clang can then ignore the index when it is null. Clang patch is D28362. Reviewers: mehdi_amini Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D28410 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291302 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
41b68ffb50
commit
12722f7e6c
@ -22,6 +22,12 @@
|
||||
using namespace llvm;
|
||||
using namespace object;
|
||||
|
||||
static llvm::cl::opt<bool> IgnoreEmptyThinLTOIndexFile(
|
||||
"ignore-empty-index-file", llvm::cl::ZeroOrMore,
|
||||
llvm::cl::desc(
|
||||
"Ignore an empty index file and perform non-ThinLTO compilation"),
|
||||
llvm::cl::init(false));
|
||||
|
||||
ModuleSummaryIndexObjectFile::ModuleSummaryIndexObjectFile(
|
||||
MemoryBufferRef Object, std::unique_ptr<ModuleSummaryIndex> I)
|
||||
: SymbolicFile(Binary::ID_ModuleSummaryIndex, Object), Index(std::move(I)) {
|
||||
@ -97,6 +103,8 @@ llvm::getModuleSummaryIndexForFile(StringRef Path) {
|
||||
if (EC)
|
||||
return errorCodeToError(EC);
|
||||
MemoryBufferRef BufferRef = (FileOrErr.get())->getMemBufferRef();
|
||||
if (IgnoreEmptyThinLTOIndexFile && !BufferRef.getBufferSize())
|
||||
return nullptr;
|
||||
Expected<std::unique_ptr<object::ModuleSummaryIndexObjectFile>> ObjOrErr =
|
||||
object::ModuleSummaryIndexObjectFile::create(BufferRef);
|
||||
if (!ObjOrErr)
|
||||
|
Loading…
x
Reference in New Issue
Block a user