diff options
Diffstat (limited to 'llvm')
-rw-r--r-- | llvm/include/llvm/Bitcode/LLVMBitCodes.h | 2 | ||||
-rw-r--r-- | llvm/lib/Bitcode/Reader/BitcodeReader.cpp | 15 | ||||
-rw-r--r-- | llvm/lib/Bitcode/Writer/BitcodeWriter.cpp | 8 | ||||
-rw-r--r-- | llvm/test/Bitcode/summary_version.ll | 12 | ||||
-rw-r--r-- | llvm/test/Bitcode/thinlto-alias.ll | 2 | ||||
-rw-r--r-- | llvm/test/Bitcode/thinlto-function-summary-callgraph-pgo.ll | 2 | ||||
-rw-r--r-- | llvm/test/Bitcode/thinlto-function-summary-callgraph.ll | 2 | ||||
-rw-r--r-- | llvm/test/Bitcode/thinlto-function-summary-originalnames.ll | 1 | ||||
-rw-r--r-- | llvm/test/Bitcode/thinlto-function-summary.ll | 1 | ||||
-rw-r--r-- | llvm/test/tools/llvm-lto/thinlto.ll | 1 | ||||
-rw-r--r-- | llvm/tools/llvm-bcanalyzer/llvm-bcanalyzer.cpp | 1 |
11 files changed, 46 insertions, 1 deletions
diff --git a/llvm/include/llvm/Bitcode/LLVMBitCodes.h b/llvm/include/llvm/Bitcode/LLVMBitCodes.h index 71f3cc80dd7..1b25ff3768c 100644 --- a/llvm/include/llvm/Bitcode/LLVMBitCodes.h +++ b/llvm/include/llvm/Bitcode/LLVMBitCodes.h @@ -219,6 +219,8 @@ enum GlobalValueSummarySymtabCodes { FS_COMBINED_ALIAS = 8, // COMBINED_ORIGINAL_NAME: [original_name_hash] FS_COMBINED_ORIGINAL_NAME = 9, + // VERSION of the summary, bumped when adding flags for instance. + FS_VERSION = 10, }; enum MetadataCodes { diff --git a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp index cbacf8127d4..8b583fe4995 100644 --- a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp +++ b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp @@ -5995,8 +5995,21 @@ std::error_code ModuleSummaryIndexBitcodeReader::parseModule() { std::error_code ModuleSummaryIndexBitcodeReader::parseEntireSummary() { if (Stream.EnterSubBlock(bitc::GLOBALVAL_SUMMARY_BLOCK_ID)) return error("Invalid record"); - SmallVector<uint64_t, 64> Record; + + // Parse version + { + BitstreamEntry Entry = Stream.advanceSkippingSubblocks(); + if (Entry.Kind != BitstreamEntry::Record) + return error("Invalid Summary Block: record for version expected"); + if (Stream.readRecord(Entry.ID, Record) != bitc::FS_VERSION) + return error("Invalid Summary Block: version expected"); + } + const uint64_t Version = Record[0]; + if (Version != 1) + return error("Invalid summary version " + Twine(Version) + ", 1 expected"); + Record.clear(); + // Keep around the last seen summary to be used when we see an optional // "OriginalName" attachement. GlobalValueSummary *LastSeenSummary = nullptr; diff --git a/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp b/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp index 302629b9176..d0f87e7d9d0 100644 --- a/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp +++ b/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp @@ -3067,6 +3067,11 @@ void ModuleBitcodeWriter::writeModuleLevelReferences( 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 = 1; + /// Emit the per-module summary section alongside the rest of /// the module's bitcode. void ModuleBitcodeWriter::writePerModuleGlobalValueSummary() { @@ -3078,6 +3083,8 @@ void ModuleBitcodeWriter::writePerModuleGlobalValueSummary() { Stream.EnterSubblock(bitc::GLOBALVAL_SUMMARY_BLOCK_ID, 3); + Stream.EmitRecord(bitc::FS_VERSION, ArrayRef<uint64_t>{INDEX_VERSION}); + // Abbrev for FS_PERMODULE. BitCodeAbbrev *Abbv = new BitCodeAbbrev(); Abbv->Add(BitCodeAbbrevOp(bitc::FS_PERMODULE)); @@ -3162,6 +3169,7 @@ void ModuleBitcodeWriter::writePerModuleGlobalValueSummary() { /// 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<uint64_t>{INDEX_VERSION}); // Abbrev for FS_COMBINED. BitCodeAbbrev *Abbv = new BitCodeAbbrev(); diff --git a/llvm/test/Bitcode/summary_version.ll b/llvm/test/Bitcode/summary_version.ll new file mode 100644 index 00000000000..718a0ab9bd7 --- /dev/null +++ b/llvm/test/Bitcode/summary_version.ll @@ -0,0 +1,12 @@ +; Check summary versioning +; RUN: opt -module-summary %s -o - | llvm-bcanalyzer -dump | FileCheck %s + +; CHECK: <GLOBALVAL_SUMMARY_BLOCK +; CHECK: <VERSION op0=1/> + + + +; Need a function for the summary to be populated. +define void @foo() { + ret void +} diff --git a/llvm/test/Bitcode/thinlto-alias.ll b/llvm/test/Bitcode/thinlto-alias.ll index 7fe6d43ca48..56a01ec0553 100644 --- a/llvm/test/Bitcode/thinlto-alias.ll +++ b/llvm/test/Bitcode/thinlto-alias.ll @@ -6,6 +6,7 @@ ; RUN: llvm-bcanalyzer -dump %t3.thinlto.bc | FileCheck %s --check-prefix=COMBINED ; CHECK: <GLOBALVAL_SUMMARY_BLOCK +; CHECK-NEXT: <VERSION ; See if the call to func is registered, using the expected callsite count ; and value id matching the subsequent value symbol table. ; CHECK-NEXT: <PERMODULE {{.*}} op4=[[FUNCID:[0-9]+]] op5=1/> @@ -17,6 +18,7 @@ ; CHECK-NEXT: </VALUE_SYMTAB> ; COMBINED: <GLOBALVAL_SUMMARY_BLOCK +; COMBINED-NEXT: <VERSION ; See if the call to analias is registered, using the expected callsite count ; and value id matching the subsequent value symbol table. ; COMBINED-NEXT: <COMBINED {{.*}} op4=[[ALIASID:[0-9]+]] op5=1/> diff --git a/llvm/test/Bitcode/thinlto-function-summary-callgraph-pgo.ll b/llvm/test/Bitcode/thinlto-function-summary-callgraph-pgo.ll index dc9460849e7..7bf91a541a7 100644 --- a/llvm/test/Bitcode/thinlto-function-summary-callgraph-pgo.ll +++ b/llvm/test/Bitcode/thinlto-function-summary-callgraph-pgo.ll @@ -6,6 +6,7 @@ ; RUN: llvm-bcanalyzer -dump %t3.thinlto.bc | FileCheck %s --check-prefix=COMBINED ; CHECK: <GLOBALVAL_SUMMARY_BLOCK +; CHECK-NEXT: <VERSION ; See if the call to func is registered, using the expected callsite count ; and profile count, with value id matching the subsequent value symbol table. ; CHECK-NEXT: <PERMODULE_PROFILE {{.*}} op4=[[FUNCID:[0-9]+]] op5=1 op6=1/> @@ -17,6 +18,7 @@ ; CHECK-NEXT: </VALUE_SYMTAB> ; COMBINED: <GLOBALVAL_SUMMARY_BLOCK +; COMBINED-NEXT: <VERSION ; COMBINED-NEXT: <COMBINED ; See if the call to func is registered, using the expected callsite count ; and profile count, with value id matching the subsequent value symbol table. diff --git a/llvm/test/Bitcode/thinlto-function-summary-callgraph.ll b/llvm/test/Bitcode/thinlto-function-summary-callgraph.ll index e8533dbc055..878d39391d7 100644 --- a/llvm/test/Bitcode/thinlto-function-summary-callgraph.ll +++ b/llvm/test/Bitcode/thinlto-function-summary-callgraph.ll @@ -6,6 +6,7 @@ ; RUN: llvm-bcanalyzer -dump %t3.thinlto.bc | FileCheck %s --check-prefix=COMBINED ; CHECK: <GLOBALVAL_SUMMARY_BLOCK +; CHECK-NEXT: <VERSION ; See if the call to func is registered, using the expected callsite count ; and value id matching the subsequent value symbol table. ; CHECK-NEXT: <PERMODULE {{.*}} op4=[[FUNCID:[0-9]+]] op5=1/> @@ -17,6 +18,7 @@ ; CHECK-NEXT: </VALUE_SYMTAB> ; COMBINED: <GLOBALVAL_SUMMARY_BLOCK +; COMBINED-NEXT: <VERSION ; COMBINED-NEXT: <COMBINED ; See if the call to func is registered, using the expected callsite count ; and value id matching the subsequent value symbol table. diff --git a/llvm/test/Bitcode/thinlto-function-summary-originalnames.ll b/llvm/test/Bitcode/thinlto-function-summary-originalnames.ll index 50c0a864e4e..26cafeadd85 100644 --- a/llvm/test/Bitcode/thinlto-function-summary-originalnames.ll +++ b/llvm/test/Bitcode/thinlto-function-summary-originalnames.ll @@ -4,6 +4,7 @@ ; RUN: llvm-bcanalyzer -dump %t.index.bc | FileCheck %s --check-prefix=COMBINED ; COMBINED: <GLOBALVAL_SUMMARY_BLOCK +; COMBINED-NEXT: <VERSION ; COMBINED-DAG: <COMBINED ; COMBINED-DAG: <COMBINED_ORIGINAL_NAME op0=6699318081062747564/> ; COMBINED-DAG: <COMBINED_GLOBALVAR_INIT_REFS diff --git a/llvm/test/Bitcode/thinlto-function-summary.ll b/llvm/test/Bitcode/thinlto-function-summary.ll index 639b68df1df..8b18f07bdeb 100644 --- a/llvm/test/Bitcode/thinlto-function-summary.ll +++ b/llvm/test/Bitcode/thinlto-function-summary.ll @@ -5,6 +5,7 @@ ; same in the ValueSumbolTable, to ensure the ordering is stable. ; Also check the linkage field on the summary entries. ; BC: <GLOBALVAL_SUMMARY_BLOCK +; BC-NEXT: <VERSION ; BC-NEXT: <PERMODULE {{.*}} op0=1 op1=0 ; BC-NEXT: <PERMODULE {{.*}} op0=2 op1=0 ; BC-NEXT: <PERMODULE {{.*}} op0=3 op1=3 diff --git a/llvm/test/tools/llvm-lto/thinlto.ll b/llvm/test/tools/llvm-lto/thinlto.ll index b41561841cc..ee00da238c2 100644 --- a/llvm/test/tools/llvm-lto/thinlto.ll +++ b/llvm/test/tools/llvm-lto/thinlto.ll @@ -10,6 +10,7 @@ ; COMBINED-NEXT: <ENTRY {{.*}} record string = '{{.*}}thinlto.ll.tmp{{.*}}.o' ; COMBINED-NEXT: </MODULE_STRTAB_BLOCK ; COMBINED-NEXT: <GLOBALVAL_SUMMARY_BLOCK +; COMBINED-NEXT: <VERSION ; COMBINED-NEXT: <COMBINED ; COMBINED-NEXT: <COMBINED ; COMBINED-NEXT: </GLOBALVAL_SUMMARY_BLOCK diff --git a/llvm/tools/llvm-bcanalyzer/llvm-bcanalyzer.cpp b/llvm/tools/llvm-bcanalyzer/llvm-bcanalyzer.cpp index 0ce83c72f24..de0bf8ceda0 100644 --- a/llvm/tools/llvm-bcanalyzer/llvm-bcanalyzer.cpp +++ b/llvm/tools/llvm-bcanalyzer/llvm-bcanalyzer.cpp @@ -309,6 +309,7 @@ static const char *GetCodeName(unsigned CodeID, unsigned BlockID, STRINGIFY_CODE(FS, ALIAS) STRINGIFY_CODE(FS, COMBINED_ALIAS) STRINGIFY_CODE(FS, COMBINED_ORIGINAL_NAME) + STRINGIFY_CODE(FS, VERSION) } case bitc::METADATA_ATTACHMENT_ID: switch(CodeID) { |