Skip to content

Commit 1a9191f

Browse files
committed
Force vectorization for test_exit_branch_cost
1 parent 031a138 commit 1a9191f

File tree

1 file changed

+203
-3
lines changed

1 file changed

+203
-3
lines changed

llvm/test/Transforms/LoopVectorize/AArch64/force-target-instruction-cost.ll

Lines changed: 203 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -155,9 +155,189 @@ define void @test_exit_branch_cost(ptr %dst, i64 %x, i32 %y, ptr %dst.1, i1 %c.4
155155
; CHECK-LABEL: define void @test_exit_branch_cost(
156156
; CHECK-SAME: ptr [[DST:%.*]], i64 [[X:%.*]], i32 [[Y:%.*]], ptr [[DST_1:%.*]], i1 [[C_4:%.*]], ptr [[SRC:%.*]], ptr [[DST_3:%.*]], i1 [[C_3:%.*]], ptr [[DST_2:%.*]]) {
157157
; CHECK-NEXT: [[ENTRY:.*]]:
158+
; CHECK-NEXT: br i1 false, label %[[SCALAR_PH:.*]], label %[[VECTOR_MEMCHECK:.*]]
159+
; CHECK: [[VECTOR_MEMCHECK]]:
160+
; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr [[DST_1]], i64 8
161+
; CHECK-NEXT: [[SCEVGEP1:%.*]] = getelementptr i8, ptr [[DST_3]], i64 8
162+
; CHECK-NEXT: [[SCEVGEP2:%.*]] = getelementptr i8, ptr [[DST_2]], i64 8
163+
; CHECK-NEXT: [[SCEVGEP3:%.*]] = getelementptr i8, ptr [[DST]], i64 8
164+
; CHECK-NEXT: [[SCEVGEP4:%.*]] = getelementptr i8, ptr [[SRC]], i64 8
165+
; CHECK-NEXT: [[BOUND0:%.*]] = icmp ult ptr [[DST_1]], [[SCEVGEP1]]
166+
; CHECK-NEXT: [[BOUND1:%.*]] = icmp ult ptr [[DST_3]], [[SCEVGEP]]
167+
; CHECK-NEXT: [[FOUND_CONFLICT:%.*]] = and i1 [[BOUND0]], [[BOUND1]]
168+
; CHECK-NEXT: [[BOUND05:%.*]] = icmp ult ptr [[DST_1]], [[SCEVGEP2]]
169+
; CHECK-NEXT: [[BOUND16:%.*]] = icmp ult ptr [[DST_2]], [[SCEVGEP]]
170+
; CHECK-NEXT: [[FOUND_CONFLICT7:%.*]] = and i1 [[BOUND05]], [[BOUND16]]
171+
; CHECK-NEXT: [[CONFLICT_RDX:%.*]] = or i1 [[FOUND_CONFLICT]], [[FOUND_CONFLICT7]]
172+
; CHECK-NEXT: [[BOUND08:%.*]] = icmp ult ptr [[DST_1]], [[SCEVGEP3]]
173+
; CHECK-NEXT: [[BOUND19:%.*]] = icmp ult ptr [[DST]], [[SCEVGEP]]
174+
; CHECK-NEXT: [[FOUND_CONFLICT10:%.*]] = and i1 [[BOUND08]], [[BOUND19]]
175+
; CHECK-NEXT: [[CONFLICT_RDX11:%.*]] = or i1 [[CONFLICT_RDX]], [[FOUND_CONFLICT10]]
176+
; CHECK-NEXT: [[BOUND012:%.*]] = icmp ult ptr [[DST_1]], [[SCEVGEP4]]
177+
; CHECK-NEXT: [[BOUND113:%.*]] = icmp ult ptr [[SRC]], [[SCEVGEP]]
178+
; CHECK-NEXT: [[FOUND_CONFLICT14:%.*]] = and i1 [[BOUND012]], [[BOUND113]]
179+
; CHECK-NEXT: [[CONFLICT_RDX15:%.*]] = or i1 [[CONFLICT_RDX11]], [[FOUND_CONFLICT14]]
180+
; CHECK-NEXT: [[BOUND016:%.*]] = icmp ult ptr [[DST_3]], [[SCEVGEP2]]
181+
; CHECK-NEXT: [[BOUND117:%.*]] = icmp ult ptr [[DST_2]], [[SCEVGEP1]]
182+
; CHECK-NEXT: [[FOUND_CONFLICT18:%.*]] = and i1 [[BOUND016]], [[BOUND117]]
183+
; CHECK-NEXT: [[CONFLICT_RDX19:%.*]] = or i1 [[CONFLICT_RDX15]], [[FOUND_CONFLICT18]]
184+
; CHECK-NEXT: [[BOUND020:%.*]] = icmp ult ptr [[DST_3]], [[SCEVGEP3]]
185+
; CHECK-NEXT: [[BOUND121:%.*]] = icmp ult ptr [[DST]], [[SCEVGEP1]]
186+
; CHECK-NEXT: [[FOUND_CONFLICT22:%.*]] = and i1 [[BOUND020]], [[BOUND121]]
187+
; CHECK-NEXT: [[CONFLICT_RDX23:%.*]] = or i1 [[CONFLICT_RDX19]], [[FOUND_CONFLICT22]]
188+
; CHECK-NEXT: [[BOUND024:%.*]] = icmp ult ptr [[DST_3]], [[SCEVGEP4]]
189+
; CHECK-NEXT: [[BOUND125:%.*]] = icmp ult ptr [[SRC]], [[SCEVGEP1]]
190+
; CHECK-NEXT: [[FOUND_CONFLICT26:%.*]] = and i1 [[BOUND024]], [[BOUND125]]
191+
; CHECK-NEXT: [[CONFLICT_RDX27:%.*]] = or i1 [[CONFLICT_RDX23]], [[FOUND_CONFLICT26]]
192+
; CHECK-NEXT: [[BOUND028:%.*]] = icmp ult ptr [[DST_2]], [[SCEVGEP3]]
193+
; CHECK-NEXT: [[BOUND129:%.*]] = icmp ult ptr [[DST]], [[SCEVGEP2]]
194+
; CHECK-NEXT: [[FOUND_CONFLICT30:%.*]] = and i1 [[BOUND028]], [[BOUND129]]
195+
; CHECK-NEXT: [[CONFLICT_RDX31:%.*]] = or i1 [[CONFLICT_RDX27]], [[FOUND_CONFLICT30]]
196+
; CHECK-NEXT: [[BOUND032:%.*]] = icmp ult ptr [[DST_2]], [[SCEVGEP4]]
197+
; CHECK-NEXT: [[BOUND133:%.*]] = icmp ult ptr [[SRC]], [[SCEVGEP2]]
198+
; CHECK-NEXT: [[FOUND_CONFLICT34:%.*]] = and i1 [[BOUND032]], [[BOUND133]]
199+
; CHECK-NEXT: [[CONFLICT_RDX35:%.*]] = or i1 [[CONFLICT_RDX31]], [[FOUND_CONFLICT34]]
200+
; CHECK-NEXT: [[BOUND036:%.*]] = icmp ult ptr [[DST]], [[SCEVGEP4]]
201+
; CHECK-NEXT: [[BOUND137:%.*]] = icmp ult ptr [[SRC]], [[SCEVGEP3]]
202+
; CHECK-NEXT: [[FOUND_CONFLICT38:%.*]] = and i1 [[BOUND036]], [[BOUND137]]
203+
; CHECK-NEXT: [[CONFLICT_RDX39:%.*]] = or i1 [[CONFLICT_RDX35]], [[FOUND_CONFLICT38]]
204+
; CHECK-NEXT: br i1 [[CONFLICT_RDX39]], label %[[SCALAR_PH]], label %[[VECTOR_PH:.*]]
205+
; CHECK: [[VECTOR_PH]]:
206+
; CHECK-NEXT: [[BROADCAST_SPLATINSERT:%.*]] = insertelement <2 x i64> poison, i64 [[X]], i64 0
207+
; CHECK-NEXT: [[BROADCAST_SPLAT:%.*]] = shufflevector <2 x i64> [[BROADCAST_SPLATINSERT]], <2 x i64> poison, <2 x i32> zeroinitializer
208+
; CHECK-NEXT: [[TMP36:%.*]] = icmp eq <2 x i64> [[BROADCAST_SPLAT]], zeroinitializer
209+
; CHECK-NEXT: [[TMP1:%.*]] = xor <2 x i1> [[TMP36]], splat (i1 true)
210+
; CHECK-NEXT: [[BROADCAST_SPLATINSERT40:%.*]] = insertelement <2 x i1> poison, i1 [[C_3]], i64 0
211+
; CHECK-NEXT: [[BROADCAST_SPLAT41:%.*]] = shufflevector <2 x i1> [[BROADCAST_SPLATINSERT40]], <2 x i1> poison, <2 x i32> zeroinitializer
212+
; CHECK-NEXT: [[TMP2:%.*]] = select i1 [[C_4]], <2 x i1> [[BROADCAST_SPLAT41]], <2 x i1> zeroinitializer
213+
; CHECK-NEXT: [[TMP3:%.*]] = xor <2 x i1> [[TMP2]], splat (i1 true)
214+
; CHECK-NEXT: [[TMP4:%.*]] = select <2 x i1> [[TMP1]], <2 x i1> [[TMP3]], <2 x i1> zeroinitializer
215+
; CHECK-NEXT: [[TMP5:%.*]] = select <2 x i1> [[TMP1]], <2 x i1> [[BROADCAST_SPLAT41]], <2 x i1> zeroinitializer
216+
; CHECK-NEXT: [[BROADCAST_SPLATINSERT42:%.*]] = insertelement <2 x i1> poison, i1 [[C_4]], i64 0
217+
; CHECK-NEXT: [[BROADCAST_SPLAT43:%.*]] = shufflevector <2 x i1> [[BROADCAST_SPLATINSERT42]], <2 x i1> poison, <2 x i32> zeroinitializer
218+
; CHECK-NEXT: [[TMP6:%.*]] = select <2 x i1> [[TMP5]], <2 x i1> [[BROADCAST_SPLAT43]], <2 x i1> zeroinitializer
219+
; CHECK-NEXT: [[TMP7:%.*]] = or <2 x i1> [[TMP36]], [[TMP6]]
220+
; CHECK-NEXT: [[PREDPHI:%.*]] = select <2 x i1> [[TMP6]], <2 x i64> zeroinitializer, <2 x i64> splat (i64 1)
221+
; CHECK-NEXT: [[TMP8:%.*]] = xor <2 x i1> [[BROADCAST_SPLAT43]], splat (i1 true)
222+
; CHECK-NEXT: [[TMP9:%.*]] = select <2 x i1> [[TMP5]], <2 x i1> [[TMP8]], <2 x i1> zeroinitializer
223+
; CHECK-NEXT: [[TMP10:%.*]] = or <2 x i1> [[TMP7]], [[TMP9]]
224+
; CHECK-NEXT: br label %[[VECTOR_BODY:.*]]
225+
; CHECK: [[VECTOR_BODY]]:
226+
; CHECK-NEXT: [[INDEX:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[PRED_STORE_CONTINUE73:.*]] ]
227+
; CHECK-NEXT: [[TMP11:%.*]] = extractelement <2 x i1> [[TMP1]], i32 0
228+
; CHECK-NEXT: br i1 [[TMP11]], label %[[PRED_STORE_IF:.*]], label %[[PRED_STORE_CONTINUE:.*]]
229+
; CHECK: [[PRED_STORE_IF]]:
230+
; CHECK-NEXT: store i64 0, ptr [[DST_1]], align 8, !alias.scope [[META7:![0-9]+]], !noalias [[META10:![0-9]+]]
231+
; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE]]
232+
; CHECK: [[PRED_STORE_CONTINUE]]:
233+
; CHECK-NEXT: [[TMP12:%.*]] = extractelement <2 x i1> [[TMP1]], i32 1
234+
; CHECK-NEXT: br i1 [[TMP12]], label %[[PRED_STORE_IF44:.*]], label %[[PRED_STORE_CONTINUE45:.*]]
235+
; CHECK: [[PRED_STORE_IF44]]:
236+
; CHECK-NEXT: store i64 0, ptr [[DST_1]], align 8, !alias.scope [[META7]], !noalias [[META10]]
237+
; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE45]]
238+
; CHECK: [[PRED_STORE_CONTINUE45]]:
239+
; CHECK-NEXT: [[TMP13:%.*]] = extractelement <2 x i1> [[TMP1]], i32 0
240+
; CHECK-NEXT: br i1 [[TMP13]], label %[[PRED_STORE_IF46:.*]], label %[[PRED_STORE_CONTINUE47:.*]]
241+
; CHECK: [[PRED_STORE_IF46]]:
242+
; CHECK-NEXT: store i64 0, ptr [[DST_1]], align 8, !alias.scope [[META7]], !noalias [[META10]]
243+
; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE47]]
244+
; CHECK: [[PRED_STORE_CONTINUE47]]:
245+
; CHECK-NEXT: [[TMP14:%.*]] = extractelement <2 x i1> [[TMP1]], i32 1
246+
; CHECK-NEXT: br i1 [[TMP14]], label %[[PRED_STORE_IF48:.*]], label %[[PRED_STORE_CONTINUE49:.*]]
247+
; CHECK: [[PRED_STORE_IF48]]:
248+
; CHECK-NEXT: store i64 0, ptr [[DST_1]], align 8, !alias.scope [[META7]], !noalias [[META10]]
249+
; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE49]]
250+
; CHECK: [[PRED_STORE_CONTINUE49]]:
251+
; CHECK-NEXT: [[TMP15:%.*]] = extractelement <2 x i1> [[TMP4]], i32 0
252+
; CHECK-NEXT: br i1 [[TMP15]], label %[[PRED_STORE_IF50:.*]], label %[[PRED_STORE_CONTINUE51:.*]]
253+
; CHECK: [[PRED_STORE_IF50]]:
254+
; CHECK-NEXT: store i64 0, ptr [[DST_3]], align 8, !alias.scope [[META15:![0-9]+]], !noalias [[META16:![0-9]+]]
255+
; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE51]]
256+
; CHECK: [[PRED_STORE_CONTINUE51]]:
257+
; CHECK-NEXT: [[TMP16:%.*]] = extractelement <2 x i1> [[TMP4]], i32 1
258+
; CHECK-NEXT: br i1 [[TMP16]], label %[[PRED_STORE_IF52:.*]], label %[[PRED_STORE_CONTINUE53:.*]]
259+
; CHECK: [[PRED_STORE_IF52]]:
260+
; CHECK-NEXT: store i64 0, ptr [[DST_3]], align 8, !alias.scope [[META15]], !noalias [[META16]]
261+
; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE53]]
262+
; CHECK: [[PRED_STORE_CONTINUE53]]:
263+
; CHECK-NEXT: [[TMP17:%.*]] = extractelement <2 x i1> [[TMP4]], i32 0
264+
; CHECK-NEXT: br i1 [[TMP17]], label %[[PRED_STORE_IF54:.*]], label %[[PRED_STORE_CONTINUE55:.*]]
265+
; CHECK: [[PRED_STORE_IF54]]:
266+
; CHECK-NEXT: store i64 0, ptr [[DST_3]], align 8, !alias.scope [[META15]], !noalias [[META16]]
267+
; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE55]]
268+
; CHECK: [[PRED_STORE_CONTINUE55]]:
269+
; CHECK-NEXT: [[TMP18:%.*]] = extractelement <2 x i1> [[TMP4]], i32 1
270+
; CHECK-NEXT: br i1 [[TMP18]], label %[[PRED_STORE_IF56:.*]], label %[[PRED_STORE_CONTINUE57:.*]]
271+
; CHECK: [[PRED_STORE_IF56]]:
272+
; CHECK-NEXT: store i64 0, ptr [[DST_3]], align 8, !alias.scope [[META15]], !noalias [[META16]]
273+
; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE57]]
274+
; CHECK: [[PRED_STORE_CONTINUE57]]:
275+
; CHECK-NEXT: [[TMP19:%.*]] = extractelement <2 x i1> [[TMP7]], i32 0
276+
; CHECK-NEXT: br i1 [[TMP19]], label %[[PRED_STORE_IF58:.*]], label %[[PRED_STORE_CONTINUE59:.*]]
277+
; CHECK: [[PRED_STORE_IF58]]:
278+
; CHECK-NEXT: [[TMP20:%.*]] = extractelement <2 x i64> [[PREDPHI]], i32 0
279+
; CHECK-NEXT: store i64 [[TMP20]], ptr [[DST_2]], align 8, !alias.scope [[META17:![0-9]+]], !noalias [[META18:![0-9]+]]
280+
; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE59]]
281+
; CHECK: [[PRED_STORE_CONTINUE59]]:
282+
; CHECK-NEXT: [[TMP21:%.*]] = extractelement <2 x i1> [[TMP7]], i32 1
283+
; CHECK-NEXT: br i1 [[TMP21]], label %[[PRED_STORE_IF60:.*]], label %[[PRED_STORE_CONTINUE61:.*]]
284+
; CHECK: [[PRED_STORE_IF60]]:
285+
; CHECK-NEXT: [[TMP22:%.*]] = extractelement <2 x i64> [[PREDPHI]], i32 0
286+
; CHECK-NEXT: store i64 [[TMP22]], ptr [[DST_2]], align 8, !alias.scope [[META17]], !noalias [[META18]]
287+
; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE61]]
288+
; CHECK: [[PRED_STORE_CONTINUE61]]:
289+
; CHECK-NEXT: [[TMP23:%.*]] = extractelement <2 x i1> [[TMP7]], i32 0
290+
; CHECK-NEXT: br i1 [[TMP23]], label %[[PRED_STORE_IF62:.*]], label %[[PRED_STORE_CONTINUE63:.*]]
291+
; CHECK: [[PRED_STORE_IF62]]:
292+
; CHECK-NEXT: [[TMP24:%.*]] = extractelement <2 x i64> [[PREDPHI]], i32 0
293+
; CHECK-NEXT: store i64 [[TMP24]], ptr [[DST_2]], align 8, !alias.scope [[META17]], !noalias [[META18]]
294+
; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE63]]
295+
; CHECK: [[PRED_STORE_CONTINUE63]]:
296+
; CHECK-NEXT: [[TMP25:%.*]] = extractelement <2 x i1> [[TMP7]], i32 1
297+
; CHECK-NEXT: br i1 [[TMP25]], label %[[PRED_STORE_IF64:.*]], label %[[PRED_STORE_CONTINUE65:.*]]
298+
; CHECK: [[PRED_STORE_IF64]]:
299+
; CHECK-NEXT: [[TMP26:%.*]] = extractelement <2 x i64> [[PREDPHI]], i32 0
300+
; CHECK-NEXT: store i64 [[TMP26]], ptr [[DST_2]], align 8, !alias.scope [[META17]], !noalias [[META18]]
301+
; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE65]]
302+
; CHECK: [[PRED_STORE_CONTINUE65]]:
303+
; CHECK-NEXT: [[TMP27:%.*]] = extractelement <2 x i1> [[TMP10]], i32 0
304+
; CHECK-NEXT: br i1 [[TMP27]], label %[[PRED_STORE_IF66:.*]], label %[[PRED_STORE_CONTINUE67:.*]]
305+
; CHECK: [[PRED_STORE_IF66]]:
306+
; CHECK-NEXT: [[TMP28:%.*]] = load i64, ptr [[SRC]], align 8, !alias.scope [[META19:![0-9]+]]
307+
; CHECK-NEXT: store i64 [[TMP28]], ptr [[DST]], align 8, !alias.scope [[META20:![0-9]+]], !noalias [[META19]]
308+
; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE67]]
309+
; CHECK: [[PRED_STORE_CONTINUE67]]:
310+
; CHECK-NEXT: [[TMP29:%.*]] = extractelement <2 x i1> [[TMP10]], i32 1
311+
; CHECK-NEXT: br i1 [[TMP29]], label %[[PRED_STORE_IF68:.*]], label %[[PRED_STORE_CONTINUE69:.*]]
312+
; CHECK: [[PRED_STORE_IF68]]:
313+
; CHECK-NEXT: [[TMP30:%.*]] = load i64, ptr [[SRC]], align 8, !alias.scope [[META19]]
314+
; CHECK-NEXT: store i64 [[TMP30]], ptr [[DST]], align 8, !alias.scope [[META20]], !noalias [[META19]]
315+
; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE69]]
316+
; CHECK: [[PRED_STORE_CONTINUE69]]:
317+
; CHECK-NEXT: [[TMP31:%.*]] = extractelement <2 x i1> [[TMP10]], i32 0
318+
; CHECK-NEXT: br i1 [[TMP31]], label %[[PRED_STORE_IF70:.*]], label %[[PRED_STORE_CONTINUE71:.*]]
319+
; CHECK: [[PRED_STORE_IF70]]:
320+
; CHECK-NEXT: [[TMP32:%.*]] = load i64, ptr [[SRC]], align 8, !alias.scope [[META19]]
321+
; CHECK-NEXT: store i64 [[TMP32]], ptr [[DST]], align 8, !alias.scope [[META20]], !noalias [[META19]]
322+
; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE71]]
323+
; CHECK: [[PRED_STORE_CONTINUE71]]:
324+
; CHECK-NEXT: [[TMP33:%.*]] = extractelement <2 x i1> [[TMP10]], i32 1
325+
; CHECK-NEXT: br i1 [[TMP33]], label %[[PRED_STORE_IF72:.*]], label %[[PRED_STORE_CONTINUE73]]
326+
; CHECK: [[PRED_STORE_IF72]]:
327+
; CHECK-NEXT: [[TMP34:%.*]] = load i64, ptr [[SRC]], align 8, !alias.scope [[META19]]
328+
; CHECK-NEXT: store i64 [[TMP34]], ptr [[DST]], align 8, !alias.scope [[META20]], !noalias [[META19]]
329+
; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE73]]
330+
; CHECK: [[PRED_STORE_CONTINUE73]]:
331+
; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 4
332+
; CHECK-NEXT: [[TMP35:%.*]] = icmp eq i64 [[INDEX_NEXT]], 64
333+
; CHECK-NEXT: br i1 [[TMP35]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP21:![0-9]+]]
334+
; CHECK: [[MIDDLE_BLOCK]]:
335+
; CHECK-NEXT: br i1 false, label %[[EXIT:.*]], label %[[SCALAR_PH]]
336+
; CHECK: [[SCALAR_PH]]:
337+
; CHECK-NEXT: [[BC_RESUME_VAL:%.*]] = phi i64 [ 64, %[[MIDDLE_BLOCK]] ], [ 0, %[[VECTOR_MEMCHECK]] ], [ 0, %[[ENTRY]] ]
158338
; CHECK-NEXT: br label %[[LOOP_HEADER:.*]]
159339
; CHECK: [[LOOP_HEADER]]:
160-
; CHECK-NEXT: [[IV:%.*]] = phi i64 [ [[IV_NEXT:%.*]], %[[LOOP_LATCH:.*]] ], [ 0, %[[ENTRY]] ]
340+
; CHECK-NEXT: [[IV:%.*]] = phi i64 [ [[IV_NEXT:%.*]], %[[LOOP_LATCH:.*]] ], [ [[BC_RESUME_VAL]], %[[SCALAR_PH]] ]
161341
; CHECK-NEXT: [[C1:%.*]] = icmp eq i64 [[X]], 0
162342
; CHECK-NEXT: br i1 [[C1]], label %[[THEN_4:.*]], label %[[THEN_1:.*]]
163343
; CHECK: [[THEN_1]]:
@@ -187,7 +367,7 @@ define void @test_exit_branch_cost(ptr %dst, i64 %x, i32 %y, ptr %dst.1, i1 %c.4
187367
; CHECK: [[LOOP_LATCH]]:
188368
; CHECK-NEXT: [[IV_NEXT]] = add i64 [[IV]], 1
189369
; CHECK-NEXT: [[EC:%.*]] = icmp eq i64 [[IV]], 64
190-
; CHECK-NEXT: br i1 [[EC]], label %[[EXIT:.*]], label %[[LOOP_HEADER]]
370+
; CHECK-NEXT: br i1 [[EC]], label %[[EXIT]], label %[[LOOP_HEADER]], !llvm.loop [[LOOP22:![0-9]+]]
191371
; CHECK: [[EXIT]]:
192372
; CHECK-NEXT: ret void
193373
;
@@ -233,12 +413,16 @@ else.2:
233413
loop.latch:
234414
%iv.next = add i64 %iv, 1
235415
%ec = icmp eq i64 %iv, 64
236-
br i1 %ec, label %exit, label %loop.header
416+
br i1 %ec, label %exit, label %loop.header, !llvm.loop !0
237417

238418
exit:
239419
ret void
240420
}
241421

422+
!0 = distinct !{!0, !1}
423+
!1 = !{!"llvm.loop.vectorize.enable", i1 true}
424+
425+
242426
declare void @llvm.assume(i1 noundef)
243427
declare i64 @llvm.umin.i64(i64, i64)
244428
;.
@@ -249,4 +433,20 @@ declare i64 @llvm.umin.i64(i64, i64)
249433
; CHECK: [[LOOP4]] = distinct !{[[LOOP4]], [[META1]], [[META2]]}
250434
; CHECK: [[LOOP5]] = distinct !{[[LOOP5]], [[META1]], [[META2]]}
251435
; CHECK: [[LOOP6]] = distinct !{[[LOOP6]], [[META2]], [[META1]]}
436+
; CHECK: [[META7]] = !{[[META8:![0-9]+]]}
437+
; CHECK: [[META8]] = distinct !{[[META8]], [[META9:![0-9]+]]}
438+
; CHECK: [[META9]] = distinct !{[[META9]], !"LVerDomain"}
439+
; CHECK: [[META10]] = !{[[META11:![0-9]+]], [[META12:![0-9]+]], [[META13:![0-9]+]], [[META14:![0-9]+]]}
440+
; CHECK: [[META11]] = distinct !{[[META11]], [[META9]]}
441+
; CHECK: [[META12]] = distinct !{[[META12]], [[META9]]}
442+
; CHECK: [[META13]] = distinct !{[[META13]], [[META9]]}
443+
; CHECK: [[META14]] = distinct !{[[META14]], [[META9]]}
444+
; CHECK: [[META15]] = !{[[META11]]}
445+
; CHECK: [[META16]] = !{[[META12]], [[META13]], [[META14]]}
446+
; CHECK: [[META17]] = !{[[META12]]}
447+
; CHECK: [[META18]] = !{[[META13]], [[META14]]}
448+
; CHECK: [[META19]] = !{[[META14]]}
449+
; CHECK: [[META20]] = !{[[META13]]}
450+
; CHECK: [[LOOP21]] = distinct !{[[LOOP21]], [[META1]], [[META2]]}
451+
; CHECK: [[LOOP22]] = distinct !{[[LOOP22]], [[META1]]}
252452
;.

0 commit comments

Comments
 (0)