diff options
author | Jeremy Morse <jeremy.morse@sony.com> | 2025-07-06 22:30:31 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-07-06 22:30:31 +0100 |
commit | 51f4e2cda2b3af853734b83aa523063afdd7bd46 (patch) | |
tree | 2b27cff742678e0a0e18e5c5c60e0efa23af4ce9 /llvm/lib/Bitcode/Writer/BitcodeWriter.cpp | |
parent | 5ccbea9f480d5c387c7f21aa101e72774c91f1d3 (diff) | |
download | llvm-51f4e2cda2b3af853734b83aa523063afdd7bd46.zip llvm-51f4e2cda2b3af853734b83aa523063afdd7bd46.tar.gz llvm-51f4e2cda2b3af853734b83aa523063afdd7bd46.tar.bz2 |
[Bitcode][NFC] Add abbrev for FUNC_CODE_DEBUG_LOC (#147211)
DILocations that are not attached to instructions are encoded using
METADATA_LOCATION records which have an abbrev. DILocations attached to
instructions are interleaved with instruction records as FUNC_CODE_DEBUG_LOC
records, which do not have an abbrev (and FUNC_CODE_DEBUG_LOC_AGAIN
which have no operands).
Add a new FUNCTION_BLOCK abbrev FUNCTION_DEBUG_LOC_ABBREV for
FUNC_CODE_DEBUG_LOC records.
This reduces the bc file size by up to 7% in CTMark, with many between 2-4%
smaller.
[per-file file size
compile-time-tracker](https://llvm-compile-time-tracker.com/compare.php?from=75cf826849713c00829cdf657e330e24c1a2fd03&to=1e268ebd0a581016660d9d7e942495c1be041f7d&stat=size-file&details=on)
(go to stage1-ReleaseLTO-g).
This optimisation is motivated by #144102, which adds the new Key Instructions
fields to bitcode records. The combined patches still overall look to be a
slight improvement over the base.
(Originally reviewed in PR #146497)
Co-authored-by: Orlando Cazalet-Hyams <orlando.hyams@sony.com>
Diffstat (limited to 'llvm/lib/Bitcode/Writer/BitcodeWriter.cpp')
-rw-r--r-- | llvm/lib/Bitcode/Writer/BitcodeWriter.cpp | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp b/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp index 64cb509..b143318 100644 --- a/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp +++ b/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp @@ -157,6 +157,7 @@ enum { FUNCTION_INST_CMP_ABBREV, FUNCTION_INST_CMP_FLAGS_ABBREV, FUNCTION_DEBUG_RECORD_VALUE_ABBREV, + FUNCTION_DEBUG_LOC_ABBREV, }; /// Abstract class to manage the bitcode writing, subclassed for each bitcode @@ -3747,7 +3748,8 @@ void ModuleBitcodeWriter::writeFunction( Vals.push_back(VE.getMetadataOrNullID(DL->getScope())); Vals.push_back(VE.getMetadataOrNullID(DL->getInlinedAt())); Vals.push_back(DL->isImplicitCode()); - Stream.EmitRecord(bitc::FUNC_CODE_DEBUG_LOC, Vals); + Stream.EmitRecord(bitc::FUNC_CODE_DEBUG_LOC, Vals, + FUNCTION_DEBUG_LOC_ABBREV); Vals.clear(); LastDL = DL; } @@ -4131,6 +4133,19 @@ void ModuleBitcodeWriter::writeBlockInfo() { FUNCTION_DEBUG_RECORD_VALUE_ABBREV) llvm_unreachable("Unexpected abbrev ordering! 1"); } + { + auto Abbv = std::make_shared<BitCodeAbbrev>(); + Abbv->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_DEBUG_LOC)); + // NOTE: No IsDistinct field for FUNC_CODE_DEBUG_LOC. + Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); + Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8)); + Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); + Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); + Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); + if (Stream.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID, Abbv) != + FUNCTION_DEBUG_LOC_ABBREV) + llvm_unreachable("Unexpected abbrev ordering!"); + } Stream.ExitBlock(); } |