[Loop Vectorizer] Move store-predication into its own function, remove obsolete comment (NFC)

Differential Revision: https://reviews.llvm.org/D23013

llvm-svn: 277595
This commit is contained in:
Gil Rapaport 2016-08-03 13:23:43 +00:00
parent a348532ec3
commit e7a8fab275
1 changed files with 18 additions and 12 deletions

View File

@ -367,6 +367,9 @@ protected:
/// See PR14725.
void fixLCSSAPHIs();
/// Predicate conditional stores on their respective conditions.
void predicateStores();
/// Shrinks vector element sizes based on information in "MinBWs".
void truncateToMinimalBitwidths();
@ -3847,17 +3850,8 @@ void InnerLoopVectorizer::vectorizeLoop() {
// 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);
}
@ -4023,6 +4017,19 @@ void InnerLoopVectorizer::fixLCSSAPHIs() {
LoopMiddleBlock);
}
}
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) {
@ -5101,7 +5108,6 @@ bool LoopVectorizationLegality::blockCanBePredicated(
}
}
// 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