diff --git a/llvm/lib/IR/Instructions.cpp b/llvm/lib/IR/Instructions.cpp index b29969657e7fc..2d89ec1b0a8d3 100644 --- a/llvm/lib/IR/Instructions.cpp +++ b/llvm/lib/IR/Instructions.cpp @@ -1854,23 +1854,18 @@ void ShuffleVectorInst::getShuffleMask(const Constant *Mask, SmallVectorImpl &Result) { ElementCount EC = cast(Mask->getType())->getElementCount(); - if (isa(Mask)) { - Result.resize(EC.getKnownMinValue(), 0); + if (isa(Mask) || isa(Mask)) { + int MaskVal = isa(Mask) ? -1 : 0; + Result.append(EC.getKnownMinValue(), MaskVal); return; } - Result.reserve(EC.getKnownMinValue()); + assert(!EC.isScalable() && + "Scalable vector shuffle mask must be undef or zeroinitializer"); - if (EC.isScalable()) { - assert((isa(Mask) || isa(Mask)) && - "Scalable vector shuffle mask must be undef or zeroinitializer"); - int MaskVal = isa(Mask) ? -1 : 0; - for (unsigned I = 0; I < EC.getKnownMinValue(); ++I) - Result.emplace_back(MaskVal); - return; - } + unsigned NumElts = EC.getFixedValue(); - unsigned NumElts = EC.getKnownMinValue(); + Result.reserve(NumElts); if (auto *CDS = dyn_cast(Mask)) { for (unsigned i = 0; i != NumElts; ++i)