mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-26 04:32:44 +01:00
[BPI] Compile time improvement when erasing blocks (NFC)
Summary: eraseBlock is trying to erase all probability info for the given BB. This info is stored in a DenseMap organized like so: using Edge = std::pair<const BasicBlock *, unsigned>; DenseMap<Edge, BranchProbability> Probs; where the unsigned in the Edge key is the successor id. It was walking through every single map entry, checking if the BB in the key's pair matched the given BB. Much more efficient is to do what another method (getEdgeProbability) was already doing, which is to walk the successors of the BB, and simply do a map lookup on the key formed from each <BB, successor id> pair. Doing this dropped the overall compile time for a file containing a very large function by around 32%. Reviewers: davidxl, xur Subscribers: llvm-commits, hiraditya Tags: #llvm Differential Revision: https://reviews.llvm.org/D83596
This commit is contained in:
parent
705079ab21
commit
048d5c03ed
@ -1056,10 +1056,10 @@ BranchProbabilityInfo::printEdgeProbability(raw_ostream &OS,
|
||||
}
|
||||
|
||||
void BranchProbabilityInfo::eraseBlock(const BasicBlock *BB) {
|
||||
for (auto I = Probs.begin(), E = Probs.end(); I != E; ++I) {
|
||||
auto Key = I->first;
|
||||
if (Key.first == BB)
|
||||
Probs.erase(Key);
|
||||
for (const_succ_iterator I = succ_begin(BB), E = succ_end(BB); I != E; ++I) {
|
||||
auto MapI = Probs.find(std::make_pair(BB, I.getSuccessorIndex()));
|
||||
if (MapI != Probs.end())
|
||||
Probs.erase(MapI);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user