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 (readInt(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 (readInt(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.