[LV] Tail-folding with runtime memory checks

The loop vectorizer was running in an assert when it tried to fold the tail and
had to emit runtime memory disambiguation checks.

Differential revision: https://reviews.llvm.org/D66803

llvm-svn: 370707
This commit is contained in:
Sjoerd Meijer 2019-09-03 08:38:24 +00:00
parent b10a433da8
commit 0469b0e4ef
1 changed files with 4 additions and 1 deletions

View File

@ -2697,6 +2697,7 @@ void InnerLoopVectorizer::emitSCEVChecks(Loop *L, BasicBlock *Bypass) {
assert(!Cost->foldTailByMasking() &&
"Cannot SCEV check stride or overflow when folding tail");
// Create a new block containing the stride check.
BB->setName("vector.scevcheck");
auto *NewBB = BB->splitBasicBlock(BB->getTerminator(), "vector.ph");
@ -2729,7 +2730,9 @@ void InnerLoopVectorizer::emitMemRuntimeChecks(Loop *L, BasicBlock *Bypass) {
if (!MemRuntimeCheck)
return;
assert(!Cost->foldTailByMasking() && "Cannot check memory when folding tail");
assert(!BB->getParent()->hasOptSize() &&
"Cannot emit memory checks when optimizing for size");
// Create a new block containing the memory check.
BB->setName("vector.memcheck");
auto *NewBB = BB->splitBasicBlock(BB->getTerminator(), "vector.ph");