LLVM: include/llvm/ProfileData/GCOV.h Source File (original) (raw)
1
2
3
4
5
6
7
8
9
10
11
12
13
14#ifndef LLVM_PROFILEDATA_GCOV_H
15#define LLVM_PROFILEDATA_GCOV_H
16
28#include
29#include
30#include
31#include
32#include
33#include
34#include
35
36namespace llvm {
37
40
42
44
45
47 Options(bool A, bool B, bool C, bool F, bool P, bool U, bool I, bool L,
48 bool M, bool N, bool R, bool T, bool X, std::string SourcePrefix)
53
68};
69
70}
71
72
73
75public:
78
79
81 StringRef buf = Buffer->getBuffer();
83 if (magic == "gcno") {
85 } else if (magic == "oncg") {
87 } else {
88 errs() << "unexpected magic: " << magic << "\n";
89 return false;
90 }
91 return true;
92 }
93
94
96 StringRef buf = Buffer->getBuffer();
98 if (magic == "gcda") {
100 } else if (magic == "adcg") {
102 } else {
103 return false;
104 }
105 return true;
106 }
107
108
110 std::string str(de.getBytes(cursor, 4));
111 if (str.size() != 4)
112 return false;
113 if (de.isLittleEndian())
114 std::reverse(str.begin(), str.end());
115 int ver = str[0] >= 'A'
116 ? (str[0] - 'A') * 100 + (str[1] - '0') * 10 + str[2] - '0'
117 : (str[0] - '0') * 10 + str[2] - '0';
118 if (ver >= 120) {
120 return true;
121 } else if (ver >= 90) {
122
123 this->version = version = GCOV::V900;
124 return true;
125 } else if (ver >= 80) {
126
127 this->version = version = GCOV::V800;
128 return true;
129 } else if (ver >= 48) {
130
131 this->version = version = GCOV::V408;
132 return true;
133 } else if (ver >= 47) {
134
135 this->version = version = GCOV::V407;
136 return true;
137 } else if (ver >= 34) {
138 this->version = version = GCOV::V304;
139 return true;
140 }
141 errs() << "unexpected version: " << str << "\n";
142 return false;
143 }
144
148 if ((len) || len == 0)
149 return {};
150 return de.getBytes(cursor, len * 4).split('\0').first;
151 }
152
154 if (cursor.tell() + 4 > de.size()) {
155 Val = 0;
156 errs() << "unexpected end of memory buffer: " << cursor.tell() << "\n";
157 return false;
158 }
160 return true;
161 }
162
166 return false;
168 return true;
169 }
170
173 if ((len) || len == 0)
174 return false;
176 str = de.getBytes(cursor, len).drop_back();
177 else
178 str = de.getBytes(cursor, len * 4).split('\0').first;
180 }
181
184
185private:
188};
189
190
191
193public:
195
201
204
205public:
214
219
220private:
221 unsigned addNormalizedPathToMap(StringRef filename);
222};
223
235
236
238public:
241
243
248
252
256
272};
273
274
281
282
284public:
289
291
297
300
302
304
308
312
315
318 std::vector<std::pair<GCOVBlock *, size_t>> &stack);
321
322public:
331};
332
335
336}
337
338#endif
This file defines the StringMap class.
bbsections Prepares for basic block by splitting functions into clusters of basic blocks
static GCRegistry::Add< ErlangGC > A("erlang", "erlang-compatible garbage collector")
static GCRegistry::Add< OcamlGC > B("ocaml", "ocaml 3.10-compatible GC")
This file defines the DenseSet and SmallDenseSet classes.
dot regions Print regions of function to dot file(with no function bodies)"
This file defines the SmallString class.
This file defines the SmallVector class.
static TableGen::Emitter::OptClass< SkeletonEmitter > X("gen-skeleton-class", "Generate example skeleton class")
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
Implements a dense probed hash-table based set.
GCOVBlock - Collects block information.
Definition GCOV.h:283
void addLine(uint32_t N)
Definition GCOV.h:292
iterator_range< EdgeIterator > dsts() const
Definition GCOV.h:309
static LLVM_ABI uint64_t getCyclesCount(const BlockVector &blocks)
iterator_range< EdgeIterator > srcs() const
Definition GCOV.h:305
uint64_t getCount() const
Definition GCOV.h:299
GCOVBlock(uint32_t N)
Definition GCOV.h:290
SmallVector< BlockVector, 4 > BlockVectorLists
Definition GCOV.h:287
void addDstEdge(GCOVArc *Edge)
Definition GCOV.h:303
uint32_t getLastLine() const
Definition GCOV.h:298
SmallVector< GCOVBlockLocation > locations
Definition GCOV.h:327
uint32_t number
Definition GCOV.h:323
void addSrcEdge(GCOVArc *Edge)
Definition GCOV.h:301
SmallVectorImpl< GCOVArc * >::const_iterator EdgeIterator
Definition GCOV.h:285
bool traversable
Definition GCOV.h:329
SmallVector< GCOVArc *, 4 > Edges
Definition GCOV.h:288
LLVM_ABI void print(raw_ostream &OS) const
collectLineCounts - Collect line counts.
uint32_t lastLine
Definition GCOV.h:328
static LLVM_ABI uint64_t getLineCount(const BlockVector &Blocks)
SmallVector< const GCOVBlock *, 1 > BlockVector
Definition GCOV.h:286
GCOVArc * incoming
Definition GCOV.h:330
static LLVM_ABI uint64_t augmentOneCycle(GCOVBlock *src, std::vector< std::pair< GCOVBlock *, size_t > > &stack)
SmallVector< GCOVArc *, 2 > pred
Definition GCOV.h:325
LLVM_ABI void dump() const
dump - Dump GCOVBlock content to dbgs() for debugging purposes.
uint64_t count
Definition GCOV.h:324
void addFile(unsigned fileIdx)
Definition GCOV.h:296
SmallVector< GCOVArc *, 2 > succ
Definition GCOV.h:326
GCOVBuffer - A wrapper around MemoryBuffer to provide GCOV specific read operations.
Definition GCOV.h:74
bool readInt(uint32_t &Val)
Definition GCOV.h:153
DataExtractor::Cursor cursor
Definition GCOV.h:183
bool readInt64(uint64_t &Val)
Definition GCOV.h:163
~GCOVBuffer()
Definition GCOV.h:77
GCOVBuffer(MemoryBuffer *B)
Definition GCOV.h:76
bool readGCOVVersion(GCOV::GCOVVersion &version)
readGCOVVersion - Read GCOV version.
Definition GCOV.h:109
bool readString(StringRef &str)
Definition GCOV.h:171
DataExtractor de
Definition GCOV.h:182
uint32_t getWord()
Definition GCOV.h:145
bool readGCNOFormat()
readGCNOFormat - Check GCNO signature is valid at the beginning of buffer.
Definition GCOV.h:80
StringRef getString()
Definition GCOV.h:146
bool readGCDAFormat()
readGCDAFormat - Check GCDA signature is valid at the beginning of buffer.
Definition GCOV.h:95
GCOVFile - Collects coverage information for one pair of coverage file (.gcno and ....
Definition GCOV.h:192
SmallVector< std::unique_ptr< GCOVFunction >, 16 > functions
Definition GCOV.h:210
uint32_t checksum
Definition GCOV.h:208
iterator end() const
Definition GCOV.h:218
LLVM_ABI void print(raw_ostream &OS) const
iterator begin() const
Definition GCOV.h:217
uint32_t programCount
Definition GCOV.h:213
uint32_t runCount
Definition GCOV.h:212
GCOV::GCOVVersion version
Definition GCOV.h:207
std::vector< std::string > filenames
Definition GCOV.h:202
GCOV::GCOVVersion getVersion() const
Definition GCOV.h:198
LLVM_ABI void dump() const
dump - Dump GCOVFile content to dbgs() for debugging purposes.
std::map< uint32_t, GCOVFunction * > identToFunction
Definition GCOV.h:211
StringRef cwd
Definition GCOV.h:209
bool GCNOInitialized
Definition GCOV.h:206
StringMap< unsigned > filenameToIdx
Definition GCOV.h:203
LLVM_ABI bool readGCNO(GCOVBuffer &Buffer)
readGCNO - Read GCNO buffer.
pointee_iterator< SmallVectorImpl< std::unique_ptr< GCOVFunction > >::const_iterator > iterator
Definition GCOV.h:215
LLVM_ABI bool readGCDA(GCOVBuffer &Buffer)
readGCDA - Read GCDA buffer.
GCOVFunction - Collects function information.
Definition GCOV.h:237
LLVM_ABI uint64_t getEntryCount() const
getEntryCount - Get the number of times the function was called by retrieving the entry block's count...
uint32_t endColumn
Definition GCOV.h:264
SmallVector< std::unique_ptr< GCOVArc >, 0 > treeArcs
Definition GCOV.h:270
LLVM_ABI StringRef getName(bool demangle) const
uint32_t cfgChecksum
Definition GCOV.h:260
GCOVFunction(GCOVFile &file)
Definition GCOV.h:242
LLVM_ABI void dump() const
dump - Dump GCOVFunction content to dbgs() for debugging purposes.
StringRef Name
Definition GCOV.h:266
uint8_t artificial
Definition GCOV.h:265
LLVM_ABI void propagateCounts(const GCOVBlock &v, GCOVArc *pred)
uint32_t endLine
Definition GCOV.h:263
SmallVector< std::unique_ptr< GCOVBlock >, 0 > blocks
Definition GCOV.h:269
LLVM_ABI GCOVBlock & getExitBlock() const
LLVM_ABI StringRef getFilename() const
pointee_iterator< SmallVectorImpl< std::unique_ptr< GCOVBlock > >::const_iterator > BlockIterator
Definition GCOV.h:239
DenseSet< const GCOVBlock * > visited
Definition GCOV.h:271
uint32_t startLine
Definition GCOV.h:261
SmallString< 0 > demangled
Definition GCOV.h:267
LLVM_ABI void print(raw_ostream &OS) const
uint32_t startColumn
Definition GCOV.h:262
uint32_t linenoChecksum
Definition GCOV.h:259
iterator_range< BlockIterator > blocksRange() const
Definition GCOV.h:249
SmallVector< std::unique_ptr< GCOVArc >, 0 > arcs
Definition GCOV.h:270
uint32_t ident
Definition GCOV.h:258
unsigned srcIdx
Definition GCOV.h:268
GCOVFile & file
Definition GCOV.h:257
This interface provides simple read-only access to a block of memory, and provides simple methods for...
SmallString - A SmallString is just a SmallVector with methods and accessors that make it work better...
This class consists of common code factored out of the SmallVector class to reduce code duplication b...
typename SuperClass::const_iterator const_iterator
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
StringMap - This is an unconventional map that is specialized for handling keys that are "strings",...
StringRef - Represent a constant reference to a string, i.e.
constexpr StringRef substr(size_t Start, size_t N=npos) const
Return a reference to the substring from [Start, Start + N).
A range adaptor for a pair of iterators.
This class implements an extremely fast bulk output stream that can only output to a stream.
This provides a very simple, boring adaptor for a begin and end iterator into a range type.
@ C
The default llvm calling convention, compatible with C.
GCOVVersion
Definition GCOV.h:43
@ V407
Definition GCOV.h:43
@ V800
Definition GCOV.h:43
@ V408
Definition GCOV.h:43
@ V900
Definition GCOV.h:43
@ V1200
Definition GCOV.h:43
@ V304
Definition GCOV.h:43
This is an optimization pass for GlobalISel generic memory operations.
iterator_range< T > make_range(T x, T y)
Convenience function for iterating over sub-ranges.
LLVM_ABI raw_fd_ostream & errs()
This returns a reference to a raw_ostream for standard error.
OutputIt move(R &&Range, OutputIt Out)
Provide wrappers to std::move which take ranges instead of having to pass begin/end explicitly.
LLVM_ABI void gcovOneInput(const GCOV::Options &options, StringRef filename, StringRef gcno, StringRef gcda, GCOVFile &file)
void consumeError(Error Err)
Consume a Error without doing anything.
DEMANGLE_ABI std::string demangle(std::string_view MangledName)
Attempt to demangle a string using different demangling schemes.
Implement std::hash so that hash_code can be used in STL containers.
uint64_t count
Definition GCOV.h:232
LLVM_ABI bool onTree() const
GCOVBlock & src
Definition GCOV.h:229
GCOVBlock & dst
Definition GCOV.h:230
GCOVArc(GCOVBlock &src, GCOVBlock &dst, uint32_t flags)
Definition GCOV.h:225
uint64_t cycleCount
Definition GCOV.h:233
uint32_t flags
Definition GCOV.h:231
GCOVBlockLocation(unsigned idx)
Definition GCOV.h:276
SmallVector< uint32_t, 4 > lines
Definition GCOV.h:279
unsigned srcIdx
Definition GCOV.h:278
A struct for passing gcov options between functions.
Definition GCOV.h:46
bool Demangle
Definition GCOV.h:62
bool HashFilenames
Definition GCOV.h:66
bool PreservePaths
Definition GCOV.h:58
std::string SourcePrefix
Definition GCOV.h:67
bool BranchInfo
Definition GCOV.h:55
bool RelativeOnly
Definition GCOV.h:64
bool FuncCoverage
Definition GCOV.h:57
Options(bool A, bool B, bool C, bool F, bool P, bool U, bool I, bool L, bool M, bool N, bool R, bool T, bool X, std::string SourcePrefix)
Definition GCOV.h:47
bool NoOutput
Definition GCOV.h:63
bool UncondBranch
Definition GCOV.h:59
bool BranchCount
Definition GCOV.h:56
bool LongFileNames
Definition GCOV.h:61
bool UseStdout
Definition GCOV.h:65
bool AllBlocks
Definition GCOV.h:54
bool Intermediate
Definition GCOV.h:60
An iterator type that allows iterating over the pointees via some other iterator.