Lines Matching +full:- +full:- +full:token

2 ; RUN: opt < %s -passes=loop-unroll -unroll-runtime -unroll-allow-partial -S | FileCheck %s
10 ; CHECK-LABEL: @full_unroll(
11 ; CHECK-NEXT: entry:
12 ; CHECK-NEXT: [[ANCHOR:%.*]] = call token @llvm.experimental.convergence.anchor()
13 ; CHECK-NEXT: br label [[L3:%.*]]
15 ; CHECK-NEXT: [[TOK_LOOP:%.*]] = call token @llvm.experimental.convergence.loop() [ "convergence…
16 ; CHECK-NEXT: br label [[A:%.*]]
18 ; CHECK-NEXT: call void @f() [ "convergencectrl"(token [[TOK_LOOP]]) ]
19 ; CHECK-NEXT: br label [[A_1:%.*]]
21 ; CHECK-NEXT: call void @f() [ "convergencectrl"(token [[TOK_LOOP]]) ]
22 ; CHECK-NEXT: br label [[A_2:%.*]]
24 ; CHECK-NEXT: call void @f() [ "convergencectrl"(token [[TOK_LOOP]]) ]
25 ; CHECK-NEXT: ret i32 0
28 %anchor = call token @llvm.experimental.convergence.anchor()
33 %tok.loop = call token @llvm.experimental.convergence.loop() [ "convergencectrl"(token %anchor) ]
39 call void @f() [ "convergencectrl"(token %tok.loop) ]
48 ; multiple -- 4, in this case.
50 ; CHECK-LABEL: @runtime_unroll(
51 ; CHECK-NEXT: entry:
52 ; CHECK-NEXT: [[ANCHOR:%.*]] = call token @llvm.experimental.convergence.anchor()
53 ; CHECK-NEXT: [[LOOP_CTL:%.*]] = mul nsw i32 [[N:%.*]], 12
54 ; CHECK-NEXT: br label [[L3:%.*]]
56 ; CHECK-NEXT: [[X_0:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[INC_3:%.*]], [[A_3:%.*]] ]
57 ; CHECK-NEXT: [[TOK_LOOP:%.*]] = call token @llvm.experimental.convergence.loop() [ "convergence…
58 ; CHECK-NEXT: br label [[A:%.*]]
60 ; CHECK-NEXT: call void @f() [ "convergencectrl"(token [[TOK_LOOP]]) ]
61 ; CHECK-NEXT: br label [[A_1:%.*]]
63 ; CHECK-NEXT: call void @f() [ "convergencectrl"(token [[TOK_LOOP]]) ]
64 ; CHECK-NEXT: br label [[A_2:%.*]]
66 ; CHECK-NEXT: call void @f() [ "convergencectrl"(token [[TOK_LOOP]]) ]
67 ; CHECK-NEXT: br label [[A_3]]
69 ; CHECK-NEXT: call void @f() [ "convergencectrl"(token [[TOK_LOOP]]) ]
70 ; CHECK-NEXT: [[INC_3]] = add nsw i32 [[X_0]], 4
71 ; CHECK-NEXT: [[EXITCOND_3:%.*]] = icmp eq i32 [[INC_3]], [[LOOP_CTL]]
72 ; CHECK-NEXT: br i1 [[EXITCOND_3]], label [[EXIT:%.*]], label [[L3]]
74 ; CHECK-NEXT: ret i32 0
77 %anchor = call token @llvm.experimental.convergence.anchor()
83 %tok.loop = call token @llvm.experimental.convergence.loop() [ "convergencectrl"(token %anchor) ]
87 call void @f() [ "convergencectrl"(token %tok.loop) ]
98 ; pragma -- we unroll exactly 8 times, even though 16 is requested.
100 ; CHECK-LABEL: @pragma_unroll(
101 ; CHECK-NEXT: entry:
102 ; CHECK-NEXT: [[ANCHOR:%.*]] = call token @llvm.experimental.convergence.anchor()
103 ; CHECK-NEXT: [[LOOP_CTL:%.*]] = mul nsw i32 [[N:%.*]], 24
104 ; CHECK-NEXT: br label [[L3:%.*]], !llvm.loop [[LOOP0:![0-9]+]]
106 ; CHECK-NEXT: [[X_0:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[INC_7:%.*]], [[A_7:%.*]] ]
107 ; CHECK-NEXT: [[TOK_LOOP:%.*]] = call token @llvm.experimental.convergence.loop() [ "convergence…
108 ; CHECK-NEXT: br label [[A:%.*]]
110 ; CHECK-NEXT: call void @f() [ "convergencectrl"(token [[TOK_LOOP]]) ]
111 ; CHECK-NEXT: br label [[A_1:%.*]]
113 ; CHECK-NEXT: call void @f() [ "convergencectrl"(token [[TOK_LOOP]]) ]
114 ; CHECK-NEXT: br label [[A_2:%.*]]
116 ; CHECK-NEXT: call void @f() [ "convergencectrl"(token [[TOK_LOOP]]) ]
117 ; CHECK-NEXT: br label [[A_3:%.*]]
119 ; CHECK-NEXT: call void @f() [ "convergencectrl"(token [[TOK_LOOP]]) ]
120 ; CHECK-NEXT: br label [[A_4:%.*]]
122 ; CHECK-NEXT: call void @f() [ "convergencectrl"(token [[TOK_LOOP]]) ]
123 ; CHECK-NEXT: br label [[A_5:%.*]]
125 ; CHECK-NEXT: call void @f() [ "convergencectrl"(token [[TOK_LOOP]]) ]
126 ; CHECK-NEXT: br label [[A_6:%.*]]
128 ; CHECK-NEXT: call void @f() [ "convergencectrl"(token [[TOK_LOOP]]) ]
129 ; CHECK-NEXT: br label [[A_7]]
131 ; CHECK-NEXT: call void @f() [ "convergencectrl"(token [[TOK_LOOP]]) ]
132 ; CHECK-NEXT: [[INC_7]] = add nsw i32 [[X_0]], 8
133 ; CHECK-NEXT: [[EXITCOND_7:%.*]] = icmp eq i32 [[INC_7]], [[LOOP_CTL]]
134 ; CHECK-NEXT: br i1 [[EXITCOND_7]], label [[EXIT:%.*]], label [[L3]], !llvm.loop [[LOOP2:![0-9]+…
136 ; CHECK-NEXT: ret i32 0
139 %anchor = call token @llvm.experimental.convergence.anchor()
145 %tok.loop = call token @llvm.experimental.convergence.loop() [ "convergencectrl"(token %anchor) ]
149 call void @f() [ "convergencectrl"(token %tok.loop) ]
161 ; CHECK-LABEL: @pragma_unroll_divisible_trip_count(
162 ; CHECK-NEXT: entry:
163 ; CHECK-NEXT: [[ANCHOR:%.*]] = call token @llvm.experimental.convergence.anchor()
164 ; CHECK-NEXT: br label [[L3:%.*]], !llvm.loop [[LOOP4:![0-9]+]]
166 ; CHECK-NEXT: [[X_0:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[INC_1:%.*]], [[L3]] ]
167 ; CHECK-NEXT: [[TOK_LOOP:%.*]] = call token @llvm.experimental.convergence.loop() [ "convergence…
168 ; CHECK-NEXT: call void @f() [ "convergencectrl"(token [[TOK_LOOP]]) ]
169 ; CHECK-NEXT: call void @f() [ "convergencectrl"(token [[TOK_LOOP]]) ]
170 ; CHECK-NEXT: [[INC_1]] = add nuw nsw i32 [[X_0]], 2
171 ; CHECK-NEXT: [[EXITCOND_1:%.*]] = icmp eq i32 [[INC_1]], 4
172 ; CHECK-NEXT: br i1 [[EXITCOND_1]], label [[EXIT:%.*]], label [[L3]], !llvm.loop [[LOOP6:![0-9]+…
174 ; CHECK-NEXT: ret void
177 %anchor = call token @llvm.experimental.convergence.anchor()
182 %tok.loop = call token @llvm.experimental.convergence.loop() [ "convergencectrl"(token %anchor) ]
183 call void @f() [ "convergencectrl"(token %tok.loop) ]
195 ; CHECK-LABEL: @pragma_unroll_divisible_trip_multiple(
196 ; CHECK-NEXT: entry:
197 ; CHECK-NEXT: [[ANCHOR:%.*]] = call token @llvm.experimental.convergence.anchor()
198 ; CHECK-NEXT: [[LOOP_CTL:%.*]] = mul nsw i32 [[N:%.*]], 2
199 ; CHECK-NEXT: br label [[L3:%.*]], !llvm.loop [[LOOP4]]
201 ; CHECK-NEXT: [[X_0:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[INC_1:%.*]], [[L3]] ]
202 ; CHECK-NEXT: [[TOK_LOOP:%.*]] = call token @llvm.experimental.convergence.loop() [ "convergence…
203 ; CHECK-NEXT: call void @f() [ "convergencectrl"(token [[TOK_LOOP]]) ]
204 ; CHECK-NEXT: call void @f() [ "convergencectrl"(token [[TOK_LOOP]]) ]
205 ; CHECK-NEXT: [[INC_1]] = add nsw i32 [[X_0]], 2
206 ; CHECK-NEXT: [[EXITCOND_1:%.*]] = icmp eq i32 [[INC_1]], [[LOOP_CTL]]
207 ; CHECK-NEXT: br i1 [[EXITCOND_1]], label [[EXIT:%.*]], label [[L3]], !llvm.loop [[LOOP7:![0-9]+…
209 ; CHECK-NEXT: ret i32 0
212 %anchor = call token @llvm.experimental.convergence.anchor()
218 %tok.loop = call token @llvm.experimental.convergence.loop() [ "convergencectrl"(token %anchor) ]
219 call void @f() [ "convergencectrl"(token %tok.loop) ]
232 ; CHECK-LABEL: @pragma_unroll_indivisible_runtime_trip_count(
233 ; CHECK-NEXT: entry:
234 ; CHECK-NEXT: [[ANCHOR:%.*]] = call token @llvm.experimental.convergence.anchor()
235 ; CHECK-NEXT: br label [[L3:%.*]], !llvm.loop [[LOOP4]]
237 ; CHECK-NEXT: [[X_0:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[INC:%.*]], [[L3]] ]
238 ; CHECK-NEXT: [[TOK_LOOP:%.*]] = call token @llvm.experimental.convergence.loop() [ "convergence…
239 ; CHECK-NEXT: call void @f() [ "convergencectrl"(token [[TOK_LOOP]]) ]
240 ; CHECK-NEXT: [[INC]] = add nsw i32 [[X_0]], 1
241 ; CHECK-NEXT: [[EXITCOND:%.*]] = icmp eq i32 [[INC]], [[N:%.*]]
242 ; CHECK-NEXT: br i1 [[EXITCOND]], label [[EXIT:%.*]], label [[L3]], !llvm.loop [[LOOP4]]
244 ; CHECK-NEXT: ret i32 0
247 %anchor = call token @llvm.experimental.convergence.anchor()
252 %tok.loop = call token @llvm.experimental.convergence.loop() [ "convergencectrl"(token %anchor) ]
253 call void @f() [ "convergencectrl"(token %tok.loop) ]
267 ; CHECK-LABEL: @pragma_unroll_indivisible_trip_count(
268 ; CHECK-NEXT: entry:
269 ; CHECK-NEXT: [[ANCHOR:%.*]] = call token @llvm.experimental.convergence.anchor()
270 ; CHECK-NEXT: br label [[L3:%.*]], !llvm.loop [[LOOP4]]
272 ; CHECK-NEXT: [[TOK_LOOP:%.*]] = call token @llvm.experimental.convergence.loop() [ "convergence…
273 ; CHECK-NEXT: call void @f() [ "convergencectrl"(token [[TOK_LOOP]]) ]
274 ; CHECK-NEXT: call void @f() [ "convergencectrl"(token [[TOK_LOOP]]) ]
275 ; CHECK-NEXT: call void @f() [ "convergencectrl"(token [[TOK_LOOP]]) ]
276 ; CHECK-NEXT: call void @f() [ "convergencectrl"(token [[TOK_LOOP]]) ]
277 ; CHECK-NEXT: call void @f() [ "convergencectrl"(token [[TOK_LOOP]]) ]
278 ; CHECK-NEXT: ret i32 0
281 %anchor = call token @llvm.experimental.convergence.anchor()
286 %tok.loop = call token @llvm.experimental.convergence.loop() [ "convergencectrl"(token %anchor) ]
287 call void @f() [ "convergencectrl"(token %tok.loop) ]
299 ; CHECK-LABEL: @pragma_unroll_with_remainder(
300 ; CHECK-NEXT: entry:
301 ; CHECK-NEXT: [[TMP0:%.*]] = freeze i32 [[N:%.*]]
302 ; CHECK-NEXT: [[TMP1:%.*]] = add i32 [[TMP0]], -1
303 ; CHECK-NEXT: [[XTRAITER:%.*]] = and i32 [[TMP0]], 1
304 ; CHECK-NEXT: [[TMP2:%.*]] = icmp ult i32 [[TMP1]], 1
305 ; CHECK-NEXT: br i1 [[TMP2]], label [[EXIT_UNR_LCSSA:%.*]], label [[ENTRY_NEW:%.*]]
307 ; CHECK-NEXT: [[UNROLL_ITER:%.*]] = sub i32 [[TMP0]], [[XTRAITER]]
308 ; CHECK-NEXT: br label [[L3:%.*]], !llvm.loop [[LOOP4]]
310 ; CHECK-NEXT: [[X_0:%.*]] = phi i32 [ 0, [[ENTRY_NEW]] ], [ [[INC_1:%.*]], [[L3]] ]
311 ; CHECK-NEXT: [[NITER:%.*]] = phi i32 [ 0, [[ENTRY_NEW]] ], [ [[NITER_NEXT_1:%.*]], [[L3]] ]
312 ; CHECK-NEXT: [[TOK_LOOP:%.*]] = call token @llvm.experimental.convergence.anchor()
313 ; CHECK-NEXT: call void @f() [ "convergencectrl"(token [[TOK_LOOP]]) ]
314 ; CHECK-NEXT: [[TOK_LOOP_1:%.*]] = call token @llvm.experimental.convergence.anchor()
315 ; CHECK-NEXT: call void @f() [ "convergencectrl"(token [[TOK_LOOP_1]]) ]
316 ; CHECK-NEXT: [[INC_1]] = add nsw i32 [[X_0]], 2
317 ; CHECK-NEXT: [[NITER_NEXT_1]] = add i32 [[NITER]], 2
318 ; CHECK-NEXT: [[NITER_NCMP_1:%.*]] = icmp eq i32 [[NITER_NEXT_1]], [[UNROLL_ITER]]
319 ; CHECK-NEXT: br i1 [[NITER_NCMP_1]], label [[EXIT_UNR_LCSSA_LOOPEXIT:%.*]], label [[L3]], !llvm…
320 ; CHECK: exit.unr-lcssa.loopexit:
321 ; CHECK-NEXT: br label [[EXIT_UNR_LCSSA]]
322 ; CHECK: exit.unr-lcssa:
323 ; CHECK-NEXT: [[LCMP_MOD:%.*]] = icmp ne i32 [[XTRAITER]], 0
324 ; CHECK-NEXT: br i1 [[LCMP_MOD]], label [[L3_EPIL_PREHEADER:%.*]], label [[EXIT:%.*]]
326 ; CHECK-NEXT: br label [[L3_EPIL:%.*]]
328 ; CHECK-NEXT: [[TOK_LOOP_EPIL:%.*]] = call token @llvm.experimental.convergence.anchor()
329 ; CHECK-NEXT: call void @f() [ "convergencectrl"(token [[TOK_LOOP_EPIL]]) ]
330 ; CHECK-NEXT: br label [[EXIT]]
332 ; CHECK-NEXT: ret i32 0
339 %tok.loop = call token @llvm.experimental.convergence.anchor()
340 call void @f() [ "convergencectrl"(token %tok.loop) ]
354 ; CHECK-LABEL: @extended_loop(
355 ; CHECK-NEXT: entry:
356 ; CHECK-NEXT: br label [[L3:%.*]], !llvm.loop [[LOOP4]]
358 ; CHECK-NEXT: [[X_0:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[INC:%.*]], [[L3]] ]
359 ; CHECK-NEXT: [[TOK_LOOP:%.*]] = call token @llvm.experimental.convergence.anchor()
360 ; CHECK-NEXT: [[INC]] = add nsw i32 [[X_0]], 1
361 ; CHECK-NEXT: [[EXITCOND:%.*]] = icmp eq i32 [[INC]], [[N:%.*]]
362 ; CHECK-NEXT: br i1 [[EXITCOND]], label [[EXIT:%.*]], label [[L3]], !llvm.loop [[LOOP4]]
364 ; CHECK-NEXT: call void @f() [ "convergencectrl"(token [[TOK_LOOP]]) ]
365 ; CHECK-NEXT: ret i32 0
372 %tok.loop = call token @llvm.experimental.convergence.anchor()
378 call void @f() [ "convergencectrl"(token %tok.loop) ]
385 ; CHECK-LABEL: @extended_inner_loop_1(
386 ; CHECK-NEXT: entry:
387 ; CHECK-NEXT: br label [[L3:%.*]]
389 ; CHECK-NEXT: [[X_0:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[INC:%.*]], [[LATCH:%.*]] ]
390 ; CHECK-NEXT: [[TOK_LOOP:%.*]] = call token @llvm.experimental.convergence.anchor()
391 ; CHECK-NEXT: [[INC]] = add nsw i32 [[X_0]], 1
392 ; CHECK-NEXT: [[EXITCOND:%.*]] = icmp eq i32 [[INC]], 4
393 ; CHECK-NEXT: br label [[L2:%.*]], !llvm.loop [[LOOP4]]
395 ; CHECK-NEXT: [[TOK_L2:%.*]] = call token @llvm.experimental.convergence.anchor()
396 ; CHECK-NEXT: call void @f() [ "convergencectrl"(token [[TOK_L2]]) ]
397 ; CHECK-NEXT: br i1 [[COND:%.*]], label [[L2]], label [[LATCH]], !llvm.loop [[LOOP4]]
399 ; CHECK-NEXT: br i1 [[EXITCOND]], label [[EXIT:%.*]], label [[L3]]
401 ; CHECK-NEXT: call void @f() [ "convergencectrl"(token [[TOK_L2]]) ]
402 ; CHECK-NEXT: ret i32 0
409 %tok.loop = call token @llvm.experimental.convergence.anchor()
415 %tok.l2 = call token @llvm.experimental.convergence.anchor()
416 call void @f() [ "convergencectrl"(token %tok.l2) ]
423 call void @f() [ "convergencectrl"(token %tok.l2) ]
430 ; CHECK-LABEL: @extended_inner_loop_2(
431 ; CHECK-NEXT: entry:
432 ; CHECK-NEXT: br label [[L3:%.*]]
434 ; CHECK-NEXT: br label [[L2:%.*]], !llvm.loop [[LOOP4]]
436 ; CHECK-NEXT: [[TOK_L2:%.*]] = call token @llvm.experimental.convergence.anchor()
437 ; CHECK-NEXT: call void @f() [ "convergencectrl"(token [[TOK_L2]]) ]
438 ; CHECK-NEXT: br i1 [[COND:%.*]], label [[L2]], label [[LATCH:%.*]], !llvm.loop [[LOOP4]]
440 ; CHECK-NEXT: call void @f() [ "convergencectrl"(token [[TOK_L2]]) ]
441 ; CHECK-NEXT: br label [[L2_1:%.*]], !llvm.loop [[LOOP4]]
443 ; CHECK-NEXT: [[TOK_L2_1:%.*]] = call token @llvm.experimental.convergence.anchor()
444 ; CHECK-NEXT: call void @f() [ "convergencectrl"(token [[TOK_L2_1]]) ]
445 ; CHECK-NEXT: br i1 [[COND]], label [[L2_1]], label [[LATCH_1:%.*]], !llvm.loop [[LOOP4]]
447 ; CHECK-NEXT: call void @f() [ "convergencectrl"(token [[TOK_L2_1]]) ]
448 ; CHECK-NEXT: br label [[L2_2:%.*]], !llvm.loop [[LOOP4]]
450 ; CHECK-NEXT: [[TOK_L2_2:%.*]] = call token @llvm.experimental.convergence.anchor()
451 ; CHECK-NEXT: call void @f() [ "convergencectrl"(token [[TOK_L2_2]]) ]
452 ; CHECK-NEXT: br i1 [[COND]], label [[L2_2]], label [[LATCH_2:%.*]], !llvm.loop [[LOOP4]]
454 ; CHECK-NEXT: call void @f() [ "convergencectrl"(token [[TOK_L2_2]]) ]
455 ; CHECK-NEXT: br label [[L2_3:%.*]], !llvm.loop [[LOOP4]]
457 ; CHECK-NEXT: [[TOK_L2_3:%.*]] = call token @llvm.experimental.convergence.anchor()
458 ; CHECK-NEXT: call void @f() [ "convergencectrl"(token [[TOK_L2_3]]) ]
459 ; CHECK-NEXT: br i1 [[COND]], label [[L2_3]], label [[LATCH_3:%.*]], !llvm.loop [[LOOP4]]
461 ; CHECK-NEXT: call void @f() [ "convergencectrl"(token [[TOK_L2_3]]) ]
462 ; CHECK-NEXT: ret i32 0
469 %tok.loop = call token @llvm.experimental.convergence.anchor()
475 %tok.l2 = call token @llvm.experimental.convergence.anchor()
476 call void @f() [ "convergencectrl"(token %tok.l2) ]
480 call void @f() [ "convergencectrl"(token %tok.l2) ]
490 ; CHECK-LABEL: @unroll_nest(
491 ; CHECK-NEXT: entry:
492 ; CHECK-NEXT: br label [[L3:%.*]]
494 ; CHECK-NEXT: br label [[L2:%.*]], !llvm.loop [[LOOP4]]
496 ; CHECK-NEXT: [[TOK_L2:%.*]] = call token @llvm.experimental.convergence.anchor()
497 ; CHECK-NEXT: call void @f() [ "convergencectrl"(token [[TOK_L2]]) ]
498 ; CHECK-NEXT: br i1 [[COND:%.*]], label [[L2_1:%.*]], label [[LATCH:%.*]], !llvm.loop [[LOOP4]]
500 ; CHECK-NEXT: [[TOK_L2_1:%.*]] = call token @llvm.experimental.convergence.anchor()
501 ; CHECK-NEXT: call void @f() [ "convergencectrl"(token [[TOK_L2_1]]) ]
502 ; CHECK-NEXT: br i1 [[COND]], label [[L2]], label [[LATCH]], !llvm.loop [[LOOP9:![0-9]+]]
504 ; CHECK-NEXT: br label [[L2_12:%.*]], !llvm.loop [[LOOP4]]
506 ; CHECK-NEXT: [[TOK_L2_11:%.*]] = call token @llvm.experimental.convergence.anchor()
507 ; CHECK-NEXT: call void @f() [ "convergencectrl"(token [[TOK_L2_11]]) ]
508 ; CHECK-NEXT: br i1 [[COND]], label [[L2_1_1:%.*]], label [[LATCH_1:%.*]], !llvm.loop [[LOOP4]]
510 ; CHECK-NEXT: [[TOK_L2_1_1:%.*]] = call token @llvm.experimental.convergence.anchor()
511 ; CHECK-NEXT: call void @f() [ "convergencectrl"(token [[TOK_L2_1_1]]) ]
512 ; CHECK-NEXT: br i1 [[COND]], label [[L2_12]], label [[LATCH_1]], !llvm.loop [[LOOP9]]
514 ; CHECK-NEXT: br label [[L2_2:%.*]], !llvm.loop [[LOOP4]]
516 ; CHECK-NEXT: [[TOK_L2_2:%.*]] = call token @llvm.experimental.convergence.anchor()
517 ; CHECK-NEXT: call void @f() [ "convergencectrl"(token [[TOK_L2_2]]) ]
518 ; CHECK-NEXT: br i1 [[COND]], label [[L2_1_2:%.*]], label [[LATCH_2:%.*]], !llvm.loop [[LOOP4]]
520 ; CHECK-NEXT: [[TOK_L2_1_2:%.*]] = call token @llvm.experimental.convergence.anchor()
521 ; CHECK-NEXT: call void @f() [ "convergencectrl"(token [[TOK_L2_1_2]]) ]
522 ; CHECK-NEXT: br i1 [[COND]], label [[L2_2]], label [[LATCH_2]], !llvm.loop [[LOOP9]]
524 ; CHECK-NEXT: br label [[L2_3:%.*]], !llvm.loop [[LOOP4]]
526 ; CHECK-NEXT: [[TOK_L2_3:%.*]] = call token @llvm.experimental.convergence.anchor()
527 ; CHECK-NEXT: call void @f() [ "convergencectrl"(token [[TOK_L2_3]]) ]
528 ; CHECK-NEXT: br i1 [[COND]], label [[L2_1_3:%.*]], label [[LATCH_3:%.*]], !llvm.loop [[LOOP4]]
530 ; CHECK-NEXT: [[TOK_L2_1_3:%.*]] = call token @llvm.experimental.convergence.anchor()
531 ; CHECK-NEXT: call void @f() [ "convergencectrl"(token [[TOK_L2_1_3]]) ]
532 ; CHECK-NEXT: br i1 [[COND]], label [[L2_3]], label [[LATCH_3]], !llvm.loop [[LOOP9]]
534 ; CHECK-NEXT: ret i32 0
541 %tok.loop = call token @llvm.experimental.convergence.anchor()
547 %tok.l2 = call token @llvm.experimental.convergence.anchor()
548 call void @f() [ "convergencectrl"(token %tok.l2) ]
558 declare token @llvm.experimental.convergence.anchor()
559 declare token @llvm.experimental.convergence.loop()