diff options
author | Yuchen Wu <yuchenericwu@hotmail.com> | 2013-12-03 00:38:21 +0000 |
---|---|---|
committer | Yuchen Wu <yuchenericwu@hotmail.com> | 2013-12-03 00:38:21 +0000 |
commit | 357fcf9d2ea79d43e4a1a29edb8608225c8f9a54 (patch) | |
tree | 3619d46c7a01688d748f4cbf9bd7ceb169348eab /lib/IR/GCOV.cpp | |
parent | 2331c9f887346d522826175f446129d2b055d084 (diff) | |
download | llvm-357fcf9d2ea79d43e4a1a29edb8608225c8f9a54.tar.gz llvm-357fcf9d2ea79d43e4a1a29edb8608225c8f9a54.tar.bz2 llvm-357fcf9d2ea79d43e4a1a29edb8608225c8f9a54.tar.xz |
llvm-cov: Store blocks rather than counts per line.
Each line stores all the blocks that execute on that line, instead of
only storing the line counts previously accumulated. This provides more
information for each line, and will be useful for options in enabling
block and branch information.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@196177 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/IR/GCOV.cpp')
-rw-r--r-- | lib/IR/GCOV.cpp | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/lib/IR/GCOV.cpp b/lib/IR/GCOV.cpp index ebf10927fc..bcc62b11d5 100644 --- a/lib/IR/GCOV.cpp +++ b/lib/IR/GCOV.cpp @@ -282,7 +282,7 @@ void GCOVBlock::addCount(size_t DstEdgeNo, uint64_t N) { void GCOVBlock::collectLineCounts(FileInfo &FI) { for (SmallVectorImpl<uint32_t>::iterator I = Lines.begin(), E = Lines.end(); I != E; ++I) - FI.addLineCount(Parent.getFilename(), *I, Counter); + FI.addBlockLine(Parent.getFilename(), *I, this); } /// dump - Dump GCOVBlock content to dbgs() for debugging purposes. @@ -319,7 +319,7 @@ void GCOVBlock::dump() const { /// print - Print source files with collected line count information. void FileInfo::print(raw_fd_ostream &OS, StringRef gcnoFile, StringRef gcdaFile) const { - for (StringMap<LineCounts>::const_iterator I = LineInfo.begin(), + for (StringMap<LineData>::const_iterator I = LineInfo.begin(), E = LineInfo.end(); I != E; ++I) { StringRef Filename = I->first(); OwningPtr<MemoryBuffer> Buff; @@ -335,15 +335,21 @@ void FileInfo::print(raw_fd_ostream &OS, StringRef gcnoFile, OS << " -: 0:Runs:" << RunCount << "\n"; OS << " -: 0:Programs:" << ProgramCount << "\n"; - const LineCounts &L = I->second; + const LineData &L = I->second; uint32_t i = 0; while (!AllLines.empty()) { - LineCounts::const_iterator CountIt = L.find(i); - if (CountIt != L.end()) { - if (CountIt->second == 0) + LineData::const_iterator BlocksIt = L.find(i); + if (BlocksIt != L.end()) { + const BlockVector &Blocks = BlocksIt->second; + uint64_t LineCount = 0; + for (BlockVector::const_iterator I = Blocks.begin(), E = Blocks.end(); + I != E; ++I) { + LineCount += (*I)->getCount(); + } + if (LineCount == 0) OS << " #####:"; else - OS << format("%9" PRIu64 ":", CountIt->second); + OS << format("%9" PRIu64 ":", LineCount); } else { OS << " -:"; } |