diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2023-12-18 20:30:12 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2024-04-19 21:12:03 +0000 |
commit | c9157d925c489f07ba9c0b2ce47e5149b75969a5 (patch) | |
tree | 08bc4a3d9cad3f9ebffa558ddf140b9d9257b219 /contrib/llvm-project/llvm/lib/ProfileData/Coverage/CoverageMappingWriter.cpp | |
parent | 2a66844f606a35d68ad8a8061f4bea204274b3bc (diff) |
Diffstat (limited to 'contrib/llvm-project/llvm/lib/ProfileData/Coverage/CoverageMappingWriter.cpp')
-rw-r--r-- | contrib/llvm-project/llvm/lib/ProfileData/Coverage/CoverageMappingWriter.cpp | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/contrib/llvm-project/llvm/lib/ProfileData/Coverage/CoverageMappingWriter.cpp b/contrib/llvm-project/llvm/lib/ProfileData/Coverage/CoverageMappingWriter.cpp index df65032da517..1c7d8a8909c4 100644 --- a/contrib/llvm-project/llvm/lib/ProfileData/Coverage/CoverageMappingWriter.cpp +++ b/contrib/llvm-project/llvm/lib/ProfileData/Coverage/CoverageMappingWriter.cpp @@ -237,6 +237,23 @@ void CoverageMappingWriter::write(raw_ostream &OS) { writeCounter(MinExpressions, Count, OS); writeCounter(MinExpressions, FalseCount, OS); break; + case CounterMappingRegion::MCDCBranchRegion: + encodeULEB128(unsigned(I->Kind) + << Counter::EncodingCounterTagAndExpansionRegionTagBits, + OS); + writeCounter(MinExpressions, Count, OS); + writeCounter(MinExpressions, FalseCount, OS); + encodeULEB128(unsigned(I->MCDCParams.ID), OS); + encodeULEB128(unsigned(I->MCDCParams.TrueID), OS); + encodeULEB128(unsigned(I->MCDCParams.FalseID), OS); + break; + case CounterMappingRegion::MCDCDecisionRegion: + encodeULEB128(unsigned(I->Kind) + << Counter::EncodingCounterTagAndExpansionRegionTagBits, + OS); + encodeULEB128(unsigned(I->MCDCParams.BitmapIdx), OS); + encodeULEB128(unsigned(I->MCDCParams.NumConditions), OS); + break; } assert(I->LineStart >= PrevLineStart); encodeULEB128(I->LineStart - PrevLineStart, OS); @@ -249,3 +266,37 @@ void CoverageMappingWriter::write(raw_ostream &OS) { // Ensure that all file ids have at least one mapping region. assert(CurrentFileID == (VirtualFileMapping.size() - 1)); } + +void TestingFormatWriter::write(raw_ostream &OS, TestingFormatVersion Version) { + auto ByteSwap = [](uint64_t N) { + return support::endian::byte_swap<uint64_t, llvm::endianness::little>(N); + }; + + // Output a 64bit magic number. + auto Magic = ByteSwap(TestingFormatMagic); + OS.write(reinterpret_cast<char *>(&Magic), sizeof(Magic)); + + // Output a 64bit version field. + auto VersionLittle = ByteSwap(uint64_t(Version)); + OS.write(reinterpret_cast<char *>(&VersionLittle), sizeof(VersionLittle)); + + // Output the ProfileNames data. + encodeULEB128(ProfileNamesData.size(), OS); + encodeULEB128(ProfileNamesAddr, OS); + OS << ProfileNamesData; + + // Version2 adds an extra field to indicate the size of the + // CoverageMappingData. + if (Version == TestingFormatVersion::Version2) + encodeULEB128(CoverageMappingData.size(), OS); + + // Coverage mapping data is expected to have an alignment of 8. + for (unsigned Pad = offsetToAlignment(OS.tell(), Align(8)); Pad; --Pad) + OS.write(uint8_t(0)); + OS << CoverageMappingData; + + // Coverage records data is expected to have an alignment of 8. + for (unsigned Pad = offsetToAlignment(OS.tell(), Align(8)); Pad; --Pad) + OS.write(uint8_t(0)); + OS << CoverageRecordsData; +} |