brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.2 KiB · 36f40d5 Raw
170 lines · plain
1// RUN: mlir-opt %s | FileCheck %s2 3// CHECK-LABEL: @identity_token4func.func @identity_token(%arg0: !async.token) -> !async.token {5  // CHECK: return %arg0 : !async.token6  return %arg0 : !async.token7}8 9// CHECK-LABEL: @identity_value10func.func @identity_value(%arg0 : !async.value<f32>) -> !async.value<f32> {11  // CHECK: return %arg0 : !async.value<f32>12  return %arg0 : !async.value<f32>13}14 15// CHECK-LABEL: @empty_async_execute16func.func @empty_async_execute() -> !async.token {17  // CHECK: async.execute18  %token = async.execute {19    async.yield20  }21 22  // CHECK: return %token : !async.token23  return %token : !async.token24}25 26// CHECK-LABEL: @return_async_value27func.func @return_async_value() -> !async.value<f32> {28  // CHECK: async.execute -> !async.value<f32>29  %token, %bodyResults = async.execute -> !async.value<f32> {30    %cst = arith.constant 1.000000e+00 : f3231    async.yield %cst : f3232  }33 34  // CHECK: return %bodyResults : !async.value<f32>35  return %bodyResults : !async.value<f32>36}37 38// CHECK-LABEL: @return_captured_value39func.func @return_captured_value() -> !async.token {40  %cst = arith.constant 1.000000e+00 : f3241  // CHECK: async.execute -> !async.value<f32>42  %token, %results = async.execute -> !async.value<f32> {43    async.yield %cst : f3244  }45 46  // CHECK: return %token : !async.token47  return %token : !async.token48}49 50// CHECK-LABEL: @return_async_values51func.func @return_async_values() -> (!async.value<f32>, !async.value<f32>) {52  %token, %bodyResults:2 = async.execute -> (!async.value<f32>, !async.value<f32>) {53    %cst1 = arith.constant 1.000000e+00 : f3254    %cst2 = arith.constant 2.000000e+00 : f3255    async.yield %cst1, %cst2 : f32, f3256  }57 58  // CHECK: return %bodyResults#0, %bodyResults#1 : !async.value<f32>, !async.value<f32>59  return %bodyResults#0, %bodyResults#1 : !async.value<f32>, !async.value<f32>60}61 62// CHECK-LABEL: @async_token_dependencies63func.func @async_token_dependencies(%arg0: !async.token) -> !async.token {64  // CHECK: async.execute [%arg0]65  %token = async.execute [%arg0] {66    async.yield67  }68 69  // CHECK: return %token : !async.token70  return %token : !async.token71}72 73// CHECK-LABEL: @async_value_operands74func.func @async_value_operands(%arg0: !async.value<f32>) -> !async.token {75  // CHECK: async.execute (%arg0 as %arg1: !async.value<f32>) -> !async.value<f32>76  %token, %results = async.execute (%arg0 as %arg1: !async.value<f32>) -> !async.value<f32> {77    async.yield %arg1 : f3278  }79 80  // CHECK: return %token : !async.token81  return %token : !async.token82}83 84// CHECK-LABEL: @async_token_and_value_operands85func.func @async_token_and_value_operands(%arg0: !async.token, %arg1: !async.value<f32>) -> !async.token {86  // CHECK: async.execute [%arg0] (%arg1 as %arg2: !async.value<f32>) -> !async.value<f32>87  %token, %results = async.execute [%arg0] (%arg1 as %arg2: !async.value<f32>) -> !async.value<f32> {88    async.yield %arg2 : f3289  }90 91  // CHECK: return %token : !async.token92  return %token : !async.token93}94 95// CHECK-LABEL: @empty_tokens_or_values_operands96func.func @empty_tokens_or_values_operands() {97  // CHECK: async.execute {98  %token0 = async.execute [] () -> () { async.yield }99  // CHECK: async.execute {100  %token1 = async.execute () -> () { async.yield }101  // CHECK: async.execute {102  %token2 = async.execute -> () { async.yield }103  // CHECK: async.execute {104  %token3 = async.execute () { async.yield }105  // CHECK: async.execute {106  %token4 = async.execute [] { async.yield }107  return108}109 110// CHECK-LABEL: @await_token111func.func @await_token(%arg0: !async.token) {112  // CHECK: async.await %arg0113  async.await %arg0 : !async.token114  return115}116 117// CHECK-LABEL: @await_value118func.func @await_value(%arg0: !async.value<f32>) -> f32 {119  // CHECK: async.await %arg0120  %0 = async.await %arg0 : !async.value<f32>121  return %0 : f32122}123 124// CHECK-LABEL: @create_group_and_await_all125func.func @create_group_and_await_all(%arg0: !async.token,126                                 %arg1: !async.value<f32>) -> index {127  %c = arith.constant 2 : index128  %0 = async.create_group %c : !async.group129 130  // CHECK: async.add_to_group %arg0131  // CHECK: async.add_to_group %arg1132  %1 = async.add_to_group %arg0, %0 : !async.token133  %2 = async.add_to_group %arg1, %0 : !async.value<f32>134  async.await_all %0135 136  %3 = arith.addi %1, %2 : index137  return %3 : index138}139 140// CHECK-LABEL: @async_func_return_token141async.func @async_func_return_token() -> !async.token {142  // CHECK: return143  return144}145 146// CHECK-LABEL: @async_func_return_value147async.func @async_func_return_value() -> !async.value<i32> {148  %0 = arith.constant 42 : i32149  // CHECK: return %[[value:.*]] : i32150  return %0 : i32151}152 153// CHECK-LABEL: @async_func_return_optional_token154async.func @async_func_return_optional_token() -> (!async.token, !async.value<i32>) {155  %0 = arith.constant 42 : i32156  // CHECK: return %[[value:.*]] : i32157  return %0 : i32158}159 160// CHECK-LABEL: @async_call161func.func @async_call() {162  // CHECK: async.call @async_func_return_token163  // CHECK: async.call @async_func_return_value164  // CHECK: async.call @async_func_return_optional_token165  %0 = async.call @async_func_return_token() : () -> !async.token166  %1 = async.call @async_func_return_value() : () -> !async.value<i32>167  %2, %3 = async.call @async_func_return_optional_token() : () -> (!async.token, !async.value<i32>)168  return169}170