Back to PBT run
test.mlir
// RUN: loom-raise-opt --loom-lower-forall-to-thread %s | FileCheck %s
dataflow.thread private @t_0 domain(#dataflow.thread_domain<dynamic_work, work_item_arg = 0>)(%arg_0: index, %arg_1: memref<?xf32>, %arg_2: i32) ctrl (%thread_ctrl: none) {
dataflow.thread.yield
}
dataflow.thread private @t_1 domain(#dataflow.thread_domain<dense>)() ctrl (%thread_ctrl: none) iv (%coord_0: index, %coord_1: index) {
dataflow.thread.yield %thread_ctrl : none
}
func.func @host(%m_ref: memref<?xf32>) {
%c_i32 = arith.constant 1 : i32
%c_idx = arith.constant 4 : index
%token_0 = dataflow.thread.launch @t_0(%c_idx, %m_ref, %c_i32) : (index, memref<?xf32>, i32) -> !dataflow.thread_token
dataflow.thread.wait %token_0 : !dataflow.thread_token
%token_1 = dataflow.thread.launch @t_1() grid(%c_idx, %c_idx) : () -> !dataflow.thread_token
return
}
// CHECK: module {
// CHECK-NEXT: dataflow.thread private @t_0 domain(#dataflow.thread_domain<dynamic_work, work_item_arg = 0>)(%arg0: index, %arg1: memref<?xf32>, %arg2: i32) ctrl (%arg3: none) {
// CHECK-NEXT: dataflow.thread.yield
// CHECK-NEXT: }
// CHECK-NEXT: dataflow.thread private @t_1 domain(#dataflow.thread_domain<dense>)() ctrl (%arg0: none) iv (%arg1: index, %arg2: index) {
// CHECK-NEXT: dataflow.thread.yield %arg0 : none
// CHECK-NEXT: }
// CHECK-NEXT: func.func @host(%arg0: memref<?xf32>) {
// CHECK-NEXT: %c1_i32 = arith.constant 1 : i32
// CHECK-NEXT: %c4 = arith.constant 4 : index
// CHECK-NEXT: %0 = dataflow.thread.launch @t_0(%c4, %arg0, %c1_i32) : (index, memref<?xf32>, i32) -> !dataflow.thread_token
// CHECK-NEXT: dataflow.thread.wait %0 : !dataflow.thread_token
// CHECK-NEXT: %1 = dataflow.thread.launch @t_1() grid(%c4, %c4) : () -> !dataflow.thread_token
// CHECK-NEXT: return
// CHECK-NEXT: }
// CHECK-NEXT: }
// CHECK-EMPTY: