@@ -848,24 +848,17 @@ bool VectorCombine::foldVectorInsertToShuffle(Instruction &I) {
848848 // shufflevector requires the two input vectors to be the same width.
849849 // Elements beyond the bounds of SubVec within the widened vector are
850850 // undefined.
851- SmallVector<int , 8 > WidenMask;
852- unsigned int i = 0 ;
853- for (i = 0 ; i != SubVecNumElts; ++i)
854- WidenMask.push_back (i);
855- for (; i != VecNumElts; ++i)
856- WidenMask.push_back (PoisonMaskElem);
851+ SmallVector<int , 8 > WidenMask (VecNumElts, PoisonMaskElem);
852+ std::iota (WidenMask.begin (), WidenMask.begin () + SubVecNumElts, 0 );
853+ std::fill (WidenMask.begin () + SubVecNumElts, WidenMask.end (), PoisonMaskElem);
857854
858855 auto *WidenShuffle = Builder.CreateShuffleVector (SubVec, WidenMask);
859856 Worklist.pushValue (WidenShuffle);
860857
861- SmallVector<int , 8 > Mask;
862- unsigned int j;
863- for (i = 0 ; i != SubVecIdx; ++i)
864- Mask.push_back (i);
865- for (j = 0 ; j != SubVecNumElts; ++j)
866- Mask.push_back (DstNumElts + j);
867- for (i = SubVecIdx + SubVecNumElts; i != DstNumElts; ++i)
868- Mask.push_back (i);
858+ SmallVector<int , 8 > Mask (DstNumElts);
859+ std::iota (Mask.begin (), Mask.begin () + SubVecIdx, 0 );
860+ std::iota (Mask.begin () + SubVecIdx, Mask.begin () + SubVecIdx + SubVecNumElts, DstNumElts);
861+ std::iota (Mask.begin () + SubVecIdx + SubVecNumElts, Mask.end (), SubVecIdx + SubVecNumElts);
869862
870863 auto *Shuffle = Builder.CreateShuffleVector (Vec, WidenShuffle, Mask);
871864 replaceValue (I, *Shuffle);
0 commit comments