LLVM  16.0.0git
GCOV.h
Go to the documentation of this file.
1 //===- GCOV.h - LLVM coverage tool ------------------------------*- 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 header provides the interface to read and write coverage files that
10 // use 'gcov' format.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #ifndef LLVM_PROFILEDATA_GCOV_H
15 #define LLVM_PROFILEDATA_GCOV_H
16 
17 #include "llvm/ADT/DenseSet.h"
18 #include "llvm/ADT/SmallVector.h"
19 #include "llvm/ADT/StringMap.h"
20 #include "llvm/ADT/StringRef.h"
21 #include "llvm/ADT/iterator.h"
26 #include <algorithm>
27 #include <cstddef>
28 #include <cstdint>
29 #include <map>
30 #include <memory>
31 #include <string>
32 #include <utility>
33 
34 namespace llvm {
35 
36 class GCOVFunction;
37 class GCOVBlock;
38 
39 namespace GCOV {
40 
42 
43 /// A struct for passing gcov options between functions.
44 struct Options {
45  Options(bool A, bool B, bool C, bool F, bool P, bool U, bool I, bool L,
46  bool M, bool N, bool R, bool T, bool X, std::string SourcePrefix)
51 
52  bool AllBlocks;
53  bool BranchInfo;
60  bool Demangle;
61  bool NoOutput;
63  bool UseStdout;
65  std::string SourcePrefix;
66 };
67 
68 } // end namespace GCOV
69 
70 /// GCOVBuffer - A wrapper around MemoryBuffer to provide GCOV specific
71 /// read operations.
72 class GCOVBuffer {
73 public:
74  GCOVBuffer(MemoryBuffer *B) : Buffer(B) {}
76 
77  /// readGCNOFormat - Check GCNO signature is valid at the beginning of buffer.
78  bool readGCNOFormat() {
79  StringRef buf = Buffer->getBuffer();
80  StringRef magic = buf.substr(0, 4);
81  if (magic == "gcno") {
82  de = DataExtractor(buf.substr(4), false, 0);
83  } else if (magic == "oncg") {
84  de = DataExtractor(buf.substr(4), true, 0);
85  } else {
86  errs() << "unexpected magic: " << magic << "\n";
87  return false;
88  }
89  return true;
90  }
91 
92  /// readGCDAFormat - Check GCDA signature is valid at the beginning of buffer.
93  bool readGCDAFormat() {
94  StringRef buf = Buffer->getBuffer();
95  StringRef magic = buf.substr(0, 4);
96  if (magic == "gcda") {
97  de = DataExtractor(buf.substr(4), false, 0);
98  } else if (magic == "adcg") {
99  de = DataExtractor(buf.substr(4), true, 0);
100  } else {
101  return false;
102  }
103  return true;
104  }
105 
106  /// readGCOVVersion - Read GCOV version.
108  std::string str(de.getBytes(cursor, 4));
109  if (str.size() != 4)
110  return false;
111  if (de.isLittleEndian())
112  std::reverse(str.begin(), str.end());
113  int ver = str[0] >= 'A'
114  ? (str[0] - 'A') * 100 + (str[1] - '0') * 10 + str[2] - '0'
115  : (str[0] - '0') * 10 + str[2] - '0';
116  if (ver >= 120) {
117  this->version = version = GCOV::V1200;
118  return true;
119  } else if (ver >= 90) {
120  // PR gcov-profile/84846, r269678
121  this->version = version = GCOV::V900;
122  return true;
123  } else if (ver >= 80) {
124  // PR gcov-profile/48463
125  this->version = version = GCOV::V800;
126  return true;
127  } else if (ver >= 48) {
128  // r189778: the exit block moved from the last to the second.
129  this->version = version = GCOV::V408;
130  return true;
131  } else if (ver >= 47) {
132  // r173147: split checksum into cfg checksum and line checksum.
133  this->version = version = GCOV::V407;
134  return true;
135  } else if (ver >= 34) {
136  this->version = version = GCOV::V304;
137  return true;
138  }
139  errs() << "unexpected version: " << str << "\n";
140  return false;
141  }
142 
143  uint32_t getWord() { return de.getU32(cursor); }
145  uint32_t len;
146  if (!readInt(len) || len == 0)
147  return {};
148  return de.getBytes(cursor, len * 4).split('\0').first;
149  }
150 
151  bool readInt(uint32_t &Val) {
152  if (cursor.tell() + 4 > de.size()) {
153  Val = 0;
154  errs() << "unexpected end of memory buffer: " << cursor.tell() << "\n";
155  return false;
156  }
157  Val = de.getU32(cursor);
158  return true;
159  }
160 
161  bool readInt64(uint64_t &Val) {
162  uint32_t Lo, Hi;
163  if (!readInt(Lo) || !readInt(Hi))
164  return false;
165  Val = ((uint64_t)Hi << 32) | Lo;
166  return true;
167  }
168 
169  bool readString(StringRef &str) {
170  uint32_t len;
171  if (!readInt(len) || len == 0)
172  return false;
173  if (version >= GCOV::V1200)
174  str = de.getBytes(cursor, len).drop_back();
175  else
176  str = de.getBytes(cursor, len * 4).split('\0').first;
177  return bool(cursor);
178  }
179 
182 
183 private:
184  MemoryBuffer *Buffer;
185  GCOV::GCOVVersion version{};
186 };
187 
188 /// GCOVFile - Collects coverage information for one pair of coverage file
189 /// (.gcno and .gcda).
190 class GCOVFile {
191 public:
192  GCOVFile() = default;
193 
194  bool readGCNO(GCOVBuffer &Buffer);
195  bool readGCDA(GCOVBuffer &Buffer);
197  void print(raw_ostream &OS) const;
198  void dump() const;
199 
200  std::vector<std::string> filenames;
202 
203 public:
204  bool GCNOInitialized = false;
209  std::map<uint32_t, GCOVFunction *> identToFunction;
212 
213  using iterator = pointee_iterator<
215  iterator begin() const { return iterator(functions.begin()); }
216  iterator end() const { return iterator(functions.end()); }
217 };
218 
219 struct GCOVArc {
221  : src(src), dst(dst), flags(flags) {}
222  bool onTree() const;
223 
229 };
230 
231 /// GCOVFunction - Collects function information.
233 public:
236 
238 
239  StringRef getName(bool demangle) const;
240  StringRef getFilename() const;
241  uint64_t getEntryCount() const;
242  GCOVBlock &getExitBlock() const;
243 
245  return make_range(blocks.begin(), blocks.end());
246  }
247 
249  void print(raw_ostream &OS) const;
250  void dump() const;
251 
260  uint8_t artificial = 0;
263  unsigned srcIdx;
267 };
268 
269 /// GCOVBlock - Collects block information.
270 class GCOVBlock {
271 public:
276 
278 
279  void addLine(uint32_t N) { lines.push_back(N); }
280  uint32_t getLastLine() const { return lines.back(); }
281  uint64_t getCount() const { return count; }
282 
283  void addSrcEdge(GCOVArc *Edge) { pred.push_back(Edge); }
284 
285  void addDstEdge(GCOVArc *Edge) { succ.push_back(Edge); }
286 
288  return make_range(pred.begin(), pred.end());
289  }
290 
292  return make_range(succ.begin(), succ.end());
293  }
294 
295  void print(raw_ostream &OS) const;
296  void dump() const;
297 
298  static uint64_t
300  std::vector<std::pair<GCOVBlock *, size_t>> &stack);
301  static uint64_t getCyclesCount(const BlockVector &blocks);
302  static uint64_t getLineCount(const BlockVector &Blocks);
303 
304 public:
310  bool traversable = false;
311  GCOVArc *incoming = nullptr;
312 };
313 
315  StringRef gcno, StringRef gcda, GCOVFile &file);
316 
317 } // end namespace llvm
318 
319 #endif // LLVM_PROFILEDATA_GCOV_H
llvm::GCOVFile::functions
SmallVector< std::unique_ptr< GCOVFunction >, 16 > functions
Definition: GCOV.h:208
MemoryBuffer.h
const_iterator
llvm::GCOVFile::iterator
pointee_iterator< SmallVectorImpl< std::unique_ptr< GCOVFunction > >::const_iterator > iterator
Definition: GCOV.h:214
llvm::GCOVFunction::artificial
uint8_t artificial
Definition: GCOV.h:260
llvm::GCOVBlock::getLineCount
static uint64_t getLineCount(const BlockVector &Blocks)
llvm::GCOVBuffer::cursor
DataExtractor::Cursor cursor
Definition: GCOV.h:181
llvm::GCOVBlock::srcs
iterator_range< EdgeIterator > srcs() const
Definition: GCOV.h:287
llvm::GCOVBuffer::readGCOVVersion
bool readGCOVVersion(GCOV::GCOVVersion &version)
readGCOVVersion - Read GCOV version.
Definition: GCOV.h:107
llvm
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18
llvm::GCOVFunction::getEntryCount
uint64_t getEntryCount() const
getEntryCount - Get the number of times the function was called by retrieving the entry block's count...
Definition: GCOV.cpp:357
llvm::GCOVFunction::cfgChecksum
uint32_t cfgChecksum
Definition: GCOV.h:255
M
We currently emits eax Perhaps this is what we really should generate is Is imull three or four cycles eax eax The current instruction priority is based on pattern complexity The former is more complex because it folds a load so the latter will not be emitted Perhaps we should use AddedComplexity to give LEA32r a higher priority We should always try to match LEA first since the LEA matching code does some estimate to determine whether the match is profitable if we care more about code then imull is better It s two bytes shorter than movl leal On a Pentium M
Definition: README.txt:252
llvm::make_range
iterator_range< T > make_range(T x, T y)
Convenience function for iterating over sub-ranges.
Definition: iterator_range.h:53
llvm::GCOVBlock::pred
SmallVector< GCOVArc *, 2 > pred
Definition: GCOV.h:307
llvm::GCOVFunction::startLine
uint32_t startLine
Definition: GCOV.h:256
llvm::GCOVFunction::demangled
SmallString< 0 > demangled
Definition: GCOV.h:262
llvm::GCOVFile::cwd
StringRef cwd
Definition: GCOV.h:207
llvm::GCOVBuffer::de
DataExtractor de
Definition: GCOV.h:180
llvm::GCOVBlock::incoming
GCOVArc * incoming
Definition: GCOV.h:311
llvm::GCOVBlock
GCOVBlock - Collects block information.
Definition: GCOV.h:270
StringRef.h
P
This currently compiles esp xmm0 movsd esp eax eax esp ret We should use not the dag combiner This is because dagcombine2 needs to be able to see through the X86ISD::Wrapper which DAGCombine can t really do The code for turning x load into a single vector load is target independent and should be moved to the dag combiner The code for turning x load into a vector load can only handle a direct load from a global or a direct load from the stack It should be generalized to handle any load from P
Definition: README-SSE.txt:411
llvm::SmallVector
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
Definition: SmallVector.h:1199
llvm::GCOV::GCOVVersion
GCOVVersion
Definition: GCOV.h:41
llvm::GCOVBuffer::GCOVBuffer
GCOVBuffer(MemoryBuffer *B)
Definition: GCOV.h:74
llvm::GCOVFunction::visited
DenseSet< const GCOVBlock * > visited
Definition: GCOV.h:266
llvm::GCOVFile::identToFunction
std::map< uint32_t, GCOVFunction * > identToFunction
Definition: GCOV.h:209
llvm::StringRef::substr
StringRef substr(size_t Start, size_t N=npos) const
Return a reference to the substring from [Start, Start + N).
Definition: StringRef.h:564
T
#define T
Definition: Mips16ISelLowering.cpp:341
llvm::GCOVBlock::count
uint64_t count
Definition: GCOV.h:306
llvm::GCOVArc::count
uint64_t count
Definition: GCOV.h:227
llvm::errs
raw_fd_ostream & errs()
This returns a reference to a raw_ostream for standard error.
Definition: raw_ostream.cpp:891
llvm::GCOV::Options::Options
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:45
llvm::GCOVFunction::getName
StringRef getName(bool demangle) const
Definition: GCOV.cpp:333
llvm::GCOVBlock::addLine
void addLine(uint32_t N)
Definition: GCOV.h:279
llvm::consumeError
void consumeError(Error Err)
Consume a Error without doing anything.
Definition: Error.h:1042
llvm::GCOVBlock::BlockVector
SmallVector< const GCOVBlock *, 1 > BlockVector
Definition: GCOV.h:273
llvm::MemoryBuffer
This interface provides simple read-only access to a block of memory, and provides simple methods for...
Definition: MemoryBuffer.h:51
llvm::GCOV::Options::NoOutput
bool NoOutput
Definition: GCOV.h:61
F
#define F(x, y, z)
Definition: MD5.cpp:55
llvm::GCOV::V900
@ V900
Definition: GCOV.h:41
llvm::GCOVArc::flags
uint32_t flags
Definition: GCOV.h:226
llvm::GCOVFile::filenameToIdx
StringMap< unsigned > filenameToIdx
Definition: GCOV.h:201
llvm::GCOVFile::dump
void dump() const
dump - Dump GCOVFile content to dbgs() for debugging purposes.
Definition: GCOV.cpp:325
llvm::GCOV::Options::AllBlocks
bool AllBlocks
Definition: GCOV.h:52
llvm::DataExtractor::Cursor::takeError
Error takeError()
Return error contained inside this Cursor, if any.
Definition: DataExtractor.h:78
llvm::GCOVBlock::addDstEdge
void addDstEdge(GCOVArc *Edge)
Definition: GCOV.h:285
llvm::DataExtractor::getBytes
StringRef getBytes(uint64_t *OffsetPtr, uint64_t Length, Error *Err=nullptr) const
Extract a fixed number of bytes from the specified offset.
Definition: DataExtractor.cpp:180
llvm::GCOVFile::begin
iterator begin() const
Definition: GCOV.h:215
llvm::GCOV::Options::UseStdout
bool UseStdout
Definition: GCOV.h:63
llvm::DataExtractor::isLittleEndian
bool isLittleEndian() const
Get the endianness for this extractor.
Definition: DataExtractor.h:97
llvm::GCOVArc::cycleCount
uint64_t cycleCount
Definition: GCOV.h:228
llvm::GCOVFunction::blocksRange
iterator_range< BlockIterator > blocksRange() const
Definition: GCOV.h:244
C
(vector float) vec_cmpeq(*A, *B) C
Definition: README_ALTIVEC.txt:86
llvm::GCOVFunction::ident
uint32_t ident
Definition: GCOV.h:253
llvm::GCOVBlock::number
uint32_t number
Definition: GCOV.h:305
llvm::GCOVBuffer::readGCDAFormat
bool readGCDAFormat()
readGCDAFormat - Check GCDA signature is valid at the beginning of buffer.
Definition: GCOV.h:93
llvm::GCOV::V407
@ V407
Definition: GCOV.h:41
llvm::GCOV::Options::RelativeOnly
bool RelativeOnly
Definition: GCOV.h:62
llvm::GCOVBlock::lines
SmallVector< uint32_t, 4 > lines
Definition: GCOV.h:309
llvm::GCOVBlock::succ
SmallVector< GCOVArc *, 2 > succ
Definition: GCOV.h:308
llvm::GCOV::V1200
@ V1200
Definition: GCOV.h:41
DenseSet.h
B
static GCRegistry::Add< OcamlGC > B("ocaml", "ocaml 3.10-compatible GC")
llvm::GCOVFunction::file
GCOVFile & file
Definition: GCOV.h:252
llvm::GCOVBlock::getCyclesCount
static uint64_t getCyclesCount(const BlockVector &blocks)
Definition: GCOV.cpp:489
llvm::GCOVFunction::getFilename
StringRef getFilename() const
Definition: GCOV.cpp:353
llvm::GCOVFunction::endLine
uint32_t endLine
Definition: GCOV.h:258
llvm::raw_ostream
This class implements an extremely fast bulk output stream that can only output to a stream.
Definition: raw_ostream.h:52
llvm::GCOVBuffer::getString
StringRef getString()
Definition: GCOV.h:144
llvm::MemoryBuffer::getBuffer
StringRef getBuffer() const
Definition: MemoryBuffer.h:70
llvm::GCOVFile::end
iterator end() const
Definition: GCOV.h:216
llvm::GCOVBlock::getCount
uint64_t getCount() const
Definition: GCOV.h:281
X
static GCMetadataPrinterRegistry::Add< ErlangGCPrinter > X("erlang", "erlang-compatible garbage collector")
llvm::demangle
std::string demangle(const std::string &MangledName)
Attempt to demangle a string using different demangling schemes.
Definition: Demangle.cpp:29
llvm::GCOV::Options::BranchCount
bool BranchCount
Definition: GCOV.h:54
llvm::StringMap< unsigned >
llvm::SmallString< 0 >
llvm::GCOVBlock::getLastLine
uint32_t getLastLine() const
Definition: GCOV.h:280
llvm::GCOVFile::GCOVFile
GCOVFile()=default
llvm::GCOVBlock::augmentOneCycle
static uint64_t augmentOneCycle(GCOVBlock *src, std::vector< std::pair< GCOVBlock *, size_t >> &stack)
Definition: GCOV.cpp:438
llvm::GCOVFile::getVersion
GCOV::GCOVVersion getVersion() const
Definition: GCOV.h:196
llvm::DataExtractor::size
size_t size() const
Return the number of bytes in the underlying buffer.
Definition: DataExtractor.h:688
llvm::DenseSet
Implements a dense probed hash-table based set.
Definition: DenseSet.h:268
llvm::GCOV::Options::UncondBranch
bool UncondBranch
Definition: GCOV.h:57
llvm::GCOVFunction::getExitBlock
GCOVBlock & getExitBlock() const
Definition: GCOV.cpp:361
llvm::GCOVBlock::traversable
bool traversable
Definition: GCOV.h:310
file
dot regions Print regions of function to dot file(with no function bodies)"
llvm::GCOV::Options::LongFileNames
bool LongFileNames
Definition: GCOV.h:59
uint64_t
llvm::GCOVBlock::EdgeIterator
SmallVectorImpl< GCOVArc * >::const_iterator EdgeIterator
Definition: GCOV.h:272
iterator.h
I
#define I(x, y, z)
Definition: MD5.cpp:58
llvm::GCOVArc::src
GCOVBlock & src
Definition: GCOV.h:224
llvm::GCOVFunction::arcs
SmallVector< std::unique_ptr< GCOVArc >, 0 > arcs
Definition: GCOV.h:265
llvm::SmallVectorImpl::const_iterator
typename SuperClass::const_iterator const_iterator
Definition: SmallVector.h:582
llvm::move
OutputIt move(R &&Range, OutputIt Out)
Provide wrappers to std::move which take ranges instead of having to pass begin/end explicitly.
Definition: STLExtras.h:1836
llvm::DataExtractor::Cursor::tell
uint64_t tell() const
Return the current position of this Cursor.
Definition: DataExtractor.h:71
iterator_range.h
llvm::GCOV::Options::FuncCoverage
bool FuncCoverage
Definition: GCOV.h:55
llvm::GCOVBuffer::readInt
bool readInt(uint32_t &Val)
Definition: GCOV.h:151
llvm::DataExtractor::Cursor
A class representing a position in a DataExtractor, as well as any error encountered during extractio...
Definition: DataExtractor.h:54
llvm::gcovOneInput
void gcovOneInput(const GCOV::Options &options, StringRef filename, StringRef gcno, StringRef gcda, GCOVFile &file)
Definition: GCOV.cpp:957
llvm::GCOVFunction::Name
StringRef Name
Definition: GCOV.h:261
llvm::GCOVBlock::GCOVBlock
GCOVBlock(uint32_t N)
Definition: GCOV.h:277
llvm::GCOVBuffer::readInt64
bool readInt64(uint64_t &Val)
Definition: GCOV.h:161
llvm::DataExtractor::getU32
uint32_t getU32(uint64_t *offset_ptr, Error *Err=nullptr) const
Extract a uint32_t value from *offset_ptr.
Definition: DataExtractor.cpp:107
llvm::ArrayRef< uint8_t >
llvm::StringRef
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:50
uint32_t
llvm::GCOVBuffer::getWord
uint32_t getWord()
Definition: GCOV.h:143
llvm::GCOV::V800
@ V800
Definition: GCOV.h:41
llvm::GCOVArc
Definition: GCOV.h:219
llvm::GCOVFile::runCount
uint32_t runCount
Definition: GCOV.h:210
llvm::GCOVFunction::srcIdx
unsigned srcIdx
Definition: GCOV.h:263
llvm::GCOVFunction::dump
void dump() const
dump - Dump GCOVFunction content to dbgs() for debugging purposes.
Definition: GCOV.cpp:398
llvm::GCOVFile::print
void print(raw_ostream &OS) const
Definition: GCOV.cpp:318
llvm::GCOV::Options::Demangle
bool Demangle
Definition: GCOV.h:60
llvm::GCOV::Options::HashFilenames
bool HashFilenames
Definition: GCOV.h:64
std
Definition: BitVector.h:851
llvm::GCOV::Options
A struct for passing gcov options between functions.
Definition: GCOV.h:44
llvm::GCOV::Options::Intermediate
bool Intermediate
Definition: GCOV.h:58
llvm::GCOVFile::version
GCOV::GCOVVersion version
Definition: GCOV.h:205
llvm::GCOVArc::onTree
bool onTree() const
Definition: GCOV.cpp:328
llvm::GCOV::Options::BranchInfo
bool BranchInfo
Definition: GCOV.h:53
options
The object format emitted by the WebAssembly backed is documented see the home and packaging for producing WebAssembly applications that can run in browsers and other environments wasi sdk provides a more minimal C C SDK based on llvm and a libc based on for producing WebAssemmbly applictions that use the WASI ABI Rust provides WebAssembly support integrated into Cargo There are two main options
Definition: README.txt:24
DataExtractor.h
llvm::GCOVFile::GCNOInitialized
bool GCNOInitialized
Definition: GCOV.h:204
llvm::GCOVBlock::print
void print(raw_ostream &OS) const
collectLineCounts - Collect line counts.
Definition: GCOV.cpp:407
llvm::GCOVFunction::endColumn
uint32_t endColumn
Definition: GCOV.h:259
llvm::GCOVArc::GCOVArc
GCOVArc(GCOVBlock &src, GCOVBlock &dst, uint32_t flags)
Definition: GCOV.h:220
llvm::GCOV::V408
@ V408
Definition: GCOV.h:41
llvm::GCOVFunction::linenoChecksum
uint32_t linenoChecksum
Definition: GCOV.h:254
llvm::GCOVFunction::print
void print(raw_ostream &OS) const
Definition: GCOV.cpp:389
llvm::GCOVBuffer::readGCNOFormat
bool readGCNOFormat()
readGCNOFormat - Check GCNO signature is valid at the beginning of buffer.
Definition: GCOV.h:78
llvm::GCOVBlock::dsts
iterator_range< EdgeIterator > dsts() const
Definition: GCOV.h:291
llvm::GCOVFile::filenames
std::vector< std::string > filenames
Definition: GCOV.h:200
llvm::GCOVFunction::startColumn
uint32_t startColumn
Definition: GCOV.h:257
llvm::GCOVFile::readGCDA
bool readGCDA(GCOVBuffer &Buffer)
readGCDA - Read GCDA buffer.
Definition: GCOV.cpp:212
llvm::DataExtractor
Definition: DataExtractor.h:41
llvm::sys::path::filename
StringRef filename(StringRef path, Style style=Style::native)
Get filename.
Definition: Path.cpp:577
llvm::GCOV::V304
@ V304
Definition: GCOV.h:41
SmallVector.h
llvm::GCOVFile
GCOVFile - Collects coverage information for one pair of coverage file (.gcno and ....
Definition: GCOV.h:190
N
#define N
llvm::GCOVBlock::addSrcEdge
void addSrcEdge(GCOVArc *Edge)
Definition: GCOV.h:283
llvm::iterator_range
A range adaptor for a pair of iterators.
Definition: iterator_range.h:30
llvm::GCOVBlock::dump
void dump() const
dump - Dump GCOVBlock content to dbgs() for debugging purposes.
Definition: GCOV.cpp:434
llvm::GCOVFunction::treeArcs
SmallVector< std::unique_ptr< GCOVArc >, 0 > treeArcs
Definition: GCOV.h:265
stack
S is passed via registers r2 But gcc stores them to the stack
Definition: README.txt:189
llvm::GCOVFile::programCount
uint32_t programCount
Definition: GCOV.h:211
llvm::SmallVectorImpl
This class consists of common code factored out of the SmallVector class to reduce code duplication b...
Definition: APFloat.h:42
llvm::reverse
auto reverse(ContainerTy &&C)
Definition: STLExtras.h:485
llvm::GCOVBuffer::~GCOVBuffer
~GCOVBuffer()
Definition: GCOV.h:75
pred
hexagon gen pred
Definition: HexagonGenPredicate.cpp:134
llvm::GCOVBuffer::readString
bool readString(StringRef &str)
Definition: GCOV.h:169
llvm::GCOVArc::dst
GCOVBlock & dst
Definition: GCOV.h:225
llvm::GCOVFunction::blocks
SmallVector< std::unique_ptr< GCOVBlock >, 0 > blocks
Definition: GCOV.h:264
llvm::GCOVFunction
GCOVFunction - Collects function information.
Definition: GCOV.h:232
llvm::GCOV::Options::SourcePrefix
std::string SourcePrefix
Definition: GCOV.h:65
StringMap.h
llvm::pointee_iterator
An iterator type that allows iterating over the pointees via some other iterator.
Definition: iterator.h:320
llvm::GCOVBuffer
GCOVBuffer - A wrapper around MemoryBuffer to provide GCOV specific read operations.
Definition: GCOV.h:72
raw_ostream.h
llvm::GCOVFunction::GCOVFunction
GCOVFunction(GCOVFile &file)
Definition: GCOV.h:237
llvm::StringRef::split
std::pair< StringRef, StringRef > split(char Separator) const
Split into two substrings around the first occurrence of a separator character.
Definition: StringRef.h:692
llvm::GCOV::Options::PreservePaths
bool PreservePaths
Definition: GCOV.h:56
llvm::GCOVFunction::propagateCounts
uint64_t propagateCounts(const GCOVBlock &v, GCOVArc *pred)
Definition: GCOV.cpp:369
llvm::StringRef::drop_back
StringRef drop_back(size_t N=1) const
Return a StringRef equal to 'this' but with the last N elements dropped.
Definition: StringRef.h:608
llvm::GCOVFile::readGCNO
bool readGCNO(GCOVBuffer &Buffer)
readGCNO - Read GCNO buffer.
Definition: GCOV.cpp:101
llvm::GCOVFile::checksum
uint32_t checksum
Definition: GCOV.h:206