xref: /llvm-project/mlir/test/Dialect/Async/async-runtime-policy-based-ref-counting.mlir (revision 5e7dea225be10d3ba0d01e87fb36e80c6764bd83)
1f57b2420SEugene Zhulenev// RUN: mlir-opt %s -async-runtime-policy-based-ref-counting | FileCheck %s
2f57b2420SEugene Zhulenev
3f57b2420SEugene Zhulenev// CHECK-LABEL: @token_await
4f57b2420SEugene Zhulenev// CHECK:         %[[TOKEN:.*]]: !async.token
5*5e7dea22SRiver Riddlefunc.func @token_await(%arg0: !async.token) {
6f57b2420SEugene Zhulenev  // CHECK: async.runtime.await %[[TOKEN]]
7fd52b435SEugene Zhulenev  // CHECK-NOT: async.runtime.drop_ref
8f57b2420SEugene Zhulenev  async.runtime.await %arg0 : !async.token
9f57b2420SEugene Zhulenev  return
10f57b2420SEugene Zhulenev}
11f57b2420SEugene Zhulenev
12f57b2420SEugene Zhulenev// CHECK-LABEL: @group_await
13f57b2420SEugene Zhulenev// CHECK:         %[[GROUP:.*]]: !async.group
14*5e7dea22SRiver Riddlefunc.func @group_await(%arg0: !async.group) {
15f57b2420SEugene Zhulenev  // CHECK: async.runtime.await %[[GROUP]]
16fd52b435SEugene Zhulenev  // CHECK-NOT: async.runtime.drop_ref
17f57b2420SEugene Zhulenev  async.runtime.await %arg0 : !async.group
18f57b2420SEugene Zhulenev  return
19f57b2420SEugene Zhulenev}
20f57b2420SEugene Zhulenev
21f57b2420SEugene Zhulenev// CHECK-LABEL: @add_token_to_group
22f57b2420SEugene Zhulenev// CHECK:         %[[GROUP:.*]]: !async.group
23f57b2420SEugene Zhulenev// CHECK:         %[[TOKEN:.*]]: !async.token
24*5e7dea22SRiver Riddlefunc.func @add_token_to_group(%arg0: !async.group, %arg1: !async.token) {
25f57b2420SEugene Zhulenev  // CHECK: async.runtime.add_to_group %[[TOKEN]], %[[GROUP]]
2692db09cdSEugene Zhulenev  // CHECK: async.runtime.drop_ref %[[TOKEN]] {count = 1 : i64}
27f57b2420SEugene Zhulenev  async.runtime.add_to_group %arg1, %arg0 : !async.token
28f57b2420SEugene Zhulenev  return
29f57b2420SEugene Zhulenev}
30f57b2420SEugene Zhulenev
31f57b2420SEugene Zhulenev// CHECK-LABEL: @value_load
32f57b2420SEugene Zhulenev// CHECK:         %[[VALUE:.*]]: !async.value<f32>
33*5e7dea22SRiver Riddlefunc.func @value_load(%arg0: !async.value<f32>) {
34f57b2420SEugene Zhulenev  // CHECK: async.runtime.load %[[VALUE]]
3592db09cdSEugene Zhulenev  // CHECK: async.runtime.drop_ref %[[VALUE]] {count = 1 : i64}
36f57b2420SEugene Zhulenev  %0 = async.runtime.load %arg0 : !async.value<f32>
37f57b2420SEugene Zhulenev  return
38f57b2420SEugene Zhulenev}
39f57b2420SEugene Zhulenev
40f57b2420SEugene Zhulenev// CHECK-LABEL: @error_check
41f57b2420SEugene Zhulenev// CHECK:         %[[TOKEN:.*]]: !async.token
42*5e7dea22SRiver Riddlefunc.func @error_check(%arg0: !async.token) {
43f57b2420SEugene Zhulenev  // CHECK: async.runtime.is_error %[[TOKEN]]
4492db09cdSEugene Zhulenev  // CHECK: async.runtime.drop_ref %[[TOKEN]] {count = 1 : i64}
45f57b2420SEugene Zhulenev  %0 = async.runtime.is_error %arg0 : !async.token
46f57b2420SEugene Zhulenev  return
47f57b2420SEugene Zhulenev}
48