diff options
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; +} |