/// printBranchInfo - Print conditional branch probabilities. void FileInfo::printBranchInfo(raw_ostream &OS, const GCOVBlock &Block, GCOVCoverage &Coverage, uint32_t &EdgeNo) { SmallVector<uint64_t, 16> BranchCounts; uint64_t TotalCounts = 0; for (GCOVBlock::EdgeIterator I = Block.dst_begin(), E = Block.dst_end(); I != E; ++I) { const GCOVEdge *Edge = *I; BranchCounts.push_back(Edge->Count); TotalCounts += Edge->Count; if (Block.getCount()) ++Coverage.BranchesExec; if (Edge->Count) ++Coverage.BranchesTaken; ++Coverage.Branches; if (Options.FuncCoverage) { const GCOVFunction *Function = &Block.getParent(); GCOVCoverage &FuncCoverage = FuncCoverages.find(Function)->second; if (Block.getCount()) ++FuncCoverage.BranchesExec; if (Edge->Count) ++FuncCoverage.BranchesTaken; ++FuncCoverage.Branches; } } for (SmallVectorImpl<uint64_t>::const_iterator I = BranchCounts.begin(), E = BranchCounts.end(); I != E; ++I) { OS << format("branch %2u ", EdgeNo++) << formatBranchInfo(Options, *I, TotalCounts) << "\n"; } }
/// printBranchInfo - Print conditional branch probabilities. void FileInfo::printBranchInfo(raw_ostream &OS, const GCOVBlock &Block, GCOVCoverage &Coverage, uint32_t &EdgeNo) { SmallVector<uint64_t, 16> BranchCounts; uint64_t TotalCounts = 0; for (const GCOVEdge *Edge : Block.dsts()) { BranchCounts.push_back(Edge->Count); TotalCounts += Edge->Count; if (Block.getCount()) ++Coverage.BranchesExec; if (Edge->Count) ++Coverage.BranchesTaken; ++Coverage.Branches; if (Options.FuncCoverage) { const GCOVFunction *Function = &Block.getParent(); GCOVCoverage &FuncCoverage = FuncCoverages.find(Function)->second; if (Block.getCount()) ++FuncCoverage.BranchesExec; if (Edge->Count) ++FuncCoverage.BranchesTaken; ++FuncCoverage.Branches; } } for (uint64_t N : BranchCounts) OS << format("branch %2u ", EdgeNo++) << formatBranchInfo(Options, N, TotalCounts) << "\n"; }