[LV] Emitting SCEV checks with OptForSize
authorSjoerd Meijer <sjoerd.meijer@arm.com>
Wed, 9 Oct 2019 13:19:41 +0000 (13:19 +0000)
committerSjoerd Meijer <sjoerd.meijer@arm.com>
Wed, 9 Oct 2019 13:19:41 +0000 (13:19 +0000)
commitd1170dbe58314fe78cfff36ca8259c35b508b7e4
treec5d8770df7073cf174231995ccb4ef58350ee191
parentdde0fe5db528a1dd4cfaab9295741ae99a69d62a
[LV] Emitting SCEV checks with OptForSize

When optimising for size and SCEV runtime checks need to be emitted to check
overflow behaviour, the loop vectorizer can run in this assert:

  LoopVectorize.cpp:2699: void llvm::InnerLoopVectorizer::emitSCEVChecks(
  llvm::Loop *, llvm::BasicBlock *): Assertion `!BB->getParent()->hasOptSize()
  && "Cannot SCEV check stride or overflow when opt

We should not generate predicates while optimising for size because
code will be generated for predicates such as these SCEV overflow runtime
checks.

This should fix PR43371.

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

llvm-svn: 374166
llvm/lib/Transforms/Vectorize/LoopVectorizationLegality.cpp
llvm/test/Transforms/LoopVectorize/optsize.ll