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