| // RUN: mlir-opt %s -async-runtime-ref-counting-opt | FileCheck %s | |
| func.func private @consume_token(%arg0: !async.token) | |
| // CHECK-LABEL: @cancellable_operations_0 | |
| func.func @cancellable_operations_0(%arg0: !async.token) { | |
| // CHECK-NOT: async.runtime.add_ref | |
| // CHECK-NOT: async.runtime.drop_ref | |
| async.runtime.add_ref %arg0 {count = 1 : i64} : !async.token | |
| async.runtime.drop_ref %arg0 {count = 1 : i64} : !async.token | |
| // CHECK: return | |
| return | |
| } | |
| // CHECK-LABEL: @cancellable_operations_1 | |
| func.func @cancellable_operations_1(%arg0: !async.token) { | |
| // CHECK-NOT: async.runtime.add_ref | |
| async.runtime.add_ref %arg0 {count = 1 : i64} : !async.token | |
| // CHECK: call @consume_toke | |
| call @consume_token(%arg0): (!async.token) -> () | |
| // CHECK-NOT: async.runtime.drop_ref | |
| async.runtime.drop_ref %arg0 {count = 1 : i64} : !async.token | |
| // CHECK: return | |
| return | |
| } | |
| // CHECK-LABEL: @cancellable_operations_2 | |
| func.func @cancellable_operations_2(%arg0: !async.token) { | |
| // CHECK: async.runtime.await | |
| // CHECK-NEXT: async.runtime.await | |
| // CHECK-NEXT: async.runtime.await | |
| // CHECK-NEXT: return | |
| async.runtime.add_ref %arg0 {count = 1 : i64} : !async.token | |
| async.runtime.await %arg0 : !async.token | |
| async.runtime.drop_ref %arg0 {count = 1 : i64} : !async.token | |
| async.runtime.await %arg0 : !async.token | |
| async.runtime.add_ref %arg0 {count = 1 : i64} : !async.token | |
| async.runtime.await %arg0 : !async.token | |
| async.runtime.drop_ref %arg0 {count = 1 : i64} : !async.token | |
| return | |
| } | |
| // CHECK-LABEL: @cancellable_operations_3 | |
| func.func @cancellable_operations_3(%arg0: !async.token) { | |
| // CHECK-NOT: add_ref | |
| async.runtime.add_ref %arg0 {count = 1 : i64} : !async.token | |
| // CHECK: call @consume_toke | |
| call @consume_token(%arg0): (!async.token) -> () | |
| // CHECK-NOT: async.runtime.drop_ref | |
| async.runtime.drop_ref %arg0 {count = 1 : i64} : !async.token | |
| // CHECK: async.runtime.await | |
| async.runtime.await %arg0 : !async.token | |
| // CHECK: return | |
| return | |
| } | |
| // CHECK-LABEL: @not_cancellable_operations_0 | |
| func.func @not_cancellable_operations_0(%arg0: !async.token) { | |
| // CHECK: add_ref | |
| async.runtime.add_ref %arg0 {count = 1 : i64} : !async.token | |
| // CHECK: call @consume_toke | |
| call @consume_token(%arg0): (!async.token) -> () | |
| // CHECK: async.runtime.await | |
| async.runtime.await %arg0 : !async.token | |
| // CHECK: async.runtime.drop_ref | |
| async.runtime.drop_ref %arg0 {count = 1 : i64} : !async.token | |
| // CHECK: return | |
| return | |
| } |