diff --git a/llvm/include/llvm/IR/ModuleSummaryIndex.h b/llvm/include/llvm/IR/ModuleSummaryIndex.h --- a/llvm/include/llvm/IR/ModuleSummaryIndex.h +++ b/llvm/include/llvm/IR/ModuleSummaryIndex.h @@ -994,6 +994,13 @@ : HaveGVs(HaveGVs), EnableSplitLTOUnit(EnableSplitLTOUnit), Saver(Alloc) { } + // Current version for the module summary in bitcode files. + // The BitcodeSummaryVersion should be bumped whenever we introduce changes + // in the way some record are interpreted, like flags for instance. + // Note that incrementing this may require changes in both BitcodeReader.cpp + // and BitcodeWriter.cpp. + static constexpr uint64_t BitcodeSummaryVersion = 8; + bool haveGVs() const { return HaveGVs; } gvsummary_iterator begin() { return GlobalValueMap.begin(); } diff --git a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp --- a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp +++ b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp @@ -5778,9 +5778,11 @@ } const uint64_t Version = Record[0]; const bool IsOldProfileFormat = Version == 1; - if (Version < 1 || Version > 8) + if (Version < 1 || Version > ModuleSummaryIndex::BitcodeSummaryVersion) return error("Invalid summary version " + Twine(Version) + - ". Version should be in the range [1-7]."); + ". Version should be in the range [1-" + + Twine(ModuleSummaryIndex::BitcodeSummaryVersion) + + "]."); Record.clear(); // Keep around the last seen summary to be used when we see an optional diff --git a/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp b/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp --- a/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp +++ b/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp @@ -3725,11 +3725,6 @@ NameVals.clear(); } -// Current version for the summary. -// This is bumped whenever we introduce changes in the way some record are -// interpreted, like flags for instance. -static const uint64_t INDEX_VERSION = 8; - /// Emit the per-module summary section alongside the rest of /// the module's bitcode. void ModuleBitcodeWriterBase::writePerModuleGlobalValueSummary() { @@ -3743,7 +3738,9 @@ : bitc::FULL_LTO_GLOBALVAL_SUMMARY_BLOCK_ID, 4); - Stream.EmitRecord(bitc::FS_VERSION, ArrayRef{INDEX_VERSION}); + Stream.EmitRecord( + bitc::FS_VERSION, + ArrayRef{ModuleSummaryIndex::BitcodeSummaryVersion}); // Write the index flags. uint64_t Flags = 0; @@ -3890,7 +3887,9 @@ /// Emit the combined summary section into the combined index file. void IndexBitcodeWriter::writeCombinedGlobalValueSummary() { Stream.EnterSubblock(bitc::GLOBALVAL_SUMMARY_BLOCK_ID, 3); - Stream.EmitRecord(bitc::FS_VERSION, ArrayRef{INDEX_VERSION}); + Stream.EmitRecord( + bitc::FS_VERSION, + ArrayRef{ModuleSummaryIndex::BitcodeSummaryVersion}); // Write the index flags. uint64_t Flags = 0; diff --git a/llvm/lib/IR/ModuleSummaryIndex.cpp b/llvm/lib/IR/ModuleSummaryIndex.cpp --- a/llvm/lib/IR/ModuleSummaryIndex.cpp +++ b/llvm/lib/IR/ModuleSummaryIndex.cpp @@ -61,6 +61,8 @@ return {RORefCnt, WORefCnt}; } +constexpr uint64_t ModuleSummaryIndex::BitcodeSummaryVersion; + // Collect for the given module the list of function it defines // (GUID -> Summary). void ModuleSummaryIndex::collectDefinedFunctionsForModule(