182 lines · plain
1// RUN: mlir-opt %s -convert-async-to-llvm | FileCheck %s --dump-input=always2 3// CHECK-LABEL: @create_token4func.func @create_token() {5 // CHECK: %[[TOKEN:.*]] = call @mlirAsyncRuntimeCreateToken6 %0 = async.runtime.create : !async.token7 return8}9 10// CHECK-LABEL: @create_value11func.func @create_value() {12 // CHECK: %[[NULL:.*]] = llvm.mlir.zero : !llvm.ptr13 // CHECK: %[[OFFSET:.*]] = llvm.getelementptr %[[NULL]][1]14 // CHECK: %[[SIZE:.*]] = llvm.ptrtoint %[[OFFSET]]15 // CHECK: %[[VALUE:.*]] = call @mlirAsyncRuntimeCreateValue(%[[SIZE]])16 %0 = async.runtime.create : !async.value<f32>17 return18}19 20// CHECK-LABEL: @create_group21func.func @create_group() {22 // CHECK: %[[C:.*]] = arith.constant 1 : index23 // CHECK: %[[S:.*]] = builtin.unrealized_conversion_cast %[[C]] : index to i6424 %c = arith.constant 1 : index25 // CHECK: %[[GROUP:.*]] = call @mlirAsyncRuntimeCreateGroup(%[[S]])26 %0 = async.runtime.create_group %c: !async.group27 return28}29 30// CHECK-LABEL: @set_token_available31func.func @set_token_available() {32 // CHECK: %[[TOKEN:.*]] = call @mlirAsyncRuntimeCreateToken33 %0 = async.runtime.create : !async.token34 // CHECK: call @mlirAsyncRuntimeEmplaceToken(%[[TOKEN]])35 async.runtime.set_available %0 : !async.token36 return37}38 39// CHECK-LABEL: @set_value_available40func.func @set_value_available() {41 // CHECK: %[[VALUE:.*]] = call @mlirAsyncRuntimeCreateValue42 %0 = async.runtime.create : !async.value<f32>43 // CHECK: call @mlirAsyncRuntimeEmplaceValue(%[[VALUE]])44 async.runtime.set_available %0 : !async.value<f32>45 return46}47 48// CHECK-LABEL: @is_token_error49func.func @is_token_error() -> i1 {50 // CHECK: %[[TOKEN:.*]] = call @mlirAsyncRuntimeCreateToken51 %0 = async.runtime.create : !async.token52 // CHECK: %[[ERR:.*]] = call @mlirAsyncRuntimeIsTokenError(%[[TOKEN]])53 %1 = async.runtime.is_error %0 : !async.token54 return %1 : i155}56 57// CHECK-LABEL: @is_value_error58func.func @is_value_error() -> i1 {59 // CHECK: %[[VALUE:.*]] = call @mlirAsyncRuntimeCreateValue60 %0 = async.runtime.create : !async.value<f32>61 // CHECK: %[[ERR:.*]] = call @mlirAsyncRuntimeIsValueError(%[[VALUE]])62 %1 = async.runtime.is_error %0 : !async.value<f32>63 return %1 : i164}65 66// CHECK-LABEL: @await_token67func.func @await_token() {68 // CHECK: %[[TOKEN:.*]] = call @mlirAsyncRuntimeCreateToken69 %0 = async.runtime.create : !async.token70 // CHECK: call @mlirAsyncRuntimeAwaitToken(%[[TOKEN]])71 async.runtime.await %0 : !async.token72 return73}74 75// CHECK-LABEL: @await_value76func.func @await_value() {77 // CHECK: %[[VALUE:.*]] = call @mlirAsyncRuntimeCreateValue78 %0 = async.runtime.create : !async.value<f32>79 // CHECK: call @mlirAsyncRuntimeAwaitValue(%[[VALUE]])80 async.runtime.await %0 : !async.value<f32>81 return82}83 84// CHECK-LABEL: @await_group85func.func @await_group() {86 %c = arith.constant 1 : index87 // CHECK: %[[GROUP:.*]] = call @mlirAsyncRuntimeCreateGroup88 %0 = async.runtime.create_group %c: !async.group89 // CHECK: call @mlirAsyncRuntimeAwaitAllInGroup(%[[GROUP]])90 async.runtime.await %0 : !async.group91 return92}93 94// CHECK-LABEL: @await_and_resume_token95func.func @await_and_resume_token() {96 %0 = async.coro.id97 // CHECK: %[[HDL:.*]] = llvm.intr.coro.begin98 %1 = async.coro.begin %099 // CHECK: %[[TOKEN:.*]] = call @mlirAsyncRuntimeCreateToken100 %2 = async.runtime.create : !async.token101 // CHECK: %[[RESUME:.*]] = llvm.mlir.addressof @__resume102 // CHECK: call @mlirAsyncRuntimeAwaitTokenAndExecute103 // CHECK-SAME: (%[[TOKEN]], %[[HDL]], %[[RESUME]])104 async.runtime.await_and_resume %2, %1 : !async.token105 return106}107 108// CHECK-LABEL: @await_and_resume_value109func.func @await_and_resume_value() {110 %0 = async.coro.id111 // CHECK: %[[HDL:.*]] = llvm.intr.coro.begin112 %1 = async.coro.begin %0113 // CHECK: %[[VALUE:.*]] = call @mlirAsyncRuntimeCreateValue114 %2 = async.runtime.create : !async.value<f32>115 // CHECK: %[[RESUME:.*]] = llvm.mlir.addressof @__resume116 // CHECK: call @mlirAsyncRuntimeAwaitValueAndExecute117 // CHECK-SAME: (%[[VALUE]], %[[HDL]], %[[RESUME]])118 async.runtime.await_and_resume %2, %1 : !async.value<f32>119 return120}121 122// CHECK-LABEL: @await_and_resume_group123func.func @await_and_resume_group() {124 %c = arith.constant 1 : index125 %0 = async.coro.id126 // CHECK: %[[HDL:.*]] = llvm.intr.coro.begin127 %1 = async.coro.begin %0128 // CHECK: %[[TOKEN:.*]] = call @mlirAsyncRuntimeCreateGroup129 %2 = async.runtime.create_group %c : !async.group130 // CHECK: %[[RESUME:.*]] = llvm.mlir.addressof @__resume131 // CHECK: call @mlirAsyncRuntimeAwaitAllInGroupAndExecute132 // CHECK-SAME: (%[[TOKEN]], %[[HDL]], %[[RESUME]])133 async.runtime.await_and_resume %2, %1 : !async.group134 return135}136 137// CHECK-LABEL: @resume138func.func @resume() {139 %0 = async.coro.id140 // CHECK: %[[HDL:.*]] = llvm.intr.coro.begin141 %1 = async.coro.begin %0142 // CHECK: %[[RESUME:.*]] = llvm.mlir.addressof @__resume143 // CHECK: call @mlirAsyncRuntimeExecute(%[[HDL]], %[[RESUME]])144 async.runtime.resume %1145 return146}147 148// CHECK-LABEL: @store149func.func @store() {150 // CHECK: %[[CST:.*]] = arith.constant 1.0151 %0 = arith.constant 1.0 : f32152 // CHECK: %[[VALUE:.*]] = call @mlirAsyncRuntimeCreateValue153 %1 = async.runtime.create : !async.value<f32>154 // CHECK: %[[P0:.*]] = call @mlirAsyncRuntimeGetValueStorage(%[[VALUE]])155 // CHECK: llvm.store %[[CST]], %[[P0]] : f32, !llvm.ptr156 async.runtime.store %0, %1 : !async.value<f32>157 return158}159 160// CHECK-LABEL: @load161func.func @load() -> f32 {162 // CHECK: %[[VALUE:.*]] = call @mlirAsyncRuntimeCreateValue163 %0 = async.runtime.create : !async.value<f32>164 // CHECK: %[[P0:.*]] = call @mlirAsyncRuntimeGetValueStorage(%[[VALUE]])165 // CHECK: %[[VALUE:.*]] = llvm.load %[[P0]] : !llvm.ptr -> f32166 %1 = async.runtime.load %0 : !async.value<f32>167 // CHECK: return %[[VALUE]] : f32168 return %1 : f32169}170 171// CHECK-LABEL: @add_token_to_group172func.func @add_token_to_group() {173 %c = arith.constant 1 : index174 // CHECK: %[[TOKEN:.*]] = call @mlirAsyncRuntimeCreateToken175 %0 = async.runtime.create : !async.token176 // CHECK: %[[GROUP:.*]] = call @mlirAsyncRuntimeCreateGroup177 %1 = async.runtime.create_group %c : !async.group178 // CHECK: call @mlirAsyncRuntimeAddTokenToGroup(%[[TOKEN]], %[[GROUP]])179 async.runtime.add_to_group %0, %1 : !async.token180 return181}182