Skip to content

Commit

Permalink
[Serialization] Delta encode locations in expansion sloc entries
Browse files Browse the repository at this point in the history
This is a 1.9% reduction in PCH size in my measurements.

In abbreviated records, VBR6 seems to be slightl better than VBR8 for locations
that may be delta-encoded (i.e. not the first)

Differential Revision: https://reviews.llvm.org/D125952
  • Loading branch information
sam-mccall committed May 19, 2022
1 parent c3856cb commit 1dfd8e9
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 13 deletions.
15 changes: 7 additions & 8 deletions clang/lib/Serialization/ASTReader.cpp
Expand Up @@ -1589,14 +1589,13 @@ bool ASTReader::ReadSLocEntry(int ID) {
}

case SM_SLOC_EXPANSION_ENTRY: {
SourceLocation SpellingLoc = ReadSourceLocation(*F, Record[1]);
SourceMgr.createExpansionLoc(SpellingLoc,
ReadSourceLocation(*F, Record[2]),
ReadSourceLocation(*F, Record[3]),
Record[5],
Record[4],
ID,
BaseOffset + Record[0]);
LocSeq::State Seq;
SourceLocation SpellingLoc = ReadSourceLocation(*F, Record[1], Seq);
SourceLocation ExpansionBegin = ReadSourceLocation(*F, Record[2], Seq);
SourceLocation ExpansionEnd = ReadSourceLocation(*F, Record[3], Seq);
SourceMgr.createExpansionLoc(SpellingLoc, ExpansionBegin, ExpansionEnd,
Record[5], Record[4], ID,
BaseOffset + Record[0]);
break;
}
}
Expand Down
11 changes: 6 additions & 5 deletions clang/lib/Serialization/ASTWriter.cpp
Expand Up @@ -1715,8 +1715,8 @@ static unsigned CreateSLocExpansionAbbrev(llvm::BitstreamWriter &Stream) {
Abbrev->Add(BitCodeAbbrevOp(SM_SLOC_EXPANSION_ENTRY));
Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8)); // Offset
Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8)); // Spelling location
Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8)); // Start location
Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8)); // End location
Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // Start location
Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // End location
Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // Is token range
Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // Token length
return Stream.EmitAbbrev(std::move(Abbrev));
Expand Down Expand Up @@ -2139,12 +2139,13 @@ void ASTWriter::WriteSourceManagerBlock(SourceManager &SourceMgr,
} else {
// The source location entry is a macro expansion.
const SrcMgr::ExpansionInfo &Expansion = SLoc->getExpansion();
AddSourceLocation(Expansion.getSpellingLoc(), Record);
AddSourceLocation(Expansion.getExpansionLocStart(), Record);
LocSeq::State Seq;
AddSourceLocation(Expansion.getSpellingLoc(), Record, Seq);
AddSourceLocation(Expansion.getExpansionLocStart(), Record, Seq);
AddSourceLocation(Expansion.isMacroArgExpansion()
? SourceLocation()
: Expansion.getExpansionLocEnd(),
Record);
Record, Seq);
Record.push_back(Expansion.isExpansionTokenRange());

// Compute the token length for this macro expansion.
Expand Down

0 comments on commit 1dfd8e9

Please sign in to comment.