kumi 0.0.18 → 0.0.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (676) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +4 -1
  3. data/.ruby-version +1 -0
  4. data/CHANGELOG.md +25 -0
  5. data/CLAUDE.md +26 -139
  6. data/README.md +143 -372
  7. data/data/functions/agg/boolean.yaml +14 -0
  8. data/data/functions/agg/numeric.yaml +80 -0
  9. data/data/functions/agg/string.yaml +8 -0
  10. data/data/functions/core/arithmetic.yaml +50 -0
  11. data/data/functions/core/boolean.yaml +18 -0
  12. data/data/functions/core/comparison.yaml +42 -0
  13. data/data/functions/core/constructor.yaml +32 -0
  14. data/data/functions/core/select.yaml +7 -0
  15. data/data/functions/core/stencil.yaml +21 -0
  16. data/data/functions/core/string.yaml +19 -0
  17. data/data/kernels/javascript/agg/boolean.yaml +12 -0
  18. data/data/kernels/javascript/agg/numeric.yaml +27 -0
  19. data/data/kernels/javascript/agg/string.yaml +5 -0
  20. data/data/kernels/javascript/core/arithmetic.yaml +32 -0
  21. data/data/kernels/javascript/core/boolean.yaml +12 -0
  22. data/data/kernels/javascript/core/comparison.yaml +24 -0
  23. data/data/kernels/javascript/core/constructor.yaml +15 -0
  24. data/data/kernels/javascript/core/select.yaml +7 -0
  25. data/data/kernels/javascript/core/string.yaml +12 -0
  26. data/data/kernels/ruby/agg/boolean.yaml +18 -0
  27. data/data/kernels/ruby/agg/numeric.yaml +29 -0
  28. data/data/kernels/ruby/agg/string.yaml +5 -0
  29. data/data/kernels/ruby/core/arithmetic.yaml +38 -0
  30. data/data/kernels/ruby/core/boolean.yaml +15 -0
  31. data/data/kernels/ruby/core/comparison.yaml +30 -0
  32. data/data/kernels/ruby/core/constructor.yaml +17 -0
  33. data/data/kernels/ruby/core/select.yaml +4 -0
  34. data/data/kernels/ruby/core/string.yaml +15 -0
  35. data/debug_ordering.rb +52 -0
  36. data/docs/FORM_SCHEMA.md +85 -0
  37. data/docs/OUTPUT_SCHEMA.md +69 -0
  38. data/docs/SYNTAX.md +626 -373
  39. data/golden/array_element/expected/ast.txt +21 -0
  40. data/golden/array_element/expected/input_plan.txt +5 -0
  41. data/golden/array_element/expected/lir_00_unoptimized.txt +13 -0
  42. data/golden/array_element/expected/lir_01_hoist_scalar_references.txt +13 -0
  43. data/golden/array_element/expected/lir_02_inlined.txt +13 -0
  44. data/golden/array_element/expected/lir_03_cse.txt +13 -0
  45. data/golden/array_element/expected/lir_04_1_loop_fusion.txt +13 -0
  46. data/golden/array_element/expected/lir_04_loop_invcm.txt +13 -0
  47. data/golden/array_element/expected/lir_06_const_prop.txt +13 -0
  48. data/golden/array_element/expected/nast.txt +7 -0
  49. data/golden/array_element/expected/schema_javascript.mjs +13 -0
  50. data/golden/array_element/expected/schema_ruby.rb +41 -0
  51. data/golden/array_element/expected/snast.txt +7 -0
  52. data/golden/array_element/expected.json +5 -0
  53. data/golden/array_element/input.json +9 -0
  54. data/golden/array_element/schema.kumi +11 -0
  55. data/golden/array_index/expected/ast.txt +59 -0
  56. data/golden/array_index/expected/input_plan.txt +5 -0
  57. data/golden/array_index/expected/lir_00_unoptimized.txt +41 -0
  58. data/golden/array_index/expected/lir_01_hoist_scalar_references.txt +41 -0
  59. data/golden/array_index/expected/lir_02_inlined.txt +42 -0
  60. data/golden/array_index/expected/lir_03_cse.txt +40 -0
  61. data/golden/array_index/expected/lir_04_1_loop_fusion.txt +40 -0
  62. data/golden/array_index/expected/lir_04_loop_invcm.txt +40 -0
  63. data/golden/array_index/expected/lir_06_const_prop.txt +40 -0
  64. data/golden/array_index/expected/nast.txt +33 -0
  65. data/golden/array_index/expected/schema_javascript.mjs +46 -0
  66. data/golden/array_index/expected/schema_ruby.rb +75 -0
  67. data/golden/array_index/expected/snast.txt +33 -0
  68. data/golden/array_index/expected.json +5 -0
  69. data/golden/array_index/input.json +1 -0
  70. data/golden/array_index/schema.kumi +19 -0
  71. data/golden/array_operations/expected/ast.txt +50 -0
  72. data/golden/array_operations/expected/input_plan.txt +10 -0
  73. data/golden/array_operations/expected/lir_00_unoptimized.txt +47 -0
  74. data/golden/array_operations/expected/lir_01_hoist_scalar_references.txt +47 -0
  75. data/golden/array_operations/expected/lir_02_inlined.txt +47 -0
  76. data/golden/array_operations/expected/lir_03_cse.txt +47 -0
  77. data/golden/array_operations/expected/lir_04_1_loop_fusion.txt +47 -0
  78. data/golden/array_operations/expected/lir_04_loop_invcm.txt +47 -0
  79. data/golden/array_operations/expected/lir_06_const_prop.txt +47 -0
  80. data/golden/array_operations/expected/nast.txt +32 -0
  81. data/golden/array_operations/expected/schema_javascript.mjs +60 -0
  82. data/golden/array_operations/expected/schema_ruby.rb +91 -0
  83. data/golden/array_operations/expected/snast.txt +32 -0
  84. data/golden/array_operations/expected.json +27 -0
  85. data/golden/array_operations/input.json +8 -0
  86. data/golden/array_operations/schema.kumi +12 -10
  87. data/golden/cascade_logic/expected/ast.txt +37 -0
  88. data/golden/cascade_logic/expected/input_plan.txt +2 -0
  89. data/golden/cascade_logic/expected/lir_00_unoptimized.txt +29 -0
  90. data/golden/cascade_logic/expected/lir_01_hoist_scalar_references.txt +29 -0
  91. data/golden/cascade_logic/expected/lir_02_inlined.txt +37 -0
  92. data/golden/cascade_logic/expected/lir_03_cse.txt +30 -0
  93. data/golden/cascade_logic/expected/lir_04_1_loop_fusion.txt +30 -0
  94. data/golden/cascade_logic/expected/lir_04_loop_invcm.txt +30 -0
  95. data/golden/cascade_logic/expected/lir_06_const_prop.txt +30 -0
  96. data/golden/cascade_logic/expected/nast.txt +32 -0
  97. data/golden/cascade_logic/expected/schema_javascript.mjs +31 -0
  98. data/golden/cascade_logic/expected/schema_ruby.rb +57 -0
  99. data/golden/cascade_logic/expected/snast.txt +32 -0
  100. data/golden/cascade_logic/expected.json +5 -0
  101. data/golden/cascade_logic/input.json +4 -0
  102. data/golden/cascade_logic/schema.kumi +1 -3
  103. data/golden/chained_fusion/expected/ast.txt +57 -0
  104. data/golden/chained_fusion/expected/input_plan.txt +13 -0
  105. data/golden/chained_fusion/expected/lir_00_unoptimized.txt +76 -0
  106. data/golden/chained_fusion/expected/lir_01_hoist_scalar_references.txt +76 -0
  107. data/golden/chained_fusion/expected/lir_02_inlined.txt +114 -0
  108. data/golden/chained_fusion/expected/lir_03_cse.txt +97 -0
  109. data/golden/chained_fusion/expected/lir_04_1_loop_fusion.txt +99 -0
  110. data/golden/chained_fusion/expected/lir_04_loop_invcm.txt +97 -0
  111. data/golden/chained_fusion/expected/lir_06_const_prop.txt +97 -0
  112. data/golden/chained_fusion/expected/nast.txt +55 -0
  113. data/golden/chained_fusion/expected/schema_javascript.mjs +116 -0
  114. data/golden/chained_fusion/expected/schema_ruby.rb +149 -0
  115. data/golden/chained_fusion/expected/snast.txt +55 -0
  116. data/golden/chained_fusion/expected.json +45 -0
  117. data/golden/chained_fusion/input.json +51 -0
  118. data/golden/chained_fusion/schema.kumi +52 -0
  119. data/golden/element_arrays/expected/ast.txt +55 -0
  120. data/golden/element_arrays/expected/input_plan.txt +7 -0
  121. data/golden/element_arrays/expected/lir_00_unoptimized.txt +81 -0
  122. data/golden/element_arrays/expected/lir_01_hoist_scalar_references.txt +81 -0
  123. data/golden/element_arrays/expected/lir_02_inlined.txt +85 -0
  124. data/golden/element_arrays/expected/lir_03_cse.txt +83 -0
  125. data/golden/element_arrays/expected/lir_04_1_loop_fusion.txt +83 -0
  126. data/golden/element_arrays/expected/lir_04_loop_invcm.txt +83 -0
  127. data/golden/element_arrays/expected/lir_06_const_prop.txt +83 -0
  128. data/golden/element_arrays/expected/nast.txt +42 -0
  129. data/golden/element_arrays/expected/schema_javascript.mjs +106 -0
  130. data/golden/element_arrays/expected/schema_ruby.rb +141 -0
  131. data/golden/element_arrays/expected/snast.txt +42 -0
  132. data/golden/element_arrays/expected.json +55 -0
  133. data/golden/element_arrays/input.json +12 -0
  134. data/golden/element_arrays/schema.kumi +21 -0
  135. data/golden/empty_and_null_inputs/expected/ast.txt +42 -0
  136. data/golden/empty_and_null_inputs/expected/input_plan.txt +12 -0
  137. data/golden/empty_and_null_inputs/expected/lir_00_unoptimized.txt +31 -0
  138. data/golden/empty_and_null_inputs/expected/lir_01_hoist_scalar_references.txt +31 -0
  139. data/golden/empty_and_null_inputs/expected/lir_02_inlined.txt +51 -0
  140. data/golden/empty_and_null_inputs/expected/lir_03_cse.txt +49 -0
  141. data/golden/empty_and_null_inputs/expected/lir_04_1_loop_fusion.txt +49 -0
  142. data/golden/empty_and_null_inputs/expected/lir_04_loop_invcm.txt +49 -0
  143. data/golden/empty_and_null_inputs/expected/lir_06_const_prop.txt +49 -0
  144. data/golden/empty_and_null_inputs/expected/nast.txt +18 -0
  145. data/golden/empty_and_null_inputs/expected/schema_javascript.mjs +47 -0
  146. data/golden/empty_and_null_inputs/expected/schema_ruby.rb +79 -0
  147. data/golden/empty_and_null_inputs/expected/snast.txt +18 -0
  148. data/golden/empty_and_null_inputs/expected.json +8 -0
  149. data/golden/empty_and_null_inputs/input.json +16 -0
  150. data/golden/empty_and_null_inputs/schema.kumi +30 -0
  151. data/golden/game_of_life/expected/ast.txt +118 -0
  152. data/golden/game_of_life/expected/input_plan.txt +5 -0
  153. data/golden/game_of_life/expected/lir_00_unoptimized.txt +343 -0
  154. data/golden/game_of_life/expected/lir_01_hoist_scalar_references.txt +343 -0
  155. data/golden/game_of_life/expected/lir_02_inlined.txt +1918 -0
  156. data/golden/game_of_life/expected/lir_03_cse.txt +766 -0
  157. data/golden/game_of_life/expected/lir_04_1_loop_fusion.txt +766 -0
  158. data/golden/game_of_life/expected/lir_04_loop_invcm.txt +766 -0
  159. data/golden/game_of_life/expected/lir_06_const_prop.txt +766 -0
  160. data/golden/game_of_life/expected/nast.txt +104 -0
  161. data/golden/game_of_life/expected/schema_javascript.mjs +98 -0
  162. data/golden/game_of_life/expected/schema_ruby.rb +125 -0
  163. data/golden/game_of_life/expected/snast.txt +104 -0
  164. data/golden/game_of_life/expected.json +3 -0
  165. data/golden/game_of_life/input.json +8 -0
  166. data/golden/game_of_life/schema.kumi +33 -0
  167. data/golden/hash_keys/expected/ast.txt +29 -0
  168. data/golden/hash_keys/expected/input_plan.txt +2 -0
  169. data/golden/hash_keys/expected/lir_00_unoptimized.txt +18 -0
  170. data/golden/hash_keys/expected/lir_01_hoist_scalar_references.txt +18 -0
  171. data/golden/hash_keys/expected/lir_02_inlined.txt +18 -0
  172. data/golden/hash_keys/expected/lir_03_cse.txt +18 -0
  173. data/golden/hash_keys/expected/lir_04_1_loop_fusion.txt +18 -0
  174. data/golden/hash_keys/expected/lir_04_loop_invcm.txt +18 -0
  175. data/golden/hash_keys/expected/lir_06_const_prop.txt +18 -0
  176. data/golden/hash_keys/expected/nast.txt +46 -0
  177. data/golden/hash_keys/expected/schema_javascript.mjs +34 -0
  178. data/golden/hash_keys/expected/schema_ruby.rb +61 -0
  179. data/golden/hash_keys/expected/snast.txt +46 -0
  180. data/golden/hash_keys/expected.json +20 -0
  181. data/golden/hash_keys/input.json +4 -0
  182. data/golden/hash_keys/schema.kumi +14 -0
  183. data/golden/hash_value/expected/ast.txt +37 -0
  184. data/golden/hash_value/expected/input_plan.txt +7 -0
  185. data/golden/hash_value/expected/lir_00_unoptimized.txt +30 -0
  186. data/golden/hash_value/expected/lir_01_hoist_scalar_references.txt +30 -0
  187. data/golden/hash_value/expected/lir_02_inlined.txt +36 -0
  188. data/golden/hash_value/expected/lir_03_cse.txt +33 -0
  189. data/golden/hash_value/expected/lir_04_1_loop_fusion.txt +33 -0
  190. data/golden/hash_value/expected/lir_04_loop_invcm.txt +33 -0
  191. data/golden/hash_value/expected/lir_06_const_prop.txt +33 -0
  192. data/golden/hash_value/expected/nast.txt +25 -0
  193. data/golden/hash_value/expected/schema_javascript.mjs +46 -0
  194. data/golden/hash_value/expected/schema_ruby.rb +75 -0
  195. data/golden/hash_value/expected/snast.txt +25 -0
  196. data/golden/hash_value/expected.json +19 -0
  197. data/golden/hash_value/input.json +12 -0
  198. data/golden/hash_value/schema.kumi +19 -0
  199. data/golden/hierarchical_complex/expected/ast.txt +85 -0
  200. data/golden/hierarchical_complex/expected/input_plan.txt +23 -0
  201. data/golden/hierarchical_complex/expected/lir_00_unoptimized.txt +87 -0
  202. data/golden/hierarchical_complex/expected/lir_01_hoist_scalar_references.txt +87 -0
  203. data/golden/hierarchical_complex/expected/lir_02_inlined.txt +115 -0
  204. data/golden/hierarchical_complex/expected/lir_03_cse.txt +89 -0
  205. data/golden/hierarchical_complex/expected/lir_04_1_loop_fusion.txt +89 -0
  206. data/golden/hierarchical_complex/expected/lir_04_loop_invcm.txt +89 -0
  207. data/golden/hierarchical_complex/expected/lir_06_const_prop.txt +89 -0
  208. data/golden/hierarchical_complex/expected/nast.txt +49 -0
  209. data/golden/hierarchical_complex/expected/schema_javascript.mjs +121 -0
  210. data/golden/hierarchical_complex/expected/schema_ruby.rb +151 -0
  211. data/golden/hierarchical_complex/expected/snast.txt +49 -0
  212. data/golden/hierarchical_complex/expected.json +34 -0
  213. data/golden/hierarchical_complex/input.json +26 -0
  214. data/golden/hierarchical_complex/schema.kumi +38 -0
  215. data/golden/input_reference/expected/ast.txt +46 -0
  216. data/golden/input_reference/expected/input_plan.txt +15 -0
  217. data/golden/input_reference/expected/lir_00_unoptimized.txt +39 -0
  218. data/golden/input_reference/expected/lir_01_hoist_scalar_references.txt +39 -0
  219. data/golden/input_reference/expected/lir_02_inlined.txt +39 -0
  220. data/golden/input_reference/expected/lir_03_cse.txt +39 -0
  221. data/golden/input_reference/expected/lir_04_1_loop_fusion.txt +39 -0
  222. data/golden/input_reference/expected/lir_04_loop_invcm.txt +39 -0
  223. data/golden/input_reference/expected/lir_06_const_prop.txt +39 -0
  224. data/golden/input_reference/expected/nast.txt +21 -0
  225. data/golden/input_reference/expected/schema_javascript.mjs +45 -0
  226. data/golden/input_reference/expected/schema_ruby.rb +74 -0
  227. data/golden/input_reference/expected/snast.txt +21 -0
  228. data/golden/input_reference/expected.json +7 -0
  229. data/golden/input_reference/input.json +11 -0
  230. data/golden/input_reference/schema.kumi +22 -0
  231. data/golden/interleaved_fusion/expected/ast.txt +51 -0
  232. data/golden/interleaved_fusion/expected/input_plan.txt +13 -0
  233. data/golden/interleaved_fusion/expected/lir_00_unoptimized.txt +53 -0
  234. data/golden/interleaved_fusion/expected/lir_01_hoist_scalar_references.txt +53 -0
  235. data/golden/interleaved_fusion/expected/lir_02_inlined.txt +89 -0
  236. data/golden/interleaved_fusion/expected/lir_03_cse.txt +77 -0
  237. data/golden/interleaved_fusion/expected/lir_04_1_loop_fusion.txt +77 -0
  238. data/golden/interleaved_fusion/expected/lir_04_loop_invcm.txt +77 -0
  239. data/golden/interleaved_fusion/expected/lir_06_const_prop.txt +77 -0
  240. data/golden/interleaved_fusion/expected/nast.txt +41 -0
  241. data/golden/interleaved_fusion/expected/schema_javascript.mjs +86 -0
  242. data/golden/interleaved_fusion/expected/schema_ruby.rb +122 -0
  243. data/golden/interleaved_fusion/expected/snast.txt +41 -0
  244. data/golden/interleaved_fusion/expected.json +37 -0
  245. data/golden/interleaved_fusion/input.json +26 -0
  246. data/golden/interleaved_fusion/schema.kumi +57 -0
  247. data/golden/let_inline/expected/ast.txt +33 -0
  248. data/golden/let_inline/expected/input_plan.txt +2 -0
  249. data/golden/let_inline/expected/lir_00_unoptimized.txt +26 -0
  250. data/golden/let_inline/expected/lir_01_hoist_scalar_references.txt +26 -0
  251. data/golden/let_inline/expected/lir_02_inlined.txt +36 -0
  252. data/golden/let_inline/expected/lir_03_cse.txt +30 -0
  253. data/golden/let_inline/expected/lir_04_1_loop_fusion.txt +30 -0
  254. data/golden/let_inline/expected/lir_04_loop_invcm.txt +30 -0
  255. data/golden/let_inline/expected/lir_06_const_prop.txt +30 -0
  256. data/golden/let_inline/expected/nast.txt +26 -0
  257. data/golden/let_inline/expected/schema_javascript.mjs +11 -0
  258. data/golden/let_inline/expected/schema_ruby.rb +37 -0
  259. data/golden/let_inline/expected/snast.txt +26 -0
  260. data/golden/let_inline/expected.json +1 -0
  261. data/golden/let_inline/input.json +1 -0
  262. data/golden/let_inline/schema.kumi +11 -0
  263. data/golden/loop_fusion/expected/ast.txt +44 -0
  264. data/golden/loop_fusion/expected/input_plan.txt +13 -0
  265. data/golden/loop_fusion/expected/lir_00_unoptimized.txt +43 -0
  266. data/golden/loop_fusion/expected/lir_01_hoist_scalar_references.txt +43 -0
  267. data/golden/loop_fusion/expected/lir_02_inlined.txt +62 -0
  268. data/golden/loop_fusion/expected/lir_03_cse.txt +57 -0
  269. data/golden/loop_fusion/expected/lir_04_1_loop_fusion.txt +57 -0
  270. data/golden/loop_fusion/expected/lir_04_loop_invcm.txt +57 -0
  271. data/golden/loop_fusion/expected/lir_06_const_prop.txt +57 -0
  272. data/golden/loop_fusion/expected/nast.txt +32 -0
  273. data/golden/loop_fusion/expected/schema_javascript.mjs +64 -0
  274. data/golden/loop_fusion/expected/schema_ruby.rb +97 -0
  275. data/golden/loop_fusion/expected/snast.txt +32 -0
  276. data/golden/loop_fusion/expected.json +30 -0
  277. data/golden/loop_fusion/input.json +28 -0
  278. data/golden/loop_fusion/schema.kumi +32 -0
  279. data/golden/min_reduce_scope/expected/ast.txt +49 -0
  280. data/golden/min_reduce_scope/expected/input_plan.txt +9 -0
  281. data/golden/min_reduce_scope/expected/lir_00_unoptimized.txt +59 -0
  282. data/golden/min_reduce_scope/expected/lir_01_hoist_scalar_references.txt +59 -0
  283. data/golden/min_reduce_scope/expected/lir_02_inlined.txt +63 -0
  284. data/golden/min_reduce_scope/expected/lir_03_cse.txt +60 -0
  285. data/golden/min_reduce_scope/expected/lir_04_1_loop_fusion.txt +60 -0
  286. data/golden/min_reduce_scope/expected/lir_04_loop_invcm.txt +60 -0
  287. data/golden/min_reduce_scope/expected/lir_06_const_prop.txt +60 -0
  288. data/golden/min_reduce_scope/expected/nast.txt +29 -0
  289. data/golden/min_reduce_scope/expected/schema_javascript.mjs +66 -0
  290. data/golden/min_reduce_scope/expected/schema_ruby.rb +99 -0
  291. data/golden/min_reduce_scope/expected/snast.txt +29 -0
  292. data/golden/min_reduce_scope/expected.json +9 -0
  293. data/golden/min_reduce_scope/input.json +18 -0
  294. data/golden/min_reduce_scope/schema.kumi +25 -0
  295. data/golden/mixed_dimensions/expected/ast.txt +54 -0
  296. data/golden/mixed_dimensions/expected/input_plan.txt +15 -0
  297. data/golden/mixed_dimensions/expected/lir_00_unoptimized.txt +42 -0
  298. data/golden/mixed_dimensions/expected/lir_01_hoist_scalar_references.txt +42 -0
  299. data/golden/mixed_dimensions/expected/lir_02_inlined.txt +48 -0
  300. data/golden/mixed_dimensions/expected/lir_03_cse.txt +48 -0
  301. data/golden/mixed_dimensions/expected/lir_04_1_loop_fusion.txt +48 -0
  302. data/golden/mixed_dimensions/expected/lir_04_loop_invcm.txt +48 -0
  303. data/golden/mixed_dimensions/expected/lir_06_const_prop.txt +48 -0
  304. data/golden/mixed_dimensions/expected/nast.txt +22 -0
  305. data/golden/mixed_dimensions/expected/schema_javascript.mjs +53 -0
  306. data/golden/mixed_dimensions/expected/schema_ruby.rb +84 -0
  307. data/golden/mixed_dimensions/expected/snast.txt +22 -0
  308. data/golden/mixed_dimensions/expected.json +6 -0
  309. data/golden/mixed_dimensions/input.json +22 -0
  310. data/golden/mixed_dimensions/schema.kumi +35 -0
  311. data/golden/multirank_hoisting/expected/ast.txt +72 -0
  312. data/golden/multirank_hoisting/expected/input_plan.txt +18 -0
  313. data/golden/multirank_hoisting/expected/lir_00_unoptimized.txt +75 -0
  314. data/golden/multirank_hoisting/expected/lir_01_hoist_scalar_references.txt +75 -0
  315. data/golden/multirank_hoisting/expected/lir_02_inlined.txt +126 -0
  316. data/golden/multirank_hoisting/expected/lir_03_cse.txt +109 -0
  317. data/golden/multirank_hoisting/expected/lir_04_1_loop_fusion.txt +109 -0
  318. data/golden/multirank_hoisting/expected/lir_04_loop_invcm.txt +109 -0
  319. data/golden/multirank_hoisting/expected/lir_06_const_prop.txt +109 -0
  320. data/golden/multirank_hoisting/expected/nast.txt +39 -0
  321. data/golden/multirank_hoisting/expected/schema_javascript.mjs +128 -0
  322. data/golden/multirank_hoisting/expected/schema_ruby.rb +162 -0
  323. data/golden/multirank_hoisting/expected/snast.txt +39 -0
  324. data/golden/multirank_hoisting/expected.json +15 -0
  325. data/golden/multirank_hoisting/input.json +19 -0
  326. data/golden/multirank_hoisting/schema.kumi +38 -0
  327. data/golden/nested_hash/expected/ast.txt +22 -0
  328. data/golden/nested_hash/expected/input_plan.txt +5 -0
  329. data/golden/nested_hash/expected/lir_00_unoptimized.txt +10 -0
  330. data/golden/nested_hash/expected/lir_01_hoist_scalar_references.txt +10 -0
  331. data/golden/nested_hash/expected/lir_02_inlined.txt +10 -0
  332. data/golden/nested_hash/expected/lir_03_cse.txt +10 -0
  333. data/golden/nested_hash/expected/lir_04_1_loop_fusion.txt +10 -0
  334. data/golden/nested_hash/expected/lir_04_loop_invcm.txt +10 -0
  335. data/golden/nested_hash/expected/lir_06_const_prop.txt +10 -0
  336. data/golden/nested_hash/expected/nast.txt +8 -0
  337. data/golden/nested_hash/expected/schema_javascript.mjs +9 -0
  338. data/golden/nested_hash/expected/schema_ruby.rb +35 -0
  339. data/golden/nested_hash/expected/snast.txt +8 -0
  340. data/golden/nested_hash/expected.json +3 -0
  341. data/golden/nested_hash/input.json +7 -0
  342. data/golden/nested_hash/schema.kumi +11 -0
  343. data/golden/reduction_broadcast/expected/ast.txt +49 -0
  344. data/golden/reduction_broadcast/expected/input_plan.txt +13 -0
  345. data/golden/reduction_broadcast/expected/lir_00_unoptimized.txt +49 -0
  346. data/golden/reduction_broadcast/expected/lir_01_hoist_scalar_references.txt +49 -0
  347. data/golden/reduction_broadcast/expected/lir_02_inlined.txt +80 -0
  348. data/golden/reduction_broadcast/expected/lir_03_cse.txt +68 -0
  349. data/golden/reduction_broadcast/expected/lir_04_1_loop_fusion.txt +68 -0
  350. data/golden/reduction_broadcast/expected/lir_04_loop_invcm.txt +68 -0
  351. data/golden/reduction_broadcast/expected/lir_06_const_prop.txt +68 -0
  352. data/golden/reduction_broadcast/expected/nast.txt +24 -0
  353. data/golden/reduction_broadcast/expected/schema_javascript.mjs +74 -0
  354. data/golden/reduction_broadcast/expected/schema_ruby.rb +110 -0
  355. data/golden/reduction_broadcast/expected/snast.txt +24 -0
  356. data/golden/reduction_broadcast/expected.json +25 -0
  357. data/golden/reduction_broadcast/input.json +19 -0
  358. data/golden/reduction_broadcast/schema.kumi +34 -0
  359. data/golden/roll/expected/ast.txt +36 -0
  360. data/golden/roll/expected/input_plan.txt +3 -0
  361. data/golden/roll/expected/lir_00_unoptimized.txt +56 -0
  362. data/golden/roll/expected/lir_01_hoist_scalar_references.txt +56 -0
  363. data/golden/roll/expected/lir_02_inlined.txt +56 -0
  364. data/golden/roll/expected/lir_03_cse.txt +55 -0
  365. data/golden/roll/expected/lir_04_1_loop_fusion.txt +55 -0
  366. data/golden/roll/expected/lir_04_loop_invcm.txt +55 -0
  367. data/golden/roll/expected/lir_06_const_prop.txt +55 -0
  368. data/golden/roll/expected/nast.txt +26 -0
  369. data/golden/roll/expected/schema_javascript.mjs +65 -0
  370. data/golden/roll/expected/schema_ruby.rb +95 -0
  371. data/golden/roll/expected/snast.txt +26 -0
  372. data/golden/roll/expected.json +6 -0
  373. data/golden/roll/input.json +1 -0
  374. data/golden/roll/schema.kumi +13 -0
  375. data/golden/shift/expected/ast.txt +48 -0
  376. data/golden/shift/expected/input_plan.txt +3 -0
  377. data/golden/shift/expected/lir_00_unoptimized.txt +96 -0
  378. data/golden/shift/expected/lir_01_hoist_scalar_references.txt +96 -0
  379. data/golden/shift/expected/lir_02_inlined.txt +96 -0
  380. data/golden/shift/expected/lir_03_cse.txt +90 -0
  381. data/golden/shift/expected/lir_04_1_loop_fusion.txt +90 -0
  382. data/golden/shift/expected/lir_04_loop_invcm.txt +90 -0
  383. data/golden/shift/expected/lir_06_const_prop.txt +90 -0
  384. data/golden/shift/expected/nast.txt +38 -0
  385. data/golden/shift/expected/schema_javascript.mjs +106 -0
  386. data/golden/shift/expected/schema_ruby.rb +138 -0
  387. data/golden/shift/expected/snast.txt +38 -0
  388. data/golden/shift/expected.json +8 -0
  389. data/golden/shift/input.json +1 -0
  390. data/golden/shift/schema.kumi +15 -0
  391. data/golden/shift_2d/expected/ast.txt +88 -0
  392. data/golden/shift_2d/expected/input_plan.txt +5 -0
  393. data/golden/shift_2d/expected/lir_00_unoptimized.txt +274 -0
  394. data/golden/shift_2d/expected/lir_01_hoist_scalar_references.txt +274 -0
  395. data/golden/shift_2d/expected/lir_02_inlined.txt +274 -0
  396. data/golden/shift_2d/expected/lir_03_cse.txt +262 -0
  397. data/golden/shift_2d/expected/lir_04_1_loop_fusion.txt +262 -0
  398. data/golden/shift_2d/expected/lir_04_loop_invcm.txt +262 -0
  399. data/golden/shift_2d/expected/lir_06_const_prop.txt +262 -0
  400. data/golden/shift_2d/expected/nast.txt +74 -0
  401. data/golden/shift_2d/expected/schema_javascript.mjs +320 -0
  402. data/golden/shift_2d/expected/schema_ruby.rb +358 -0
  403. data/golden/shift_2d/expected/snast.txt +74 -0
  404. data/golden/shift_2d/expected.json +15 -0
  405. data/golden/shift_2d/input.json +14 -0
  406. data/golden/shift_2d/schema.kumi +25 -0
  407. data/golden/simple_math/expected/ast.txt +40 -0
  408. data/golden/simple_math/expected/input_plan.txt +2 -0
  409. data/golden/simple_math/expected/lir_00_unoptimized.txt +31 -0
  410. data/golden/simple_math/expected/lir_01_hoist_scalar_references.txt +31 -0
  411. data/golden/simple_math/expected/lir_02_inlined.txt +31 -0
  412. data/golden/simple_math/expected/lir_03_cse.txt +31 -0
  413. data/golden/simple_math/expected/lir_04_1_loop_fusion.txt +31 -0
  414. data/golden/simple_math/expected/lir_04_loop_invcm.txt +31 -0
  415. data/golden/simple_math/expected/lir_06_const_prop.txt +31 -0
  416. data/golden/simple_math/expected/nast.txt +33 -0
  417. data/golden/simple_math/expected/schema_javascript.mjs +33 -0
  418. data/golden/simple_math/expected/schema_ruby.rb +59 -0
  419. data/golden/simple_math/expected/snast.txt +33 -0
  420. data/golden/simple_math/expected.json +1 -0
  421. data/golden/simple_math/input.json +4 -0
  422. data/golden/simple_math/schema.kumi +2 -1
  423. data/golden/streaming_basics/expected/ast.txt +64 -0
  424. data/golden/streaming_basics/expected/input_plan.txt +8 -0
  425. data/golden/streaming_basics/expected/lir_00_unoptimized.txt +73 -0
  426. data/golden/streaming_basics/expected/lir_01_hoist_scalar_references.txt +73 -0
  427. data/golden/streaming_basics/expected/lir_02_inlined.txt +100 -0
  428. data/golden/streaming_basics/expected/lir_03_cse.txt +84 -0
  429. data/golden/streaming_basics/expected/lir_04_1_loop_fusion.txt +84 -0
  430. data/golden/streaming_basics/expected/lir_04_loop_invcm.txt +84 -0
  431. data/golden/streaming_basics/expected/lir_06_const_prop.txt +84 -0
  432. data/golden/streaming_basics/expected/nast.txt +48 -0
  433. data/golden/streaming_basics/expected/schema_javascript.mjs +94 -0
  434. data/golden/streaming_basics/expected/schema_ruby.rb +127 -0
  435. data/golden/streaming_basics/expected/snast.txt +48 -0
  436. data/golden/streaming_basics/expected.json +10 -0
  437. data/golden/streaming_basics/input.json +8 -0
  438. data/golden/streaming_basics/schema.kumi +24 -0
  439. data/golden/tuples/expected/ast.txt +48 -0
  440. data/golden/tuples/expected/input_plan.txt +1 -0
  441. data/golden/tuples/expected/lir_00_unoptimized.txt +40 -0
  442. data/golden/tuples/expected/lir_01_hoist_scalar_references.txt +40 -0
  443. data/golden/tuples/expected/lir_02_inlined.txt +48 -0
  444. data/golden/tuples/expected/lir_03_cse.txt +48 -0
  445. data/golden/tuples/expected/lir_04_1_loop_fusion.txt +48 -0
  446. data/golden/tuples/expected/lir_04_loop_invcm.txt +48 -0
  447. data/golden/tuples/expected/lir_06_const_prop.txt +48 -0
  448. data/golden/tuples/expected/nast.txt +42 -0
  449. data/golden/tuples/expected/schema_javascript.mjs +51 -0
  450. data/golden/tuples/expected/schema_ruby.rb +77 -0
  451. data/golden/tuples/expected/snast.txt +42 -0
  452. data/golden/tuples/expected.json +7 -0
  453. data/golden/tuples/input.json +3 -0
  454. data/golden/tuples/schema.kumi +11 -0
  455. data/golden/tuples_and_arrays/expected/ast.txt +44 -0
  456. data/golden/tuples_and_arrays/expected/input_plan.txt +7 -0
  457. data/golden/tuples_and_arrays/expected/lir_00_unoptimized.txt +41 -0
  458. data/golden/tuples_and_arrays/expected/lir_01_hoist_scalar_references.txt +41 -0
  459. data/golden/tuples_and_arrays/expected/lir_02_inlined.txt +62 -0
  460. data/golden/tuples_and_arrays/expected/lir_03_cse.txt +51 -0
  461. data/golden/tuples_and_arrays/expected/lir_04_1_loop_fusion.txt +51 -0
  462. data/golden/tuples_and_arrays/expected/lir_04_loop_invcm.txt +51 -0
  463. data/golden/tuples_and_arrays/expected/lir_06_const_prop.txt +51 -0
  464. data/golden/tuples_and_arrays/expected/nast.txt +28 -0
  465. data/golden/tuples_and_arrays/expected/schema_javascript.mjs +58 -0
  466. data/golden/tuples_and_arrays/expected/schema_ruby.rb +88 -0
  467. data/golden/tuples_and_arrays/expected/snast.txt +28 -0
  468. data/golden/tuples_and_arrays/expected.json +18 -0
  469. data/golden/tuples_and_arrays/input.json +7 -0
  470. data/golden/tuples_and_arrays/schema.kumi +38 -0
  471. data/golden/with_constants/expected/ast.txt +28 -0
  472. data/golden/with_constants/expected/input_plan.txt +2 -0
  473. data/golden/with_constants/expected/lir_00_unoptimized.txt +17 -0
  474. data/golden/with_constants/expected/lir_01_hoist_scalar_references.txt +17 -0
  475. data/golden/with_constants/expected/lir_02_inlined.txt +17 -0
  476. data/golden/with_constants/expected/lir_03_cse.txt +17 -0
  477. data/golden/with_constants/expected/lir_04_1_loop_fusion.txt +17 -0
  478. data/golden/with_constants/expected/lir_04_loop_invcm.txt +17 -0
  479. data/golden/with_constants/expected/lir_06_const_prop.txt +17 -0
  480. data/golden/with_constants/expected/nast.txt +21 -0
  481. data/golden/with_constants/expected/schema_javascript.mjs +18 -0
  482. data/golden/with_constants/expected/schema_ruby.rb +44 -0
  483. data/golden/with_constants/expected/snast.txt +15 -0
  484. data/golden/with_constants/schema.kumi +10 -0
  485. data/lib/kumi/analyzer.rb +76 -24
  486. data/lib/kumi/configuration.rb +60 -0
  487. data/lib/kumi/core/analyzer/binder.rb +121 -0
  488. data/lib/kumi/core/analyzer/checkpoint.rb +15 -9
  489. data/lib/kumi/core/analyzer/constant_evaluator.rb +32 -37
  490. data/lib/kumi/core/analyzer/constant_folding_helpers.rb +55 -0
  491. data/lib/kumi/core/analyzer/debug.rb +14 -16
  492. data/lib/kumi/core/analyzer/fn_aliases.rb +46 -0
  493. data/lib/kumi/core/analyzer/folder.rb +94 -0
  494. data/lib/kumi/core/analyzer/macro_expander.rb +69 -0
  495. data/lib/kumi/core/analyzer/passes/assemble_irv2_pass.rb +130 -0
  496. data/lib/kumi/core/analyzer/passes/attach_anchors_pass.rb +71 -0
  497. data/lib/kumi/core/analyzer/passes/attach_terminal_info_pass.rb +181 -0
  498. data/lib/kumi/core/analyzer/passes/codegen/js/declaration_emitter.rb +317 -0
  499. data/lib/kumi/core/analyzer/passes/codegen/js/emitter.rb +75 -0
  500. data/lib/kumi/core/analyzer/passes/codegen/js/output_buffer.rb +103 -0
  501. data/lib/kumi/core/analyzer/passes/codegen/js_pass.rb +27 -0
  502. data/lib/kumi/core/analyzer/passes/codegen/ruby/declaration_emitter.rb +321 -0
  503. data/lib/kumi/core/analyzer/passes/codegen/ruby/emitter.rb +85 -0
  504. data/lib/kumi/core/analyzer/passes/codegen/ruby/output_buffer.rb +111 -0
  505. data/lib/kumi/core/analyzer/passes/codegen/ruby_pass.rb +32 -0
  506. data/lib/kumi/core/analyzer/passes/constant_folding_pass.rb +33 -0
  507. data/lib/kumi/core/analyzer/passes/contract_checker_pass.rb +220 -0
  508. data/lib/kumi/core/analyzer/passes/dependency_resolver.rb +5 -6
  509. data/lib/kumi/core/analyzer/passes/input_access_planner_pass.rb +7 -3
  510. data/lib/kumi/core/analyzer/passes/input_collector.rb +74 -122
  511. data/lib/kumi/core/analyzer/passes/input_form_schema_pass.rb +43 -0
  512. data/lib/kumi/core/analyzer/passes/ir_dependency_pass.rb +1 -1
  513. data/lib/kumi/core/analyzer/passes/ir_execution_schedule_pass.rb +1 -1
  514. data/lib/kumi/core/analyzer/passes/join_reduce_planning_pass.rb +21 -23
  515. data/lib/kumi/core/analyzer/passes/lir/constant_propagation_pass.rb +84 -0
  516. data/lib/kumi/core/analyzer/passes/lir/dead_code_elimination_pass.rb +93 -0
  517. data/lib/kumi/core/analyzer/passes/lir/hoist_scalar_references_pass.rb +115 -0
  518. data/lib/kumi/core/analyzer/passes/lir/inline_declarations_pass.rb +274 -0
  519. data/lib/kumi/core/analyzer/passes/lir/instruction_scheduling_pass.rb +198 -0
  520. data/lib/kumi/core/analyzer/passes/lir/kernel_binding_pass.rb +30 -0
  521. data/lib/kumi/core/analyzer/passes/lir/local_cse_pass.rb +121 -0
  522. data/lib/kumi/core/analyzer/passes/lir/loop_fusion_pass.rb +156 -0
  523. data/lib/kumi/core/analyzer/passes/lir/loop_invariant_code_motion_pass.rb +148 -0
  524. data/lib/kumi/core/analyzer/passes/lir/lower_pass.rb +407 -0
  525. data/lib/kumi/core/analyzer/passes/lir/stencil_emitter.rb +243 -0
  526. data/lib/kumi/core/analyzer/passes/lir/validation_pass.rb +83 -0
  527. data/lib/kumi/core/analyzer/passes/load_input_cse.rb +17 -16
  528. data/lib/kumi/core/analyzer/passes/lower_to_ir_pass.rb +4 -2
  529. data/lib/kumi/core/analyzer/passes/lower_to_irv2_pass.rb +197 -0
  530. data/lib/kumi/core/analyzer/passes/name_indexer.rb +4 -1
  531. data/lib/kumi/core/analyzer/passes/nast_dimensional_analyzer_pass.rb +237 -0
  532. data/lib/kumi/core/analyzer/passes/normalize_to_nast_pass.rb +156 -0
  533. data/lib/kumi/core/analyzer/passes/output_schema_pass.rb +38 -0
  534. data/lib/kumi/core/analyzer/passes/pass_base.rb +30 -4
  535. data/lib/kumi/core/analyzer/passes/precompute_access_paths_pass.rb +93 -0
  536. data/lib/kumi/core/analyzer/passes/scope_resolution_pass.rb +33 -30
  537. data/lib/kumi/core/analyzer/passes/semantic_constraint_validator.rb +5 -26
  538. data/lib/kumi/core/analyzer/passes/snast_pass.rb +229 -0
  539. data/lib/kumi/core/analyzer/passes/toposorter.rb +1 -0
  540. data/lib/kumi/core/analyzer/passes/type_checker.rb +13 -0
  541. data/lib/kumi/core/analyzer/passes/type_inferencer_pass.rb +14 -16
  542. data/lib/kumi/core/analyzer/passes/unsat_detector.rb +2 -1
  543. data/lib/kumi/core/analyzer/plans.rb +12 -0
  544. data/lib/kumi/core/analyzer/state_serde.rb +4 -4
  545. data/lib/kumi/core/analyzer/structs/access_plan.rb +2 -2
  546. data/lib/kumi/core/analyzer/unsat_constant_evaluator.rb +59 -0
  547. data/lib/kumi/core/compiler/access_codegen.rb +1 -1
  548. data/lib/kumi/core/compiler/access_emit/base.rb +9 -5
  549. data/lib/kumi/core/compiler/access_emit/each_indexed.rb +10 -3
  550. data/lib/kumi/core/compiler/access_emit/materialize.rb +12 -5
  551. data/lib/kumi/core/compiler/access_emit/ravel.rb +10 -3
  552. data/lib/kumi/core/compiler/access_emit/read.rb +4 -1
  553. data/lib/kumi/core/compiler/access_planner.rb +42 -4
  554. data/lib/kumi/core/compiler/access_planner_v2.rb +164 -0
  555. data/lib/kumi/core/explain.rb +18 -11
  556. data/lib/kumi/core/functions/loader.rb +47 -0
  557. data/lib/kumi/core/functions/model.rb +10 -0
  558. data/lib/kumi/core/functions/type_rules.rb +108 -0
  559. data/lib/kumi/core/ir/execution_engine/interpreter.rb +1 -1
  560. data/lib/kumi/core/ir/execution_engine/profiler.rb +107 -97
  561. data/lib/kumi/core/ir.rb +6 -2
  562. data/lib/kumi/core/irv2/builder.rb +48 -0
  563. data/lib/kumi/core/irv2/declaration.rb +28 -0
  564. data/lib/kumi/core/irv2/module.rb +108 -0
  565. data/lib/kumi/core/irv2/value.rb +28 -0
  566. data/lib/kumi/core/lir/analyze.rb +64 -0
  567. data/lib/kumi/core/lir/build.rb +363 -0
  568. data/lib/kumi/core/lir/emit.rb +62 -0
  569. data/lib/kumi/core/lir/structs/instruction.rb +44 -0
  570. data/lib/kumi/core/lir/structs/literal.rb +14 -0
  571. data/lib/kumi/core/lir/structs/stamp.rb +13 -0
  572. data/lib/kumi/core/lir/support/error.rb +9 -0
  573. data/lib/kumi/core/lir/support/ids.rb +34 -0
  574. data/lib/kumi/core/lir/validate.rb +74 -0
  575. data/lib/kumi/core/lir.rb +34 -0
  576. data/lib/kumi/core/nast.rb +216 -0
  577. data/lib/kumi/core/ruby_parser/dsl.rb +2 -2
  578. data/lib/kumi/core/ruby_parser/dsl_cascade_builder.rb +1 -1
  579. data/lib/kumi/core/ruby_parser/expression_converter.rb +10 -0
  580. data/lib/kumi/core/ruby_parser/input_builder.rb +16 -17
  581. data/lib/kumi/core/ruby_parser/schema_builder.rb +36 -10
  582. data/lib/kumi/core/ruby_parser/sugar.rb +64 -0
  583. data/lib/kumi/core/types/builder.rb +2 -2
  584. data/lib/kumi/core/types/normalizer.rb +2 -0
  585. data/lib/kumi/core/types/validator.rb +10 -3
  586. data/lib/kumi/core/types.rb +7 -0
  587. data/lib/kumi/dev/codegen.rb +194 -0
  588. data/lib/kumi/dev/golden/generator.rb +105 -0
  589. data/lib/kumi/dev/golden/reporter.rb +160 -0
  590. data/lib/kumi/dev/golden/representation.rb +45 -0
  591. data/lib/kumi/dev/golden/result.rb +98 -0
  592. data/lib/kumi/dev/golden/runtime_test.rb +93 -0
  593. data/lib/kumi/dev/golden/suite.rb +131 -0
  594. data/lib/kumi/dev/golden/verifier.rb +76 -0
  595. data/lib/kumi/dev/golden.rb +75 -0
  596. data/lib/kumi/dev/ir.rb +4 -4
  597. data/lib/kumi/dev/parse.rb +1 -1
  598. data/lib/kumi/dev/pretty_printer.rb +229 -0
  599. data/lib/kumi/dev/printer/irv2_formatter.rb +163 -0
  600. data/lib/kumi/dev/printer/width_aware_json.rb +44 -0
  601. data/lib/kumi/dev/profile_aggregator.rb +36 -38
  602. data/lib/kumi/dev/profile_runner.rb +19 -23
  603. data/lib/kumi/dev/runner.rb +12 -22
  604. data/lib/kumi/dev/support/kumi_runner.mjs +39 -0
  605. data/lib/kumi/dev.rb +3 -3
  606. data/lib/kumi/frontends/ruby.rb +12 -12
  607. data/lib/kumi/frontends/text.rb +26 -21
  608. data/lib/kumi/frontends.rb +6 -8
  609. data/lib/kumi/kernel_registry.rb +59 -0
  610. data/lib/kumi/pack/builder.rb +229 -0
  611. data/lib/kumi/pack.rb +15 -0
  612. data/lib/kumi/registry_v2/loader.rb +81 -0
  613. data/lib/kumi/registry_v2.rb +118 -0
  614. data/lib/kumi/schema.rb +83 -43
  615. data/lib/kumi/support/diff.rb +3 -2
  616. data/lib/kumi/support/ir_render.rb +1 -1
  617. data/lib/kumi/support/lir_printer.rb +143 -0
  618. data/lib/kumi/support/nast_printer.rb +93 -0
  619. data/lib/kumi/support/s_expression_printer.rb +5 -4
  620. data/lib/kumi/support/snast_printer.rb +111 -0
  621. data/lib/kumi/syntax/call_expression.rb +1 -1
  622. data/lib/kumi/syntax/input_declaration.rb +2 -2
  623. data/lib/kumi/syntax/node.rb +4 -12
  624. data/lib/kumi/syntax/root.rb +10 -0
  625. data/lib/kumi/syntax/trait_declaration.rb +1 -0
  626. data/lib/kumi/syntax/value_declaration.rb +1 -0
  627. data/lib/kumi/version.rb +1 -1
  628. data/lib/kumi.rb +47 -5
  629. metadata +571 -54
  630. data/docs/AST.md +0 -133
  631. data/docs/DSL.md +0 -154
  632. data/docs/FUNCTIONS.md +0 -176
  633. data/docs/VECTOR_SEMANTICS.md +0 -286
  634. data/docs/compiler_design_principles.md +0 -86
  635. data/docs/dev/analyzer-debug.md +0 -52
  636. data/docs/dev/parse-command.md +0 -64
  637. data/docs/dev/vm-profiling.md +0 -95
  638. data/docs/development/README.md +0 -120
  639. data/docs/development/error-reporting.md +0 -361
  640. data/docs/features/README.md +0 -58
  641. data/docs/features/analysis-type-inference.md +0 -42
  642. data/docs/features/analysis-unsat-detection.md +0 -71
  643. data/docs/features/hierarchical-broadcasting.md +0 -415
  644. data/docs/features/input-declaration-system.md +0 -58
  645. data/docs/features/performance.md +0 -14
  646. data/docs/features/s-expression-printer.md +0 -77
  647. data/docs/schema_metadata/broadcasts.md +0 -53
  648. data/docs/schema_metadata/cascades.md +0 -45
  649. data/docs/schema_metadata/declarations.md +0 -54
  650. data/docs/schema_metadata/dependencies.md +0 -57
  651. data/docs/schema_metadata/evaluation_order.md +0 -29
  652. data/docs/schema_metadata/examples.md +0 -95
  653. data/docs/schema_metadata/inferred_types.md +0 -46
  654. data/docs/schema_metadata/inputs.md +0 -86
  655. data/docs/schema_metadata.md +0 -108
  656. data/golden/mixed_nesting/schema.kumi +0 -42
  657. data/lib/kumi/core/function_registry/collection_functions.rb +0 -298
  658. data/lib/kumi/core/function_registry/comparison_functions.rb +0 -33
  659. data/lib/kumi/core/function_registry/conditional_functions.rb +0 -48
  660. data/lib/kumi/core/function_registry/function_builder.rb +0 -184
  661. data/lib/kumi/core/function_registry/logical_functions.rb +0 -214
  662. data/lib/kumi/core/function_registry/math_functions.rb +0 -74
  663. data/lib/kumi/core/function_registry/stat_functions.rb +0 -156
  664. data/lib/kumi/core/function_registry/string_functions.rb +0 -57
  665. data/lib/kumi/core/function_registry/type_functions.rb +0 -53
  666. data/lib/kumi/core/function_registry.rb +0 -176
  667. data/lib/kumi/registry.rb +0 -32
  668. data/lib/kumi/runtime/executable.rb +0 -135
  669. data/lib/kumi/runtime/run.rb +0 -105
  670. data/performance_results.txt +0 -63
  671. data/scripts/analyze_broadcast_methods.rb +0 -68
  672. data/scripts/analyze_cascade_methods.rb +0 -74
  673. data/scripts/check_broadcasting_coverage.rb +0 -51
  674. data/scripts/find_dead_code.rb +0 -114
  675. data/scripts/generate_function_docs.rb +0 -71
  676. data/scripts/test_mixed_nesting_performance.rb +0 -206
@@ -0,0 +1,1918 @@
1
+ (LIR
2
+ (Declaration a
3
+ %t1 = load_input "rows" :: array
4
+ loop rows id=L1 in %t1 as el=%rows_el_2, idx=%rows_i_3
5
+ loop col id=L2 in %rows_el_2 as el=%col_el_4, idx=%col_i_5
6
+ yield %col_el_4
7
+ end_loop
8
+ end_loop
9
+ )
10
+ (Declaration n
11
+ %t6 = load_input "rows" :: array
12
+ loop rows id=L3 in %t6 as el=%rows_el_7, idx=%rows_i_8
13
+ loop col id=L4 in %rows_el_7 as el=%col_el_9, idx=%col_i_10
14
+ %t11 = Length %t6 :: integer
15
+ %t12 = const -1 :: integer
16
+ %t13 = call core.sub(%rows_i_8, %t12) :: integer
17
+ %t14 = const 0 :: integer
18
+ %t15 = call core.gte(%t13, %t14) :: boolean
19
+ %t16 = call core.lt(%t13, %t11) :: boolean
20
+ %t17 = call core.and(%t15, %t16) :: boolean
21
+ %t18 = const 1 :: integer
22
+ %t19 = call core.sub(%t11, %t18) :: integer
23
+ %t20 = const 0 :: integer
24
+ %t21 = call core.clamp(%t13, %t20, %t19) :: integer
25
+ %t22 = Gather %t6, %t21 :: any
26
+ %t23 = Length %t22 :: integer
27
+ %t24 = call core.mod(%col_i_10, %t23) :: integer
28
+ %t25 = call core.add(%t24, %t23) :: integer
29
+ %t26 = call core.mod(%t25, %t23) :: integer
30
+ %t27 = Gather %t22, %t26 :: integer
31
+ %t28 = const 0 :: integer
32
+ %t29 = select %t17, %t27, %t28 :: integer
33
+ yield %t29
34
+ end_loop
35
+ end_loop
36
+ )
37
+ (Declaration s
38
+ %t30 = load_input "rows" :: array
39
+ loop rows id=L5 in %t30 as el=%rows_el_31, idx=%rows_i_32
40
+ loop col id=L6 in %rows_el_31 as el=%col_el_33, idx=%col_i_34
41
+ %t35 = Length %t30 :: integer
42
+ %t36 = const 1 :: integer
43
+ %t37 = call core.sub(%rows_i_32, %t36) :: integer
44
+ %t38 = const 0 :: integer
45
+ %t39 = call core.gte(%t37, %t38) :: boolean
46
+ %t40 = call core.lt(%t37, %t35) :: boolean
47
+ %t41 = call core.and(%t39, %t40) :: boolean
48
+ %t42 = const 1 :: integer
49
+ %t43 = call core.sub(%t35, %t42) :: integer
50
+ %t44 = const 0 :: integer
51
+ %t45 = call core.clamp(%t37, %t44, %t43) :: integer
52
+ %t46 = Gather %t30, %t45 :: any
53
+ %t47 = Length %t46 :: integer
54
+ %t48 = call core.mod(%col_i_34, %t47) :: integer
55
+ %t49 = call core.add(%t48, %t47) :: integer
56
+ %t50 = call core.mod(%t49, %t47) :: integer
57
+ %t51 = Gather %t46, %t50 :: integer
58
+ %t52 = const 0 :: integer
59
+ %t53 = select %t41, %t51, %t52 :: integer
60
+ yield %t53
61
+ end_loop
62
+ end_loop
63
+ )
64
+ (Declaration w
65
+ %t54 = load_input "rows" :: array
66
+ loop rows id=L7 in %t54 as el=%rows_el_55, idx=%rows_i_56
67
+ loop col id=L8 in %rows_el_55 as el=%col_el_57, idx=%col_i_58
68
+ %t59 = Length %t54 :: integer
69
+ %t60 = call core.mod(%rows_i_56, %t59) :: integer
70
+ %t61 = call core.add(%t60, %t59) :: integer
71
+ %t62 = call core.mod(%t61, %t59) :: integer
72
+ %t63 = Gather %t54, %t62 :: any
73
+ %t64 = Length %t63 :: integer
74
+ %t65 = const -1 :: integer
75
+ %t66 = call core.sub(%col_i_58, %t65) :: integer
76
+ %t67 = const 0 :: integer
77
+ %t68 = call core.gte(%t66, %t67) :: boolean
78
+ %t69 = call core.lt(%t66, %t64) :: boolean
79
+ %t70 = call core.and(%t68, %t69) :: boolean
80
+ %t71 = const 1 :: integer
81
+ %t72 = call core.sub(%t64, %t71) :: integer
82
+ %t73 = const 0 :: integer
83
+ %t74 = call core.clamp(%t66, %t73, %t72) :: integer
84
+ %t75 = Gather %t63, %t74 :: integer
85
+ %t76 = const 0 :: integer
86
+ %t77 = select %t70, %t75, %t76 :: integer
87
+ yield %t77
88
+ end_loop
89
+ end_loop
90
+ )
91
+ (Declaration e
92
+ %t78 = load_input "rows" :: array
93
+ loop rows id=L9 in %t78 as el=%rows_el_79, idx=%rows_i_80
94
+ loop col id=L10 in %rows_el_79 as el=%col_el_81, idx=%col_i_82
95
+ %t83 = Length %t78 :: integer
96
+ %t84 = call core.mod(%rows_i_80, %t83) :: integer
97
+ %t85 = call core.add(%t84, %t83) :: integer
98
+ %t86 = call core.mod(%t85, %t83) :: integer
99
+ %t87 = Gather %t78, %t86 :: any
100
+ %t88 = Length %t87 :: integer
101
+ %t89 = const 1 :: integer
102
+ %t90 = call core.sub(%col_i_82, %t89) :: integer
103
+ %t91 = const 0 :: integer
104
+ %t92 = call core.gte(%t90, %t91) :: boolean
105
+ %t93 = call core.lt(%t90, %t88) :: boolean
106
+ %t94 = call core.and(%t92, %t93) :: boolean
107
+ %t95 = const 1 :: integer
108
+ %t96 = call core.sub(%t88, %t95) :: integer
109
+ %t97 = const 0 :: integer
110
+ %t98 = call core.clamp(%t90, %t97, %t96) :: integer
111
+ %t99 = Gather %t87, %t98 :: integer
112
+ %t100 = const 0 :: integer
113
+ %t101 = select %t94, %t99, %t100 :: integer
114
+ yield %t101
115
+ end_loop
116
+ end_loop
117
+ )
118
+ (Declaration nw
119
+ %t102 = load_input "rows" :: array
120
+ loop rows id=L11 in %t102 as el=%rows_el_103, idx=%rows_i_104
121
+ loop col id=L12 in %rows_el_103 as el=%col_el_105, idx=%col_i_106
122
+ %t107 = Length %t102 :: integer
123
+ %t108 = const -1 :: integer
124
+ %t109 = call core.sub(%rows_i_104, %t108) :: integer
125
+ %t110 = const 0 :: integer
126
+ %t111 = call core.gte(%t109, %t110) :: boolean
127
+ %t112 = call core.lt(%t109, %t107) :: boolean
128
+ %t113 = call core.and(%t111, %t112) :: boolean
129
+ %t114 = const 1 :: integer
130
+ %t115 = call core.sub(%t107, %t114) :: integer
131
+ %t116 = const 0 :: integer
132
+ %t117 = call core.clamp(%t109, %t116, %t115) :: integer
133
+ %t118 = Gather %t102, %t117 :: any
134
+ %t119 = Length %t118 :: integer
135
+ %t120 = const -1 :: integer
136
+ %t121 = call core.sub(%col_i_106, %t120) :: integer
137
+ %t122 = const 0 :: integer
138
+ %t123 = call core.gte(%t121, %t122) :: boolean
139
+ %t124 = call core.lt(%t121, %t119) :: boolean
140
+ %t125 = call core.and(%t123, %t124) :: boolean
141
+ %t126 = call core.and(%t113, %t125) :: boolean
142
+ %t127 = const 1 :: integer
143
+ %t128 = call core.sub(%t119, %t127) :: integer
144
+ %t129 = const 0 :: integer
145
+ %t130 = call core.clamp(%t121, %t129, %t128) :: integer
146
+ %t131 = Gather %t118, %t130 :: integer
147
+ %t132 = const 0 :: integer
148
+ %t133 = select %t126, %t131, %t132 :: integer
149
+ yield %t133
150
+ end_loop
151
+ end_loop
152
+ )
153
+ (Declaration ne
154
+ %t134 = load_input "rows" :: array
155
+ loop rows id=L13 in %t134 as el=%rows_el_135, idx=%rows_i_136
156
+ loop col id=L14 in %rows_el_135 as el=%col_el_137, idx=%col_i_138
157
+ %t139 = Length %t134 :: integer
158
+ %t140 = const -1 :: integer
159
+ %t141 = call core.sub(%rows_i_136, %t140) :: integer
160
+ %t142 = const 0 :: integer
161
+ %t143 = call core.gte(%t141, %t142) :: boolean
162
+ %t144 = call core.lt(%t141, %t139) :: boolean
163
+ %t145 = call core.and(%t143, %t144) :: boolean
164
+ %t146 = const 1 :: integer
165
+ %t147 = call core.sub(%t139, %t146) :: integer
166
+ %t148 = const 0 :: integer
167
+ %t149 = call core.clamp(%t141, %t148, %t147) :: integer
168
+ %t150 = Gather %t134, %t149 :: any
169
+ %t151 = Length %t150 :: integer
170
+ %t152 = const 1 :: integer
171
+ %t153 = call core.sub(%col_i_138, %t152) :: integer
172
+ %t154 = const 0 :: integer
173
+ %t155 = call core.gte(%t153, %t154) :: boolean
174
+ %t156 = call core.lt(%t153, %t151) :: boolean
175
+ %t157 = call core.and(%t155, %t156) :: boolean
176
+ %t158 = call core.and(%t145, %t157) :: boolean
177
+ %t159 = const 1 :: integer
178
+ %t160 = call core.sub(%t151, %t159) :: integer
179
+ %t161 = const 0 :: integer
180
+ %t162 = call core.clamp(%t153, %t161, %t160) :: integer
181
+ %t163 = Gather %t150, %t162 :: integer
182
+ %t164 = const 0 :: integer
183
+ %t165 = select %t158, %t163, %t164 :: integer
184
+ yield %t165
185
+ end_loop
186
+ end_loop
187
+ )
188
+ (Declaration sw
189
+ %t166 = load_input "rows" :: array
190
+ loop rows id=L15 in %t166 as el=%rows_el_167, idx=%rows_i_168
191
+ loop col id=L16 in %rows_el_167 as el=%col_el_169, idx=%col_i_170
192
+ %t171 = Length %t166 :: integer
193
+ %t172 = const 1 :: integer
194
+ %t173 = call core.sub(%rows_i_168, %t172) :: integer
195
+ %t174 = const 0 :: integer
196
+ %t175 = call core.gte(%t173, %t174) :: boolean
197
+ %t176 = call core.lt(%t173, %t171) :: boolean
198
+ %t177 = call core.and(%t175, %t176) :: boolean
199
+ %t178 = const 1 :: integer
200
+ %t179 = call core.sub(%t171, %t178) :: integer
201
+ %t180 = const 0 :: integer
202
+ %t181 = call core.clamp(%t173, %t180, %t179) :: integer
203
+ %t182 = Gather %t166, %t181 :: any
204
+ %t183 = Length %t182 :: integer
205
+ %t184 = const -1 :: integer
206
+ %t185 = call core.sub(%col_i_170, %t184) :: integer
207
+ %t186 = const 0 :: integer
208
+ %t187 = call core.gte(%t185, %t186) :: boolean
209
+ %t188 = call core.lt(%t185, %t183) :: boolean
210
+ %t189 = call core.and(%t187, %t188) :: boolean
211
+ %t190 = call core.and(%t177, %t189) :: boolean
212
+ %t191 = const 1 :: integer
213
+ %t192 = call core.sub(%t183, %t191) :: integer
214
+ %t193 = const 0 :: integer
215
+ %t194 = call core.clamp(%t185, %t193, %t192) :: integer
216
+ %t195 = Gather %t182, %t194 :: integer
217
+ %t196 = const 0 :: integer
218
+ %t197 = select %t190, %t195, %t196 :: integer
219
+ yield %t197
220
+ end_loop
221
+ end_loop
222
+ )
223
+ (Declaration se
224
+ %t198 = load_input "rows" :: array
225
+ loop rows id=L17 in %t198 as el=%rows_el_199, idx=%rows_i_200
226
+ loop col id=L18 in %rows_el_199 as el=%col_el_201, idx=%col_i_202
227
+ %t203 = Length %t198 :: integer
228
+ %t204 = const 1 :: integer
229
+ %t205 = call core.sub(%rows_i_200, %t204) :: integer
230
+ %t206 = const 0 :: integer
231
+ %t207 = call core.gte(%t205, %t206) :: boolean
232
+ %t208 = call core.lt(%t205, %t203) :: boolean
233
+ %t209 = call core.and(%t207, %t208) :: boolean
234
+ %t210 = const 1 :: integer
235
+ %t211 = call core.sub(%t203, %t210) :: integer
236
+ %t212 = const 0 :: integer
237
+ %t213 = call core.clamp(%t205, %t212, %t211) :: integer
238
+ %t214 = Gather %t198, %t213 :: any
239
+ %t215 = Length %t214 :: integer
240
+ %t216 = const 1 :: integer
241
+ %t217 = call core.sub(%col_i_202, %t216) :: integer
242
+ %t218 = const 0 :: integer
243
+ %t219 = call core.gte(%t217, %t218) :: boolean
244
+ %t220 = call core.lt(%t217, %t215) :: boolean
245
+ %t221 = call core.and(%t219, %t220) :: boolean
246
+ %t222 = call core.and(%t209, %t221) :: boolean
247
+ %t223 = const 1 :: integer
248
+ %t224 = call core.sub(%t215, %t223) :: integer
249
+ %t225 = const 0 :: integer
250
+ %t226 = call core.clamp(%t217, %t225, %t224) :: integer
251
+ %t227 = Gather %t214, %t226 :: integer
252
+ %t228 = const 0 :: integer
253
+ %t229 = select %t222, %t227, %t228 :: integer
254
+ yield %t229
255
+ end_loop
256
+ end_loop
257
+ )
258
+ (Declaration neighbors
259
+ %t230 = load_input "rows" :: array
260
+ loop rows id=L19 in %t230 as el=%rows_el_231, idx=%rows_i_232
261
+ loop col id=L20 in %rows_el_231 as el=%col_el_233, idx=%col_i_234
262
+ %t294 = load_input "rows" :: array
263
+ %t295 = Length %t294 :: integer
264
+ %t296 = const -1 :: integer
265
+ %t297 = call core.sub(%rows_i_232, %t296) :: integer
266
+ %t298 = const 0 :: integer
267
+ %t299 = call core.gte(%t297, %t298) :: boolean
268
+ %t300 = call core.lt(%t297, %t295) :: boolean
269
+ %t301 = call core.and(%t299, %t300) :: boolean
270
+ %t302 = const 1 :: integer
271
+ %t303 = call core.sub(%t295, %t302) :: integer
272
+ %t304 = const 0 :: integer
273
+ %t305 = call core.clamp(%t297, %t304, %t303) :: integer
274
+ %t306 = Gather %t294, %t305 :: any
275
+ %t307 = Length %t306 :: integer
276
+ %t308 = call core.mod(%col_i_234, %t307) :: integer
277
+ %t309 = call core.add(%t308, %t307) :: integer
278
+ %t310 = call core.mod(%t309, %t307) :: integer
279
+ %t311 = Gather %t306, %t310 :: integer
280
+ %t312 = const 0 :: integer
281
+ %t313 = select %t301, %t311, %t312 :: integer
282
+ %t314 = load_input "rows" :: array
283
+ %t315 = Length %t314 :: integer
284
+ %t316 = const 1 :: integer
285
+ %t317 = call core.sub(%rows_i_232, %t316) :: integer
286
+ %t318 = const 0 :: integer
287
+ %t319 = call core.gte(%t317, %t318) :: boolean
288
+ %t320 = call core.lt(%t317, %t315) :: boolean
289
+ %t321 = call core.and(%t319, %t320) :: boolean
290
+ %t322 = const 1 :: integer
291
+ %t323 = call core.sub(%t315, %t322) :: integer
292
+ %t324 = const 0 :: integer
293
+ %t325 = call core.clamp(%t317, %t324, %t323) :: integer
294
+ %t326 = Gather %t314, %t325 :: any
295
+ %t327 = Length %t326 :: integer
296
+ %t328 = call core.mod(%col_i_234, %t327) :: integer
297
+ %t329 = call core.add(%t328, %t327) :: integer
298
+ %t330 = call core.mod(%t329, %t327) :: integer
299
+ %t331 = Gather %t326, %t330 :: integer
300
+ %t332 = const 0 :: integer
301
+ %t333 = select %t321, %t331, %t332 :: integer
302
+ %t334 = load_input "rows" :: array
303
+ %t335 = Length %t334 :: integer
304
+ %t336 = call core.mod(%rows_i_232, %t335) :: integer
305
+ %t337 = call core.add(%t336, %t335) :: integer
306
+ %t338 = call core.mod(%t337, %t335) :: integer
307
+ %t339 = Gather %t334, %t338 :: any
308
+ %t340 = Length %t339 :: integer
309
+ %t341 = const -1 :: integer
310
+ %t342 = call core.sub(%col_i_234, %t341) :: integer
311
+ %t343 = const 0 :: integer
312
+ %t344 = call core.gte(%t342, %t343) :: boolean
313
+ %t345 = call core.lt(%t342, %t340) :: boolean
314
+ %t346 = call core.and(%t344, %t345) :: boolean
315
+ %t347 = const 1 :: integer
316
+ %t348 = call core.sub(%t340, %t347) :: integer
317
+ %t349 = const 0 :: integer
318
+ %t350 = call core.clamp(%t342, %t349, %t348) :: integer
319
+ %t351 = Gather %t339, %t350 :: integer
320
+ %t352 = const 0 :: integer
321
+ %t353 = select %t346, %t351, %t352 :: integer
322
+ %t354 = load_input "rows" :: array
323
+ %t355 = Length %t354 :: integer
324
+ %t356 = call core.mod(%rows_i_232, %t355) :: integer
325
+ %t357 = call core.add(%t356, %t355) :: integer
326
+ %t358 = call core.mod(%t357, %t355) :: integer
327
+ %t359 = Gather %t354, %t358 :: any
328
+ %t360 = Length %t359 :: integer
329
+ %t361 = const 1 :: integer
330
+ %t362 = call core.sub(%col_i_234, %t361) :: integer
331
+ %t363 = const 0 :: integer
332
+ %t364 = call core.gte(%t362, %t363) :: boolean
333
+ %t365 = call core.lt(%t362, %t360) :: boolean
334
+ %t366 = call core.and(%t364, %t365) :: boolean
335
+ %t367 = const 1 :: integer
336
+ %t368 = call core.sub(%t360, %t367) :: integer
337
+ %t369 = const 0 :: integer
338
+ %t370 = call core.clamp(%t362, %t369, %t368) :: integer
339
+ %t371 = Gather %t359, %t370 :: integer
340
+ %t372 = const 0 :: integer
341
+ %t373 = select %t366, %t371, %t372 :: integer
342
+ %t374 = load_input "rows" :: array
343
+ %t375 = Length %t374 :: integer
344
+ %t376 = const -1 :: integer
345
+ %t377 = call core.sub(%rows_i_232, %t376) :: integer
346
+ %t378 = const 0 :: integer
347
+ %t379 = call core.gte(%t377, %t378) :: boolean
348
+ %t380 = call core.lt(%t377, %t375) :: boolean
349
+ %t381 = call core.and(%t379, %t380) :: boolean
350
+ %t382 = const 1 :: integer
351
+ %t383 = call core.sub(%t375, %t382) :: integer
352
+ %t384 = const 0 :: integer
353
+ %t385 = call core.clamp(%t377, %t384, %t383) :: integer
354
+ %t386 = Gather %t374, %t385 :: any
355
+ %t387 = Length %t386 :: integer
356
+ %t388 = const -1 :: integer
357
+ %t389 = call core.sub(%col_i_234, %t388) :: integer
358
+ %t390 = const 0 :: integer
359
+ %t391 = call core.gte(%t389, %t390) :: boolean
360
+ %t392 = call core.lt(%t389, %t387) :: boolean
361
+ %t393 = call core.and(%t391, %t392) :: boolean
362
+ %t394 = call core.and(%t381, %t393) :: boolean
363
+ %t395 = const 1 :: integer
364
+ %t396 = call core.sub(%t387, %t395) :: integer
365
+ %t397 = const 0 :: integer
366
+ %t398 = call core.clamp(%t389, %t397, %t396) :: integer
367
+ %t399 = Gather %t386, %t398 :: integer
368
+ %t400 = const 0 :: integer
369
+ %t401 = select %t394, %t399, %t400 :: integer
370
+ %t402 = load_input "rows" :: array
371
+ %t403 = Length %t402 :: integer
372
+ %t404 = const -1 :: integer
373
+ %t405 = call core.sub(%rows_i_232, %t404) :: integer
374
+ %t406 = const 0 :: integer
375
+ %t407 = call core.gte(%t405, %t406) :: boolean
376
+ %t408 = call core.lt(%t405, %t403) :: boolean
377
+ %t409 = call core.and(%t407, %t408) :: boolean
378
+ %t410 = const 1 :: integer
379
+ %t411 = call core.sub(%t403, %t410) :: integer
380
+ %t412 = const 0 :: integer
381
+ %t413 = call core.clamp(%t405, %t412, %t411) :: integer
382
+ %t414 = Gather %t402, %t413 :: any
383
+ %t415 = Length %t414 :: integer
384
+ %t416 = const 1 :: integer
385
+ %t417 = call core.sub(%col_i_234, %t416) :: integer
386
+ %t418 = const 0 :: integer
387
+ %t419 = call core.gte(%t417, %t418) :: boolean
388
+ %t420 = call core.lt(%t417, %t415) :: boolean
389
+ %t421 = call core.and(%t419, %t420) :: boolean
390
+ %t422 = call core.and(%t409, %t421) :: boolean
391
+ %t423 = const 1 :: integer
392
+ %t424 = call core.sub(%t415, %t423) :: integer
393
+ %t425 = const 0 :: integer
394
+ %t426 = call core.clamp(%t417, %t425, %t424) :: integer
395
+ %t427 = Gather %t414, %t426 :: integer
396
+ %t428 = const 0 :: integer
397
+ %t429 = select %t422, %t427, %t428 :: integer
398
+ %t430 = load_input "rows" :: array
399
+ %t431 = Length %t430 :: integer
400
+ %t432 = const 1 :: integer
401
+ %t433 = call core.sub(%rows_i_232, %t432) :: integer
402
+ %t434 = const 0 :: integer
403
+ %t435 = call core.gte(%t433, %t434) :: boolean
404
+ %t436 = call core.lt(%t433, %t431) :: boolean
405
+ %t437 = call core.and(%t435, %t436) :: boolean
406
+ %t438 = const 1 :: integer
407
+ %t439 = call core.sub(%t431, %t438) :: integer
408
+ %t440 = const 0 :: integer
409
+ %t441 = call core.clamp(%t433, %t440, %t439) :: integer
410
+ %t442 = Gather %t430, %t441 :: any
411
+ %t443 = Length %t442 :: integer
412
+ %t444 = const -1 :: integer
413
+ %t445 = call core.sub(%col_i_234, %t444) :: integer
414
+ %t446 = const 0 :: integer
415
+ %t447 = call core.gte(%t445, %t446) :: boolean
416
+ %t448 = call core.lt(%t445, %t443) :: boolean
417
+ %t449 = call core.and(%t447, %t448) :: boolean
418
+ %t450 = call core.and(%t437, %t449) :: boolean
419
+ %t451 = const 1 :: integer
420
+ %t452 = call core.sub(%t443, %t451) :: integer
421
+ %t453 = const 0 :: integer
422
+ %t454 = call core.clamp(%t445, %t453, %t452) :: integer
423
+ %t455 = Gather %t442, %t454 :: integer
424
+ %t456 = const 0 :: integer
425
+ %t457 = select %t450, %t455, %t456 :: integer
426
+ %t458 = load_input "rows" :: array
427
+ %t459 = Length %t458 :: integer
428
+ %t460 = const 1 :: integer
429
+ %t461 = call core.sub(%rows_i_232, %t460) :: integer
430
+ %t462 = const 0 :: integer
431
+ %t463 = call core.gte(%t461, %t462) :: boolean
432
+ %t464 = call core.lt(%t461, %t459) :: boolean
433
+ %t465 = call core.and(%t463, %t464) :: boolean
434
+ %t466 = const 1 :: integer
435
+ %t467 = call core.sub(%t459, %t466) :: integer
436
+ %t468 = const 0 :: integer
437
+ %t469 = call core.clamp(%t461, %t468, %t467) :: integer
438
+ %t470 = Gather %t458, %t469 :: any
439
+ %t471 = Length %t470 :: integer
440
+ %t472 = const 1 :: integer
441
+ %t473 = call core.sub(%col_i_234, %t472) :: integer
442
+ %t474 = const 0 :: integer
443
+ %t475 = call core.gte(%t473, %t474) :: boolean
444
+ %t476 = call core.lt(%t473, %t471) :: boolean
445
+ %t477 = call core.and(%t475, %t476) :: boolean
446
+ %t478 = call core.and(%t465, %t477) :: boolean
447
+ %t479 = const 1 :: integer
448
+ %t480 = call core.sub(%t471, %t479) :: integer
449
+ %t481 = const 0 :: integer
450
+ %t482 = call core.clamp(%t473, %t481, %t480) :: integer
451
+ %t483 = Gather %t470, %t482 :: integer
452
+ %t484 = const 0 :: integer
453
+ %t485 = select %t478, %t483, %t484 :: integer
454
+ %t243 = make_tuple(%t313, %t333, %t353, %t373, %t401, %t429, %t457, %t485) :: tuple<integer>
455
+ %t244 = Fold %t243 fn="agg.sum" ::
456
+ yield %t244
457
+ end_loop
458
+ end_loop
459
+ )
460
+ (Declaration alive
461
+ %t245 = load_input "rows" :: array
462
+ loop rows id=L21 in %t245 as el=%rows_el_246, idx=%rows_i_247
463
+ loop col id=L22 in %rows_el_246 as el=%col_el_248, idx=%col_i_249
464
+ %t486 = load_input "rows" :: array
465
+ %t251 = const 0 :: integer
466
+ %t252 = call core.gt(%col_el_248, %t251) :: boolean
467
+ yield %t252
468
+ end_loop
469
+ end_loop
470
+ )
471
+ (Declaration n3_alive
472
+ %t253 = load_input "rows" :: array
473
+ loop rows id=L23 in %t253 as el=%rows_el_254, idx=%rows_i_255
474
+ loop col id=L24 in %rows_el_254 as el=%col_el_256, idx=%col_i_257
475
+ %t487 = load_input "rows" :: array
476
+ %t529 = load_input "rows" :: array
477
+ %t530 = Length %t529 :: integer
478
+ %t531 = const -1 :: integer
479
+ %t532 = call core.sub(%rows_i_255, %t531) :: integer
480
+ %t533 = const 0 :: integer
481
+ %t534 = call core.gte(%t532, %t533) :: boolean
482
+ %t535 = call core.lt(%t532, %t530) :: boolean
483
+ %t536 = call core.and(%t534, %t535) :: boolean
484
+ %t537 = const 1 :: integer
485
+ %t538 = call core.sub(%t530, %t537) :: integer
486
+ %t539 = const 0 :: integer
487
+ %t540 = call core.clamp(%t532, %t539, %t538) :: integer
488
+ %t541 = Gather %t529, %t540 :: any
489
+ %t542 = Length %t541 :: integer
490
+ %t543 = call core.mod(%col_i_257, %t542) :: integer
491
+ %t544 = call core.add(%t543, %t542) :: integer
492
+ %t545 = call core.mod(%t544, %t542) :: integer
493
+ %t546 = Gather %t541, %t545 :: integer
494
+ %t547 = const 0 :: integer
495
+ %t548 = select %t536, %t546, %t547 :: integer
496
+ %t549 = load_input "rows" :: array
497
+ %t550 = Length %t549 :: integer
498
+ %t551 = const 1 :: integer
499
+ %t552 = call core.sub(%rows_i_255, %t551) :: integer
500
+ %t553 = const 0 :: integer
501
+ %t554 = call core.gte(%t552, %t553) :: boolean
502
+ %t555 = call core.lt(%t552, %t550) :: boolean
503
+ %t556 = call core.and(%t554, %t555) :: boolean
504
+ %t557 = const 1 :: integer
505
+ %t558 = call core.sub(%t550, %t557) :: integer
506
+ %t559 = const 0 :: integer
507
+ %t560 = call core.clamp(%t552, %t559, %t558) :: integer
508
+ %t561 = Gather %t549, %t560 :: any
509
+ %t562 = Length %t561 :: integer
510
+ %t563 = call core.mod(%col_i_257, %t562) :: integer
511
+ %t564 = call core.add(%t563, %t562) :: integer
512
+ %t565 = call core.mod(%t564, %t562) :: integer
513
+ %t566 = Gather %t561, %t565 :: integer
514
+ %t567 = const 0 :: integer
515
+ %t568 = select %t556, %t566, %t567 :: integer
516
+ %t569 = load_input "rows" :: array
517
+ %t570 = Length %t569 :: integer
518
+ %t571 = call core.mod(%rows_i_255, %t570) :: integer
519
+ %t572 = call core.add(%t571, %t570) :: integer
520
+ %t573 = call core.mod(%t572, %t570) :: integer
521
+ %t574 = Gather %t569, %t573 :: any
522
+ %t575 = Length %t574 :: integer
523
+ %t576 = const -1 :: integer
524
+ %t577 = call core.sub(%col_i_257, %t576) :: integer
525
+ %t578 = const 0 :: integer
526
+ %t579 = call core.gte(%t577, %t578) :: boolean
527
+ %t580 = call core.lt(%t577, %t575) :: boolean
528
+ %t581 = call core.and(%t579, %t580) :: boolean
529
+ %t582 = const 1 :: integer
530
+ %t583 = call core.sub(%t575, %t582) :: integer
531
+ %t584 = const 0 :: integer
532
+ %t585 = call core.clamp(%t577, %t584, %t583) :: integer
533
+ %t586 = Gather %t574, %t585 :: integer
534
+ %t587 = const 0 :: integer
535
+ %t588 = select %t581, %t586, %t587 :: integer
536
+ %t589 = load_input "rows" :: array
537
+ %t590 = Length %t589 :: integer
538
+ %t591 = call core.mod(%rows_i_255, %t590) :: integer
539
+ %t592 = call core.add(%t591, %t590) :: integer
540
+ %t593 = call core.mod(%t592, %t590) :: integer
541
+ %t594 = Gather %t589, %t593 :: any
542
+ %t595 = Length %t594 :: integer
543
+ %t596 = const 1 :: integer
544
+ %t597 = call core.sub(%col_i_257, %t596) :: integer
545
+ %t598 = const 0 :: integer
546
+ %t599 = call core.gte(%t597, %t598) :: boolean
547
+ %t600 = call core.lt(%t597, %t595) :: boolean
548
+ %t601 = call core.and(%t599, %t600) :: boolean
549
+ %t602 = const 1 :: integer
550
+ %t603 = call core.sub(%t595, %t602) :: integer
551
+ %t604 = const 0 :: integer
552
+ %t605 = call core.clamp(%t597, %t604, %t603) :: integer
553
+ %t606 = Gather %t594, %t605 :: integer
554
+ %t607 = const 0 :: integer
555
+ %t608 = select %t601, %t606, %t607 :: integer
556
+ %t609 = load_input "rows" :: array
557
+ %t610 = Length %t609 :: integer
558
+ %t611 = const -1 :: integer
559
+ %t612 = call core.sub(%rows_i_255, %t611) :: integer
560
+ %t613 = const 0 :: integer
561
+ %t614 = call core.gte(%t612, %t613) :: boolean
562
+ %t615 = call core.lt(%t612, %t610) :: boolean
563
+ %t616 = call core.and(%t614, %t615) :: boolean
564
+ %t617 = const 1 :: integer
565
+ %t618 = call core.sub(%t610, %t617) :: integer
566
+ %t619 = const 0 :: integer
567
+ %t620 = call core.clamp(%t612, %t619, %t618) :: integer
568
+ %t621 = Gather %t609, %t620 :: any
569
+ %t622 = Length %t621 :: integer
570
+ %t623 = const -1 :: integer
571
+ %t624 = call core.sub(%col_i_257, %t623) :: integer
572
+ %t625 = const 0 :: integer
573
+ %t626 = call core.gte(%t624, %t625) :: boolean
574
+ %t627 = call core.lt(%t624, %t622) :: boolean
575
+ %t628 = call core.and(%t626, %t627) :: boolean
576
+ %t629 = call core.and(%t616, %t628) :: boolean
577
+ %t630 = const 1 :: integer
578
+ %t631 = call core.sub(%t622, %t630) :: integer
579
+ %t632 = const 0 :: integer
580
+ %t633 = call core.clamp(%t624, %t632, %t631) :: integer
581
+ %t634 = Gather %t621, %t633 :: integer
582
+ %t635 = const 0 :: integer
583
+ %t636 = select %t629, %t634, %t635 :: integer
584
+ %t637 = load_input "rows" :: array
585
+ %t638 = Length %t637 :: integer
586
+ %t639 = const -1 :: integer
587
+ %t640 = call core.sub(%rows_i_255, %t639) :: integer
588
+ %t641 = const 0 :: integer
589
+ %t642 = call core.gte(%t640, %t641) :: boolean
590
+ %t643 = call core.lt(%t640, %t638) :: boolean
591
+ %t644 = call core.and(%t642, %t643) :: boolean
592
+ %t645 = const 1 :: integer
593
+ %t646 = call core.sub(%t638, %t645) :: integer
594
+ %t647 = const 0 :: integer
595
+ %t648 = call core.clamp(%t640, %t647, %t646) :: integer
596
+ %t649 = Gather %t637, %t648 :: any
597
+ %t650 = Length %t649 :: integer
598
+ %t651 = const 1 :: integer
599
+ %t652 = call core.sub(%col_i_257, %t651) :: integer
600
+ %t653 = const 0 :: integer
601
+ %t654 = call core.gte(%t652, %t653) :: boolean
602
+ %t655 = call core.lt(%t652, %t650) :: boolean
603
+ %t656 = call core.and(%t654, %t655) :: boolean
604
+ %t657 = call core.and(%t644, %t656) :: boolean
605
+ %t658 = const 1 :: integer
606
+ %t659 = call core.sub(%t650, %t658) :: integer
607
+ %t660 = const 0 :: integer
608
+ %t661 = call core.clamp(%t652, %t660, %t659) :: integer
609
+ %t662 = Gather %t649, %t661 :: integer
610
+ %t663 = const 0 :: integer
611
+ %t664 = select %t657, %t662, %t663 :: integer
612
+ %t665 = load_input "rows" :: array
613
+ %t666 = Length %t665 :: integer
614
+ %t667 = const 1 :: integer
615
+ %t668 = call core.sub(%rows_i_255, %t667) :: integer
616
+ %t669 = const 0 :: integer
617
+ %t670 = call core.gte(%t668, %t669) :: boolean
618
+ %t671 = call core.lt(%t668, %t666) :: boolean
619
+ %t672 = call core.and(%t670, %t671) :: boolean
620
+ %t673 = const 1 :: integer
621
+ %t674 = call core.sub(%t666, %t673) :: integer
622
+ %t675 = const 0 :: integer
623
+ %t676 = call core.clamp(%t668, %t675, %t674) :: integer
624
+ %t677 = Gather %t665, %t676 :: any
625
+ %t678 = Length %t677 :: integer
626
+ %t679 = const -1 :: integer
627
+ %t680 = call core.sub(%col_i_257, %t679) :: integer
628
+ %t681 = const 0 :: integer
629
+ %t682 = call core.gte(%t680, %t681) :: boolean
630
+ %t683 = call core.lt(%t680, %t678) :: boolean
631
+ %t684 = call core.and(%t682, %t683) :: boolean
632
+ %t685 = call core.and(%t672, %t684) :: boolean
633
+ %t686 = const 1 :: integer
634
+ %t687 = call core.sub(%t678, %t686) :: integer
635
+ %t688 = const 0 :: integer
636
+ %t689 = call core.clamp(%t680, %t688, %t687) :: integer
637
+ %t690 = Gather %t677, %t689 :: integer
638
+ %t691 = const 0 :: integer
639
+ %t692 = select %t685, %t690, %t691 :: integer
640
+ %t693 = load_input "rows" :: array
641
+ %t694 = Length %t693 :: integer
642
+ %t695 = const 1 :: integer
643
+ %t696 = call core.sub(%rows_i_255, %t695) :: integer
644
+ %t697 = const 0 :: integer
645
+ %t698 = call core.gte(%t696, %t697) :: boolean
646
+ %t699 = call core.lt(%t696, %t694) :: boolean
647
+ %t700 = call core.and(%t698, %t699) :: boolean
648
+ %t701 = const 1 :: integer
649
+ %t702 = call core.sub(%t694, %t701) :: integer
650
+ %t703 = const 0 :: integer
651
+ %t704 = call core.clamp(%t696, %t703, %t702) :: integer
652
+ %t705 = Gather %t693, %t704 :: any
653
+ %t706 = Length %t705 :: integer
654
+ %t707 = const 1 :: integer
655
+ %t708 = call core.sub(%col_i_257, %t707) :: integer
656
+ %t709 = const 0 :: integer
657
+ %t710 = call core.gte(%t708, %t709) :: boolean
658
+ %t711 = call core.lt(%t708, %t706) :: boolean
659
+ %t712 = call core.and(%t710, %t711) :: boolean
660
+ %t713 = call core.and(%t700, %t712) :: boolean
661
+ %t714 = const 1 :: integer
662
+ %t715 = call core.sub(%t706, %t714) :: integer
663
+ %t716 = const 0 :: integer
664
+ %t717 = call core.clamp(%t708, %t716, %t715) :: integer
665
+ %t718 = Gather %t705, %t717 :: integer
666
+ %t719 = const 0 :: integer
667
+ %t720 = select %t713, %t718, %t719 :: integer
668
+ %t496 = make_tuple(%t548, %t568, %t588, %t608, %t636, %t664, %t692, %t720) :: tuple<integer>
669
+ %t497 = Fold %t496 fn="agg.sum" ::
670
+ %t259 = const 3 :: integer
671
+ %t260 = call core.eq(%t497, %t259) :: boolean
672
+ yield %t260
673
+ end_loop
674
+ end_loop
675
+ )
676
+ (Declaration n2_alive
677
+ %t261 = load_input "rows" :: array
678
+ loop rows id=L25 in %t261 as el=%rows_el_262, idx=%rows_i_263
679
+ loop col id=L26 in %rows_el_262 as el=%col_el_264, idx=%col_i_265
680
+ %t498 = load_input "rows" :: array
681
+ %t721 = load_input "rows" :: array
682
+ %t722 = Length %t721 :: integer
683
+ %t723 = const -1 :: integer
684
+ %t724 = call core.sub(%rows_i_263, %t723) :: integer
685
+ %t725 = const 0 :: integer
686
+ %t726 = call core.gte(%t724, %t725) :: boolean
687
+ %t727 = call core.lt(%t724, %t722) :: boolean
688
+ %t728 = call core.and(%t726, %t727) :: boolean
689
+ %t729 = const 1 :: integer
690
+ %t730 = call core.sub(%t722, %t729) :: integer
691
+ %t731 = const 0 :: integer
692
+ %t732 = call core.clamp(%t724, %t731, %t730) :: integer
693
+ %t733 = Gather %t721, %t732 :: any
694
+ %t734 = Length %t733 :: integer
695
+ %t735 = call core.mod(%col_i_265, %t734) :: integer
696
+ %t736 = call core.add(%t735, %t734) :: integer
697
+ %t737 = call core.mod(%t736, %t734) :: integer
698
+ %t738 = Gather %t733, %t737 :: integer
699
+ %t739 = const 0 :: integer
700
+ %t740 = select %t728, %t738, %t739 :: integer
701
+ %t741 = load_input "rows" :: array
702
+ %t742 = Length %t741 :: integer
703
+ %t743 = const 1 :: integer
704
+ %t744 = call core.sub(%rows_i_263, %t743) :: integer
705
+ %t745 = const 0 :: integer
706
+ %t746 = call core.gte(%t744, %t745) :: boolean
707
+ %t747 = call core.lt(%t744, %t742) :: boolean
708
+ %t748 = call core.and(%t746, %t747) :: boolean
709
+ %t749 = const 1 :: integer
710
+ %t750 = call core.sub(%t742, %t749) :: integer
711
+ %t751 = const 0 :: integer
712
+ %t752 = call core.clamp(%t744, %t751, %t750) :: integer
713
+ %t753 = Gather %t741, %t752 :: any
714
+ %t754 = Length %t753 :: integer
715
+ %t755 = call core.mod(%col_i_265, %t754) :: integer
716
+ %t756 = call core.add(%t755, %t754) :: integer
717
+ %t757 = call core.mod(%t756, %t754) :: integer
718
+ %t758 = Gather %t753, %t757 :: integer
719
+ %t759 = const 0 :: integer
720
+ %t760 = select %t748, %t758, %t759 :: integer
721
+ %t761 = load_input "rows" :: array
722
+ %t762 = Length %t761 :: integer
723
+ %t763 = call core.mod(%rows_i_263, %t762) :: integer
724
+ %t764 = call core.add(%t763, %t762) :: integer
725
+ %t765 = call core.mod(%t764, %t762) :: integer
726
+ %t766 = Gather %t761, %t765 :: any
727
+ %t767 = Length %t766 :: integer
728
+ %t768 = const -1 :: integer
729
+ %t769 = call core.sub(%col_i_265, %t768) :: integer
730
+ %t770 = const 0 :: integer
731
+ %t771 = call core.gte(%t769, %t770) :: boolean
732
+ %t772 = call core.lt(%t769, %t767) :: boolean
733
+ %t773 = call core.and(%t771, %t772) :: boolean
734
+ %t774 = const 1 :: integer
735
+ %t775 = call core.sub(%t767, %t774) :: integer
736
+ %t776 = const 0 :: integer
737
+ %t777 = call core.clamp(%t769, %t776, %t775) :: integer
738
+ %t778 = Gather %t766, %t777 :: integer
739
+ %t779 = const 0 :: integer
740
+ %t780 = select %t773, %t778, %t779 :: integer
741
+ %t781 = load_input "rows" :: array
742
+ %t782 = Length %t781 :: integer
743
+ %t783 = call core.mod(%rows_i_263, %t782) :: integer
744
+ %t784 = call core.add(%t783, %t782) :: integer
745
+ %t785 = call core.mod(%t784, %t782) :: integer
746
+ %t786 = Gather %t781, %t785 :: any
747
+ %t787 = Length %t786 :: integer
748
+ %t788 = const 1 :: integer
749
+ %t789 = call core.sub(%col_i_265, %t788) :: integer
750
+ %t790 = const 0 :: integer
751
+ %t791 = call core.gte(%t789, %t790) :: boolean
752
+ %t792 = call core.lt(%t789, %t787) :: boolean
753
+ %t793 = call core.and(%t791, %t792) :: boolean
754
+ %t794 = const 1 :: integer
755
+ %t795 = call core.sub(%t787, %t794) :: integer
756
+ %t796 = const 0 :: integer
757
+ %t797 = call core.clamp(%t789, %t796, %t795) :: integer
758
+ %t798 = Gather %t786, %t797 :: integer
759
+ %t799 = const 0 :: integer
760
+ %t800 = select %t793, %t798, %t799 :: integer
761
+ %t801 = load_input "rows" :: array
762
+ %t802 = Length %t801 :: integer
763
+ %t803 = const -1 :: integer
764
+ %t804 = call core.sub(%rows_i_263, %t803) :: integer
765
+ %t805 = const 0 :: integer
766
+ %t806 = call core.gte(%t804, %t805) :: boolean
767
+ %t807 = call core.lt(%t804, %t802) :: boolean
768
+ %t808 = call core.and(%t806, %t807) :: boolean
769
+ %t809 = const 1 :: integer
770
+ %t810 = call core.sub(%t802, %t809) :: integer
771
+ %t811 = const 0 :: integer
772
+ %t812 = call core.clamp(%t804, %t811, %t810) :: integer
773
+ %t813 = Gather %t801, %t812 :: any
774
+ %t814 = Length %t813 :: integer
775
+ %t815 = const -1 :: integer
776
+ %t816 = call core.sub(%col_i_265, %t815) :: integer
777
+ %t817 = const 0 :: integer
778
+ %t818 = call core.gte(%t816, %t817) :: boolean
779
+ %t819 = call core.lt(%t816, %t814) :: boolean
780
+ %t820 = call core.and(%t818, %t819) :: boolean
781
+ %t821 = call core.and(%t808, %t820) :: boolean
782
+ %t822 = const 1 :: integer
783
+ %t823 = call core.sub(%t814, %t822) :: integer
784
+ %t824 = const 0 :: integer
785
+ %t825 = call core.clamp(%t816, %t824, %t823) :: integer
786
+ %t826 = Gather %t813, %t825 :: integer
787
+ %t827 = const 0 :: integer
788
+ %t828 = select %t821, %t826, %t827 :: integer
789
+ %t829 = load_input "rows" :: array
790
+ %t830 = Length %t829 :: integer
791
+ %t831 = const -1 :: integer
792
+ %t832 = call core.sub(%rows_i_263, %t831) :: integer
793
+ %t833 = const 0 :: integer
794
+ %t834 = call core.gte(%t832, %t833) :: boolean
795
+ %t835 = call core.lt(%t832, %t830) :: boolean
796
+ %t836 = call core.and(%t834, %t835) :: boolean
797
+ %t837 = const 1 :: integer
798
+ %t838 = call core.sub(%t830, %t837) :: integer
799
+ %t839 = const 0 :: integer
800
+ %t840 = call core.clamp(%t832, %t839, %t838) :: integer
801
+ %t841 = Gather %t829, %t840 :: any
802
+ %t842 = Length %t841 :: integer
803
+ %t843 = const 1 :: integer
804
+ %t844 = call core.sub(%col_i_265, %t843) :: integer
805
+ %t845 = const 0 :: integer
806
+ %t846 = call core.gte(%t844, %t845) :: boolean
807
+ %t847 = call core.lt(%t844, %t842) :: boolean
808
+ %t848 = call core.and(%t846, %t847) :: boolean
809
+ %t849 = call core.and(%t836, %t848) :: boolean
810
+ %t850 = const 1 :: integer
811
+ %t851 = call core.sub(%t842, %t850) :: integer
812
+ %t852 = const 0 :: integer
813
+ %t853 = call core.clamp(%t844, %t852, %t851) :: integer
814
+ %t854 = Gather %t841, %t853 :: integer
815
+ %t855 = const 0 :: integer
816
+ %t856 = select %t849, %t854, %t855 :: integer
817
+ %t857 = load_input "rows" :: array
818
+ %t858 = Length %t857 :: integer
819
+ %t859 = const 1 :: integer
820
+ %t860 = call core.sub(%rows_i_263, %t859) :: integer
821
+ %t861 = const 0 :: integer
822
+ %t862 = call core.gte(%t860, %t861) :: boolean
823
+ %t863 = call core.lt(%t860, %t858) :: boolean
824
+ %t864 = call core.and(%t862, %t863) :: boolean
825
+ %t865 = const 1 :: integer
826
+ %t866 = call core.sub(%t858, %t865) :: integer
827
+ %t867 = const 0 :: integer
828
+ %t868 = call core.clamp(%t860, %t867, %t866) :: integer
829
+ %t869 = Gather %t857, %t868 :: any
830
+ %t870 = Length %t869 :: integer
831
+ %t871 = const -1 :: integer
832
+ %t872 = call core.sub(%col_i_265, %t871) :: integer
833
+ %t873 = const 0 :: integer
834
+ %t874 = call core.gte(%t872, %t873) :: boolean
835
+ %t875 = call core.lt(%t872, %t870) :: boolean
836
+ %t876 = call core.and(%t874, %t875) :: boolean
837
+ %t877 = call core.and(%t864, %t876) :: boolean
838
+ %t878 = const 1 :: integer
839
+ %t879 = call core.sub(%t870, %t878) :: integer
840
+ %t880 = const 0 :: integer
841
+ %t881 = call core.clamp(%t872, %t880, %t879) :: integer
842
+ %t882 = Gather %t869, %t881 :: integer
843
+ %t883 = const 0 :: integer
844
+ %t884 = select %t877, %t882, %t883 :: integer
845
+ %t885 = load_input "rows" :: array
846
+ %t886 = Length %t885 :: integer
847
+ %t887 = const 1 :: integer
848
+ %t888 = call core.sub(%rows_i_263, %t887) :: integer
849
+ %t889 = const 0 :: integer
850
+ %t890 = call core.gte(%t888, %t889) :: boolean
851
+ %t891 = call core.lt(%t888, %t886) :: boolean
852
+ %t892 = call core.and(%t890, %t891) :: boolean
853
+ %t893 = const 1 :: integer
854
+ %t894 = call core.sub(%t886, %t893) :: integer
855
+ %t895 = const 0 :: integer
856
+ %t896 = call core.clamp(%t888, %t895, %t894) :: integer
857
+ %t897 = Gather %t885, %t896 :: any
858
+ %t898 = Length %t897 :: integer
859
+ %t899 = const 1 :: integer
860
+ %t900 = call core.sub(%col_i_265, %t899) :: integer
861
+ %t901 = const 0 :: integer
862
+ %t902 = call core.gte(%t900, %t901) :: boolean
863
+ %t903 = call core.lt(%t900, %t898) :: boolean
864
+ %t904 = call core.and(%t902, %t903) :: boolean
865
+ %t905 = call core.and(%t892, %t904) :: boolean
866
+ %t906 = const 1 :: integer
867
+ %t907 = call core.sub(%t898, %t906) :: integer
868
+ %t908 = const 0 :: integer
869
+ %t909 = call core.clamp(%t900, %t908, %t907) :: integer
870
+ %t910 = Gather %t897, %t909 :: integer
871
+ %t911 = const 0 :: integer
872
+ %t912 = select %t905, %t910, %t911 :: integer
873
+ %t507 = make_tuple(%t740, %t760, %t780, %t800, %t828, %t856, %t884, %t912) :: tuple<integer>
874
+ %t508 = Fold %t507 fn="agg.sum" ::
875
+ %t267 = const 2 :: integer
876
+ %t268 = call core.eq(%t508, %t267) :: boolean
877
+ yield %t268
878
+ end_loop
879
+ end_loop
880
+ )
881
+ (Declaration keep_alive
882
+ %t269 = load_input "rows" :: array
883
+ loop rows id=L27 in %t269 as el=%rows_el_270, idx=%rows_i_271
884
+ loop col id=L28 in %rows_el_270 as el=%col_el_272, idx=%col_i_273
885
+ %t509 = load_input "rows" :: array
886
+ %t913 = load_input "rows" :: array
887
+ %t914 = load_input "rows" :: array
888
+ %t915 = Length %t914 :: integer
889
+ %t916 = const -1 :: integer
890
+ %t917 = call core.sub(%rows_i_271, %t916) :: integer
891
+ %t918 = const 0 :: integer
892
+ %t919 = call core.gte(%t917, %t918) :: boolean
893
+ %t920 = call core.lt(%t917, %t915) :: boolean
894
+ %t921 = call core.and(%t919, %t920) :: boolean
895
+ %t922 = const 1 :: integer
896
+ %t923 = call core.sub(%t915, %t922) :: integer
897
+ %t924 = const 0 :: integer
898
+ %t925 = call core.clamp(%t917, %t924, %t923) :: integer
899
+ %t926 = Gather %t914, %t925 :: any
900
+ %t927 = Length %t926 :: integer
901
+ %t928 = call core.mod(%col_i_273, %t927) :: integer
902
+ %t929 = call core.add(%t928, %t927) :: integer
903
+ %t930 = call core.mod(%t929, %t927) :: integer
904
+ %t931 = Gather %t926, %t930 :: integer
905
+ %t932 = const 0 :: integer
906
+ %t933 = select %t921, %t931, %t932 :: integer
907
+ %t934 = load_input "rows" :: array
908
+ %t935 = Length %t934 :: integer
909
+ %t936 = const 1 :: integer
910
+ %t937 = call core.sub(%rows_i_271, %t936) :: integer
911
+ %t938 = const 0 :: integer
912
+ %t939 = call core.gte(%t937, %t938) :: boolean
913
+ %t940 = call core.lt(%t937, %t935) :: boolean
914
+ %t941 = call core.and(%t939, %t940) :: boolean
915
+ %t942 = const 1 :: integer
916
+ %t943 = call core.sub(%t935, %t942) :: integer
917
+ %t944 = const 0 :: integer
918
+ %t945 = call core.clamp(%t937, %t944, %t943) :: integer
919
+ %t946 = Gather %t934, %t945 :: any
920
+ %t947 = Length %t946 :: integer
921
+ %t948 = call core.mod(%col_i_273, %t947) :: integer
922
+ %t949 = call core.add(%t948, %t947) :: integer
923
+ %t950 = call core.mod(%t949, %t947) :: integer
924
+ %t951 = Gather %t946, %t950 :: integer
925
+ %t952 = const 0 :: integer
926
+ %t953 = select %t941, %t951, %t952 :: integer
927
+ %t954 = load_input "rows" :: array
928
+ %t955 = Length %t954 :: integer
929
+ %t956 = call core.mod(%rows_i_271, %t955) :: integer
930
+ %t957 = call core.add(%t956, %t955) :: integer
931
+ %t958 = call core.mod(%t957, %t955) :: integer
932
+ %t959 = Gather %t954, %t958 :: any
933
+ %t960 = Length %t959 :: integer
934
+ %t961 = const -1 :: integer
935
+ %t962 = call core.sub(%col_i_273, %t961) :: integer
936
+ %t963 = const 0 :: integer
937
+ %t964 = call core.gte(%t962, %t963) :: boolean
938
+ %t965 = call core.lt(%t962, %t960) :: boolean
939
+ %t966 = call core.and(%t964, %t965) :: boolean
940
+ %t967 = const 1 :: integer
941
+ %t968 = call core.sub(%t960, %t967) :: integer
942
+ %t969 = const 0 :: integer
943
+ %t970 = call core.clamp(%t962, %t969, %t968) :: integer
944
+ %t971 = Gather %t959, %t970 :: integer
945
+ %t972 = const 0 :: integer
946
+ %t973 = select %t966, %t971, %t972 :: integer
947
+ %t974 = load_input "rows" :: array
948
+ %t975 = Length %t974 :: integer
949
+ %t976 = call core.mod(%rows_i_271, %t975) :: integer
950
+ %t977 = call core.add(%t976, %t975) :: integer
951
+ %t978 = call core.mod(%t977, %t975) :: integer
952
+ %t979 = Gather %t974, %t978 :: any
953
+ %t980 = Length %t979 :: integer
954
+ %t981 = const 1 :: integer
955
+ %t982 = call core.sub(%col_i_273, %t981) :: integer
956
+ %t983 = const 0 :: integer
957
+ %t984 = call core.gte(%t982, %t983) :: boolean
958
+ %t985 = call core.lt(%t982, %t980) :: boolean
959
+ %t986 = call core.and(%t984, %t985) :: boolean
960
+ %t987 = const 1 :: integer
961
+ %t988 = call core.sub(%t980, %t987) :: integer
962
+ %t989 = const 0 :: integer
963
+ %t990 = call core.clamp(%t982, %t989, %t988) :: integer
964
+ %t991 = Gather %t979, %t990 :: integer
965
+ %t992 = const 0 :: integer
966
+ %t993 = select %t986, %t991, %t992 :: integer
967
+ %t994 = load_input "rows" :: array
968
+ %t995 = Length %t994 :: integer
969
+ %t996 = const -1 :: integer
970
+ %t997 = call core.sub(%rows_i_271, %t996) :: integer
971
+ %t998 = const 0 :: integer
972
+ %t999 = call core.gte(%t997, %t998) :: boolean
973
+ %t1000 = call core.lt(%t997, %t995) :: boolean
974
+ %t1001 = call core.and(%t999, %t1000) :: boolean
975
+ %t1002 = const 1 :: integer
976
+ %t1003 = call core.sub(%t995, %t1002) :: integer
977
+ %t1004 = const 0 :: integer
978
+ %t1005 = call core.clamp(%t997, %t1004, %t1003) :: integer
979
+ %t1006 = Gather %t994, %t1005 :: any
980
+ %t1007 = Length %t1006 :: integer
981
+ %t1008 = const -1 :: integer
982
+ %t1009 = call core.sub(%col_i_273, %t1008) :: integer
983
+ %t1010 = const 0 :: integer
984
+ %t1011 = call core.gte(%t1009, %t1010) :: boolean
985
+ %t1012 = call core.lt(%t1009, %t1007) :: boolean
986
+ %t1013 = call core.and(%t1011, %t1012) :: boolean
987
+ %t1014 = call core.and(%t1001, %t1013) :: boolean
988
+ %t1015 = const 1 :: integer
989
+ %t1016 = call core.sub(%t1007, %t1015) :: integer
990
+ %t1017 = const 0 :: integer
991
+ %t1018 = call core.clamp(%t1009, %t1017, %t1016) :: integer
992
+ %t1019 = Gather %t1006, %t1018 :: integer
993
+ %t1020 = const 0 :: integer
994
+ %t1021 = select %t1014, %t1019, %t1020 :: integer
995
+ %t1022 = load_input "rows" :: array
996
+ %t1023 = Length %t1022 :: integer
997
+ %t1024 = const -1 :: integer
998
+ %t1025 = call core.sub(%rows_i_271, %t1024) :: integer
999
+ %t1026 = const 0 :: integer
1000
+ %t1027 = call core.gte(%t1025, %t1026) :: boolean
1001
+ %t1028 = call core.lt(%t1025, %t1023) :: boolean
1002
+ %t1029 = call core.and(%t1027, %t1028) :: boolean
1003
+ %t1030 = const 1 :: integer
1004
+ %t1031 = call core.sub(%t1023, %t1030) :: integer
1005
+ %t1032 = const 0 :: integer
1006
+ %t1033 = call core.clamp(%t1025, %t1032, %t1031) :: integer
1007
+ %t1034 = Gather %t1022, %t1033 :: any
1008
+ %t1035 = Length %t1034 :: integer
1009
+ %t1036 = const 1 :: integer
1010
+ %t1037 = call core.sub(%col_i_273, %t1036) :: integer
1011
+ %t1038 = const 0 :: integer
1012
+ %t1039 = call core.gte(%t1037, %t1038) :: boolean
1013
+ %t1040 = call core.lt(%t1037, %t1035) :: boolean
1014
+ %t1041 = call core.and(%t1039, %t1040) :: boolean
1015
+ %t1042 = call core.and(%t1029, %t1041) :: boolean
1016
+ %t1043 = const 1 :: integer
1017
+ %t1044 = call core.sub(%t1035, %t1043) :: integer
1018
+ %t1045 = const 0 :: integer
1019
+ %t1046 = call core.clamp(%t1037, %t1045, %t1044) :: integer
1020
+ %t1047 = Gather %t1034, %t1046 :: integer
1021
+ %t1048 = const 0 :: integer
1022
+ %t1049 = select %t1042, %t1047, %t1048 :: integer
1023
+ %t1050 = load_input "rows" :: array
1024
+ %t1051 = Length %t1050 :: integer
1025
+ %t1052 = const 1 :: integer
1026
+ %t1053 = call core.sub(%rows_i_271, %t1052) :: integer
1027
+ %t1054 = const 0 :: integer
1028
+ %t1055 = call core.gte(%t1053, %t1054) :: boolean
1029
+ %t1056 = call core.lt(%t1053, %t1051) :: boolean
1030
+ %t1057 = call core.and(%t1055, %t1056) :: boolean
1031
+ %t1058 = const 1 :: integer
1032
+ %t1059 = call core.sub(%t1051, %t1058) :: integer
1033
+ %t1060 = const 0 :: integer
1034
+ %t1061 = call core.clamp(%t1053, %t1060, %t1059) :: integer
1035
+ %t1062 = Gather %t1050, %t1061 :: any
1036
+ %t1063 = Length %t1062 :: integer
1037
+ %t1064 = const -1 :: integer
1038
+ %t1065 = call core.sub(%col_i_273, %t1064) :: integer
1039
+ %t1066 = const 0 :: integer
1040
+ %t1067 = call core.gte(%t1065, %t1066) :: boolean
1041
+ %t1068 = call core.lt(%t1065, %t1063) :: boolean
1042
+ %t1069 = call core.and(%t1067, %t1068) :: boolean
1043
+ %t1070 = call core.and(%t1057, %t1069) :: boolean
1044
+ %t1071 = const 1 :: integer
1045
+ %t1072 = call core.sub(%t1063, %t1071) :: integer
1046
+ %t1073 = const 0 :: integer
1047
+ %t1074 = call core.clamp(%t1065, %t1073, %t1072) :: integer
1048
+ %t1075 = Gather %t1062, %t1074 :: integer
1049
+ %t1076 = const 0 :: integer
1050
+ %t1077 = select %t1070, %t1075, %t1076 :: integer
1051
+ %t1078 = load_input "rows" :: array
1052
+ %t1079 = Length %t1078 :: integer
1053
+ %t1080 = const 1 :: integer
1054
+ %t1081 = call core.sub(%rows_i_271, %t1080) :: integer
1055
+ %t1082 = const 0 :: integer
1056
+ %t1083 = call core.gte(%t1081, %t1082) :: boolean
1057
+ %t1084 = call core.lt(%t1081, %t1079) :: boolean
1058
+ %t1085 = call core.and(%t1083, %t1084) :: boolean
1059
+ %t1086 = const 1 :: integer
1060
+ %t1087 = call core.sub(%t1079, %t1086) :: integer
1061
+ %t1088 = const 0 :: integer
1062
+ %t1089 = call core.clamp(%t1081, %t1088, %t1087) :: integer
1063
+ %t1090 = Gather %t1078, %t1089 :: any
1064
+ %t1091 = Length %t1090 :: integer
1065
+ %t1092 = const 1 :: integer
1066
+ %t1093 = call core.sub(%col_i_273, %t1092) :: integer
1067
+ %t1094 = const 0 :: integer
1068
+ %t1095 = call core.gte(%t1093, %t1094) :: boolean
1069
+ %t1096 = call core.lt(%t1093, %t1091) :: boolean
1070
+ %t1097 = call core.and(%t1095, %t1096) :: boolean
1071
+ %t1098 = call core.and(%t1085, %t1097) :: boolean
1072
+ %t1099 = const 1 :: integer
1073
+ %t1100 = call core.sub(%t1091, %t1099) :: integer
1074
+ %t1101 = const 0 :: integer
1075
+ %t1102 = call core.clamp(%t1093, %t1101, %t1100) :: integer
1076
+ %t1103 = Gather %t1090, %t1102 :: integer
1077
+ %t1104 = const 0 :: integer
1078
+ %t1105 = select %t1098, %t1103, %t1104 :: integer
1079
+ %t1106 = make_tuple(%t933, %t953, %t973, %t993, %t1021, %t1049, %t1077, %t1105) :: tuple<integer>
1080
+ %t1107 = Fold %t1106 fn="agg.sum" ::
1081
+ %t511 = const 2 :: integer
1082
+ %t512 = call core.eq(%t1107, %t511) :: boolean
1083
+ %t513 = load_input "rows" :: array
1084
+ %t1108 = load_input "rows" :: array
1085
+ %t515 = const 0 :: integer
1086
+ %t516 = call core.gt(%col_el_272, %t515) :: boolean
1087
+ %t276 = call core.and(%t512, %t516) :: boolean
1088
+ yield %t276
1089
+ end_loop
1090
+ end_loop
1091
+ )
1092
+ (Declaration next_alive
1093
+ %t277 = load_input "rows" :: array
1094
+ loop rows id=L29 in %t277 as el=%rows_el_278, idx=%rows_i_279
1095
+ loop col id=L30 in %rows_el_278 as el=%col_el_280, idx=%col_i_281
1096
+ %t517 = load_input "rows" :: array
1097
+ %t1109 = load_input "rows" :: array
1098
+ %t1110 = load_input "rows" :: array
1099
+ %t1111 = Length %t1110 :: integer
1100
+ %t1112 = const -1 :: integer
1101
+ %t1113 = call core.sub(%rows_i_279, %t1112) :: integer
1102
+ %t1114 = const 0 :: integer
1103
+ %t1115 = call core.gte(%t1113, %t1114) :: boolean
1104
+ %t1116 = call core.lt(%t1113, %t1111) :: boolean
1105
+ %t1117 = call core.and(%t1115, %t1116) :: boolean
1106
+ %t1118 = const 1 :: integer
1107
+ %t1119 = call core.sub(%t1111, %t1118) :: integer
1108
+ %t1120 = const 0 :: integer
1109
+ %t1121 = call core.clamp(%t1113, %t1120, %t1119) :: integer
1110
+ %t1122 = Gather %t1110, %t1121 :: any
1111
+ %t1123 = Length %t1122 :: integer
1112
+ %t1124 = call core.mod(%col_i_281, %t1123) :: integer
1113
+ %t1125 = call core.add(%t1124, %t1123) :: integer
1114
+ %t1126 = call core.mod(%t1125, %t1123) :: integer
1115
+ %t1127 = Gather %t1122, %t1126 :: integer
1116
+ %t1128 = const 0 :: integer
1117
+ %t1129 = select %t1117, %t1127, %t1128 :: integer
1118
+ %t1130 = load_input "rows" :: array
1119
+ %t1131 = Length %t1130 :: integer
1120
+ %t1132 = const 1 :: integer
1121
+ %t1133 = call core.sub(%rows_i_279, %t1132) :: integer
1122
+ %t1134 = const 0 :: integer
1123
+ %t1135 = call core.gte(%t1133, %t1134) :: boolean
1124
+ %t1136 = call core.lt(%t1133, %t1131) :: boolean
1125
+ %t1137 = call core.and(%t1135, %t1136) :: boolean
1126
+ %t1138 = const 1 :: integer
1127
+ %t1139 = call core.sub(%t1131, %t1138) :: integer
1128
+ %t1140 = const 0 :: integer
1129
+ %t1141 = call core.clamp(%t1133, %t1140, %t1139) :: integer
1130
+ %t1142 = Gather %t1130, %t1141 :: any
1131
+ %t1143 = Length %t1142 :: integer
1132
+ %t1144 = call core.mod(%col_i_281, %t1143) :: integer
1133
+ %t1145 = call core.add(%t1144, %t1143) :: integer
1134
+ %t1146 = call core.mod(%t1145, %t1143) :: integer
1135
+ %t1147 = Gather %t1142, %t1146 :: integer
1136
+ %t1148 = const 0 :: integer
1137
+ %t1149 = select %t1137, %t1147, %t1148 :: integer
1138
+ %t1150 = load_input "rows" :: array
1139
+ %t1151 = Length %t1150 :: integer
1140
+ %t1152 = call core.mod(%rows_i_279, %t1151) :: integer
1141
+ %t1153 = call core.add(%t1152, %t1151) :: integer
1142
+ %t1154 = call core.mod(%t1153, %t1151) :: integer
1143
+ %t1155 = Gather %t1150, %t1154 :: any
1144
+ %t1156 = Length %t1155 :: integer
1145
+ %t1157 = const -1 :: integer
1146
+ %t1158 = call core.sub(%col_i_281, %t1157) :: integer
1147
+ %t1159 = const 0 :: integer
1148
+ %t1160 = call core.gte(%t1158, %t1159) :: boolean
1149
+ %t1161 = call core.lt(%t1158, %t1156) :: boolean
1150
+ %t1162 = call core.and(%t1160, %t1161) :: boolean
1151
+ %t1163 = const 1 :: integer
1152
+ %t1164 = call core.sub(%t1156, %t1163) :: integer
1153
+ %t1165 = const 0 :: integer
1154
+ %t1166 = call core.clamp(%t1158, %t1165, %t1164) :: integer
1155
+ %t1167 = Gather %t1155, %t1166 :: integer
1156
+ %t1168 = const 0 :: integer
1157
+ %t1169 = select %t1162, %t1167, %t1168 :: integer
1158
+ %t1170 = load_input "rows" :: array
1159
+ %t1171 = Length %t1170 :: integer
1160
+ %t1172 = call core.mod(%rows_i_279, %t1171) :: integer
1161
+ %t1173 = call core.add(%t1172, %t1171) :: integer
1162
+ %t1174 = call core.mod(%t1173, %t1171) :: integer
1163
+ %t1175 = Gather %t1170, %t1174 :: any
1164
+ %t1176 = Length %t1175 :: integer
1165
+ %t1177 = const 1 :: integer
1166
+ %t1178 = call core.sub(%col_i_281, %t1177) :: integer
1167
+ %t1179 = const 0 :: integer
1168
+ %t1180 = call core.gte(%t1178, %t1179) :: boolean
1169
+ %t1181 = call core.lt(%t1178, %t1176) :: boolean
1170
+ %t1182 = call core.and(%t1180, %t1181) :: boolean
1171
+ %t1183 = const 1 :: integer
1172
+ %t1184 = call core.sub(%t1176, %t1183) :: integer
1173
+ %t1185 = const 0 :: integer
1174
+ %t1186 = call core.clamp(%t1178, %t1185, %t1184) :: integer
1175
+ %t1187 = Gather %t1175, %t1186 :: integer
1176
+ %t1188 = const 0 :: integer
1177
+ %t1189 = select %t1182, %t1187, %t1188 :: integer
1178
+ %t1190 = load_input "rows" :: array
1179
+ %t1191 = Length %t1190 :: integer
1180
+ %t1192 = const -1 :: integer
1181
+ %t1193 = call core.sub(%rows_i_279, %t1192) :: integer
1182
+ %t1194 = const 0 :: integer
1183
+ %t1195 = call core.gte(%t1193, %t1194) :: boolean
1184
+ %t1196 = call core.lt(%t1193, %t1191) :: boolean
1185
+ %t1197 = call core.and(%t1195, %t1196) :: boolean
1186
+ %t1198 = const 1 :: integer
1187
+ %t1199 = call core.sub(%t1191, %t1198) :: integer
1188
+ %t1200 = const 0 :: integer
1189
+ %t1201 = call core.clamp(%t1193, %t1200, %t1199) :: integer
1190
+ %t1202 = Gather %t1190, %t1201 :: any
1191
+ %t1203 = Length %t1202 :: integer
1192
+ %t1204 = const -1 :: integer
1193
+ %t1205 = call core.sub(%col_i_281, %t1204) :: integer
1194
+ %t1206 = const 0 :: integer
1195
+ %t1207 = call core.gte(%t1205, %t1206) :: boolean
1196
+ %t1208 = call core.lt(%t1205, %t1203) :: boolean
1197
+ %t1209 = call core.and(%t1207, %t1208) :: boolean
1198
+ %t1210 = call core.and(%t1197, %t1209) :: boolean
1199
+ %t1211 = const 1 :: integer
1200
+ %t1212 = call core.sub(%t1203, %t1211) :: integer
1201
+ %t1213 = const 0 :: integer
1202
+ %t1214 = call core.clamp(%t1205, %t1213, %t1212) :: integer
1203
+ %t1215 = Gather %t1202, %t1214 :: integer
1204
+ %t1216 = const 0 :: integer
1205
+ %t1217 = select %t1210, %t1215, %t1216 :: integer
1206
+ %t1218 = load_input "rows" :: array
1207
+ %t1219 = Length %t1218 :: integer
1208
+ %t1220 = const -1 :: integer
1209
+ %t1221 = call core.sub(%rows_i_279, %t1220) :: integer
1210
+ %t1222 = const 0 :: integer
1211
+ %t1223 = call core.gte(%t1221, %t1222) :: boolean
1212
+ %t1224 = call core.lt(%t1221, %t1219) :: boolean
1213
+ %t1225 = call core.and(%t1223, %t1224) :: boolean
1214
+ %t1226 = const 1 :: integer
1215
+ %t1227 = call core.sub(%t1219, %t1226) :: integer
1216
+ %t1228 = const 0 :: integer
1217
+ %t1229 = call core.clamp(%t1221, %t1228, %t1227) :: integer
1218
+ %t1230 = Gather %t1218, %t1229 :: any
1219
+ %t1231 = Length %t1230 :: integer
1220
+ %t1232 = const 1 :: integer
1221
+ %t1233 = call core.sub(%col_i_281, %t1232) :: integer
1222
+ %t1234 = const 0 :: integer
1223
+ %t1235 = call core.gte(%t1233, %t1234) :: boolean
1224
+ %t1236 = call core.lt(%t1233, %t1231) :: boolean
1225
+ %t1237 = call core.and(%t1235, %t1236) :: boolean
1226
+ %t1238 = call core.and(%t1225, %t1237) :: boolean
1227
+ %t1239 = const 1 :: integer
1228
+ %t1240 = call core.sub(%t1231, %t1239) :: integer
1229
+ %t1241 = const 0 :: integer
1230
+ %t1242 = call core.clamp(%t1233, %t1241, %t1240) :: integer
1231
+ %t1243 = Gather %t1230, %t1242 :: integer
1232
+ %t1244 = const 0 :: integer
1233
+ %t1245 = select %t1238, %t1243, %t1244 :: integer
1234
+ %t1246 = load_input "rows" :: array
1235
+ %t1247 = Length %t1246 :: integer
1236
+ %t1248 = const 1 :: integer
1237
+ %t1249 = call core.sub(%rows_i_279, %t1248) :: integer
1238
+ %t1250 = const 0 :: integer
1239
+ %t1251 = call core.gte(%t1249, %t1250) :: boolean
1240
+ %t1252 = call core.lt(%t1249, %t1247) :: boolean
1241
+ %t1253 = call core.and(%t1251, %t1252) :: boolean
1242
+ %t1254 = const 1 :: integer
1243
+ %t1255 = call core.sub(%t1247, %t1254) :: integer
1244
+ %t1256 = const 0 :: integer
1245
+ %t1257 = call core.clamp(%t1249, %t1256, %t1255) :: integer
1246
+ %t1258 = Gather %t1246, %t1257 :: any
1247
+ %t1259 = Length %t1258 :: integer
1248
+ %t1260 = const -1 :: integer
1249
+ %t1261 = call core.sub(%col_i_281, %t1260) :: integer
1250
+ %t1262 = const 0 :: integer
1251
+ %t1263 = call core.gte(%t1261, %t1262) :: boolean
1252
+ %t1264 = call core.lt(%t1261, %t1259) :: boolean
1253
+ %t1265 = call core.and(%t1263, %t1264) :: boolean
1254
+ %t1266 = call core.and(%t1253, %t1265) :: boolean
1255
+ %t1267 = const 1 :: integer
1256
+ %t1268 = call core.sub(%t1259, %t1267) :: integer
1257
+ %t1269 = const 0 :: integer
1258
+ %t1270 = call core.clamp(%t1261, %t1269, %t1268) :: integer
1259
+ %t1271 = Gather %t1258, %t1270 :: integer
1260
+ %t1272 = const 0 :: integer
1261
+ %t1273 = select %t1266, %t1271, %t1272 :: integer
1262
+ %t1274 = load_input "rows" :: array
1263
+ %t1275 = Length %t1274 :: integer
1264
+ %t1276 = const 1 :: integer
1265
+ %t1277 = call core.sub(%rows_i_279, %t1276) :: integer
1266
+ %t1278 = const 0 :: integer
1267
+ %t1279 = call core.gte(%t1277, %t1278) :: boolean
1268
+ %t1280 = call core.lt(%t1277, %t1275) :: boolean
1269
+ %t1281 = call core.and(%t1279, %t1280) :: boolean
1270
+ %t1282 = const 1 :: integer
1271
+ %t1283 = call core.sub(%t1275, %t1282) :: integer
1272
+ %t1284 = const 0 :: integer
1273
+ %t1285 = call core.clamp(%t1277, %t1284, %t1283) :: integer
1274
+ %t1286 = Gather %t1274, %t1285 :: any
1275
+ %t1287 = Length %t1286 :: integer
1276
+ %t1288 = const 1 :: integer
1277
+ %t1289 = call core.sub(%col_i_281, %t1288) :: integer
1278
+ %t1290 = const 0 :: integer
1279
+ %t1291 = call core.gte(%t1289, %t1290) :: boolean
1280
+ %t1292 = call core.lt(%t1289, %t1287) :: boolean
1281
+ %t1293 = call core.and(%t1291, %t1292) :: boolean
1282
+ %t1294 = call core.and(%t1281, %t1293) :: boolean
1283
+ %t1295 = const 1 :: integer
1284
+ %t1296 = call core.sub(%t1287, %t1295) :: integer
1285
+ %t1297 = const 0 :: integer
1286
+ %t1298 = call core.clamp(%t1289, %t1297, %t1296) :: integer
1287
+ %t1299 = Gather %t1286, %t1298 :: integer
1288
+ %t1300 = const 0 :: integer
1289
+ %t1301 = select %t1294, %t1299, %t1300 :: integer
1290
+ %t1302 = make_tuple(%t1129, %t1149, %t1169, %t1189, %t1217, %t1245, %t1273, %t1301) :: tuple<integer>
1291
+ %t1303 = Fold %t1302 fn="agg.sum" ::
1292
+ %t519 = const 3 :: integer
1293
+ %t520 = call core.eq(%t1303, %t519) :: boolean
1294
+ %t521 = load_input "rows" :: array
1295
+ %t1304 = load_input "rows" :: array
1296
+ %t1305 = load_input "rows" :: array
1297
+ %t1346 = load_input "rows" :: array
1298
+ %t1347 = Length %t1346 :: integer
1299
+ %t1348 = const -1 :: integer
1300
+ %t1349 = call core.sub(%rows_i_279, %t1348) :: integer
1301
+ %t1350 = const 0 :: integer
1302
+ %t1351 = call core.gte(%t1349, %t1350) :: boolean
1303
+ %t1352 = call core.lt(%t1349, %t1347) :: boolean
1304
+ %t1353 = call core.and(%t1351, %t1352) :: boolean
1305
+ %t1354 = const 1 :: integer
1306
+ %t1355 = call core.sub(%t1347, %t1354) :: integer
1307
+ %t1356 = const 0 :: integer
1308
+ %t1357 = call core.clamp(%t1349, %t1356, %t1355) :: integer
1309
+ %t1358 = Gather %t1346, %t1357 :: any
1310
+ %t1359 = Length %t1358 :: integer
1311
+ %t1360 = call core.mod(%col_i_281, %t1359) :: integer
1312
+ %t1361 = call core.add(%t1360, %t1359) :: integer
1313
+ %t1362 = call core.mod(%t1361, %t1359) :: integer
1314
+ %t1363 = Gather %t1358, %t1362 :: integer
1315
+ %t1364 = const 0 :: integer
1316
+ %t1365 = select %t1353, %t1363, %t1364 :: integer
1317
+ %t1366 = load_input "rows" :: array
1318
+ %t1367 = Length %t1366 :: integer
1319
+ %t1368 = const 1 :: integer
1320
+ %t1369 = call core.sub(%rows_i_279, %t1368) :: integer
1321
+ %t1370 = const 0 :: integer
1322
+ %t1371 = call core.gte(%t1369, %t1370) :: boolean
1323
+ %t1372 = call core.lt(%t1369, %t1367) :: boolean
1324
+ %t1373 = call core.and(%t1371, %t1372) :: boolean
1325
+ %t1374 = const 1 :: integer
1326
+ %t1375 = call core.sub(%t1367, %t1374) :: integer
1327
+ %t1376 = const 0 :: integer
1328
+ %t1377 = call core.clamp(%t1369, %t1376, %t1375) :: integer
1329
+ %t1378 = Gather %t1366, %t1377 :: any
1330
+ %t1379 = Length %t1378 :: integer
1331
+ %t1380 = call core.mod(%col_i_281, %t1379) :: integer
1332
+ %t1381 = call core.add(%t1380, %t1379) :: integer
1333
+ %t1382 = call core.mod(%t1381, %t1379) :: integer
1334
+ %t1383 = Gather %t1378, %t1382 :: integer
1335
+ %t1384 = const 0 :: integer
1336
+ %t1385 = select %t1373, %t1383, %t1384 :: integer
1337
+ %t1386 = load_input "rows" :: array
1338
+ %t1387 = Length %t1386 :: integer
1339
+ %t1388 = call core.mod(%rows_i_279, %t1387) :: integer
1340
+ %t1389 = call core.add(%t1388, %t1387) :: integer
1341
+ %t1390 = call core.mod(%t1389, %t1387) :: integer
1342
+ %t1391 = Gather %t1386, %t1390 :: any
1343
+ %t1392 = Length %t1391 :: integer
1344
+ %t1393 = const -1 :: integer
1345
+ %t1394 = call core.sub(%col_i_281, %t1393) :: integer
1346
+ %t1395 = const 0 :: integer
1347
+ %t1396 = call core.gte(%t1394, %t1395) :: boolean
1348
+ %t1397 = call core.lt(%t1394, %t1392) :: boolean
1349
+ %t1398 = call core.and(%t1396, %t1397) :: boolean
1350
+ %t1399 = const 1 :: integer
1351
+ %t1400 = call core.sub(%t1392, %t1399) :: integer
1352
+ %t1401 = const 0 :: integer
1353
+ %t1402 = call core.clamp(%t1394, %t1401, %t1400) :: integer
1354
+ %t1403 = Gather %t1391, %t1402 :: integer
1355
+ %t1404 = const 0 :: integer
1356
+ %t1405 = select %t1398, %t1403, %t1404 :: integer
1357
+ %t1406 = load_input "rows" :: array
1358
+ %t1407 = Length %t1406 :: integer
1359
+ %t1408 = call core.mod(%rows_i_279, %t1407) :: integer
1360
+ %t1409 = call core.add(%t1408, %t1407) :: integer
1361
+ %t1410 = call core.mod(%t1409, %t1407) :: integer
1362
+ %t1411 = Gather %t1406, %t1410 :: any
1363
+ %t1412 = Length %t1411 :: integer
1364
+ %t1413 = const 1 :: integer
1365
+ %t1414 = call core.sub(%col_i_281, %t1413) :: integer
1366
+ %t1415 = const 0 :: integer
1367
+ %t1416 = call core.gte(%t1414, %t1415) :: boolean
1368
+ %t1417 = call core.lt(%t1414, %t1412) :: boolean
1369
+ %t1418 = call core.and(%t1416, %t1417) :: boolean
1370
+ %t1419 = const 1 :: integer
1371
+ %t1420 = call core.sub(%t1412, %t1419) :: integer
1372
+ %t1421 = const 0 :: integer
1373
+ %t1422 = call core.clamp(%t1414, %t1421, %t1420) :: integer
1374
+ %t1423 = Gather %t1411, %t1422 :: integer
1375
+ %t1424 = const 0 :: integer
1376
+ %t1425 = select %t1418, %t1423, %t1424 :: integer
1377
+ %t1426 = load_input "rows" :: array
1378
+ %t1427 = Length %t1426 :: integer
1379
+ %t1428 = const -1 :: integer
1380
+ %t1429 = call core.sub(%rows_i_279, %t1428) :: integer
1381
+ %t1430 = const 0 :: integer
1382
+ %t1431 = call core.gte(%t1429, %t1430) :: boolean
1383
+ %t1432 = call core.lt(%t1429, %t1427) :: boolean
1384
+ %t1433 = call core.and(%t1431, %t1432) :: boolean
1385
+ %t1434 = const 1 :: integer
1386
+ %t1435 = call core.sub(%t1427, %t1434) :: integer
1387
+ %t1436 = const 0 :: integer
1388
+ %t1437 = call core.clamp(%t1429, %t1436, %t1435) :: integer
1389
+ %t1438 = Gather %t1426, %t1437 :: any
1390
+ %t1439 = Length %t1438 :: integer
1391
+ %t1440 = const -1 :: integer
1392
+ %t1441 = call core.sub(%col_i_281, %t1440) :: integer
1393
+ %t1442 = const 0 :: integer
1394
+ %t1443 = call core.gte(%t1441, %t1442) :: boolean
1395
+ %t1444 = call core.lt(%t1441, %t1439) :: boolean
1396
+ %t1445 = call core.and(%t1443, %t1444) :: boolean
1397
+ %t1446 = call core.and(%t1433, %t1445) :: boolean
1398
+ %t1447 = const 1 :: integer
1399
+ %t1448 = call core.sub(%t1439, %t1447) :: integer
1400
+ %t1449 = const 0 :: integer
1401
+ %t1450 = call core.clamp(%t1441, %t1449, %t1448) :: integer
1402
+ %t1451 = Gather %t1438, %t1450 :: integer
1403
+ %t1452 = const 0 :: integer
1404
+ %t1453 = select %t1446, %t1451, %t1452 :: integer
1405
+ %t1454 = load_input "rows" :: array
1406
+ %t1455 = Length %t1454 :: integer
1407
+ %t1456 = const -1 :: integer
1408
+ %t1457 = call core.sub(%rows_i_279, %t1456) :: integer
1409
+ %t1458 = const 0 :: integer
1410
+ %t1459 = call core.gte(%t1457, %t1458) :: boolean
1411
+ %t1460 = call core.lt(%t1457, %t1455) :: boolean
1412
+ %t1461 = call core.and(%t1459, %t1460) :: boolean
1413
+ %t1462 = const 1 :: integer
1414
+ %t1463 = call core.sub(%t1455, %t1462) :: integer
1415
+ %t1464 = const 0 :: integer
1416
+ %t1465 = call core.clamp(%t1457, %t1464, %t1463) :: integer
1417
+ %t1466 = Gather %t1454, %t1465 :: any
1418
+ %t1467 = Length %t1466 :: integer
1419
+ %t1468 = const 1 :: integer
1420
+ %t1469 = call core.sub(%col_i_281, %t1468) :: integer
1421
+ %t1470 = const 0 :: integer
1422
+ %t1471 = call core.gte(%t1469, %t1470) :: boolean
1423
+ %t1472 = call core.lt(%t1469, %t1467) :: boolean
1424
+ %t1473 = call core.and(%t1471, %t1472) :: boolean
1425
+ %t1474 = call core.and(%t1461, %t1473) :: boolean
1426
+ %t1475 = const 1 :: integer
1427
+ %t1476 = call core.sub(%t1467, %t1475) :: integer
1428
+ %t1477 = const 0 :: integer
1429
+ %t1478 = call core.clamp(%t1469, %t1477, %t1476) :: integer
1430
+ %t1479 = Gather %t1466, %t1478 :: integer
1431
+ %t1480 = const 0 :: integer
1432
+ %t1481 = select %t1474, %t1479, %t1480 :: integer
1433
+ %t1482 = load_input "rows" :: array
1434
+ %t1483 = Length %t1482 :: integer
1435
+ %t1484 = const 1 :: integer
1436
+ %t1485 = call core.sub(%rows_i_279, %t1484) :: integer
1437
+ %t1486 = const 0 :: integer
1438
+ %t1487 = call core.gte(%t1485, %t1486) :: boolean
1439
+ %t1488 = call core.lt(%t1485, %t1483) :: boolean
1440
+ %t1489 = call core.and(%t1487, %t1488) :: boolean
1441
+ %t1490 = const 1 :: integer
1442
+ %t1491 = call core.sub(%t1483, %t1490) :: integer
1443
+ %t1492 = const 0 :: integer
1444
+ %t1493 = call core.clamp(%t1485, %t1492, %t1491) :: integer
1445
+ %t1494 = Gather %t1482, %t1493 :: any
1446
+ %t1495 = Length %t1494 :: integer
1447
+ %t1496 = const -1 :: integer
1448
+ %t1497 = call core.sub(%col_i_281, %t1496) :: integer
1449
+ %t1498 = const 0 :: integer
1450
+ %t1499 = call core.gte(%t1497, %t1498) :: boolean
1451
+ %t1500 = call core.lt(%t1497, %t1495) :: boolean
1452
+ %t1501 = call core.and(%t1499, %t1500) :: boolean
1453
+ %t1502 = call core.and(%t1489, %t1501) :: boolean
1454
+ %t1503 = const 1 :: integer
1455
+ %t1504 = call core.sub(%t1495, %t1503) :: integer
1456
+ %t1505 = const 0 :: integer
1457
+ %t1506 = call core.clamp(%t1497, %t1505, %t1504) :: integer
1458
+ %t1507 = Gather %t1494, %t1506 :: integer
1459
+ %t1508 = const 0 :: integer
1460
+ %t1509 = select %t1502, %t1507, %t1508 :: integer
1461
+ %t1510 = load_input "rows" :: array
1462
+ %t1511 = Length %t1510 :: integer
1463
+ %t1512 = const 1 :: integer
1464
+ %t1513 = call core.sub(%rows_i_279, %t1512) :: integer
1465
+ %t1514 = const 0 :: integer
1466
+ %t1515 = call core.gte(%t1513, %t1514) :: boolean
1467
+ %t1516 = call core.lt(%t1513, %t1511) :: boolean
1468
+ %t1517 = call core.and(%t1515, %t1516) :: boolean
1469
+ %t1518 = const 1 :: integer
1470
+ %t1519 = call core.sub(%t1511, %t1518) :: integer
1471
+ %t1520 = const 0 :: integer
1472
+ %t1521 = call core.clamp(%t1513, %t1520, %t1519) :: integer
1473
+ %t1522 = Gather %t1510, %t1521 :: any
1474
+ %t1523 = Length %t1522 :: integer
1475
+ %t1524 = const 1 :: integer
1476
+ %t1525 = call core.sub(%col_i_281, %t1524) :: integer
1477
+ %t1526 = const 0 :: integer
1478
+ %t1527 = call core.gte(%t1525, %t1526) :: boolean
1479
+ %t1528 = call core.lt(%t1525, %t1523) :: boolean
1480
+ %t1529 = call core.and(%t1527, %t1528) :: boolean
1481
+ %t1530 = call core.and(%t1517, %t1529) :: boolean
1482
+ %t1531 = const 1 :: integer
1483
+ %t1532 = call core.sub(%t1523, %t1531) :: integer
1484
+ %t1533 = const 0 :: integer
1485
+ %t1534 = call core.clamp(%t1525, %t1533, %t1532) :: integer
1486
+ %t1535 = Gather %t1522, %t1534 :: integer
1487
+ %t1536 = const 0 :: integer
1488
+ %t1537 = select %t1530, %t1535, %t1536 :: integer
1489
+ %t1314 = make_tuple(%t1365, %t1385, %t1405, %t1425, %t1453, %t1481, %t1509, %t1537) :: tuple<integer>
1490
+ %t1315 = Fold %t1314 fn="agg.sum" ::
1491
+ %t1316 = const 2 :: integer
1492
+ %t1317 = call core.eq(%t1315, %t1316) :: boolean
1493
+ %t1318 = load_input "rows" :: array
1494
+ %t1319 = load_input "rows" :: array
1495
+ %t1320 = const 0 :: integer
1496
+ %t1321 = call core.gt(%col_el_280, %t1320) :: boolean
1497
+ %t524 = call core.and(%t1317, %t1321) :: boolean
1498
+ %t284 = call core.or(%t520, %t524) :: boolean
1499
+ yield %t284
1500
+ end_loop
1501
+ end_loop
1502
+ )
1503
+ (Declaration next_state
1504
+ %t285 = load_input "rows" :: array
1505
+ loop rows id=L31 in %t285 as el=%rows_el_286, idx=%rows_i_287
1506
+ loop col id=L32 in %rows_el_286 as el=%col_el_288, idx=%col_i_289
1507
+ %t525 = load_input "rows" :: array
1508
+ %t1322 = load_input "rows" :: array
1509
+ %t1323 = load_input "rows" :: array
1510
+ %t1538 = load_input "rows" :: array
1511
+ %t1539 = Length %t1538 :: integer
1512
+ %t1540 = const -1 :: integer
1513
+ %t1541 = call core.sub(%rows_i_287, %t1540) :: integer
1514
+ %t1542 = const 0 :: integer
1515
+ %t1543 = call core.gte(%t1541, %t1542) :: boolean
1516
+ %t1544 = call core.lt(%t1541, %t1539) :: boolean
1517
+ %t1545 = call core.and(%t1543, %t1544) :: boolean
1518
+ %t1546 = const 1 :: integer
1519
+ %t1547 = call core.sub(%t1539, %t1546) :: integer
1520
+ %t1548 = const 0 :: integer
1521
+ %t1549 = call core.clamp(%t1541, %t1548, %t1547) :: integer
1522
+ %t1550 = Gather %t1538, %t1549 :: any
1523
+ %t1551 = Length %t1550 :: integer
1524
+ %t1552 = call core.mod(%col_i_289, %t1551) :: integer
1525
+ %t1553 = call core.add(%t1552, %t1551) :: integer
1526
+ %t1554 = call core.mod(%t1553, %t1551) :: integer
1527
+ %t1555 = Gather %t1550, %t1554 :: integer
1528
+ %t1556 = const 0 :: integer
1529
+ %t1557 = select %t1545, %t1555, %t1556 :: integer
1530
+ %t1558 = load_input "rows" :: array
1531
+ %t1559 = Length %t1558 :: integer
1532
+ %t1560 = const 1 :: integer
1533
+ %t1561 = call core.sub(%rows_i_287, %t1560) :: integer
1534
+ %t1562 = const 0 :: integer
1535
+ %t1563 = call core.gte(%t1561, %t1562) :: boolean
1536
+ %t1564 = call core.lt(%t1561, %t1559) :: boolean
1537
+ %t1565 = call core.and(%t1563, %t1564) :: boolean
1538
+ %t1566 = const 1 :: integer
1539
+ %t1567 = call core.sub(%t1559, %t1566) :: integer
1540
+ %t1568 = const 0 :: integer
1541
+ %t1569 = call core.clamp(%t1561, %t1568, %t1567) :: integer
1542
+ %t1570 = Gather %t1558, %t1569 :: any
1543
+ %t1571 = Length %t1570 :: integer
1544
+ %t1572 = call core.mod(%col_i_289, %t1571) :: integer
1545
+ %t1573 = call core.add(%t1572, %t1571) :: integer
1546
+ %t1574 = call core.mod(%t1573, %t1571) :: integer
1547
+ %t1575 = Gather %t1570, %t1574 :: integer
1548
+ %t1576 = const 0 :: integer
1549
+ %t1577 = select %t1565, %t1575, %t1576 :: integer
1550
+ %t1578 = load_input "rows" :: array
1551
+ %t1579 = Length %t1578 :: integer
1552
+ %t1580 = call core.mod(%rows_i_287, %t1579) :: integer
1553
+ %t1581 = call core.add(%t1580, %t1579) :: integer
1554
+ %t1582 = call core.mod(%t1581, %t1579) :: integer
1555
+ %t1583 = Gather %t1578, %t1582 :: any
1556
+ %t1584 = Length %t1583 :: integer
1557
+ %t1585 = const -1 :: integer
1558
+ %t1586 = call core.sub(%col_i_289, %t1585) :: integer
1559
+ %t1587 = const 0 :: integer
1560
+ %t1588 = call core.gte(%t1586, %t1587) :: boolean
1561
+ %t1589 = call core.lt(%t1586, %t1584) :: boolean
1562
+ %t1590 = call core.and(%t1588, %t1589) :: boolean
1563
+ %t1591 = const 1 :: integer
1564
+ %t1592 = call core.sub(%t1584, %t1591) :: integer
1565
+ %t1593 = const 0 :: integer
1566
+ %t1594 = call core.clamp(%t1586, %t1593, %t1592) :: integer
1567
+ %t1595 = Gather %t1583, %t1594 :: integer
1568
+ %t1596 = const 0 :: integer
1569
+ %t1597 = select %t1590, %t1595, %t1596 :: integer
1570
+ %t1598 = load_input "rows" :: array
1571
+ %t1599 = Length %t1598 :: integer
1572
+ %t1600 = call core.mod(%rows_i_287, %t1599) :: integer
1573
+ %t1601 = call core.add(%t1600, %t1599) :: integer
1574
+ %t1602 = call core.mod(%t1601, %t1599) :: integer
1575
+ %t1603 = Gather %t1598, %t1602 :: any
1576
+ %t1604 = Length %t1603 :: integer
1577
+ %t1605 = const 1 :: integer
1578
+ %t1606 = call core.sub(%col_i_289, %t1605) :: integer
1579
+ %t1607 = const 0 :: integer
1580
+ %t1608 = call core.gte(%t1606, %t1607) :: boolean
1581
+ %t1609 = call core.lt(%t1606, %t1604) :: boolean
1582
+ %t1610 = call core.and(%t1608, %t1609) :: boolean
1583
+ %t1611 = const 1 :: integer
1584
+ %t1612 = call core.sub(%t1604, %t1611) :: integer
1585
+ %t1613 = const 0 :: integer
1586
+ %t1614 = call core.clamp(%t1606, %t1613, %t1612) :: integer
1587
+ %t1615 = Gather %t1603, %t1614 :: integer
1588
+ %t1616 = const 0 :: integer
1589
+ %t1617 = select %t1610, %t1615, %t1616 :: integer
1590
+ %t1618 = load_input "rows" :: array
1591
+ %t1619 = Length %t1618 :: integer
1592
+ %t1620 = const -1 :: integer
1593
+ %t1621 = call core.sub(%rows_i_287, %t1620) :: integer
1594
+ %t1622 = const 0 :: integer
1595
+ %t1623 = call core.gte(%t1621, %t1622) :: boolean
1596
+ %t1624 = call core.lt(%t1621, %t1619) :: boolean
1597
+ %t1625 = call core.and(%t1623, %t1624) :: boolean
1598
+ %t1626 = const 1 :: integer
1599
+ %t1627 = call core.sub(%t1619, %t1626) :: integer
1600
+ %t1628 = const 0 :: integer
1601
+ %t1629 = call core.clamp(%t1621, %t1628, %t1627) :: integer
1602
+ %t1630 = Gather %t1618, %t1629 :: any
1603
+ %t1631 = Length %t1630 :: integer
1604
+ %t1632 = const -1 :: integer
1605
+ %t1633 = call core.sub(%col_i_289, %t1632) :: integer
1606
+ %t1634 = const 0 :: integer
1607
+ %t1635 = call core.gte(%t1633, %t1634) :: boolean
1608
+ %t1636 = call core.lt(%t1633, %t1631) :: boolean
1609
+ %t1637 = call core.and(%t1635, %t1636) :: boolean
1610
+ %t1638 = call core.and(%t1625, %t1637) :: boolean
1611
+ %t1639 = const 1 :: integer
1612
+ %t1640 = call core.sub(%t1631, %t1639) :: integer
1613
+ %t1641 = const 0 :: integer
1614
+ %t1642 = call core.clamp(%t1633, %t1641, %t1640) :: integer
1615
+ %t1643 = Gather %t1630, %t1642 :: integer
1616
+ %t1644 = const 0 :: integer
1617
+ %t1645 = select %t1638, %t1643, %t1644 :: integer
1618
+ %t1646 = load_input "rows" :: array
1619
+ %t1647 = Length %t1646 :: integer
1620
+ %t1648 = const -1 :: integer
1621
+ %t1649 = call core.sub(%rows_i_287, %t1648) :: integer
1622
+ %t1650 = const 0 :: integer
1623
+ %t1651 = call core.gte(%t1649, %t1650) :: boolean
1624
+ %t1652 = call core.lt(%t1649, %t1647) :: boolean
1625
+ %t1653 = call core.and(%t1651, %t1652) :: boolean
1626
+ %t1654 = const 1 :: integer
1627
+ %t1655 = call core.sub(%t1647, %t1654) :: integer
1628
+ %t1656 = const 0 :: integer
1629
+ %t1657 = call core.clamp(%t1649, %t1656, %t1655) :: integer
1630
+ %t1658 = Gather %t1646, %t1657 :: any
1631
+ %t1659 = Length %t1658 :: integer
1632
+ %t1660 = const 1 :: integer
1633
+ %t1661 = call core.sub(%col_i_289, %t1660) :: integer
1634
+ %t1662 = const 0 :: integer
1635
+ %t1663 = call core.gte(%t1661, %t1662) :: boolean
1636
+ %t1664 = call core.lt(%t1661, %t1659) :: boolean
1637
+ %t1665 = call core.and(%t1663, %t1664) :: boolean
1638
+ %t1666 = call core.and(%t1653, %t1665) :: boolean
1639
+ %t1667 = const 1 :: integer
1640
+ %t1668 = call core.sub(%t1659, %t1667) :: integer
1641
+ %t1669 = const 0 :: integer
1642
+ %t1670 = call core.clamp(%t1661, %t1669, %t1668) :: integer
1643
+ %t1671 = Gather %t1658, %t1670 :: integer
1644
+ %t1672 = const 0 :: integer
1645
+ %t1673 = select %t1666, %t1671, %t1672 :: integer
1646
+ %t1674 = load_input "rows" :: array
1647
+ %t1675 = Length %t1674 :: integer
1648
+ %t1676 = const 1 :: integer
1649
+ %t1677 = call core.sub(%rows_i_287, %t1676) :: integer
1650
+ %t1678 = const 0 :: integer
1651
+ %t1679 = call core.gte(%t1677, %t1678) :: boolean
1652
+ %t1680 = call core.lt(%t1677, %t1675) :: boolean
1653
+ %t1681 = call core.and(%t1679, %t1680) :: boolean
1654
+ %t1682 = const 1 :: integer
1655
+ %t1683 = call core.sub(%t1675, %t1682) :: integer
1656
+ %t1684 = const 0 :: integer
1657
+ %t1685 = call core.clamp(%t1677, %t1684, %t1683) :: integer
1658
+ %t1686 = Gather %t1674, %t1685 :: any
1659
+ %t1687 = Length %t1686 :: integer
1660
+ %t1688 = const -1 :: integer
1661
+ %t1689 = call core.sub(%col_i_289, %t1688) :: integer
1662
+ %t1690 = const 0 :: integer
1663
+ %t1691 = call core.gte(%t1689, %t1690) :: boolean
1664
+ %t1692 = call core.lt(%t1689, %t1687) :: boolean
1665
+ %t1693 = call core.and(%t1691, %t1692) :: boolean
1666
+ %t1694 = call core.and(%t1681, %t1693) :: boolean
1667
+ %t1695 = const 1 :: integer
1668
+ %t1696 = call core.sub(%t1687, %t1695) :: integer
1669
+ %t1697 = const 0 :: integer
1670
+ %t1698 = call core.clamp(%t1689, %t1697, %t1696) :: integer
1671
+ %t1699 = Gather %t1686, %t1698 :: integer
1672
+ %t1700 = const 0 :: integer
1673
+ %t1701 = select %t1694, %t1699, %t1700 :: integer
1674
+ %t1702 = load_input "rows" :: array
1675
+ %t1703 = Length %t1702 :: integer
1676
+ %t1704 = const 1 :: integer
1677
+ %t1705 = call core.sub(%rows_i_287, %t1704) :: integer
1678
+ %t1706 = const 0 :: integer
1679
+ %t1707 = call core.gte(%t1705, %t1706) :: boolean
1680
+ %t1708 = call core.lt(%t1705, %t1703) :: boolean
1681
+ %t1709 = call core.and(%t1707, %t1708) :: boolean
1682
+ %t1710 = const 1 :: integer
1683
+ %t1711 = call core.sub(%t1703, %t1710) :: integer
1684
+ %t1712 = const 0 :: integer
1685
+ %t1713 = call core.clamp(%t1705, %t1712, %t1711) :: integer
1686
+ %t1714 = Gather %t1702, %t1713 :: any
1687
+ %t1715 = Length %t1714 :: integer
1688
+ %t1716 = const 1 :: integer
1689
+ %t1717 = call core.sub(%col_i_289, %t1716) :: integer
1690
+ %t1718 = const 0 :: integer
1691
+ %t1719 = call core.gte(%t1717, %t1718) :: boolean
1692
+ %t1720 = call core.lt(%t1717, %t1715) :: boolean
1693
+ %t1721 = call core.and(%t1719, %t1720) :: boolean
1694
+ %t1722 = call core.and(%t1709, %t1721) :: boolean
1695
+ %t1723 = const 1 :: integer
1696
+ %t1724 = call core.sub(%t1715, %t1723) :: integer
1697
+ %t1725 = const 0 :: integer
1698
+ %t1726 = call core.clamp(%t1717, %t1725, %t1724) :: integer
1699
+ %t1727 = Gather %t1714, %t1726 :: integer
1700
+ %t1728 = const 0 :: integer
1701
+ %t1729 = select %t1722, %t1727, %t1728 :: integer
1702
+ %t1332 = make_tuple(%t1557, %t1577, %t1597, %t1617, %t1645, %t1673, %t1701, %t1729) :: tuple<integer>
1703
+ %t1333 = Fold %t1332 fn="agg.sum" ::
1704
+ %t1334 = const 3 :: integer
1705
+ %t1335 = call core.eq(%t1333, %t1334) :: boolean
1706
+ %t1336 = load_input "rows" :: array
1707
+ %t1337 = load_input "rows" :: array
1708
+ %t1730 = load_input "rows" :: array
1709
+ %t1731 = load_input "rows" :: array
1710
+ %t1732 = Length %t1731 :: integer
1711
+ %t1733 = const -1 :: integer
1712
+ %t1734 = call core.sub(%rows_i_287, %t1733) :: integer
1713
+ %t1735 = const 0 :: integer
1714
+ %t1736 = call core.gte(%t1734, %t1735) :: boolean
1715
+ %t1737 = call core.lt(%t1734, %t1732) :: boolean
1716
+ %t1738 = call core.and(%t1736, %t1737) :: boolean
1717
+ %t1739 = const 1 :: integer
1718
+ %t1740 = call core.sub(%t1732, %t1739) :: integer
1719
+ %t1741 = const 0 :: integer
1720
+ %t1742 = call core.clamp(%t1734, %t1741, %t1740) :: integer
1721
+ %t1743 = Gather %t1731, %t1742 :: any
1722
+ %t1744 = Length %t1743 :: integer
1723
+ %t1745 = call core.mod(%col_i_289, %t1744) :: integer
1724
+ %t1746 = call core.add(%t1745, %t1744) :: integer
1725
+ %t1747 = call core.mod(%t1746, %t1744) :: integer
1726
+ %t1748 = Gather %t1743, %t1747 :: integer
1727
+ %t1749 = const 0 :: integer
1728
+ %t1750 = select %t1738, %t1748, %t1749 :: integer
1729
+ %t1751 = load_input "rows" :: array
1730
+ %t1752 = Length %t1751 :: integer
1731
+ %t1753 = const 1 :: integer
1732
+ %t1754 = call core.sub(%rows_i_287, %t1753) :: integer
1733
+ %t1755 = const 0 :: integer
1734
+ %t1756 = call core.gte(%t1754, %t1755) :: boolean
1735
+ %t1757 = call core.lt(%t1754, %t1752) :: boolean
1736
+ %t1758 = call core.and(%t1756, %t1757) :: boolean
1737
+ %t1759 = const 1 :: integer
1738
+ %t1760 = call core.sub(%t1752, %t1759) :: integer
1739
+ %t1761 = const 0 :: integer
1740
+ %t1762 = call core.clamp(%t1754, %t1761, %t1760) :: integer
1741
+ %t1763 = Gather %t1751, %t1762 :: any
1742
+ %t1764 = Length %t1763 :: integer
1743
+ %t1765 = call core.mod(%col_i_289, %t1764) :: integer
1744
+ %t1766 = call core.add(%t1765, %t1764) :: integer
1745
+ %t1767 = call core.mod(%t1766, %t1764) :: integer
1746
+ %t1768 = Gather %t1763, %t1767 :: integer
1747
+ %t1769 = const 0 :: integer
1748
+ %t1770 = select %t1758, %t1768, %t1769 :: integer
1749
+ %t1771 = load_input "rows" :: array
1750
+ %t1772 = Length %t1771 :: integer
1751
+ %t1773 = call core.mod(%rows_i_287, %t1772) :: integer
1752
+ %t1774 = call core.add(%t1773, %t1772) :: integer
1753
+ %t1775 = call core.mod(%t1774, %t1772) :: integer
1754
+ %t1776 = Gather %t1771, %t1775 :: any
1755
+ %t1777 = Length %t1776 :: integer
1756
+ %t1778 = const -1 :: integer
1757
+ %t1779 = call core.sub(%col_i_289, %t1778) :: integer
1758
+ %t1780 = const 0 :: integer
1759
+ %t1781 = call core.gte(%t1779, %t1780) :: boolean
1760
+ %t1782 = call core.lt(%t1779, %t1777) :: boolean
1761
+ %t1783 = call core.and(%t1781, %t1782) :: boolean
1762
+ %t1784 = const 1 :: integer
1763
+ %t1785 = call core.sub(%t1777, %t1784) :: integer
1764
+ %t1786 = const 0 :: integer
1765
+ %t1787 = call core.clamp(%t1779, %t1786, %t1785) :: integer
1766
+ %t1788 = Gather %t1776, %t1787 :: integer
1767
+ %t1789 = const 0 :: integer
1768
+ %t1790 = select %t1783, %t1788, %t1789 :: integer
1769
+ %t1791 = load_input "rows" :: array
1770
+ %t1792 = Length %t1791 :: integer
1771
+ %t1793 = call core.mod(%rows_i_287, %t1792) :: integer
1772
+ %t1794 = call core.add(%t1793, %t1792) :: integer
1773
+ %t1795 = call core.mod(%t1794, %t1792) :: integer
1774
+ %t1796 = Gather %t1791, %t1795 :: any
1775
+ %t1797 = Length %t1796 :: integer
1776
+ %t1798 = const 1 :: integer
1777
+ %t1799 = call core.sub(%col_i_289, %t1798) :: integer
1778
+ %t1800 = const 0 :: integer
1779
+ %t1801 = call core.gte(%t1799, %t1800) :: boolean
1780
+ %t1802 = call core.lt(%t1799, %t1797) :: boolean
1781
+ %t1803 = call core.and(%t1801, %t1802) :: boolean
1782
+ %t1804 = const 1 :: integer
1783
+ %t1805 = call core.sub(%t1797, %t1804) :: integer
1784
+ %t1806 = const 0 :: integer
1785
+ %t1807 = call core.clamp(%t1799, %t1806, %t1805) :: integer
1786
+ %t1808 = Gather %t1796, %t1807 :: integer
1787
+ %t1809 = const 0 :: integer
1788
+ %t1810 = select %t1803, %t1808, %t1809 :: integer
1789
+ %t1811 = load_input "rows" :: array
1790
+ %t1812 = Length %t1811 :: integer
1791
+ %t1813 = const -1 :: integer
1792
+ %t1814 = call core.sub(%rows_i_287, %t1813) :: integer
1793
+ %t1815 = const 0 :: integer
1794
+ %t1816 = call core.gte(%t1814, %t1815) :: boolean
1795
+ %t1817 = call core.lt(%t1814, %t1812) :: boolean
1796
+ %t1818 = call core.and(%t1816, %t1817) :: boolean
1797
+ %t1819 = const 1 :: integer
1798
+ %t1820 = call core.sub(%t1812, %t1819) :: integer
1799
+ %t1821 = const 0 :: integer
1800
+ %t1822 = call core.clamp(%t1814, %t1821, %t1820) :: integer
1801
+ %t1823 = Gather %t1811, %t1822 :: any
1802
+ %t1824 = Length %t1823 :: integer
1803
+ %t1825 = const -1 :: integer
1804
+ %t1826 = call core.sub(%col_i_289, %t1825) :: integer
1805
+ %t1827 = const 0 :: integer
1806
+ %t1828 = call core.gte(%t1826, %t1827) :: boolean
1807
+ %t1829 = call core.lt(%t1826, %t1824) :: boolean
1808
+ %t1830 = call core.and(%t1828, %t1829) :: boolean
1809
+ %t1831 = call core.and(%t1818, %t1830) :: boolean
1810
+ %t1832 = const 1 :: integer
1811
+ %t1833 = call core.sub(%t1824, %t1832) :: integer
1812
+ %t1834 = const 0 :: integer
1813
+ %t1835 = call core.clamp(%t1826, %t1834, %t1833) :: integer
1814
+ %t1836 = Gather %t1823, %t1835 :: integer
1815
+ %t1837 = const 0 :: integer
1816
+ %t1838 = select %t1831, %t1836, %t1837 :: integer
1817
+ %t1839 = load_input "rows" :: array
1818
+ %t1840 = Length %t1839 :: integer
1819
+ %t1841 = const -1 :: integer
1820
+ %t1842 = call core.sub(%rows_i_287, %t1841) :: integer
1821
+ %t1843 = const 0 :: integer
1822
+ %t1844 = call core.gte(%t1842, %t1843) :: boolean
1823
+ %t1845 = call core.lt(%t1842, %t1840) :: boolean
1824
+ %t1846 = call core.and(%t1844, %t1845) :: boolean
1825
+ %t1847 = const 1 :: integer
1826
+ %t1848 = call core.sub(%t1840, %t1847) :: integer
1827
+ %t1849 = const 0 :: integer
1828
+ %t1850 = call core.clamp(%t1842, %t1849, %t1848) :: integer
1829
+ %t1851 = Gather %t1839, %t1850 :: any
1830
+ %t1852 = Length %t1851 :: integer
1831
+ %t1853 = const 1 :: integer
1832
+ %t1854 = call core.sub(%col_i_289, %t1853) :: integer
1833
+ %t1855 = const 0 :: integer
1834
+ %t1856 = call core.gte(%t1854, %t1855) :: boolean
1835
+ %t1857 = call core.lt(%t1854, %t1852) :: boolean
1836
+ %t1858 = call core.and(%t1856, %t1857) :: boolean
1837
+ %t1859 = call core.and(%t1846, %t1858) :: boolean
1838
+ %t1860 = const 1 :: integer
1839
+ %t1861 = call core.sub(%t1852, %t1860) :: integer
1840
+ %t1862 = const 0 :: integer
1841
+ %t1863 = call core.clamp(%t1854, %t1862, %t1861) :: integer
1842
+ %t1864 = Gather %t1851, %t1863 :: integer
1843
+ %t1865 = const 0 :: integer
1844
+ %t1866 = select %t1859, %t1864, %t1865 :: integer
1845
+ %t1867 = load_input "rows" :: array
1846
+ %t1868 = Length %t1867 :: integer
1847
+ %t1869 = const 1 :: integer
1848
+ %t1870 = call core.sub(%rows_i_287, %t1869) :: integer
1849
+ %t1871 = const 0 :: integer
1850
+ %t1872 = call core.gte(%t1870, %t1871) :: boolean
1851
+ %t1873 = call core.lt(%t1870, %t1868) :: boolean
1852
+ %t1874 = call core.and(%t1872, %t1873) :: boolean
1853
+ %t1875 = const 1 :: integer
1854
+ %t1876 = call core.sub(%t1868, %t1875) :: integer
1855
+ %t1877 = const 0 :: integer
1856
+ %t1878 = call core.clamp(%t1870, %t1877, %t1876) :: integer
1857
+ %t1879 = Gather %t1867, %t1878 :: any
1858
+ %t1880 = Length %t1879 :: integer
1859
+ %t1881 = const -1 :: integer
1860
+ %t1882 = call core.sub(%col_i_289, %t1881) :: integer
1861
+ %t1883 = const 0 :: integer
1862
+ %t1884 = call core.gte(%t1882, %t1883) :: boolean
1863
+ %t1885 = call core.lt(%t1882, %t1880) :: boolean
1864
+ %t1886 = call core.and(%t1884, %t1885) :: boolean
1865
+ %t1887 = call core.and(%t1874, %t1886) :: boolean
1866
+ %t1888 = const 1 :: integer
1867
+ %t1889 = call core.sub(%t1880, %t1888) :: integer
1868
+ %t1890 = const 0 :: integer
1869
+ %t1891 = call core.clamp(%t1882, %t1890, %t1889) :: integer
1870
+ %t1892 = Gather %t1879, %t1891 :: integer
1871
+ %t1893 = const 0 :: integer
1872
+ %t1894 = select %t1887, %t1892, %t1893 :: integer
1873
+ %t1895 = load_input "rows" :: array
1874
+ %t1896 = Length %t1895 :: integer
1875
+ %t1897 = const 1 :: integer
1876
+ %t1898 = call core.sub(%rows_i_287, %t1897) :: integer
1877
+ %t1899 = const 0 :: integer
1878
+ %t1900 = call core.gte(%t1898, %t1899) :: boolean
1879
+ %t1901 = call core.lt(%t1898, %t1896) :: boolean
1880
+ %t1902 = call core.and(%t1900, %t1901) :: boolean
1881
+ %t1903 = const 1 :: integer
1882
+ %t1904 = call core.sub(%t1896, %t1903) :: integer
1883
+ %t1905 = const 0 :: integer
1884
+ %t1906 = call core.clamp(%t1898, %t1905, %t1904) :: integer
1885
+ %t1907 = Gather %t1895, %t1906 :: any
1886
+ %t1908 = Length %t1907 :: integer
1887
+ %t1909 = const 1 :: integer
1888
+ %t1910 = call core.sub(%col_i_289, %t1909) :: integer
1889
+ %t1911 = const 0 :: integer
1890
+ %t1912 = call core.gte(%t1910, %t1911) :: boolean
1891
+ %t1913 = call core.lt(%t1910, %t1908) :: boolean
1892
+ %t1914 = call core.and(%t1912, %t1913) :: boolean
1893
+ %t1915 = call core.and(%t1902, %t1914) :: boolean
1894
+ %t1916 = const 1 :: integer
1895
+ %t1917 = call core.sub(%t1908, %t1916) :: integer
1896
+ %t1918 = const 0 :: integer
1897
+ %t1919 = call core.clamp(%t1910, %t1918, %t1917) :: integer
1898
+ %t1920 = Gather %t1907, %t1919 :: integer
1899
+ %t1921 = const 0 :: integer
1900
+ %t1922 = select %t1915, %t1920, %t1921 :: integer
1901
+ %t1923 = make_tuple(%t1750, %t1770, %t1790, %t1810, %t1838, %t1866, %t1894, %t1922) :: tuple<integer>
1902
+ %t1924 = Fold %t1923 fn="agg.sum" ::
1903
+ %t1339 = const 2 :: integer
1904
+ %t1340 = call core.eq(%t1924, %t1339) :: boolean
1905
+ %t1341 = load_input "rows" :: array
1906
+ %t1925 = load_input "rows" :: array
1907
+ %t1343 = const 0 :: integer
1908
+ %t1344 = call core.gt(%col_el_288, %t1343) :: boolean
1909
+ %t1345 = call core.and(%t1340, %t1344) :: boolean
1910
+ %t528 = call core.or(%t1335, %t1345) :: boolean
1911
+ %t291 = const 1 :: integer
1912
+ %t292 = const 0 :: integer
1913
+ %t293 = select %t528, %t291, %t292 :: integer
1914
+ yield %t293
1915
+ end_loop
1916
+ end_loop
1917
+ )
1918
+ )