summaryrefslogtreecommitdiff
path: root/lib/Transforms/Vectorize
diff options
context:
space:
mode:
authorJoerg Sonnenberger <joerg@bec.de>2013-08-17 11:04:47 +0000
committerJoerg Sonnenberger <joerg@bec.de>2013-08-17 11:04:47 +0000
commit190673610f41be171589be8a0263d8c10a8f3edf (patch)
tree64f31472fcaa161d98b204d3eb2357f2fec84951 /lib/Transforms/Vectorize
parent913da2b7b32daa5c018ec1b7422cf76c3d01649b (diff)
downloadllvm-190673610f41be171589be8a0263d8c10a8f3edf.tar.gz
llvm-190673610f41be171589be8a0263d8c10a8f3edf.tar.bz2
llvm-190673610f41be171589be8a0263d8c10a8f3edf.tar.xz
PR 16899: Do not modify the basic block using the iterator, but keep the
next value. This avoids crashes due to invalidation. Patch by Joey Gouly. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@188605 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms/Vectorize')
-rw-r--r--lib/Transforms/Vectorize/SLPVectorizer.cpp10
1 files changed, 6 insertions, 4 deletions
diff --git a/lib/Transforms/Vectorize/SLPVectorizer.cpp b/lib/Transforms/Vectorize/SLPVectorizer.cpp
index 506346d358..ee9c5f2de7 100644
--- a/lib/Transforms/Vectorize/SLPVectorizer.cpp
+++ b/lib/Transforms/Vectorize/SLPVectorizer.cpp
@@ -1895,12 +1895,14 @@ bool SLPVectorizer::vectorizeChainsInBlock(BasicBlock *BB, BoUpSLP &R) {
if (Incoming.size() > 1)
Changed |= tryToVectorizeList(Incoming, R);
- for (BasicBlock::iterator it = BB->begin(), e = BB->end(); it != e; ++it) {
- if (isa<DbgInfoIntrinsic>(it))
+ llvm::Instruction *I;
+ for (BasicBlock::iterator it = BB->begin(), e = BB->end(); it != e;) {
+ I = it++;
+ if (isa<DbgInfoIntrinsic>(I))
continue;
// Try to vectorize reductions that use PHINodes.
- if (PHINode *P = dyn_cast<PHINode>(it)) {
+ if (PHINode *P = dyn_cast<PHINode>(I)) {
// Check that the PHI is a reduction PHI.
if (P->getNumIncomingValues() != 2)
return Changed;
@@ -1922,7 +1924,7 @@ bool SLPVectorizer::vectorizeChainsInBlock(BasicBlock *BB, BoUpSLP &R) {
}
// Try to vectorize trees that start at compare instructions.
- if (CmpInst *CI = dyn_cast<CmpInst>(it)) {
+ if (CmpInst *CI = dyn_cast<CmpInst>(I)) {
if (tryToVectorizePair(CI->getOperand(0), CI->getOperand(1), R)) {
Changed |= true;
continue;