blob: ba18bcb98b52fd0048e1edc1c52b321868af79c6 [file] [log] [blame]
// RUN: %empty-directory(%t)
// RUN: %target-sil-opt %s -inline -print-shortest-path-info 2>%t/log >/dev/null
// RUN: %FileCheck %s <%t/log
// REQUIRES: asserts
sil_stage canonical
import Builtin
// CHECK-LABEL: SPA @test_simple
// CHECK-NEXT: bb0: length=1+0, d-entry=0, d-exit=1
sil @test_simple : $@convention(thin) () -> () {
bb0:
%c1 = builtin "assert_configuration"() : $Builtin.Int32
%4 = tuple ()
return %4 : $()
}
// CHECK-LABEL: SPA @test_if_then_else
// CHECK-NEXT: bb0: length=1+0, d-entry=0, d-exit=2
// CHECK-NEXT: bb1: length=3+0, d-entry=1, d-exit=3
// CHECK-NEXT: bb2: length=1+0, d-entry=1, d-exit=1
// CHECK-NEXT: bb3: length=0+0, d-entry=2, d-exit=0
sil @test_if_then_else : $@convention(thin) () -> () {
bb0:
cond_br undef, bb1, bb2
bb1:
%c1 = builtin "assert_configuration"() : $Builtin.Int32
%c2 = builtin "assert_configuration"() : $Builtin.Int32
br bb3
bb2:
br bb3
bb3:
%4 = tuple ()
return %4 : $()
}
// CHECK-LABEL: SPA @test_simple_loop
// CHECK-NEXT: bb0: length=1+0, d-entry=0, d-exit=34
// CHECK-NEXT: bb1: length=3+30, d-entry=1, d-exit=33
// CHECK-NEXT: bb2: length=0+0, d-entry=34, d-exit=0
// CHECK-NEXT: Loop bb1:
// CHECK-NEXT: bb1: length=3+0, d-entry=0, d-exit=3
sil @test_simple_loop : $@convention(thin) () -> () {
bb0:
br bb1
bb1:
%c1 = builtin "assert_configuration"() : $Builtin.Int32
%c2 = builtin "assert_configuration"() : $Builtin.Int32
cond_br undef, bb1, bb2
bb2:
%4 = tuple ()
return %4 : $()
}
// CHECK-LABEL: SPA @test_loop_with_bypass_edge
// CHECK-NEXT: bb0: length=1+30, d-entry=0, d-exit=31
// CHECK-NEXT: bb1: length=1+0, d-entry=31, d-exit=5
// CHECK-NEXT: bb2: length=3+0, d-entry=32, d-exit=4
// CHECK-NEXT: bb3: length=1+0, d-entry=35, d-exit=1
// CHECK-NEXT: bb4: length=0+0, d-entry=31, d-exit=0
// CHECK-NEXT: Loop bb2:
// CHECK-NEXT: bb2: length=3+0, d-entry=0, d-exit=3
sil @test_loop_with_bypass_edge : $@convention(thin) () -> () {
bb0:
cond_br undef, bb1, bb4
bb1:
br bb2
bb2:
%c1 = builtin "assert_configuration"() : $Builtin.Int32
%c2 = builtin "assert_configuration"() : $Builtin.Int32
cond_br undef, bb2, bb3
bb3:
br bb4
bb4:
%4 = tuple ()
return %4 : $()
}
// CHECK-LABEL: SPA @test_nested_loops
// CHECK-NEXT: bb0: length=1+40, d-entry=0, d-exit=41
// CHECK-NEXT: bb1: length=1+0, d-entry=41, d-exit=6
// CHECK-NEXT: bb2: length=1+0, d-entry=42, d-exit=5
// CHECK-NEXT: bb3: length=3+0, d-entry=43, d-exit=5
// CHECK-NEXT: bb4: length=2+0, d-entry=43, d-exit=4
// CHECK-NEXT: bb5: length=1+0, d-entry=45, d-exit=2
// CHECK-NEXT: bb6: length=1+0, d-entry=46, d-exit=1
// CHECK-NEXT: bb7: length=0+0, d-entry=41, d-exit=0
// CHECK-NEXT: Loop bb2:
// CHECK-NEXT: bb2: length=1+0, d-entry=0, d-exit=4
// CHECK-NEXT: bb4: length=2+0, d-entry=1, d-exit=3
// CHECK-NEXT: bb3: length=3+30, d-entry=1, d-exit=34
// CHECK-NEXT: bb5: length=1+0, d-entry=3, d-exit=1
// CHECK-NEXT: Loop bb3:
// CHECK-NEXT: bb3: length=3+0, d-entry=0, d-exit=3
sil @test_nested_loops : $@convention(thin) () -> () {
bb0:
cond_br undef, bb1, bb7
bb1:
br bb2
bb2:
cond_br undef, bb3, bb4
bb3:
%c1 = builtin "assert_configuration"() : $Builtin.Int32
%c2 = builtin "assert_configuration"() : $Builtin.Int32
cond_br undef, bb3, bb5
bb4:
%c3 = builtin "assert_configuration"() : $Builtin.Int32
br bb5
bb5:
cond_br undef, bb2, bb6
bb6:
br bb7
bb7:
%4 = tuple ()
return %4 : $()
}
// CHECK-LABEL: SPA @noreturn_func
// CHECK-NEXT: bb0: length=0+0, d-entry=0, d-exit=536870912
sil @noreturn_func : $@convention(thin) () -> () {
bb0:
unreachable
}
// CHECK-LABEL: SPA @test_call_of_noreturn_in_loop
// CHECK-NEXT: bb0: length=1+0, d-entry=0, d-exit=133
// CHECK-NEXT: bb1: length=12+120, d-entry=1, d-exit=132
// CHECK-NEXT: bb2: length=0+0, d-entry=133, d-exit=0
// CHECK-NEXT: Loop bb1:
// CHECK-NEXT: bb1: length=12+0, d-entry=0, d-exit=12
sil @test_call_of_noreturn_in_loop : $@convention(thin) () -> () {
bb0:
br bb1
bb1:
%f = function_ref @noreturn_func : $@convention(thin) () -> ()
%a = apply %f() : $@convention(thin) () -> ()
%c1 = builtin "assert_configuration"() : $Builtin.Int32
cond_br undef, bb1, bb2
bb2:
%4 = tuple ()
return %4 : $()
}