diff --git a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp index dc0dffd9fcbf8..d63cea85bd412 100644 --- a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp +++ b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp @@ -975,6 +975,9 @@ static InstructionsState getSameOpcode(ArrayRef VL, Type *Ty1 = Inst->getOperand(0)->getType(); if (Ty0 == Ty1) { assert(InstOpcode == Opcode && "Expected same CmpInst opcode."); + assert(InstOpcode == AltOpcode && + "Alternate instructions are only supported by BinaryOperator " + "and CastInst."); // Check for compatible operands. If the corresponding operands are not // compatible - need to perform alternate vectorization. CmpInst::Predicate CurrentPred = Inst->getPredicate(); @@ -1003,7 +1006,10 @@ static InstructionsState getSameOpcode(ArrayRef VL, AltPred == CurrentPred || AltPred == SwappedCurrentPred) continue; } - } else if (InstOpcode == Opcode || InstOpcode == AltOpcode) { + } else if (InstOpcode == Opcode) { + assert(InstOpcode == AltOpcode && + "Alternate instructions are only supported by BinaryOperator and " + "CastInst."); if (auto *Gep = dyn_cast(I)) { if (Gep->getNumOperands() != 2 || Gep->getOperand(0)->getType() != IBase->getOperand(0)->getType()) @@ -5999,8 +6005,10 @@ void BoUpSLP::reorderTopToBottom() { if ((TE->State == TreeEntry::Vectorize || TE->State == TreeEntry::StridedVectorize) && isa(TE->getMainOp()) && - !TE->isAltShuffle()) { + InsertElementInst>(TE->getMainOp())) { + assert(!TE->isAltShuffle() && + "Alternate instructions are only supported by BinaryOperator " + "and CastInst."); // Build correct orders for extract{element,value}, loads and // stores. reorderOrder(TE->ReorderIndices, Mask);