forked from OSchip/llvm-project
[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:
parent
a348532ec3
commit
e7a8fab275
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue