xref: /freebsd/contrib/llvm-project/llvm/include/llvm/ProfileData/Coverage/CoverageMappingWriter.h (revision 5f757f3ff9144b609b3c433dfd370cc6bdc191ad)
10b57cec5SDimitry Andric //===- CoverageMappingWriter.h - Code coverage mapping writer ---*- C++ -*-===//
20b57cec5SDimitry Andric //
30b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
40b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
50b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
60b57cec5SDimitry Andric //
70b57cec5SDimitry Andric //===----------------------------------------------------------------------===//
80b57cec5SDimitry Andric //
90b57cec5SDimitry Andric // This file contains support for writing coverage mapping data for
100b57cec5SDimitry Andric // instrumentation based coverage.
110b57cec5SDimitry Andric //
120b57cec5SDimitry Andric //===----------------------------------------------------------------------===//
130b57cec5SDimitry Andric 
140b57cec5SDimitry Andric #ifndef LLVM_PROFILEDATA_COVERAGE_COVERAGEMAPPINGWRITER_H
150b57cec5SDimitry Andric #define LLVM_PROFILEDATA_COVERAGE_COVERAGEMAPPINGWRITER_H
160b57cec5SDimitry Andric 
170b57cec5SDimitry Andric #include "llvm/ADT/ArrayRef.h"
180b57cec5SDimitry Andric #include "llvm/ADT/StringRef.h"
190b57cec5SDimitry Andric #include "llvm/ProfileData/Coverage/CoverageMapping.h"
200b57cec5SDimitry Andric 
210b57cec5SDimitry Andric namespace llvm {
220b57cec5SDimitry Andric 
230b57cec5SDimitry Andric class raw_ostream;
240b57cec5SDimitry Andric 
250b57cec5SDimitry Andric namespace coverage {
260b57cec5SDimitry Andric 
270b57cec5SDimitry Andric /// Writer of the filenames section for the instrumentation
280b57cec5SDimitry Andric /// based code coverage.
290b57cec5SDimitry Andric class CoverageFilenamesSectionWriter {
30fe6060f1SDimitry Andric   ArrayRef<std::string> Filenames;
310b57cec5SDimitry Andric 
320b57cec5SDimitry Andric public:
33fe6060f1SDimitry Andric   CoverageFilenamesSectionWriter(ArrayRef<std::string> Filenames);
340b57cec5SDimitry Andric 
355ffd83dbSDimitry Andric   /// Write encoded filenames to the given output stream. If \p Compress is
365ffd83dbSDimitry Andric   /// true, attempt to compress the filenames.
375ffd83dbSDimitry Andric   void write(raw_ostream &OS, bool Compress = true);
380b57cec5SDimitry Andric };
390b57cec5SDimitry Andric 
400b57cec5SDimitry Andric /// Writer for instrumentation based coverage mapping data.
410b57cec5SDimitry Andric class CoverageMappingWriter {
420b57cec5SDimitry Andric   ArrayRef<unsigned> VirtualFileMapping;
430b57cec5SDimitry Andric   ArrayRef<CounterExpression> Expressions;
440b57cec5SDimitry Andric   MutableArrayRef<CounterMappingRegion> MappingRegions;
450b57cec5SDimitry Andric 
460b57cec5SDimitry Andric public:
470b57cec5SDimitry Andric   CoverageMappingWriter(ArrayRef<unsigned> VirtualFileMapping,
480b57cec5SDimitry Andric                         ArrayRef<CounterExpression> Expressions,
490b57cec5SDimitry Andric                         MutableArrayRef<CounterMappingRegion> MappingRegions)
500b57cec5SDimitry Andric       : VirtualFileMapping(VirtualFileMapping), Expressions(Expressions),
510b57cec5SDimitry Andric         MappingRegions(MappingRegions) {}
520b57cec5SDimitry Andric 
530b57cec5SDimitry Andric   /// Write encoded coverage mapping data to the given output stream.
540b57cec5SDimitry Andric   void write(raw_ostream &OS);
550b57cec5SDimitry Andric };
560b57cec5SDimitry Andric 
57*5f757f3fSDimitry Andric /// Writer for the coverage mapping testing format.
58*5f757f3fSDimitry Andric class TestingFormatWriter {
59*5f757f3fSDimitry Andric   uint64_t ProfileNamesAddr;
60*5f757f3fSDimitry Andric   StringRef ProfileNamesData;
61*5f757f3fSDimitry Andric   StringRef CoverageMappingData;
62*5f757f3fSDimitry Andric   StringRef CoverageRecordsData;
63*5f757f3fSDimitry Andric 
64*5f757f3fSDimitry Andric public:
65*5f757f3fSDimitry Andric   TestingFormatWriter(uint64_t ProfileNamesAddr, StringRef ProfileNamesData,
66*5f757f3fSDimitry Andric                       StringRef CoverageMappingData,
67*5f757f3fSDimitry Andric                       StringRef CoverageRecordsData)
68*5f757f3fSDimitry Andric       : ProfileNamesAddr(ProfileNamesAddr), ProfileNamesData(ProfileNamesData),
69*5f757f3fSDimitry Andric         CoverageMappingData(CoverageMappingData),
70*5f757f3fSDimitry Andric         CoverageRecordsData(CoverageRecordsData) {}
71*5f757f3fSDimitry Andric 
72*5f757f3fSDimitry Andric   /// Encode to the given output stream.
73*5f757f3fSDimitry Andric   void
74*5f757f3fSDimitry Andric   write(raw_ostream &OS,
75*5f757f3fSDimitry Andric         TestingFormatVersion Version = TestingFormatVersion::CurrentVersion);
76*5f757f3fSDimitry Andric };
77*5f757f3fSDimitry Andric 
780b57cec5SDimitry Andric } // end namespace coverage
790b57cec5SDimitry Andric 
800b57cec5SDimitry Andric } // end namespace llvm
810b57cec5SDimitry Andric 
820b57cec5SDimitry Andric #endif // LLVM_PROFILEDATA_COVERAGE_COVERAGEMAPPINGWRITER_H
83