xref: /freebsd/contrib/llvm-project/llvm/include/llvm/ProfileData/Coverage/CoverageMappingWriter.h (revision 0d0c8621fd181e507f0fb50ffcca606faf66a8c2)
1  //===- CoverageMappingWriter.h - Code coverage mapping writer ---*- C++ -*-===//
2  //
3  // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4  // See https://llvm.org/LICENSE.txt for license information.
5  // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6  //
7  //===----------------------------------------------------------------------===//
8  //
9  // This file contains support for writing coverage mapping data for
10  // instrumentation based coverage.
11  //
12  //===----------------------------------------------------------------------===//
13  
14  #ifndef LLVM_PROFILEDATA_COVERAGE_COVERAGEMAPPINGWRITER_H
15  #define LLVM_PROFILEDATA_COVERAGE_COVERAGEMAPPINGWRITER_H
16  
17  #include "llvm/ADT/ArrayRef.h"
18  #include "llvm/ADT/StringRef.h"
19  #include "llvm/ProfileData/Coverage/CoverageMapping.h"
20  
21  namespace llvm {
22  
23  class raw_ostream;
24  
25  namespace coverage {
26  
27  /// Writer of the filenames section for the instrumentation
28  /// based code coverage.
29  class CoverageFilenamesSectionWriter {
30    ArrayRef<std::string> Filenames;
31  
32  public:
33    CoverageFilenamesSectionWriter(ArrayRef<std::string> Filenames);
34  
35    /// Write encoded filenames to the given output stream. If \p Compress is
36    /// true, attempt to compress the filenames.
37    void write(raw_ostream &OS, bool Compress = true);
38  };
39  
40  /// Writer for instrumentation based coverage mapping data.
41  class CoverageMappingWriter {
42    ArrayRef<unsigned> VirtualFileMapping;
43    ArrayRef<CounterExpression> Expressions;
44    MutableArrayRef<CounterMappingRegion> MappingRegions;
45  
46  public:
47    CoverageMappingWriter(ArrayRef<unsigned> VirtualFileMapping,
48                          ArrayRef<CounterExpression> Expressions,
49                          MutableArrayRef<CounterMappingRegion> MappingRegions)
50        : VirtualFileMapping(VirtualFileMapping), Expressions(Expressions),
51          MappingRegions(MappingRegions) {}
52  
53    /// Write encoded coverage mapping data to the given output stream.
54    void write(raw_ostream &OS);
55  };
56  
57  /// Writer for the coverage mapping testing format.
58  class TestingFormatWriter {
59    uint64_t ProfileNamesAddr;
60    StringRef ProfileNamesData;
61    StringRef CoverageMappingData;
62    StringRef CoverageRecordsData;
63  
64  public:
65    TestingFormatWriter(uint64_t ProfileNamesAddr, StringRef ProfileNamesData,
66                        StringRef CoverageMappingData,
67                        StringRef CoverageRecordsData)
68        : ProfileNamesAddr(ProfileNamesAddr), ProfileNamesData(ProfileNamesData),
69          CoverageMappingData(CoverageMappingData),
70          CoverageRecordsData(CoverageRecordsData) {}
71  
72    /// Encode to the given output stream.
73    void
74    write(raw_ostream &OS,
75          TestingFormatVersion Version = TestingFormatVersion::CurrentVersion);
76  };
77  
78  } // end namespace coverage
79  
80  } // end namespace llvm
81  
82  #endif // LLVM_PROFILEDATA_COVERAGE_COVERAGEMAPPINGWRITER_H
83