From 9d9f5741a89697ddd6823ae402a4eb5b33b8c00f Mon Sep 17 00:00:00 2001 From: Daniel Dunbar Date: Sat, 8 Aug 2009 18:59:03 +0000 Subject: [PATCH] Some ProfileInfo cleanups. - Part of optimal static profiling patch sequence by Andreas Neustifter. llvm-svn: 78485 --- include/llvm/Analysis/LoopInfo.h | 2 +- include/llvm/Analysis/ProfileInfo.h | 2 +- lib/Analysis/ProfileInfo.cpp | 1 + lib/Analysis/ProfileInfoLoaderPass.cpp | 2 +- tools/llvm-prof/llvm-prof.cpp | 31 +++++++++++++------------- 5 files changed, 19 insertions(+), 19 deletions(-) diff --git a/include/llvm/Analysis/LoopInfo.h b/include/llvm/Analysis/LoopInfo.h index fd12e66f294..fb204069dcd 100644 --- a/include/llvm/Analysis/LoopInfo.h +++ b/include/llvm/Analysis/LoopInfo.h @@ -229,7 +229,7 @@ public: I != E; ++I) if (!std::binary_search(LoopBBs.begin(), LoopBBs.end(), *I)) // Not in current loop? It must be an exit block. - ExitEdges.push_back(std::make_pair(*BI,*I)); + ExitEdges.push_back(std::make_pair(*BI, *I)); } /// getUniqueExitBlocks - Return all unique successor blocks of this loop. diff --git a/include/llvm/Analysis/ProfileInfo.h b/include/llvm/Analysis/ProfileInfo.h index 3b76ef9456b..9b692515f38 100644 --- a/include/llvm/Analysis/ProfileInfo.h +++ b/include/llvm/Analysis/ProfileInfo.h @@ -67,7 +67,7 @@ namespace llvm { // getEdge() - Creates an Edge from two BasicBlocks. static Edge getEdge(const BasicBlock* Src, const BasicBlock* Dest) { - return std::make_pair(Src,Dest); + return std::make_pair(Src, Dest); } //===------------------------------------------------------------------===// diff --git a/lib/Analysis/ProfileInfo.cpp b/lib/Analysis/ProfileInfo.cpp index 670d4e73797..2ed466bf323 100644 --- a/lib/Analysis/ProfileInfo.cpp +++ b/lib/Analysis/ProfileInfo.cpp @@ -64,6 +64,7 @@ double ProfileInfo::getExecutionCount(const BasicBlock *BB) { } double ProfileInfo::getExecutionCount(const Function *F) { + if (F->isDeclaration()) return MissingValue; std::map::iterator J = FunctionInformation.find(F); if (J != FunctionInformation.end()) diff --git a/lib/Analysis/ProfileInfoLoaderPass.cpp b/lib/Analysis/ProfileInfoLoaderPass.cpp index c1dc9f2e472..3e75f0274b2 100644 --- a/lib/Analysis/ProfileInfoLoaderPass.cpp +++ b/lib/Analysis/ProfileInfoLoaderPass.cpp @@ -77,7 +77,7 @@ bool LoaderPass::runOnModule(Module &M) { for (Module::iterator F = M.begin(), E = M.end(); F != E; ++F) { if (F->isDeclaration()) continue; if (ei < ECs.size()) - EdgeInformation[F][ProfileInfo::getEdge(0,&F->getEntryBlock())] += + EdgeInformation[F][ProfileInfo::getEdge(0, &F->getEntryBlock())] += ECs[ei++]; for (Function::iterator BB = F->begin(), E = F->end(); BB != E; ++BB) { // Okay, we have to add a counter of each outgoing edge. If the diff --git a/tools/llvm-prof/llvm-prof.cpp b/tools/llvm-prof/llvm-prof.cpp index 6144fe5b123..c370e6bee7e 100644 --- a/tools/llvm-prof/llvm-prof.cpp +++ b/tools/llvm-prof/llvm-prof.cpp @@ -78,24 +78,22 @@ namespace { ProfileAnnotator(ProfileInfo& pi) : PI(pi) {} virtual void emitFunctionAnnot(const Function *F, raw_ostream &OS) { - OS << ";;; %" << F->getName() << " called "; double w = PI.getExecutionCount(F); - if (w == ProfileInfo::MissingValue) - OS << "(no value)"; - else - OS << (unsigned)w; - OS << " times.\n;;;\n"; + if (w != ProfileInfo::MissingValue) { + OS << ";;; %" << F->getName() << " called "<<(unsigned)w + <<" times.\n;;;\n"; + } } virtual void emitBasicBlockStartAnnot(const BasicBlock *BB, raw_ostream &OS) { double w = PI.getExecutionCount(BB); - if (w == ProfileInfo::MissingValue) - OS << "\t;;; (no value)\n"; - else - if (w != 0) - OS << "\t;;; Basic block executed " << w << " times.\n"; - else + if (w != ProfileInfo::MissingValue) { + if (w != 0) { + OS << "\t;;; Basic block executed " << (unsigned)w << " times.\n"; + } else { OS << "\t;;; Never executed!\n"; + } + } } virtual void emitBasicBlockEndAnnot(const BasicBlock *BB, raw_ostream &OS) { @@ -105,8 +103,9 @@ namespace { const TerminatorInst *TI = BB->getTerminator(); for (unsigned s = 0, e = TI->getNumSuccessors(); s != e; ++s) { BasicBlock* Succ = TI->getSuccessor(s); - double w = ignoreMissing(PI.getEdgeWeight(std::make_pair(BB,Succ))); - SuccCounts.push_back(std::make_pair(std::make_pair(BB,Succ), w)); + double w = ignoreMissing(PI.getEdgeWeight(std::make_pair(BB, Succ))); + if (w != 0) + SuccCounts.push_back(std::make_pair(std::make_pair(BB, Succ), w)); } if (!SuccCounts.empty()) { OS << "\t;;; Out-edge counts:"; @@ -157,11 +156,11 @@ bool ProfileInfoPrinterPass::runOnModule(Module &M) { for (Module::iterator FI = M.begin(), FE = M.end(); FI != FE; ++FI) { if (FI->isDeclaration()) continue; double w = ignoreMissing(PI.getExecutionCount(FI)); - FunctionCounts.push_back(std::make_pair(FI,w)); + FunctionCounts.push_back(std::make_pair(FI, w)); for (Function::iterator BB = FI->begin(), BBE = FI->end(); BB != BBE; ++BB) { double w = ignoreMissing(PI.getExecutionCount(BB)); - Counts.push_back(std::make_pair(BB,w)); + Counts.push_back(std::make_pair(BB, w)); } }