@@ -297,6 +297,84 @@ bb6(%72 : $Builtin.Int64):
297297 return %401 : $()
298298}
299299
300+ // CHECK-LABEL: sil @loop_unroll_unsigned_overflow_1
301+ // CHECK: bb0
302+ // CHECK: br bb1
303+ // CHECK: bb1
304+ // CHECK: builtin "uadd_with_overflow_Word"
305+ // CHECK: cond_br {{.*}}, bb2, bb3
306+ // CHECK: bb2
307+ // CHECK: br bb7
308+ // CHECK: bb3
309+ // CHECK: br bb4
310+ // CHECK: bb4
311+ // CHECK: builtin "uadd_with_overflow_Word"
312+ // CHECK: br bb5
313+ // CHECK: bb5
314+ // CHECK: br bb7
315+ // CHECK: bb7:
316+ // CHECK: return
317+
318+ sil @loop_unroll_unsigned_overflow_1 : $@convention(thin) () -> () {
319+ bb0:
320+ %0 = integer_literal $Builtin.Word, 0
321+ %1 = integer_literal $Builtin.Word, 1
322+ %2 = integer_literal $Builtin.Word, 2
323+ %3 = integer_literal $Builtin.Int1, 1
324+ br bb1(%0 : $Builtin.Word)
325+
326+ bb1(%4 : $Builtin.Word):
327+ %5 = builtin "uadd_with_overflow_Word"(%4 : $Builtin.Word, %1 : $Builtin.Word, %3 : $Builtin.Int1) : $(Builtin.Word, Builtin.Int1)
328+ %6 = tuple_extract %5 : $(Builtin.Word, Builtin.Int1), 0
329+ %7 = builtin "cmp_eq_Word"(%6 : $Builtin.Word, %2 : $Builtin.Word) : $Builtin.Int1
330+ cond_br %7, bb3, bb2
331+
332+ bb2:
333+ br bb1(%6 : $Builtin.Word)
334+
335+ bb3:
336+ %9 = tuple()
337+ return %9 : $()
338+ }
339+
340+ // CHECK-LABEL: sil @loop_unroll_no_overflow_1
341+ // CHECK: bb0
342+ // CHECK: br bb1
343+ // CHECK: bb1
344+ // CHECK: builtin "add_Int64"
345+ // CHECK: cond_br {{.*}}, bb2, bb3
346+ // CHECK: bb2
347+ // CHECK: br bb7
348+ // CHECK: bb3
349+ // CHECK: br bb4
350+ // CHECK: bb4
351+ // CHECK: builtin "add_Int64"
352+ // CHECK: br bb5
353+ // CHECK: bb5
354+ // CHECK: br bb7
355+ // CHECK: bb7:
356+ // CHECK: return
357+
358+ sil @loop_unroll_no_overflow_1 : $@convention(thin) () -> () {
359+ bb0:
360+ %0 = integer_literal $Builtin.Int64, 0
361+ %1 = integer_literal $Builtin.Int64, 1
362+ %2 = integer_literal $Builtin.Int64, 2
363+ br bb1(%0 : $Builtin.Int64)
364+
365+ bb1(%4 : $Builtin.Int64):
366+ %5 = builtin "add_Int64"(%4 : $Builtin.Int64, %1 : $Builtin.Int64) : $Builtin.Int64
367+ %7 = builtin "cmp_eq_Int64"(%5 : $Builtin.Int64, %2 : $Builtin.Int64) : $Builtin.Int1
368+ cond_br %7, bb3, bb2
369+
370+ bb2:
371+ br bb1(%5 : $Builtin.Int64)
372+
373+ bb3:
374+ %9 = tuple()
375+ return %9 : $()
376+ }
377+
300378// CHECK-LABEL: sil @unroll_with_exit_block_arg_2
301379// CHECK: bb1({{.*}}):
302380// CHECK: cond_br {{.*}}, bb4, bb2
0 commit comments