@@ -160,45 +160,45 @@ define void @test_shrink_zext_in_preheader(ptr noalias %src, ptr noalias %dst, i
160160; CHECK: vector.main.loop.iter.check:
161161; CHECK-NEXT: br i1 false, label [[VEC_EPILOG_PH:%.*]], label [[VECTOR_PH:%.*]]
162162; CHECK: vector.ph:
163+ ; CHECK-NEXT: [[BROADCAST_SPLATINSERT:%.*]] = insertelement <16 x i16> poison, i16 [[B]], i64 0
163164; CHECK-NEXT: [[TMP0:%.*]] = trunc i32 [[A]] to i16
164165; CHECK-NEXT: [[TMP1:%.*]] = insertelement <16 x i16> poison, i16 [[TMP0]], i64 0
165- ; CHECK-NEXT: [[TMP2:%.*]] = insertelement <16 x i16> poison, i16 [[B]], i64 0
166- ; CHECK-NEXT: [[TMP3:%.*]] = mul <16 x i16> [[TMP1]], [[TMP2]]
167- ; CHECK-NEXT: [[TMP4:%.*]] = lshr <16 x i16> [[TMP3]], <i16 8, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>
168- ; CHECK-NEXT: [[TMP5:%.*]] = trunc <16 x i16> [[TMP4]] to <16 x i8>
169- ; CHECK-NEXT: [[TMP6:%.*]] = shufflevector <16 x i8> [[TMP5]], <16 x i8> poison, <16 x i32> zeroinitializer
166+ ; CHECK-NEXT: [[TMP2:%.*]] = mul <16 x i16> [[TMP1]], [[BROADCAST_SPLATINSERT]]
167+ ; CHECK-NEXT: [[TMP3:%.*]] = lshr <16 x i16> [[TMP2]], <i16 8, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>
168+ ; CHECK-NEXT: [[TMP4:%.*]] = trunc <16 x i16> [[TMP3]] to <16 x i8>
169+ ; CHECK-NEXT: [[TMP5:%.*]] = shufflevector <16 x i8> [[TMP4]], <16 x i8> poison, <16 x i32> zeroinitializer
170170; CHECK-NEXT: br label [[VECTOR_BODY:%.*]]
171171; CHECK: vector.body:
172172; CHECK-NEXT: [[INDEX:%.*]] = phi i32 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]
173- ; CHECK-NEXT: [[TMP7 :%.*]] = sext i32 [[INDEX]] to i64
174- ; CHECK-NEXT: [[TMP8 :%.*]] = getelementptr inbounds i8, ptr [[DST]], i64 [[TMP7 ]]
175- ; CHECK-NEXT: [[TMP9 :%.*]] = getelementptr inbounds nuw i8, ptr [[TMP8 ]], i64 16
176- ; CHECK-NEXT: store <16 x i8> [[TMP6 ]], ptr [[TMP8 ]], align 1
177- ; CHECK-NEXT: store <16 x i8> [[TMP6 ]], ptr [[TMP9 ]], align 1
173+ ; CHECK-NEXT: [[TMP6 :%.*]] = sext i32 [[INDEX]] to i64
174+ ; CHECK-NEXT: [[TMP7 :%.*]] = getelementptr inbounds i8, ptr [[DST]], i64 [[TMP6 ]]
175+ ; CHECK-NEXT: [[TMP8 :%.*]] = getelementptr inbounds nuw i8, ptr [[TMP7 ]], i64 16
176+ ; CHECK-NEXT: store <16 x i8> [[TMP5 ]], ptr [[TMP7 ]], align 1
177+ ; CHECK-NEXT: store <16 x i8> [[TMP5 ]], ptr [[TMP8 ]], align 1
178178; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 32
179- ; CHECK-NEXT: [[TMP10 :%.*]] = icmp eq i32 [[INDEX_NEXT]], 992
180- ; CHECK-NEXT: br i1 [[TMP10 ]], label [[MIDDLE_BLOCK:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP5:![0-9]+]]
179+ ; CHECK-NEXT: [[TMP9 :%.*]] = icmp eq i32 [[INDEX_NEXT]], 992
180+ ; CHECK-NEXT: br i1 [[TMP9 ]], label [[MIDDLE_BLOCK:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP5:![0-9]+]]
181181; CHECK: middle.block:
182182; CHECK-NEXT: br i1 false, label [[EXIT:%.*]], label [[VEC_EPILOG_ITER_CHECK:%.*]]
183183; CHECK: vec.epilog.iter.check:
184184; CHECK-NEXT: br i1 false, label [[VEC_EPILOG_SCALAR_PH]], label [[VEC_EPILOG_PH]]
185185; CHECK: vec.epilog.ph:
186- ; CHECK-NEXT: [[TMP11 :%.*]] = trunc i32 [[A]] to i16
187- ; CHECK-NEXT: [[TMP12 :%.*]] = insertelement <8 x i16> poison, i16 [[TMP11]], i64 0
188- ; CHECK-NEXT: [[TMP13 :%.*]] = insertelement <8 x i16> poison, i16 [[B ]], i64 0
189- ; CHECK-NEXT: [[TMP14 :%.*]] = mul <8 x i16> [[TMP12 ]], [[TMP13 ]]
190- ; CHECK-NEXT: [[TMP15 :%.*]] = lshr <8 x i16> [[TMP14 ]], <i16 8, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>
191- ; CHECK-NEXT: [[TMP16 :%.*]] = trunc <8 x i16> [[TMP15 ]] to <8 x i8>
192- ; CHECK-NEXT: [[TMP17 :%.*]] = shufflevector <8 x i8> [[TMP16 ]], <8 x i8> poison, <8 x i32> zeroinitializer
186+ ; CHECK-NEXT: [[BROADCAST_SPLATINSERT3 :%.*]] = insertelement <8 x i16> poison, i16 [[B]], i64 0
187+ ; CHECK-NEXT: [[TMP10 :%.*]] = trunc i32 [[A]] to i16
188+ ; CHECK-NEXT: [[TMP11 :%.*]] = insertelement <8 x i16> poison, i16 [[TMP10 ]], i64 0
189+ ; CHECK-NEXT: [[TMP12 :%.*]] = mul <8 x i16> [[TMP11 ]], [[BROADCAST_SPLATINSERT3 ]]
190+ ; CHECK-NEXT: [[TMP13 :%.*]] = lshr <8 x i16> [[TMP12 ]], <i16 8, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>
191+ ; CHECK-NEXT: [[TMP14 :%.*]] = trunc <8 x i16> [[TMP13 ]] to <8 x i8>
192+ ; CHECK-NEXT: [[TMP15 :%.*]] = shufflevector <8 x i8> [[TMP14 ]], <8 x i8> poison, <8 x i32> zeroinitializer
193193; CHECK-NEXT: br label [[VEC_EPILOG_VECTOR_BODY:%.*]]
194194; CHECK: vec.epilog.vector.body:
195195; CHECK-NEXT: [[INDEX7:%.*]] = phi i32 [ 992, [[VEC_EPILOG_PH]] ], [ [[INDEX_NEXT8:%.*]], [[VEC_EPILOG_VECTOR_BODY]] ]
196- ; CHECK-NEXT: [[TMP18 :%.*]] = sext i32 [[INDEX7]] to i64
197- ; CHECK-NEXT: [[TMP19 :%.*]] = getelementptr inbounds i8, ptr [[DST]], i64 [[TMP18 ]]
198- ; CHECK-NEXT: store <8 x i8> [[TMP17 ]], ptr [[TMP19 ]], align 1
196+ ; CHECK-NEXT: [[TMP16 :%.*]] = sext i32 [[INDEX7]] to i64
197+ ; CHECK-NEXT: [[TMP17 :%.*]] = getelementptr inbounds i8, ptr [[DST]], i64 [[TMP16 ]]
198+ ; CHECK-NEXT: store <8 x i8> [[TMP15 ]], ptr [[TMP17 ]], align 1
199199; CHECK-NEXT: [[INDEX_NEXT8]] = add nuw i32 [[INDEX7]], 8
200- ; CHECK-NEXT: [[TMP20 :%.*]] = icmp eq i32 [[INDEX_NEXT8]], 1000
201- ; CHECK-NEXT: br i1 [[TMP20 ]], label [[VEC_EPILOG_MIDDLE_BLOCK:%.*]], label [[VEC_EPILOG_VECTOR_BODY]], !llvm.loop [[LOOP6:![0-9]+]]
200+ ; CHECK-NEXT: [[TMP18 :%.*]] = icmp eq i32 [[INDEX_NEXT8]], 1000
201+ ; CHECK-NEXT: br i1 [[TMP18 ]], label [[VEC_EPILOG_MIDDLE_BLOCK:%.*]], label [[VEC_EPILOG_VECTOR_BODY]], !llvm.loop [[LOOP6:![0-9]+]]
202202; CHECK: vec.epilog.middle.block:
203203; CHECK-NEXT: br i1 true, label [[EXIT]], label [[VEC_EPILOG_SCALAR_PH]]
204204; CHECK: vec.epilog.scalar.ph:
0 commit comments