brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.1 KiB · 4077edc Raw
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