diff options
author | Elena Demikhovsky <elena.demikhovsky@intel.com> | 2016-04-26 20:18:04 +0000 |
---|---|---|
committer | Elena Demikhovsky <elena.demikhovsky@intel.com> | 2016-04-26 20:18:04 +0000 |
commit | 308a7eb0d23099e14bd03ed58358d6ddfe850315 (patch) | |
tree | 87ce16bf7469b0327b3a68cfaf7f3ecc40d66345 /llvm/lib/Transforms/Vectorize/LoopVectorize.cpp | |
parent | 4563a06cee2e669a0e075ce98d0484adc7593dd4 (diff) | |
download | bcm5719-llvm-308a7eb0d23099e14bd03ed58358d6ddfe850315.tar.gz bcm5719-llvm-308a7eb0d23099e14bd03ed58358d6ddfe850315.zip |
Masked Store in Loop Vectorizer - bugfix
Fixed a bug in loop vectorization with conditional store.
Differential Revision: http://reviews.llvm.org/D19532
llvm-svn: 267597
Diffstat (limited to 'llvm/lib/Transforms/Vectorize/LoopVectorize.cpp')
-rw-r--r-- | llvm/lib/Transforms/Vectorize/LoopVectorize.cpp | 22 |
1 files changed, 9 insertions, 13 deletions
diff --git a/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp b/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp index 4250bad3a84..e0cede73afc 100644 --- a/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp +++ b/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp @@ -4909,24 +4909,20 @@ bool LoopVectorizationLegality::blockCanBePredicated(BasicBlock *BB, if (!SI) return false; + // Build a masked store if it is legal for the target. + if (isLegalMaskedStore(SI->getValueOperand()->getType(), + SI->getPointerOperand()) || + isLegalMaskedScatter(SI->getValueOperand()->getType())) { + MaskedOp.insert(SI); + continue; + } + bool isSafePtr = (SafePtrs.count(SI->getPointerOperand()) != 0); bool isSinglePredecessor = SI->getParent()->getSinglePredecessor(); if (++NumPredStores > NumberOfStoresToPredicate || !isSafePtr || - !isSinglePredecessor) { - // Build a masked store if it is legal for the target, otherwise - // scalarize the block. - bool isLegalMaskedOp = - isLegalMaskedStore(SI->getValueOperand()->getType(), - SI->getPointerOperand()) || - isLegalMaskedScatter(SI->getValueOperand()->getType()); - if (isLegalMaskedOp) { - --NumPredStores; - MaskedOp.insert(SI); - continue; - } + !isSinglePredecessor) return false; - } } if (it->mayThrow()) return false; |