// RUN: %target-sil-opt -enable-sil-verify-all %s -loop-info-printer 2>&1 | %FileCheck %s // REQUIRES: asserts import Builtin import Swift sil_stage canonical // CHECK-LABEL: Loops in simple_loop_with_enum // CHECK: Loop at depth 1 containing: bb1
,bb3,bb2,bb4,bb5 sil @simple_loop_with_enum : $@convention(thin) () -> () { bb0: %0 = integer_literal $Builtin.Int32, 0 %1 = integer_literal $Builtin.Int32, 1000 br bb1(%0 : $Builtin.Int32) bb1(%3 : $Builtin.Int32): %4 = struct $Int32 (%3 : $Builtin.Int32) %6 = builtin "cmp_eq_Int32"(%3 : $Builtin.Int32, %1 : $Builtin.Int32) : $Builtin.Int1 cond_br %6, bb2, bb3 bb2: %8 = enum $Optional, #Optional.none!enumelt br bb4(%3 : $Builtin.Int32, %8 : $Optional) bb3: %10 = integer_literal $Builtin.Int32, 1 %12 = integer_literal $Builtin.Int1, -1 %13 = builtin "sadd_with_overflow_Int32"(%3 : $Builtin.Int32, %10 : $Builtin.Int32, %12 : $Builtin.Int1) : $(Builtin.Int32, Builtin.Int1) %14 = tuple_extract %13 : $(Builtin.Int32, Builtin.Int1), 0 %15 = tuple_extract %13 : $(Builtin.Int32, Builtin.Int1), 1 cond_fail %15 : $Builtin.Int1 %17 = enum $Optional, #Optional.some!enumelt, %4 : $Int32 br bb4(%14 : $Builtin.Int32, %17 : $Optional) bb4(%19 : $Builtin.Int32, %20 : $Optional): switch_enum %20 : $Optional, case #Optional.some!enumelt: bb5, case #Optional.none!enumelt: bb6 bb5: br bb1(%19 : $Builtin.Int32) bb6: %23 = tuple () return %23 : $() } // CHECK-LABEL: Loops in simple_loop // CHECK: Loop at depth 1 containing: bb1
,bb2 sil @simple_loop : $@convention(thin) () -> () { bb0: %0 = integer_literal $Builtin.Int32, 0 %1 = integer_literal $Builtin.Int32, 1000 br bb1(%0 : $Builtin.Int32) bb1(%3 : $Builtin.Int32): %4 = struct $Int32 (%3 : $Builtin.Int32) %6 = builtin "cmp_eq_Int32"(%3 : $Builtin.Int32, %1 : $Builtin.Int32) : $Builtin.Int1 cond_br %6, bb3, bb2 bb2: %8 = integer_literal $Builtin.Int32, 1 %10 = integer_literal $Builtin.Int1, -1 %11 = builtin "sadd_with_overflow_Int32"(%3 : $Builtin.Int32, %8 : $Builtin.Int32, %10 : $Builtin.Int1) : $(Builtin.Int32, Builtin.Int1) %12 = tuple_extract %11 : $(Builtin.Int32, Builtin.Int1), 0 %13 = tuple_extract %11 : $(Builtin.Int32, Builtin.Int1), 1 cond_fail %13 : $Builtin.Int1 %15 = enum $Optional, #Optional.some!enumelt, %4 : $Int32 br bb1(%12 : $Builtin.Int32) bb3: %17 = tuple () return %17 : $() } // CHECK-LABEL: nested_loop // CHECK: Loop at depth 1 containing: bb1
,bb2,bb4,bb5,bb6 // CHECK: Loop at depth 2 containing: bb4
,bb5 sil @nested_loop : $@convention(thin) () -> () { bb0: %0 = integer_literal $Builtin.Int32, 0 %1 = integer_literal $Builtin.Int32, 1000 br bb1(%0 : $Builtin.Int32) bb1(%3 : $Builtin.Int32): %5 = builtin "cmp_eq_Int32"(%3 : $Builtin.Int32, %1 : $Builtin.Int32) : $Builtin.Int1 cond_br %5, bb3, bb2 bb2: %7 = integer_literal $Builtin.Int32, 1 %9 = integer_literal $Builtin.Int1, -1 %10 = builtin "sadd_with_overflow_Int32"(%3 : $Builtin.Int32, %7 : $Builtin.Int32, %9 : $Builtin.Int1) : $(Builtin.Int32, Builtin.Int1) %11 = tuple_extract %10 : $(Builtin.Int32, Builtin.Int1), 0 %12 = tuple_extract %10 : $(Builtin.Int32, Builtin.Int1), 1 cond_fail %12 : $Builtin.Int1 %14 = integer_literal $Builtin.Int32, 2000 br bb4(%0 : $Builtin.Int32) bb3: %16 = tuple () return %16 : $() bb4(%18 : $Builtin.Int32): %19 = builtin "cmp_eq_Int32"(%18 : $Builtin.Int32, %14 : $Builtin.Int32) : $Builtin.Int1 cond_br %19, bb6, bb5 bb5: %21 = integer_literal $Builtin.Int32, 1 %23 = integer_literal $Builtin.Int1, -1 %24 = builtin "sadd_with_overflow_Int32"(%18 : $Builtin.Int32, %21 : $Builtin.Int32, %23 : $Builtin.Int1) : $(Builtin.Int32, Builtin.Int1) %25 = tuple_extract %24 : $(Builtin.Int32, Builtin.Int1), 0 %26 = tuple_extract %24 : $(Builtin.Int32, Builtin.Int1), 1 cond_fail %26 : $Builtin.Int1 br bb4(%25 : $Builtin.Int32) bb6: br bb1(%11 : $Builtin.Int32) }