Lines Matching refs:async
1 // RUN: mlir-opt %s -async-runtime-ref-counting | FileCheck %s
4 func.func private @token() -> !async.token
10 func.func private @take_token(%arg0: !async.token)
13 // CHECK: %[[TOKEN:.*]]: !async.token
14 func.func @token_arg_no_uses(%arg0: !async.token) {
15 // CHECK: async.runtime.drop_ref %[[TOKEN]] {count = 1 : i64}
21 // CHECK: %[[TOKEN:.*]] = async.runtime.create : !async.token
22 // CHECK: async.runtime.drop_ref %[[TOKEN]] {count = 1 : i64}
23 %0 = async.runtime.create : !async.token
30 // CHECK: async.runtime.drop_ref %[[TOKEN]] {count = 1 : i64}
31 %0 = call @token() : () -> !async.token
36 // CHECK: %[[TOKEN:.*]]: !async.token
37 func.func @token_arg_to_func(%arg0: !async.token) {
38 // CHECK: async.runtime.add_ref %[[TOKEN]] {count = 1 : i64} : !async.token
39 call @take_token(%arg0): (!async.token) -> ()
40 // CHECK: async.runtime.drop_ref %[[TOKEN]] {count = 1 : i64} : !async.token
46 // CHECK: %[[TOKEN:.*]] = async.runtime.create : !async.token
47 %0 = async.runtime.create : !async.token
48 // CHECK: async.runtime.add_ref %[[TOKEN]] {count = 1 : i64} : !async.token
49 call @take_token(%0): (!async.token) -> ()
50 // CHECK: async.runtime.drop_ref %[[TOKEN]] {count = 1 : i64}
55 // CHECK: %[[TOKEN:.*]]: !async.token
56 func.func @token_arg_cond_br_await_with_fallthough(%arg0: !async.token, %arg1: i1) {
66 // CHECK: async.runtime.await %[[TOKEN]]
67 // CHECK: async.runtime.drop_ref %[[TOKEN]] {count = 1 : i64}
68 async.runtime.await %arg0 : !async.token
73 func.func @token_simple_return() -> !async.token {
74 // CHECK: %[[TOKEN:.*]] = async.runtime.create : !async.token
75 %token = async.runtime.create : !async.token
77 return %token : !async.token
81 // CHECK-NOT: async.runtime.drop_ref
82 // CHECK-NOT: async.runtime.add_ref
83 func.func @token_coro_return() -> !async.token {
84 %token = async.runtime.create : !async.token
85 %id = async.coro.id
86 %hdl = async.coro.begin %id
87 %saved = async.coro.save %hdl
88 async.runtime.resume %hdl
89 async.coro.suspend %saved, ^suspend, ^resume, ^cleanup
93 async.coro.free %id, %hdl
96 async.coro.end %hdl
97 return %token : !async.token
101 // CHECK: %[[TOKEN:.*]]: !async.token
102 func.func @token_coro_await_and_resume(%arg0: !async.token) -> !async.token {
103 %token = async.runtime.create : !async.token
104 %id = async.coro.id
105 %hdl = async.coro.begin %id
106 %saved = async.coro.save %hdl
107 // CHECK: async.runtime.await_and_resume %[[TOKEN]]
108 async.runtime.await_and_resume %arg0, %hdl : !async.token
109 // CHECK-NEXT: async.runtime.drop_ref %[[TOKEN]] {count = 1 : i64}
110 async.coro.suspend %saved, ^suspend, ^resume, ^cleanup
114 async.coro.free %id, %hdl
117 async.coro.end %hdl
118 return %token : !async.token
122 // CHECK: %[[VALUE:.*]]: !async.value<f32>
123 func.func @value_coro_await_and_resume(%arg0: !async.value<f32>) -> !async.token {
124 %token = async.runtime.create : !async.token
125 %id = async.coro.id
126 %hdl = async.coro.begin %id
127 %saved = async.coro.save %hdl
128 // CHECK: async.runtime.await_and_resume %[[VALUE]]
129 async.runtime.await_and_resume %arg0, %hdl : !async.value<f32>
130 // CHECK: async.coro.suspend
132 async.coro.suspend %saved, ^suspend, ^resume, ^cleanup
135 // CHECK: %[[LOADED:.*]] = async.runtime.load %[[VALUE]]
136 // CHECK: async.runtime.drop_ref %[[VALUE]] {count = 1 : i64}
137 %0 = async.runtime.load %arg0 : !async.value<f32>
142 async.coro.free %id, %hdl
145 async.coro.end %hdl
146 return %token : !async.token
150 // CHECK: %[[TOKEN:.*]]: !async.token
151 func.func private @outlined_async_execute(%arg0: !async.token) -> !async.token {
152 %0 = async.runtime.create : !async.token
153 %1 = async.coro.id
154 %2 = async.coro.begin %1
155 %3 = async.coro.save %2
156 async.runtime.resume %2
157 // CHECK: async.coro.suspend
158 async.coro.suspend %3, ^suspend, ^resume, ^cleanup
161 %4 = async.coro.save %2
162 async.runtime.await_and_resume %arg0, %2 : !async.token
163 // CHECK: async.runtime.drop_ref %[[TOKEN]] {count = 1 : i64}
164 // CHECK: async.coro.suspend
165 async.coro.suspend %4, ^suspend, ^resume_1, ^cleanup
168 // CHECK: async.runtime.set_available
169 async.runtime.set_available %0 : !async.token
173 // CHECK: async.coro.free
174 async.coro.free %1, %2
178 // CHECK: async.coro.end
179 async.coro.end %2
180 return %0 : !async.token
187 %token = call @token() : () -> !async.token
190 // CHECK: async.runtime.await %[[TOKEN]]
191 async.runtime.await %token : !async.token
194 // CHECK: async.runtime.drop_ref %[[TOKEN]] {count = 1 : i64}
205 %token = call @token() : () -> !async.token
206 // CHECK: async.runtime.await %[[TOKEN]]
207 // CHECK: async.runtime.drop_ref %[[TOKEN]] {count = 1 : i64}
208 async.runtime.await %token : !async.token
220 %token = call @token() : () -> !async.token
225 // CHECK: async.runtime.await %[[TOKEN]]
226 // CHECK: async.runtime.drop_ref %[[TOKEN]] {count = 1 : i64}
228 async.runtime.await %token : !async.token
231 // CHECK: async.runtime.drop_ref %[[TOKEN]] {count = 1 : i64}
242 %token = call @token() : () -> !async.token
247 // CHECK: async.runtime.drop_ref %[[TOKEN]] {count = 1 : i64}
252 // CHECK: async.runtime.await %[[TOKEN]]
253 // CHECK: async.runtime.drop_ref %[[TOKEN]] {count = 1 : i64}
255 async.runtime.await %token : !async.token
267 %token0 = call @token() : () -> !async.token
268 %token1 = call @token() : () -> !async.token
273 // CHECK: async.runtime.drop_ref %[[TOKEN1]] {count = 1 : i64}
274 // CHECK: async.runtime.await %[[TOKEN0]]
275 // CHECK: async.runtime.drop_ref %[[TOKEN0]] {count = 1 : i64}
277 async.runtime.await %token0 : !async.token
281 // CHECK: async.runtime.drop_ref %[[TOKEN0]] {count = 1 : i64}
282 // CHECK: async.runtime.await %[[TOKEN1]]
283 // CHECK: async.runtime.drop_ref %[[TOKEN1]] {count = 1 : i64}
285 async.runtime.await %token1 : !async.token