summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHal Finkel <hfinkel@anl.gov>2013-02-11 23:02:17 +0000
committerHal Finkel <hfinkel@anl.gov>2013-02-11 23:02:17 +0000
commit6ae564b4a065d082741eb58255540260bbf01adf (patch)
tree7936c0af5cca58c65be27eb220fa6f9dc2d95182
parent39a95032d2522970d482f0588335f4595d8dcee2 (diff)
downloadbcm5719-llvm-6ae564b4a065d082741eb58255540260bbf01adf.tar.gz
bcm5719-llvm-6ae564b4a065d082741eb58255540260bbf01adf.zip
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. llvm-svn: 174915
-rw-r--r--llvm/lib/Transforms/Vectorize/BBVectorize.cpp12
1 files changed, 10 insertions, 2 deletions
diff --git a/llvm/lib/Transforms/Vectorize/BBVectorize.cpp b/llvm/lib/Transforms/Vectorize/BBVectorize.cpp
index b14d91dd8e6..c11d9f679d4 100644
--- a/llvm/lib/Transforms/Vectorize/BBVectorize.cpp
+++ b/llvm/lib/Transforms/Vectorize/BBVectorize.cpp
@@ -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;
}
}
OpenPOWER on IntegriCloud