Back to PBT run
test.patch
diff --git a/test/raise/spectriad-mlir-stage-04-v1.mlir b/test/raise/spectriad-mlir-stage-04-v1.mlir
new file mode 100644
--- /dev/null
+++ b/test/raise/spectriad-mlir-stage-04-v1.mlir
@@ -0,0 +1,61 @@
+// RUN: loom-raise-opt --loom-lower-for-to-graph --mlir-print-op-generic %s | FileCheck %s
+
+module {
+func.func @helper_double(%a: i32) -> i32 {
+ %d = arith.addi %a, %a : i32
+ return %d : i32
+}
+
+
+func.func @host_container(%target: memref<4xi32>, %value: i32) {
+ return
+}
+
+dataflow.thread private @thread_0 domain(#dataflow.thread_domain<dense>)(%mem: memref<4xi32>, %val: i32, %flag: i1) ctrl (%start: none) {
+ %r0 = "loom.spatial_region"(%val, %flag)
+ <{operandSegmentSizes = array<i32: 2, 0, 0, 0>,
+ resultSegmentSizes = array<i32: 1, 0>}> ({
+ ^bb0(%a: i32, %c: i1):
+ %sel = scf.if %c -> (i32) {
+ %t = arith.addi %a, %a : i32
+ scf.yield %t : i32
+ } else {
+ %e = arith.muli %a, %a : i32
+ scf.yield %e : i32
+ }
+ "loom.spatial_yield"(%sel)
+ <{operandSegmentSizes = array<i32: 1, 0>}> : (i32) -> ()
+ }) {graph_name = "graph_0", source_maps = []} : (i32, i1) -> i32
+ dataflow.thread.yield
+}
+
+}
+
+// CHECK: "builtin.module"() ({
+// CHECK-NEXT: "func.func"() <{function_type = (i32) -> i32, sym_name = "helper_double"}> ({
+// CHECK-NEXT: ^bb0(%arg9: i32):
+// CHECK-NEXT: %8 = "arith.addi"(%arg9, %arg9) <{overflowFlags = #arith.overflow<none>}> : (i32, i32) -> i32
+// CHECK-NEXT: "func.return"(%8) : (i32) -> ()
+// CHECK-NEXT: }) : () -> ()
+// CHECK-NEXT: "func.func"() <{function_type = (memref<4xi32>, i32) -> (), sym_name = "host_container"}> ({
+// CHECK-NEXT: ^bb0(%arg7: memref<4xi32>, %arg8: i32):
+// CHECK-NEXT: "func.return"() : () -> ()
+// CHECK-NEXT: }) : () -> ()
+// CHECK-NEXT: "dataflow.thread"() <{domain = #dataflow.thread_domain<dense>, function_type = (memref<4xi32>, i32, i1) -> (), sym_name = "thread_0", sym_visibility = "private"}> ({
+// CHECK-NEXT: ^bb0(%arg3: memref<4xi32>, %arg4: i32, %arg5: i1, %arg6: none):
+// CHECK-NEXT: %7:2 = "dataflow.graph.launch"(%arg6, %arg4, %arg5) <{callee = @graph_0, operandSegmentSizes = array<i32: 1, 2, 0, 0, 0>, resultSegmentSizes = array<i32: 1, 0, 1>, source_maps = []}> : (none, i32, i1) -> (i32, none)
+// CHECK-NEXT: "dataflow.thread.yield"(%7#1) : (none) -> ()
+// CHECK-NEXT: }) : () -> ()
+// CHECK-NEXT: "dataflow.graph"() <{function_type = (i32, i1) -> i32, input_segments = array<i32: 2, 0, 0>, result_segments = array<i32: 1, 0, 0>, sym_name = "graph_0", sym_visibility = "private"}> ({
+// CHECK-NEXT: ^bb0(%arg0: none, %arg1: i32, %arg2: i1):
+// CHECK-NEXT: %0:2 = "dataflow.demux"(%arg2, %arg0) : (i1, none) -> (none, none)
+// CHECK-NEXT: %1:2 = "dataflow.demux"(%arg2, %arg1) : (i1, i32) -> (i32, i32)
+// CHECK-NEXT: %2 = "arith.muli"(%1#0, %1#0) <{overflowFlags = #arith.overflow<none>}> : (i32, i32) -> i32
+// CHECK-NEXT: %3 = "arith.addi"(%1#1, %1#1) <{overflowFlags = #arith.overflow<none>}> : (i32, i32) -> i32
+// CHECK-NEXT: %4 = "dataflow.mux"(%arg2, %2, %3) : (i1, i32, i32) -> i32
+// CHECK-NEXT: %5 = "dataflow.mux"(%arg2, %0#0, %0#1) : (i1, none, none) -> none
+// CHECK-NEXT: %6:2 = "dataflow.sync"(%5, %4) : (none, i32) -> (none, i32)
+// CHECK-NEXT: "dataflow.graph.return"(%6#1, %6#0) <{operandSegmentSizes = array<i32: 1, 0, 0, 1>}> : (i32, none) -> ()
+// CHECK-NEXT: }) : () -> ()
+// CHECK-NEXT: }) : () -> ()
+// CHECK-EMPTY: