Skip to content

Commit 07a560b

Browse files
committed
[VectorCombine] Use for shuffle mask construction
1 parent fc894c8 commit 07a560b

File tree

1 file changed

+7
-14
lines changed

1 file changed

+7
-14
lines changed

llvm/lib/Transforms/Vectorize/VectorCombine.cpp

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)