summaryrefslogtreecommitdiff
path: root/lib/Analysis/ProfileEstimatorPass.cpp
diff options
context:
space:
mode:
authorAndreas Neustifter <astifter-llvm@gmx.at>2009-09-01 10:06:05 +0000
committerAndreas Neustifter <astifter-llvm@gmx.at>2009-09-01 10:06:05 +0000
commite885af9fb773f5a01a5b31fa0a0b7fd0489bde56 (patch)
treec78caf02d8f9bab167ab83f8649a8de7a2fe799c /lib/Analysis/ProfileEstimatorPass.cpp
parente7ddcfdebe357b4067f9c7d68d44616e11351a23 (diff)
downloadllvm-e885af9fb773f5a01a5b31fa0a0b7fd0489bde56.tar.gz
llvm-e885af9fb773f5a01a5b31fa0a0b7fd0489bde56.tar.bz2
llvm-e885af9fb773f5a01a5b31fa0a0b7fd0489bde56.tar.xz
Preparation for Optimal Edge Profiling:
Optimal edge profiling is only possible when blocks with no predecessors get an virtual edge (BB,0) that counts the execution frequencies of this function-exiting blocks. This patch makes the necessary changes before actually enabling optimal edge profiling. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@80667 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis/ProfileEstimatorPass.cpp')
-rw-r--r--lib/Analysis/ProfileEstimatorPass.cpp9
1 files changed, 8 insertions, 1 deletions
diff --git a/lib/Analysis/ProfileEstimatorPass.cpp b/lib/Analysis/ProfileEstimatorPass.cpp
index 8f5313fda7..3af7eba94e 100644
--- a/lib/Analysis/ProfileEstimatorPass.cpp
+++ b/lib/Analysis/ProfileEstimatorPass.cpp
@@ -168,7 +168,14 @@ void ProfileEstimatorPass::recurseBasicBlock(BasicBlock *BB) {
std::set<BasicBlock*> ProcessedSuccs;
// Otherwise consider weight of outgoing edges and store them for
- // distribution of remaining weight.
+ // distribution of remaining weight. In case the block has no successors
+ // create a (BB,0) edge.
+ succ_iterator bbi = succ_begin(BB), bbe = succ_end(BB);
+ if (bbi == bbe) {
+ Edge edge = getEdge(BB,0);
+ EdgeInformation[BB->getParent()][edge] = BBWeight;
+ printEdgeWeight(edge);
+ }
for ( succ_iterator bbi = succ_begin(BB), bbe = succ_end(BB);
bbi != bbe; ++bbi ) {
if (ProcessedSuccs.insert(*bbi).second) {