mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-13 22:24:07 +00:00
Add a DominatorTree argument to isLCSSA so that it doesn't have to
compute a set of reachable blocks for itself each time it is called, which is fairly frequently. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@98179 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -263,14 +263,7 @@ unsigned Loop::getSmallConstantTripMultiple() const {
|
||||
}
|
||||
|
||||
/// isLCSSAForm - Return true if the Loop is in LCSSA form
|
||||
bool Loop::isLCSSAForm() const {
|
||||
// Collect all the reachable blocks in the function, for fast lookups.
|
||||
SmallPtrSet<BasicBlock *, 32> ReachableBBs;
|
||||
BasicBlock *EntryBB = getHeader()->getParent()->begin();
|
||||
for (df_iterator<BasicBlock *> NI = df_begin(EntryBB),
|
||||
NE = df_end(EntryBB); NI != NE; ++NI)
|
||||
ReachableBBs.insert(*NI);
|
||||
|
||||
bool Loop::isLCSSAForm(DominatorTree &DT) const {
|
||||
// Sort the blocks vector so that we can use binary search to do quick
|
||||
// lookups.
|
||||
SmallPtrSet<BasicBlock *, 16> LoopBBs(block_begin(), block_end());
|
||||
@ -290,7 +283,7 @@ bool Loop::isLCSSAForm() const {
|
||||
// entry are special; uses in them don't need to go through PHIs.
|
||||
if (UserBB != BB &&
|
||||
!LoopBBs.count(UserBB) &&
|
||||
ReachableBBs.count(UserBB))
|
||||
DT.isReachableFromEntry(UserBB))
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user