mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 20:32:21 +00:00
Add caching of predecessor counts as well as predecessors themselves.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69791 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
68fbd735f1
commit
ddcb3415cb
@ -27,6 +27,7 @@ namespace llvm {
|
||||
class PredIteratorCache {
|
||||
/// BlockToPredsMap - Pointer to null-terminated list.
|
||||
DenseMap<BasicBlock*, BasicBlock**> BlockToPredsMap;
|
||||
DenseMap<BasicBlock*, unsigned> BlockToPredCountMap;
|
||||
|
||||
/// Memory - This is the space that holds cached preds.
|
||||
BumpPtrAllocator Memory;
|
||||
@ -45,14 +46,22 @@ namespace llvm {
|
||||
SmallVector<BasicBlock*, 32> PredCache(pred_begin(BB), pred_end(BB));
|
||||
PredCache.push_back(0); // null terminator.
|
||||
|
||||
BlockToPredCountMap[BB] = PredCache.size()-1;
|
||||
|
||||
Entry = Memory.Allocate<BasicBlock*>(PredCache.size());
|
||||
std::copy(PredCache.begin(), PredCache.end(), Entry);
|
||||
return Entry;
|
||||
}
|
||||
|
||||
unsigned GetNumPreds(BasicBlock *BB) {
|
||||
GetPreds(BB);
|
||||
return BlockToPredCountMap[BB];
|
||||
}
|
||||
|
||||
/// clear - Remove all information.
|
||||
void clear() {
|
||||
BlockToPredsMap.clear();
|
||||
BlockToPredCountMap.clear();
|
||||
Memory.Reset();
|
||||
}
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user