diff options
author | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2017-03-14 19:31:27 +0000 |
---|---|---|
committer | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2017-03-14 19:31:27 +0000 |
commit | 3cb183b1216636570b38f8189b43db7d11fc39af (patch) | |
tree | dad959e70c802a38537b8b5667c8f480bd17c939 /clang/lib/Serialization/ASTWriter.cpp | |
parent | 43dcf4d330452605faf895f00732f5414127fd61 (diff) | |
download | bcm5719-llvm-3cb183b1216636570b38f8189b43db7d11fc39af.tar.gz bcm5719-llvm-3cb183b1216636570b38f8189b43db7d11fc39af.zip |
Modules: Optimize bitcode encoding of diagnostic state
Since bitcode uses VBR encoding, large numbers are more expensive than
small ones. Instead of emitting a UINT_MAX sentinel after each sequence
of state-change pairs, emit the size of the sequence as a prefix.
This should have no functionality change besides saving bits from the
encoding.
llvm-svn: 297770
Diffstat (limited to 'clang/lib/Serialization/ASTWriter.cpp')
-rw-r--r-- | clang/lib/Serialization/ASTWriter.cpp | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/clang/lib/Serialization/ASTWriter.cpp b/clang/lib/Serialization/ASTWriter.cpp index b13a4e1ff4b..e9e64c2a66f 100644 --- a/clang/lib/Serialization/ASTWriter.cpp +++ b/clang/lib/Serialization/ASTWriter.cpp @@ -2871,14 +2871,18 @@ void ASTWriter::WritePragmaDiagnosticMappings(const DiagnosticsEngine &Diag, if (DiagStateID == 0) { DiagStateID = ++CurrID; + + // Add a placeholder for the number of mappings. + auto SizeIdx = Record.size(); + Record.emplace_back(); for (const auto &I : *State) { if (I.second.isPragma() || IncludeNonPragmaStates) { Record.push_back(I.first); Record.push_back((unsigned)I.second.getSeverity()); } } - // Add a sentinel to mark the end of the diag IDs. - Record.push_back(unsigned(-1)); + // Update the placeholder. + Record[SizeIdx] = (Record.size() - SizeIdx) / 2; } }; |