[ThinLTO] Allow indexing to request backend to ignore the module

Summary:
Gold plugin does not add pass to ThinLTO modules without useful symbols.
In this case ThinLTO can't create corresponding index file and some features, like CFI,
cannot be processes by backed correctly without index.
Given that we don't need the backed output we can request it to avoid
processing the module. This is implemented by this patch using new
"SkipModuleByDistributedBackend" flag.

Reviewers: pcc, tejohnson

Subscribers: mehdi_amini, inglorion, eraman, cfe-commits

Differential Revision: https://reviews.llvm.org/D42995

llvm-svn: 325411
This commit is contained in:
Vitaly Buka
2018-02-16 23:38:22 +00:00
parent c4a397f6e4
commit 6d1e549e7b
5 changed files with 62 additions and 8 deletions
+7 -4
View File
@@ -3604,10 +3604,13 @@ void IndexBitcodeWriter::writeCombinedGlobalValueSummary() {
Stream.EnterSubblock(bitc::GLOBALVAL_SUMMARY_BLOCK_ID, 3);
Stream.EmitRecord(bitc::FS_VERSION, ArrayRef<uint64_t>{INDEX_VERSION});
// Write the index flags. Currently we only write a single flag, the value of
// withGlobalValueDeadStripping, which only applies to the combined index.
Stream.EmitRecord(bitc::FS_FLAGS,
ArrayRef<uint64_t>{Index.withGlobalValueDeadStripping()});
// Write the index flags.
uint64_t Flags = 0;
if (Index.withGlobalValueDeadStripping())
Flags |= 0x1;
if (Index.skipModuleByDistributedBackend())
Flags |= 0x2;
Stream.EmitRecord(bitc::FS_FLAGS, ArrayRef<uint64_t>{Flags});
for (const auto &GVI : valueIds()) {
Stream.EmitRecord(bitc::FS_VALUE_GUID,