Skip to content

Commit 09c35d1

Browse files
committed
[Test] Add for serialization of coroutines.
1 parent 3d40a8c commit 09c35d1

File tree

1 file changed

+121
-0
lines changed

1 file changed

+121
-0
lines changed

test/SIL/Serialization/coroutines.sil

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
// First parse this and then emit a *.sib. Then read in the *.sib, then recreate
2+
// RUN: %empty-directory(%t)
3+
// RUN: %target-sil-opt %s -emit-sib -o %t/tmp.sib -module-name borrow
4+
// RUN: %target-sil-opt %t/tmp.sib -o %t/tmp.2.sib -module-name borrow
5+
// RUN: %target-sil-opt %t/tmp.2.sib -module-name coroutines -emit-sorted-sil | %FileCheck %s
6+
7+
sil_stage raw
8+
9+
import Swift
10+
11+
// CHECK-LABEL: sil [ossa] @begin_apply : {{.*}} {
12+
// CHECK: bb0(
13+
// CHECK-SAME: [[INT:%[^,]+]] :
14+
// CHECK-SAME: [[FLOAT:%[^,]+]] :
15+
// CHECK-SAME: ):
16+
// CHECK: [[YIELD:%[^,]+]] = function_ref @yield : $@yield_once @convention(thin)
17+
// CHECK: ({{%[^,]+}}, {{%[^,]+}}, [[TOKEN:%[^,]+]]) = begin_apply [[YIELD]]([[INT]], [[FLOAT]])
18+
// CHECK: {{%[^,]+}} = end_apply [[TOKEN]]
19+
// CHECK-LABEL: } // end sil function 'begin_apply'
20+
sil [ossa] @begin_apply : $(Int, Float) -> () {
21+
bb0(%0 : $Int, %1 : $Float):
22+
%coro = function_ref @yield : $@convention(thin) @yield_once (Int, Float) -> (@yields Int, @yields Float)
23+
(%int, %float, %token) = begin_apply %coro(%0, %1) : $@convention(thin) @yield_once (Int, Float) -> (@yields Int, @yields Float)
24+
25+
end_apply %token as $()
26+
%r = tuple ()
27+
return %r : $()
28+
}
29+
30+
// CHECK-LABEL: sil @many_signature :
31+
// CHECK-SAME: $@yield_many
32+
// CHECK-SAME: @convention(thin)
33+
// CHECK-SAME: ()
34+
// CHECK-SAME: ->
35+
// CHECK-SAME: (@yields Int, @yields Float)
36+
sil @many_signature : $@yield_many () -> (@yields Int, @yields Float) {
37+
bb0:
38+
%0 = tuple ()
39+
return %0 : $()
40+
}
41+
42+
// CHECK-LABEL: sil @once_signature :
43+
// CHECK-SAME: $@yield_once
44+
// CHECK-SAME: @convention(thin)
45+
// CHECK-SAME: ()
46+
// CHECK-SAME: ->
47+
// CHECK-SAME: (@yields Int, @yields Float)
48+
sil @once_signature : $@yield_once () -> (@yields Int, @yields Float) {
49+
bb0:
50+
%0 = tuple ()
51+
return %0 : $()
52+
}
53+
54+
55+
// CHECK-LABEL: sil [ossa] @yield : {{.*}} {
56+
// CHECK: bb0(
57+
// CHECK-SAME: [[INT:%[^,]+]] :
58+
// CHECK-SAME: [[FLOAT:%[^,]+]] :
59+
// CHECK-SAME: ):
60+
// CHECK: yield ([[INT]] : $Int, [[FLOAT]] : $Float),
61+
// CHECK-SAME: resume [[RESUME_BB:bb[0-9]+]],
62+
// CHECK-SAME: unwind [[UNWIND_BB:bb[0-9]+]]
63+
// CHECK: [[UNWIND_BB]]:
64+
// CHECK: unwind
65+
// CHECK: [[RESUME_BB]]:
66+
// CHECK: return
67+
// CHECK-LABEL: } // end sil function 'yield'
68+
sil [ossa] @yield : $@yield_once (Int, Float) -> (@yields Int, @yields Float) {
69+
bb0(%0 : $Int, %1 : $Float):
70+
yield (%0 : $Int, %1 : $Float), resume bb1, unwind bb2
71+
72+
bb1:
73+
%r = tuple ()
74+
return %r : $()
75+
76+
bb2:
77+
unwind
78+
}
79+
80+
// CHECK-LABEL: sil [ossa] @yield_many : {{.*}} {
81+
// CHECK: bb0(
82+
// CHECK-SAME: [[INT:%[^,]+]] :
83+
// CHECK-SAME: [[FLOAT:%[^,]+]] :
84+
// CHECK-SAME: ):
85+
// CHECK: yield (%0 : $Int, %1 : $Float),
86+
// CHECK: resume [[RESUME_BLOCK_1:bb[0-9]+]],
87+
// CHECK: unwind [[UNWIND_BLOCK_1:bb[0-9]+]]
88+
// CHECK: [[UNWIND_BLOCK_1]]:
89+
// CHECK: br [[UNWIND_BLOCK:bb[0-9]+]]
90+
// CHECK: [[RESUME_BLOCK_1]]:
91+
// CHECK: yield (%0 : $Int, %1 : $Float),
92+
// CHECK: resume [[RESUME_BLOCK_2:bb[0-9]+]],
93+
// CHECK: unwind [[UNWIND_BLOCK_2:bb[0-9]+]]
94+
// CHECK: [[UNWIND_BLOCK_2]]:
95+
// CHECK: br [[UNWIND_BLOCK:bb[0-9]+]]
96+
// CHECK: [[UNWIND_BLOCK]]:
97+
// CHECK: unwind
98+
// CHECK: [[RESUME_BLOCK_2]]:
99+
// CHECK: return
100+
// CHECK-LABEL: } // end sil function 'yield_many'
101+
sil [ossa] @yield_many : $@yield_many (Int, Float) -> (@yields Int, @yields Float) {
102+
bb0(%0 : $Int, %1 : $Float):
103+
yield (%0 : $Int, %1 : $Float), resume bb1, unwind bb3
104+
105+
bb1:
106+
yield (%0 : $Int, %1 : $Float), resume bb2, unwind bb4
107+
108+
bb2:
109+
%r = tuple ()
110+
return %r : $()
111+
112+
bb3:
113+
br bb5
114+
115+
bb4:
116+
br bb5
117+
118+
bb5:
119+
unwind
120+
}
121+

0 commit comments

Comments
 (0)