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: