mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
I am doing this separately from the actual change to eliminate the option to make it easier to review.
122 lines
4.0 KiB
Plaintext
122 lines
4.0 KiB
Plaintext
// 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<header>,bb3,bb2,bb4<exiting>,bb5<latch>
|
|
|
|
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<Int32>, #Optional.none!enumelt
|
|
br bb4(%3 : $Builtin.Int32, %8 : $Optional<Int32>)
|
|
|
|
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<Int32>, #Optional.some!enumelt.1, %4 : $Int32
|
|
br bb4(%14 : $Builtin.Int32, %17 : $Optional<Int32>)
|
|
|
|
bb4(%19 : $Builtin.Int32, %20 : $Optional<Int32>):
|
|
switch_enum %20 : $Optional<Int32>, case #Optional.some!enumelt.1: 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<header><exiting>,bb2<latch>
|
|
|
|
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<Int32>, #Optional.some!enumelt.1, %4 : $Int32
|
|
br bb1(%12 : $Builtin.Int32)
|
|
|
|
bb3:
|
|
%17 = tuple ()
|
|
return %17 : $()
|
|
}
|
|
|
|
// CHECK-LABEL: nested_loop
|
|
// CHECK: Loop at depth 1 containing: bb1<header><exiting>,bb2,bb4,bb5,bb6<latch>
|
|
// CHECK: Loop at depth 2 containing: bb4<header><exiting>,bb5<latch>
|
|
|
|
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)
|
|
}
|