xref: /llvm-project/mlir/test/Dialect/Async/runtime.mlir (revision 5e7dea225be10d3ba0d01e87fb36e80c6764bd83)
1// RUN: mlir-opt %s | FileCheck %s --dump-input=always
2
3// CHECK-LABEL: @create_token
4func.func @create_token() -> !async.token {
5  // CHECK: %0 = async.runtime.create : !async.token
6  %0 = async.runtime.create : !async.token
7  // CHECK: return %0 : !async.token
8  return %0 : !async.token
9}
10
11// CHECK-LABEL: @create_value
12func.func @create_value() -> !async.value<f32> {
13  // CHECK: %0 = async.runtime.create : !async.value<f32>
14  %0 = async.runtime.create : !async.value<f32>
15  // CHECK: return %0 : !async.value<f32>
16  return %0 : !async.value<f32>
17}
18
19// CHECK-LABEL: @create_group
20func.func @create_group() -> !async.group {
21  // CHECK: %[[C:.*]] = arith.constant 10 : index
22  %c = arith.constant 10 : index
23  // CHECK: %[[V:.*]] = async.runtime.create_group %[[C]] : !async.group
24  %0 = async.runtime.create_group %c : !async.group
25  // CHECK: return %[[V]] : !async.group
26  return %0 : !async.group
27}
28
29// CHECK-LABEL: @set_token_available
30func.func @set_token_available(%arg0: !async.token) {
31  // CHECK: async.runtime.set_available %arg0 : !async.token
32  async.runtime.set_available %arg0 : !async.token
33  return
34}
35
36// CHECK-LABEL: @set_value_available
37func.func @set_value_available(%arg0: !async.value<f32>) {
38  // CHECK: async.runtime.set_available %arg0 : !async.value<f32>
39  async.runtime.set_available %arg0 : !async.value<f32>
40  return
41}
42
43// CHECK-LABEL: @set_token_error
44func.func @set_token_error(%arg0: !async.token) {
45  // CHECK: async.runtime.set_error %arg0 : !async.token
46  async.runtime.set_error %arg0 : !async.token
47  return
48}
49
50// CHECK-LABEL: @set_value_error
51func.func @set_value_error(%arg0: !async.value<f32>) {
52  // CHECK: async.runtime.set_error %arg0 : !async.value<f32>
53  async.runtime.set_error %arg0 : !async.value<f32>
54  return
55}
56
57// CHECK-LABEL: @is_token_error
58func.func @is_token_error(%arg0: !async.token) -> i1 {
59  // CHECK: %[[ERR:.*]] = async.runtime.is_error %arg0 : !async.token
60  %0 = async.runtime.is_error %arg0 : !async.token
61  return %0 : i1
62}
63
64// CHECK-LABEL: @is_value_error
65func.func @is_value_error(%arg0: !async.value<f32>) -> i1 {
66  // CHECK: %[[ERR:.*]] = async.runtime.is_error %arg0 : !async.value<f32>
67  %0 = async.runtime.is_error %arg0 : !async.value<f32>
68  return %0 : i1
69}
70
71// CHECK-LABEL: @is_group_error
72func.func @is_group_error(%arg0: !async.group) -> i1 {
73  // CHECK: %[[ERR:.*]] = async.runtime.is_error %arg0 : !async.group
74  %0 = async.runtime.is_error %arg0 : !async.group
75  return %0 : i1
76}
77
78// CHECK-LABEL: @await_token
79func.func @await_token(%arg0: !async.token) {
80  // CHECK: async.runtime.await %arg0 : !async.token
81  async.runtime.await %arg0 : !async.token
82  return
83}
84
85// CHECK-LABEL: @await_value
86func.func @await_value(%arg0: !async.value<f32>) {
87  // CHECK: async.runtime.await %arg0 : !async.value<f32>
88  async.runtime.await %arg0 : !async.value<f32>
89  return
90}
91
92// CHECK-LABEL: @await_group
93func.func @await_group(%arg0: !async.group) {
94  // CHECK: async.runtime.await %arg0 : !async.group
95  async.runtime.await %arg0 : !async.group
96  return
97}
98
99// CHECK-LABEL: @await_and_resume_token
100func.func @await_and_resume_token(%arg0: !async.token,
101                             %arg1: !async.coro.handle) {
102  // CHECK: async.runtime.await_and_resume %arg0, %arg1 : !async.token
103  async.runtime.await_and_resume %arg0, %arg1 : !async.token
104  return
105}
106
107// CHECK-LABEL: @await_and_resume_value
108func.func @await_and_resume_value(%arg0: !async.value<f32>,
109                             %arg1: !async.coro.handle) {
110  // CHECK: async.runtime.await_and_resume %arg0, %arg1 : !async.value<f32>
111  async.runtime.await_and_resume %arg0, %arg1 : !async.value<f32>
112  return
113}
114
115// CHECK-LABEL: @await_and_resume_group
116func.func @await_and_resume_group(%arg0: !async.group,
117                             %arg1: !async.coro.handle) {
118  // CHECK: async.runtime.await_and_resume %arg0, %arg1 : !async.group
119  async.runtime.await_and_resume %arg0, %arg1 : !async.group
120  return
121}
122
123// CHECK-LABEL: @resume
124func.func @resume(%arg0: !async.coro.handle) {
125  // CHECK: async.runtime.resume %arg0
126  async.runtime.resume %arg0
127  return
128}
129
130// CHECK-LABEL: @store
131func.func @store(%arg0: f32, %arg1: !async.value<f32>) {
132  // CHECK: async.runtime.store %arg0, %arg1 : <f32>
133  async.runtime.store %arg0, %arg1 : <f32>
134  return
135}
136
137// CHECK-LABEL: @load
138func.func @load(%arg0: !async.value<f32>) -> f32 {
139  // CHECK: %0 = async.runtime.load %arg0 : <f32>
140  // CHECK: return %0 : f32
141  %0 = async.runtime.load %arg0 : <f32>
142  return %0 : f32
143}
144
145// CHECK-LABEL: @add_to_group
146func.func @add_to_group(%arg0: !async.token, %arg1: !async.value<f32>,
147                   %arg2: !async.group) {
148  // CHECK: async.runtime.add_to_group %arg0, %arg2 : !async.token
149  async.runtime.add_to_group %arg0, %arg2 : !async.token
150  // CHECK: async.runtime.add_to_group %arg1, %arg2 : !async.value<f32>
151  async.runtime.add_to_group %arg1, %arg2 : !async.value<f32>
152  return
153}
154
155// CHECK-LABEL: @add_ref
156func.func @add_ref(%arg0: !async.token) {
157  // CHECK: async.runtime.add_ref %arg0 {count = 1 : i64}
158  async.runtime.add_ref %arg0 {count = 1 : i64} : !async.token
159  return
160}
161
162// CHECK-LABEL: @drop_ref
163func.func @drop_ref(%arg0: !async.token) {
164  // CHECK: async.runtime.drop_ref %arg0 {count = 1 : i64}
165  async.runtime.drop_ref %arg0 {count = 1 : i64} : !async.token
166  return
167}
168