diff options
| author | Chris Lattner <sabre@nondot.org> | 2003-10-28 21:25:23 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2003-10-28 21:25:23 +0000 |
| commit | 2091cc4310515fbb6ee866249497bfcd9357b26e (patch) | |
| tree | f1471c2451cc9c1037cb474804820dddbe8072f0 /llvm/tools/llvm-prof/ProfileInfo.cpp | |
| parent | b7c3b6dc4d2cac32bf6ac84cea66934907a1da40 (diff) | |
| download | bcm5719-llvm-2091cc4310515fbb6ee866249497bfcd9357b26e.tar.gz bcm5719-llvm-2091cc4310515fbb6ee866249497bfcd9357b26e.zip | |
Add support for reading block frequencies. Fix bug in attribution of counts
to functions
llvm-svn: 9559
Diffstat (limited to 'llvm/tools/llvm-prof/ProfileInfo.cpp')
| -rw-r--r-- | llvm/tools/llvm-prof/ProfileInfo.cpp | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/llvm/tools/llvm-prof/ProfileInfo.cpp b/llvm/tools/llvm-prof/ProfileInfo.cpp index 2341db0bb9f..4c31138aa34 100644 --- a/llvm/tools/llvm-prof/ProfileInfo.cpp +++ b/llvm/tools/llvm-prof/ProfileInfo.cpp @@ -148,7 +148,28 @@ void ProfileInfo::getFunctionCounts(std::vector<std::pair<Function*, unsigned Counter = 0; for (Module::iterator I = M.begin(), E = M.end(); - I != E && Counter != FunctionCounts.size(); ++I, ++Counter) + I != E && Counter != FunctionCounts.size(); ++I) if (!I->isExternal()) - Counts.push_back(std::make_pair(I, FunctionCounts[Counter])); + Counts.push_back(std::make_pair(I, FunctionCounts[Counter++])); +} + +// getBlockCounts - This method is used by consumers of block counting +// information. If we do not directly have block count information, we +// compute it from other, more refined, types of profile information. +// +void ProfileInfo::getBlockCounts(std::vector<std::pair<BasicBlock*, + unsigned> > &Counts) { + if (BlockCounts.empty()) { + std::cerr << "Block counts not available, and no synthesis " + << "is implemented yet!\n"; + return; + } + + unsigned Counter = 0; + for (Module::iterator F = M.begin(), E = M.end(); F != E; ++F) + for (Function::iterator BB = F->begin(), E = F->end(); BB != E; ++BB) { + Counts.push_back(std::make_pair(BB, BlockCounts[Counter++])); + if (Counter == BlockCounts.size()) + return; + } } |

