kumi 0.0.23 → 0.0.25

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 (166) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +8 -0
  3. data/README.md +2 -2
  4. data/golden/array_element/expected/schema_ruby.rb +1 -1
  5. data/golden/array_index/expected/schema_ruby.rb +1 -1
  6. data/golden/array_operations/expected/schema_ruby.rb +1 -1
  7. data/golden/cascade_logic/expected/lir_02_inlined.txt +8 -8
  8. data/golden/cascade_logic/expected/schema_ruby.rb +1 -1
  9. data/golden/chained_fusion/expected/lir_02_inlined.txt +36 -36
  10. data/golden/chained_fusion/expected/lir_03_cse.txt +23 -23
  11. data/golden/chained_fusion/expected/lir_04_1_loop_fusion.txt +25 -25
  12. data/golden/chained_fusion/expected/lir_04_loop_invcm.txt +23 -23
  13. data/golden/chained_fusion/expected/lir_06_const_prop.txt +23 -23
  14. data/golden/chained_fusion/expected/schema_javascript.mjs +23 -23
  15. data/golden/chained_fusion/expected/schema_ruby.rb +28 -28
  16. data/golden/element_arrays/expected/schema_ruby.rb +1 -1
  17. data/golden/empty_and_null_inputs/expected/lir_02_inlined.txt +18 -18
  18. data/golden/empty_and_null_inputs/expected/lir_03_cse.txt +17 -17
  19. data/golden/empty_and_null_inputs/expected/lir_04_1_loop_fusion.txt +17 -17
  20. data/golden/empty_and_null_inputs/expected/lir_04_loop_invcm.txt +17 -17
  21. data/golden/empty_and_null_inputs/expected/lir_06_const_prop.txt +17 -17
  22. data/golden/empty_and_null_inputs/expected/schema_javascript.mjs +13 -13
  23. data/golden/empty_and_null_inputs/expected/schema_ruby.rb +18 -18
  24. data/golden/game_of_life/expected/lir_00_unoptimized.txt +33 -33
  25. data/golden/game_of_life/expected/lir_01_hoist_scalar_references.txt +33 -33
  26. data/golden/game_of_life/expected/lir_02_inlined.txt +1370 -1370
  27. data/golden/game_of_life/expected/lir_03_cse.txt +448 -448
  28. data/golden/game_of_life/expected/lir_04_1_loop_fusion.txt +448 -448
  29. data/golden/game_of_life/expected/lir_04_loop_invcm.txt +448 -448
  30. data/golden/game_of_life/expected/lir_06_const_prop.txt +448 -448
  31. data/golden/game_of_life/expected/schema_javascript.mjs +85 -85
  32. data/golden/game_of_life/expected/schema_ruby.rb +86 -86
  33. data/golden/hash_keys/expected/schema_ruby.rb +1 -1
  34. data/golden/hash_keys/schema.kumi +4 -5
  35. data/golden/hash_value/expected/schema_ruby.rb +1 -1
  36. data/golden/hierarchical_complex/expected/lir_02_inlined.txt +15 -15
  37. data/golden/hierarchical_complex/expected/lir_03_cse.txt +1 -1
  38. data/golden/hierarchical_complex/expected/lir_04_1_loop_fusion.txt +1 -1
  39. data/golden/hierarchical_complex/expected/lir_04_loop_invcm.txt +1 -1
  40. data/golden/hierarchical_complex/expected/lir_06_const_prop.txt +1 -1
  41. data/golden/hierarchical_complex/expected/schema_javascript.mjs +1 -1
  42. data/golden/hierarchical_complex/expected/schema_ruby.rb +2 -2
  43. data/golden/inline_rename_scope_leak/expected/ast.txt +48 -0
  44. data/golden/inline_rename_scope_leak/expected/input_plan.txt +10 -0
  45. data/golden/inline_rename_scope_leak/expected/lir_00_unoptimized.txt +35 -0
  46. data/golden/inline_rename_scope_leak/expected/lir_01_hoist_scalar_references.txt +35 -0
  47. data/golden/inline_rename_scope_leak/expected/lir_02_inlined.txt +49 -0
  48. data/golden/inline_rename_scope_leak/expected/lir_03_cse.txt +49 -0
  49. data/golden/inline_rename_scope_leak/expected/lir_04_1_loop_fusion.txt +49 -0
  50. data/golden/inline_rename_scope_leak/expected/lir_04_loop_invcm.txt +49 -0
  51. data/golden/inline_rename_scope_leak/expected/lir_06_const_prop.txt +49 -0
  52. data/golden/inline_rename_scope_leak/expected/nast.txt +31 -0
  53. data/golden/inline_rename_scope_leak/expected/schema_javascript.mjs +51 -0
  54. data/golden/inline_rename_scope_leak/expected/schema_ruby.rb +82 -0
  55. data/golden/inline_rename_scope_leak/expected/snast.txt +31 -0
  56. data/golden/inline_rename_scope_leak/expected.json +7 -0
  57. data/golden/inline_rename_scope_leak/input.json +4 -0
  58. data/golden/inline_rename_scope_leak/schema.kumi +24 -0
  59. data/golden/input_reference/expected/schema_ruby.rb +1 -1
  60. data/golden/interleaved_fusion/expected/lir_02_inlined.txt +35 -35
  61. data/golden/interleaved_fusion/expected/lir_03_cse.txt +26 -26
  62. data/golden/interleaved_fusion/expected/lir_04_1_loop_fusion.txt +27 -26
  63. data/golden/interleaved_fusion/expected/lir_04_loop_invcm.txt +26 -26
  64. data/golden/interleaved_fusion/expected/lir_06_const_prop.txt +26 -26
  65. data/golden/interleaved_fusion/expected/schema_javascript.mjs +23 -23
  66. data/golden/interleaved_fusion/expected/schema_ruby.rb +29 -29
  67. data/golden/let_inline/expected/schema_ruby.rb +1 -1
  68. data/golden/loop_fusion/expected/lir_02_inlined.txt +17 -17
  69. data/golden/loop_fusion/expected/lir_03_cse.txt +14 -14
  70. data/golden/loop_fusion/expected/lir_04_1_loop_fusion.txt +14 -14
  71. data/golden/loop_fusion/expected/lir_04_loop_invcm.txt +14 -14
  72. data/golden/loop_fusion/expected/lir_06_const_prop.txt +14 -14
  73. data/golden/loop_fusion/expected/schema_javascript.mjs +12 -12
  74. data/golden/loop_fusion/expected/schema_ruby.rb +16 -16
  75. data/golden/min_reduce_scope/expected/schema_ruby.rb +1 -1
  76. data/golden/mixed_dimensions/expected/lir_02_inlined.txt +5 -5
  77. data/golden/mixed_dimensions/expected/lir_03_cse.txt +5 -5
  78. data/golden/mixed_dimensions/expected/lir_04_1_loop_fusion.txt +5 -5
  79. data/golden/mixed_dimensions/expected/lir_04_loop_invcm.txt +5 -5
  80. data/golden/mixed_dimensions/expected/lir_06_const_prop.txt +5 -5
  81. data/golden/mixed_dimensions/expected/schema_javascript.mjs +3 -3
  82. data/golden/mixed_dimensions/expected/schema_ruby.rb +6 -6
  83. data/golden/multirank_hoisting/expected/lir_02_inlined.txt +48 -48
  84. data/golden/multirank_hoisting/expected/lir_03_cse.txt +35 -35
  85. data/golden/multirank_hoisting/expected/lir_04_1_loop_fusion.txt +35 -35
  86. data/golden/multirank_hoisting/expected/lir_04_loop_invcm.txt +35 -35
  87. data/golden/multirank_hoisting/expected/lir_06_const_prop.txt +35 -35
  88. data/golden/multirank_hoisting/expected/schema_javascript.mjs +34 -34
  89. data/golden/multirank_hoisting/expected/schema_ruby.rb +36 -36
  90. data/golden/nested_hash/expected/schema_ruby.rb +1 -1
  91. data/golden/reduction_broadcast/expected/lir_02_inlined.txt +30 -30
  92. data/golden/reduction_broadcast/expected/lir_03_cse.txt +22 -22
  93. data/golden/reduction_broadcast/expected/lir_04_1_loop_fusion.txt +22 -22
  94. data/golden/reduction_broadcast/expected/lir_04_loop_invcm.txt +22 -22
  95. data/golden/reduction_broadcast/expected/lir_06_const_prop.txt +22 -22
  96. data/golden/reduction_broadcast/expected/schema_javascript.mjs +18 -18
  97. data/golden/reduction_broadcast/expected/schema_ruby.rb +23 -23
  98. data/golden/roll/expected/lir_00_unoptimized.txt +8 -8
  99. data/golden/roll/expected/lir_01_hoist_scalar_references.txt +8 -8
  100. data/golden/roll/expected/lir_02_inlined.txt +8 -8
  101. data/golden/roll/expected/lir_03_cse.txt +8 -8
  102. data/golden/roll/expected/lir_04_1_loop_fusion.txt +8 -8
  103. data/golden/roll/expected/lir_04_loop_invcm.txt +8 -8
  104. data/golden/roll/expected/lir_06_const_prop.txt +8 -8
  105. data/golden/roll/expected/schema_ruby.rb +1 -1
  106. data/golden/shift/expected/lir_00_unoptimized.txt +12 -12
  107. data/golden/shift/expected/lir_01_hoist_scalar_references.txt +12 -12
  108. data/golden/shift/expected/lir_02_inlined.txt +12 -12
  109. data/golden/shift/expected/lir_03_cse.txt +12 -12
  110. data/golden/shift/expected/lir_04_1_loop_fusion.txt +12 -12
  111. data/golden/shift/expected/lir_04_loop_invcm.txt +12 -12
  112. data/golden/shift/expected/lir_06_const_prop.txt +12 -12
  113. data/golden/shift/expected/schema_ruby.rb +1 -1
  114. data/golden/shift_2d/expected/lir_00_unoptimized.txt +48 -48
  115. data/golden/shift_2d/expected/lir_01_hoist_scalar_references.txt +48 -48
  116. data/golden/shift_2d/expected/lir_02_inlined.txt +48 -48
  117. data/golden/shift_2d/expected/lir_03_cse.txt +48 -48
  118. data/golden/shift_2d/expected/lir_04_1_loop_fusion.txt +48 -48
  119. data/golden/shift_2d/expected/lir_04_loop_invcm.txt +48 -48
  120. data/golden/shift_2d/expected/lir_06_const_prop.txt +48 -48
  121. data/golden/shift_2d/expected/schema_ruby.rb +1 -1
  122. data/golden/simple_math/expected/schema_ruby.rb +1 -1
  123. data/golden/streaming_basics/expected/lir_02_inlined.txt +25 -25
  124. data/golden/streaming_basics/expected/lir_03_cse.txt +13 -13
  125. data/golden/streaming_basics/expected/lir_04_1_loop_fusion.txt +13 -13
  126. data/golden/streaming_basics/expected/lir_04_loop_invcm.txt +13 -13
  127. data/golden/streaming_basics/expected/lir_06_const_prop.txt +13 -13
  128. data/golden/streaming_basics/expected/schema_javascript.mjs +13 -13
  129. data/golden/streaming_basics/expected/schema_ruby.rb +14 -14
  130. data/golden/tuples/expected/lir_00_unoptimized.txt +4 -4
  131. data/golden/tuples/expected/lir_01_hoist_scalar_references.txt +4 -4
  132. data/golden/tuples/expected/lir_02_inlined.txt +4 -4
  133. data/golden/tuples/expected/lir_03_cse.txt +4 -4
  134. data/golden/tuples/expected/lir_04_1_loop_fusion.txt +4 -4
  135. data/golden/tuples/expected/lir_04_loop_invcm.txt +4 -4
  136. data/golden/tuples/expected/lir_06_const_prop.txt +4 -4
  137. data/golden/tuples/expected/schema_ruby.rb +1 -1
  138. data/golden/tuples_and_arrays/expected/lir_00_unoptimized.txt +1 -1
  139. data/golden/tuples_and_arrays/expected/lir_01_hoist_scalar_references.txt +1 -1
  140. data/golden/tuples_and_arrays/expected/lir_02_inlined.txt +17 -17
  141. data/golden/tuples_and_arrays/expected/lir_03_cse.txt +14 -14
  142. data/golden/tuples_and_arrays/expected/lir_04_1_loop_fusion.txt +14 -14
  143. data/golden/tuples_and_arrays/expected/lir_04_loop_invcm.txt +14 -14
  144. data/golden/tuples_and_arrays/expected/lir_06_const_prop.txt +14 -14
  145. data/golden/tuples_and_arrays/expected/schema_javascript.mjs +13 -13
  146. data/golden/tuples_and_arrays/expected/schema_ruby.rb +14 -14
  147. data/golden/us_tax_2024/expected/ast.txt +865 -0
  148. data/golden/us_tax_2024/expected/input_plan.txt +61 -0
  149. data/golden/us_tax_2024/expected/lir_00_unoptimized.txt +901 -0
  150. data/golden/us_tax_2024/expected/lir_01_hoist_scalar_references.txt +901 -0
  151. data/golden/us_tax_2024/expected/lir_02_inlined.txt +5178 -0
  152. data/golden/us_tax_2024/expected/lir_03_cse.txt +2499 -0
  153. data/golden/us_tax_2024/expected/lir_04_1_loop_fusion.txt +2519 -0
  154. data/golden/us_tax_2024/expected/lir_04_loop_invcm.txt +2499 -0
  155. data/golden/us_tax_2024/expected/lir_06_const_prop.txt +2499 -0
  156. data/golden/us_tax_2024/expected/nast.txt +976 -0
  157. data/golden/us_tax_2024/expected/schema_javascript.mjs +584 -0
  158. data/golden/us_tax_2024/expected/schema_ruby.rb +639 -0
  159. data/golden/us_tax_2024/expected/snast.txt +976 -0
  160. data/golden/us_tax_2024/expected.json +1 -0
  161. data/golden/us_tax_2024/input.json +168 -0
  162. data/golden/us_tax_2024/schema.kumi +203 -0
  163. data/golden/with_constants/expected/schema_ruby.rb +1 -1
  164. data/lib/kumi/core/analyzer/passes/lir/inline_declarations_pass.rb +227 -107
  165. data/lib/kumi/version.rb +1 -1
  166. metadata +33 -1
@@ -0,0 +1,35 @@
1
+ (LIR
2
+ (Declaration sum_x
3
+ %acc_1 = decl_acc :: float
4
+ %t2 = load_input "xs" :: array
5
+ loop xs id=L1 in %t2 as el=%xs_el_3, idx=%xs_i_4
6
+ %t5 = load_field xs_el_3["v"] :: float
7
+ %acc_1 = acc_add agg.sum(%acc_1, %t5) :: float
8
+ end_loop
9
+ %t6 = acc_load %acc_1 :: float
10
+ yield %t6
11
+ )
12
+ (Declaration sum_y
13
+ %acc_7 = decl_acc :: float
14
+ %t8 = load_input "ys" :: array
15
+ loop ys id=L2 in %t8 as el=%ys_el_9, idx=%ys_i_10
16
+ %t11 = load_field ys_el_9["v"] :: float
17
+ %acc_7 = acc_add agg.sum(%acc_7, %t11) :: float
18
+ end_loop
19
+ %t12 = acc_load %acc_7 :: float
20
+ yield %t12
21
+ )
22
+ (Declaration tail
23
+ %t13 = const 7.0 :: float
24
+ %t14 = const 5.0 :: float
25
+ %t15 = call core.add(%t13, %t14) :: float
26
+ yield %t15
27
+ )
28
+ (Declaration out
29
+ %t16 = load_decl sum_x :: float
30
+ %t17 = load_decl sum_y :: float
31
+ %t18 = load_decl tail :: float
32
+ %t19 = make_object{x: %t16, y: %t17, t: %t18} :: object
33
+ yield %t19
34
+ )
35
+ )
@@ -0,0 +1,49 @@
1
+ (LIR
2
+ (Declaration sum_x
3
+ %acc_1 = decl_acc :: float
4
+ %t2 = load_input "xs" :: array
5
+ loop xs id=L1 in %t2 as el=%xs_el_3, idx=%xs_i_4
6
+ %t5 = load_field xs_el_3["v"] :: float
7
+ %acc_1 = acc_add agg.sum(%acc_1, %t5) :: float
8
+ end_loop
9
+ %t6 = acc_load %acc_1 :: float
10
+ yield %t6
11
+ )
12
+ (Declaration sum_y
13
+ %acc_7 = decl_acc :: float
14
+ %t8 = load_input "ys" :: array
15
+ loop ys id=L2 in %t8 as el=%ys_el_9, idx=%ys_i_10
16
+ %t11 = load_field ys_el_9["v"] :: float
17
+ %acc_7 = acc_add agg.sum(%acc_7, %t11) :: float
18
+ end_loop
19
+ %t12 = acc_load %acc_7 :: float
20
+ yield %t12
21
+ )
22
+ (Declaration tail
23
+ %t13 = const 7.0 :: float
24
+ %t14 = const 5.0 :: float
25
+ %t15 = call core.add(%t13, %t14) :: float
26
+ yield %t15
27
+ )
28
+ (Declaration out
29
+ %acc21 = decl_acc :: float
30
+ %t22 = load_input "xs" :: array
31
+ loop xs id=L3 in %t22 as el=%t23, idx=%t24
32
+ %t25 = load_field t23["v"] :: float
33
+ %acc21 = acc_add agg.sum(%acc21, %t25) :: float
34
+ end_loop
35
+ %t26 = acc_load %acc21 :: float
36
+ %acc28 = decl_acc :: float
37
+ %t29 = load_input "ys" :: array
38
+ loop ys id=L4 in %t29 as el=%t30, idx=%t31
39
+ %t32 = load_field t30["v"] :: float
40
+ %acc28 = acc_add agg.sum(%acc28, %t32) :: float
41
+ end_loop
42
+ %t33 = acc_load %acc28 :: float
43
+ %t34 = const 7.0 :: float
44
+ %t35 = const 5.0 :: float
45
+ %t36 = call core.add(%t34, %t35) :: float
46
+ %t19 = make_object{x: %t26, y: %t33, t: %t36} :: object
47
+ yield %t19
48
+ )
49
+ )
@@ -0,0 +1,49 @@
1
+ (LIR
2
+ (Declaration sum_x
3
+ %acc_1 = decl_acc :: float
4
+ %t2 = load_input "xs" :: array
5
+ loop xs id=L1 in %t2 as el=%xs_el_3, idx=%xs_i_4
6
+ %t5 = load_field xs_el_3["v"] :: float
7
+ %acc_1 = acc_add agg.sum(%acc_1, %t5) :: float
8
+ end_loop
9
+ %t6 = acc_load %acc_1 :: float
10
+ yield %t6
11
+ )
12
+ (Declaration sum_y
13
+ %acc_7 = decl_acc :: float
14
+ %t8 = load_input "ys" :: array
15
+ loop ys id=L2 in %t8 as el=%ys_el_9, idx=%ys_i_10
16
+ %t11 = load_field ys_el_9["v"] :: float
17
+ %acc_7 = acc_add agg.sum(%acc_7, %t11) :: float
18
+ end_loop
19
+ %t12 = acc_load %acc_7 :: float
20
+ yield %t12
21
+ )
22
+ (Declaration tail
23
+ %t13 = const 7.0 :: float
24
+ %t14 = const 5.0 :: float
25
+ %t15 = call core.add(%t13, %t14) :: float
26
+ yield %t15
27
+ )
28
+ (Declaration out
29
+ %acc21 = decl_acc :: float
30
+ %t22 = load_input "xs" :: array
31
+ loop xs id=L3 in %t22 as el=%t23, idx=%t24
32
+ %t25 = load_field t23["v"] :: float
33
+ %acc21 = acc_add agg.sum(%acc21, %t25) :: float
34
+ end_loop
35
+ %t26 = acc_load %acc21 :: float
36
+ %acc28 = decl_acc :: float
37
+ %t29 = load_input "ys" :: array
38
+ loop ys id=L4 in %t29 as el=%t30, idx=%t31
39
+ %t32 = load_field t30["v"] :: float
40
+ %acc28 = acc_add agg.sum(%acc28, %t32) :: float
41
+ end_loop
42
+ %t33 = acc_load %acc28 :: float
43
+ %t34 = const 7.0 :: float
44
+ %t35 = const 5.0 :: float
45
+ %t36 = call core.add(%t34, %t35) :: float
46
+ %t19 = make_object{x: %t26, y: %t33, t: %t36} :: object
47
+ yield %t19
48
+ )
49
+ )
@@ -0,0 +1,49 @@
1
+ (LIR
2
+ (Declaration sum_x
3
+ %acc_1 = decl_acc :: float
4
+ %t2 = load_input "xs" :: array
5
+ loop xs id=L1 in %t2 as el=%xs_el_3, idx=%xs_i_4
6
+ %t5 = load_field xs_el_3["v"] :: float
7
+ %acc_1 = acc_add agg.sum(%acc_1, %t5) :: float
8
+ end_loop
9
+ %t6 = acc_load %acc_1 :: float
10
+ yield %t6
11
+ )
12
+ (Declaration sum_y
13
+ %acc_7 = decl_acc :: float
14
+ %t8 = load_input "ys" :: array
15
+ loop ys id=L2 in %t8 as el=%ys_el_9, idx=%ys_i_10
16
+ %t11 = load_field ys_el_9["v"] :: float
17
+ %acc_7 = acc_add agg.sum(%acc_7, %t11) :: float
18
+ end_loop
19
+ %t12 = acc_load %acc_7 :: float
20
+ yield %t12
21
+ )
22
+ (Declaration tail
23
+ %t13 = const 7.0 :: float
24
+ %t14 = const 5.0 :: float
25
+ %t15 = call core.add(%t13, %t14) :: float
26
+ yield %t15
27
+ )
28
+ (Declaration out
29
+ %acc21 = decl_acc :: float
30
+ %t22 = load_input "xs" :: array
31
+ loop xs id=L3 in %t22 as el=%t23, idx=%t24
32
+ %t25 = load_field t23["v"] :: float
33
+ %acc21 = acc_add agg.sum(%acc21, %t25) :: float
34
+ end_loop
35
+ %t26 = acc_load %acc21 :: float
36
+ %acc28 = decl_acc :: float
37
+ %t29 = load_input "ys" :: array
38
+ loop ys id=L4 in %t29 as el=%t30, idx=%t31
39
+ %t32 = load_field t30["v"] :: float
40
+ %acc28 = acc_add agg.sum(%acc28, %t32) :: float
41
+ end_loop
42
+ %t33 = acc_load %acc28 :: float
43
+ %t34 = const 7.0 :: float
44
+ %t35 = const 5.0 :: float
45
+ %t36 = call core.add(%t34, %t35) :: float
46
+ %t19 = make_object{x: %t26, y: %t33, t: %t36} :: object
47
+ yield %t19
48
+ )
49
+ )
@@ -0,0 +1,49 @@
1
+ (LIR
2
+ (Declaration sum_x
3
+ %acc_1 = decl_acc :: float
4
+ %t2 = load_input "xs" :: array
5
+ loop xs id=L1 in %t2 as el=%xs_el_3, idx=%xs_i_4
6
+ %t5 = load_field xs_el_3["v"] :: float
7
+ %acc_1 = acc_add agg.sum(%acc_1, %t5) :: float
8
+ end_loop
9
+ %t6 = acc_load %acc_1 :: float
10
+ yield %t6
11
+ )
12
+ (Declaration sum_y
13
+ %acc_7 = decl_acc :: float
14
+ %t8 = load_input "ys" :: array
15
+ loop ys id=L2 in %t8 as el=%ys_el_9, idx=%ys_i_10
16
+ %t11 = load_field ys_el_9["v"] :: float
17
+ %acc_7 = acc_add agg.sum(%acc_7, %t11) :: float
18
+ end_loop
19
+ %t12 = acc_load %acc_7 :: float
20
+ yield %t12
21
+ )
22
+ (Declaration tail
23
+ %t13 = const 7.0 :: float
24
+ %t14 = const 5.0 :: float
25
+ %t15 = call core.add(%t13, %t14) :: float
26
+ yield %t15
27
+ )
28
+ (Declaration out
29
+ %acc21 = decl_acc :: float
30
+ %t22 = load_input "xs" :: array
31
+ loop xs id=L3 in %t22 as el=%t23, idx=%t24
32
+ %t25 = load_field t23["v"] :: float
33
+ %acc21 = acc_add agg.sum(%acc21, %t25) :: float
34
+ end_loop
35
+ %t26 = acc_load %acc21 :: float
36
+ %acc28 = decl_acc :: float
37
+ %t29 = load_input "ys" :: array
38
+ loop ys id=L4 in %t29 as el=%t30, idx=%t31
39
+ %t32 = load_field t30["v"] :: float
40
+ %acc28 = acc_add agg.sum(%acc28, %t32) :: float
41
+ end_loop
42
+ %t33 = acc_load %acc28 :: float
43
+ %t34 = const 7.0 :: float
44
+ %t35 = const 5.0 :: float
45
+ %t36 = call core.add(%t34, %t35) :: float
46
+ %t19 = make_object{x: %t26, y: %t33, t: %t36} :: object
47
+ yield %t19
48
+ )
49
+ )
@@ -0,0 +1,49 @@
1
+ (LIR
2
+ (Declaration sum_x
3
+ %acc_1 = decl_acc :: float
4
+ %t2 = load_input "xs" :: array
5
+ loop xs id=L1 in %t2 as el=%xs_el_3, idx=%xs_i_4
6
+ %t5 = load_field xs_el_3["v"] :: float
7
+ %acc_1 = acc_add agg.sum(%acc_1, %t5) :: float
8
+ end_loop
9
+ %t6 = acc_load %acc_1 :: float
10
+ yield %t6
11
+ )
12
+ (Declaration sum_y
13
+ %acc_7 = decl_acc :: float
14
+ %t8 = load_input "ys" :: array
15
+ loop ys id=L2 in %t8 as el=%ys_el_9, idx=%ys_i_10
16
+ %t11 = load_field ys_el_9["v"] :: float
17
+ %acc_7 = acc_add agg.sum(%acc_7, %t11) :: float
18
+ end_loop
19
+ %t12 = acc_load %acc_7 :: float
20
+ yield %t12
21
+ )
22
+ (Declaration tail
23
+ %t13 = const 7.0 :: float
24
+ %t14 = const 5.0 :: float
25
+ %t15 = call core.add(%t13, %t14) :: float
26
+ yield %t15
27
+ )
28
+ (Declaration out
29
+ %acc21 = decl_acc :: float
30
+ %t22 = load_input "xs" :: array
31
+ loop xs id=L3 in %t22 as el=%t23, idx=%t24
32
+ %t25 = load_field t23["v"] :: float
33
+ %acc21 = acc_add agg.sum(%acc21, %t25) :: float
34
+ end_loop
35
+ %t26 = acc_load %acc21 :: float
36
+ %acc28 = decl_acc :: float
37
+ %t29 = load_input "ys" :: array
38
+ loop ys id=L4 in %t29 as el=%t30, idx=%t31
39
+ %t32 = load_field t30["v"] :: float
40
+ %acc28 = acc_add agg.sum(%acc28, %t32) :: float
41
+ end_loop
42
+ %t33 = acc_load %acc28 :: float
43
+ %t34 = const 7.0 :: float
44
+ %t35 = const 5.0 :: float
45
+ %t36 = call core.add(%t34, %t35) :: float
46
+ %t19 = make_object{x: %t26, y: %t33, t: %t36} :: object
47
+ yield %t19
48
+ )
49
+ )
@@ -0,0 +1,31 @@
1
+ (NAST
2
+ (VALUE sum_x
3
+ (Call :"agg.sum"
4
+ (InputRef [:xs, :el, :v])
5
+ )
6
+ )
7
+ (VALUE sum_y
8
+ (Call :"agg.sum"
9
+ (InputRef [:ys, :el, :v])
10
+ )
11
+ )
12
+ (VALUE tail
13
+ (Call :"core.add"
14
+ (Const 7.0)
15
+ (Const 5.0)
16
+ )
17
+ )
18
+ (VALUE out
19
+ (Hash
20
+ (Pair x
21
+ (Ref sum_x)
22
+ )
23
+ (Pair y
24
+ (Ref sum_y)
25
+ )
26
+ (Pair t
27
+ (Ref tail)
28
+ )
29
+ )
30
+ )
31
+ )
@@ -0,0 +1,51 @@
1
+ export function _sum_x(input) {
2
+ let acc_1 = 0.0;
3
+ let t2 = input["xs"];
4
+ t2.forEach((xs_el_3, xs_i_4) => {
5
+ let t5 = xs_el_3["v"];
6
+ acc_1 += t5;
7
+ });
8
+ return acc_1;
9
+ }
10
+
11
+ export function _sum_y(input) {
12
+ let acc_7 = 0.0;
13
+ let t8 = input["ys"];
14
+ t8.forEach((ys_el_9, ys_i_10) => {
15
+ let t11 = ys_el_9["v"];
16
+ acc_7 += t11;
17
+ });
18
+ return acc_7;
19
+ }
20
+
21
+ export function _tail(input) {
22
+ const t13 = 7.0;
23
+ const t14 = 5.0;
24
+ let t15 = t13 + t14;
25
+ return t15;
26
+ }
27
+
28
+ export function _out(input) {
29
+ let acc21 = 0.0;
30
+ let t22 = input["xs"];
31
+ t22.forEach((t23, t24) => {
32
+ let t25 = t23["v"];
33
+ acc21 += t25;
34
+ });
35
+ let acc28 = 0.0;
36
+ let t29 = input["ys"];
37
+ t29.forEach((t30, t31) => {
38
+ let t32 = t30["v"];
39
+ acc28 += t32;
40
+ });
41
+ const t34 = 7.0;
42
+ const t35 = 5.0;
43
+ let t36 = t34 + t35;
44
+ let t19 = {
45
+ "x": acc21,
46
+ "y": acc28,
47
+ "t": t36
48
+ };
49
+ return t19;
50
+ }
51
+
@@ -0,0 +1,82 @@
1
+ # Autogenerated by Kumi Codegen
2
+ module Kumi::Compiled::KUMI_db7971b324407d0f809565d983315fed4dc8a3f06f0530f13c577a5491ec479e
3
+ def self.from(input_data = nil)
4
+ instance = Object.new
5
+ instance.extend(self)
6
+ instance.instance_variable_set(:@input, input_data)
7
+ instance
8
+ end
9
+
10
+ def self.__kumi_executable__
11
+ instance = Object.new
12
+ instance.extend(self)
13
+ instance
14
+ end
15
+
16
+ def update(input_data)
17
+ @input = @input.merge(input_data)
18
+ self
19
+ end
20
+
21
+ def [](name)
22
+ case name
23
+ when :sum_x then _sum_x
24
+ when :sum_y then _sum_y
25
+ when :tail then _tail
26
+ when :out then _out
27
+ else raise KeyError, "Unknown declaration"
28
+ end
29
+ end
30
+
31
+ def _sum_x(input = @input)
32
+ acc_1 = 0.0
33
+ t2 = input["xs"] || input[:xs]
34
+ t2.each_with_index do |xs_el_3, xs_i_4|
35
+ t5 = xs_el_3["v"] || xs_el_3[:v]
36
+ acc_1 += t5
37
+ end
38
+ acc_1
39
+ end
40
+
41
+ def _sum_y(input = @input)
42
+ acc_7 = 0.0
43
+ t8 = input["ys"] || input[:ys]
44
+ t8.each_with_index do |ys_el_9, ys_i_10|
45
+ t11 = ys_el_9["v"] || ys_el_9[:v]
46
+ acc_7 += t11
47
+ end
48
+ acc_7
49
+ end
50
+
51
+ def _tail(input = @input)
52
+ t13 = 7.0
53
+ t14 = 5.0
54
+ t13 + t14
55
+ end
56
+
57
+ def _out(input = @input)
58
+ acc21 = 0.0
59
+ t22 = input["xs"] || input[:xs]
60
+ t22.each_with_index do |t23, t24|
61
+ t25 = t23["v"] || t23[:v]
62
+ acc21 += t25
63
+ end
64
+ t26 = acc21
65
+ acc28 = 0.0
66
+ t29 = input["ys"] || input[:ys]
67
+ t29.each_with_index do |t30, t31|
68
+ t32 = t30["v"] || t30[:v]
69
+ acc28 += t32
70
+ end
71
+ t33 = acc28
72
+ t34 = 7.0
73
+ t35 = 5.0
74
+ t36 = t34 + t35
75
+ t19 = {
76
+ "x" => t26,
77
+ "y" => t33,
78
+ "t" => t36
79
+ }
80
+ t19
81
+ end
82
+ end
@@ -0,0 +1,31 @@
1
+ (SNAST
2
+ (VALUE sum_x
3
+ (Reduce :agg.sum over [xs]
4
+ (InputRef xs.el.v key_chain=[]) :: [xs] -> float
5
+ ) :: [] -> float
6
+ ) :: [] -> float
7
+ (VALUE sum_y
8
+ (Reduce :agg.sum over [ys]
9
+ (InputRef ys.el.v key_chain=[]) :: [ys] -> float
10
+ ) :: [] -> float
11
+ ) :: [] -> float
12
+ (VALUE tail
13
+ (Call :core.add
14
+ (Const 7.0) :: [] -> float
15
+ (Const 5.0) :: [] -> float
16
+ ) :: [] -> float
17
+ ) :: [] -> float
18
+ (VALUE out
19
+ (Hash
20
+ (Pair x
21
+ (Ref sum_x) :: [] -> float
22
+ ) :: [] -> pair
23
+ (Pair y
24
+ (Ref sum_y) :: [] -> float
25
+ ) :: [] -> pair
26
+ (Pair t
27
+ (Ref tail) :: [] -> float
28
+ ) :: [] -> pair
29
+ ) :: [] -> hash
30
+ ) :: [] -> hash
31
+ )
@@ -0,0 +1,7 @@
1
+ {
2
+ "out": {
3
+ "x": 6.0,
4
+ "y": 30.0,
5
+ "t": 12.0
6
+ }
7
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "xs": [ { "v": 1.0 } , { "v": 2.0 } , { "v": 3.0 } ],
3
+ "ys": [ { "v": 10.0 }, { "v": 20.0 } ]
4
+ }
@@ -0,0 +1,24 @@
1
+ schema do
2
+ input do
3
+ array :xs do
4
+ hash :el do
5
+ float :v
6
+ end
7
+ end
8
+ array :ys do
9
+ hash :el do
10
+ float :v
11
+ end
12
+ end
13
+ end
14
+
15
+ # two separate decls that each compile to a gamma (sum over array)
16
+ value :sum_x, fn(:sum, input.xs.el.v)
17
+ value :sum_y, fn(:sum, input.ys.el.v)
18
+
19
+ # unrelated scalar decl
20
+ value :tail, 7.0 + 5.0
21
+
22
+ # caller that forces two LoadDeclaration inlines, then a scalar op
23
+ value :out, { x: sum_x, y: sum_y, t: tail }
24
+ end
@@ -1,5 +1,5 @@
1
1
  # Autogenerated by Kumi Codegen
2
- module Kumi::Compiled::KUMI_553e66837fe392a06e5de16b6bc32e442b3e71b92f205eae1451b78a49fbac83
2
+ module Kumi::Compiled::KUMI_bf8dc5780a3c569c78320ccfb3817762c3aca5afe7bdec14afc2720b6ca6940e
3
3
  def self.from(input_data = nil)
4
4
  instance = Object.new
5
5
  instance.extend(self)
@@ -18,13 +18,13 @@
18
18
  %t38 = load_input "departments" :: array
19
19
  %acc40 = decl_acc :: integer
20
20
  %t41 = load_field departments_el_11["employees"] :: any
21
- loop employees id=L7 in %t41 as el=%employees_el_6, idx=%employees_i_7
22
- %t42 = load_field employees_el_6["salary"] :: integer
23
- %acc40 = acc_add agg.sum(%acc40, %t42) :: integer
21
+ loop employees id=L7 in %t41 as el=%t42, idx=%t43
22
+ %t44 = load_field t42["salary"] :: integer
23
+ %acc40 = acc_add agg.sum(%acc40, %t44) :: integer
24
24
  end_loop
25
- %t43 = acc_load %acc40 :: integer
25
+ %t45 = acc_load %acc40 :: integer
26
26
  %t14 = const 0.15 :: float
27
- %t15 = call core.mul(%t43, %t14) :: float
27
+ %t15 = call core.mul(%t45, %t14) :: float
28
28
  yield %t15
29
29
  end_loop
30
30
  )
@@ -50,39 +50,39 @@
50
50
  %t30 = load_input "departments" :: array
51
51
  loop departments id=L6 in %t30 as el=%departments_el_31, idx=%departments_i_32
52
52
  %t33 = load_field departments_el_31["name"] :: string
53
- %t44 = load_input "departments" :: array
54
- %acc46 = decl_acc :: integer
55
- %t47 = load_field departments_el_31["employees"] :: any
56
- loop employees id=L8 in %t47 as el=%employees_el_6, idx=%employees_i_7
57
- %t48 = load_field employees_el_6["salary"] :: integer
58
- %acc46 = acc_add agg.sum(%acc46, %t48) :: integer
53
+ %t46 = load_input "departments" :: array
54
+ %acc48 = decl_acc :: integer
55
+ %t49 = load_field departments_el_31["employees"] :: any
56
+ loop employees id=L8 in %t49 as el=%t50, idx=%t51
57
+ %t52 = load_field t50["salary"] :: integer
58
+ %acc48 = acc_add agg.sum(%acc48, %t52) :: integer
59
59
  end_loop
60
- %t49 = acc_load %acc46 :: integer
61
- %t50 = load_input "departments" :: array
62
- %t65 = load_input "departments" :: array
63
- %acc67 = decl_acc :: integer
64
- %t68 = load_field departments_el_31["employees"] :: any
65
- loop employees id=L10 in %t68 as el=%employees_el_6, idx=%employees_i_7
66
- %t69 = load_field employees_el_6["salary"] :: integer
67
- %acc67 = acc_add agg.sum(%acc67, %t69) :: integer
68
- end_loop
69
- %t70 = acc_load %acc67 :: integer
70
- %t52 = const 0.15 :: float
71
- %t53 = call core.mul(%t70, %t52) :: float
60
+ %t53 = acc_load %acc48 :: integer
72
61
  %t54 = load_input "departments" :: array
73
- %acc56 = decl_acc :: integer
74
- %t57 = load_field departments_el_31["employees"] :: any
75
- loop employees id=L9 in %t57 as el=%employees_el_21, idx=%employees_i_22
76
- %t58 = load_field employees_el_21["role"] :: string
77
- %t59 = const "manager" :: string
78
- %t60 = call core.eq(%t58, %t59) :: boolean
79
- %t61 = const 1 :: integer
80
- %t62 = const 0 :: integer
81
- %t63 = select %t60, %t61, %t62 :: integer
82
- %acc56 = acc_add agg.sum(%acc56, %t63) :: integer
62
+ %t58 = load_input "departments" :: array
63
+ %acc60 = decl_acc :: integer
64
+ %t61 = load_field departments_el_31["employees"] :: any
65
+ loop employees id=L9 in %t61 as el=%t62, idx=%t63
66
+ %t64 = load_field t62["salary"] :: integer
67
+ %acc60 = acc_add agg.sum(%acc60, %t64) :: integer
68
+ end_loop
69
+ %t65 = acc_load %acc60 :: integer
70
+ %t56 = const 0.15 :: float
71
+ %t57 = call core.mul(%t65, %t56) :: float
72
+ %t66 = load_input "departments" :: array
73
+ %acc68 = decl_acc :: integer
74
+ %t69 = load_field departments_el_31["employees"] :: any
75
+ loop employees id=L10 in %t69 as el=%t70, idx=%t71
76
+ %t72 = load_field t70["role"] :: string
77
+ %t73 = const "manager" :: string
78
+ %t74 = call core.eq(%t72, %t73) :: boolean
79
+ %t75 = const 1 :: integer
80
+ %t76 = const 0 :: integer
81
+ %t77 = select %t74, %t75, %t76 :: integer
82
+ %acc68 = acc_add agg.sum(%acc68, %t77) :: integer
83
83
  end_loop
84
- %t64 = acc_load %acc56 :: integer
85
- %t37 = make_object{name: %t33, payroll: %t49, tax: %t53, managers: %t64} :: object
84
+ %t78 = acc_load %acc68 :: integer
85
+ %t37 = make_object{name: %t33, payroll: %t53, tax: %t57, managers: %t78} :: object
86
86
  yield %t37
87
87
  end_loop
88
88
  )