mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-24 20:29:53 +00:00
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
This commit is contained in:
parent
e7ddcfdebe
commit
e885af9fb7
@ -63,8 +63,13 @@ namespace llvm {
|
||||
|
||||
// getFunction() - Returns the Function for an Edge, checking for validity.
|
||||
static const Function* getFunction(Edge e) {
|
||||
assert(e.second && "Invalid ProfileInfo::Edge");
|
||||
return e.second->getParent();
|
||||
if (e.first) {
|
||||
return e.first->getParent();
|
||||
} else if (e.second) {
|
||||
return e.second->getParent();
|
||||
}
|
||||
assert(0 && "Invalid ProfileInfo::Edge");
|
||||
return (const Function*)0;
|
||||
}
|
||||
|
||||
// getEdge() - Creates an Edge from two BasicBlocks.
|
||||
|
@ -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) {
|
||||
|
Loading…
Reference in New Issue
Block a user