1// RUN: mlir-opt %s | FileCheck %s --dump-input=always 2 3// CHECK-LABEL: @coro_id 4func.func @coro_id() -> !async.coro.id { 5 // CHECK: %0 = async.coro.id 6 // CHECK: return %0 : !async.coro.id 7 %0 = async.coro.id 8 return %0 : !async.coro.id 9} 10 11// CHECK-LABEL: @coro_handle 12func.func @coro_handle(%arg0: !async.coro.id) -> !async.coro.handle { 13 // CHECK: %0 = async.coro.begin %arg0 14 // CHECK: return %0 : !async.coro.handle 15 %0 = async.coro.begin %arg0 16 return %0 : !async.coro.handle 17} 18 19// CHECK-LABEL: @coro_free 20func.func @coro_free(%arg0: !async.coro.id, %arg1: !async.coro.handle) { 21 // CHECK: async.coro.free %arg0, %arg1 22 async.coro.free %arg0, %arg1 23 return 24} 25 26// CHECK-LABEL: @coro_end 27func.func @coro_end(%arg0: !async.coro.handle) { 28 // CHECK: async.coro.end %arg0 29 async.coro.end %arg0 30 return 31} 32 33// CHECK-LABEL: @coro_save 34func.func @coro_save(%arg0: !async.coro.handle) -> !async.coro.state { 35 // CHECK: %0 = async.coro.save %arg0 36 %0 = async.coro.save %arg0 37 // CHECK: return %0 : !async.coro.state 38 return %0 : !async.coro.state 39} 40 41// CHECK-LABEL: @coro_suspend 42func.func @coro_suspend(%arg0: !async.coro.state) { 43 // CHECK: async.coro.suspend %arg0 44 // CHECK-SAME: ^[[SUSPEND:.*]], ^[[RESUME:.*]], ^[[CLEANUP:.*]] 45 async.coro.suspend %arg0, ^suspend, ^resume, ^cleanup 46^resume: 47 // CHECK: ^[[RESUME]] 48 // CHECK: return {coro.resume} 49 return { coro.resume } 50^cleanup: 51 // CHECK: ^[[CLEANUP]] 52 // CHECK: return {coro.cleanup} 53 return { coro.cleanup } 54^suspend: 55 // CHECK: ^[[SUSPEND]] 56 // CHECK: return {coro.suspend} 57 return { coro.suspend } 58} 59