[PATCH] D23013: [Loop Vectorizer] Move store-predication into its own function, remove obsolete comment (NFC)
Gil Rapaport via llvm-commits
llvm-commits at lists.llvm.org
Mon Aug 1 06:47:41 PDT 2016
gilr created this revision.
gilr added reviewers: anemet, mkuper.
gilr added a subscriber: llvm-commits.
Herald added a subscriber: mzolotukhin.
Both changes suggested as comments to [[ https://reviews.llvm.org/D22918 | D22918 ]].
https://reviews.llvm.org/D23013
Files:
lib/Transforms/Vectorize/LoopVectorize.cpp
Index: lib/Transforms/Vectorize/LoopVectorize.cpp
===================================================================
--- lib/Transforms/Vectorize/LoopVectorize.cpp
+++ lib/Transforms/Vectorize/LoopVectorize.cpp
@@ -359,6 +359,9 @@
/// See PR14725.
void fixLCSSAPHIs();
+ /// Predicate conditional stores on their respective conditions.
+ void predicateStores();
+
/// Shrinks vector element sizes based on information in "MinBWs".
void truncateToMinimalBitwidths();
@@ -3779,17 +3782,8 @@
// Make sure DomTree is updated.
updateAnalysis();
- // Predicate any stores.
- for (auto KV : PredicatedStores) {
- BasicBlock::iterator I(KV.first);
- auto *BB = SplitBlock(I->getParent(), &*std::next(I), DT, LI);
- auto *T = SplitBlockAndInsertIfThen(KV.second, &*I, /*Unreachable=*/false,
- /*BranchWeights=*/nullptr, DT, LI);
- I->moveBefore(T);
- I->getParent()->setName("pred.store.if");
- BB->setName("pred.store.continue");
- }
- DEBUG(DT->verifyDomTree());
+ predicateStores();
+
// Remove redundant induction instructions.
cse(LoopVectorBody);
}
@@ -3956,6 +3950,19 @@
}
}
+void InnerLoopVectorizer::predicateStores() {
+ for (auto KV : PredicatedStores) {
+ BasicBlock::iterator I(KV.first);
+ auto *BB = SplitBlock(I->getParent(), &*std::next(I), DT, LI);
+ auto *T = SplitBlockAndInsertIfThen(KV.second, &*I, /*Unreachable=*/false,
+ /*BranchWeights=*/nullptr, DT, LI);
+ I->moveBefore(T);
+ I->getParent()->setName("pred.store.if");
+ BB->setName("pred.store.continue");
+ }
+ DEBUG(DT->verifyDomTree());
+}
+
InnerLoopVectorizer::VectorParts
InnerLoopVectorizer::createEdgeMask(BasicBlock *Src, BasicBlock *Dst) {
assert(std::find(pred_begin(Dst), pred_end(Dst), Src) != pred_end(Dst) &&
@@ -4973,7 +4980,6 @@
}
}
- // We don't predicate stores at the moment.
if (I.mayWriteToMemory()) {
auto *SI = dyn_cast<StoreInst>(&I);
// We only support predication of stores in basic blocks with one
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D23013.66313.patch
Type: text/x-patch
Size: 2098 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160801/0e89c259/attachment.bin>
More information about the llvm-commits
mailing list