Back to PBT run
test.mlir
// RUN: loom-raise-opt --loom-lower-forall-to-thread --mlir-print-op-generic %s | FileCheck %s
dataflow.thread private @thread_0 domain(#dataflow.thread_domain<dense>)(%buf: memref<8xi32>) ctrl (%thread_ctrl: none) iv (%coord_0: index, %coord_1: index) {
scf.forall (%lane) in (8) {
}
dataflow.thread.yield %thread_ctrl : none
}
func.func @host_0() {
%buf = memref.alloc() : memref<8xi32>
%g0 = arith.constant 4 : index
%g1 = arith.constant 4 : index
%token = dataflow.thread.launch @thread_0(%buf) grid(%g0, %g1) : (memref<8xi32>) -> !dataflow.thread_token
return
}
// CHECK: "builtin.module"() ({
// CHECK-NEXT: "dataflow.thread"() <{domain = #dataflow.thread_domain<dense>, function_type = (memref<8xi32>) -> (), sym_name = "thread_0", sym_visibility = "private"}> ({
// CHECK-NEXT: ^bb0(%arg0: memref<8xi32>, %arg1: none, %arg2: index, %arg3: index):
// CHECK-NEXT: "scf.forall"() <{operandSegmentSizes = array<i32: 0, 0, 0, 0>, staticLowerBound = array<i64: 0>, staticStep = array<i64: 1>, staticUpperBound = array<i64: 8>}> ({
// CHECK-NEXT: ^bb0(%arg4: index):
// CHECK-NEXT: "scf.forall.in_parallel"() ({
// CHECK-NEXT: ^bb0:
// CHECK-NEXT: }) : () -> ()
// CHECK-NEXT: }) : () -> ()
// CHECK-NEXT: "dataflow.thread.yield"(%arg1) : (none) -> ()
// CHECK-NEXT: }) : () -> ()
// CHECK-NEXT: "func.func"() <{function_type = () -> (), sym_name = "host_0"}> ({
// CHECK-NEXT: %0 = "memref.alloc"() <{operandSegmentSizes = array<i32: 0, 0>}> : () -> memref<8xi32>
// CHECK-NEXT: %1 = "arith.constant"() <{value = 4 : index}> : () -> index
// CHECK-NEXT: %2 = "arith.constant"() <{value = 4 : index}> : () -> index
// CHECK-NEXT: %3 = "dataflow.thread.launch"(%0, %1, %2) <{callee = @thread_0, operandSegmentSizes = array<i32: 1, 2, 0>}> : (memref<8xi32>, index, index) -> !dataflow.thread_token
// CHECK-NEXT: "func.return"() : () -> ()
// CHECK-NEXT: }) : () -> ()
// CHECK-NEXT: }) : () -> ()
// CHECK-EMPTY: