1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
|
// RUN: %target-swift-frontend %s -emit-silgen -verify
sil_stage raw
import Builtin
import Swift
sil @use_int : $@convention(thin) (Int) -> ()
sil @use_float : $@convention(thin) (Float) -> ()
sil @yield_2 : $@yield_once_2 (Int, Float) -> (@yields Int, @yields Float)
sil @once_signature : $@yield_once () -> (@yields Int, @yields Float) {
bb0:
%0 = tuple ()
return %0 : $()
}
sil @once_2_signature : $@yield_once_2 () -> (@yields Int, @yields Float) {
bb0:
%0 = tuple ()
return %0 : $()
}
sil @many_signature : $@yield_many () -> (@yields Int, @yields Float) {
bb0:
%0 = tuple ()
return %0 : $()
}
sil [ossa] @yield : $@yield_once (Int, Float) -> (@yields Int, @yields Float) {
bb0(%0 : $Int, %1 : $Float):
yield (%0 : $Int, %1 : $Float), resume bb1, unwind bb2
bb1:
%r = tuple ()
return %r : $()
bb2:
unwind
}
sil [ossa] @yield_many : $@yield_many (Int, Float) -> (@yields Int, @yields Float) {
bb0(%0 : $Int, %1 : $Float):
yield (%0 : $Int, %1 : $Float), resume bb1, unwind bb3
bb1:
yield (%0 : $Int, %1 : $Float), resume bb2, unwind bb4
bb2:
%r = tuple ()
return %r : $()
bb3:
br bb5
bb4:
br bb5
bb5:
unwind
}
sil [ossa] @begin_apply : $(Int, Float) -> () {
bb0(%0 : $Int, %1 : $Float):
%coro = function_ref @yield : $@convention(thin) @yield_once (Int, Float) -> (@yields Int, @yields Float)
(%int, %float, %token) = begin_apply %coro(%0, %1) : $@convention(thin) @yield_once (Int, Float) -> (@yields Int, @yields Float)
end_apply %token as $()
%r = tuple ()
return %r : $()
}
sil [ossa] @begin_apply_2 : $(Int, Float) -> () {
bb0(%0 : $Int, %1 : $Float):
%coro = function_ref @yield_2 : $@convention(thin) @yield_once_2 (Int, Float) -> (@yields Int, @yields Float)
(%int, %float, %token, %allocation) = begin_apply %coro(%0, %1) : $@convention(thin) @yield_once_2 (Int, Float) -> (@yields Int, @yields Float)
end_apply %token as $()
dealloc_stack %allocation : $*Builtin.SILToken
%r = tuple ()
return %r : $()
}
|