@@ -16069,19 +16069,29 @@ bool SLPVectorizerPass::vectorizeChainsInBlock(BasicBlock *BB, BoUpSLP &R) {
1606916069 if (isa<UndefValue>(Opcodes1[I]) || isa<UndefValue>(Opcodes2[I])) {
1607016070 if (isa<UndefValue>(Opcodes1[I]) && isa<UndefValue>(Opcodes2[I]))
1607116071 continue;
16072- if (isa<Instruction>(Opcodes1[I]))
16072+ if (isa<Instruction>(Opcodes1[I])) {
16073+ assert(isa<UndefValue>(Opcodes2[I]) && "Expected 2nd undef value");
1607316074 return true;
16074- if (isa<Instruction>(Opcodes2[I]))
16075+ }
16076+ if (isa<Instruction>(Opcodes2[I])) {
16077+ assert(isa<UndefValue>(Opcodes1[I]) && "Expected 1st undef value");
1607516078 return false;
16076- if (isa<Constant>(Opcodes1[I]) && !isa<UndefValue>(Opcodes1[I]))
16079+ }
16080+ if (isa<Constant>(Opcodes1[I]) && !isa<UndefValue>(Opcodes1[I])) {
16081+ assert(isa<UndefValue>(Opcodes2[I]) && "Expected 2nd undef value");
1607716082 return true;
16078- if (isa<Constant>(Opcodes2[I]) && !isa<UndefValue>(Opcodes2[I]))
16083+ }
16084+ if (isa<Constant>(Opcodes2[I]) && !isa<UndefValue>(Opcodes2[I])) {
16085+ assert(isa<UndefValue>(Opcodes1[I]) && "Expected 1st undef value");
1607916086 return false;
16080- if (isa<UndefValue>(Opcodes1[I]) && !isa<UndefValue>(Opcodes2[I]))
16087+ }
16088+ if (!isa<UndefValue>(Opcodes2[I])) {
16089+ assert(isa<UndefValue>(Opcodes1[I]) && "Expected 1st undef value");
1608116090 return false;
16082- if (!isa<UndefValue>(Opcodes1[I]) && isa<UndefValue>(Opcodes2[I]))
16083- return true;
16084- continue;
16091+ }
16092+ assert(!isa<UndefValue>(Opcodes1[I]) && isa<UndefValue>(Opcodes2[I]) &&
16093+ "Expected 1st non-undef and 2nd undef value");
16094+ return true;
1608516095 }
1608616096 if (auto *I1 = dyn_cast<Instruction>(Opcodes1[I]))
1608716097 if (auto *I2 = dyn_cast<Instruction>(Opcodes2[I])) {
0 commit comments