@@ -28,8 +28,9 @@ define void @test_add_double_same_const_args_1(ptr %res, ptr noalias %A, ptr noa
2828; CHECK-NEXT: [[TMP12:%.*]] = icmp eq i64 [[INDEX_NEXT]], 100
2929; CHECK-NEXT: br i1 [[TMP12]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP0:![0-9]+]]
3030; CHECK: [[MIDDLE_BLOCK]]:
31- ; CHECK-NEXT: br [[EXIT:label %.*]]
32- ; CHECK: [[SCALAR_PH:.*:]]
31+ ; CHECK-NEXT: br label %[[EXIT:.*]]
32+ ; CHECK: [[EXIT]]:
33+ ; CHECK-NEXT: ret void
3334;
3435entry:
3536 br label %loop
@@ -76,10 +77,11 @@ define void @test_add_double_same_const_args_2(ptr %res, ptr noalias %A, ptr noa
7677; CHECK-NEXT: store <2 x double> [[TMP7]], ptr [[TMP9]], align 4
7778; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 2
7879; CHECK-NEXT: [[TMP12:%.*]] = icmp eq i64 [[INDEX_NEXT]], 100
79- ; CHECK-NEXT: br i1 [[TMP12]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP4 :![0-9]+]]
80+ ; CHECK-NEXT: br i1 [[TMP12]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP3 :![0-9]+]]
8081; CHECK: [[MIDDLE_BLOCK]]:
81- ; CHECK-NEXT: br [[EXIT:label %.*]]
82- ; CHECK: [[SCALAR_PH:.*:]]
82+ ; CHECK-NEXT: br label %[[EXIT:.*]]
83+ ; CHECK: [[EXIT]]:
84+ ; CHECK-NEXT: ret void
8385;
8486entry:
8587 br label %loop
@@ -136,10 +138,11 @@ define void @test_add_double_mixed_const_args(ptr %res, ptr noalias %A, ptr noal
136138; CHECK-NEXT: store <4 x double> [[INTERLEAVED_VEC5]], ptr [[TMP9]], align 4
137139; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 4
138140; CHECK-NEXT: [[TMP12:%.*]] = icmp eq i64 [[INDEX_NEXT]], 100
139- ; CHECK-NEXT: br i1 [[TMP12]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP6 :![0-9]+]]
141+ ; CHECK-NEXT: br i1 [[TMP12]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP4 :![0-9]+]]
140142; CHECK: [[MIDDLE_BLOCK]]:
141- ; CHECK-NEXT: br [[EXIT:label %.*]]
142- ; CHECK: [[SCALAR_PH:.*:]]
143+ ; CHECK-NEXT: br label %[[EXIT:.*]]
144+ ; CHECK: [[EXIT]]:
145+ ; CHECK-NEXT: ret void
143146;
144147entry:
145148 br label %loop
@@ -175,33 +178,24 @@ define void @test_add_double_same_var_args_1(ptr %res, ptr noalias %A, ptr noali
175178; CHECK-NEXT: br label %[[VECTOR_BODY:.*]]
176179; CHECK: [[VECTOR_BODY]]:
177180; CHECK-NEXT: [[INDEX:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY]] ]
178- ; CHECK-NEXT: [[TMP0:%.*]] = add i64 [[INDEX]], 2
181+ ; CHECK-NEXT: [[TMP0:%.*]] = add i64 [[INDEX]], 1
179182; CHECK-NEXT: [[TMP1:%.*]] = getelementptr inbounds nuw { double, double }, ptr [[A]], i64 [[INDEX]]
180183; CHECK-NEXT: [[TMP2:%.*]] = getelementptr inbounds nuw { double, double }, ptr [[A]], i64 [[TMP0]]
181- ; CHECK-NEXT: [[WIDE_VEC:%.*]] = load <4 x double>, ptr [[TMP1]], align 4
182- ; CHECK-NEXT: [[STRIDED_VEC:%.*]] = shufflevector <4 x double> [[WIDE_VEC]], <4 x double> poison, <2 x i32> <i32 0, i32 2>
183- ; CHECK-NEXT: [[STRIDED_VEC1:%.*]] = shufflevector <4 x double> [[WIDE_VEC]], <4 x double> poison, <2 x i32> <i32 1, i32 3>
184- ; CHECK-NEXT: [[WIDE_VEC2:%.*]] = load <4 x double>, ptr [[TMP2]], align 4
185- ; CHECK-NEXT: [[STRIDED_VEC3:%.*]] = shufflevector <4 x double> [[WIDE_VEC2]], <4 x double> poison, <2 x i32> <i32 0, i32 2>
186- ; CHECK-NEXT: [[STRIDED_VEC4:%.*]] = shufflevector <4 x double> [[WIDE_VEC2]], <4 x double> poison, <2 x i32> <i32 1, i32 3>
187- ; CHECK-NEXT: [[TMP3:%.*]] = fadd <2 x double> [[STRIDED_VEC]], [[BROADCAST_SPLAT]]
188- ; CHECK-NEXT: [[TMP4:%.*]] = fadd <2 x double> [[STRIDED_VEC3]], [[BROADCAST_SPLAT]]
184+ ; CHECK-NEXT: [[STRIDED_VEC1:%.*]] = load <2 x double>, ptr [[TMP1]], align 4
185+ ; CHECK-NEXT: [[STRIDED_VEC4:%.*]] = load <2 x double>, ptr [[TMP2]], align 4
189186; CHECK-NEXT: [[TMP5:%.*]] = fadd <2 x double> [[STRIDED_VEC1]], [[BROADCAST_SPLAT]]
190187; CHECK-NEXT: [[TMP6:%.*]] = fadd <2 x double> [[STRIDED_VEC4]], [[BROADCAST_SPLAT]]
191188; CHECK-NEXT: [[TMP7:%.*]] = getelementptr inbounds nuw { double, double }, ptr [[RES]], i64 [[INDEX]]
192189; CHECK-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw { double, double }, ptr [[RES]], i64 [[TMP0]]
193- ; CHECK-NEXT: [[TMP9:%.*]] = shufflevector <2 x double> [[TMP3]], <2 x double> [[TMP5]], <4 x i32> <i32 0, i32 1, i32 2, i32 3>
194- ; CHECK-NEXT: [[INTERLEAVED_VEC:%.*]] = shufflevector <4 x double> [[TMP9]], <4 x double> poison, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
195- ; CHECK-NEXT: store <4 x double> [[INTERLEAVED_VEC]], ptr [[TMP7]], align 4
196- ; CHECK-NEXT: [[TMP10:%.*]] = shufflevector <2 x double> [[TMP4]], <2 x double> [[TMP6]], <4 x i32> <i32 0, i32 1, i32 2, i32 3>
197- ; CHECK-NEXT: [[INTERLEAVED_VEC5:%.*]] = shufflevector <4 x double> [[TMP10]], <4 x double> poison, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
198- ; CHECK-NEXT: store <4 x double> [[INTERLEAVED_VEC5]], ptr [[TMP8]], align 4
199- ; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 4
190+ ; CHECK-NEXT: store <2 x double> [[TMP5]], ptr [[TMP7]], align 4
191+ ; CHECK-NEXT: store <2 x double> [[TMP6]], ptr [[TMP8]], align 4
192+ ; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 2
200193; CHECK-NEXT: [[TMP11:%.*]] = icmp eq i64 [[INDEX_NEXT]], 100
201- ; CHECK-NEXT: br i1 [[TMP11]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP8 :![0-9]+]]
194+ ; CHECK-NEXT: br i1 [[TMP11]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP5 :![0-9]+]]
202195; CHECK: [[MIDDLE_BLOCK]]:
203- ; CHECK-NEXT: br [[EXIT:label %.*]]
204- ; CHECK: [[SCALAR_PH:.*:]]
196+ ; CHECK-NEXT: br label %[[EXIT:.*]]
197+ ; CHECK: [[EXIT]]:
198+ ; CHECK-NEXT: ret void
205199;
206200entry:
207201 br label %loop
@@ -237,33 +231,24 @@ define void @test_add_double_same_var_args_2(ptr %res, ptr noalias %A, ptr noali
237231; CHECK-NEXT: br label %[[VECTOR_BODY:.*]]
238232; CHECK: [[VECTOR_BODY]]:
239233; CHECK-NEXT: [[INDEX:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY]] ]
240- ; CHECK-NEXT: [[TMP0:%.*]] = add i64 [[INDEX]], 2
234+ ; CHECK-NEXT: [[TMP0:%.*]] = add i64 [[INDEX]], 1
241235; CHECK-NEXT: [[TMP1:%.*]] = getelementptr inbounds nuw { double, double }, ptr [[A]], i64 [[INDEX]]
242236; CHECK-NEXT: [[TMP2:%.*]] = getelementptr inbounds nuw { double, double }, ptr [[A]], i64 [[TMP0]]
243- ; CHECK-NEXT: [[WIDE_VEC:%.*]] = load <4 x double>, ptr [[TMP1]], align 4
244- ; CHECK-NEXT: [[STRIDED_VEC:%.*]] = shufflevector <4 x double> [[WIDE_VEC]], <4 x double> poison, <2 x i32> <i32 0, i32 2>
245- ; CHECK-NEXT: [[STRIDED_VEC1:%.*]] = shufflevector <4 x double> [[WIDE_VEC]], <4 x double> poison, <2 x i32> <i32 1, i32 3>
246- ; CHECK-NEXT: [[WIDE_VEC2:%.*]] = load <4 x double>, ptr [[TMP2]], align 4
247- ; CHECK-NEXT: [[STRIDED_VEC3:%.*]] = shufflevector <4 x double> [[WIDE_VEC2]], <4 x double> poison, <2 x i32> <i32 0, i32 2>
248- ; CHECK-NEXT: [[STRIDED_VEC4:%.*]] = shufflevector <4 x double> [[WIDE_VEC2]], <4 x double> poison, <2 x i32> <i32 1, i32 3>
249- ; CHECK-NEXT: [[TMP3:%.*]] = fadd <2 x double> [[BROADCAST_SPLAT]], [[STRIDED_VEC]]
250- ; CHECK-NEXT: [[TMP4:%.*]] = fadd <2 x double> [[BROADCAST_SPLAT]], [[STRIDED_VEC3]]
237+ ; CHECK-NEXT: [[STRIDED_VEC1:%.*]] = load <2 x double>, ptr [[TMP1]], align 4
238+ ; CHECK-NEXT: [[STRIDED_VEC4:%.*]] = load <2 x double>, ptr [[TMP2]], align 4
251239; CHECK-NEXT: [[TMP5:%.*]] = fadd <2 x double> [[BROADCAST_SPLAT]], [[STRIDED_VEC1]]
252240; CHECK-NEXT: [[TMP6:%.*]] = fadd <2 x double> [[BROADCAST_SPLAT]], [[STRIDED_VEC4]]
253241; CHECK-NEXT: [[TMP7:%.*]] = getelementptr inbounds nuw { double, double }, ptr [[RES]], i64 [[INDEX]]
254242; CHECK-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw { double, double }, ptr [[RES]], i64 [[TMP0]]
255- ; CHECK-NEXT: [[TMP9:%.*]] = shufflevector <2 x double> [[TMP3]], <2 x double> [[TMP5]], <4 x i32> <i32 0, i32 1, i32 2, i32 3>
256- ; CHECK-NEXT: [[INTERLEAVED_VEC:%.*]] = shufflevector <4 x double> [[TMP9]], <4 x double> poison, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
257- ; CHECK-NEXT: store <4 x double> [[INTERLEAVED_VEC]], ptr [[TMP7]], align 4
258- ; CHECK-NEXT: [[TMP10:%.*]] = shufflevector <2 x double> [[TMP4]], <2 x double> [[TMP6]], <4 x i32> <i32 0, i32 1, i32 2, i32 3>
259- ; CHECK-NEXT: [[INTERLEAVED_VEC5:%.*]] = shufflevector <4 x double> [[TMP10]], <4 x double> poison, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
260- ; CHECK-NEXT: store <4 x double> [[INTERLEAVED_VEC5]], ptr [[TMP8]], align 4
261- ; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 4
243+ ; CHECK-NEXT: store <2 x double> [[TMP5]], ptr [[TMP7]], align 4
244+ ; CHECK-NEXT: store <2 x double> [[TMP6]], ptr [[TMP8]], align 4
245+ ; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 2
262246; CHECK-NEXT: [[TMP11:%.*]] = icmp eq i64 [[INDEX_NEXT]], 100
263- ; CHECK-NEXT: br i1 [[TMP11]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP10 :![0-9]+]]
247+ ; CHECK-NEXT: br i1 [[TMP11]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP6 :![0-9]+]]
264248; CHECK: [[MIDDLE_BLOCK]]:
265- ; CHECK-NEXT: br [[EXIT:label %.*]]
266- ; CHECK: [[SCALAR_PH:.*:]]
249+ ; CHECK-NEXT: br label %[[EXIT:.*]]
250+ ; CHECK: [[EXIT]]:
251+ ; CHECK-NEXT: ret void
267252;
268253entry:
269254 br label %loop
@@ -322,10 +307,11 @@ define void @test_add_double_same_var_args_at_different_positions(ptr %res, ptr
322307; CHECK-NEXT: store <4 x double> [[INTERLEAVED_VEC5]], ptr [[TMP8]], align 4
323308; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 4
324309; CHECK-NEXT: [[TMP11:%.*]] = icmp eq i64 [[INDEX_NEXT]], 100
325- ; CHECK-NEXT: br i1 [[TMP11]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP12 :![0-9]+]]
310+ ; CHECK-NEXT: br i1 [[TMP11]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP7 :![0-9]+]]
326311; CHECK: [[MIDDLE_BLOCK]]:
327- ; CHECK-NEXT: br [[EXIT:label %.*]]
328- ; CHECK: [[SCALAR_PH:.*:]]
312+ ; CHECK-NEXT: br label %[[EXIT:.*]]
313+ ; CHECK: [[EXIT]]:
314+ ; CHECK-NEXT: ret void
329315;
330316entry:
331317 br label %loop
@@ -386,10 +372,11 @@ define void @test_add_double_different_var_args_1(ptr %res, ptr noalias %A, ptr
386372; CHECK-NEXT: store <4 x double> [[INTERLEAVED_VEC7]], ptr [[TMP8]], align 4
387373; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 4
388374; CHECK-NEXT: [[TMP11:%.*]] = icmp eq i64 [[INDEX_NEXT]], 100
389- ; CHECK-NEXT: br i1 [[TMP11]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP14 :![0-9]+]]
375+ ; CHECK-NEXT: br i1 [[TMP11]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP8 :![0-9]+]]
390376; CHECK: [[MIDDLE_BLOCK]]:
391- ; CHECK-NEXT: br [[EXIT:label %.*]]
392- ; CHECK: [[SCALAR_PH:.*:]]
377+ ; CHECK-NEXT: br label %[[EXIT:.*]]
378+ ; CHECK: [[EXIT]]:
379+ ; CHECK-NEXT: ret void
393380;
394381entry:
395382 br label %loop
@@ -450,10 +437,11 @@ define void @test_add_double_different_var_args_2(ptr %res, ptr noalias %A, ptr
450437; CHECK-NEXT: store <4 x double> [[INTERLEAVED_VEC7]], ptr [[TMP8]], align 4
451438; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 4
452439; CHECK-NEXT: [[TMP11:%.*]] = icmp eq i64 [[INDEX_NEXT]], 100
453- ; CHECK-NEXT: br i1 [[TMP11]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP16 :![0-9]+]]
440+ ; CHECK-NEXT: br i1 [[TMP11]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP9 :![0-9]+]]
454441; CHECK: [[MIDDLE_BLOCK]]:
455- ; CHECK-NEXT: br [[EXIT:label %.*]]
456- ; CHECK: [[SCALAR_PH:.*:]]
442+ ; CHECK-NEXT: br label %[[EXIT:.*]]
443+ ; CHECK: [[EXIT]]:
444+ ; CHECK-NEXT: ret void
457445;
458446entry:
459447 br label %loop
0 commit comments