Skip to content

Commit 2b1e037

Browse files
committed
[SLP]Fix createInsertVector mask emission
1 parent 92a6eff commit 2b1e037

File tree

2 files changed

+6
-5
lines changed

2 files changed

+6
-5
lines changed

llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4972,7 +4972,7 @@ static Value *createInsertVector(
49724972
// the subvector length.
49734973
const unsigned VecVF = getNumElements(Vec->getType());
49744974
SmallVector<int> Mask(VecVF, PoisonMaskElem);
4975-
std::iota(Mask.begin(), std::next(Mask.begin(), Index), 0);
4975+
std::iota(Mask.begin(), Mask.end(), 0);
49764976
for (unsigned I : seq<unsigned>(SubVecVF))
49774977
Mask[I + Index] = I + VecVF;
49784978
if (Generator) {
@@ -13976,11 +13976,12 @@ Value *BoUpSLP::gather(
1397613976
Instruction *InsElt;
1397713977
if (auto *VecTy = dyn_cast<FixedVectorType>(Scalar->getType())) {
1397813978
assert(SLPReVec && "FixedVectorType is not expected.");
13979-
Vec = InsElt = cast<Instruction>(createInsertVector(
13980-
Builder, Vec, Scalar, Pos * getNumElements(VecTy)));
13981-
auto *II = dyn_cast<IntrinsicInst>(InsElt);
13979+
Vec =
13980+
createInsertVector(Builder, Vec, Scalar, Pos * getNumElements(VecTy));
13981+
auto *II = dyn_cast<IntrinsicInst>(Vec);
1398213982
if (!II || II->getIntrinsicID() != Intrinsic::vector_insert)
1398313983
return Vec;
13984+
InsElt = II;
1398413985
} else {
1398513986
Vec = Builder.CreateInsertElement(Vec, Scalar, Builder.getInt32(Pos));
1398613987
InsElt = dyn_cast<InsertElementInst>(Vec);

llvm/test/Transforms/SLPVectorizer/X86/insert-subvector.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ define <16 x double> @test(ptr %x, double %v, double %a) {
1717
; CHECK-NEXT: [[TMP9:%.*]] = shufflevector <2 x double> [[TMP8]], <2 x double> poison, <2 x i32> zeroinitializer
1818
; CHECK-NEXT: [[TMP10:%.*]] = call <16 x double> @llvm.vector.insert.v16f64.v6f64(<16 x double> poison, <6 x double> [[TMP1]], i64 0)
1919
; CHECK-NEXT: [[TMP11:%.*]] = shufflevector <4 x double> [[TMP3]], <4 x double> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>
20-
; CHECK-NEXT: [[TMP12:%.*]] = shufflevector <16 x double> [[TMP10]], <16 x double> [[TMP11]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 16, i32 17, i32 18, i32 19, i32 poison, i32 poison>
20+
; CHECK-NEXT: [[TMP12:%.*]] = shufflevector <16 x double> [[TMP10]], <16 x double> [[TMP11]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 16, i32 17, i32 18, i32 19, i32 14, i32 15>
2121
; CHECK-NEXT: [[TMP13:%.*]] = call <16 x double> @llvm.vector.insert.v16f64.v2f64(<16 x double> [[TMP12]], <2 x double> [[TMP6]], i64 6)
2222
; CHECK-NEXT: [[TMP14:%.*]] = call <16 x double> @llvm.vector.insert.v16f64.v2f64(<16 x double> [[TMP13]], <2 x double> [[TMP7]], i64 8)
2323
; CHECK-NEXT: [[TMP15:%.*]] = call <16 x double> @llvm.vector.insert.v16f64.v2f64(<16 x double> [[TMP14]], <2 x double> [[TMP9]], i64 10)

0 commit comments

Comments
 (0)