From c9157d925c489f07ba9c0b2ce47e5149b75969a5 Mon Sep 17 00:00:00 2001 From: Dimitry Andric Date: Mon, 18 Dec 2023 21:30:12 +0100 Subject: Merge llvm-project main llvmorg-18-init-15088-gd14ee76181fb This updates llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to llvm-project main llvmorg-18-init-15088-gd14ee76181fb. PR: 276104 MFC after: 1 month (cherry picked from commit 5f757f3ff9144b609b3c433dfd370cc6bdc191ad) --- .../ProfileData/Coverage/CoverageMappingWriter.cpp | 51 ++++++++++++++++++++++ 1 file changed, 51 insertions(+) (limited to 'contrib/llvm-project/llvm/lib/ProfileData/Coverage/CoverageMappingWriter.cpp') 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(N); + }; + + // Output a 64bit magic number. + auto Magic = ByteSwap(TestingFormatMagic); + OS.write(reinterpret_cast(&Magic), sizeof(Magic)); + + // Output a 64bit version field. + auto VersionLittle = ByteSwap(uint64_t(Version)); + OS.write(reinterpret_cast(&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; +} -- cgit v1.2.3