mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-16 14:31:59 +00:00
BBVectorize: Don't over-search when building the dependency map
When building the pairable-instruction dependency map, don't search past the last pairable instruction. For large blocks that have been divided into multiple instruction groups, searching past the last instruction in each group is very wasteful. This gives a 32% speedup on the csa.ll test case from PR15222 (when using 50 instructions in each group). No functionality change intended. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@174915 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
8f3359a4b3
commit
c951003faf
@ -1380,20 +1380,28 @@ namespace {
|
||||
// Iterate through the basic block, recording all users of each
|
||||
// pairable instruction.
|
||||
|
||||
BasicBlock::iterator E = BB.end();
|
||||
BasicBlock::iterator E = BB.end(), EL =
|
||||
BasicBlock::iterator(cast<Instruction>(PairableInsts.back()));
|
||||
for (BasicBlock::iterator I = BB.getFirstInsertionPt(); I != E; ++I) {
|
||||
if (IsInPair.find(I) == IsInPair.end()) continue;
|
||||
|
||||
DenseSet<Value *> Users;
|
||||
AliasSetTracker WriteSet(*AA);
|
||||
for (BasicBlock::iterator J = llvm::next(I); J != E; ++J)
|
||||
for (BasicBlock::iterator J = llvm::next(I); J != E; ++J) {
|
||||
(void) trackUsesOfI(Users, WriteSet, I, J);
|
||||
|
||||
if (J == EL)
|
||||
break;
|
||||
}
|
||||
|
||||
for (DenseSet<Value *>::iterator U = Users.begin(), E = Users.end();
|
||||
U != E; ++U) {
|
||||
if (IsInPair.find(*U) == IsInPair.end()) continue;
|
||||
PairableInstUsers.insert(ValuePair(I, *U));
|
||||
}
|
||||
|
||||
if (I == EL)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user