Skip to content

Commit 81f8abd

Browse files
authored
[SLP][REVEC] Fix CreateInsertElement does not use the correct result if MinBWs applied. (#104558)
1 parent ff90640 commit 81f8abd

File tree

2 files changed

+29
-1
lines changed

2 files changed

+29
-1
lines changed

llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11977,7 +11977,7 @@ Value *BoUpSLP::gather(ArrayRef<Value *> VL, Value *Root, Type *ScalarTy) {
1197711977
if (auto *VecTy = dyn_cast<FixedVectorType>(Scalar->getType())) {
1197811978
assert(SLPReVec && "FixedVectorType is not expected.");
1197911979
Vec = InsElt = Builder.CreateInsertVector(
11980-
Vec->getType(), Vec, V,
11980+
Vec->getType(), Vec, Scalar,
1198111981
Builder.getInt64(Pos * VecTy->getNumElements()));
1198211982
auto *II = dyn_cast<IntrinsicInst>(InsElt);
1198311983
if (!II || II->getIntrinsicID() != Intrinsic::vector_insert)

llvm/test/Transforms/SLPVectorizer/revec.ll

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -336,3 +336,31 @@ entry:
336336
store <4 x i32> %vmovl.i108, ptr %add.ptr35, align 4
337337
ret void
338338
}
339+
340+
define void @test11(<2 x i64> %0, i64 %1, <2 x i64> %2) {
341+
; CHECK-LABEL: @test11(
342+
; CHECK-NEXT: entry:
343+
; CHECK-NEXT: [[TMP3:%.*]] = insertelement <2 x i64> [[TMP0:%.*]], i64 [[TMP1:%.*]], i32 1
344+
; CHECK-NEXT: [[TMP4:%.*]] = add <2 x i64> <i64 5, i64 0>, [[TMP2:%.*]]
345+
; CHECK-NEXT: [[TMP5:%.*]] = trunc <2 x i64> [[TMP4]] to <2 x i16>
346+
; CHECK-NEXT: [[TMP6:%.*]] = call <4 x i16> @llvm.vector.insert.v4i16.v2i16(<4 x i16> poison, <2 x i16> [[TMP5]], i64 0)
347+
; CHECK-NEXT: [[TMP7:%.*]] = trunc <2 x i64> [[TMP3]] to <2 x i16>
348+
; CHECK-NEXT: [[TMP8:%.*]] = call <4 x i16> @llvm.vector.insert.v4i16.v2i16(<4 x i16> [[TMP6]], <2 x i16> [[TMP7]], i64 2)
349+
; CHECK-NEXT: [[TMP9:%.*]] = trunc <4 x i16> [[TMP8]] to <4 x i8>
350+
; CHECK-NEXT: [[TMP10:%.*]] = call <4 x i8> @llvm.vector.insert.v4i8.v2i8(<4 x i8> poison, <2 x i8> zeroinitializer, i64 0)
351+
; CHECK-NEXT: [[TMP11:%.*]] = call <4 x i8> @llvm.vector.insert.v4i8.v2i8(<4 x i8> [[TMP10]], <2 x i8> zeroinitializer, i64 2)
352+
; CHECK-NEXT: [[TMP12:%.*]] = urem <4 x i8> [[TMP9]], [[TMP11]]
353+
; CHECK-NEXT: [[TMP13:%.*]] = icmp ne <4 x i8> [[TMP12]], [[TMP11]]
354+
; CHECK-NEXT: ret void
355+
;
356+
entry:
357+
%3 = insertelement <2 x i64> %0, i64 %1, i32 1
358+
%4 = add <2 x i64> <i64 5, i64 0>, %2
359+
%5 = trunc <2 x i64> %3 to <2 x i8>
360+
%6 = trunc <2 x i64> %4 to <2 x i8>
361+
%7 = urem <2 x i8> %5, zeroinitializer
362+
%8 = urem <2 x i8> %6, zeroinitializer
363+
%9 = icmp ne <2 x i8> %7, zeroinitializer
364+
%10 = icmp ne <2 x i8> %8, zeroinitializer
365+
ret void
366+
}

0 commit comments

Comments
 (0)