MS0V5 mlir-stage-06-v1 passing 964/1000
Baseline tests: Every tracked test file with a RUN line invoking loom-raise-opt (77 files); other executables and native unit tests excluded
| Source file | Baseline coverage | Baseline + input | Contributing input |
|---|---|---|---|
…/lib/Dataflow/IR/DataflowActorSemantics.cppMS0V | 1089/1621lines67.2% 747/1330branches56.2% | 1090/1621lines67.2%+1 751/1330branches56.5%+4 | +1 line · +4 branchesOpen PBT +1 line · +4 branchesOpen PBT |
1 newly covered line · 4 newly covered branches283 | |||
…/lib/Dataflow/IR/DataflowGraphCausality.cppMS0V | 169/189lines89.4% 79/98branches80.6% | 169/189lines89.4%+0 81/98branches82.7%+2 | |
2 newly covered branches25 | |||
…/lib/Dataflow/IR/DataflowGraphValidation.cppMS0V | 1033/1540lines67.1% 571/1056branches54.1% | 1041/1540lines67.6%+8 579/1056branches54.8%+8 | +8 lines · +8 branchesOpen PBT +8 lines · +8 branchesOpen PBT |
8 newly covered lines · 8 newly covered branches254 | |||
…/lib/Dataflow/IR/OperationSchema.cppMS0V | 274/716lines38.3% 127/350branches36.3% | 274/716lines38.3%+0 129/350branches36.9%+2 | +1 branchOpen PBT +1 branchOpen PBT |
2 newly covered branches728 | |||
…/lib/Frontend/Lowering/GraphParallelLowering.cppMS0V | 651/1243lines52.4% 284/786branches36.1% | 698/1243lines56.2%+47 316/786branches40.2%+32 | +5 lines · +5 branchesOpen PBT +5 lines · +5 branchesOpen PBT |
47 newly covered lines · 32 newly covered branches424 | |||
…/lib/Frontend/Lowering/LowerGraphConstantsPass.cppMS0V | 80/83lines96.4% 18/24branches75.0% | 80/83lines96.4%+0 19/24branches79.2%+1 | |
1 newly covered branch68 | |||
…/loom/include/Common/Artifact.hMS0V | 13/37lines35.1% 3/18branches16.7% | 13/37lines35.1%+0 3/18branches16.7%+0 | Open PBT |
…/include/Dataflow/IR/OperationSchema.hMS0V | 8/91lines8.8% 5/66branches7.6% | 8/91lines8.8%+0 5/66branches7.6%+0 | Open PBT |
…/include/Frontend/Lowering/StreamLoopAttrs.hMS0V | 31/41lines75.6% 10/14branches71.4% | 31/41lines75.6%+0 10/14branches71.4%+0 | Open PBT |
…/loom/lib/Common/DiagnosticVerbosity.cppMS0V | 12/41lines29.3% 1/28branches3.6% | 12/41lines29.3%+0 1/28branches3.6%+0 | Open PBT |
…/loom/lib/Common/IndexWidth.cppMS0V | 63/84lines75.0% 28/42branches66.7% | 63/84lines75.0%+0 28/42branches66.7%+0 | Open PBT |
…/loom/lib/Common/InvocationDiagnosticLog.cppMS0V | 6/100lines6.0% 1/70branches1.4% | 6/100lines6.0%+0 1/70branches1.4%+0 | Open PBT |
…/lib/Dataflow/IR/DataflowChannelOps.cppMS0V | 59/88lines67.0% 13/38branches34.2% | 59/88lines67.0%+0 13/38branches34.2%+0 | Open PBT |
…/lib/Dataflow/IR/DataflowDialect.cppMS0V | 22/32lines68.8% 4/10branches40.0% | 22/32lines68.8%+0 4/10branches40.0%+0 | Open PBT |
…/lib/Dataflow/IR/DataflowFunctionLikeOps.cppMS0V | 693/1097lines63.2% 264/592branches44.6% | 693/1097lines63.2%+0 264/592branches44.6%+0 | Open PBT |
…/lib/Dataflow/IR/DataflowMemoryContracts.cppMS0V | 198/371lines53.4% 98/218branches45.0% | 198/371lines53.4%+0 98/218branches45.0%+0 | Open PBT |
…/lib/Dataflow/IR/DataflowOps.cppMS0V | 270/410lines65.9% 103/228branches45.2% | 270/410lines65.9%+0 103/228branches45.2%+0 | Open PBT |
…/lib/Dataflow/IR/DataflowProgramValidation.cppMS0V | 367/502lines73.1% 156/276branches56.5% | 367/502lines73.1%+0 156/276branches56.5%+0 | Open PBT |
…/lib/Dataflow/IR/DataflowSyncRendezvous.cppMS0V | 21/21lines100.0% 6/12branches50.0% | 21/21lines100.0%+0 6/12branches50.0%+0 | Open PBT |
…/lib/Dataflow/IR/DataflowThreadCompletion.cppMS0V | 288/361lines79.8% 148/218branches67.9% | 288/361lines79.8%+0 148/218branches67.9%+0 | Open PBT |
…/lib/Dataflow/IR/DataflowVectorSemantics.cppMS0V | 81/121lines66.9% 53/106branches50.0% | 81/121lines66.9%+0 53/106branches50.0%+0 | Open PBT |
…/lib/Dataflow/IR/OperationSchemaCodecInternal.hMS0V | 28/120lines23.3% 4/44branches9.1% | 28/120lines23.3%+0 4/44branches9.1%+0 | Open PBT |
…/lib/Dataflow/IR/OperationSchemaTypeCodec.cppMS0V | 85/516lines16.5% 55/374branches14.7% | 85/516lines16.5%+0 55/374branches14.7%+0 | Open PBT |
…/lib/Dataflow/Transforms/DataflowRewritePass.cppMS0V | 338/559lines60.5% 172/340branches50.6% | 338/559lines60.5%+0 172/340branches50.6%+0 | Open PBT |
…/lib/Frontend/Analysis/MemoryProvenance.cppMS0V | 153/317lines48.3% 80/326branches24.5% | 153/317lines48.3%+0 80/326branches24.5%+0 | Open PBT |
…/lib/Frontend/IR/LoomDialect.cppMS0V | 6/6lines100.0% branchesnot measured | 6/6lines100.0%+0 branchesnot measured | Open PBT |
…/lib/Frontend/IR/LoomOps.cppMS0V | 120/184lines65.2% 71/112branches63.4% | 120/184lines65.2%+0 71/112branches63.4%+0 | Open PBT |
…/lib/Frontend/Lowering/ExactMemRefLayout.cppMS0V | 61/143lines42.7% 26/80branches32.5% | 61/143lines42.7%+0 26/80branches32.5%+0 | Open PBT |
…/lib/Frontend/Lowering/ExpandGraphMemrefCopyPass.cppMS0V | 79/90lines87.8% 20/22branches90.9% | 79/90lines87.8%+0 20/22branches90.9%+0 | Open PBT |
…/lib/Frontend/Lowering/GraphIndexLowering.cppMS0V | 260/288lines90.3% 129/168branches76.8% | 260/288lines90.3%+0 129/168branches76.8%+0 | Open PBT |
…/lib/Frontend/Lowering/GraphRegionAdmission.cppMS0V | 58/110lines52.7% 29/92branches31.5% | 58/110lines52.7%+0 29/92branches31.5%+0 | Open PBT |
…/lib/Frontend/Lowering/GraphRegionLowering.cppMS0V | 1416/1626lines87.1% 532/680branches78.2% | 1416/1626lines87.1%+0 532/680branches78.2%+0 | Open PBT |
…/lib/Frontend/Lowering/GraphStreamBoundaryLowering.cppMS0V | 934/1072lines87.1% 299/432branches69.2% | 934/1072lines87.1%+0 299/432branches69.2%+0 | Open PBT |
…/lib/Frontend/Lowering/GraphStreamBoundaryLowering.hMS0V | 4/4lines100.0% 4/4branches100.0% | 4/4lines100.0%+0 4/4branches100.0%+0 | Open PBT |
…/lib/Frontend/Lowering/LowerForToGraphPass.cppMS0V | 1033/1240lines83.3% 374/540branches69.3% | 1033/1240lines83.3%+0 374/540branches69.3%+0 | Open PBT |
…/lib/Frontend/Lowering/LowerForallToThreadPass.cppMS0V | 30/34lines88.2% 2/4branches50.0% | 30/34lines88.2%+0 2/4branches50.0%+0 | Open PBT |
…/lib/Frontend/Lowering/LowerGraphMemoryPass.cppMS0V | 525/841lines62.4% 208/400branches52.0% | 525/841lines62.4%+0 208/400branches52.0%+0 | Open PBT |
…/lib/Frontend/Lowering/Pipeline.cppMS0V | 18/21lines85.7% branchesnot measured | 18/21lines85.7%+0 branchesnot measured | Open PBT |
…/lib/Frontend/Lowering/RankedMemRefLowering.cppMS0V | 60/133lines45.1% 27/94branches28.7% | 60/133lines45.1%+0 27/94branches28.7%+0 | Open PBT |
…/lib/Frontend/Raising/DeduplicateSCFWhileStatePass.cppMS0V | 13/135lines9.6% 0/60branches0.0% | 13/135lines9.6%+0 0/60branches0.0%+0 | Open PBT |
…/lib/Frontend/Raising/LLVMArithToArithPass.cppMS0V | 300/319lines94.0% 94/116branches81.0% | 300/319lines94.0%+0 94/116branches81.0%+0 | Open PBT |
…/lib/Frontend/Raising/LLVMCfToCfPass.cppMS0V | 77/80lines96.2% 8/8branches100.0% | 77/80lines96.2%+0 8/8branches100.0%+0 | Open PBT |
…/lib/Frontend/Raising/LiftCFToSCFPass.cppMS0V | 616/694lines88.8% 293/386branches75.9% | 616/694lines88.8%+0 293/386branches75.9%+0 | Open PBT |
…/lib/Frontend/Raising/MaterializeFMulAddPass.cppMS0V | 70/106lines66.0% 11/26branches42.3% | 70/106lines66.0%+0 11/26branches42.3%+0 | Open PBT |
…/lib/Frontend/Raising/NormalizeLiftedSCFExitPass.cppMS0V | 232/250lines92.8% 120/182branches65.9% | 232/250lines92.8%+0 120/182branches65.9%+0 | Open PBT |
…/lib/Frontend/Raising/Pipeline.cppMS0V | 10/19lines52.6% branchesnot measured | 10/19lines52.6%+0 branchesnot measured | Open PBT |
…/lib/Frontend/Raising/SCFForToForallPass.cppMS0V | 494/738lines66.9% 241/458branches52.6% | 494/738lines66.9%+0 241/458branches52.6%+0 | Open PBT |
…/lib/Frontend/Raising/SCFWhileToForPass.cppMS0V | 164/176lines93.2% 70/94branches74.5% | 164/176lines93.2%+0 70/94branches74.5%+0 | Open PBT |
…/loom/tools/loom-raise-opt/loom-raise-opt.cppMS0V | 12/12lines100.0% branchesnot measured | 12/12lines100.0%+0 branchesnot measured | Open PBT |
Output is an initial Canonical Dataflow Program: module-level llvm.func
symbols for imported LLVM callables, any genuinely native func.func helpers,
module-level
dataflow.thread definitions reached by zero or more
dataflow.thread.launch ops; and module-level dataflow.graph
definitions reached by zero or more dataflow.graph.launch ops
inside thread definitions. No scf.* op is left inside any
dataflow.graph definition's body after successful graph-region lowering.
dataflow.thread private @thread_0 domain(#dataflow.thread_domain<dense>)( %limit: index, %memory: memref<?xindex>) ctrl (%ctrl: none) { "loom.spatial_region"(%limit, %memory) <{operandSegmentSizes = array<i32: 1, 0, 1, 0>, resultSegmentSizes = array<i32: 0, 0>}> ({ ^bb0(%lim: index, %target: memref<?xindex>): %zero = arith.constant 0 : index %one = arith.constant 1 : index %two = arith.constant 2 : index scf.for %iv0 = %zero to %two step %one { %ld1 = memref.load %target[%zero] : memref<?xindex> %ad1 = arith.addi %ld1, %one : index memref.store %ad1, %target[%zero] : memref<?xindex> } %wr2 = scf.while (%wa2 = %zero) : (index) -> index { %wc2 = arith.cmpi ult, %wa2, %two : index scf.condition(%wc2) %wa2 : index } do { ^bb0(%wb2: index): memref.store %one, %target[%zero] : memref<?xindex> %wn2 = arith.addi %wb2, %one : index scf.yield %wn2 : index } "loom.spatial_yield"() <{operandSegmentSizes = array<i32: 0, 0>}> : () -> () }) {graph_name = "g_thread_0", source_maps = []} : (index, memref<?xindex>) -> () dataflow.thread.yield } dataflow.thread private @thread_1 domain(#dataflow.thread_domain<dense>)( %limit: index, %memory: memref<?xindex>) ctrl (%ctrl: none) { dataflow.thread.yield }
dataflow.thread private @thread_0 domain(#dataflow.thread_domain<dense>)( %limit: index, %memory: memref<?xindex>) ctrl (%ctrl: none) { "loom.spatial_region"(%limit, %memory) <{operandSegmentSizes = array<i32: 1, 0, 1, 0>, resultSegmentSizes = array<i32: 0, 0>}> ({ ^bb0(%lim: index, %target: memref<?xindex>): %zero = arith.constant 0 : index %one = arith.constant 1 : index %two = arith.constant 2 : index %flag = arith.cmpi ult, %zero, %two : index scf.for %iv0 = %zero to %two step %one { %ld1 = memref.load %target[%zero] : memref<?xindex> %ad1 = arith.addi %ld1, %one : index memref.store %ad1, %target[%zero] : memref<?xindex> } %wr2 = scf.while (%wa2 = %zero) : (index) -> index { %wc2 = arith.cmpi ult, %wa2, %two : index scf.condition(%wc2) %wa2 : index } do { ^bb0(%wb2: index): memref.store %one, %target[%zero] : memref<?xindex> %wn2 = arith.addi %wb2, %one : index scf.yield %wn2 : index } "loom.spatial_yield"() <{operandSegmentSizes = array<i32: 0, 0>}> : () -> () }) {graph_name = "g_thread_0", source_maps = []} : (index, memref<?xindex>) -> () dataflow.thread.yield } dataflow.thread private @thread_1 domain(#dataflow.thread_domain<dense>)( %limit: index, %memory: memref<?xindex>) ctrl (%ctrl: none) { %izero = arith.constant 0 : index %ione = arith.constant 1 : index memref.store %ione, %memory[%izero] : memref<?xindex> dataflow.thread.yield }
The recursive lowering contract accepts arbitrary nesting of
scf.if, source-sequential scf.for, scf.while, and fixed-width
graph-owned scf.parallel or effect-form scf.forall. A graph-owned parallel
op must have a compile-time fixed domain, and all facts needed to establish
ownership, width, and cross-lane legality must be present in the current
Structured Program Candidate's semantic IR and resolved lowering config.
Input to graph extraction is an MLIR module containing module-scope
dataflow.thread definitions. Every selected SpatialCore candidate is already
materialized as a loom.spatial_region inside exactly one thread.
This section records Dataflow templates for SCF boundaries. Recursive lowering
applies the same transfer to scf.if, normalized scf.index_switch,
source-sequential scf.for, scf.while, and fixed-domain
effect-form scf.parallel / scf.forall.
Dynamic-width, resource-mapped, and result or reduction forms fail before any graph is mutated; the graph owner does not infer ownership, serialization, unrolling, or reduction order.
The Structured Transfer Algebra defines graph-owned parallel composition only after the Structured Program Candidate has materialized its P[] ownership and schedule form in semantic SCF. That fixed-domain SCF is the transient input representation for mechanical lowering.
Between Parts 2 and 3, SCF optimization and DSE produce the selected Structured Program Candidate. That domain owns all performance-distinct structured choices.
candidate.pg// Structured Program Candidate inputs for loom-lower-scf-to-dfg. // A module holds ownership-neutral llvm.func / func.func callables plus // module-scope dataflow.thread definitions. A selected SpatialCore candidate // is already materialized as an explicit loom.spatial_region inside exactly // one thread; its body is fixed-domain semantic SCF with arbitrary nesting of // scf.if, source-sequential scf.for, scf.while, and fixed-width graph-owned // scf.parallel / effect-form scf.forall. start: {new V = 0; new T = 0; new N_THREADS = random.randint(1, 2); new WITH_CALLABLES = random.choice([0, 1])} callables threads; // Imported Host / InstructionCore code stays in its llvm.func envelope; // genuinely native func.func callables may coexist. Both are // ownership-neutral and must not authorize graph creation. callables: (WITH_CALLABLES == 0) '' | (WITH_CALLABLES == 1) 'llvm.func @imported_callable(i64) -> i64\n' 'func.func private @native_callable(%arg_a: i32) -> i32 {\n' ' return %arg_a : i32\n' '}\n'; threads: (T < N_THREADS) thread {T += 1} threads | (T == N_THREADS) ''; thread: {new SPATIAL = random.choice([0, 1, 1, 1])} 'dataflow.thread private @' thread_name ' domain(#dataflow.thread_domain<dense>)(\n' ' %limit: index, %memory: memref<?xindex>) ctrl (%ctrl: none) {\n' thread_body ' dataflow.thread.yield\n' '}\n'; thread_name: ['thread_' + str(T)]; graph_name: ['g_thread_' + str(T)]; thread_body: (SPATIAL == 0) instruction_body | (SPATIAL == 1) spatial_body; // InstructionCore-resident thread body code outside any spatial boundary. instruction_body: ' %izero = arith.constant 0 : index\n' ' %ione = arith.constant 1 : index\n' ' memref.store %ione, %memory[%izero] : memref<?xindex>\n'; // The explicit selected SpatialCore candidate. loom.spatial_region is // IsolatedFromAbove, so every value used inside comes from its entry block // arguments or from constants defined in the body. spatial_body: {new DEPTH = random.randint(1, 3); new IDX = '%zero'} ' "loom.spatial_region"(%limit, %memory)\n' ' <{operandSegmentSizes = array<i32: 1, 0, 1, 0>,\n' ' resultSegmentSizes = array<i32: 0, 0>}> ({\n' ' ^bb0(%lim: index, %target: memref<?xindex>):\n' ' %zero = arith.constant 0 : index\n' ' %one = arith.constant 1 : index\n' ' %two = arith.constant 2 : index\n' ' %flag = arith.cmpi ult, %zero, %two : index\n' block ' "loom.spatial_yield"()\n' ' <{operandSegmentSizes = array<i32: 0, 0>}> : () -> ()\n' ' }) {graph_name = "' graph_name '", source_maps = []} :\n' ' (index, memref<?xindex>) -> ()\n'; block: {new STMT_N = random.randint(1, 2); new K = 0} stmts; stmts: (K < STMT_N) stmt {K += 1} stmts | (K == STMT_N) ''; stmt: (DEPTH > 0) for_stmt | (DEPTH > 0) if_stmt | (DEPTH > 0) parallel_stmt | (DEPTH > 0) forall_stmt | (DEPTH > 0) while_stmt | leaf_stmt; name_id: [str(ID)]; // Source-sequential scf.for with compile-time constant trip domain. for_stmt: {new DEPTH = DEPTH - 1; new ID = V; V += 1} ' scf.for %iv' name_id ' = %zero to %two step %one {\n' block ' }\n'; if_stmt: {new DEPTH = DEPTH - 1; new ID = V; V += 1; new HAS_ELSE = random.choice([0, 1])} if_body; if_body: (HAS_ELSE == 0) ' scf.if %flag {\n' block ' }\n' | (HAS_ELSE == 1) ' scf.if %flag {\n' block ' } else {\n' block ' }\n'; // Fixed-width graph-owned scf.parallel in effect form (no reduction results). // Each lane derives a lane-disjoint element index from the enclosing index // expression so cross-lane legality is established in the candidate itself. parallel_stmt: {new DEPTH = DEPTH - 1; new ID = V; V += 1} ' scf.parallel (%iv' name_id ') = (%zero) to (%two) step (%one) {\n' lane_index parallel_block ' scf.reduce\n' ' }\n'; // Fixed-domain effect-form scf.forall (no shared_outs, no results). forall_stmt: {new DEPTH = DEPTH - 1; new ID = V; V += 1} ' scf.forall (%iv' name_id ') in (2) {\n' lane_index parallel_block ' }\n'; lane_index: ' %mx' name_id ' = arith.muli ' idx_name ', %two : index\n' ' %ix' name_id ' = arith.addi %mx' name_id ', %iv' name_id ' : index\n'; idx_name: [IDX]; parallel_block: {new IDX = '%ix' + str(ID)} block; while_stmt: {new DEPTH = DEPTH - 1; new ID = V; V += 1} ' %wr' name_id ' = scf.while (%wa' name_id ' = %zero) : (index) -> index {\n' ' %wc' name_id ' = arith.cmpi ult, %wa' name_id ', %two : index\n' ' scf.condition(%wc' name_id ') %wa' name_id ' : index\n' ' } do {\n' ' ^bb0(%wb' name_id ': index):\n' block ' %wn' name_id ' = arith.addi %wb' name_id ', %one : index\n' ' scf.yield %wn' name_id ' : index\n' ' }\n'; leaf_stmt: {new ID = V; V += 1; new LEAF_KIND = random.choice([0, 1])} leaf_body; leaf_body: (LEAF_KIND == 0) ' memref.store %one, %target[' idx_name '] : memref<?xindex>\n' | (LEAF_KIND == 1) ' %ld' name_id ' = memref.load %target[' idx_name '] : memref<?xindex>\n' ' %ad' name_id ' = arith.addi %ld' name_id ', %one : index\n' ' memref.store %ad' name_id ', %target[' idx_name '] : memref<?xindex>\n';
Output is an initial Canonical Dataflow Program: module-level
llvm.funcsymbols for imported LLVM callables, any genuinely nativefunc.funchelpers, module-leveldataflow.threaddefinitions reached by zero or moredataflow.thread.launchops; and module-leveldataflow.graphdefinitions reached by zero or moredataflow.graph.launchops inside thread definitions. Noscf.*op is left inside anydataflow.graphdefinition's body after successful graph-region lowering.
candidate.spctpostcondition initial_canonical_dataflow_program { language v0; vocabulary mlir = mlir.generic@1; metadata { project = "PolyArch/loom"; revision = "48615bc5925ef4b9db8b4550b5d4322933cf4b7b"; source = "docs/spec-compiler-part-3-dfg.md:L102-L109"; } constraints { let threads = seq { op | op in output.operations where op.name == "dataflow.thread" }; let graphs = seq { op | op in output.operations where op.name == "dataflow.graph" }; let graph_launches = seq { op | op in output.operations where op.name == "dataflow.graph.launch" }; let callables = seq { op | op in output.operations where op.name == "llvm.func" or op.name == "func.func" }; // Imported LLVM callables and genuinely native func.func helpers are // module-level symbols. forall c in callables { assert callable_is_module_level: c.parent_operation matches some($p) and p.name == "builtin.module"; } // dataflow.thread definitions are module-level. forall t in threads { assert thread_is_module_level: t.parent_operation matches some($p) and p.name == "builtin.module"; } // dataflow.graph definitions are module-level, and no scf.* op is left // inside any dataflow.graph definition's body. forall g in graphs { assert graph_is_module_level: g.parent_operation matches some($p) and p.name == "builtin.module"; assert no_scf_in_graph_body: none op in mlir::descendants(g) where op.dialect == "scf"; } // dataflow.graph definitions are reached by dataflow.graph.launch ops // inside thread definitions. forall l in graph_launches { assert graph_launch_inside_thread: exists t in threads where mlir::contains(t, l); } } }
dataflow.thread private @thread_0 domain(#dataflow.thread_domain<dense>)( %limit: index, %memory: memref<?xindex>) ctrl (%ctrl: none) { "loom.spatial_region"(%limit, %memory) <{operandSegmentSizes = array<i32: 1, 0, 1, 0>, resultSegmentSizes = array<i32: 0, 0>}> ({ ^bb0(%lim: index, %target: memref<?xindex>): %zero = arith.constant 0 : index %one = arith.constant 1 : index %two = arith.constant 2 : index scf.for %iv0 = %zero to %two step %one { %ld1 = memref.load %target[%zero] : memref<?xindex> %ad1 = arith.addi %ld1, %one : index memref.store %ad1, %target[%zero] : memref<?xindex> } %wr2 = scf.while (%wa2 = %zero) : (index) -> index { %wc2 = arith.cmpi ult, %wa2, %two : index scf.condition(%wc2) %wa2 : index } do { ^bb0(%wb2: index): memref.store %one, %target[%zero] : memref<?xindex> %wn2 = arith.addi %wb2, %one : index scf.yield %wn2 : index } "loom.spatial_yield"() <{operandSegmentSizes = array<i32: 0, 0>}> : () -> () }) {graph_name = "g_thread_0", source_maps = []} : (index, memref<?xindex>) -> () dataflow.thread.yield } dataflow.thread private @thread_1 domain(#dataflow.thread_domain<dense>)( %limit: index, %memory: memref<?xindex>) ctrl (%ctrl: none) { dataflow.thread.yield }
20260911-081718started2026-09-11T08:17:18Zsubjectloom-raise-optsubject revision48615bc5925erun results
output condition verdicts
raw trace evidence
dataflow.thread private @thread_0 domain(#dataflow.thread_domain<dense>)( %limit: index, %memory: memref<?xindex>) ctrl (%ctrl: none) { "loom.spatial_region"(%limit, %memory) <{operandSegmentSizes = array<i32: 1, 0, 1, 0>, resultSegmentSizes = array<i32: 0, 0>}> ({ ^bb0(%lim: index, %target: memref<?xindex>): %zero = arith.constant 0 : index %one = arith.constant 1 : index %two = arith.constant 2 : index %flag = arith.cmpi ult, %zero, %two : index scf.for %iv0 = %zero to %two step %one { %ld1 = memref.load %target[%zero] : memref<?xindex> %ad1 = arith.addi %ld1, %one : index memref.store %ad1, %target[%zero] : memref<?xindex> } %wr2 = scf.while (%wa2 = %zero) : (index) -> index { %wc2 = arith.cmpi ult, %wa2, %two : index scf.condition(%wc2) %wa2 : index } do { ^bb0(%wb2: index): memref.store %one, %target[%zero] : memref<?xindex> %wn2 = arith.addi %wb2, %one : index scf.yield %wn2 : index } "loom.spatial_yield"() <{operandSegmentSizes = array<i32: 0, 0>}> : () -> () }) {graph_name = "g_thread_0", source_maps = []} : (index, memref<?xindex>) -> () dataflow.thread.yield } dataflow.thread private @thread_1 domain(#dataflow.thread_domain<dense>)( %limit: index, %memory: memref<?xindex>) ctrl (%ctrl: none) { %izero = arith.constant 0 : index %ione = arith.constant 1 : index memref.store %ione, %memory[%izero] : memref<?xindex> dataflow.thread.yield }
"builtin.module"() ({ "dataflow.thread"() <{domain = #dataflow.thread_domain<dense>, function_type = (index, memref<?xindex>) -> (), sym_name = "thread_0", sym_visibility = "private"}> ({ ^bb0(%arg6: index, %arg7: memref<?xindex>, %arg8: none): %55 = "dataflow.graph.launch"(%arg8, %arg6, %arg7) <{callee = @g_thread_0, operandSegmentSizes = array<i32: 1, 1, 0, 1, 0>, resultSegmentSizes = array<i32: 0, 0, 1>, source_maps = []}> : (none, index, memref<?xindex>) -> none "dataflow.thread.yield"(%55) : (none) -> () }) : () -> () "dataflow.thread"() <{domain = #dataflow.thread_domain<dense>, function_type = (index, memref<?xindex>) -> (), sym_name = "thread_1", sym_visibility = "private"}> ({ ^bb0(%arg3: index, %arg4: memref<?xindex>, %arg5: none): %53 = "arith.constant"() <{value = 0 : index}> : () -> index %54 = "arith.constant"() <{value = 1 : index}> : () -> index "memref.store"(%54, %arg4, %53) : (index, memref<?xindex>, index) -> () "dataflow.thread.yield"() : () -> () }) : () -> () "dataflow.graph"() <{arg_attrs = [{}, {llvm.noalias}], function_type = (index, memref<?xindex>) -> (), input_segments = array<i32: 1, 0, 1>, result_segments = array<i32: 0, 0, 0>, sym_name = "g_thread_0", sym_visibility = "private"}> ({ ^bb0(%arg0: none, %arg1: index, %arg2: memref<?xindex>): %0 = "dataflow.constant"(%arg0) <{const_value = 0 : index}> : (none) -> index %1 = "dataflow.constant"(%arg0) <{const_value = 1 : index}> : (none) -> index %2 = "dataflow.constant"(%arg0) <{const_value = 2 : index}> : (none) -> index %3 = "arith.index_cast"(%0) : (index) -> i32 %4 = "arith.index_cast"(%2) : (index) -> i32 %5 = "arith.index_cast"(%1) : (index) -> i32 %6:2 = "dataflow.stream"(%3, %4, %5) <{predicate = 2 : i64, step_kind = 0 : i32}> : (i32, i32, i32) -> (i32, i1) %7 = "dataflow.carry"(%6#1, %arg0, %8#1) : (i1, none, none) -> none %8:2 = "dataflow.demux"(%6#1, %7) : (i1, none) -> (none, none) %9 = "dataflow.invariant"(%6#1, %0) : (i1, index) -> index %10:2 = "dataflow.gate"(%6#1, %9) : (i1, index) -> (i1, index) %11:2 = "dataflow.demux"(%10#0, %10#1) : (i1, index) -> (index, index) %12 = "dataflow.invariant"(%6#1, %1) : (i1, index) -> index %13:2 = "dataflow.gate"(%6#1, %12) : (i1, index) -> (i1, index) %14:2 = "dataflow.demux"(%13#0, %13#1) : (i1, index) -> (index, index) %15 = "dataflow.carry"(%6#1, %arg0, %23) : (i1, none, none) -> none %16 = "dataflow.carry"(%6#1, %arg0, %23) : (i1, none, none) -> none %17:2 = "dataflow.demux"(%6#1, %15) : (i1, none) -> (none, none) %18:2 = "dataflow.demux"(%6#1, %16) : (i1, none) -> (none, none) %19:2 = "dataflow.sync"(%8#1, %17#1) : (none, none) -> (none, none) %20:2 = "dataflow.load"(%arg2, %10#1, %19#0) : (memref<?xindex>, index, none) -> (index, none) %21:2 = "dataflow.sync"(%18#1, %20#1) : (none, none) -> (none, none) %22 = "arith.addi"(%20#0, %13#1) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index %23 = "dataflow.store"(%arg2, %10#1, %22, %21#0) : (memref<?xindex>, index, index, none) -> none %24 = "arith.cmpi"(%3, %4) <{predicate = 2 : i64}> : (i32, i32) -> i1 %25:2 = "dataflow.demux"(%24, %8#0) : (i1, none) -> (none, none) %26:3 = "dataflow.sync"(%25#1, %11#0, %14#0) : (none, index, index) -> (none, index, index) %27 = "dataflow.mux"(%24, %25#0, %26#0) : (i1, none, none) -> none %28 = "dataflow.carry"(%32, %27, %34#1) : (i1, none, none) -> none %29 = "dataflow.carry"(%32, %0, %46) : (i1, index, index) -> index %30 = "dataflow.invariant"(%32, %2) : (i1, index) -> index %31 = "dataflow.carry"(%32, %18#0, %45) : (i1, none, none) -> none %32 = "arith.cmpi"(%29, %30) <{predicate = 6 : i64}> : (index, index) -> i1 %33:2 = "dataflow.demux"(%32, %28) : (i1, none) -> (none, none) %34:2 = "dataflow.gate"(%32, %28) : (i1, none) -> (i1, none) %35:2 = "dataflow.demux"(%34#0, %34#1) : (i1, none) -> (none, none) %36:2 = "dataflow.demux"(%32, %31) : (i1, none) -> (none, none) %37:2 = "dataflow.demux"(%32, %29) : (i1, index) -> (index, index) %38 = "dataflow.invariant"(%32, %1) : (i1, index) -> index %39:2 = "dataflow.gate"(%32, %38) : (i1, index) -> (i1, index) %40:2 = "dataflow.demux"(%39#0, %39#1) : (i1, index) -> (index, index) %41 = "dataflow.invariant"(%32, %0) : (i1, index) -> index %42:2 = "dataflow.gate"(%32, %41) : (i1, index) -> (i1, index) %43:2 = "dataflow.demux"(%42#0, %42#1) : (i1, index) -> (index, index) %44:2 = "dataflow.sync"(%34#1, %36#1) : (none, none) -> (none, none) %45 = "dataflow.store"(%arg2, %42#1, %39#1, %44#0) : (memref<?xindex>, index, index, none) -> none %46 = "arith.addi"(%37#1, %39#1) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index %47:2 = "dataflow.demux"(%34#0, %34#1) : (i1, none) -> (none, none) %48:4 = "dataflow.sync"(%47#0, %35#0, %40#0, %43#0) : (none, none, index, index) -> (none, none, index, index) %49 = "dataflow.mux"(%34#0, %48#0, %47#1) : (i1, none, none) -> none %50 = "dataflow.carry"(%32, %27, %49) : (i1, none, none) -> none %51:2 = "dataflow.demux"(%32, %50) : (i1, none) -> (none, none) %52:2 = "dataflow.sync"(%33#0, %51#0) : (none, none) -> (none, none) "dataflow.graph.return"(%52#0, %36#0) <{operandSegmentSizes = array<i32: 0, 0, 0, 2>}> : (none, none) -> () }) : () -> () }) : () -> ()
| seed | subject | verdict | artifacts |
|---|---|---|---|
0 | accepted | PASS | input · generic input · output · check report |
1 | accepted | PASS | input · generic input · output · check report |
2 | accepted | PASS | input · generic input · output · check report |
3 | accepted | PASS | input · generic input · output · check report |
4 | accepted | PASS | input · generic input · output · check report |
5 | accepted | PASS | input · generic input · output · check report |
6 | accepted | PASS | input · generic input · output · check report |
7 | accepted | PASS | input · generic input · output · check report |
8 | accepted | PASS | input · generic input · output · check report |
9 | accepted | PASS | input · generic input · output · check report |
10 | accepted | PASS | input · generic input · output · check report |
11 | accepted | PASS | input · generic input · output · check report |
12 | accepted | PASS | input · generic input · output · check report |
13 | accepted | PASS | input · generic input · output · check report |
14 | accepted | PASS | input · generic input · output · check report |
15 | accepted | PASS | input · generic input · output · check report |
16 | accepted | PASS | input · generic input · output · check report |
17 | accepted | PASS | input · generic input · output · check report |
18 | accepted | PASS | input · generic input · output · check report |
19 | accepted | PASS | input · generic input · output · check report |
20 | accepted | PASS | input · generic input · output · check report |
21 | accepted | PASS | input · generic input · output · check report |
22 | accepted | PASS | input · generic input · output · check report |
23 | accepted | PASS | input · generic input · output · check report |
24 | accepted | PASS | input · generic input · output · check report |
25 | accepted | PASS | input · generic input · output · check report |
26 | accepted | PASS | input · generic input · output · check report |
27 | accepted | PASS | input · generic input · output · check report |
28 | accepted | PASS | input · generic input · output · check report |
29 | accepted | PASS | input · generic input · output · check report |
30 | accepted | PASS | input · generic input · output · check report |
31 | accepted | PASS | input · generic input · output · check report |
32 | accepted | PASS | input · generic input · output · check report |
33 | accepted | PASS | input · generic input · output · check report |
34 | accepted | PASS | input · generic input · output · check report |
35 | accepted | PASS | input · generic input · output · check report |
36 | accepted | PASS | input · generic input · output · check report |
37 | accepted | PASS | input · generic input · output · check report |
38 | accepted | PASS | input · generic input · output · check report |
39 | accepted | PASS | input · generic input · output · check report |
40 | accepted | PASS | input · generic input · output · check report |
41 | accepted | PASS | input · generic input · output · check report |
42 | accepted | PASS | input · generic input · output · check report |
43 | accepted | PASS | input · generic input · output · check report |
44 | accepted | PASS | input · generic input · output · check report |
45 | accepted | PASS | input · generic input · output · check report |
46 | accepted | PASS | input · generic input · output · check report |
47 | accepted | PASS | input · generic input · output · check report |
48 | accepted | PASS | input · generic input · output · check report |
49 | accepted | PASS | input · generic input · output · check report |
50 | accepted | PASS | input · generic input · output · check report |
51 | accepted | PASS | input · generic input · output · check report |
52 | accepted | PASS | input · generic input · output · check report |
53 | accepted | PASS | input · generic input · output · check report |
54 | accepted | PASS | input · generic input · output · check report |
55 | accepted | PASS | input · generic input · output · check report |
56 | accepted | PASS | input · generic input · output · check report |
57 | accepted | PASS | input · generic input · output · check report |
58 | accepted | PASS | input · generic input · output · check report |
59 | accepted | PASS | input · generic input · output · check report |
60 | accepted | PASS | input · generic input · output · check report |
61 | accepted | PASS | input · generic input · output · check report |
62 | accepted | PASS | input · generic input · output · check report |
63 | accepted | PASS | input · generic input · output · check report |
64 | accepted | PASS | input · generic input · output · check report |
65 | accepted | PASS | input · generic input · output · check report |
66 | accepted | PASS | input · generic input · output · check report |
67 | accepted | PASS | input · generic input · output · check report |
68 | accepted | PASS | input · generic input · output · check report |
69 | accepted | PASS | input · generic input · output · check report |
70 | accepted | PASS | input · generic input · output · check report |
71 | rejected | input · stderr<stdin>:15:7: error: loom-lower-graph-memory: parallel addresses have no comparable lane projection; address rank is 1
scf.parallel (%iv0) = (%zero) to (%two) step (%one) {
^
<stdin>:15:7: note: see current operation:
"scf.parallel"(%0, %2, %1) <{operandSegmentSizes = array<i32: 1, 1, 1, 0>}> ({
^bb0(%arg3: index):
"scf.forall"() <{operandSegmentSizes = array<i32: 0, 0, 0, 0>, staticLowerBound = array<i64: 0>, staticStep = array<i64: 1>, staticUpperBound = array<i64: 2>}> ({
^bb0(%arg4: index):
%5 = "arith.muli"(%arg3, %2) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
%6 = "arith.addi"(%5, %arg4) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
"memref.store"(%1, %arg2, %6) : (index, memref<?xindex>, index) -> ()
"scf.forall.in_parallel"() ({
^bb0:
}) : () -> ()
}) : () -> ()
"scf.reduce"() : () -> ()
}) : (index, index, index) -> ()
| |
72 | accepted | PASS | input · generic input · output · check report |
73 | accepted | PASS | input · generic input · output · check report |
74 | accepted | PASS | input · generic input · output · check report |
75 | accepted | PASS | input · generic input · output · check report |
76 | accepted | PASS | input · generic input · output · check report |
77 | accepted | PASS | input · generic input · output · check report |
78 | rejected | input · stderr<stdin>:15:7: error: loom-lower-graph-memory: parallel addresses have no comparable lane projection; address rank is 1
scf.parallel (%iv0) = (%zero) to (%two) step (%one) {
^
<stdin>:15:7: note: see current operation:
"scf.parallel"(%0, %2, %1) <{operandSegmentSizes = array<i32: 1, 1, 1, 0>}> ({
^bb0(%arg3: index):
"scf.forall"() <{operandSegmentSizes = array<i32: 0, 0, 0, 0>, staticLowerBound = array<i64: 0>, staticStep = array<i64: 1>, staticUpperBound = array<i64: 2>}> ({
^bb0(%arg4: index):
%3 = "arith.muli"(%arg3, %2) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
%4 = "arith.addi"(%3, %arg4) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
"memref.store"(%1, %arg2, %4) : (index, memref<?xindex>, index) -> ()
"scf.forall.in_parallel"() ({
^bb0:
}) : () -> ()
}) : () -> ()
"memref.store"(%1, %arg2, %arg3) : (index, memref<?xindex>, index) -> ()
"scf.reduce"() : () -> ()
}) : (index, index, index) -> ()
| |
79 | accepted | PASS | input · generic input · output · check report |
80 | accepted | PASS | input · generic input · output · check report |
81 | accepted | PASS | input · generic input · output · check report |
82 | accepted | PASS | input · generic input · output · check report |
83 | accepted | PASS | input · generic input · output · check report |
84 | accepted | PASS | input · generic input · output · check report |
85 | accepted | PASS | input · generic input · output · check report |
86 | accepted | PASS | input · generic input · output · check report |
87 | accepted | PASS | input · generic input · output · check report |
88 | accepted | PASS | input · generic input · output · check report |
89 | accepted | PASS | input · generic input · output · check report |
90 | accepted | PASS | input · generic input · output · check report |
91 | accepted | PASS | input · generic input · output · check report |
92 | accepted | PASS | input · generic input · output · check report |
93 | accepted | PASS | input · generic input · output · check report |
94 | accepted | PASS | input · generic input · output · check report |
95 | accepted | PASS | input · generic input · output · check report |
96 | accepted | PASS | input · generic input · output · check report |
97 | accepted | PASS | input · generic input · output · check report |
98 | accepted | PASS | input · generic input · output · check report |
99 | rejected | input · stderr<stdin>:11:7: error: loom-lower-graph-memory: parallel addresses have no comparable lane projection; address rank is 1
scf.forall (%iv0) in (2) {
^
<stdin>:11:7: note: see current operation:
"scf.forall"() <{operandSegmentSizes = array<i32: 0, 0, 0, 0>, staticLowerBound = array<i64: 0>, staticStep = array<i64: 1>, staticUpperBound = array<i64: 2>}> ({
^bb0(%arg7: index):
"scf.parallel"(%0, %2, %1) <{operandSegmentSizes = array<i32: 1, 1, 1, 0>}> ({
^bb0(%arg8: index):
%8 = "arith.muli"(%arg7, %2) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
%9 = "arith.addi"(%8, %arg8) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
%10 = "memref.load"(%arg2, %9) : (memref<?xindex>, index) -> index
%11 = "arith.addi"(%10, %1) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
"memref.store"(%11, %arg2, %9) : (index, memref<?xindex>, index) -> ()
"scf.reduce"() : () -> ()
}) : (index, index, index) -> ()
"scf.forall.in_parallel"() ({
^bb0:
}) : () -> ()
}) : () -> ()
| |
100 | accepted | PASS | input · generic input · output · check report |
101 | accepted | PASS | input · generic input · output · check report |
102 | accepted | PASS | input · generic input · output · check report |
103 | accepted | PASS | input · generic input · output · check report |
104 | accepted | PASS | input · generic input · output · check report |
105 | accepted | PASS | input · generic input · output · check report |
106 | accepted | PASS | input · generic input · output · check report |
107 | accepted | PASS | input · generic input · output · check report |
108 | accepted | PASS | input · generic input · output · check report |
109 | accepted | PASS | input · generic input · output · check report |
110 | accepted | PASS | input · generic input · output · check report |
111 | accepted | PASS | input · generic input · output · check report |
112 | accepted | PASS | input · generic input · output · check report |
113 | accepted | PASS | input · generic input · output · check report |
114 | rejected | input · stderr<stdin>:0:0: error: canonical Dataflow publication failed: graph @g_thread_0 completion witness #0 is not statically one-shot
<stdin>:0:0: note: see current operation:
"builtin.module"() ({
"llvm.func"() <{CConv = #llvm.cconv<ccc>, function_type = !llvm.func<i64 (i64)>, linkage = #llvm.linkage<external>, sym_name = "imported_callable", unnamed_addr = 0 : i64, visibility_ = 0 : i64}> ({
}) : () -> ()
"func.func"() <{function_type = (i32) -> i32, sym_name = "native_callable", sym_visibility = "private"}> ({
^bb0(%arg6: i32):
"func.return"(%arg6) : (i32) -> ()
}) : () -> ()
"dataflow.thread"() <{domain = #dataflow.thread_domain<dense>, function_type = (index, memref<?xindex>) -> (), sym_name = "thread_0", sym_visibility = "private"}> ({
^bb0(%arg3: index, %arg4: memref<?xindex>, %arg5: none):
%80 = "dataflow.graph.launch"(%arg5, %arg3, %arg4) <{callee = @g_thread_0, operandSegmentSizes = array<i32: 1, 1, 0, 1, 0>, resultSegmentSizes = array<i32: 0, 0, 1>, source_maps = []}> : (none, index, memref<?xindex>) -> none
"dataflow.thread.yield"(%80) : (none) -> ()
}) : () -> ()
"dataflow.graph"() <{arg_attrs = [{}, {llvm.noalias}], function_type = (index, memref<?xindex>) -> (), input_segments = array<i32: 1, 0, 1>, result_segments = array<i32: 0, 0, 0>, sym_name = "g_thread_0", sym_visibility = "private"}> ({
^bb0(%arg0: none, %arg1: index, %arg2: memref<?xindex>):
%0 = "dataflow.constant"(%arg0) <{const_value = 0 : index}> : (none) -> index
%1 = "dataflow.constant"(%arg0) <{const_value = 1 : index}> : (none) -> index
%2 = "dataflow.constant"(%arg0) <{const_value = 2 : index}> : (none) -> index
%3 = "arith.index_cast"(%0) : (index) -> i32
%4 = "arith.index_cast"(%2) : (index) -> i32
%5 = "arith.index_cast"(%1) : (index) -> i32
%6:2 = "dataflow.stream"(%3, %4, %5) <{predicate = 2 : i64, step_kind = 0 : i32}> : (i32, i32, i32) -> (i32, i1)
%7 = "dataflow.carry"(%6#1, %arg0, %8#1) : (i1, none, none) -> none
%8:2 = "dataflow.demux"(%6#1, %7) : (i1, none) -> (none, none)
%9 = "dataflow.invariant"(%6#1, %0) : (i1, index) -> index
%10:2 = "dataflow.gate"(%6#1, %9) : (i1, index) -> (i1, index)
%11:2 = "dataflow.demux"(%10#0, %10#1) : (i1, index) -> (index, index)
%12 = "dataflow.invariant"(%6#1, %1) : (i1, index) -> index
%13:2 = "dataflow.gate"(%6#1, %12) : (i1, index) -> (i1, index)
%14:2 = "dataflow.demux"(%13#0, %13#1) : (i1, index) -> (index, index)
%15 = "dataflow.carry"(%6#1, %arg0, %23) : (i1, none, none) -> none
%16 = "dataflow.carry"(%6#1, %arg0, %23) : (i1, none, none) -> none
%17:2 = "dataflow.demux"(%6#1, %15) : (i1, none) -> (none, none)
%18:2 = "dataflow.demux"(%6#1, %16) : (i1, none) -> (none, none)
%19:2 = "dataflow.sync"(%8#1, %17#1) : (none, none) -> (none, none)
%20:2 = "dataflow.load"(%arg2, %10#1, %19#0) : (memref<?xindex>, index, none) -> (index, none)
%21:2 = "dataflow.sync"(%18#1, %20#1) : (none, none) -> (none, none)
%22 = "arith.addi"(%20#0, %13#1) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
%23 = "dataflow.store"(%arg2, %10#1, %22, %21#0) : (memref<?xindex>, index, index, none) -> none
%24 = "arith.cmpi"(%3, %4) <{predicate = 2 : i64}> : (i32, i32) -> i1
%25:2 = "dataflow.demux"(%24, %8#0) : (i1, none) -> (none, none)
%26:3 = "dataflow.sync"(%25#1, %11#0, %14#0) : (none, index, index) -> (none, index, index)
%27 = "dataflow.mux"(%24, %25#0, %26#0) : (i1, none, none) -> none
%28 = "arith.index_cast"(%0) : (index) -> i32
%29 = "arith.index_cast"(%2) : (index) -> i32
%30 = "arith.index_cast"(%1) : (index) -> i32
%31:2 = "dataflow.stream"(%28, %29, %30) <{predicate = 2 : i64, step_kind = 0 : i32}> : (i32, i32, i32) -> (i32, i1)
%32 = "dataflow.carry"(%31#1, %27, %33#1) : (i1, none, none) -> none
%33:2 = "dataflow.demux"(%31#1, %32) : (i1, none) -> (none, none)
%34 = "dataflow.invariant"(%31#1, %0) : (i1, index) -> index
%35:2 = "dataflow.gate"(%31#1, %34) : (i1, index) -> (i1, index)
%36:2 = "dataflow.demux"(%35#0, %35#1) : (i1, index) -> (index, index)
%37 = "dataflow.invariant"(%31#1, %1) : (i1, index) -> index
%38:2 = "dataflow.gate"(%31#1, %37) : (i1, index) -> (i1, index)
%39:2 = "dataflow.demux"(%38#0, %38#1) : (i1, index) -> (index, index)
%40 = "dataflow.carry"(%31#1, %17#0, %48) : (i1, none, none) -> none
%41 = "dataflow.carry"(%31#1, %18#0, %48) : (i1, none, none) -> none
%42:2 = "dataflow.demux"(%31#1, %40) : (i1, none) -> (none, none)
%43:2 = "dataflow.demux"(%31#1, %41) : (i1, none) -> (none, none)
%44:2 = "dataflow.sync"(%33#1, %42#1) : (none, none) -> (none, none)
%45:2 = "dataflow.load"(%arg2, %35#1, %44#0) : (memref<?xindex>, index, none) -> (index, none)
%46:2 = "dataflow.sync"(%43#1, %45#1) : (none, none) -> (none, none)
%47 = "arith.addi"(%45#0, %38#1) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
%48 = "dataflow.store"(%arg2, %35#1, %47, %46#0) : (memref<?xindex>, index, index, none) -> none
%49 = "arith.cmpi"(%28, %29) <{predicate = 2 : i64}> : (i32, i32) -> i1
%50:2 = "dataflow.demux"(%49, %33#0) : (i1, none) -> (none, none)
%51:3 = "dataflow.sync"(%50#1, %36#0, %39#0) : (none, index, index) -> (none, index, index)
%52 = "dataflow.mux"(%49, %50#0, %51#0) : (i1, none, none) -> none
%53 = "arith.index_cast"(%0) : (index) -> i32
%54 = "arith.index_cast"(%2) : (index) -> i32
%55 = "arith.index_cast"(%1) : (index) -> i32
%56:2 = "dataflow.stream"(%53, %54, %55) <{predicate = 2 : i64, step_kind = 0 : i32}> : (i32, i32, i32) -> (i32, i1)
%57 = "dataflow.carry"(%56#1, %27, %58#1) : (i1, none, none) -> none
%58:2 = "dataflow.demux"(%56#1, %57) : (i1, none) -> (none, none)
%59 = "dataflow.invariant"(%56#1, %1) : (i1, index) -> index
%60:2 = "dataflow.gate"(%56#1, %59) : (i1, index) -> (i1, index)
%61:2 = "dataflow.demux"(%60#0, %60#1) : (i1, index) -> (index, index)
%62 = "dataflow.invariant"(%56#1, %1) : (i1, index) -> index
%63:2 = "dataflow.gate"(%56#1, %62) : (i1, index) -> (i1, index)
%64:2 = "dataflow.demux"(%63#0, %63#1) : (i1, index) -> (index, index)
%65 = "dataflow.carry"(%56#1, %17#0, %73) : (i1, none, none) -> none
%66 = "dataflow.carry"(%56#1, %18#0, %73) : (i1, none, none) -> none
%67:2 = "dataflow.demux"(%56#1, %65) : (i1, none) -> (none, none)
%68:2 = "dataflow.demux"(%56#1, %66) : (i1, none) -> (none, none)
%69:2 = "dataflow.sync"(%58#1, %67#1) : (none, none) -> (none, none)
%70:2 = "dataflow.load"(%arg2, %60#1, %69#0) : (memref<?xindex>, index, none) -> (index, none)
%71:2 = "dataflow.sync"(%68#1, %70#1) : (none, none) -> (none, none)
%72 = "arith.addi"(%70#0, %63#1) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
%73 = "dataflow.store"(%arg2, %60#1, %72, %71#0) : (memref<?xindex>, index, index, none) -> none
%74 = "arith.cmpi"(%53, %54) <{predicate = 2 : i64}> : (i32, i32) -> i1
%75:2 = "dataflow.demux"(%74, %58#0) : (i1, none) -> (none, none)
%76:3 = "dataflow.sync"(%75#1, %61#0, %64#0) : (none, index, index) -> (none, index, index)
%77 = "dataflow.mux"(%74, %75#0, %76#0) : (i1, none, none) -> none
%78:2 = "dataflow.sync"(%52, %77) : (none, none) -> (none, none)
%79:2 = "dataflow.sync"(%43#0, %68#0) : (none, none) -> (none, none)
"dataflow.graph.return"(%78#0, %79#0) <{operandSegmentSizes = array<i32: 0, 0, 0, 2>}> : (none, none) -> ()
}) : () -> ()
}) : () -> ()
| |
115 | accepted | PASS | input · generic input · output · check report |
116 | accepted | PASS | input · generic input · output · check report |
117 | accepted | PASS | input · generic input · output · check report |
118 | accepted | PASS | input · generic input · output · check report |
119 | accepted | PASS | input · generic input · output · check report |
120 | accepted | PASS | input · generic input · output · check report |
121 | accepted | PASS | input · generic input · output · check report |
122 | accepted | PASS | input · generic input · output · check report |
123 | accepted | PASS | input · generic input · output · check report |
124 | accepted | PASS | input · generic input · output · check report |
125 | accepted | PASS | input · generic input · output · check report |
126 | accepted | PASS | input · generic input · output · check report |
127 | accepted | PASS | input · generic input · output · check report |
128 | accepted | PASS | input · generic input · output · check report |
129 | accepted | PASS | input · generic input · output · check report |
130 | accepted | PASS | input · generic input · output · check report |
131 | accepted | PASS | input · generic input · output · check report |
132 | accepted | PASS | input · generic input · output · check report |
133 | accepted | PASS | input · generic input · output · check report |
134 | accepted | PASS | input · generic input · output · check report |
135 | accepted | PASS | input · generic input · output · check report |
136 | accepted | PASS | input · generic input · output · check report |
137 | accepted | PASS | input · generic input · output · check report |
138 | accepted | PASS | input · generic input · output · check report |
139 | accepted | PASS | input · generic input · output · check report |
140 | accepted | PASS | input · generic input · output · check report |
141 | accepted | PASS | input · generic input · output · check report |
142 | accepted | PASS | input · generic input · output · check report |
143 | accepted | PASS | input · generic input · output · check report |
144 | accepted | PASS | input · generic input · output · check report |
145 | accepted | PASS | input · generic input · output · check report |
146 | accepted | PASS | input · generic input · output · check report |
147 | accepted | PASS | input · generic input · output · check report |
148 | accepted | PASS | input · generic input · output · check report |
149 | accepted | PASS | input · generic input · output · check report |
150 | accepted | PASS | input · generic input · output · check report |
151 | accepted | PASS | input · generic input · output · check report |
152 | accepted | PASS | input · generic input · output · check report |
153 | accepted | PASS | input · generic input · output · check report |
154 | accepted | PASS | input · generic input · output · check report |
155 | accepted | PASS | input · generic input · output · check report |
156 | accepted | PASS | input · generic input · output · check report |
157 | accepted | PASS | input · generic input · output · check report |
158 | accepted | PASS | input · generic input · output · check report |
159 | accepted | PASS | input · generic input · output · check report |
160 | accepted | PASS | input · generic input · output · check report |
161 | accepted | PASS | input · generic input · output · check report |
162 | accepted | PASS | input · generic input · output · check report |
163 | accepted | PASS | input · generic input · output · check report |
164 | accepted | PASS | input · generic input · output · check report |
165 | accepted | PASS | input · generic input · output · check report |
166 | accepted | PASS | input · generic input · output · check report |
167 | accepted | PASS | input · generic input · output · check report |
168 | accepted | PASS | input · generic input · output · check report |
169 | accepted | PASS | input · generic input · output · check report |
170 | accepted | PASS | input · generic input · output · check report |
171 | accepted | PASS | input · generic input · output · check report |
172 | accepted | PASS | input · generic input · output · check report |
173 | accepted | PASS | input · generic input · output · check report |
174 | accepted | PASS | input · generic input · output · check report |
175 | accepted | PASS | input · generic input · output · check report |
176 | accepted | PASS | input · generic input · output · check report |
177 | accepted | PASS | input · generic input · output · check report |
178 | accepted | PASS | input · generic input · output · check report |
179 | accepted | PASS | input · generic input · output · check report |
180 | accepted | PASS | input · generic input · output · check report |
181 | accepted | PASS | input · generic input · output · check report |
182 | accepted | PASS | input · generic input · output · check report |
183 | accepted | PASS | input · generic input · output · check report |
184 | accepted | PASS | input · generic input · output · check report |
185 | accepted | PASS | input · generic input · output · check report |
186 | accepted | PASS | input · generic input · output · check report |
187 | accepted | PASS | input · generic input · output · check report |
188 | accepted | PASS | input · generic input · output · check report |
189 | accepted | PASS | input · generic input · output · check report |
190 | accepted | PASS | input · generic input · output · check report |
191 | accepted | PASS | input · generic input · output · check report |
192 | accepted | PASS | input · generic input · output · check report |
193 | accepted | PASS | input · generic input · output · check report |
194 | accepted | PASS | input · generic input · output · check report |
195 | accepted | PASS | input · generic input · output · check report |
196 | accepted | PASS | input · generic input · output · check report |
197 | accepted | PASS | input · generic input · output · check report |
198 | accepted | PASS | input · generic input · output · check report |
199 | accepted | PASS | input · generic input · output · check report |
200 | accepted | PASS | input · generic input · output · check report |
201 | accepted | PASS | input · generic input · output · check report |
202 | accepted | PASS | input · generic input · output · check report |
203 | accepted | PASS | input · generic input · output · check report |
204 | accepted | PASS | input · generic input · output · check report |
205 | accepted | PASS | input · generic input · output · check report |
206 | accepted | PASS | input · generic input · output · check report |
207 | accepted | PASS | input · generic input · output · check report |
208 | accepted | PASS | input · generic input · output · check report |
209 | accepted | PASS | input · generic input · output · check report |
210 | accepted | PASS | input · generic input · output · check report |
211 | accepted | PASS | input · generic input · output · check report |
212 | accepted | PASS | input · generic input · output · check report |
213 | accepted | PASS | input · generic input · output · check report |
214 | accepted | PASS | input · generic input · output · check report |
215 | rejected | input · stderr<stdin>:11:7: error: loom-lower-graph-memory: parallel addresses have no comparable lane projection; address rank is 1
scf.forall (%iv0) in (2) {
^
<stdin>:11:7: note: see current operation:
"scf.forall"() <{operandSegmentSizes = array<i32: 0, 0, 0, 0>, staticLowerBound = array<i64: 0>, staticStep = array<i64: 1>, staticUpperBound = array<i64: 2>}> ({
^bb0(%arg4: index):
"scf.forall"() <{operandSegmentSizes = array<i32: 0, 0, 0, 0>, staticLowerBound = array<i64: 0>, staticStep = array<i64: 1>, staticUpperBound = array<i64: 2>}> ({
^bb0(%arg5: index):
%4 = "arith.muli"(%arg4, %1) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
%5 = "arith.addi"(%4, %arg5) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
%6 = "memref.load"(%arg2, %5) : (memref<?xindex>, index) -> index
%7 = "arith.addi"(%6, %0) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
"memref.store"(%7, %arg2, %5) : (index, memref<?xindex>, index) -> ()
"scf.forall.in_parallel"() ({
^bb0:
}) : () -> ()
}) : () -> ()
%2 = "memref.load"(%arg2, %arg4) : (memref<?xindex>, index) -> index
%3 = "arith.addi"(%2, %0) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
"memref.store"(%3, %arg2, %arg4) : (index, memref<?xindex>, index) -> ()
"scf.forall.in_parallel"() ({
^bb0:
}) : () -> ()
}) : () -> ()
| |
216 | accepted | PASS | input · generic input · output · check report |
217 | accepted | PASS | input · generic input · output · check report |
218 | accepted | PASS | input · generic input · output · check report |
219 | accepted | PASS | input · generic input · output · check report |
220 | accepted | PASS | input · generic input · output · check report |
221 | accepted | PASS | input · generic input · output · check report |
222 | accepted | PASS | input · generic input · output · check report |
223 | accepted | PASS | input · generic input · output · check report |
224 | accepted | PASS | input · generic input · output · check report |
225 | accepted | PASS | input · generic input · output · check report |
226 | accepted | PASS | input · generic input · output · check report |
227 | accepted | PASS | input · generic input · output · check report |
228 | accepted | PASS | input · generic input · output · check report |
229 | accepted | PASS | input · generic input · output · check report |
230 | accepted | PASS | input · generic input · output · check report |
231 | accepted | PASS | input · generic input · output · check report |
232 | accepted | PASS | input · generic input · output · check report |
233 | accepted | PASS | input · generic input · output · check report |
234 | accepted | PASS | input · generic input · output · check report |
235 | accepted | PASS | input · generic input · output · check report |
236 | accepted | PASS | input · generic input · output · check report |
237 | accepted | PASS | input · generic input · output · check report |
238 | accepted | PASS | input · generic input · output · check report |
239 | accepted | PASS | input · generic input · output · check report |
240 | accepted | PASS | input · generic input · output · check report |
241 | accepted | PASS | input · generic input · output · check report |
242 | accepted | PASS | input · generic input · output · check report |
243 | accepted | PASS | input · generic input · output · check report |
244 | accepted | PASS | input · generic input · output · check report |
245 | accepted | PASS | input · generic input · output · check report |
246 | rejected | input · stderr<stdin>:15:7: error: loom-lower-graph-memory: parallel addresses have no comparable lane projection; address rank is 1
scf.forall (%iv0) in (2) {
^
<stdin>:15:7: note: see current operation:
"scf.forall"() <{operandSegmentSizes = array<i32: 0, 0, 0, 0>, staticLowerBound = array<i64: 0>, staticStep = array<i64: 1>, staticUpperBound = array<i64: 2>}> ({
^bb0(%arg3: index):
"scf.parallel"(%0, %2, %1) <{operandSegmentSizes = array<i32: 1, 1, 1, 0>}> ({
^bb0(%arg4: index):
%5 = "arith.muli"(%arg3, %2) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
%6 = "arith.addi"(%5, %arg4) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
"memref.store"(%1, %arg2, %6) : (index, memref<?xindex>, index) -> ()
"scf.reduce"() : () -> ()
}) : (index, index, index) -> ()
"scf.forall.in_parallel"() ({
^bb0:
}) : () -> ()
}) : () -> ()
| |
247 | accepted | PASS | input · generic input · output · check report |
248 | accepted | PASS | input · generic input · output · check report |
249 | accepted | PASS | input · generic input · output · check report |
250 | rejected | input · stderr<stdin>:11:7: error: loom-lower-graph-memory: parallel addresses have no comparable lane projection; address rank is 1
scf.forall (%iv0) in (2) {
^
<stdin>:11:7: note: see current operation:
"scf.forall"() <{operandSegmentSizes = array<i32: 0, 0, 0, 0>, staticLowerBound = array<i64: 0>, staticStep = array<i64: 1>, staticUpperBound = array<i64: 2>}> ({
^bb0(%arg4: index):
"scf.forall"() <{operandSegmentSizes = array<i32: 0, 0, 0, 0>, staticLowerBound = array<i64: 0>, staticStep = array<i64: 1>, staticUpperBound = array<i64: 2>}> ({
^bb0(%arg5: index):
%4 = "arith.muli"(%arg4, %1) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
%5 = "arith.addi"(%4, %arg5) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
"memref.store"(%0, %arg2, %5) : (index, memref<?xindex>, index) -> ()
"scf.forall.in_parallel"() ({
^bb0:
}) : () -> ()
}) : () -> ()
"scf.forall.in_parallel"() ({
^bb0:
}) : () -> ()
}) : () -> ()
| |
251 | accepted | PASS | input · generic input · output · check report |
252 | accepted | PASS | input · generic input · output · check report |
253 | accepted | PASS | input · generic input · output · check report |
254 | accepted | PASS | input · generic input · output · check report |
255 | accepted | PASS | input · generic input · output · check report |
256 | accepted | PASS | input · generic input · output · check report |
257 | accepted | PASS | input · generic input · output · check report |
258 | accepted | PASS | input · generic input · output · check report |
259 | accepted | PASS | input · generic input · output · check report |
260 | accepted | PASS | input · generic input · output · check report |
261 | accepted | PASS | input · generic input · output · check report |
262 | accepted | PASS | input · generic input · output · check report |
263 | accepted | PASS | input · generic input · output · check report |
264 | accepted | PASS | input · generic input · output · check report |
265 | accepted | PASS | input · generic input · output · check report |
266 | accepted | PASS | input · generic input · output · check report |
267 | accepted | PASS | input · generic input · output · check report |
268 | accepted | PASS | input · generic input · output · check report |
269 | accepted | PASS | input · generic input · output · check report |
270 | accepted | PASS | input · generic input · output · check report |
271 | accepted | PASS | input · generic input · output · check report |
272 | accepted | PASS | input · generic input · output · check report |
273 | accepted | PASS | input · generic input · output · check report |
274 | accepted | PASS | input · generic input · output · check report |
275 | accepted | PASS | input · generic input · output · check report |
276 | accepted | PASS | input · generic input · output · check report |
277 | accepted | PASS | input · generic input · output · check report |
278 | accepted | PASS | input · generic input · output · check report |
279 | accepted | PASS | input · generic input · output · check report |
280 | accepted | PASS | input · generic input · output · check report |
281 | accepted | PASS | input · generic input · output · check report |
282 | accepted | PASS | input · generic input · output · check report |
283 | accepted | PASS | input · generic input · output · check report |
284 | accepted | PASS | input · generic input · output · check report |
285 | accepted | PASS | input · generic input · output · check report |
286 | accepted | PASS | input · generic input · output · check report |
287 | accepted | PASS | input · generic input · output · check report |
288 | accepted | PASS | input · generic input · output · check report |
289 | accepted | PASS | input · generic input · output · check report |
290 | accepted | PASS | input · generic input · output · check report |
291 | rejected | input · stderr<stdin>:0:0: error: canonical Dataflow publication failed: graph @g_thread_0 completion witness #0 is not statically one-shot
<stdin>:0:0: note: see current operation:
"builtin.module"() ({
"llvm.func"() <{CConv = #llvm.cconv<ccc>, function_type = !llvm.func<i64 (i64)>, linkage = #llvm.linkage<external>, sym_name = "imported_callable", unnamed_addr = 0 : i64, visibility_ = 0 : i64}> ({
}) : () -> ()
"func.func"() <{function_type = (i32) -> i32, sym_name = "native_callable", sym_visibility = "private"}> ({
^bb0(%arg6: i32):
"func.return"(%arg6) : (i32) -> ()
}) : () -> ()
"dataflow.thread"() <{domain = #dataflow.thread_domain<dense>, function_type = (index, memref<?xindex>) -> (), sym_name = "thread_0", sym_visibility = "private"}> ({
^bb0(%arg3: index, %arg4: memref<?xindex>, %arg5: none):
%98 = "dataflow.graph.launch"(%arg5, %arg3, %arg4) <{callee = @g_thread_0, operandSegmentSizes = array<i32: 1, 1, 0, 1, 0>, resultSegmentSizes = array<i32: 0, 0, 1>, source_maps = []}> : (none, index, memref<?xindex>) -> none
"dataflow.thread.yield"(%98) : (none) -> ()
}) : () -> ()
"dataflow.graph"() <{arg_attrs = [{}, {llvm.noalias}], function_type = (index, memref<?xindex>) -> (), input_segments = array<i32: 1, 0, 1>, result_segments = array<i32: 0, 0, 0>, sym_name = "g_thread_0", sym_visibility = "private"}> ({
^bb0(%arg0: none, %arg1: index, %arg2: memref<?xindex>):
%0 = "dataflow.constant"(%arg0) <{const_value = 0 : index}> : (none) -> index
%1 = "dataflow.constant"(%arg0) <{const_value = 1 : index}> : (none) -> index
%2 = "dataflow.constant"(%arg0) <{const_value = 2 : index}> : (none) -> index
%3 = "arith.index_cast"(%0) : (index) -> i32
%4 = "arith.index_cast"(%2) : (index) -> i32
%5 = "arith.index_cast"(%1) : (index) -> i32
%6:2 = "dataflow.stream"(%3, %4, %5) <{predicate = 2 : i64, step_kind = 0 : i32}> : (i32, i32, i32) -> (i32, i1)
%7 = "dataflow.carry"(%6#1, %arg0, %51#0) : (i1, none, none) -> none
%8:2 = "dataflow.demux"(%6#1, %7) : (i1, none) -> (none, none)
%9 = "dataflow.invariant"(%6#1, %2) : (i1, index) -> index
%10:2 = "dataflow.gate"(%6#1, %9) : (i1, index) -> (i1, index)
%11:2 = "dataflow.demux"(%10#0, %10#1) : (i1, index) -> (index, index)
%12 = "dataflow.invariant"(%6#1, %0) : (i1, index) -> index
%13:2 = "dataflow.gate"(%6#1, %12) : (i1, index) -> (i1, index)
%14:2 = "dataflow.demux"(%13#0, %13#1) : (i1, index) -> (index, index)
%15 = "dataflow.invariant"(%6#1, %1) : (i1, index) -> index
%16:2 = "dataflow.gate"(%6#1, %15) : (i1, index) -> (i1, index)
%17:2 = "dataflow.demux"(%16#0, %16#1) : (i1, index) -> (index, index)
%18 = "dataflow.carry"(%6#1, %arg0, %31#0) : (i1, none, none) -> none
%19 = "dataflow.carry"(%6#1, %arg0, %32#0) : (i1, none, none) -> none
%20:2 = "dataflow.demux"(%6#1, %18) : (i1, none) -> (none, none)
%21:2 = "dataflow.demux"(%6#1, %19) : (i1, none) -> (none, none)
%22 = "dataflow.carry"(%27, %8#1, %29#1) : (i1, none, none) -> none
%23 = "dataflow.carry"(%27, %13#1, %45) : (i1, index, index) -> index
%24 = "dataflow.invariant"(%27, %10#1) : (i1, index) -> index
%25 = "dataflow.carry"(%27, %20#1, %44) : (i1, none, none) -> none
%26 = "dataflow.carry"(%27, %21#1, %44) : (i1, none, none) -> none
%27 = "arith.cmpi"(%23, %24) <{predicate = 6 : i64}> : (index, index) -> i1
%28:2 = "dataflow.demux"(%27, %22) : (i1, none) -> (none, none)
%29:2 = "dataflow.gate"(%27, %22) : (i1, none) -> (i1, none)
%30:2 = "dataflow.demux"(%29#0, %29#1) : (i1, none) -> (none, none)
%31:2 = "dataflow.demux"(%27, %25) : (i1, none) -> (none, none)
%32:2 = "dataflow.demux"(%27, %26) : (i1, none) -> (none, none)
%33:2 = "dataflow.demux"(%27, %23) : (i1, index) -> (index, index)
%34 = "dataflow.invariant"(%27, %13#1) : (i1, index) -> index
%35:2 = "dataflow.gate"(%27, %34) : (i1, index) -> (i1, index)
%36:2 = "dataflow.demux"(%35#0, %35#1) : (i1, index) -> (index, index)
%37 = "dataflow.invariant"(%27, %16#1) : (i1, index) -> index
%38:2 = "dataflow.gate"(%27, %37) : (i1, index) -> (i1, index)
%39:2 = "dataflow.demux"(%38#0, %38#1) : (i1, index) -> (index, index)
%40:2 = "dataflow.sync"(%29#1, %31#1) : (none, none) -> (none, none)
%41:2 = "dataflow.load"(%arg2, %35#1, %40#0) : (memref<?xindex>, index, none) -> (index, none)
%42:2 = "dataflow.sync"(%32#1, %41#1) : (none, none) -> (none, none)
%43 = "arith.addi"(%41#0, %38#1) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
%44 = "dataflow.store"(%arg2, %35#1, %43, %42#0) : (memref<?xindex>, index, index, none) -> none
%45 = "arith.addi"(%33#1, %38#1) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
%46:2 = "dataflow.demux"(%29#0, %29#1) : (i1, none) -> (none, none)
%47:4 = "dataflow.sync"(%46#0, %30#0, %36#0, %39#0) : (none, none, index, index) -> (none, none, index, index)
%48 = "dataflow.mux"(%29#0, %47#0, %46#1) : (i1, none, none) -> none
%49 = "dataflow.carry"(%27, %8#1, %48) : (i1, none, none) -> none
%50:2 = "dataflow.demux"(%27, %49) : (i1, none) -> (none, none)
%51:2 = "dataflow.sync"(%28#0, %50#0) : (none, none) -> (none, none)
%52 = "arith.cmpi"(%3, %4) <{predicate = 2 : i64}> : (i32, i32) -> i1
%53:2 = "dataflow.demux"(%52, %8#0) : (i1, none) -> (none, none)
%54:4 = "dataflow.sync"(%53#1, %11#0, %14#0, %17#0) : (none, index, index, index) -> (none, index, index, index)
%55 = "dataflow.mux"(%52, %53#0, %54#0) : (i1, none, none) -> none
%56 = "arith.index_cast"(%0) : (index) -> i32
%57 = "arith.index_cast"(%2) : (index) -> i32
%58 = "arith.index_cast"(%1) : (index) -> i32
%59:2 = "dataflow.stream"(%56, %57, %58) <{predicate = 2 : i64, step_kind = 0 : i32}> : (i32, i32, i32) -> (i32, i1)
%60 = "dataflow.carry"(%59#1, %55, %61#1) : (i1, none, none) -> none
%61:2 = "dataflow.demux"(%59#1, %60) : (i1, none) -> (none, none)
%62 = "dataflow.invariant"(%59#1, %1) : (i1, index) -> index
%63:2 = "dataflow.gate"(%59#1, %62) : (i1, index) -> (i1, index)
%64:2 = "dataflow.demux"(%63#0, %63#1) : (i1, index) -> (index, index)
%65 = "dataflow.invariant"(%59#1, %0) : (i1, index) -> index
%66:2 = "dataflow.gate"(%59#1, %65) : (i1, index) -> (i1, index)
%67:2 = "dataflow.demux"(%66#0, %66#1) : (i1, index) -> (index, index)
%68 = "dataflow.carry"(%59#1, %21#0, %71) : (i1, none, none) -> none
%69:2 = "dataflow.demux"(%59#1, %68) : (i1, none) -> (none, none)
%70:2 = "dataflow.sync"(%61#1, %69#1) : (none, none) -> (none, none)
%71 = "dataflow.store"(%arg2, %66#1, %63#1, %70#0) : (memref<?xindex>, index, index, none) -> none
%72 = "arith.cmpi"(%56, %57) <{predicate = 2 : i64}> : (i32, i32) -> i1
%73:2 = "dataflow.demux"(%72, %61#0) : (i1, none) -> (none, none)
%74:3 = "dataflow.sync"(%73#1, %64#0, %67#0) : (none, index, index) -> (none, index, index)
%75 = "dataflow.mux"(%72, %73#0, %74#0) : (i1, none, none) -> none
%76 = "arith.index_cast"(%0) : (index) -> i32
%77 = "arith.index_cast"(%2) : (index) -> i32
%78 = "arith.index_cast"(%1) : (index) -> i32
%79:2 = "dataflow.stream"(%76, %77, %78) <{predicate = 2 : i64, step_kind = 0 : i32}> : (i32, i32, i32) -> (i32, i1)
%80 = "dataflow.carry"(%79#1, %55, %81#1) : (i1, none, none) -> none
%81:2 = "dataflow.demux"(%79#1, %80) : (i1, none) -> (none, none)
%82 = "dataflow.invariant"(%79#1, %1) : (i1, index) -> index
%83:2 = "dataflow.gate"(%79#1, %82) : (i1, index) -> (i1, index)
%84:2 = "dataflow.demux"(%83#0, %83#1) : (i1, index) -> (index, index)
%85 = "dataflow.invariant"(%79#1, %1) : (i1, index) -> index
%86:2 = "dataflow.gate"(%79#1, %85) : (i1, index) -> (i1, index)
%87:2 = "dataflow.demux"(%86#0, %86#1) : (i1, index) -> (index, index)
%88 = "dataflow.carry"(%79#1, %21#0, %91) : (i1, none, none) -> none
%89:2 = "dataflow.demux"(%79#1, %88) : (i1, none) -> (none, none)
%90:2 = "dataflow.sync"(%81#1, %89#1) : (none, none) -> (none, none)
%91 = "dataflow.store"(%arg2, %86#1, %83#1, %90#0) : (memref<?xindex>, index, index, none) -> none
%92 = "arith.cmpi"(%76, %77) <{predicate = 2 : i64}> : (i32, i32) -> i1
%93:2 = "dataflow.demux"(%92, %81#0) : (i1, none) -> (none, none)
%94:3 = "dataflow.sync"(%93#1, %84#0, %87#0) : (none, index, index) -> (none, index, index)
%95 = "dataflow.mux"(%92, %93#0, %94#0) : (i1, none, none) -> none
%96:2 = "dataflow.sync"(%75, %95) : (none, none) -> (none, none)
%97:2 = "dataflow.sync"(%69#0, %89#0) : (none, none) -> (none, none)
"dataflow.graph.return"(%96#0, %97#0) <{operandSegmentSizes = array<i32: 0, 0, 0, 2>}> : (none, none) -> ()
}) : () -> ()
}) : () -> ()
| |
292 | accepted | PASS | input · generic input · output · check report |
293 | accepted | PASS | input · generic input · output · check report |
294 | accepted | PASS | input · generic input · output · check report |
295 | accepted | PASS | input · generic input · output · check report |
296 | accepted | PASS | input · generic input · output · check report |
297 | accepted | PASS | input · generic input · output · check report |
298 | rejected | input · stderr<stdin>:11:7: error: loom-lower-graph-memory: parallel addresses have no comparable lane projection; address rank is 1
scf.parallel (%iv0) = (%zero) to (%two) step (%one) {
^
<stdin>:11:7: note: see current operation:
"scf.parallel"(%0, %2, %1) <{operandSegmentSizes = array<i32: 1, 1, 1, 0>}> ({
^bb0(%arg3: index):
"scf.forall"() <{operandSegmentSizes = array<i32: 0, 0, 0, 0>, staticLowerBound = array<i64: 0>, staticStep = array<i64: 1>, staticUpperBound = array<i64: 2>}> ({
^bb0(%arg4: index):
%3 = "arith.muli"(%arg3, %2) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
%4 = "arith.addi"(%3, %arg4) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
%5 = "memref.load"(%arg2, %4) : (memref<?xindex>, index) -> index
%6 = "arith.addi"(%5, %1) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
"memref.store"(%6, %arg2, %4) : (index, memref<?xindex>, index) -> ()
"scf.forall.in_parallel"() ({
^bb0:
}) : () -> ()
}) : () -> ()
"scf.reduce"() : () -> ()
}) : (index, index, index) -> ()
| |
299 | accepted | PASS | input · generic input · output · check report |
300 | accepted | PASS | input · generic input · output · check report |
301 | accepted | PASS | input · generic input · output · check report |
302 | rejected | input · stderr<stdin>:15:7: error: loom-lower-graph-memory: parallel addresses have no comparable lane projection; address rank is 1
scf.forall (%iv0) in (2) {
^
<stdin>:15:7: note: see current operation:
"scf.forall"() <{operandSegmentSizes = array<i32: 0, 0, 0, 0>, staticLowerBound = array<i64: 0>, staticStep = array<i64: 1>, staticUpperBound = array<i64: 2>}> ({
^bb0(%arg3: index):
"scf.forall"() <{operandSegmentSizes = array<i32: 0, 0, 0, 0>, staticLowerBound = array<i64: 0>, staticStep = array<i64: 1>, staticUpperBound = array<i64: 2>}> ({
^bb0(%arg6: index):
%8 = "arith.muli"(%arg3, %2) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
%9 = "arith.addi"(%8, %arg6) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
"memref.store"(%1, %arg2, %9) : (index, memref<?xindex>, index) -> ()
"scf.forall.in_parallel"() ({
^bb0:
}) : () -> ()
}) : () -> ()
%3 = "scf.while"(%0) ({
^bb0(%arg5: index):
%7 = "arith.cmpi"(%arg5, %2) <{predicate = 6 : i64}> : (index, index) -> i1
"scf.condition"(%7, %arg5) : (i1, index) -> ()
}, {
^bb0(%arg4: index):
%4 = "memref.load"(%arg2, %arg3) : (memref<?xindex>, index) -> index
%5 = "arith.addi"(%4, %1) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
"memref.store"(%5, %arg2, %arg3) : (index, memref<?xindex>, index) -> ()
%6 = "arith.addi"(%arg4, %1) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
"scf.yield"(%6) : (index) -> ()
}) : (index) -> index
"scf.forall.in_parallel"() ({
^bb0:
}) : () -> ()
}) : () -> ()
| |
303 | accepted | PASS | input · generic input · output · check report |
304 | accepted | PASS | input · generic input · output · check report |
305 | accepted | PASS | input · generic input · output · check report |
306 | accepted | PASS | input · generic input · output · check report |
307 | accepted | PASS | input · generic input · output · check report |
308 | accepted | PASS | input · generic input · output · check report |
309 | accepted | PASS | input · generic input · output · check report |
310 | accepted | PASS | input · generic input · output · check report |
311 | accepted | PASS | input · generic input · output · check report |
312 | accepted | PASS | input · generic input · output · check report |
313 | accepted | PASS | input · generic input · output · check report |
314 | accepted | PASS | input · generic input · output · check report |
315 | accepted | PASS | input · generic input · output · check report |
316 | accepted | PASS | input · generic input · output · check report |
317 | accepted | PASS | input · generic input · output · check report |
318 | accepted | PASS | input · generic input · output · check report |
319 | accepted | PASS | input · generic input · output · check report |
320 | accepted | PASS | input · generic input · output · check report |
321 | accepted | PASS | input · generic input · output · check report |
322 | accepted | PASS | input · generic input · output · check report |
323 | accepted | PASS | input · generic input · output · check report |
324 | accepted | PASS | input · generic input · output · check report |
325 | accepted | PASS | input · generic input · output · check report |
326 | accepted | PASS | input · generic input · output · check report |
327 | accepted | PASS | input · generic input · output · check report |
328 | accepted | PASS | input · generic input · output · check report |
329 | accepted | PASS | input · generic input · output · check report |
330 | accepted | PASS | input · generic input · output · check report |
331 | accepted | PASS | input · generic input · output · check report |
332 | accepted | PASS | input · generic input · output · check report |
333 | accepted | PASS | input · generic input · output · check report |
334 | accepted | PASS | input · generic input · output · check report |
335 | accepted | PASS | input · generic input · output · check report |
336 | rejected | input · stderr<stdin>:11:7: error: loom-lower-graph-memory: parallel addresses have no comparable lane projection; address rank is 1
scf.parallel (%iv0) = (%zero) to (%two) step (%one) {
^
<stdin>:11:7: note: see current operation:
"scf.parallel"(%0, %2, %1) <{operandSegmentSizes = array<i32: 1, 1, 1, 0>}> ({
^bb0(%arg5: index):
"scf.parallel"(%0, %2, %1) <{operandSegmentSizes = array<i32: 1, 1, 1, 0>}> ({
^bb0(%arg6: index):
%5 = "arith.muli"(%arg5, %2) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
%6 = "arith.addi"(%5, %arg6) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
%7 = "memref.load"(%arg2, %6) : (memref<?xindex>, index) -> index
%8 = "arith.addi"(%7, %1) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
"memref.store"(%8, %arg2, %6) : (index, memref<?xindex>, index) -> ()
"scf.reduce"() : () -> ()
}) : (index, index, index) -> ()
"memref.store"(%1, %arg2, %arg5) : (index, memref<?xindex>, index) -> ()
"scf.reduce"() : () -> ()
}) : (index, index, index) -> ()
| |
337 | accepted | PASS | input · generic input · output · check report |
338 | accepted | PASS | input · generic input · output · check report |
339 | accepted | PASS | input · generic input · output · check report |
340 | accepted | PASS | input · generic input · output · check report |
341 | accepted | PASS | input · generic input · output · check report |
342 | accepted | PASS | input · generic input · output · check report |
343 | accepted | PASS | input · generic input · output · check report |
344 | accepted | PASS | input · generic input · output · check report |
345 | accepted | PASS | input · generic input · output · check report |
346 | accepted | PASS | input · generic input · output · check report |
347 | accepted | PASS | input · generic input · output · check report |
348 | accepted | PASS | input · generic input · output · check report |
349 | accepted | PASS | input · generic input · output · check report |
350 | accepted | PASS | input · generic input · output · check report |
351 | accepted | PASS | input · generic input · output · check report |
352 | accepted | PASS | input · generic input · output · check report |
353 | accepted | PASS | input · generic input · output · check report |
354 | accepted | PASS | input · generic input · output · check report |
355 | accepted | PASS | input · generic input · output · check report |
356 | rejected | input · stderr<stdin>:15:7: error: loom-lower-graph-memory: parallel addresses have no comparable lane projection; address rank is 1
scf.parallel (%iv0) = (%zero) to (%two) step (%one) {
^
<stdin>:15:7: note: see current operation:
"scf.parallel"(%0, %2, %1) <{operandSegmentSizes = array<i32: 1, 1, 1, 0>}> ({
^bb0(%arg3: index):
"scf.forall"() <{operandSegmentSizes = array<i32: 0, 0, 0, 0>, staticLowerBound = array<i64: 0>, staticStep = array<i64: 1>, staticUpperBound = array<i64: 2>}> ({
^bb0(%arg4: index):
%3 = "arith.muli"(%arg3, %2) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
%4 = "arith.addi"(%3, %arg4) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
%5 = "memref.load"(%arg2, %4) : (memref<?xindex>, index) -> index
%6 = "arith.addi"(%5, %1) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
"memref.store"(%6, %arg2, %4) : (index, memref<?xindex>, index) -> ()
"scf.forall.in_parallel"() ({
^bb0:
}) : () -> ()
}) : () -> ()
"scf.reduce"() : () -> ()
}) : (index, index, index) -> ()
| |
357 | rejected | input · stderr<stdin>:11:7: error: loom-lower-graph-memory: parallel addresses have no comparable lane projection; address rank is 1
scf.forall (%iv0) in (2) {
^
<stdin>:11:7: note: see current operation:
"scf.forall"() <{operandSegmentSizes = array<i32: 0, 0, 0, 0>, staticLowerBound = array<i64: 0>, staticStep = array<i64: 1>, staticUpperBound = array<i64: 2>}> ({
^bb0(%arg4: index):
"scf.parallel"(%0, %2, %1) <{operandSegmentSizes = array<i32: 1, 1, 1, 0>}> ({
^bb0(%arg5: index):
%9 = "arith.muli"(%arg4, %2) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
%10 = "arith.addi"(%9, %arg5) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
"memref.store"(%1, %arg2, %10) : (index, memref<?xindex>, index) -> ()
"scf.reduce"() : () -> ()
}) : (index, index, index) -> ()
%7 = "memref.load"(%arg2, %arg4) : (memref<?xindex>, index) -> index
%8 = "arith.addi"(%7, %1) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
"memref.store"(%8, %arg2, %arg4) : (index, memref<?xindex>, index) -> ()
"scf.forall.in_parallel"() ({
^bb0:
}) : () -> ()
}) : () -> ()
| |
358 | accepted | PASS | input · generic input · output · check report |
359 | accepted | PASS | input · generic input · output · check report |
360 | accepted | PASS | input · generic input · output · check report |
361 | accepted | PASS | input · generic input · output · check report |
362 | accepted | PASS | input · generic input · output · check report |
363 | accepted | PASS | input · generic input · output · check report |
364 | accepted | PASS | input · generic input · output · check report |
365 | accepted | PASS | input · generic input · output · check report |
366 | accepted | PASS | input · generic input · output · check report |
367 | accepted | PASS | input · generic input · output · check report |
368 | accepted | PASS | input · generic input · output · check report |
369 | accepted | PASS | input · generic input · output · check report |
370 | accepted | PASS | input · generic input · output · check report |
371 | accepted | PASS | input · generic input · output · check report |
372 | rejected | input · stderr<stdin>:0:0: error: canonical Dataflow publication failed: graph @g_thread_0 completion witness #0 is not statically one-shot
<stdin>:0:0: note: see current operation:
"builtin.module"() ({
"dataflow.thread"() <{domain = #dataflow.thread_domain<dense>, function_type = (index, memref<?xindex>) -> (), sym_name = "thread_0", sym_visibility = "private"}> ({
^bb0(%arg9: index, %arg10: memref<?xindex>, %arg11: none):
%145 = "dataflow.graph.launch"(%arg11, %arg9, %arg10) <{callee = @g_thread_0, operandSegmentSizes = array<i32: 1, 1, 0, 1, 0>, resultSegmentSizes = array<i32: 0, 0, 1>, source_maps = []}> : (none, index, memref<?xindex>) -> none
"dataflow.thread.yield"(%145) : (none) -> ()
}) : () -> ()
"dataflow.thread"() <{domain = #dataflow.thread_domain<dense>, function_type = (index, memref<?xindex>) -> (), sym_name = "thread_1", sym_visibility = "private"}> ({
^bb0(%arg6: index, %arg7: memref<?xindex>, %arg8: none):
%144 = "dataflow.graph.launch"(%arg8, %arg6, %arg7) <{callee = @g_thread_1, operandSegmentSizes = array<i32: 1, 1, 0, 1, 0>, resultSegmentSizes = array<i32: 0, 0, 1>, source_maps = []}> : (none, index, memref<?xindex>) -> none
"dataflow.thread.yield"(%144) : (none) -> ()
}) : () -> ()
"dataflow.graph"() <{arg_attrs = [{}, {llvm.noalias}], function_type = (index, memref<?xindex>) -> (), input_segments = array<i32: 1, 0, 1>, result_segments = array<i32: 0, 0, 0>, sym_name = "g_thread_0", sym_visibility = "private"}> ({
^bb0(%arg3: none, %arg4: index, %arg5: memref<?xindex>):
%3 = "dataflow.constant"(%arg3) <{const_value = 0 : index}> : (none) -> index
%4 = "dataflow.constant"(%arg3) <{const_value = 1 : index}> : (none) -> index
%5 = "dataflow.constant"(%arg3) <{const_value = 2 : index}> : (none) -> index
%6 = "arith.index_cast"(%3) : (index) -> i32
%7 = "arith.index_cast"(%5) : (index) -> i32
%8 = "arith.index_cast"(%4) : (index) -> i32
%9:2 = "dataflow.stream"(%6, %7, %8) <{predicate = 2 : i64, step_kind = 0 : i32}> : (i32, i32, i32) -> (i32, i1)
%10 = "dataflow.carry"(%9#1, %arg3, %11#1) : (i1, none, none) -> none
%11:2 = "dataflow.demux"(%9#1, %10) : (i1, none) -> (none, none)
%12 = "dataflow.invariant"(%9#1, %4) : (i1, index) -> index
%13:2 = "dataflow.gate"(%9#1, %12) : (i1, index) -> (i1, index)
%14:2 = "dataflow.demux"(%13#0, %13#1) : (i1, index) -> (index, index)
%15 = "dataflow.invariant"(%9#1, %3) : (i1, index) -> index
%16:2 = "dataflow.gate"(%9#1, %15) : (i1, index) -> (i1, index)
%17:2 = "dataflow.demux"(%16#0, %16#1) : (i1, index) -> (index, index)
%18 = "dataflow.carry"(%9#1, %arg3, %23) : (i1, none, none) -> none
%19 = "dataflow.carry"(%9#1, %arg3, %23) : (i1, none, none) -> none
%20:2 = "dataflow.demux"(%9#1, %18) : (i1, none) -> (none, none)
%21:2 = "dataflow.demux"(%9#1, %19) : (i1, none) -> (none, none)
%22:2 = "dataflow.sync"(%11#1, %21#1) : (none, none) -> (none, none)
%23 = "dataflow.store"(%arg5, %16#1, %13#1, %22#0) : (memref<?xindex>, index, index, none) -> none
%24 = "arith.cmpi"(%6, %7) <{predicate = 2 : i64}> : (i32, i32) -> i1
%25:2 = "dataflow.demux"(%24, %11#0) : (i1, none) -> (none, none)
%26:3 = "dataflow.sync"(%25#1, %14#0, %17#0) : (none, index, index) -> (none, index, index)
%27 = "dataflow.mux"(%24, %25#0, %26#0) : (i1, none, none) -> none
%28 = "arith.index_cast"(%3) : (index) -> i32
%29 = "arith.index_cast"(%5) : (index) -> i32
%30 = "arith.index_cast"(%4) : (index) -> i32
%31:2 = "dataflow.stream"(%28, %29, %30) <{predicate = 2 : i64, step_kind = 0 : i32}> : (i32, i32, i32) -> (i32, i1)
%32 = "dataflow.carry"(%31#1, %27, %33#1) : (i1, none, none) -> none
%33:2 = "dataflow.demux"(%31#1, %32) : (i1, none) -> (none, none)
%34 = "dataflow.invariant"(%31#1, %3) : (i1, index) -> index
%35:2 = "dataflow.gate"(%31#1, %34) : (i1, index) -> (i1, index)
%36:2 = "dataflow.demux"(%35#0, %35#1) : (i1, index) -> (index, index)
%37 = "dataflow.invariant"(%31#1, %4) : (i1, index) -> index
%38:2 = "dataflow.gate"(%31#1, %37) : (i1, index) -> (i1, index)
%39:2 = "dataflow.demux"(%38#0, %38#1) : (i1, index) -> (index, index)
%40 = "dataflow.carry"(%31#1, %20#0, %48) : (i1, none, none) -> none
%41 = "dataflow.carry"(%31#1, %21#0, %48) : (i1, none, none) -> none
%42:2 = "dataflow.demux"(%31#1, %40) : (i1, none) -> (none, none)
%43:2 = "dataflow.demux"(%31#1, %41) : (i1, none) -> (none, none)
%44:2 = "dataflow.sync"(%33#1, %42#1) : (none, none) -> (none, none)
%45:2 = "dataflow.load"(%arg5, %35#1, %44#0) : (memref<?xindex>, index, none) -> (index, none)
%46:2 = "dataflow.sync"(%43#1, %45#1) : (none, none) -> (none, none)
%47 = "arith.addi"(%45#0, %38#1) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
%48 = "dataflow.store"(%arg5, %35#1, %47, %46#0) : (memref<?xindex>, index, index, none) -> none
%49 = "arith.cmpi"(%28, %29) <{predicate = 2 : i64}> : (i32, i32) -> i1
%50:2 = "dataflow.demux"(%49, %33#0) : (i1, none) -> (none, none)
%51:3 = "dataflow.sync"(%50#1, %36#0, %39#0) : (none, index, index) -> (none, index, index)
%52 = "dataflow.mux"(%49, %50#0, %51#0) : (i1, none, none) -> none
%53 = "arith.index_cast"(%3) : (index) -> i32
%54 = "arith.index_cast"(%5) : (index) -> i32
%55 = "arith.index_cast"(%4) : (index) -> i32
%56:2 = "dataflow.stream"(%53, %54, %55) <{predicate = 2 : i64, step_kind = 0 : i32}> : (i32, i32, i32) -> (i32, i1)
%57 = "dataflow.carry"(%56#1, %arg3, %58#1) : (i1, none, none) -> none
%58:2 = "dataflow.demux"(%56#1, %57) : (i1, none) -> (none, none)
%59 = "dataflow.invariant"(%56#1, %4) : (i1, index) -> index
%60:2 = "dataflow.gate"(%56#1, %59) : (i1, index) -> (i1, index)
%61:2 = "dataflow.demux"(%60#0, %60#1) : (i1, index) -> (index, index)
%62 = "dataflow.invariant"(%56#1, %4) : (i1, index) -> index
%63:2 = "dataflow.gate"(%56#1, %62) : (i1, index) -> (i1, index)
%64:2 = "dataflow.demux"(%63#0, %63#1) : (i1, index) -> (index, index)
%65 = "dataflow.carry"(%56#1, %arg3, %70) : (i1, none, none) -> none
%66 = "dataflow.carry"(%56#1, %arg3, %70) : (i1, none, none) -> none
%67:2 = "dataflow.demux"(%56#1, %65) : (i1, none) -> (none, none)
%68:2 = "dataflow.demux"(%56#1, %66) : (i1, none) -> (none, none)
%69:2 = "dataflow.sync"(%58#1, %68#1) : (none, none) -> (none, none)
%70 = "dataflow.store"(%arg5, %63#1, %60#1, %69#0) : (memref<?xindex>, index, index, none) -> none
%71 = "arith.cmpi"(%53, %54) <{predicate = 2 : i64}> : (i32, i32) -> i1
%72:2 = "dataflow.demux"(%71, %58#0) : (i1, none) -> (none, none)
%73:3 = "dataflow.sync"(%72#1, %61#0, %64#0) : (none, index, index) -> (none, index, index)
%74 = "dataflow.mux"(%71, %72#0, %73#0) : (i1, none, none) -> none
%75 = "arith.index_cast"(%3) : (index) -> i32
%76 = "arith.index_cast"(%5) : (index) -> i32
%77 = "arith.index_cast"(%4) : (index) -> i32
%78:2 = "dataflow.stream"(%75, %76, %77) <{predicate = 2 : i64, step_kind = 0 : i32}> : (i32, i32, i32) -> (i32, i1)
%79 = "dataflow.carry"(%78#1, %74, %80#1) : (i1, none, none) -> none
%80:2 = "dataflow.demux"(%78#1, %79) : (i1, none) -> (none, none)
%81 = "dataflow.invariant"(%78#1, %4) : (i1, index) -> index
%82:2 = "dataflow.gate"(%78#1, %81) : (i1, index) -> (i1, index)
%83:2 = "dataflow.demux"(%82#0, %82#1) : (i1, index) -> (index, index)
%84 = "dataflow.invariant"(%78#1, %4) : (i1, index) -> index
%85:2 = "dataflow.gate"(%78#1, %84) : (i1, index) -> (i1, index)
%86:2 = "dataflow.demux"(%85#0, %85#1) : (i1, index) -> (index, index)
%87 = "dataflow.carry"(%78#1, %67#0, %95) : (i1, none, none) -> none
%88 = "dataflow.carry"(%78#1, %68#0, %95) : (i1, none, none) -> none
%89:2 = "dataflow.demux"(%78#1, %87) : (i1, none) -> (none, none)
%90:2 = "dataflow.demux"(%78#1, %88) : (i1, none) -> (none, none)
%91:2 = "dataflow.sync"(%80#1, %89#1) : (none, none) -> (none, none)
%92:2 = "dataflow.load"(%arg5, %82#1, %91#0) : (memref<?xindex>, index, none) -> (index, none)
%93:2 = "dataflow.sync"(%90#1, %92#1) : (none, none) -> (none, none)
%94 = "arith.addi"(%92#0, %85#1) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
%95 = "dataflow.store"(%arg5, %82#1, %94, %93#0) : (memref<?xindex>, index, index, none) -> none
%96 = "arith.cmpi"(%75, %76) <{predicate = 2 : i64}> : (i32, i32) -> i1
%97:2 = "dataflow.demux"(%96, %80#0) : (i1, none) -> (none, none)
%98:3 = "dataflow.sync"(%97#1, %83#0, %86#0) : (none, index, index) -> (none, index, index)
%99 = "dataflow.mux"(%96, %97#0, %98#0) : (i1, none, none) -> none
%100:2 = "dataflow.sync"(%52, %99) : (none, none) -> (none, none)
%101:2 = "dataflow.sync"(%43#0, %90#0) : (none, none) -> (none, none)
%102 = "arith.index_cast"(%3) : (index) -> i32
%103 = "arith.index_cast"(%5) : (index) -> i32
%104 = "arith.index_cast"(%4) : (index) -> i32
%105:2 = "dataflow.stream"(%102, %103, %104) <{predicate = 2 : i64, step_kind = 0 : i32}> : (i32, i32, i32) -> (i32, i1)
%106 = "dataflow.carry"(%105#1, %100#0, %107#1) : (i1, none, none) -> none
%107:2 = "dataflow.demux"(%105#1, %106) : (i1, none) -> (none, none)
%108 = "dataflow.invariant"(%105#1, %4) : (i1, index) -> index
%109:2 = "dataflow.gate"(%105#1, %108) : (i1, index) -> (i1, index)
%110:2 = "dataflow.demux"(%109#0, %109#1) : (i1, index) -> (index, index)
%111 = "dataflow.invariant"(%105#1, %3) : (i1, index) -> index
%112:2 = "dataflow.gate"(%105#1, %111) : (i1, index) -> (i1, index)
%113:2 = "dataflow.demux"(%112#0, %112#1) : (i1, index) -> (index, index)
%114 = "dataflow.carry"(%105#1, %101#0, %117) : (i1, none, none) -> none
%115:2 = "dataflow.demux"(%105#1, %114) : (i1, none) -> (none, none)
%116:2 = "dataflow.sync"(%107#1, %115#1) : (none, none) -> (none, none)
%117 = "dataflow.store"(%arg5, %112#1, %109#1, %116#0) : (memref<?xindex>, index, index, none) -> none
%118 = "arith.cmpi"(%102, %103) <{predicate = 2 : i64}> : (i32, i32) -> i1
%119:2 = "dataflow.demux"(%118, %107#0) : (i1, none) -> (none, none)
%120:3 = "dataflow.sync"(%119#1, %110#0, %113#0) : (none, index, index) -> (none, index, index)
%121 = "dataflow.mux"(%118, %119#0, %120#0) : (i1, none, none) -> none
%122 = "arith.index_cast"(%3) : (index) -> i32
%123 = "arith.index_cast"(%5) : (index) -> i32
%124 = "arith.index_cast"(%4) : (index) -> i32
%125:2 = "dataflow.stream"(%122, %123, %124) <{predicate = 2 : i64, step_kind = 0 : i32}> : (i32, i32, i32) -> (i32, i1)
%126 = "dataflow.carry"(%125#1, %100#0, %127#1) : (i1, none, none) -> none
%127:2 = "dataflow.demux"(%125#1, %126) : (i1, none) -> (none, none)
%128 = "dataflow.invariant"(%125#1, %4) : (i1, index) -> index
%129:2 = "dataflow.gate"(%125#1, %128) : (i1, index) -> (i1, index)
%130:2 = "dataflow.demux"(%129#0, %129#1) : (i1, index) -> (index, index)
%131 = "dataflow.invariant"(%125#1, %4) : (i1, index) -> index
%132:2 = "dataflow.gate"(%125#1, %131) : (i1, index) -> (i1, index)
%133:2 = "dataflow.demux"(%132#0, %132#1) : (i1, index) -> (index, index)
%134 = "dataflow.carry"(%125#1, %101#0, %137) : (i1, none, none) -> none
%135:2 = "dataflow.demux"(%125#1, %134) : (i1, none) -> (none, none)
%136:2 = "dataflow.sync"(%127#1, %135#1) : (none, none) -> (none, none)
%137 = "dataflow.store"(%arg5, %132#1, %129#1, %136#0) : (memref<?xindex>, index, index, none) -> none
%138 = "arith.cmpi"(%122, %123) <{predicate = 2 : i64}> : (i32, i32) -> i1
%139:2 = "dataflow.demux"(%138, %127#0) : (i1, none) -> (none, none)
%140:3 = "dataflow.sync"(%139#1, %130#0, %133#0) : (none, index, index) -> (none, index, index)
%141 = "dataflow.mux"(%138, %139#0, %140#0) : (i1, none, none) -> none
%142:2 = "dataflow.sync"(%121, %141) : (none, none) -> (none, none)
%143:2 = "dataflow.sync"(%115#0, %135#0) : (none, none) -> (none, none)
"dataflow.graph.return"(%142#0, %143#0) <{operandSegmentSizes = array<i32: 0, 0, 0, 2>}> : (none, none) -> ()
}) : () -> ()
"dataflow.graph"() <{arg_attrs = [{}, {llvm.noalias}], function_type = (index, memref<?xindex>) -> (), input_segments = array<i32: 1, 0, 1>, result_segments = array<i32: 0, 0, 0>, sym_name = "g_thread_1", sym_visibility = "private"}> ({
^bb0(%arg0: none, %arg1: index, %arg2: memref<?xindex>):
%0 = "dataflow.constant"(%arg0) <{const_value = 0 : index}> : (none) -> index
%1 = "dataflow.constant"(%arg0) <{const_value = 1 : index}> : (none) -> index
%2 = "dataflow.store"(%arg2, %0, %1, %arg0) : (memref<?xindex>, index, index, none) -> none
"dataflow.graph.return"(%2) <{operandSegmentSizes = array<i32: 0, 0, 0, 1>}> : (none) -> ()
}) : () -> ()
}) : () -> ()
| |
373 | accepted | PASS | input · generic input · output · check report |
374 | accepted | PASS | input · generic input · output · check report |
375 | rejected | input · stderr<stdin>:15:7: error: loom-lower-graph-memory: parallel addresses have no comparable lane projection; address rank is 1
scf.parallel (%iv0) = (%zero) to (%two) step (%one) {
^
<stdin>:15:7: note: see current operation:
"scf.parallel"(%0, %2, %1) <{operandSegmentSizes = array<i32: 1, 1, 1, 0>}> ({
^bb0(%arg3: index):
"scf.forall"() <{operandSegmentSizes = array<i32: 0, 0, 0, 0>, staticLowerBound = array<i64: 0>, staticStep = array<i64: 1>, staticUpperBound = array<i64: 2>}> ({
^bb0(%arg4: index):
%3 = "arith.muli"(%arg3, %2) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
%4 = "arith.addi"(%3, %arg4) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
"memref.store"(%1, %arg2, %4) : (index, memref<?xindex>, index) -> ()
"scf.forall.in_parallel"() ({
^bb0:
}) : () -> ()
}) : () -> ()
"memref.store"(%1, %arg2, %arg3) : (index, memref<?xindex>, index) -> ()
"scf.reduce"() : () -> ()
}) : (index, index, index) -> ()
| |
376 | accepted | PASS | input · generic input · output · check report |
377 | accepted | PASS | input · generic input · output · check report |
378 | accepted | PASS | input · generic input · output · check report |
379 | accepted | PASS | input · generic input · output · check report |
380 | rejected | input · stderr<stdin>:0:0: error: canonical Dataflow publication failed: graph @g_thread_0 completion witness #0 is not statically one-shot
<stdin>:0:0: note: see current operation:
"builtin.module"() ({
"llvm.func"() <{CConv = #llvm.cconv<ccc>, function_type = !llvm.func<i64 (i64)>, linkage = #llvm.linkage<external>, sym_name = "imported_callable", unnamed_addr = 0 : i64, visibility_ = 0 : i64}> ({
}) : () -> ()
"func.func"() <{function_type = (i32) -> i32, sym_name = "native_callable", sym_visibility = "private"}> ({
^bb0(%arg12: i32):
"func.return"(%arg12) : (i32) -> ()
}) : () -> ()
"dataflow.thread"() <{domain = #dataflow.thread_domain<dense>, function_type = (index, memref<?xindex>) -> (), sym_name = "thread_0", sym_visibility = "private"}> ({
^bb0(%arg9: index, %arg10: memref<?xindex>, %arg11: none):
%170 = "dataflow.graph.launch"(%arg11, %arg9, %arg10) <{callee = @g_thread_0, operandSegmentSizes = array<i32: 1, 1, 0, 1, 0>, resultSegmentSizes = array<i32: 0, 0, 1>, source_maps = []}> : (none, index, memref<?xindex>) -> none
"dataflow.thread.yield"(%170) : (none) -> ()
}) : () -> ()
"dataflow.thread"() <{domain = #dataflow.thread_domain<dense>, function_type = (index, memref<?xindex>) -> (), sym_name = "thread_1", sym_visibility = "private"}> ({
^bb0(%arg6: index, %arg7: memref<?xindex>, %arg8: none):
%169 = "dataflow.graph.launch"(%arg8, %arg6, %arg7) <{callee = @g_thread_1, operandSegmentSizes = array<i32: 1, 1, 0, 1, 0>, resultSegmentSizes = array<i32: 0, 0, 1>, source_maps = []}> : (none, index, memref<?xindex>) -> none
"dataflow.thread.yield"(%169) : (none) -> ()
}) : () -> ()
"dataflow.graph"() <{arg_attrs = [{}, {llvm.noalias}], function_type = (index, memref<?xindex>) -> (), input_segments = array<i32: 1, 0, 1>, result_segments = array<i32: 0, 0, 0>, sym_name = "g_thread_0", sym_visibility = "private"}> ({
^bb0(%arg3: none, %arg4: index, %arg5: memref<?xindex>):
%11 = "dataflow.constant"(%arg3) <{const_value = 0 : index}> : (none) -> index
%12 = "dataflow.constant"(%arg3) <{const_value = 1 : index}> : (none) -> index
%13 = "dataflow.constant"(%arg3) <{const_value = 2 : index}> : (none) -> index
%14 = "arith.addi"(%138#0, %12) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
%15 = "arith.addi"(%164#0, %12) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
%16 = "arith.index_cast"(%11) : (index) -> i32
%17 = "arith.index_cast"(%13) : (index) -> i32
%18 = "arith.index_cast"(%12) : (index) -> i32
%19:2 = "dataflow.stream"(%16, %17, %18) <{predicate = 2 : i64, step_kind = 0 : i32}> : (i32, i32, i32) -> (i32, i1)
%20 = "dataflow.carry"(%19#1, %arg3, %21#1) : (i1, none, none) -> none
%21:2 = "dataflow.demux"(%19#1, %20) : (i1, none) -> (none, none)
%22 = "dataflow.invariant"(%19#1, %11) : (i1, index) -> index
%23:2 = "dataflow.gate"(%19#1, %22) : (i1, index) -> (i1, index)
%24:2 = "dataflow.demux"(%23#0, %23#1) : (i1, index) -> (index, index)
%25 = "dataflow.invariant"(%19#1, %12) : (i1, index) -> index
%26:2 = "dataflow.gate"(%19#1, %25) : (i1, index) -> (i1, index)
%27:2 = "dataflow.demux"(%26#0, %26#1) : (i1, index) -> (index, index)
%28 = "dataflow.carry"(%19#1, %arg3, %37) : (i1, none, none) -> none
%29 = "dataflow.carry"(%19#1, %arg3, %37) : (i1, none, none) -> none
%30:2 = "dataflow.demux"(%19#1, %28) : (i1, none) -> (none, none)
%31:2 = "dataflow.demux"(%19#1, %29) : (i1, none) -> (none, none)
%32:2 = "dataflow.sync"(%21#1, %30#1) : (none, none) -> (none, none)
%33:2 = "dataflow.load"(%arg5, %23#1, %32#0) : (memref<?xindex>, index, none) -> (index, none)
%34:2 = "dataflow.sync"(%31#1, %33#1) : (none, none) -> (none, none)
%35 = "arith.addi"(%33#0, %26#1) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
%36 = "dataflow.store"(%arg5, %23#1, %35, %34#0) : (memref<?xindex>, index, index, none) -> none
%37 = "dataflow.store"(%arg5, %23#1, %26#1, %36) : (memref<?xindex>, index, index, none) -> none
%38 = "arith.cmpi"(%16, %17) <{predicate = 2 : i64}> : (i32, i32) -> i1
%39:2 = "dataflow.demux"(%38, %21#0) : (i1, none) -> (none, none)
%40:3 = "dataflow.sync"(%39#1, %24#0, %27#0) : (none, index, index) -> (none, index, index)
%41 = "dataflow.mux"(%38, %39#0, %40#0) : (i1, none, none) -> none
%42 = "arith.index_cast"(%11) : (index) -> i32
%43 = "arith.index_cast"(%13) : (index) -> i32
%44 = "arith.index_cast"(%12) : (index) -> i32
%45:2 = "dataflow.stream"(%42, %43, %44) <{predicate = 2 : i64, step_kind = 0 : i32}> : (i32, i32, i32) -> (i32, i1)
%46 = "dataflow.carry"(%45#1, %41, %47#1) : (i1, none, none) -> none
%47:2 = "dataflow.demux"(%45#1, %46) : (i1, none) -> (none, none)
%48 = "dataflow.invariant"(%45#1, %12) : (i1, index) -> index
%49:2 = "dataflow.gate"(%45#1, %48) : (i1, index) -> (i1, index)
%50:2 = "dataflow.demux"(%49#0, %49#1) : (i1, index) -> (index, index)
%51 = "dataflow.invariant"(%45#1, %11) : (i1, index) -> index
%52:2 = "dataflow.gate"(%45#1, %51) : (i1, index) -> (i1, index)
%53:2 = "dataflow.demux"(%52#0, %52#1) : (i1, index) -> (index, index)
%54 = "dataflow.carry"(%45#1, %30#0, %59) : (i1, none, none) -> none
%55 = "dataflow.carry"(%45#1, %31#0, %59) : (i1, none, none) -> none
%56:2 = "dataflow.demux"(%45#1, %54) : (i1, none) -> (none, none)
%57:2 = "dataflow.demux"(%45#1, %55) : (i1, none) -> (none, none)
%58:2 = "dataflow.sync"(%47#1, %57#1) : (none, none) -> (none, none)
%59 = "dataflow.store"(%arg5, %52#1, %49#1, %58#0) : (memref<?xindex>, index, index, none) -> none
%60 = "arith.cmpi"(%42, %43) <{predicate = 2 : i64}> : (i32, i32) -> i1
%61:2 = "dataflow.demux"(%60, %47#0) : (i1, none) -> (none, none)
%62:3 = "dataflow.sync"(%61#1, %50#0, %53#0) : (none, index, index) -> (none, index, index)
%63 = "dataflow.mux"(%60, %61#0, %62#0) : (i1, none, none) -> none
%64 = "arith.index_cast"(%11) : (index) -> i32
%65 = "arith.index_cast"(%13) : (index) -> i32
%66 = "arith.index_cast"(%12) : (index) -> i32
%67:2 = "dataflow.stream"(%64, %65, %66) <{predicate = 2 : i64, step_kind = 0 : i32}> : (i32, i32, i32) -> (i32, i1)
%68 = "dataflow.carry"(%67#1, %arg3, %69#1) : (i1, none, none) -> none
%69:2 = "dataflow.demux"(%67#1, %68) : (i1, none) -> (none, none)
%70 = "dataflow.invariant"(%67#1, %12) : (i1, index) -> index
%71:2 = "dataflow.gate"(%67#1, %70) : (i1, index) -> (i1, index)
%72:2 = "dataflow.demux"(%71#0, %71#1) : (i1, index) -> (index, index)
%73 = "dataflow.invariant"(%67#1, %12) : (i1, index) -> index
%74:2 = "dataflow.gate"(%67#1, %73) : (i1, index) -> (i1, index)
%75:2 = "dataflow.demux"(%74#0, %74#1) : (i1, index) -> (index, index)
%76 = "dataflow.carry"(%67#1, %arg3, %85) : (i1, none, none) -> none
%77 = "dataflow.carry"(%67#1, %arg3, %85) : (i1, none, none) -> none
%78:2 = "dataflow.demux"(%67#1, %76) : (i1, none) -> (none, none)
%79:2 = "dataflow.demux"(%67#1, %77) : (i1, none) -> (none, none)
%80:2 = "dataflow.sync"(%69#1, %78#1) : (none, none) -> (none, none)
%81:2 = "dataflow.load"(%arg5, %71#1, %80#0) : (memref<?xindex>, index, none) -> (index, none)
%82:2 = "dataflow.sync"(%79#1, %81#1) : (none, none) -> (none, none)
%83 = "arith.addi"(%81#0, %74#1) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
%84 = "dataflow.store"(%arg5, %71#1, %83, %82#0) : (memref<?xindex>, index, index, none) -> none
%85 = "dataflow.store"(%arg5, %71#1, %74#1, %84) : (memref<?xindex>, index, index, none) -> none
%86 = "arith.cmpi"(%64, %65) <{predicate = 2 : i64}> : (i32, i32) -> i1
%87:2 = "dataflow.demux"(%86, %69#0) : (i1, none) -> (none, none)
%88:3 = "dataflow.sync"(%87#1, %72#0, %75#0) : (none, index, index) -> (none, index, index)
%89 = "dataflow.mux"(%86, %87#0, %88#0) : (i1, none, none) -> none
%90 = "arith.index_cast"(%11) : (index) -> i32
%91 = "arith.index_cast"(%13) : (index) -> i32
%92 = "arith.index_cast"(%12) : (index) -> i32
%93:2 = "dataflow.stream"(%90, %91, %92) <{predicate = 2 : i64, step_kind = 0 : i32}> : (i32, i32, i32) -> (i32, i1)
%94 = "dataflow.carry"(%93#1, %89, %95#1) : (i1, none, none) -> none
%95:2 = "dataflow.demux"(%93#1, %94) : (i1, none) -> (none, none)
%96 = "dataflow.invariant"(%93#1, %12) : (i1, index) -> index
%97:2 = "dataflow.gate"(%93#1, %96) : (i1, index) -> (i1, index)
%98:2 = "dataflow.demux"(%97#0, %97#1) : (i1, index) -> (index, index)
%99 = "dataflow.invariant"(%93#1, %12) : (i1, index) -> index
%100:2 = "dataflow.gate"(%93#1, %99) : (i1, index) -> (i1, index)
%101:2 = "dataflow.demux"(%100#0, %100#1) : (i1, index) -> (index, index)
%102 = "dataflow.carry"(%93#1, %78#0, %107) : (i1, none, none) -> none
%103 = "dataflow.carry"(%93#1, %79#0, %107) : (i1, none, none) -> none
%104:2 = "dataflow.demux"(%93#1, %102) : (i1, none) -> (none, none)
%105:2 = "dataflow.demux"(%93#1, %103) : (i1, none) -> (none, none)
%106:2 = "dataflow.sync"(%95#1, %105#1) : (none, none) -> (none, none)
%107 = "dataflow.store"(%arg5, %100#1, %97#1, %106#0) : (memref<?xindex>, index, index, none) -> none
%108 = "arith.cmpi"(%90, %91) <{predicate = 2 : i64}> : (i32, i32) -> i1
%109:2 = "dataflow.demux"(%108, %95#0) : (i1, none) -> (none, none)
%110:3 = "dataflow.sync"(%109#1, %98#0, %101#0) : (none, index, index) -> (none, index, index)
%111 = "dataflow.mux"(%108, %109#0, %110#0) : (i1, none, none) -> none
%112:2 = "dataflow.sync"(%63, %111) : (none, none) -> (none, none)
%113:2 = "dataflow.sync"(%56#0, %104#0) : (none, none) -> (none, none)
%114:2 = "dataflow.sync"(%57#0, %105#0) : (none, none) -> (none, none)
%115 = "arith.index_cast"(%11) : (index) -> i32
%116 = "arith.index_cast"(%13) : (index) -> i32
%117 = "arith.index_cast"(%12) : (index) -> i32
%118:2 = "dataflow.stream"(%115, %116, %117) <{predicate = 2 : i64, step_kind = 0 : i32}> : (i32, i32, i32) -> (i32, i1)
%119 = "dataflow.carry"(%118#1, %112#0, %120#1) : (i1, none, none) -> none
%120:2 = "dataflow.demux"(%118#1, %119) : (i1, none) -> (none, none)
%121 = "dataflow.invariant"(%118#1, %12) : (i1, index) -> index
%122:2 = "dataflow.gate"(%118#1, %121) : (i1, index) -> (i1, index)
%123:2 = "dataflow.demux"(%122#0, %122#1) : (i1, index) -> (index, index)
%124 = "dataflow.invariant"(%118#1, %11) : (i1, index) -> index
%125:2 = "dataflow.gate"(%118#1, %124) : (i1, index) -> (i1, index)
%126:2 = "dataflow.demux"(%125#0, %125#1) : (i1, index) -> (index, index)
%127 = "dataflow.carry"(%118#1, %113#0, %132) : (i1, none, none) -> none
%128 = "dataflow.carry"(%118#1, %114#0, %132) : (i1, none, none) -> none
%129:2 = "dataflow.demux"(%118#1, %127) : (i1, none) -> (none, none)
%130:2 = "dataflow.demux"(%118#1, %128) : (i1, none) -> (none, none)
%131:2 = "dataflow.sync"(%120#1, %130#1) : (none, none) -> (none, none)
%132 = "dataflow.store"(%arg5, %125#1, %122#1, %131#0) : (memref<?xindex>, index, index, none) -> none
%133 = "arith.cmpi"(%115, %116) <{predicate = 2 : i64}> : (i32, i32) -> i1
%134:2 = "dataflow.demux"(%133, %120#0) : (i1, none) -> (none, none)
%135:3 = "dataflow.sync"(%134#1, %123#0, %126#0) : (none, index, index) -> (none, index, index)
%136 = "dataflow.mux"(%133, %134#0, %135#0) : (i1, none, none) -> none
%137:2 = "dataflow.sync"(%136, %129#0) : (none, none) -> (none, none)
%138:2 = "dataflow.load"(%arg5, %11, %137#0) : (memref<?xindex>, index, none) -> (index, none)
%139:2 = "dataflow.sync"(%130#0, %138#1) : (none, none) -> (none, none)
%140 = "dataflow.store"(%arg5, %11, %14, %139#0) : (memref<?xindex>, index, index, none) -> none
%141 = "arith.index_cast"(%11) : (index) -> i32
%142 = "arith.index_cast"(%13) : (index) -> i32
%143 = "arith.index_cast"(%12) : (index) -> i32
%144:2 = "dataflow.stream"(%141, %142, %143) <{predicate = 2 : i64, step_kind = 0 : i32}> : (i32, i32, i32) -> (i32, i1)
%145 = "dataflow.carry"(%144#1, %112#0, %146#1) : (i1, none, none) -> none
%146:2 = "dataflow.demux"(%144#1, %145) : (i1, none) -> (none, none)
%147 = "dataflow.invariant"(%144#1, %12) : (i1, index) -> index
%148:2 = "dataflow.gate"(%144#1, %147) : (i1, index) -> (i1, index)
%149:2 = "dataflow.demux"(%148#0, %148#1) : (i1, index) -> (index, index)
%150 = "dataflow.invariant"(%144#1, %12) : (i1, index) -> index
%151:2 = "dataflow.gate"(%144#1, %150) : (i1, index) -> (i1, index)
%152:2 = "dataflow.demux"(%151#0, %151#1) : (i1, index) -> (index, index)
%153 = "dataflow.carry"(%144#1, %113#0, %158) : (i1, none, none) -> none
%154 = "dataflow.carry"(%144#1, %114#0, %158) : (i1, none, none) -> none
%155:2 = "dataflow.demux"(%144#1, %153) : (i1, none) -> (none, none)
%156:2 = "dataflow.demux"(%144#1, %154) : (i1, none) -> (none, none)
%157:2 = "dataflow.sync"(%146#1, %156#1) : (none, none) -> (none, none)
%158 = "dataflow.store"(%arg5, %151#1, %148#1, %157#0) : (memref<?xindex>, index, index, none) -> none
%159 = "arith.cmpi"(%141, %142) <{predicate = 2 : i64}> : (i32, i32) -> i1
%160:2 = "dataflow.demux"(%159, %146#0) : (i1, none) -> (none, none)
%161:3 = "dataflow.sync"(%160#1, %149#0, %152#0) : (none, index, index) -> (none, index, index)
%162 = "dataflow.mux"(%159, %160#0, %161#0) : (i1, none, none) -> none
%163:2 = "dataflow.sync"(%162, %155#0) : (none, none) -> (none, none)
%164:2 = "dataflow.load"(%arg5, %12, %163#0) : (memref<?xindex>, index, none) -> (index, none)
%165:2 = "dataflow.sync"(%156#0, %164#1) : (none, none) -> (none, none)
%166 = "dataflow.store"(%arg5, %12, %15, %165#0) : (memref<?xindex>, index, index, none) -> none
%167:2 = "dataflow.sync"(%136, %162) : (none, none) -> (none, none)
%168:2 = "dataflow.sync"(%140, %166) : (none, none) -> (none, none)
"dataflow.graph.return"(%167#0, %168#0) <{operandSegmentSizes = array<i32: 0, 0, 0, 2>}> : (none, none) -> ()
}) : () -> ()
"dataflow.graph"() <{arg_attrs = [{}, {llvm.noalias}], function_type = (index, memref<?xindex>) -> (), input_segments = array<i32: 1, 0, 1>, result_segments = array<i32: 0, 0, 0>, sym_name = "g_thread_1", sym_visibility = "private"}> ({
^bb0(%arg0: none, %arg1: index, %arg2: memref<?xindex>):
%0 = "dataflow.constant"(%arg0) <{const_value = 1 : index}> : (none) -> index
%1 = "dataflow.constant"(%arg0) <{const_value = 0 : index}> : (none) -> index
%2 = "arith.addi"(%4#0, %0) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
%3 = "arith.addi"(%7#0, %0) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
%4:2 = "dataflow.load"(%arg2, %1, %arg0) : (memref<?xindex>, index, none) -> (index, none)
%5 = "dataflow.store"(%arg2, %1, %2, %4#1) : (memref<?xindex>, index, index, none) -> none
%6 = "dataflow.store"(%arg2, %1, %0, %5) : (memref<?xindex>, index, index, none) -> none
%7:2 = "dataflow.load"(%arg2, %0, %arg0) : (memref<?xindex>, index, none) -> (index, none)
%8 = "dataflow.store"(%arg2, %0, %3, %7#1) : (memref<?xindex>, index, index, none) -> none
%9 = "dataflow.store"(%arg2, %0, %0, %8) : (memref<?xindex>, index, index, none) -> none
%10:2 = "dataflow.sync"(%6, %9) : (none, none) -> (none, none)
"dataflow.graph.return"(%10#0) <{operandSegmentSizes = array<i32: 0, 0, 0, 1>}> : (none) -> ()
}) : () -> ()
}) : () -> ()
| |
381 | accepted | PASS | input · generic input · output · check report |
382 | accepted | PASS | input · generic input · output · check report |
383 | accepted | PASS | input · generic input · output · check report |
384 | accepted | PASS | input · generic input · output · check report |
385 | accepted | PASS | input · generic input · output · check report |
386 | accepted | PASS | input · generic input · output · check report |
387 | accepted | PASS | input · generic input · output · check report |
388 | accepted | PASS | input · generic input · output · check report |
389 | accepted | PASS | input · generic input · output · check report |
390 | accepted | PASS | input · generic input · output · check report |
391 | accepted | PASS | input · generic input · output · check report |
392 | accepted | PASS | input · generic input · output · check report |
393 | accepted | PASS | input · generic input · output · check report |
394 | accepted | PASS | input · generic input · output · check report |
395 | accepted | PASS | input · generic input · output · check report |
396 | accepted | PASS | input · generic input · output · check report |
397 | accepted | PASS | input · generic input · output · check report |
398 | accepted | PASS | input · generic input · output · check report |
399 | accepted | PASS | input · generic input · output · check report |
400 | accepted | PASS | input · generic input · output · check report |
401 | accepted | PASS | input · generic input · output · check report |
402 | accepted | PASS | input · generic input · output · check report |
403 | accepted | PASS | input · generic input · output · check report |
404 | accepted | PASS | input · generic input · output · check report |
405 | accepted | PASS | input · generic input · output · check report |
406 | accepted | PASS | input · generic input · output · check report |
407 | accepted | PASS | input · generic input · output · check report |
408 | accepted | PASS | input · generic input · output · check report |
409 | accepted | PASS | input · generic input · output · check report |
410 | accepted | PASS | input · generic input · output · check report |
411 | accepted | PASS | input · generic input · output · check report |
412 | accepted | PASS | input · generic input · output · check report |
413 | accepted | PASS | input · generic input · output · check report |
414 | accepted | PASS | input · generic input · output · check report |
415 | accepted | PASS | input · generic input · output · check report |
416 | accepted | PASS | input · generic input · output · check report |
417 | accepted | PASS | input · generic input · output · check report |
418 | accepted | PASS | input · generic input · output · check report |
419 | accepted | PASS | input · generic input · output · check report |
420 | accepted | PASS | input · generic input · output · check report |
421 | accepted | PASS | input · generic input · output · check report |
422 | accepted | PASS | input · generic input · output · check report |
423 | accepted | PASS | input · generic input · output · check report |
424 | accepted | PASS | input · generic input · output · check report |
425 | accepted | PASS | input · generic input · output · check report |
426 | accepted | PASS | input · generic input · output · check report |
427 | accepted | PASS | input · generic input · output · check report |
428 | accepted | PASS | input · generic input · output · check report |
429 | accepted | PASS | input · generic input · output · check report |
430 | accepted | PASS | input · generic input · output · check report |
431 | accepted | PASS | input · generic input · output · check report |
432 | accepted | PASS | input · generic input · output · check report |
433 | accepted | PASS | input · generic input · output · check report |
434 | accepted | PASS | input · generic input · output · check report |
435 | rejected | input · stderr<stdin>:15:7: error: loom-lower-graph-memory: parallel addresses have no comparable lane projection; address rank is 1
scf.forall (%iv0) in (2) {
^
<stdin>:15:7: note: see current operation:
"scf.forall"() <{operandSegmentSizes = array<i32: 0, 0, 0, 0>, staticLowerBound = array<i64: 0>, staticStep = array<i64: 1>, staticUpperBound = array<i64: 2>}> ({
^bb0(%arg3: index):
"scf.forall"() <{operandSegmentSizes = array<i32: 0, 0, 0, 0>, staticLowerBound = array<i64: 0>, staticStep = array<i64: 1>, staticUpperBound = array<i64: 2>}> ({
^bb0(%arg4: index):
%2 = "arith.muli"(%arg3, %1) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
%3 = "arith.addi"(%2, %arg4) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
"memref.store"(%0, %arg2, %3) : (index, memref<?xindex>, index) -> ()
"scf.forall.in_parallel"() ({
^bb0:
}) : () -> ()
}) : () -> ()
"scf.forall.in_parallel"() ({
^bb0:
}) : () -> ()
}) : () -> ()
| |
436 | accepted | PASS | input · generic input · output · check report |
437 | accepted | PASS | input · generic input · output · check report |
438 | accepted | PASS | input · generic input · output · check report |
439 | accepted | PASS | input · generic input · output · check report |
440 | rejected | input · stderr<stdin>:15:7: error: loom-lower-graph-memory: parallel addresses have no comparable lane projection; address rank is 1
scf.parallel (%iv0) = (%zero) to (%two) step (%one) {
^
<stdin>:15:7: note: see current operation:
"scf.parallel"(%0, %2, %1) <{operandSegmentSizes = array<i32: 1, 1, 1, 0>}> ({
^bb0(%arg4: index):
"scf.forall"() <{operandSegmentSizes = array<i32: 0, 0, 0, 0>, staticLowerBound = array<i64: 0>, staticStep = array<i64: 1>, staticUpperBound = array<i64: 2>}> ({
^bb0(%arg5: index):
%5 = "arith.muli"(%arg4, %2) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
%6 = "arith.addi"(%5, %arg5) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
"memref.store"(%1, %arg2, %6) : (index, memref<?xindex>, index) -> ()
"scf.forall.in_parallel"() ({
^bb0:
}) : () -> ()
}) : () -> ()
"scf.reduce"() : () -> ()
}) : (index, index, index) -> ()
| |
441 | accepted | PASS | input · generic input · output · check report |
442 | accepted | PASS | input · generic input · output · check report |
443 | accepted | PASS | input · generic input · output · check report |
444 | accepted | PASS | input · generic input · output · check report |
445 | accepted | PASS | input · generic input · output · check report |
446 | accepted | PASS | input · generic input · output · check report |
447 | accepted | PASS | input · generic input · output · check report |
448 | accepted | PASS | input · generic input · output · check report |
449 | accepted | PASS | input · generic input · output · check report |
450 | accepted | PASS | input · generic input · output · check report |
451 | accepted | PASS | input · generic input · output · check report |
452 | accepted | PASS | input · generic input · output · check report |
453 | accepted | PASS | input · generic input · output · check report |
454 | accepted | PASS | input · generic input · output · check report |
455 | accepted | PASS | input · generic input · output · check report |
456 | accepted | PASS | input · generic input · output · check report |
457 | accepted | PASS | input · generic input · output · check report |
458 | accepted | PASS | input · generic input · output · check report |
459 | accepted | PASS | input · generic input · output · check report |
460 | accepted | PASS | input · generic input · output · check report |
461 | accepted | PASS | input · generic input · output · check report |
462 | accepted | PASS | input · generic input · output · check report |
463 | accepted | PASS | input · generic input · output · check report |
464 | accepted | PASS | input · generic input · output · check report |
465 | accepted | PASS | input · generic input · output · check report |
466 | accepted | PASS | input · generic input · output · check report |
467 | accepted | PASS | input · generic input · output · check report |
468 | accepted | PASS | input · generic input · output · check report |
469 | accepted | PASS | input · generic input · output · check report |
470 | accepted | PASS | input · generic input · output · check report |
471 | accepted | PASS | input · generic input · output · check report |
472 | accepted | PASS | input · generic input · output · check report |
473 | accepted | PASS | input · generic input · output · check report |
474 | accepted | PASS | input · generic input · output · check report |
475 | accepted | PASS | input · generic input · output · check report |
476 | accepted | PASS | input · generic input · output · check report |
477 | accepted | PASS | input · generic input · output · check report |
478 | accepted | PASS | input · generic input · output · check report |
479 | accepted | PASS | input · generic input · output · check report |
480 | accepted | PASS | input · generic input · output · check report |
481 | accepted | PASS | input · generic input · output · check report |
482 | accepted | PASS | input · generic input · output · check report |
483 | accepted | PASS | input · generic input · output · check report |
484 | accepted | PASS | input · generic input · output · check report |
485 | accepted | PASS | input · generic input · output · check report |
486 | accepted | PASS | input · generic input · output · check report |
487 | accepted | PASS | input · generic input · output · check report |
488 | accepted | PASS | input · generic input · output · check report |
489 | accepted | PASS | input · generic input · output · check report |
490 | accepted | PASS | input · generic input · output · check report |
491 | accepted | PASS | input · generic input · output · check report |
492 | accepted | PASS | input · generic input · output · check report |
493 | rejected | input · stderr<stdin>:15:7: error: loom-lower-graph-memory: parallel addresses have no comparable lane projection; address rank is 1
scf.forall (%iv0) in (2) {
^
<stdin>:15:7: note: see current operation:
"scf.forall"() <{operandSegmentSizes = array<i32: 0, 0, 0, 0>, staticLowerBound = array<i64: 0>, staticStep = array<i64: 1>, staticUpperBound = array<i64: 2>}> ({
^bb0(%arg3: index):
"scf.forall"() <{operandSegmentSizes = array<i32: 0, 0, 0, 0>, staticLowerBound = array<i64: 0>, staticStep = array<i64: 1>, staticUpperBound = array<i64: 2>}> ({
^bb0(%arg4: index):
%2 = "arith.muli"(%arg3, %1) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
%3 = "arith.addi"(%2, %arg4) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
"memref.store"(%0, %arg2, %3) : (index, memref<?xindex>, index) -> ()
"scf.forall.in_parallel"() ({
^bb0:
}) : () -> ()
}) : () -> ()
"scf.forall.in_parallel"() ({
^bb0:
}) : () -> ()
}) : () -> ()
| |
494 | accepted | PASS | input · generic input · output · check report |
495 | accepted | PASS | input · generic input · output · check report |
496 | rejected | input · stderr<stdin>:15:7: error: loom-lower-graph-memory: parallel addresses have no comparable lane projection; address rank is 1
scf.forall (%iv0) in (2) {
^
<stdin>:15:7: note: see current operation:
"scf.forall"() <{operandSegmentSizes = array<i32: 0, 0, 0, 0>, staticLowerBound = array<i64: 0>, staticStep = array<i64: 1>, staticUpperBound = array<i64: 2>}> ({
^bb0(%arg8: index):
"scf.parallel"(%0, %2, %1) <{operandSegmentSizes = array<i32: 1, 1, 1, 0>}> ({
^bb0(%arg10: index):
%9 = "arith.muli"(%arg8, %2) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
%10 = "arith.addi"(%9, %arg10) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
%11 = "memref.load"(%arg2, %10) : (memref<?xindex>, index) -> index
%12 = "arith.addi"(%11, %1) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
"memref.store"(%12, %arg2, %10) : (index, memref<?xindex>, index) -> ()
"scf.reduce"() : () -> ()
}) : (index, index, index) -> ()
"scf.for"(%0, %2, %1) ({
^bb0(%arg9: index):
"memref.store"(%1, %arg2, %arg8) : (index, memref<?xindex>, index) -> ()
"scf.yield"() : () -> ()
}) : (index, index, index) -> ()
"scf.forall.in_parallel"() ({
^bb0:
}) : () -> ()
}) : () -> ()
| |
497 | accepted | PASS | input · generic input · output · check report |
498 | rejected | input · stderr<stdin>:11:7: error: loom-lower-graph-memory: parallel addresses have no comparable lane projection; address rank is 1
scf.parallel (%iv0) = (%zero) to (%two) step (%one) {
^
<stdin>:11:7: note: see current operation:
"scf.parallel"(%0, %2, %1) <{operandSegmentSizes = array<i32: 1, 1, 1, 0>}> ({
^bb0(%arg3: index):
"scf.forall"() <{operandSegmentSizes = array<i32: 0, 0, 0, 0>, staticLowerBound = array<i64: 0>, staticStep = array<i64: 1>, staticUpperBound = array<i64: 2>}> ({
^bb0(%arg4: index):
%3 = "arith.muli"(%arg3, %2) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
%4 = "arith.addi"(%3, %arg4) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
%5 = "memref.load"(%arg2, %4) : (memref<?xindex>, index) -> index
%6 = "arith.addi"(%5, %1) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
"memref.store"(%6, %arg2, %4) : (index, memref<?xindex>, index) -> ()
"scf.forall.in_parallel"() ({
^bb0:
}) : () -> ()
}) : () -> ()
"scf.reduce"() : () -> ()
}) : (index, index, index) -> ()
| |
499 | accepted | PASS | input · generic input · output · check report |
500 | accepted | PASS | input · generic input · output · check report |
501 | accepted | PASS | input · generic input · output · check report |
502 | accepted | PASS | input · generic input · output · check report |
503 | accepted | PASS | input · generic input · output · check report |
504 | accepted | PASS | input · generic input · output · check report |
505 | accepted | PASS | input · generic input · output · check report |
506 | accepted | PASS | input · generic input · output · check report |
507 | accepted | PASS | input · generic input · output · check report |
508 | accepted | PASS | input · generic input · output · check report |
509 | accepted | PASS | input · generic input · output · check report |
510 | accepted | PASS | input · generic input · output · check report |
511 | accepted | PASS | input · generic input · output · check report |
512 | accepted | PASS | input · generic input · output · check report |
513 | accepted | PASS | input · generic input · output · check report |
514 | accepted | PASS | input · generic input · output · check report |
515 | accepted | PASS | input · generic input · output · check report |
516 | accepted | PASS | input · generic input · output · check report |
517 | accepted | PASS | input · generic input · output · check report |
518 | accepted | PASS | input · generic input · output · check report |
519 | accepted | PASS | input · generic input · output · check report |
520 | accepted | PASS | input · generic input · output · check report |
521 | accepted | PASS | input · generic input · output · check report |
522 | accepted | PASS | input · generic input · output · check report |
523 | accepted | PASS | input · generic input · output · check report |
524 | accepted | PASS | input · generic input · output · check report |
525 | accepted | PASS | input · generic input · output · check report |
526 | accepted | PASS | input · generic input · output · check report |
527 | accepted | PASS | input · generic input · output · check report |
528 | rejected | input · stderr<stdin>:11:7: error: loom-lower-graph-memory: parallel addresses have no comparable lane projection; address rank is 1
scf.forall (%iv0) in (2) {
^
<stdin>:11:7: note: see current operation:
"scf.forall"() <{operandSegmentSizes = array<i32: 0, 0, 0, 0>, staticLowerBound = array<i64: 0>, staticStep = array<i64: 1>, staticUpperBound = array<i64: 2>}> ({
^bb0(%arg3: index):
"scf.parallel"(%0, %2, %1) <{operandSegmentSizes = array<i32: 1, 1, 1, 0>}> ({
^bb0(%arg4: index):
%3 = "arith.muli"(%arg3, %2) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
%4 = "arith.addi"(%3, %arg4) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
"memref.store"(%1, %arg2, %4) : (index, memref<?xindex>, index) -> ()
"scf.reduce"() : () -> ()
}) : (index, index, index) -> ()
"scf.forall.in_parallel"() ({
^bb0:
}) : () -> ()
}) : () -> ()
| |
529 | accepted | PASS | input · generic input · output · check report |
530 | accepted | PASS | input · generic input · output · check report |
531 | accepted | PASS | input · generic input · output · check report |
532 | accepted | PASS | input · generic input · output · check report |
533 | accepted | PASS | input · generic input · output · check report |
534 | accepted | PASS | input · generic input · output · check report |
535 | accepted | PASS | input · generic input · output · check report |
536 | accepted | PASS | input · generic input · output · check report |
537 | accepted | PASS | input · generic input · output · check report |
538 | accepted | PASS | input · generic input · output · check report |
539 | accepted | PASS | input · generic input · output · check report |
540 | accepted | PASS | input · generic input · output · check report |
541 | accepted | PASS | input · generic input · output · check report |
542 | accepted | PASS | input · generic input · output · check report |
543 | accepted | PASS | input · generic input · output · check report |
544 | accepted | PASS | input · generic input · output · check report |
545 | accepted | PASS | input · generic input · output · check report |
546 | accepted | PASS | input · generic input · output · check report |
547 | accepted | PASS | input · generic input · output · check report |
548 | accepted | PASS | input · generic input · output · check report |
549 | accepted | PASS | input · generic input · output · check report |
550 | accepted | PASS | input · generic input · output · check report |
551 | accepted | PASS | input · generic input · output · check report |
552 | accepted | PASS | input · generic input · output · check report |
553 | accepted | PASS | input · generic input · output · check report |
554 | accepted | PASS | input · generic input · output · check report |
555 | accepted | PASS | input · generic input · output · check report |
556 | accepted | PASS | input · generic input · output · check report |
557 | accepted | PASS | input · generic input · output · check report |
558 | accepted | PASS | input · generic input · output · check report |
559 | accepted | PASS | input · generic input · output · check report |
560 | accepted | PASS | input · generic input · output · check report |
561 | accepted | PASS | input · generic input · output · check report |
562 | accepted | PASS | input · generic input · output · check report |
563 | accepted | PASS | input · generic input · output · check report |
564 | accepted | PASS | input · generic input · output · check report |
565 | accepted | PASS | input · generic input · output · check report |
566 | accepted | PASS | input · generic input · output · check report |
567 | accepted | PASS | input · generic input · output · check report |
568 | accepted | PASS | input · generic input · output · check report |
569 | accepted | PASS | input · generic input · output · check report |
570 | accepted | PASS | input · generic input · output · check report |
571 | accepted | PASS | input · generic input · output · check report |
572 | accepted | PASS | input · generic input · output · check report |
573 | accepted | PASS | input · generic input · output · check report |
574 | accepted | PASS | input · generic input · output · check report |
575 | accepted | PASS | input · generic input · output · check report |
576 | accepted | PASS | input · generic input · output · check report |
577 | accepted | PASS | input · generic input · output · check report |
578 | accepted | PASS | input · generic input · output · check report |
579 | accepted | PASS | input · generic input · output · check report |
580 | accepted | PASS | input · generic input · output · check report |
581 | accepted | PASS | input · generic input · output · check report |
582 | accepted | PASS | input · generic input · output · check report |
583 | accepted | PASS | input · generic input · output · check report |
584 | accepted | PASS | input · generic input · output · check report |
585 | accepted | PASS | input · generic input · output · check report |
586 | accepted | PASS | input · generic input · output · check report |
587 | accepted | PASS | input · generic input · output · check report |
588 | accepted | PASS | input · generic input · output · check report |
589 | accepted | PASS | input · generic input · output · check report |
590 | accepted | PASS | input · generic input · output · check report |
591 | accepted | PASS | input · generic input · output · check report |
592 | accepted | PASS | input · generic input · output · check report |
593 | accepted | PASS | input · generic input · output · check report |
594 | accepted | PASS | input · generic input · output · check report |
595 | accepted | PASS | input · generic input · output · check report |
596 | accepted | PASS | input · generic input · output · check report |
597 | accepted | PASS | input · generic input · output · check report |
598 | rejected | input · stderr<stdin>:15:7: error: loom-lower-graph-memory: parallel addresses have no comparable lane projection; address rank is 1
scf.forall (%iv0) in (2) {
^
<stdin>:15:7: note: see current operation:
"scf.forall"() <{operandSegmentSizes = array<i32: 0, 0, 0, 0>, staticLowerBound = array<i64: 0>, staticStep = array<i64: 1>, staticUpperBound = array<i64: 2>}> ({
^bb0(%arg6: index):
"scf.parallel"(%0, %2, %1) <{operandSegmentSizes = array<i32: 1, 1, 1, 0>}> ({
^bb0(%arg7: index):
%6 = "arith.muli"(%arg6, %2) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
%7 = "arith.addi"(%6, %arg7) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
"memref.store"(%1, %arg2, %7) : (index, memref<?xindex>, index) -> ()
"scf.reduce"() : () -> ()
}) : (index, index, index) -> ()
"scf.forall.in_parallel"() ({
^bb0:
}) : () -> ()
}) : () -> ()
| |
599 | accepted | PASS | input · generic input · output · check report |
600 | accepted | PASS | input · generic input · output · check report |
601 | accepted | PASS | input · generic input · output · check report |
602 | accepted | PASS | input · generic input · output · check report |
603 | accepted | PASS | input · generic input · output · check report |
604 | accepted | PASS | input · generic input · output · check report |
605 | accepted | PASS | input · generic input · output · check report |
606 | accepted | PASS | input · generic input · output · check report |
607 | accepted | PASS | input · generic input · output · check report |
608 | rejected | input · stderr<stdin>:15:7: error: loom-lower-graph-memory: parallel addresses have no comparable lane projection; address rank is 1
scf.parallel (%iv0) = (%zero) to (%two) step (%one) {
^
<stdin>:15:7: note: see current operation:
"scf.parallel"(%0, %2, %1) <{operandSegmentSizes = array<i32: 1, 1, 1, 0>}> ({
^bb0(%arg3: index):
"scf.parallel"(%0, %2, %1) <{operandSegmentSizes = array<i32: 1, 1, 1, 0>}> ({
^bb0(%arg5: index):
%5 = "arith.muli"(%arg3, %2) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
%6 = "arith.addi"(%5, %arg5) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
"memref.store"(%1, %arg2, %6) : (index, memref<?xindex>, index) -> ()
"scf.reduce"() : () -> ()
}) : (index, index, index) -> ()
"scf.for"(%0, %2, %1) ({
^bb0(%arg4: index):
%3 = "memref.load"(%arg2, %arg3) : (memref<?xindex>, index) -> index
%4 = "arith.addi"(%3, %1) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
"memref.store"(%4, %arg2, %arg3) : (index, memref<?xindex>, index) -> ()
"scf.yield"() : () -> ()
}) : (index, index, index) -> ()
"scf.reduce"() : () -> ()
}) : (index, index, index) -> ()
| |
609 | rejected | input · stderr<stdin>:11:7: error: loom-lower-graph-memory: parallel addresses have no comparable lane projection; address rank is 1
scf.parallel (%iv0) = (%zero) to (%two) step (%one) {
^
<stdin>:11:7: note: see current operation:
"scf.parallel"(%0, %2, %1) <{operandSegmentSizes = array<i32: 1, 1, 1, 0>}> ({
^bb0(%arg5: index):
"scf.parallel"(%0, %2, %1) <{operandSegmentSizes = array<i32: 1, 1, 1, 0>}> ({
^bb0(%arg7: index):
%6 = "arith.muli"(%arg5, %2) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
%7 = "arith.addi"(%6, %arg7) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
%8 = "memref.load"(%arg2, %7) : (memref<?xindex>, index) -> index
%9 = "arith.addi"(%8, %1) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
"memref.store"(%9, %arg2, %7) : (index, memref<?xindex>, index) -> ()
"scf.reduce"() : () -> ()
}) : (index, index, index) -> ()
"scf.for"(%0, %2, %1) ({
^bb0(%arg6: index):
"memref.store"(%1, %arg2, %arg5) : (index, memref<?xindex>, index) -> ()
"scf.yield"() : () -> ()
}) : (index, index, index) -> ()
"scf.reduce"() : () -> ()
}) : (index, index, index) -> ()
| |
610 | accepted | PASS | input · generic input · output · check report |
611 | accepted | PASS | input · generic input · output · check report |
612 | accepted | PASS | input · generic input · output · check report |
613 | accepted | PASS | input · generic input · output · check report |
614 | accepted | PASS | input · generic input · output · check report |
615 | accepted | PASS | input · generic input · output · check report |
616 | accepted | PASS | input · generic input · output · check report |
617 | accepted | PASS | input · generic input · output · check report |
618 | accepted | PASS | input · generic input · output · check report |
619 | accepted | PASS | input · generic input · output · check report |
620 | accepted | PASS | input · generic input · output · check report |
621 | accepted | PASS | input · generic input · output · check report |
622 | accepted | PASS | input · generic input · output · check report |
623 | accepted | PASS | input · generic input · output · check report |
624 | accepted | PASS | input · generic input · output · check report |
625 | accepted | PASS | input · generic input · output · check report |
626 | accepted | PASS | input · generic input · output · check report |
627 | accepted | PASS | input · generic input · output · check report |
628 | accepted | PASS | input · generic input · output · check report |
629 | accepted | PASS | input · generic input · output · check report |
630 | accepted | PASS | input · generic input · output · check report |
631 | accepted | PASS | input · generic input · output · check report |
632 | accepted | PASS | input · generic input · output · check report |
633 | accepted | PASS | input · generic input · output · check report |
634 | accepted | PASS | input · generic input · output · check report |
635 | accepted | PASS | input · generic input · output · check report |
636 | accepted | PASS | input · generic input · output · check report |
637 | accepted | PASS | input · generic input · output · check report |
638 | accepted | PASS | input · generic input · output · check report |
639 | accepted | PASS | input · generic input · output · check report |
640 | accepted | PASS | input · generic input · output · check report |
641 | accepted | PASS | input · generic input · output · check report |
642 | accepted | PASS | input · generic input · output · check report |
643 | rejected | input · stderr<stdin>:15:7: error: loom-lower-graph-memory: parallel addresses have no comparable lane projection; address rank is 1
scf.parallel (%iv0) = (%zero) to (%two) step (%one) {
^
<stdin>:15:7: note: see current operation:
"scf.parallel"(%0, %2, %1) <{operandSegmentSizes = array<i32: 1, 1, 1, 0>}> ({
^bb0(%arg5: index):
"scf.forall"() <{operandSegmentSizes = array<i32: 0, 0, 0, 0>, staticLowerBound = array<i64: 0>, staticStep = array<i64: 1>, staticUpperBound = array<i64: 2>}> ({
^bb0(%arg6: index):
%5 = "arith.muli"(%arg5, %2) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
%6 = "arith.addi"(%5, %arg6) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
"memref.store"(%1, %arg2, %6) : (index, memref<?xindex>, index) -> ()
"scf.forall.in_parallel"() ({
^bb0:
}) : () -> ()
}) : () -> ()
"scf.reduce"() : () -> ()
}) : (index, index, index) -> ()
| |
644 | accepted | PASS | input · generic input · output · check report |
645 | accepted | PASS | input · generic input · output · check report |
646 | accepted | PASS | input · generic input · output · check report |
647 | accepted | PASS | input · generic input · output · check report |
648 | accepted | PASS | input · generic input · output · check report |
649 | accepted | PASS | input · generic input · output · check report |
650 | accepted | PASS | input · generic input · output · check report |
651 | accepted | PASS | input · generic input · output · check report |
652 | accepted | PASS | input · generic input · output · check report |
653 | accepted | PASS | input · generic input · output · check report |
654 | accepted | PASS | input · generic input · output · check report |
655 | accepted | PASS | input · generic input · output · check report |
656 | accepted | PASS | input · generic input · output · check report |
657 | accepted | PASS | input · generic input · output · check report |
658 | accepted | PASS | input · generic input · output · check report |
659 | accepted | PASS | input · generic input · output · check report |
660 | accepted | PASS | input · generic input · output · check report |
661 | accepted | PASS | input · generic input · output · check report |
662 | accepted | PASS | input · generic input · output · check report |
663 | accepted | PASS | input · generic input · output · check report |
664 | accepted | PASS | input · generic input · output · check report |
665 | accepted | PASS | input · generic input · output · check report |
666 | accepted | PASS | input · generic input · output · check report |
667 | accepted | PASS | input · generic input · output · check report |
668 | accepted | PASS | input · generic input · output · check report |
669 | accepted | PASS | input · generic input · output · check report |
670 | accepted | PASS | input · generic input · output · check report |
671 | accepted | PASS | input · generic input · output · check report |
672 | accepted | PASS | input · generic input · output · check report |
673 | accepted | PASS | input · generic input · output · check report |
674 | accepted | PASS | input · generic input · output · check report |
675 | accepted | PASS | input · generic input · output · check report |
676 | accepted | PASS | input · generic input · output · check report |
677 | accepted | PASS | input · generic input · output · check report |
678 | accepted | PASS | input · generic input · output · check report |
679 | accepted | PASS | input · generic input · output · check report |
680 | accepted | PASS | input · generic input · output · check report |
681 | accepted | PASS | input · generic input · output · check report |
682 | accepted | PASS | input · generic input · output · check report |
683 | accepted | PASS | input · generic input · output · check report |
684 | rejected | input · stderr<stdin>:0:0: error: canonical Dataflow publication failed: graph @g_thread_0 completion witness #0 is not statically one-shot
<stdin>:0:0: note: see current operation:
"builtin.module"() ({
"llvm.func"() <{CConv = #llvm.cconv<ccc>, function_type = !llvm.func<i64 (i64)>, linkage = #llvm.linkage<external>, sym_name = "imported_callable", unnamed_addr = 0 : i64, visibility_ = 0 : i64}> ({
}) : () -> ()
"func.func"() <{function_type = (i32) -> i32, sym_name = "native_callable", sym_visibility = "private"}> ({
^bb0(%arg12: i32):
"func.return"(%arg12) : (i32) -> ()
}) : () -> ()
"dataflow.thread"() <{domain = #dataflow.thread_domain<dense>, function_type = (index, memref<?xindex>) -> (), sym_name = "thread_0", sym_visibility = "private"}> ({
^bb0(%arg9: index, %arg10: memref<?xindex>, %arg11: none):
%108 = "dataflow.graph.launch"(%arg11, %arg9, %arg10) <{callee = @g_thread_0, operandSegmentSizes = array<i32: 1, 1, 0, 1, 0>, resultSegmentSizes = array<i32: 0, 0, 1>, source_maps = []}> : (none, index, memref<?xindex>) -> none
"dataflow.thread.yield"(%108) : (none) -> ()
}) : () -> ()
"dataflow.thread"() <{domain = #dataflow.thread_domain<dense>, function_type = (index, memref<?xindex>) -> (), sym_name = "thread_1", sym_visibility = "private"}> ({
^bb0(%arg6: index, %arg7: memref<?xindex>, %arg8: none):
%107 = "dataflow.graph.launch"(%arg8, %arg6, %arg7) <{callee = @g_thread_1, operandSegmentSizes = array<i32: 1, 1, 0, 1, 0>, resultSegmentSizes = array<i32: 0, 0, 1>, source_maps = []}> : (none, index, memref<?xindex>) -> none
"dataflow.thread.yield"(%107) : (none) -> ()
}) : () -> ()
"dataflow.graph"() <{arg_attrs = [{}, {llvm.noalias}], function_type = (index, memref<?xindex>) -> (), input_segments = array<i32: 1, 0, 1>, result_segments = array<i32: 0, 0, 0>, sym_name = "g_thread_0", sym_visibility = "private"}> ({
^bb0(%arg3: none, %arg4: index, %arg5: memref<?xindex>):
%28 = "dataflow.constant"(%arg3) <{const_value = 0 : index}> : (none) -> index
%29 = "dataflow.constant"(%arg3) <{const_value = 1 : index}> : (none) -> index
%30 = "dataflow.constant"(%arg3) <{const_value = 2 : index}> : (none) -> index
%31 = "arith.index_cast"(%28) : (index) -> i32
%32 = "arith.index_cast"(%30) : (index) -> i32
%33 = "arith.index_cast"(%29) : (index) -> i32
%34:2 = "dataflow.stream"(%31, %32, %33) <{predicate = 2 : i64, step_kind = 0 : i32}> : (i32, i32, i32) -> (i32, i1)
%35 = "dataflow.carry"(%34#1, %arg3, %36#1) : (i1, none, none) -> none
%36:2 = "dataflow.demux"(%34#1, %35) : (i1, none) -> (none, none)
%37 = "dataflow.invariant"(%34#1, %29) : (i1, index) -> index
%38:2 = "dataflow.gate"(%34#1, %37) : (i1, index) -> (i1, index)
%39:2 = "dataflow.demux"(%38#0, %38#1) : (i1, index) -> (index, index)
%40 = "dataflow.invariant"(%34#1, %28) : (i1, index) -> index
%41:2 = "dataflow.gate"(%34#1, %40) : (i1, index) -> (i1, index)
%42:2 = "dataflow.demux"(%41#0, %41#1) : (i1, index) -> (index, index)
%43 = "dataflow.invariant"(%34#1, %30) : (i1, index) -> index
%44:2 = "dataflow.gate"(%34#1, %43) : (i1, index) -> (i1, index)
%45:2 = "dataflow.demux"(%44#0, %44#1) : (i1, index) -> (index, index)
%46 = "dataflow.carry"(%34#1, %arg3, %56#0) : (i1, none, none) -> none
%47:2 = "dataflow.demux"(%34#1, %46) : (i1, none) -> (none, none)
%48 = "dataflow.constant"(%36#1) <{const_value = 0 : index}> : (none) -> index
%49:2 = "dataflow.sync"(%36#1, %47#1) : (none, none) -> (none, none)
%50 = "dataflow.store"(%arg5, %48, %38#1, %49#0) : (memref<?xindex>, index, index, none) -> none
%51 = "dataflow.store"(%arg5, %48, %38#1, %50) : (memref<?xindex>, index, index, none) -> none
%52 = "dataflow.constant"(%36#1) <{const_value = 1 : index}> : (none) -> index
%53:2 = "dataflow.sync"(%36#1, %47#1) : (none, none) -> (none, none)
%54 = "dataflow.store"(%arg5, %52, %38#1, %53#0) : (memref<?xindex>, index, index, none) -> none
%55 = "dataflow.store"(%arg5, %52, %38#1, %54) : (memref<?xindex>, index, index, none) -> none
%56:2 = "dataflow.sync"(%51, %55) : (none, none) -> (none, none)
%57 = "arith.cmpi"(%31, %32) <{predicate = 2 : i64}> : (i32, i32) -> i1
%58:2 = "dataflow.demux"(%57, %36#0) : (i1, none) -> (none, none)
%59:4 = "dataflow.sync"(%58#1, %39#0, %42#0, %45#0) : (none, index, index, index) -> (none, index, index, index)
%60 = "dataflow.mux"(%57, %58#0, %59#0) : (i1, none, none) -> none
%61 = "arith.index_cast"(%28) : (index) -> i32
%62 = "arith.index_cast"(%30) : (index) -> i32
%63 = "arith.index_cast"(%29) : (index) -> i32
%64:2 = "dataflow.stream"(%61, %62, %63) <{predicate = 2 : i64, step_kind = 0 : i32}> : (i32, i32, i32) -> (i32, i1)
%65 = "dataflow.carry"(%64#1, %60, %66#1) : (i1, none, none) -> none
%66:2 = "dataflow.demux"(%64#1, %65) : (i1, none) -> (none, none)
%67 = "dataflow.invariant"(%64#1, %29) : (i1, index) -> index
%68:2 = "dataflow.gate"(%64#1, %67) : (i1, index) -> (i1, index)
%69:2 = "dataflow.demux"(%68#0, %68#1) : (i1, index) -> (index, index)
%70 = "dataflow.invariant"(%64#1, %28) : (i1, index) -> index
%71:2 = "dataflow.gate"(%64#1, %70) : (i1, index) -> (i1, index)
%72:2 = "dataflow.demux"(%71#0, %71#1) : (i1, index) -> (index, index)
%73 = "dataflow.carry"(%64#1, %47#0, %76) : (i1, none, none) -> none
%74:2 = "dataflow.demux"(%64#1, %73) : (i1, none) -> (none, none)
%75:2 = "dataflow.sync"(%66#1, %74#1) : (none, none) -> (none, none)
%76 = "dataflow.store"(%arg5, %71#1, %68#1, %75#0) : (memref<?xindex>, index, index, none) -> none
%77 = "arith.cmpi"(%61, %62) <{predicate = 2 : i64}> : (i32, i32) -> i1
%78:2 = "dataflow.demux"(%77, %66#0) : (i1, none) -> (none, none)
%79:3 = "dataflow.sync"(%78#1, %69#0, %72#0) : (none, index, index) -> (none, index, index)
%80 = "dataflow.mux"(%77, %78#0, %79#0) : (i1, none, none) -> none
%81:2 = "dataflow.sync"(%80, %74#0) : (none, none) -> (none, none)
%82 = "dataflow.store"(%arg5, %28, %29, %81#0) : (memref<?xindex>, index, index, none) -> none
%83 = "arith.index_cast"(%28) : (index) -> i32
%84 = "arith.index_cast"(%30) : (index) -> i32
%85 = "arith.index_cast"(%29) : (index) -> i32
%86:2 = "dataflow.stream"(%83, %84, %85) <{predicate = 2 : i64, step_kind = 0 : i32}> : (i32, i32, i32) -> (i32, i1)
%87 = "dataflow.carry"(%86#1, %60, %88#1) : (i1, none, none) -> none
%88:2 = "dataflow.demux"(%86#1, %87) : (i1, none) -> (none, none)
%89 = "dataflow.invariant"(%86#1, %29) : (i1, index) -> index
%90:2 = "dataflow.gate"(%86#1, %89) : (i1, index) -> (i1, index)
%91:2 = "dataflow.demux"(%90#0, %90#1) : (i1, index) -> (index, index)
%92 = "dataflow.invariant"(%86#1, %29) : (i1, index) -> index
%93:2 = "dataflow.gate"(%86#1, %92) : (i1, index) -> (i1, index)
%94:2 = "dataflow.demux"(%93#0, %93#1) : (i1, index) -> (index, index)
%95 = "dataflow.carry"(%86#1, %47#0, %98) : (i1, none, none) -> none
%96:2 = "dataflow.demux"(%86#1, %95) : (i1, none) -> (none, none)
%97:2 = "dataflow.sync"(%88#1, %96#1) : (none, none) -> (none, none)
%98 = "dataflow.store"(%arg5, %93#1, %90#1, %97#0) : (memref<?xindex>, index, index, none) -> none
%99 = "arith.cmpi"(%83, %84) <{predicate = 2 : i64}> : (i32, i32) -> i1
%100:2 = "dataflow.demux"(%99, %88#0) : (i1, none) -> (none, none)
%101:3 = "dataflow.sync"(%100#1, %91#0, %94#0) : (none, index, index) -> (none, index, index)
%102 = "dataflow.mux"(%99, %100#0, %101#0) : (i1, none, none) -> none
%103:2 = "dataflow.sync"(%102, %96#0) : (none, none) -> (none, none)
%104 = "dataflow.store"(%arg5, %29, %29, %103#0) : (memref<?xindex>, index, index, none) -> none
%105:2 = "dataflow.sync"(%80, %102) : (none, none) -> (none, none)
%106:2 = "dataflow.sync"(%82, %104) : (none, none) -> (none, none)
"dataflow.graph.return"(%105#0, %106#0) <{operandSegmentSizes = array<i32: 0, 0, 0, 2>}> : (none, none) -> ()
}) : () -> ()
"dataflow.graph"() <{arg_attrs = [{}, {llvm.noalias}], function_type = (index, memref<?xindex>) -> (), input_segments = array<i32: 1, 0, 1>, result_segments = array<i32: 0, 0, 0>, sym_name = "g_thread_1", sym_visibility = "private"}> ({
^bb0(%arg0: none, %arg1: index, %arg2: memref<?xindex>):
%0 = "dataflow.constant"(%arg0) <{const_value = 0 : index}> : (none) -> index
%1 = "dataflow.constant"(%arg0) <{const_value = 1 : index}> : (none) -> index
%2 = "dataflow.constant"(%arg0) <{const_value = 2 : index}> : (none) -> index
%3 = "arith.index_cast"(%0) : (index) -> i32
%4 = "arith.index_cast"(%2) : (index) -> i32
%5 = "arith.index_cast"(%1) : (index) -> i32
%6:2 = "dataflow.stream"(%3, %4, %5) <{predicate = 2 : i64, step_kind = 0 : i32}> : (i32, i32, i32) -> (i32, i1)
%7 = "dataflow.carry"(%6#1, %arg0, %8#1) : (i1, none, none) -> none
%8:2 = "dataflow.demux"(%6#1, %7) : (i1, none) -> (none, none)
%9 = "dataflow.invariant"(%6#1, %0) : (i1, index) -> index
%10:2 = "dataflow.gate"(%6#1, %9) : (i1, index) -> (i1, index)
%11:2 = "dataflow.demux"(%10#0, %10#1) : (i1, index) -> (index, index)
%12 = "dataflow.invariant"(%6#1, %1) : (i1, index) -> index
%13:2 = "dataflow.gate"(%6#1, %12) : (i1, index) -> (i1, index)
%14:2 = "dataflow.demux"(%13#0, %13#1) : (i1, index) -> (index, index)
%15 = "dataflow.carry"(%6#1, %arg0, %23) : (i1, none, none) -> none
%16 = "dataflow.carry"(%6#1, %arg0, %23) : (i1, none, none) -> none
%17:2 = "dataflow.demux"(%6#1, %15) : (i1, none) -> (none, none)
%18:2 = "dataflow.demux"(%6#1, %16) : (i1, none) -> (none, none)
%19:2 = "dataflow.sync"(%8#1, %17#1) : (none, none) -> (none, none)
%20:2 = "dataflow.load"(%arg2, %10#1, %19#0) : (memref<?xindex>, index, none) -> (index, none)
%21:2 = "dataflow.sync"(%18#1, %20#1) : (none, none) -> (none, none)
%22 = "arith.addi"(%20#0, %13#1) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
%23 = "dataflow.store"(%arg2, %10#1, %22, %21#0) : (memref<?xindex>, index, index, none) -> none
%24 = "arith.cmpi"(%3, %4) <{predicate = 2 : i64}> : (i32, i32) -> i1
%25:2 = "dataflow.demux"(%24, %8#0) : (i1, none) -> (none, none)
%26:3 = "dataflow.sync"(%25#1, %11#0, %14#0) : (none, index, index) -> (none, index, index)
%27 = "dataflow.mux"(%24, %25#0, %26#0) : (i1, none, none) -> none
"dataflow.graph.return"(%27, %18#0) <{operandSegmentSizes = array<i32: 0, 0, 0, 2>}> : (none, none) -> ()
}) : () -> ()
}) : () -> ()
| |
685 | accepted | PASS | input · generic input · output · check report |
686 | accepted | PASS | input · generic input · output · check report |
687 | accepted | PASS | input · generic input · output · check report |
688 | accepted | PASS | input · generic input · output · check report |
689 | accepted | PASS | input · generic input · output · check report |
690 | rejected | input · stderr<stdin>:11:7: error: loom-lower-graph-memory: parallel addresses have no comparable lane projection; address rank is 1
scf.forall (%iv0) in (2) {
^
<stdin>:11:7: note: see current operation:
"scf.forall"() <{operandSegmentSizes = array<i32: 0, 0, 0, 0>, staticLowerBound = array<i64: 0>, staticStep = array<i64: 1>, staticUpperBound = array<i64: 2>}> ({
^bb0(%arg3: index):
"scf.forall"() <{operandSegmentSizes = array<i32: 0, 0, 0, 0>, staticLowerBound = array<i64: 0>, staticStep = array<i64: 1>, staticUpperBound = array<i64: 2>}> ({
^bb0(%arg4: index):
%4 = "arith.muli"(%arg3, %1) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
%5 = "arith.addi"(%4, %arg4) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
"memref.store"(%0, %arg2, %5) : (index, memref<?xindex>, index) -> ()
"scf.forall.in_parallel"() ({
^bb0:
}) : () -> ()
}) : () -> ()
%2 = "memref.load"(%arg2, %arg3) : (memref<?xindex>, index) -> index
%3 = "arith.addi"(%2, %0) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
"memref.store"(%3, %arg2, %arg3) : (index, memref<?xindex>, index) -> ()
"scf.forall.in_parallel"() ({
^bb0:
}) : () -> ()
}) : () -> ()
| |
691 | accepted | PASS | input · generic input · output · check report |
692 | accepted | PASS | input · generic input · output · check report |
693 | accepted | PASS | input · generic input · output · check report |
694 | accepted | PASS | input · generic input · output · check report |
695 | accepted | PASS | input · generic input · output · check report |
696 | accepted | PASS | input · generic input · output · check report |
697 | accepted | PASS | input · generic input · output · check report |
698 | accepted | PASS | input · generic input · output · check report |
699 | accepted | PASS | input · generic input · output · check report |
700 | accepted | PASS | input · generic input · output · check report |
701 | accepted | PASS | input · generic input · output · check report |
702 | accepted | PASS | input · generic input · output · check report |
703 | accepted | PASS | input · generic input · output · check report |
704 | accepted | PASS | input · generic input · output · check report |
705 | accepted | PASS | input · generic input · output · check report |
706 | accepted | PASS | input · generic input · output · check report |
707 | accepted | PASS | input · generic input · output · check report |
708 | accepted | PASS | input · generic input · output · check report |
709 | accepted | PASS | input · generic input · output · check report |
710 | accepted | PASS | input · generic input · output · check report |
711 | accepted | PASS | input · generic input · output · check report |
712 | accepted | PASS | input · generic input · output · check report |
713 | accepted | PASS | input · generic input · output · check report |
714 | accepted | PASS | input · generic input · output · check report |
715 | accepted | PASS | input · generic input · output · check report |
716 | accepted | PASS | input · generic input · output · check report |
717 | accepted | PASS | input · generic input · output · check report |
718 | accepted | PASS | input · generic input · output · check report |
719 | accepted | PASS | input · generic input · output · check report |
720 | accepted | PASS | input · generic input · output · check report |
721 | accepted | PASS | input · generic input · output · check report |
722 | accepted | PASS | input · generic input · output · check report |
723 | accepted | PASS | input · generic input · output · check report |
724 | accepted | PASS | input · generic input · output · check report |
725 | accepted | PASS | input · generic input · output · check report |
726 | accepted | PASS | input · generic input · output · check report |
727 | accepted | PASS | input · generic input · output · check report |
728 | accepted | PASS | input · generic input · output · check report |
729 | accepted | PASS | input · generic input · output · check report |
730 | rejected | input · stderr<stdin>:15:7: error: loom-lower-graph-memory: parallel addresses have no comparable lane projection; address rank is 1
scf.parallel (%iv0) = (%zero) to (%two) step (%one) {
^
<stdin>:15:7: note: see current operation:
"scf.parallel"(%0, %2, %1) <{operandSegmentSizes = array<i32: 1, 1, 1, 0>}> ({
^bb0(%arg4: index):
"scf.parallel"(%0, %2, %1) <{operandSegmentSizes = array<i32: 1, 1, 1, 0>}> ({
^bb0(%arg5: index):
%3 = "arith.muli"(%arg4, %2) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
%4 = "arith.addi"(%3, %arg5) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
%5 = "memref.load"(%arg2, %4) : (memref<?xindex>, index) -> index
%6 = "arith.addi"(%5, %1) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
"memref.store"(%6, %arg2, %4) : (index, memref<?xindex>, index) -> ()
"scf.reduce"() : () -> ()
}) : (index, index, index) -> ()
"memref.store"(%1, %arg2, %arg4) : (index, memref<?xindex>, index) -> ()
"scf.reduce"() : () -> ()
}) : (index, index, index) -> ()
| |
731 | accepted | PASS | input · generic input · output · check report |
732 | accepted | PASS | input · generic input · output · check report |
733 | accepted | PASS | input · generic input · output · check report |
734 | accepted | PASS | input · generic input · output · check report |
735 | accepted | PASS | input · generic input · output · check report |
736 | accepted | PASS | input · generic input · output · check report |
737 | accepted | PASS | input · generic input · output · check report |
738 | accepted | PASS | input · generic input · output · check report |
739 | accepted | PASS | input · generic input · output · check report |
740 | accepted | PASS | input · generic input · output · check report |
741 | accepted | PASS | input · generic input · output · check report |
742 | accepted | PASS | input · generic input · output · check report |
743 | accepted | PASS | input · generic input · output · check report |
744 | accepted | PASS | input · generic input · output · check report |
745 | rejected | input · stderr<stdin>:11:7: error: loom-lower-graph-memory: parallel addresses have no comparable lane projection; address rank is 1
scf.forall (%iv0) in (2) {
^
<stdin>:11:7: note: see current operation:
"scf.forall"() <{operandSegmentSizes = array<i32: 0, 0, 0, 0>, staticLowerBound = array<i64: 0>, staticStep = array<i64: 1>, staticUpperBound = array<i64: 2>}> ({
^bb0(%arg3: index):
"scf.forall"() <{operandSegmentSizes = array<i32: 0, 0, 0, 0>, staticLowerBound = array<i64: 0>, staticStep = array<i64: 1>, staticUpperBound = array<i64: 2>}> ({
^bb0(%arg4: index):
%2 = "arith.muli"(%arg3, %1) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
%3 = "arith.addi"(%2, %arg4) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
%4 = "memref.load"(%arg2, %3) : (memref<?xindex>, index) -> index
%5 = "arith.addi"(%4, %0) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
"memref.store"(%5, %arg2, %3) : (index, memref<?xindex>, index) -> ()
"scf.forall.in_parallel"() ({
^bb0:
}) : () -> ()
}) : () -> ()
"scf.forall.in_parallel"() ({
^bb0:
}) : () -> ()
}) : () -> ()
| |
746 | accepted | PASS | input · generic input · output · check report |
747 | accepted | PASS | input · generic input · output · check report |
748 | accepted | PASS | input · generic input · output · check report |
749 | accepted | PASS | input · generic input · output · check report |
750 | accepted | PASS | input · generic input · output · check report |
751 | accepted | PASS | input · generic input · output · check report |
752 | accepted | PASS | input · generic input · output · check report |
753 | accepted | PASS | input · generic input · output · check report |
754 | accepted | PASS | input · generic input · output · check report |
755 | accepted | PASS | input · generic input · output · check report |
756 | accepted | PASS | input · generic input · output · check report |
757 | accepted | PASS | input · generic input · output · check report |
758 | accepted | PASS | input · generic input · output · check report |
759 | accepted | PASS | input · generic input · output · check report |
760 | accepted | PASS | input · generic input · output · check report |
761 | accepted | PASS | input · generic input · output · check report |
762 | accepted | PASS | input · generic input · output · check report |
763 | accepted | PASS | input · generic input · output · check report |
764 | accepted | PASS | input · generic input · output · check report |
765 | accepted | PASS | input · generic input · output · check report |
766 | accepted | PASS | input · generic input · output · check report |
767 | accepted | PASS | input · generic input · output · check report |
768 | accepted | PASS | input · generic input · output · check report |
769 | accepted | PASS | input · generic input · output · check report |
770 | accepted | PASS | input · generic input · output · check report |
771 | accepted | PASS | input · generic input · output · check report |
772 | accepted | PASS | input · generic input · output · check report |
773 | accepted | PASS | input · generic input · output · check report |
774 | accepted | PASS | input · generic input · output · check report |
775 | accepted | PASS | input · generic input · output · check report |
776 | accepted | PASS | input · generic input · output · check report |
777 | accepted | PASS | input · generic input · output · check report |
778 | accepted | PASS | input · generic input · output · check report |
779 | accepted | PASS | input · generic input · output · check report |
780 | accepted | PASS | input · generic input · output · check report |
781 | accepted | PASS | input · generic input · output · check report |
782 | accepted | PASS | input · generic input · output · check report |
783 | accepted | PASS | input · generic input · output · check report |
784 | accepted | PASS | input · generic input · output · check report |
785 | accepted | PASS | input · generic input · output · check report |
786 | accepted | PASS | input · generic input · output · check report |
787 | accepted | PASS | input · generic input · output · check report |
788 | accepted | PASS | input · generic input · output · check report |
789 | accepted | PASS | input · generic input · output · check report |
790 | accepted | PASS | input · generic input · output · check report |
791 | accepted | PASS | input · generic input · output · check report |
792 | accepted | PASS | input · generic input · output · check report |
793 | accepted | PASS | input · generic input · output · check report |
794 | accepted | PASS | input · generic input · output · check report |
795 | accepted | PASS | input · generic input · output · check report |
796 | accepted | PASS | input · generic input · output · check report |
797 | accepted | PASS | input · generic input · output · check report |
798 | accepted | PASS | input · generic input · output · check report |
799 | accepted | PASS | input · generic input · output · check report |
800 | accepted | PASS | input · generic input · output · check report |
801 | accepted | PASS | input · generic input · output · check report |
802 | accepted | PASS | input · generic input · output · check report |
803 | accepted | PASS | input · generic input · output · check report |
804 | accepted | PASS | input · generic input · output · check report |
805 | accepted | PASS | input · generic input · output · check report |
806 | accepted | PASS | input · generic input · output · check report |
807 | accepted | PASS | input · generic input · output · check report |
808 | accepted | PASS | input · generic input · output · check report |
809 | accepted | PASS | input · generic input · output · check report |
810 | accepted | PASS | input · generic input · output · check report |
811 | accepted | PASS | input · generic input · output · check report |
812 | accepted | PASS | input · generic input · output · check report |
813 | accepted | PASS | input · generic input · output · check report |
814 | accepted | PASS | input · generic input · output · check report |
815 | accepted | PASS | input · generic input · output · check report |
816 | accepted | PASS | input · generic input · output · check report |
817 | accepted | PASS | input · generic input · output · check report |
818 | accepted | PASS | input · generic input · output · check report |
819 | accepted | PASS | input · generic input · output · check report |
820 | accepted | PASS | input · generic input · output · check report |
821 | accepted | PASS | input · generic input · output · check report |
822 | accepted | PASS | input · generic input · output · check report |
823 | accepted | PASS | input · generic input · output · check report |
824 | accepted | PASS | input · generic input · output · check report |
825 | accepted | PASS | input · generic input · output · check report |
826 | accepted | PASS | input · generic input · output · check report |
827 | accepted | PASS | input · generic input · output · check report |
828 | accepted | PASS | input · generic input · output · check report |
829 | accepted | PASS | input · generic input · output · check report |
830 | accepted | PASS | input · generic input · output · check report |
831 | accepted | PASS | input · generic input · output · check report |
832 | accepted | PASS | input · generic input · output · check report |
833 | accepted | PASS | input · generic input · output · check report |
834 | accepted | PASS | input · generic input · output · check report |
835 | accepted | PASS | input · generic input · output · check report |
836 | accepted | PASS | input · generic input · output · check report |
837 | accepted | PASS | input · generic input · output · check report |
838 | accepted | PASS | input · generic input · output · check report |
839 | accepted | PASS | input · generic input · output · check report |
840 | accepted | PASS | input · generic input · output · check report |
841 | accepted | PASS | input · generic input · output · check report |
842 | accepted | PASS | input · generic input · output · check report |
843 | accepted | PASS | input · generic input · output · check report |
844 | accepted | PASS | input · generic input · output · check report |
845 | accepted | PASS | input · generic input · output · check report |
846 | accepted | PASS | input · generic input · output · check report |
847 | accepted | PASS | input · generic input · output · check report |
848 | accepted | PASS | input · generic input · output · check report |
849 | accepted | PASS | input · generic input · output · check report |
850 | accepted | PASS | input · generic input · output · check report |
851 | accepted | PASS | input · generic input · output · check report |
852 | accepted | PASS | input · generic input · output · check report |
853 | accepted | PASS | input · generic input · output · check report |
854 | accepted | PASS | input · generic input · output · check report |
855 | accepted | PASS | input · generic input · output · check report |
856 | accepted | PASS | input · generic input · output · check report |
857 | accepted | PASS | input · generic input · output · check report |
858 | accepted | PASS | input · generic input · output · check report |
859 | accepted | PASS | input · generic input · output · check report |
860 | accepted | PASS | input · generic input · output · check report |
861 | accepted | PASS | input · generic input · output · check report |
862 | accepted | PASS | input · generic input · output · check report |
863 | accepted | PASS | input · generic input · output · check report |
864 | accepted | PASS | input · generic input · output · check report |
865 | accepted | PASS | input · generic input · output · check report |
866 | accepted | PASS | input · generic input · output · check report |
867 | accepted | PASS | input · generic input · output · check report |
868 | accepted | PASS | input · generic input · output · check report |
869 | accepted | PASS | input · generic input · output · check report |
870 | accepted | PASS | input · generic input · output · check report |
871 | accepted | PASS | input · generic input · output · check report |
872 | accepted | PASS | input · generic input · output · check report |
873 | accepted | PASS | input · generic input · output · check report |
874 | accepted | PASS | input · generic input · output · check report |
875 | accepted | PASS | input · generic input · output · check report |
876 | accepted | PASS | input · generic input · output · check report |
877 | accepted | PASS | input · generic input · output · check report |
878 | accepted | PASS | input · generic input · output · check report |
879 | accepted | PASS | input · generic input · output · check report |
880 | accepted | PASS | input · generic input · output · check report |
881 | accepted | PASS | input · generic input · output · check report |
882 | accepted | PASS | input · generic input · output · check report |
883 | accepted | PASS | input · generic input · output · check report |
884 | accepted | PASS | input · generic input · output · check report |
885 | accepted | PASS | input · generic input · output · check report |
886 | accepted | PASS | input · generic input · output · check report |
887 | accepted | PASS | input · generic input · output · check report |
888 | accepted | PASS | input · generic input · output · check report |
889 | accepted | PASS | input · generic input · output · check report |
890 | accepted | PASS | input · generic input · output · check report |
891 | accepted | PASS | input · generic input · output · check report |
892 | rejected | input · stderr<stdin>:11:7: error: loom-lower-graph-memory: parallel addresses have no comparable lane projection; address rank is 1
scf.forall (%iv0) in (2) {
^
<stdin>:11:7: note: see current operation:
"scf.forall"() <{operandSegmentSizes = array<i32: 0, 0, 0, 0>, staticLowerBound = array<i64: 0>, staticStep = array<i64: 1>, staticUpperBound = array<i64: 2>}> ({
^bb0(%arg3: index):
"scf.forall"() <{operandSegmentSizes = array<i32: 0, 0, 0, 0>, staticLowerBound = array<i64: 0>, staticStep = array<i64: 1>, staticUpperBound = array<i64: 2>}> ({
^bb0(%arg4: index):
%2 = "arith.muli"(%arg3, %1) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
%3 = "arith.addi"(%2, %arg4) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
"memref.store"(%0, %arg2, %3) : (index, memref<?xindex>, index) -> ()
"scf.forall.in_parallel"() ({
^bb0:
}) : () -> ()
}) : () -> ()
"scf.forall.in_parallel"() ({
^bb0:
}) : () -> ()
}) : () -> ()
| |
893 | accepted | PASS | input · generic input · output · check report |
894 | accepted | PASS | input · generic input · output · check report |
895 | accepted | PASS | input · generic input · output · check report |
896 | accepted | PASS | input · generic input · output · check report |
897 | accepted | PASS | input · generic input · output · check report |
898 | accepted | PASS | input · generic input · output · check report |
899 | accepted | PASS | input · generic input · output · check report |
900 | rejected | input · stderr<stdin>:0:0: error: canonical Dataflow publication failed: graph @g_thread_0 completion witness #0 is not statically one-shot
<stdin>:0:0: note: see current operation:
"builtin.module"() ({
"llvm.func"() <{CConv = #llvm.cconv<ccc>, function_type = !llvm.func<i64 (i64)>, linkage = #llvm.linkage<external>, sym_name = "imported_callable", unnamed_addr = 0 : i64, visibility_ = 0 : i64}> ({
}) : () -> ()
"func.func"() <{function_type = (i32) -> i32, sym_name = "native_callable", sym_visibility = "private"}> ({
^bb0(%arg6: i32):
"func.return"(%arg6) : (i32) -> ()
}) : () -> ()
"dataflow.thread"() <{domain = #dataflow.thread_domain<dense>, function_type = (index, memref<?xindex>) -> (), sym_name = "thread_0", sym_visibility = "private"}> ({
^bb0(%arg3: index, %arg4: memref<?xindex>, %arg5: none):
%107 = "dataflow.graph.launch"(%arg5, %arg3, %arg4) <{callee = @g_thread_0, operandSegmentSizes = array<i32: 1, 1, 0, 1, 0>, resultSegmentSizes = array<i32: 0, 0, 1>, source_maps = []}> : (none, index, memref<?xindex>) -> none
"dataflow.thread.yield"(%107) : (none) -> ()
}) : () -> ()
"dataflow.graph"() <{arg_attrs = [{}, {llvm.noalias}], function_type = (index, memref<?xindex>) -> (), input_segments = array<i32: 1, 0, 1>, result_segments = array<i32: 0, 0, 0>, sym_name = "g_thread_0", sym_visibility = "private"}> ({
^bb0(%arg0: none, %arg1: index, %arg2: memref<?xindex>):
%0 = "dataflow.constant"(%arg0) <{const_value = 0 : index}> : (none) -> index
%1 = "dataflow.constant"(%arg0) <{const_value = 1 : index}> : (none) -> index
%2 = "dataflow.constant"(%arg0) <{const_value = 2 : index}> : (none) -> index
%3 = "arith.addi"(%5#0, %1) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
%4 = "arith.addi"(%32#0, %1) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
%5:2 = "dataflow.load"(%arg2, %0, %arg0) : (memref<?xindex>, index, none) -> (index, none)
%6 = "dataflow.store"(%arg2, %0, %3, %5#1) : (memref<?xindex>, index, index, none) -> none
%7 = "arith.index_cast"(%0) : (index) -> i32
%8 = "arith.index_cast"(%2) : (index) -> i32
%9 = "arith.index_cast"(%1) : (index) -> i32
%10:2 = "dataflow.stream"(%7, %8, %9) <{predicate = 2 : i64, step_kind = 0 : i32}> : (i32, i32, i32) -> (i32, i1)
%11 = "dataflow.carry"(%10#1, %arg0, %12#1) : (i1, none, none) -> none
%12:2 = "dataflow.demux"(%10#1, %11) : (i1, none) -> (none, none)
%13 = "dataflow.invariant"(%10#1, %0) : (i1, index) -> index
%14:2 = "dataflow.gate"(%10#1, %13) : (i1, index) -> (i1, index)
%15:2 = "dataflow.demux"(%14#0, %14#1) : (i1, index) -> (index, index)
%16 = "dataflow.invariant"(%10#1, %1) : (i1, index) -> index
%17:2 = "dataflow.gate"(%10#1, %16) : (i1, index) -> (i1, index)
%18:2 = "dataflow.demux"(%17#0, %17#1) : (i1, index) -> (index, index)
%19 = "dataflow.carry"(%10#1, %6, %27) : (i1, none, none) -> none
%20 = "dataflow.carry"(%10#1, %6, %27) : (i1, none, none) -> none
%21:2 = "dataflow.demux"(%10#1, %19) : (i1, none) -> (none, none)
%22:2 = "dataflow.demux"(%10#1, %20) : (i1, none) -> (none, none)
%23:2 = "dataflow.sync"(%12#1, %21#1) : (none, none) -> (none, none)
%24:2 = "dataflow.load"(%arg2, %14#1, %23#0) : (memref<?xindex>, index, none) -> (index, none)
%25:2 = "dataflow.sync"(%22#1, %24#1) : (none, none) -> (none, none)
%26 = "arith.addi"(%24#0, %17#1) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
%27 = "dataflow.store"(%arg2, %14#1, %26, %25#0) : (memref<?xindex>, index, index, none) -> none
%28 = "arith.cmpi"(%7, %8) <{predicate = 2 : i64}> : (i32, i32) -> i1
%29:2 = "dataflow.demux"(%28, %12#0) : (i1, none) -> (none, none)
%30:3 = "dataflow.sync"(%29#1, %15#0, %18#0) : (none, index, index) -> (none, index, index)
%31 = "dataflow.mux"(%28, %29#0, %30#0) : (i1, none, none) -> none
%32:2 = "dataflow.load"(%arg2, %1, %arg0) : (memref<?xindex>, index, none) -> (index, none)
%33 = "dataflow.store"(%arg2, %1, %4, %32#1) : (memref<?xindex>, index, index, none) -> none
%34 = "arith.index_cast"(%0) : (index) -> i32
%35 = "arith.index_cast"(%2) : (index) -> i32
%36 = "arith.index_cast"(%1) : (index) -> i32
%37:2 = "dataflow.stream"(%34, %35, %36) <{predicate = 2 : i64, step_kind = 0 : i32}> : (i32, i32, i32) -> (i32, i1)
%38 = "dataflow.carry"(%37#1, %arg0, %39#1) : (i1, none, none) -> none
%39:2 = "dataflow.demux"(%37#1, %38) : (i1, none) -> (none, none)
%40 = "dataflow.invariant"(%37#1, %1) : (i1, index) -> index
%41:2 = "dataflow.gate"(%37#1, %40) : (i1, index) -> (i1, index)
%42:2 = "dataflow.demux"(%41#0, %41#1) : (i1, index) -> (index, index)
%43 = "dataflow.invariant"(%37#1, %1) : (i1, index) -> index
%44:2 = "dataflow.gate"(%37#1, %43) : (i1, index) -> (i1, index)
%45:2 = "dataflow.demux"(%44#0, %44#1) : (i1, index) -> (index, index)
%46 = "dataflow.carry"(%37#1, %33, %54) : (i1, none, none) -> none
%47 = "dataflow.carry"(%37#1, %33, %54) : (i1, none, none) -> none
%48:2 = "dataflow.demux"(%37#1, %46) : (i1, none) -> (none, none)
%49:2 = "dataflow.demux"(%37#1, %47) : (i1, none) -> (none, none)
%50:2 = "dataflow.sync"(%39#1, %48#1) : (none, none) -> (none, none)
%51:2 = "dataflow.load"(%arg2, %41#1, %50#0) : (memref<?xindex>, index, none) -> (index, none)
%52:2 = "dataflow.sync"(%49#1, %51#1) : (none, none) -> (none, none)
%53 = "arith.addi"(%51#0, %44#1) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
%54 = "dataflow.store"(%arg2, %41#1, %53, %52#0) : (memref<?xindex>, index, index, none) -> none
%55 = "arith.cmpi"(%34, %35) <{predicate = 2 : i64}> : (i32, i32) -> i1
%56:2 = "dataflow.demux"(%55, %39#0) : (i1, none) -> (none, none)
%57:3 = "dataflow.sync"(%56#1, %42#0, %45#0) : (none, index, index) -> (none, index, index)
%58 = "dataflow.mux"(%55, %56#0, %57#0) : (i1, none, none) -> none
%59:2 = "dataflow.sync"(%31, %58) : (none, none) -> (none, none)
%60:2 = "dataflow.sync"(%22#0, %49#0) : (none, none) -> (none, none)
%61 = "arith.index_cast"(%0) : (index) -> i32
%62 = "arith.index_cast"(%2) : (index) -> i32
%63 = "arith.index_cast"(%1) : (index) -> i32
%64:2 = "dataflow.stream"(%61, %62, %63) <{predicate = 2 : i64, step_kind = 0 : i32}> : (i32, i32, i32) -> (i32, i1)
%65 = "dataflow.carry"(%64#1, %59#0, %66#1) : (i1, none, none) -> none
%66:2 = "dataflow.demux"(%64#1, %65) : (i1, none) -> (none, none)
%67 = "dataflow.invariant"(%64#1, %1) : (i1, index) -> index
%68:2 = "dataflow.gate"(%64#1, %67) : (i1, index) -> (i1, index)
%69:2 = "dataflow.demux"(%68#0, %68#1) : (i1, index) -> (index, index)
%70 = "dataflow.invariant"(%64#1, %0) : (i1, index) -> index
%71:2 = "dataflow.gate"(%64#1, %70) : (i1, index) -> (i1, index)
%72:2 = "dataflow.demux"(%71#0, %71#1) : (i1, index) -> (index, index)
%73 = "dataflow.carry"(%64#1, %60#0, %76) : (i1, none, none) -> none
%74:2 = "dataflow.demux"(%64#1, %73) : (i1, none) -> (none, none)
%75:2 = "dataflow.sync"(%66#1, %74#1) : (none, none) -> (none, none)
%76 = "dataflow.store"(%arg2, %71#1, %68#1, %75#0) : (memref<?xindex>, index, index, none) -> none
%77 = "arith.cmpi"(%61, %62) <{predicate = 2 : i64}> : (i32, i32) -> i1
%78:2 = "dataflow.demux"(%77, %66#0) : (i1, none) -> (none, none)
%79:3 = "dataflow.sync"(%78#1, %69#0, %72#0) : (none, index, index) -> (none, index, index)
%80 = "dataflow.mux"(%77, %78#0, %79#0) : (i1, none, none) -> none
%81:2 = "dataflow.sync"(%80, %74#0) : (none, none) -> (none, none)
%82 = "dataflow.store"(%arg2, %0, %1, %81#0) : (memref<?xindex>, index, index, none) -> none
%83 = "arith.index_cast"(%0) : (index) -> i32
%84 = "arith.index_cast"(%2) : (index) -> i32
%85 = "arith.index_cast"(%1) : (index) -> i32
%86:2 = "dataflow.stream"(%83, %84, %85) <{predicate = 2 : i64, step_kind = 0 : i32}> : (i32, i32, i32) -> (i32, i1)
%87 = "dataflow.carry"(%86#1, %59#0, %88#1) : (i1, none, none) -> none
%88:2 = "dataflow.demux"(%86#1, %87) : (i1, none) -> (none, none)
%89 = "dataflow.invariant"(%86#1, %1) : (i1, index) -> index
%90:2 = "dataflow.gate"(%86#1, %89) : (i1, index) -> (i1, index)
%91:2 = "dataflow.demux"(%90#0, %90#1) : (i1, index) -> (index, index)
%92 = "dataflow.invariant"(%86#1, %1) : (i1, index) -> index
%93:2 = "dataflow.gate"(%86#1, %92) : (i1, index) -> (i1, index)
%94:2 = "dataflow.demux"(%93#0, %93#1) : (i1, index) -> (index, index)
%95 = "dataflow.carry"(%86#1, %60#0, %98) : (i1, none, none) -> none
%96:2 = "dataflow.demux"(%86#1, %95) : (i1, none) -> (none, none)
%97:2 = "dataflow.sync"(%88#1, %96#1) : (none, none) -> (none, none)
%98 = "dataflow.store"(%arg2, %93#1, %90#1, %97#0) : (memref<?xindex>, index, index, none) -> none
%99 = "arith.cmpi"(%83, %84) <{predicate = 2 : i64}> : (i32, i32) -> i1
%100:2 = "dataflow.demux"(%99, %88#0) : (i1, none) -> (none, none)
%101:3 = "dataflow.sync"(%100#1, %91#0, %94#0) : (none, index, index) -> (none, index, index)
%102 = "dataflow.mux"(%99, %100#0, %101#0) : (i1, none, none) -> none
%103:2 = "dataflow.sync"(%102, %96#0) : (none, none) -> (none, none)
%104 = "dataflow.store"(%arg2, %1, %1, %103#0) : (memref<?xindex>, index, index, none) -> none
%105:2 = "dataflow.sync"(%80, %102) : (none, none) -> (none, none)
%106:2 = "dataflow.sync"(%82, %104) : (none, none) -> (none, none)
"dataflow.graph.return"(%105#0, %106#0) <{operandSegmentSizes = array<i32: 0, 0, 0, 2>}> : (none, none) -> ()
}) : () -> ()
}) : () -> ()
| |
901 | accepted | PASS | input · generic input · output · check report |
902 | rejected | input · stderr<stdin>:15:7: error: loom-lower-graph-memory: parallel addresses have no comparable lane projection; address rank is 1
scf.forall (%iv0) in (2) {
^
<stdin>:15:7: note: see current operation:
"scf.forall"() <{operandSegmentSizes = array<i32: 0, 0, 0, 0>, staticLowerBound = array<i64: 0>, staticStep = array<i64: 1>, staticUpperBound = array<i64: 2>}> ({
^bb0(%arg4: index):
"scf.parallel"(%0, %2, %1) <{operandSegmentSizes = array<i32: 1, 1, 1, 0>}> ({
^bb0(%arg5: index):
%3 = "arith.muli"(%arg4, %2) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
%4 = "arith.addi"(%3, %arg5) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
"memref.store"(%1, %arg2, %4) : (index, memref<?xindex>, index) -> ()
"scf.reduce"() : () -> ()
}) : (index, index, index) -> ()
"memref.store"(%1, %arg2, %arg4) : (index, memref<?xindex>, index) -> ()
"scf.forall.in_parallel"() ({
^bb0:
}) : () -> ()
}) : () -> ()
| |
903 | accepted | PASS | input · generic input · output · check report |
904 | accepted | PASS | input · generic input · output · check report |
905 | accepted | PASS | input · generic input · output · check report |
906 | accepted | PASS | input · generic input · output · check report |
907 | accepted | PASS | input · generic input · output · check report |
908 | accepted | PASS | input · generic input · output · check report |
909 | accepted | PASS | input · generic input · output · check report |
910 | accepted | PASS | input · generic input · output · check report |
911 | accepted | PASS | input · generic input · output · check report |
912 | accepted | PASS | input · generic input · output · check report |
913 | accepted | PASS | input · generic input · output · check report |
914 | accepted | PASS | input · generic input · output · check report |
915 | accepted | PASS | input · generic input · output · check report |
916 | accepted | PASS | input · generic input · output · check report |
917 | accepted | PASS | input · generic input · output · check report |
918 | accepted | PASS | input · generic input · output · check report |
919 | accepted | PASS | input · generic input · output · check report |
920 | accepted | PASS | input · generic input · output · check report |
921 | accepted | PASS | input · generic input · output · check report |
922 | accepted | PASS | input · generic input · output · check report |
923 | accepted | PASS | input · generic input · output · check report |
924 | accepted | PASS | input · generic input · output · check report |
925 | accepted | PASS | input · generic input · output · check report |
926 | accepted | PASS | input · generic input · output · check report |
927 | accepted | PASS | input · generic input · output · check report |
928 | accepted | PASS | input · generic input · output · check report |
929 | accepted | PASS | input · generic input · output · check report |
930 | accepted | PASS | input · generic input · output · check report |
931 | accepted | PASS | input · generic input · output · check report |
932 | accepted | PASS | input · generic input · output · check report |
933 | accepted | PASS | input · generic input · output · check report |
934 | accepted | PASS | input · generic input · output · check report |
935 | accepted | PASS | input · generic input · output · check report |
936 | accepted | PASS | input · generic input · output · check report |
937 | accepted | PASS | input · generic input · output · check report |
938 | accepted | PASS | input · generic input · output · check report |
939 | accepted | PASS | input · generic input · output · check report |
940 | accepted | PASS | input · generic input · output · check report |
941 | accepted | PASS | input · generic input · output · check report |
942 | accepted | PASS | input · generic input · output · check report |
943 | accepted | PASS | input · generic input · output · check report |
944 | accepted | PASS | input · generic input · output · check report |
945 | accepted | PASS | input · generic input · output · check report |
946 | accepted | PASS | input · generic input · output · check report |
947 | accepted | PASS | input · generic input · output · check report |
948 | accepted | PASS | input · generic input · output · check report |
949 | accepted | PASS | input · generic input · output · check report |
950 | accepted | PASS | input · generic input · output · check report |
951 | accepted | PASS | input · generic input · output · check report |
952 | accepted | PASS | input · generic input · output · check report |
953 | accepted | PASS | input · generic input · output · check report |
954 | accepted | PASS | input · generic input · output · check report |
955 | accepted | PASS | input · generic input · output · check report |
956 | accepted | PASS | input · generic input · output · check report |
957 | accepted | PASS | input · generic input · output · check report |
958 | accepted | PASS | input · generic input · output · check report |
959 | accepted | PASS | input · generic input · output · check report |
960 | accepted | PASS | input · generic input · output · check report |
961 | accepted | PASS | input · generic input · output · check report |
962 | accepted | PASS | input · generic input · output · check report |
963 | accepted | PASS | input · generic input · output · check report |
964 | accepted | PASS | input · generic input · output · check report |
965 | rejected | input · stderr<stdin>:0:0: error: canonical Dataflow publication failed: graph @g_thread_0 completion witness #0 is not statically one-shot
<stdin>:0:0: note: see current operation:
"builtin.module"() ({
"llvm.func"() <{CConv = #llvm.cconv<ccc>, function_type = !llvm.func<i64 (i64)>, linkage = #llvm.linkage<external>, sym_name = "imported_callable", unnamed_addr = 0 : i64, visibility_ = 0 : i64}> ({
}) : () -> ()
"func.func"() <{function_type = (i32) -> i32, sym_name = "native_callable", sym_visibility = "private"}> ({
^bb0(%arg9: i32):
"func.return"(%arg9) : (i32) -> ()
}) : () -> ()
"dataflow.thread"() <{domain = #dataflow.thread_domain<dense>, function_type = (index, memref<?xindex>) -> (), sym_name = "thread_0", sym_visibility = "private"}> ({
^bb0(%arg6: index, %arg7: memref<?xindex>, %arg8: none):
%75 = "dataflow.graph.launch"(%arg8, %arg6, %arg7) <{callee = @g_thread_0, operandSegmentSizes = array<i32: 1, 1, 0, 1, 0>, resultSegmentSizes = array<i32: 0, 0, 1>, source_maps = []}> : (none, index, memref<?xindex>) -> none
"dataflow.thread.yield"(%75) : (none) -> ()
}) : () -> ()
"dataflow.thread"() <{domain = #dataflow.thread_domain<dense>, function_type = (index, memref<?xindex>) -> (), sym_name = "thread_1", sym_visibility = "private"}> ({
^bb0(%arg3: index, %arg4: memref<?xindex>, %arg5: none):
%73 = "arith.constant"() <{value = 0 : index}> : () -> index
%74 = "arith.constant"() <{value = 1 : index}> : () -> index
"memref.store"(%74, %arg4, %73) : (index, memref<?xindex>, index) -> ()
"dataflow.thread.yield"() : () -> ()
}) : () -> ()
"dataflow.graph"() <{arg_attrs = [{}, {llvm.noalias}], function_type = (index, memref<?xindex>) -> (), input_segments = array<i32: 1, 0, 1>, result_segments = array<i32: 0, 0, 0>, sym_name = "g_thread_0", sym_visibility = "private"}> ({
^bb0(%arg0: none, %arg1: index, %arg2: memref<?xindex>):
%0 = "dataflow.constant"(%arg0) <{const_value = 0 : index}> : (none) -> index
%1 = "dataflow.constant"(%arg0) <{const_value = 1 : index}> : (none) -> index
%2 = "dataflow.constant"(%arg0) <{const_value = 2 : index}> : (none) -> index
%3 = "arith.index_cast"(%0) : (index) -> i32
%4 = "arith.index_cast"(%2) : (index) -> i32
%5 = "arith.index_cast"(%1) : (index) -> i32
%6:2 = "dataflow.stream"(%3, %4, %5) <{predicate = 2 : i64, step_kind = 0 : i32}> : (i32, i32, i32) -> (i32, i1)
%7 = "dataflow.carry"(%6#1, %arg0, %8#1) : (i1, none, none) -> none
%8:2 = "dataflow.demux"(%6#1, %7) : (i1, none) -> (none, none)
%9 = "dataflow.invariant"(%6#1, %0) : (i1, index) -> index
%10:2 = "dataflow.gate"(%6#1, %9) : (i1, index) -> (i1, index)
%11:2 = "dataflow.demux"(%10#0, %10#1) : (i1, index) -> (index, index)
%12 = "dataflow.invariant"(%6#1, %1) : (i1, index) -> index
%13:2 = "dataflow.gate"(%6#1, %12) : (i1, index) -> (i1, index)
%14:2 = "dataflow.demux"(%13#0, %13#1) : (i1, index) -> (index, index)
%15 = "dataflow.carry"(%6#1, %arg0, %26) : (i1, none, none) -> none
%16 = "dataflow.carry"(%6#1, %arg0, %26) : (i1, none, none) -> none
%17:2 = "dataflow.demux"(%6#1, %15) : (i1, none) -> (none, none)
%18:2 = "dataflow.demux"(%6#1, %16) : (i1, none) -> (none, none)
%19:2 = "dataflow.sync"(%8#1, %17#1) : (none, none) -> (none, none)
%20:2 = "dataflow.load"(%arg2, %10#1, %19#0) : (memref<?xindex>, index, none) -> (index, none)
%21:2 = "dataflow.sync"(%18#1, %20#1) : (none, none) -> (none, none)
%22 = "arith.addi"(%20#0, %13#1) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
%23 = "dataflow.store"(%arg2, %10#1, %22, %21#0) : (memref<?xindex>, index, index, none) -> none
%24:2 = "dataflow.load"(%arg2, %10#1, %23) : (memref<?xindex>, index, none) -> (index, none)
%25 = "arith.addi"(%24#0, %13#1) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
%26 = "dataflow.store"(%arg2, %10#1, %25, %24#1) : (memref<?xindex>, index, index, none) -> none
%27 = "arith.cmpi"(%3, %4) <{predicate = 2 : i64}> : (i32, i32) -> i1
%28:2 = "dataflow.demux"(%27, %8#0) : (i1, none) -> (none, none)
%29:3 = "dataflow.sync"(%28#1, %11#0, %14#0) : (none, index, index) -> (none, index, index)
%30 = "dataflow.mux"(%27, %28#0, %29#0) : (i1, none, none) -> none
%31 = "arith.index_cast"(%0) : (index) -> i32
%32 = "arith.index_cast"(%2) : (index) -> i32
%33 = "arith.index_cast"(%1) : (index) -> i32
%34:2 = "dataflow.stream"(%31, %32, %33) <{predicate = 2 : i64, step_kind = 0 : i32}> : (i32, i32, i32) -> (i32, i1)
%35 = "dataflow.carry"(%34#1, %30, %36#1) : (i1, none, none) -> none
%36:2 = "dataflow.demux"(%34#1, %35) : (i1, none) -> (none, none)
%37 = "dataflow.invariant"(%34#1, %1) : (i1, index) -> index
%38:2 = "dataflow.gate"(%34#1, %37) : (i1, index) -> (i1, index)
%39:2 = "dataflow.demux"(%38#0, %38#1) : (i1, index) -> (index, index)
%40 = "dataflow.invariant"(%34#1, %0) : (i1, index) -> index
%41:2 = "dataflow.gate"(%34#1, %40) : (i1, index) -> (i1, index)
%42:2 = "dataflow.demux"(%41#0, %41#1) : (i1, index) -> (index, index)
%43 = "dataflow.carry"(%34#1, %18#0, %46) : (i1, none, none) -> none
%44:2 = "dataflow.demux"(%34#1, %43) : (i1, none) -> (none, none)
%45:2 = "dataflow.sync"(%36#1, %44#1) : (none, none) -> (none, none)
%46 = "dataflow.store"(%arg2, %41#1, %38#1, %45#0) : (memref<?xindex>, index, index, none) -> none
%47 = "arith.cmpi"(%31, %32) <{predicate = 2 : i64}> : (i32, i32) -> i1
%48:2 = "dataflow.demux"(%47, %36#0) : (i1, none) -> (none, none)
%49:3 = "dataflow.sync"(%48#1, %39#0, %42#0) : (none, index, index) -> (none, index, index)
%50 = "dataflow.mux"(%47, %48#0, %49#0) : (i1, none, none) -> none
%51 = "arith.index_cast"(%0) : (index) -> i32
%52 = "arith.index_cast"(%2) : (index) -> i32
%53 = "arith.index_cast"(%1) : (index) -> i32
%54:2 = "dataflow.stream"(%51, %52, %53) <{predicate = 2 : i64, step_kind = 0 : i32}> : (i32, i32, i32) -> (i32, i1)
%55 = "dataflow.carry"(%54#1, %30, %56#1) : (i1, none, none) -> none
%56:2 = "dataflow.demux"(%54#1, %55) : (i1, none) -> (none, none)
%57 = "dataflow.invariant"(%54#1, %1) : (i1, index) -> index
%58:2 = "dataflow.gate"(%54#1, %57) : (i1, index) -> (i1, index)
%59:2 = "dataflow.demux"(%58#0, %58#1) : (i1, index) -> (index, index)
%60 = "dataflow.invariant"(%54#1, %1) : (i1, index) -> index
%61:2 = "dataflow.gate"(%54#1, %60) : (i1, index) -> (i1, index)
%62:2 = "dataflow.demux"(%61#0, %61#1) : (i1, index) -> (index, index)
%63 = "dataflow.carry"(%54#1, %18#0, %66) : (i1, none, none) -> none
%64:2 = "dataflow.demux"(%54#1, %63) : (i1, none) -> (none, none)
%65:2 = "dataflow.sync"(%56#1, %64#1) : (none, none) -> (none, none)
%66 = "dataflow.store"(%arg2, %61#1, %58#1, %65#0) : (memref<?xindex>, index, index, none) -> none
%67 = "arith.cmpi"(%51, %52) <{predicate = 2 : i64}> : (i32, i32) -> i1
%68:2 = "dataflow.demux"(%67, %56#0) : (i1, none) -> (none, none)
%69:3 = "dataflow.sync"(%68#1, %59#0, %62#0) : (none, index, index) -> (none, index, index)
%70 = "dataflow.mux"(%67, %68#0, %69#0) : (i1, none, none) -> none
%71:2 = "dataflow.sync"(%50, %70) : (none, none) -> (none, none)
%72:2 = "dataflow.sync"(%44#0, %64#0) : (none, none) -> (none, none)
"dataflow.graph.return"(%71#0, %72#0) <{operandSegmentSizes = array<i32: 0, 0, 0, 2>}> : (none, none) -> ()
}) : () -> ()
}) : () -> ()
| |
966 | accepted | PASS | input · generic input · output · check report |
967 | accepted | PASS | input · generic input · output · check report |
968 | accepted | PASS | input · generic input · output · check report |
969 | accepted | PASS | input · generic input · output · check report |
970 | accepted | PASS | input · generic input · output · check report |
971 | accepted | PASS | input · generic input · output · check report |
972 | accepted | PASS | input · generic input · output · check report |
973 | accepted | PASS | input · generic input · output · check report |
974 | accepted | PASS | input · generic input · output · check report |
975 | accepted | PASS | input · generic input · output · check report |
976 | accepted | PASS | input · generic input · output · check report |
977 | accepted | PASS | input · generic input · output · check report |
978 | accepted | PASS | input · generic input · output · check report |
979 | accepted | PASS | input · generic input · output · check report |
980 | accepted | PASS | input · generic input · output · check report |
981 | accepted | PASS | input · generic input · output · check report |
982 | rejected | input · stderr<stdin>:11:7: error: loom-lower-graph-memory: parallel addresses have no comparable lane projection; address rank is 1
scf.parallel (%iv0) = (%zero) to (%two) step (%one) {
^
<stdin>:11:7: note: see current operation:
"scf.parallel"(%0, %2, %1) <{operandSegmentSizes = array<i32: 1, 1, 1, 0>}> ({
^bb0(%arg3: index):
"scf.forall"() <{operandSegmentSizes = array<i32: 0, 0, 0, 0>, staticLowerBound = array<i64: 0>, staticStep = array<i64: 1>, staticUpperBound = array<i64: 2>}> ({
^bb0(%arg4: index):
%3 = "arith.muli"(%arg3, %2) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
%4 = "arith.addi"(%3, %arg4) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
%5 = "memref.load"(%arg2, %4) : (memref<?xindex>, index) -> index
%6 = "arith.addi"(%5, %1) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
"memref.store"(%6, %arg2, %4) : (index, memref<?xindex>, index) -> ()
"scf.forall.in_parallel"() ({
^bb0:
}) : () -> ()
}) : () -> ()
"scf.reduce"() : () -> ()
}) : (index, index, index) -> ()
| |
983 | accepted | PASS | input · generic input · output · check report |
984 | accepted | PASS | input · generic input · output · check report |
985 | accepted | PASS | input · generic input · output · check report |
986 | accepted | PASS | input · generic input · output · check report |
987 | accepted | PASS | input · generic input · output · check report |
988 | rejected | input · stderr<stdin>:0:0: error: canonical Dataflow publication failed: graph @g_thread_0 completion witness #0 is not statically one-shot
<stdin>:0:0: note: see current operation:
"builtin.module"() ({
"dataflow.thread"() <{domain = #dataflow.thread_domain<dense>, function_type = (index, memref<?xindex>) -> (), sym_name = "thread_0", sym_visibility = "private"}> ({
^bb0(%arg3: index, %arg4: memref<?xindex>, %arg5: none):
%108 = "dataflow.graph.launch"(%arg5, %arg3, %arg4) <{callee = @g_thread_0, operandSegmentSizes = array<i32: 1, 1, 0, 1, 0>, resultSegmentSizes = array<i32: 0, 0, 1>, source_maps = []}> : (none, index, memref<?xindex>) -> none
"dataflow.thread.yield"(%108) : (none) -> ()
}) : () -> ()
"dataflow.graph"() <{arg_attrs = [{}, {llvm.noalias}], function_type = (index, memref<?xindex>) -> (), input_segments = array<i32: 1, 0, 1>, result_segments = array<i32: 0, 0, 0>, sym_name = "g_thread_0", sym_visibility = "private"}> ({
^bb0(%arg0: none, %arg1: index, %arg2: memref<?xindex>):
%0 = "dataflow.constant"(%arg0) <{const_value = 0 : index}> : (none) -> index
%1 = "dataflow.constant"(%arg0) <{const_value = 1 : index}> : (none) -> index
%2 = "dataflow.constant"(%arg0) <{const_value = 2 : index}> : (none) -> index
%3 = "arith.addi"(%77#0, %1) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
%4 = "arith.addi"(%103#0, %1) <{overflowFlags = #arith.overflow<none>}> : (index, index) -> index
%5 = "arith.index_cast"(%0) : (index) -> i32
%6 = "arith.index_cast"(%2) : (index) -> i32
%7 = "arith.index_cast"(%1) : (index) -> i32
%8:2 = "dataflow.stream"(%5, %6, %7) <{predicate = 2 : i64, step_kind = 0 : i32}> : (i32, i32, i32) -> (i32, i1)
%9 = "dataflow.carry"(%8#1, %arg0, %10#1) : (i1, none, none) -> none
%10:2 = "dataflow.demux"(%8#1, %9) : (i1, none) -> (none, none)
%11 = "dataflow.invariant"(%8#1, %1) : (i1, index) -> index
%12:2 = "dataflow.gate"(%8#1, %11) : (i1, index) -> (i1, index)
%13:2 = "dataflow.demux"(%12#0, %12#1) : (i1, index) -> (index, index)
%14 = "dataflow.invariant"(%8#1, %0) : (i1, index) -> index
%15:2 = "dataflow.gate"(%8#1, %14) : (i1, index) -> (i1, index)
%16:2 = "dataflow.demux"(%15#0, %15#1) : (i1, index) -> (index, index)
%17 = "dataflow.carry"(%8#1, %arg0, %23) : (i1, none, none) -> none
%18 = "dataflow.carry"(%8#1, %arg0, %23) : (i1, none, none) -> none
%19:2 = "dataflow.demux"(%8#1, %17) : (i1, none) -> (none, none)
%20:2 = "dataflow.demux"(%8#1, %18) : (i1, none) -> (none, none)
%21:2 = "dataflow.sync"(%10#1, %20#1) : (none, none) -> (none, none)
%22 = "dataflow.store"(%arg2, %15#1, %12#1, %21#0) : (memref<?xindex>, index, index, none) -> none
%23 = "dataflow.store"(%arg2, %15#1, %12#1, %22) : (memref<?xindex>, index, index, none) -> none
%24 = "arith.cmpi"(%5, %6) <{predicate = 2 : i64}> : (i32, i32) -> i1
%25:2 = "dataflow.demux"(%24, %10#0) : (i1, none) -> (none, none)
%26:3 = "dataflow.sync"(%25#1, %13#0, %16#0) : (none, index, index) -> (none, index, index)
%27 = "dataflow.mux"(%24, %25#0, %26#0) : (i1, none, none) -> none
%28 = "arith.index_cast"(%0) : (index) -> i32
%29 = "arith.index_cast"(%2) : (index) -> i32
%30 = "arith.index_cast"(%1) : (index) -> i32
%31:2 = "dataflow.stream"(%28, %29, %30) <{predicate = 2 : i64, step_kind = 0 : i32}> : (i32, i32, i32) -> (i32, i1)
%32 = "dataflow.carry"(%31#1, %arg0, %33#1) : (i1, none, none) -> none
%33:2 = "dataflow.demux"(%31#1, %32) : (i1, none) -> (none, none)
%34 = "dataflow.invariant"(%31#1, %1) : (i1, index) -> index
%35:2 = "dataflow.gate"(%31#1, %34) : (i1, index) -> (i1, index)
%36:2 = "dataflow.demux"(%35#0, %35#1) : (i1, index) -> (index, index)
%37 = "dataflow.invariant"(%31#1, %1) : (i1, index) -> index
%38:2 = "dataflow.gate"(%31#1, %37) : (i1, index) -> (i1, index)
%39:2 = "dataflow.demux"(%38#0, %38#1) : (i1, index) -> (index, index)
%40 = "dataflow.carry"(%31#1, %arg0, %46) : (i1, none, none) -> none
%41 = "dataflow.carry"(%31#1, %arg0, %46) : (i1, none, none) -> none
%42:2 = "dataflow.demux"(%31#1, %40) : (i1, none) -> (none, none)
%43:2 = "dataflow.demux"(%31#1, %41) : (i1, none) -> (none, none)
%44:2 = "dataflow.sync"(%33#1, %43#1) : (none, none) -> (none, none)
%45 = "dataflow.store"(%arg2, %38#1, %35#1, %44#0) : (memref<?xindex>, index, index, none) -> none
%46 = "dataflow.store"(%arg2, %38#1, %35#1, %45) : (memref<?xindex>, index, index, none) -> none
%47 = "arith.cmpi"(%28, %29) <{predicate = 2 : i64}> : (i32, i32) -> i1
%48:2 = "dataflow.demux"(%47, %33#0) : (i1, none) -> (none, none)
%49:3 = "dataflow.sync"(%48#1, %36#0, %39#0) : (none, index, index) -> (none, index, index)
%50 = "dataflow.mux"(%47, %48#0, %49#0) : (i1, none, none) -> none
%51:2 = "dataflow.sync"(%27, %50) : (none, none) -> (none, none)
%52:2 = "dataflow.sync"(%19#0, %42#0) : (none, none) -> (none, none)
%53:2 = "dataflow.sync"(%20#0, %43#0) : (none, none) -> (none, none)
%54 = "arith.index_cast"(%0) : (index) -> i32
%55 = "arith.index_cast"(%2) : (index) -> i32
%56 = "arith.index_cast"(%1) : (index) -> i32
%57:2 = "dataflow.stream"(%54, %55, %56) <{predicate = 2 : i64, step_kind = 0 : i32}> : (i32, i32, i32) -> (i32, i1)
%58 = "dataflow.carry"(%57#1, %51#0, %59#1) : (i1, none, none) -> none
%59:2 = "dataflow.demux"(%57#1, %58) : (i1, none) -> (none, none)
%60 = "dataflow.invariant"(%57#1, %1) : (i1, index) -> index
%61:2 = "dataflow.gate"(%57#1, %60) : (i1, index) -> (i1, index)
%62:2 = "dataflow.demux"(%61#0, %61#1) : (i1, index) -> (index, index)
%63 = "dataflow.invariant"(%57#1, %0) : (i1, index) -> index
%64:2 = "dataflow.gate"(%57#1, %63) : (i1, index) -> (i1, index)
%65:2 = "dataflow.demux"(%64#0, %64#1) : (i1, index) -> (index, index)
%66 = "dataflow.carry"(%57#1, %52#0, %71) : (i1, none, none) -> none
%67 = "dataflow.carry"(%57#1, %53#0, %71) : (i1, none, none) -> none
%68:2 = "dataflow.demux"(%57#1, %66) : (i1, none) -> (none, none)
%69:2 = "dataflow.demux"(%57#1, %67) : (i1, none) -> (none, none)
%70:2 = "dataflow.sync"(%59#1, %69#1) : (none, none) -> (none, none)
%71 = "dataflow.store"(%arg2, %64#1, %61#1, %70#0) : (memref<?xindex>, index, index, none) -> none
%72 = "arith.cmpi"(%54, %55) <{predicate = 2 : i64}> : (i32, i32) -> i1
%73:2 = "dataflow.demux"(%72, %59#0) : (i1, none) -> (none, none)
%74:3 = "dataflow.sync"(%73#1, %62#0, %65#0) : (none, index, index) -> (none, index, index)
%75 = "dataflow.mux"(%72, %73#0, %74#0) : (i1, none, none) -> none
%76:2 = "dataflow.sync"(%75, %68#0) : (none, none) -> (none, none)
%77:2 = "dataflow.load"(%arg2, %0, %76#0) : (memref<?xindex>, index, none) -> (index, none)
%78:2 = "dataflow.sync"(%69#0, %77#1) : (none, none) -> (none, none)
%79 = "dataflow.store"(%arg2, %0, %3, %78#0) : (memref<?xindex>, index, index, none) -> none
%80 = "arith.index_cast"(%0) : (index) -> i32
%81 = "arith.index_cast"(%2) : (index) -> i32
%82 = "arith.index_cast"(%1) : (index) -> i32
%83:2 = "dataflow.stream"(%80, %81, %82) <{predicate = 2 : i64, step_kind = 0 : i32}> : (i32, i32, i32) -> (i32, i1)
%84 = "dataflow.carry"(%83#1, %51#0, %85#1) : (i1, none, none) -> none
%85:2 = "dataflow.demux"(%83#1, %84) : (i1, none) -> (none, none)
%86 = "dataflow.invariant"(%83#1, %1) : (i1, index) -> index
%87:2 = "dataflow.gate"(%83#1, %86) : (i1, index) -> (i1, index)
%88:2 = "dataflow.demux"(%87#0, %87#1) : (i1, index) -> (index, index)
%89 = "dataflow.invariant"(%83#1, %1) : (i1, index) -> index
%90:2 = "dataflow.gate"(%83#1, %89) : (i1, index) -> (i1, index)
%91:2 = "dataflow.demux"(%90#0, %90#1) : (i1, index) -> (index, index)
%92 = "dataflow.carry"(%83#1, %52#0, %97) : (i1, none, none) -> none
%93 = "dataflow.carry"(%83#1, %53#0, %97) : (i1, none, none) -> none
%94:2 = "dataflow.demux"(%83#1, %92) : (i1, none) -> (none, none)
%95:2 = "dataflow.demux"(%83#1, %93) : (i1, none) -> (none, none)
%96:2 = "dataflow.sync"(%85#1, %95#1) : (none, none) -> (none, none)
%97 = "dataflow.store"(%arg2, %90#1, %87#1, %96#0) : (memref<?xindex>, index, index, none) -> none
%98 = "arith.cmpi"(%80, %81) <{predicate = 2 : i64}> : (i32, i32) -> i1
%99:2 = "dataflow.demux"(%98, %85#0) : (i1, none) -> (none, none)
%100:3 = "dataflow.sync"(%99#1, %88#0, %91#0) : (none, index, index) -> (none, index, index)
%101 = "dataflow.mux"(%98, %99#0, %100#0) : (i1, none, none) -> none
%102:2 = "dataflow.sync"(%101, %94#0) : (none, none) -> (none, none)
%103:2 = "dataflow.load"(%arg2, %1, %102#0) : (memref<?xindex>, index, none) -> (index, none)
%104:2 = "dataflow.sync"(%95#0, %103#1) : (none, none) -> (none, none)
%105 = "dataflow.store"(%arg2, %1, %4, %104#0) : (memref<?xindex>, index, index, none) -> none
%106:2 = "dataflow.sync"(%75, %101) : (none, none) -> (none, none)
%107:2 = "dataflow.sync"(%79, %105) : (none, none) -> (none, none)
"dataflow.graph.return"(%106#0, %107#0) <{operandSegmentSizes = array<i32: 0, 0, 0, 2>}> : (none, none) -> ()
}) : () -> ()
}) : () -> ()
| |
989 | accepted | PASS | input · generic input · output · check report |
990 | accepted | PASS | input · generic input · output · check report |
991 | accepted | PASS | input · generic input · output · check report |
992 | accepted | PASS | input · generic input · output · check report |
993 | accepted | PASS | input · generic input · output · check report |
994 | accepted | PASS | input · generic input · output · check report |
995 | accepted | PASS | input · generic input · output · check report |
996 | accepted | PASS | input · generic input · output · check report |
997 | accepted | PASS | input · generic input · output · check report |
998 | accepted | PASS | input · generic input · output · check report |
999 | accepted | PASS | input · generic input · output · check report |
partial source coverage: Approved for execution and public reporting; translation accuracy and completeness remain separately unvalidated.
authoring-context.json{"entries":[{"file_sha256":"d76b4cb1e888697d5f011a939e68cbc6230647c4d457c12d22689740aa43a44d","kind":"documentation_input","lines":"87-90","path":"docs/spec-compiler-part-3-dfg.md","roles":["applicability","input_construction"],"text":"Between Parts 2 and 3, SCF optimization and DSE produce the selected\nStructured Program Candidate. That domain owns all performance-distinct\nstructured choices. Part 3 begins only after those choices and their typed\nownership carriers are explicit.","why":"Part 3 begins only after the selected Structured Program Candidate is explicit, so the grammar emits already-selected ownership carriers rather than raw host SCF."},{"file_sha256":"d76b4cb1e888697d5f011a939e68cbc6230647c4d457c12d22689740aa43a44d","kind":"documentation_input","lines":"92-100","path":"docs/spec-compiler-part-3-dfg.md","roles":["input_construction","input_well_formedness"],"text":"Input to graph extraction is an MLIR module containing module-scope\n`dataflow.thread` definitions. Every selected SpatialCore candidate is already\nmaterialized as a `loom.spatial_region` inside exactly one thread. Other thread\nbody code remains InstructionCore-resident, including SCF-shaped code outside\nan explicit spatial boundary. Imported Host or InstructionCore code remains in\nits `llvm.func` envelope; genuinely standard-MLIR-native `func.func` callables\nmay coexist in the module. Either callable is ownership-neutral and does not\nauthorize graph creation through its signature, body shape, memory effects, or\nreturn convention.","why":"Fixes the top-level input shape: module-scope dataflow.thread definitions, each selected SpatialCore candidate materialized as a loom.spatial_region inside exactly one thread, InstructionCore-resident thread code outside spatial boundaries, and coexisting ownership-neutral llvm.func / func.func callables."},{"file_sha256":"d76b4cb1e888697d5f011a939e68cbc6230647c4d457c12d22689740aa43a44d","kind":"documentation_input","lines":"102-135","path":"docs/spec-compiler-part-3-dfg.md","roles":["context"],"text":"Output is an initial Canonical Dataflow Program: module-level `llvm.func`\nsymbols for imported LLVM callables, any genuinely native `func.func` helpers,\nmodule-level\n`dataflow.thread` definitions reached by zero or more\n`dataflow.thread.launch` ops; and module-level `dataflow.graph`\ndefinitions reached by zero or more `dataflow.graph.launch` ops\ninside thread definitions. No `scf.*` op is left inside any\n`dataflow.graph` definition's body after successful graph-region lowering.\nThe recursive lowering contract accepts arbitrary nesting of\n`scf.if`, source-sequential `scf.for`, `scf.while`, and fixed-width\ngraph-owned `scf.parallel` or effect-form `scf.forall`. A graph-owned parallel\nop must have a compile-time fixed domain, and all facts needed to establish\nownership, width, and cross-lane legality must be present in the current\nStructured Program Candidate's semantic IR and resolved lowering config.\nThe lowerer re-proves those facts; lineage, cached analyses, and external\nprovenance cannot make an otherwise invalid candidate legal. Dynamic-width,\nresource-mapped, and result or reduction forms fail before any graph is\nmutated; the graph owner does not infer ownership, serialization, unrolling,\nor reduction order. The\n`dataflow.thread.launch` op carries the completion token and\nmapped-memory data transfer; the def remains a callable kernel\nbody, not a tensor-result returning op. Memory dependence\nconstruction runs in the recursive graph owner using basic graph-local alias\nroots and per-partition write/read frontiers (see\n`docs/spec-compiler-part-3-mem.md`).\nThe Structured Transfer Algebra defines graph-owned parallel composition only\nafter the Structured Program Candidate has materialized its P[] ownership and\nschedule form in semantic SCF. That fixed-domain SCF is the transient input\nrepresentation for mechanical lowering. It is recursively replicated into\nstatic lanes and removed; no parallel control op or schedule record survives\nin canonical graph IR.\nGraph candidate eligibility and atomic publication are governed by this\ndocument. TechMapping, SpatialMapping, and SystemMapping realization are\noutside this IR.","why":"Governing context for the sampled obligation; supplies the Canonical Dataflow Program terminology (module-level thread/graph definitions, graph.launch inside thread definitions) used to phrase the postcondition."},{"file_sha256":"d76b4cb1e888697d5f011a939e68cbc6230647c4d457c12d22689740aa43a44d","kind":"documentation_input","lines":"110-117","path":"docs/spec-compiler-part-3-dfg.md","roles":["input_construction","input_well_formedness"],"text":"The recursive lowering contract accepts arbitrary nesting of\n`scf.if`, source-sequential `scf.for`, `scf.while`, and fixed-width\ngraph-owned `scf.parallel` or effect-form `scf.forall`. A graph-owned parallel\nop must have a compile-time fixed domain, and all facts needed to establish\nownership, width, and cross-lane legality must be present in the current\nStructured Program Candidate's semantic IR and resolved lowering config.\nThe lowerer re-proves those facts; lineage, cached analyses, and external\nprovenance cannot make an otherwise invalid candidate legal. Dynamic-width,","why":"The recursive lowering contract: arbitrary nesting of scf.if, source-sequential scf.for, scf.while, and fixed-width graph-owned scf.parallel / effect-form scf.forall, with ownership, width and cross-lane legality facts present in the candidate itself. Drives the nested stmt rule and the lane-disjoint index construction."},{"file_sha256":"d76b4cb1e888697d5f011a939e68cbc6230647c4d457c12d22689740aa43a44d","kind":"documentation_input","lines":"117-120","path":"docs/spec-compiler-part-3-dfg.md","roles":["input_well_formedness"],"text":"provenance cannot make an otherwise invalid candidate legal. Dynamic-width,\nresource-mapped, and result or reduction forms fail before any graph is\nmutated; the graph owner does not infer ownership, serialization, unrolling,\nor reduction order. The","why":"Dynamic-width, resource-mapped, and result or reduction parallel forms fail before any graph is mutated; the grammar therefore samples only constant-bound scf.parallel with a bare scf.reduce and scf.forall without shared_outs."},{"file_sha256":"d76b4cb1e888697d5f011a939e68cbc6230647c4d457c12d22689740aa43a44d","kind":"documentation_input","lines":"127-132","path":"docs/spec-compiler-part-3-dfg.md","roles":["input_construction","input_well_formedness"],"text":"The Structured Transfer Algebra defines graph-owned parallel composition only\nafter the Structured Program Candidate has materialized its P[] ownership and\nschedule form in semantic SCF. That fixed-domain SCF is the transient input\nrepresentation for mechanical lowering. It is recursively replicated into\nstatic lanes and removed; no parallel control op or schedule record survives\nin canonical graph IR.","why":"Fixed-domain semantic SCF is the transient input representation for mechanical lowering; justifies generating the parallel domain as compile-time constants inside the spatial region."},{"file_sha256":"d76b4cb1e888697d5f011a939e68cbc6230647c4d457c12d22689740aa43a44d","kind":"documentation_input","lines":"1454-1461","path":"docs/spec-compiler-part-3-dfg.md","roles":["input_construction","input_well_formedness"],"text":"This section records Dataflow templates for SCF boundaries. Recursive lowering\napplies the same transfer to `scf.if`, normalized `scf.index_switch`,\nsource-sequential `scf.for`, `scf.while`, and fixed-domain\neffect-form `scf.parallel` / `scf.forall`. A zero-case `scf.index_switch` is\nreplaced by its default region during structured normalization. Other\nunsupported source forms must be normalized by Part 2 before handoff of the\nselected Structured Program Candidate and are rejected if they remain in a\ngraph.","why":"Enumerates the SCF boundary forms the same transfer applies to, bounding the set of control constructs the grammar samples inside a graph candidate."},{"file_sha256":"73f239de628bbf8d40145ecde732142ffcf6567c9483e6dc2286ae9176a6907c","kind":"language_definition","lines":"8-101","path":"include/Frontend/IR/LoomOps.td","roles":["input_construction","input_well_formedness"],"text":"def Loom_SpatialRegionOp : Loom_Op<\"spatial_region\", [\n IsolatedFromAbove,\n SingleBlock,\n AttrSizedOperandSegments,\n AttrSizedResultSegments,\n RecursiveMemoryEffects\n]> {\n let summary = \"Structured candidate for one SpatialCore graph\";\n let description = [{\n Holds one structured candidate inside a `dataflow.thread`. Operands are\n normalized as value inputs, stream input channels, memory inputs, and\n stream output channels. Results are normalized as value outputs followed\n by memory outputs. Each stream input has one affine `source_map`.\n\n This operation is temporary compiler IR. Successful publication replaces\n it with one native-valid `dataflow.graph` and its matching launch.\n }];\n\n let arguments = (ins\n Variadic<AnyType>:$valueInputs,\n Variadic<Dataflow_ChannelType>:$streamInputs,\n Variadic<AnyType>:$memoryInputs,\n Variadic<Dataflow_ChannelType>:$streamOutputs,\n AffineMapArrayAttr:$source_maps,\n OptionalAttr<StrAttr>:$graph_name);\n\n let results = (outs\n Variadic<AnyType>:$valueResults,\n Variadic<AnyType>:$memoryResults);\n\n let regions = (region AnyRegion:$body);\n\n let skipDefaultBuilders = 1;\n let builders = [\n OpBuilder<(ins\n \"::mlir::ValueRange\":$valueInputs,\n \"::mlir::ValueRange\":$streamInputs,\n \"::mlir::ValueRange\":$memoryInputs,\n \"::mlir::ValueRange\":$streamOutputs,\n \"::mlir::TypeRange\":$valueResultTypes,\n \"::mlir::TypeRange\":$memoryResultTypes,\n \"::mlir::ArrayAttr\":$sourceMaps,\n CArg<\"::mlir::StringAttr\", \"{}\">:$graphName), [{\n $_state.addOperands(valueInputs);\n $_state.addOperands(streamInputs);\n $_state.addOperands(memoryInputs);\n $_state.addOperands(streamOutputs);\n $_state.addTypes(valueResultTypes);\n $_state.addTypes(memoryResultTypes);\n $_state.addAttribute(\"source_maps\", sourceMaps);\n if (graphName)\n $_state.addAttribute(\"graph_name\", graphName);\n auto &properties = $_state.getOrAddProperties<Properties>();\n properties.operandSegmentSizes = {\n static_cast<int32_t>(valueInputs.size()),\n static_cast<int32_t>(streamInputs.size()),\n static_cast<int32_t>(memoryInputs.size()),\n static_cast<int32_t>(streamOutputs.size())};\n properties.resultSegmentSizes = {\n static_cast<int32_t>(valueResultTypes.size()),\n static_cast<int32_t>(memoryResultTypes.size())};\n $_state.addRegion();\n }]>\n ];\n\n let hasVerifier = 1;\n}\n\ndef Loom_SpatialYieldOp : Loom_Op<\"spatial_yield\", [\n Terminator,\n ParentOneOf<[\"::loom::SpatialRegionOp\"]>,\n AttrSizedOperandSegments,\n Pure\n]> {\n let summary = \"Yield value and memory results from a spatial candidate\";\n\n let arguments = (ins\n Variadic<AnyType>:$values,\n Variadic<AnyType>:$memories);\n\n let skipDefaultBuilders = 1;\n let builders = [\n OpBuilder<(ins\n \"::mlir::ValueRange\":$values,\n \"::mlir::ValueRange\":$memories), [{\n $_state.addOperands(values);\n $_state.addOperands(memories);\n auto &properties = $_state.getOrAddProperties<Properties>();\n properties.operandSegmentSizes = {\n static_cast<int32_t>(values.size()),\n static_cast<int32_t>(memories.size())};\n }]>\n ];","why":"loom.spatial_region / loom.spatial_yield definitions: IsolatedFromAbove single-block body, the value/stream-in/memory/stream-out operand segmentation and value/memory result segmentation encoded as operandSegmentSizes and resultSegmentSizes, and the source_maps / graph_name attributes the grammar must spell."},{"file_sha256":"f4e60b2e62b496c3714437bd100ab5236540abebd3685dfbd25eeddb37cb7160","kind":"language_definition","lines":"614-765","path":"include/Dataflow/IR/DataflowOps.td","roles":["input_construction","input_well_formedness"],"text":"def Dataflow_ThreadOp : Dataflow_Op<\"thread\", [\n AutomaticAllocationScope,\n IsolatedFromAbove,\n HasParent<\"::mlir::ModuleOp\">,\n SingleBlockImplicitTerminator<\"ThreadYieldOp\">,\n FunctionOpInterface,\n RecursiveMemoryEffects\n]> {\n let summary = \"Symbol-bearing function-like AccCore kernel definition\";\n let description = [{\n Module-scope, function-like callable that holds an AccCore kernel\n body. It does not itself execute; one or more\n `dataflow.thread.launch` ops materialize launches of it.\n\n The body's entry block has the layout\n `(args_*, thread_ctrl: none, iv_*: index)` (per spec section\n 5.4.1). The first N block args mirror `function_type.inputs`; the\n trailing `thread_ctrl` and grid index args are NOT in\n `function_type` (they are launch-instance extras). Specifically:\n\n * Args[0 .. N-1] match `function_type.inputs` position-wise.\n * Args[N] is `none` -- the per-launch `thread_ctrl`\n slot, used as the AccCore start signal and\n consumed by root `dataflow.graph.launch` ops\n in the body as a dependency event.\n * Args[N+1 .. end] are all `index` -- one per grid dim.\n\n The custom assembly format prints the required `domain(...)` immediately\n after the symbol and the trailing extras after the function-style\n signature using a separate `ctrl ( ... )` clause\n (the `thread_ctrl` slot) and an `iv ( ... )` clause (the\n grid-index slots). Either / both clauses are optional; threads\n written without them are accepted at parse time only when the op\n is external (i.e., body is empty), since a body-having thread\n must carry the trailing `thread_ctrl` slot per the verifier.\n\n The op is `IsolatedFromAbove`; values flow in only through the\n matching `dataflow.thread.launch` body operands.\n\n Every definition carries one closed `domain`: DenseRectangular or\n DynamicWork. Dense rank is derived solely from the trailing index block\n arguments. DynamicWork carries one ordinary function-input ordinal and has\n no coordinate suffix.\n }];\n\n let arguments = (ins\n SymbolNameAttr:$sym_name,\n TypeAttrOf<FunctionType>:$function_type,\n Dataflow_ThreadDomainAttr:$domain,\n OptionalAttr<StrAttr>:$sym_visibility,\n OptionalAttr<DictArrayAttr>:$arg_attrs,\n OptionalAttr<DictArrayAttr>:$res_attrs);\n\n let regions = (region SizedRegion<1>:$body);\n\n let hasCustomAssemblyFormat = 1;\n let hasVerifier = 1;\n\n let builders = [\n OpBuilder<(ins\n \"::llvm::StringRef\":$name,\n \"::mlir::FunctionType\":$type,\n \"::dataflow::ThreadDomainAttr\":$domain,\n CArg<\"::llvm::ArrayRef<::mlir::NamedAttribute>\", \"{}\">:$attrs)>\n ];\n\n let extraClassDeclaration = [{\n /// FunctionOpInterface methods.\n ::llvm::ArrayRef<::mlir::Type> getArgumentTypes() {\n return getFunctionType().getInputs();\n }\n ::llvm::ArrayRef<::mlir::Type> getResultTypes() {\n return getFunctionType().getResults();\n }\n ::mlir::Region *getCallableRegion() {\n return isExternal() ? nullptr : &getBody();\n }\n bool isExternal() { return getBody().empty(); }\n\n /// Override the default FunctionOpInterface body verifier: a\n /// dataflow.thread body's entry block leads with the\n /// function-signature args, then a `none`-typed `thread_ctrl`\n /// slot, then zero or more `index`-typed `iv_*` slots (per spec\n /// section 5.4.1: `(args_*, thread_ctrl, iv_*)`).\n ::llvm::LogicalResult verifyBody() {\n if (isExternal())\n return ::mlir::success();\n ::mlir::Block &entry = getBody().front();\n ::llvm::ArrayRef<::mlir::Type> inputs = getFunctionType().getInputs();\n const size_t N = inputs.size();\n // Body-carrying threads MUST have the trailing thread_ctrl slot.\n if (entry.getNumArguments() < N + 1)\n return emitOpError(\"entry block must have at least \")\n << (N + 1)\n << \" arguments (function inputs + 1 thread_ctrl slot)\";\n // First N entry block arguments must match function_type.inputs.\n for (size_t i = 0; i < N; ++i) {\n if (entry.getArgument(i).getType() != inputs[i])\n return emitOpError(\"type of entry block argument #\")\n << i << '(' << entry.getArgument(i).getType()\n << \") must match the corresponding function signature input (\"\n << inputs[i] << ')';\n }\n // Slot N must be the `none`-typed thread_ctrl per spec\n // section 5.4.1.\n if (!::llvm::isa<::mlir::NoneType>(entry.getArgument(N).getType()))\n return emitOpError(\"entry block argument #\")\n << N << \" (thread_ctrl) must have type `none`, got \"\n << entry.getArgument(N).getType();\n if (getDomain().getKind() ==\n ::dataflow::ThreadDomainKind::DynamicWork &&\n entry.getNumArguments() != N + 1)\n return emitOpError(\"dynamic-work thread body must not have coordinate \"\n \"arguments\");\n // All remaining dense-domain slots are grid induction variables of\n // `index`.\n for (size_t i = N + 1, e = entry.getNumArguments(); i < e; ++i) {\n if (!::llvm::isa<::mlir::IndexType>(entry.getArgument(i).getType()))\n return emitOpError(\"entry block argument #\")\n << i << \" (grid iv) must have type `index`, got \"\n << entry.getArgument(i).getType();\n }\n return ::mlir::success();\n }\n }];\n}\n\ndef Dataflow_ThreadYieldOp : Dataflow_Op<\"thread.yield\", [\n Terminator,\n ParentOneOf<[\"::dataflow::ThreadOp\"]>,\n Pure\n]> {\n let summary = \"Terminator for a dataflow.thread body\";\n let description = [{\n Accepts an unordered all-of completion frontier of `none` values.\n Tensor-result aggregation from `scf.forall` is materialised into\n explicit destination-buffer writes before thread promotion, so the\n thread definition has no parallel combining region or thread data\n results.\n }];\n\n let arguments = (ins Variadic<NoneType>:$completionFrontier);\n\n let assemblyFormat = \"($completionFrontier^ `:` type($completionFrontier))? attr-dict\";\n\n let skipDefaultBuilders = 1;\n let builders = [\n OpBuilder<(ins CArg<\"::mlir::ValueRange\", \"{}\">:$completionFrontier), [{\n $_state.addOperands(completionFrontier);\n }]>\n ];\n}","why":"dataflow.thread definition: HasParent ModuleOp, IsolatedFromAbove, implicit ThreadYieldOp terminator, thread domain attribute and ctrl argument; fixes the module-scope thread syntax the grammar emits."},{"file_sha256":"7f380008fb405f6cf8d60d16d1b5980dc1d2e694f9842bcfeb6538fbcfa01099","kind":"implementation","lines":"1-57","path":"lib/Frontend/Lowering/Pipeline.cpp","roles":["applicability","context"],"text":"// Pipeline glue and pass-registry hooks for the SCF-to-DFG lowering\n// passes. The standard pipeline runs:\n//\n// loom-lower-for-to-graph (module-level)\n//\n// `loom-lower-for-to-graph` owns the atomic publication transaction. It\n// consumes explicit loom.spatial_region candidates, runs graph finalization\n// on a scratch module, validates the native result, and publishes only the\n// completed module. Graph memref-copy expansion is part of that finalization,\n// so a copy the current profile cannot expand fails the transaction instead of\n// reaching the published program.\n//\n// Thread ownership must already be present in the Structured Program\n// Candidate. The independently registered forall pass only diagnoses raw\n// implicit promotion requests.\n\n#include \"Frontend/Lowering/Passes.h\"\n\n#include \"mlir/Pass/PassManager.h\"\n#include \"mlir/Pass/PassRegistry.h\"\n#include \"mlir/Transforms/Passes.h\"\n\nnamespace loom {\nnamespace lowering {\n\nvoid registerExpandGraphMemrefCopyPass();\nvoid registerLowerForallToThreadPass();\nvoid registerLowerForToGraphPass();\nvoid registerLowerGraphConstantsPass();\nvoid registerLowerGraphMemoryPass();\n\nstatic void buildPipelineOnOpPassManager(::mlir::OpPassManager &pm) {\n pm.addPass(createLowerForToGraphPass());\n}\n\nvoid registerLoweringPasses() {\n registerExpandGraphMemrefCopyPass();\n registerLowerForallToThreadPass();\n registerLowerForToGraphPass();\n registerLowerGraphConstantsPass();\n registerLowerGraphMemoryPass();\n static bool once = []() {\n ::mlir::PassPipelineRegistration<>(\n \"loom-lower-scf-to-dfg\",\n \"Run the standard Loom SCF-to-DFG lowering pipeline.\",\n buildPipelineOnOpPassManager);\n return true;\n }();\n (void)once;\n}\n\nvoid buildLoweringPipeline(::mlir::PassManager &pm) {\n buildPipelineOnOpPassManager(pm);\n}\n\n} // namespace lowering\n} // namespace loom","why":"Registers the loom-lower-scf-to-dfg pipeline as exactly the loom-lower-for-to-graph pass that owns the atomic spatial_region-to-dataflow.graph publication transaction; confirms the subject-command pass pipeline matches the claimed stage and that ownership must already be present in the input."},{"file_sha256":"320a66521bba7346cf97dce9b11dce757385efbfbe7c36cc03f44198965edb4b","kind":"verifier","lines":"1280-1331","path":"lib/Frontend/Lowering/GraphParallelLowering.cpp","roles":["input_well_formedness"],"text":"if (unitProjection && lane && !projected[*lane])\n projected[*lane] = true;\n }\n if (!::llvm::all_of(projected, [](bool value) { return value; }))\n return info.op->emitError(\n \"loom-lower-graph-memory: dynamic parallel plain-memory effects \"\n \"have no exact injective lane projection\");\n continue;\n }\n\n std::unordered_map<std::vector<::llvm::APInt>, SeenAddress, AddressKeyHash>\n seen;\n uint64_t lane = 0;\n bool overlap = false;\n ::llvm::SmallVector<int64_t, 4> point;\n (void)forEachParallelPointUntil(\n *info.domain, 0, point, [&](::llvm::ArrayRef<int64_t> coordinates) {\n uint64_t currentLane = lane++;\n for (const AccessExpressions &access : analyzed) {\n std::vector<::llvm::APInt> key;\n key.reserve(comparableDimensions.size());\n for (unsigned dimension : comparableDimensions)\n key.push_back(\n evaluateLaneConstant(access.address[dimension], coordinates));\n\n auto [found, inserted] = seen.try_emplace(\n std::move(key),\n SeenAddress{currentLane, /*multipleLanes=*/false,\n access.access->writes, access.access->atomic});\n if (inserted)\n continue;\n\n SeenAddress &previous = found->second;\n bool differentLane =\n previous.firstLane != currentLane || previous.multipleLanes;\n if (differentLane && (previous.writes || access.access->writes) &&\n (!previous.allAtomic || !access.access->atomic)) {\n overlap = true;\n return false;\n }\n if (previous.firstLane != currentLane)\n previous.multipleLanes = true;\n previous.writes |= access.access->writes;\n previous.allAtomic &= access.access->atomic;\n }\n return true;\n });\n if (overlap)\n return info.op->emitError(\n \"loom-lower-graph-memory: parallel lanes have overlapping plain \"\n \"memory effects\");\n }","why":"Per-lane memory effect overlap check that rejects a candidate whose parallel lanes write the same element. Its diagnostic rejected the first grammar revision and established that each lane must address a disjoint element index."},{"file_sha256":"c25a72ad99349973a47f2a1e081b6b269920e25cc5f59f74619c2e7ce0c2b65d","kind":"test","lines":"23-52","path":"test/raise/scf-to-dfg-explicit-spatial-ownership.mlir","roles":["input_construction"],"text":"%zero = arith.constant 0 : index\n %four = arith.constant 4 : index\n %one = arith.constant 1 : index\n scf.for %index = %zero to %four step %one {\n memref.store %value, %target[%index] : memref<4xi32>\n }\n return\n}\n\ndataflow.thread private @instruction_only domain(#dataflow.thread_domain<dense>)(\n %target: memref<1xi32>, %value: i32) ctrl (%ctrl: none) {\n %zero = arith.constant 0 : index\n memref.store %value, %target[%zero] : memref<1xi32>\n dataflow.thread.yield\n}\n\ndataflow.thread private @selected_spatial domain(#dataflow.thread_domain<dense>)(\n %target: memref<1xi32>, %value: i32) ctrl (%ctrl: none) {\n \"loom.spatial_region\"(%value, %target)\n <{operandSegmentSizes = array<i32: 1, 0, 1, 0>,\n resultSegmentSizes = array<i32: 0, 0>}> ({\n ^bb0(%payload: i32, %memory: memref<1xi32>):\n %zero = arith.constant 0 : index\n memref.store %payload, %memory[%zero] : memref<1xi32>\n \"loom.spatial_yield\"()\n <{operandSegmentSizes = array<i32: 0, 0>}> : () -> ()\n }) {graph_name = \"selected_graph\", source_maps = []} :\n (i32, memref<1xi32>) -> ()\n dataflow.thread.yield\n}","why":"Accepted spelling of a module mixing a host func.func, an InstructionCore-only dataflow.thread, and a thread carrying an explicit loom.spatial_region in generic form."},{"file_sha256":"dcb708e61fd42fa8e3f9a37ef7669b0fbd5b19123b648d5d66dd735b763e018d","kind":"test","lines":"22-82","path":"test/raise/scf-to-dfg-graph-owned-parallel-recurrence.mlir","roles":["input_construction"],"text":"%n: index, %memory: memref<?xindex>) ctrl (%ctrl: none) {\n \"loom.spatial_region\"(%n, %memory)\n <{operandSegmentSizes = array<i32: 1, 0, 1, 0>,\n resultSegmentSizes = array<i32: 0, 0>}> ({\n ^bb0(%limit: index, %target: memref<?xindex>):\n %zero = arith.constant 0 : index\n %one = arith.constant 1 : index\n scf.forall (%lane) in (2) {\n %sum = scf.for %i = %zero to %limit step %one\n iter_args(%state = %lane) -> (index) {\n %next = arith.addi %state, %i : index\n scf.yield %next : index\n }\n memref.store %sum, %target[%lane] : memref<?xindex>\n }\n \"loom.spatial_yield\"()\n <{operandSegmentSizes = array<i32: 0, 0>}> : () -> ()\n }) {graph_name = \"g_parallel_recurrence_0\", source_maps = []} :\n (index, memref<?xindex>) -> ()\n dataflow.thread.yield\n}\n\n// CHECK-LABEL: dataflow.graph private @g_selected_nested_recurrence_0\n// CHECK: dataflow.demux\n// CHECK: dataflow.stream\n// CHECK: dataflow.carry\n// CHECK: dataflow.store\n// CHECK: dataflow.stream\n// CHECK: dataflow.carry\n// CHECK: dataflow.store\n// CHECK: dataflow.sync\n// CHECK: dataflow.mux\n// CHECK-NOT: scf.\n// CHECK: dataflow.graph.return\n\ndataflow.thread private @selected_nested_recurrence domain(#dataflow.thread_domain<dense>)(\n %condition: i1, %n: index, %memory: memref<?xindex>) ctrl (%ctrl: none) {\n \"loom.spatial_region\"(%condition, %n, %memory)\n <{operandSegmentSizes = array<i32: 2, 0, 1, 0>,\n resultSegmentSizes = array<i32: 0, 0>}> ({\n ^bb0(%selected: i1, %limit: index, %target: memref<?xindex>):\n %zero = arith.constant 0 : index\n %one = arith.constant 1 : index\n %two = arith.constant 2 : index\n scf.if %selected {\n scf.parallel (%lane) = (%zero) to (%two) step (%one) {\n %sum = scf.for %i = %zero to %limit step %one\n iter_args(%state = %lane) -> (index) {\n %next = arith.addi %state, %i : index\n scf.yield %next : index\n }\n memref.store %sum, %target[%lane] : memref<?xindex>\n scf.reduce\n }\n }\n \"loom.spatial_yield\"()\n <{operandSegmentSizes = array<i32: 0, 0>}> : () -> ()\n }) {graph_name = \"g_selected_nested_recurrence_0\", source_maps = []} :\n (i1, index, memref<?xindex>) -> ()\n dataflow.thread.yield\n}","why":"Accepted spelling of fixed-width graph-owned scf.forall / scf.parallel and nested scf.if / scf.for inside a spatial region, including the constant bound form and the trailing scf.reduce."},{"file_sha256":"d161de7a4a08f9902236e14b73808fc9caeadf88e4b2f2e15d61000cb648ebb0","kind":"test","lines":"30-59","path":"test/raise/scf-to-dfg-graph-memory.mlir","roles":["input_construction"],"text":"module attributes {\n llvm.data_layout = \"e-p:64:64\",\n dlti.dl_spec = #dlti.dl_spec<#dlti.dl_entry<index, 64>>\n} {\n dataflow.thread private @pointer_chain\n domain(#dataflow.thread_domain<dense>)(\n %base: !llvm.ptr, %outer: i64, %middle: i64, %inner: i64)\n ctrl (%ctrl: none) {\n %value = \"loom.spatial_region\"(%outer, %middle, %inner, %base)\n <{operandSegmentSizes = array<i32: 4, 0, 0, 0>,\n resultSegmentSizes = array<i32: 1, 0>}> ({\n ^bb0(%i: i64, %j: i64, %k: i64, %memory: !llvm.ptr):\n %first = llvm.getelementptr inbounds %memory[%i]\n : (!llvm.ptr, i64) -> !llvm.ptr, !llvm.array<4 x i8>\n %second = llvm.getelementptr inbounds %first[%j]\n : (!llvm.ptr, i64) -> !llvm.ptr, !llvm.array<4 x i8>\n %third = llvm.getelementptr inbounds %second[%k]\n : (!llvm.ptr, i64) -> !llvm.ptr, !llvm.array<4 x i8>\n %loaded = llvm.load %third : !llvm.ptr -> f32\n \"loom.spatial_yield\"(%loaded)\n <{operandSegmentSizes = array<i32: 1, 0>}> : (f32) -> ()\n }) {graph_name = \"pointer_chain_graph\", source_maps = []} :\n (i64, i64, i64, !llvm.ptr) -> f32\n dataflow.thread.yield\n }\n}\n\n// Static ranked memrefs use their exact offset and per-dimension strides.\n\n// RANKED-LABEL: dataflow.graph private @rank3_row_major(","why":"Accepted spelling of the module-scope dataflow.thread header with domain(#dataflow.thread_domain<dense>), the ctrl block argument, and the spatial region's operand/result segment attributes."}],"primary_bundle_sha256":"f83dadb2236b9f0d439cf663bd10f63641d693859042ae26698a4c4a7e5a998e","project":"PolyArch/loom","revision":"48615bc5925ef4b9db8b4550b5d4322933cf4b7b","schema":"spectriad.authoring-context/v1","selection_sha256":"01d43cfdaf56969375c7c7e51582ae6de4b2c9217e048fee1b04384ffbbfd583"}
sessions/reverse-generator/session-evidence/result-events.json[
{
"api_error_status": null,
"duration_api_ms": 56568,
"duration_ms": 56614,
"fast_mode_disabled_reason": "sdk_opt_in_required",
"fast_mode_state": "off",
"first_content_frame_ms": 1584,
"is_error": false,
"modelUsage": {
"claude-opus-5": {
"cacheCreationInputTokens": 5588,
"cacheReadInputTokens": 0,
"canonicalModel": "claude-opus-5",
"contextWindow": 1000000,
"costBasis": "list",
"costUSD": 0.16199000000000002,
"inputTokens": 2,
"maxOutputTokens": 64000,
"outputTokens": 4244,
"provider": "firstParty",
"thinkingTokens": 827,
"webSearchRequests": 0
}
},
"num_turns": 1,
"permission_denials": [],
"queued_turn_count": 0,
"result": "## Preconditions\n\n1. Every emitted program is a single MLIR module body consisting of zero or more ownership-neutral callable declarations/definitions followed by one or more `dataflow.thread` definitions, with no other top-level constructs.\n2. Callable code, when present, appears only as an `llvm.func` declaration with an `(i64) -> i64` signature and a `func.func private` definition whose body consists solely of a `return` of its own block argument at the declared type, so that no callable creates, owns, or authorizes a dataflow graph.\n3. Each thread is declared as `dataflow.thread private @<name>` carrying a `domain(#dataflow.thread_domain<dense>)` attribute, a data parameter list `(%limit: index, %memory: memref<?xindex>)`, a control parameter list `ctrl (%ctrl: none)`, and a body region terminated by `dataflow.thread.yield`.\n4. Thread symbol names are unique within the module, and the `graph_name` attribute of a thread's spatial region is derived from that same thread index, so graph names are likewise unique.\n5. A thread body is either entirely InstructionCore-resident code containing no spatial construct at all, or contains exactly one explicit `\"loom.spatial_region\"` operation; a thread never contains more than one spatial region and never nests one spatial region inside another.\n6. The spatial region is written in generic form with operands `(%limit, %memory)`, `operandSegmentSizes = array<i32: 1, 0, 1, 0>`, `resultSegmentSizes = array<i32: 0, 0>`, a discardable attribute dictionary supplying `graph_name` (a string) and `source_maps = []`, and the function type `(index, memref<?xindex>) -> ()`, i.e. the region produces no results.\n7. The spatial region's single entry block `^bb0` takes exactly two arguments, an `index` and a `memref<?xindex>`, positionally matching the two operands, and its region is terminated by `\"loom.spatial_yield\"()` with `operandSegmentSizes = array<i32: 0, 0>` and type `() -> ()`, yielding no values.\n8. The spatial region is treated as IsolatedFromAbove: every SSA value referenced anywhere inside the region is either one of the two entry block arguments, a constant defined in the region body, an induction variable or block argument of an enclosing SCF construct in the region, or a value defined earlier in the same region; no value defined outside the region (including `%limit`, `%memory`, `%ctrl`) is referenced from within it.\n9. All SSA names in the emitted program are distinct at their point of definition and every use is dominated by its definition, with the numeric suffixes of region-internal names drawn from a single module-wide counter so that no two SCF constructs or leaf operations share a suffix.\n10. The spatial region body begins with index constants and a boolean condition value defined before any control-flow construct that uses them, so the loop bounds and `scf.if` condition are always already-defined region-local values.\n11. Every `scf.for` uses compile-time constant lower bound, upper bound, and step of type `index`, carries no iteration arguments, and its body region has no explicit `scf.yield` operands (a value-free, source-sequential loop).\n12. Every `scf.if` is conditioned on an `i1` produced by `arith.cmpi` inside the region, produces no results, and has either a then-region only or both a then-region and an else-region; both forms are result-free.\n13. Every `scf.parallel` is in effect form: constant lower bound, upper bound, and step tuples of `index`, exactly one induction variable, no reduction init operands, no results, and a body region terminated by an argument-less `scf.reduce`.\n14. Every `scf.forall` is in effect form: a constant upper bound, exactly one induction variable, no `shared_outs`, no results, and no explicit `in_parallel` terminator operands.\n15. The first operations in the body of every `scf.parallel` and `scf.forall` compute a lane-disjoint element index by multiplying the enclosing index expression by the lane width and adding the lane's induction variable, so every memory access performed by that lane and by anything nested under it addresses that lane-private index.\n16. All memory accesses inside the spatial region go through the region's `memref<?xindex>` entry argument, use exactly one `index` subscript, and store only `index`-typed values, so load and store element types agree with the memref element type.\n17. Every `scf.while` has an `(index) -> index` signature: a `before` region that computes an `i1` with `arith.cmpi` and terminates with `scf.condition` forwarding its own block argument, and an `after` region whose `^bb0` takes one `index` argument, ends with `scf.yield` of a single `index` value, and whose loop-carried value is initialized from a region-local constant.\n18. Every region introduced by an SCF construct contains at least one operation before its terminator; no emitted block is empty.\n19. Control-flow nesting inside the spatial region is finite and acyclic in structure: constructs may be arbitrarily interleaved and nested but the nesting depth is bounded, guaranteeing a terminating program text.\n20. The non-spatial thread body form consists only of index constants and a `memref.store` through the thread's own `%memory` parameter, using an `index` subscript and an `index` value, and contains no SCF construct, no call, and no spatial operation.\n\n## Sampling conventions\n\n1. The module contains one or two threads, never zero and never more than two.\n2. The callable preamble is emitted as an all-or-nothing block: either both the `llvm.func @imported_callable` declaration and the `func.func private @native_callable` definition appear, or neither does; intermediate combinations are never produced.\n3. The callable signatures are fixed: `@imported_callable` is always `(i64) -> i64` and `@native_callable` always takes `%arg_a: i32` and returns it as `i32`; no other callable names, arities, or types occur.\n4. Thread names are always `@thread_<k>` and graph names always `\"g_thread_<k>\"` for the zero-based thread index `k`.\n5. Thread parameter names are fixed as `%limit`, `%memory`, and `%ctrl`, and the thread domain attribute is always `dense`; no other domain kind is emitted.\n6. Each thread independently chooses between the non-spatial body and the spatial body, so a module may mix spatial and non-spatial threads; both choices are possible for every thread.\n7. The non-spatial body is a fixed three-line skeleton defining `%izero = arith.constant 0`, `%ione = arith.constant 1`, and storing `%ione` into `%memory[%izero]`; nothing else is ever emitted in that form.\n8. The spatial region preamble is a fixed four-constant skeleton: `%zero = 0`, `%one = 1`, `%two = 2` (all `index`) and `%flag = arith.cmpi ult, %zero, %two`, so the `scf.if` condition is always this one comparison and is always statically true.\n9. Nesting depth inside the spatial region is chosen from 1 to 3; at depth 0 only leaf statements may be emitted, and each nested SCF construct consumes exactly one level.\n10. Every statement block (the region body and each SCF body) contains exactly one or two statements, never zero and never more than two.\n11. At any depth greater than zero the grammar picks uniformly among six statement forms \u2014 `scf.for`, `scf.if`, `scf.parallel`, `scf.forall`, `scf.while`, and a leaf \u2014 so all five SCF constructs and both leaf shapes can appear in any combination.\n12. All loop bounds are the fixed constants `%zero` to `%two` with step `%one`, and `scf.forall` always uses the literal upper bound `2`, giving a fixed trip count and a fixed lane width of two for every parallel construct.\n13. SSA suffixes come from one monotonically increasing module-wide counter, consumed by every SCF construct and every leaf statement (including the store-only leaf, which then leaves its number unused), yielding names such as `%iv3`, `%mx3`, `%ix3`, `%wr5`, `%ld7`.\n14. Name prefixes are fixed by role: `%iv` for induction variables, `%mx`/`%ix` for the lane index multiply/add pair, `%wr`/`%wa`/`%wc`/`%wb`/`%wn` for the while result, init, condition, body argument, and next value, and `%ld`/`%ad` for the load and its increment.\n15. The index expression used for memory accesses starts as `%zero` at the top of the spatial region and is replaced by the current construct's `%ix<n>` only inside `scf.parallel` and `scf.forall` bodies; `scf.for`, `scf.if`, and `scf.while` bodies inherit the enclosing expression unchanged.\n16. The lane index is always computed as `enclosing_index * %two + %iv<n>`, i.e. a multiply-by-two followed by an add, and never any other disjointness scheme.\n17. Leaf statements take one of exactly two shapes: a bare `memref.store %one, %target[idx]`, or a read-modify-write of `memref.load` followed by `arith.addi ..., %one` and a store of the incremented value at the same subscript.\n18. The `scf.while` skeleton is fixed: initial value `%zero`, condition `arith.cmpi ult, %wa<n>, %two`, and body increment `arith.addi %wb<n>, %one`, with the loop result always left unused.\n19. `scf.if` is emitted with or without an else region, both alternatives being possible; the else region, when present, is an independently sampled statement block.\n20. Only the generic assembly form is used for `loom.spatial_region` and `loom.spatial_yield`, while all SCF, arith, memref, and func operations are emitted in custom (pretty) form.\n21. The region entry block arguments are named `%lim` and `%target`, and `%lim` is never referenced by any emitted operation; only `%target` is used.\n22. Indentation is fixed by role (six spaces for statements directly in the region, eight spaces for lane-index and reduce lines, two spaces for thread-level lines) and is purely cosmetic.",
"result_index": 0,
"session_id": "259782f2-5a0c-4e79-82ec-3789f7f5e440",
"stop_reason": "end_turn",
"subagent_stats": {
"by_type": {},
"completed": 0,
"failed": 0,
"killed": {
"parent": 0,
"system": 0,
"user": 0
},
"max_depth": 0,
"refused": {
"budget": 0,
"concurrency_limit": 0,
"depth_limit": 0
},
"requested": {
"background": 0,
"foreground": 0,
"unset": 0
},
"spawned": 0,
"spawned_by_subagents": 0,
"started_in_background": 0
},
"subtype": "success",
"terminal_reason": "completed",
"time_to_request_ms": 46,
"total_cost_usd": 0.16199000000000002,
"ttft_ms": 13716,
"ttft_stream_ms": 1152,
"type": "result",
"usage": {
"cache_creation": {
"ephemeral_1h_input_tokens": 5588,
"ephemeral_5m_input_tokens": 0
},
"cache_creation_input_tokens": 5588,
"cache_read_input_tokens": 0,
"inference_geo": "not_available",
"input_tokens": 2,
"iterations": [],
"output_tokens": 4244,
"output_tokens_details": {
"thinking_tokens": 827
},
"server_tool_use": {
"web_fetch_requests": 0,
"web_search_requests": 0
},
"service_tier": "standard",
"speed": "standard"
},
"uuid": "53331fc2-e782-401c-9cd6-73d20955f862"
}
]
sessions/reverse-postcondition/session-evidence/result-events.json[
{
"api_error_status": null,
"duration_api_ms": 14264,
"duration_ms": 14291,
"fast_mode_disabled_reason": "sdk_opt_in_required",
"fast_mode_state": "off",
"first_content_frame_ms": 1626,
"is_error": false,
"modelUsage": {
"claude-opus-5": {
"cacheCreationInputTokens": 5709,
"cacheReadInputTokens": 0,
"canonicalModel": "claude-opus-5",
"contextWindow": 1000000,
"costBasis": "list",
"costUSD": 0.0804,
"inputTokens": 2,
"maxOutputTokens": 64000,
"outputTokens": 932,
"provider": "firstParty",
"thinkingTokens": 362,
"webSearchRequests": 0
}
},
"num_turns": 1,
"permission_denials": [],
"queued_turn_count": 0,
"result": "This postcondition looks only at the subject's output program; the `input` root is never mentioned, so nothing is compared across the two programs. From `output.operations` \u2014 which enumerates every operation at every depth, including the root `builtin.module` \u2014 it selects four groups by name: `dataflow.thread` ops, `dataflow.graph` ops, `dataflow.graph.launch` ops, and callables whose name is exactly `llvm.func` or `func.func`. Three separate universally quantified blocks require that every selected callable, every thread, and every graph have a parent operation that exists and is named `builtin.module`, so any such op nested inside a function body, a graph body, a thread body, or any other region is rejected, as is one with no parent at all. For each graph it additionally requires that among all transitive descendants of that graph there is no operation whose dialect (the text before the first dot in its name) is `scf`, which rejects any `scf.*` op at any nesting depth inside the graph, including inside nested ops and nested regions. A fourth block requires, for every `dataflow.graph.launch` op anywhere in the output, that there exists at least one selected thread that structurally and transitively contains that launch; a launch sitting in a module, a plain function, or a graph body with no enclosing `dataflow.thread` fails. All value sources are the output program's own structure \u2014 operation names, dialects, parent links, and containment \u2014 with no attributes, types, operands, results, symbol resolution, or counts consulted. Each of the four blocks is vacuously satisfied when its selected sequence is empty, so an output containing none of these four op kinds passes everything, and an output with launches but zero `dataflow.thread` ops fails the containment assert for every launch. The postcondition never demands that any of these operations exist.",
"result_index": 0,
"session_id": "dbf5a01d-7469-4879-9655-44c0283715fb",
"stop_reason": "end_turn",
"subagent_stats": {
"by_type": {},
"completed": 0,
"failed": 0,
"killed": {
"parent": 0,
"system": 0,
"user": 0
},
"max_depth": 0,
"refused": {
"budget": 0,
"concurrency_limit": 0,
"depth_limit": 0
},
"requested": {
"background": 0,
"foreground": 0,
"unset": 0
},
"spawned": 0,
"spawned_by_subagents": 0,
"started_in_background": 0
},
"subtype": "success",
"terminal_reason": "completed",
"time_to_request_ms": 27,
"total_cost_usd": 0.0804,
"ttft_ms": 6803,
"ttft_stream_ms": 1131,
"type": "result",
"usage": {
"cache_creation": {
"ephemeral_1h_input_tokens": 5709,
"ephemeral_5m_input_tokens": 0
},
"cache_creation_input_tokens": 5709,
"cache_read_input_tokens": 0,
"inference_geo": "not_available",
"input_tokens": 2,
"iterations": [],
"output_tokens": 932,
"output_tokens_details": {
"thinking_tokens": 362
},
"server_tool_use": {
"web_fetch_requests": 0,
"web_search_requests": 0
},
"service_tier": "standard",
"speed": "standard"
},
"uuid": "1bb7481d-9a76-40d2-be48-4416856ab743"
}
]
This paired revision was activated by an explicit partial-scope team review bound to both executable artifact hashes.
Approved for execution and public reporting; translation accuracy and completeness remain separately unvalidated.