mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-22 04:22:57 +02:00
Defer adding critical edges to the "toSplit" list until after checking for
indirect branches in all the predecessors. This avoids unnecessarily splitting edges in cases where load PRE is not possible anyway. Thanks to Jakub Staszak for pointing this out. llvm-svn: 103034
This commit is contained in:
parent
b8bb38be5f
commit
5576ed9c86
@ -1584,7 +1584,7 @@ bool GVN::processNonLocalLoad(LoadInst *LI,
|
||||
for (unsigned i = 0, e = UnavailableBlocks.size(); i != e; ++i)
|
||||
FullyAvailableBlocks[UnavailableBlocks[i]] = false;
|
||||
|
||||
bool NeedToSplitEdges = false;
|
||||
SmallVector<std::pair<TerminatorInst*, unsigned>, 4> NeedToSplit;
|
||||
for (pred_iterator PI = pred_begin(LoadBB), E = pred_end(LoadBB);
|
||||
PI != E; ++PI) {
|
||||
BasicBlock *Pred = *PI;
|
||||
@ -1600,12 +1600,13 @@ bool GVN::processNonLocalLoad(LoadInst *LI,
|
||||
return false;
|
||||
}
|
||||
unsigned SuccNum = GetSuccessorNumber(Pred, LoadBB);
|
||||
toSplit.push_back(std::make_pair(Pred->getTerminator(), SuccNum));
|
||||
NeedToSplitEdges = true;
|
||||
NeedToSplit.push_back(std::make_pair(Pred->getTerminator(), SuccNum));
|
||||
}
|
||||
}
|
||||
if (NeedToSplitEdges)
|
||||
if (!NeedToSplit.empty()) {
|
||||
toSplit.append(NeedToSplit.size(), NeedToSplit.front());
|
||||
return false;
|
||||
}
|
||||
|
||||
// Decide whether PRE is profitable for this load.
|
||||
unsigned NumUnavailablePreds = PredLoads.size();
|
||||
|
Loading…
Reference in New Issue
Block a user