The following autogenerated tables contain a representative set of potential use cases for this package, along with measurements that summarize each case's performance, compilation, and memory usage:

  • run time (best of several trial measurements)
  • compilation time (as reported by the compiler)
  • overall level of optimization (type stability, constant propagation, etc.) and allocations during run time (as reported by the garbage collector)
  • total allocations during compilation and first run (as reported by the garbage collector and, when possible, the Julia process's resident set size estimator)

The rows of the tables are highlighted as follows:

  • light blue indicates better optimization and either an improvement or no change in run time, compilation time, and total allocations
  • dark blue indicates better optimization and either slower run time, slower compilation, or more total allocations
  • green indicates similar optimization, either faster run time or fewer allocations during run time, and either an improvement or no change in compilation time and total allocations
  • yellow indicates similar optimization, either faster run time or fewer allocations during run time, and either slower compilation or more total allocations
  • magenta indicates no change in performance and either an improvement or no change in compilation time and total allocations
  • light gray indicates no change in performance and either faster compilation with more total allocations or slower compilation with fewer total allocations
  • dark gray indicates no change in performance, compilation time, or total allocations
  • red indicates a deterioration in performance, or no change in performance and either slower compilation or more total allocations

Rows highlighted in gray present no clear advantage to loop unrolling, while those highlighted in red present a clear disadvantage. It is recommended that you only call unrolled functions when your use case is similar to a row in one of the remaining categories, each of which demonstrates some advantage to loop unrolling.

The tables are also printed out by this package's test suite, so they can be compared across different operating systems by consulting the CI pipeline.

Isolated Unrolled Functions

Unrolled Expression Reference Expression Itr Type Itr Length Itr Contents Optimization Run Time Compilation Time Total Allocations
unrolled_push(itr, itr[1]) (itr..., itr[1]) Tuple 1 empty singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (21 ms vs. 21 ms) Inf times more (61 kB vs. 0 B)
unrolled_push(itr, itr[1]) (itr..., itr[1]) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (21 ms vs. 21 ms) 705 times more (66 kB vs. 96 B)
unrolled_push(itr, itr[1]) (itr..., itr[1]) Tuple 1 nonempty non-singleton Tuple similar (10 LLVM lines) similar (40 ns vs. 50 ns) similar (24 ms vs. 21 ms) 1661 times more (156 kB vs. 96 B)
unrolled_push(itr, itr[1]) (itr..., itr[1]) Tuple 2 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (21 ms vs. 21 ms) 326 times more (66 kB vs. 208 B)
unrolled_push(itr, itr[1]) (itr..., itr[1]) Tuple 8 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (21 ms vs. 21 ms) 267 times more (67 kB vs. 256 B)
unrolled_push(itr, itr[1]) (itr..., itr[1]) Tuple 32 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (21 ms vs. 21 ms) 158 times more (69 kB vs. 448 B)
unrolled_push(itr, itr[1]) (itr..., itr[1]) Tuple 128 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (34 ms vs. 21 ms) 385 times more (470 kB vs. 1 kB)
unrolled_push(itr, itr[1]) (itr..., itr[1]) Tuple 2 identical nonempty non-singleton Tuples similar (11 LLVM lines) similar (40 ns vs. 50 ns) similar (24 ms vs. 21 ms) 722 times more (158 kB vs. 224 B)
unrolled_push(itr, itr[1]) (itr..., itr[1]) Tuple 8 identical nonempty non-singleton Tuples similar (11 LLVM lines) similar (50 ns vs. 50 ns) similar (24 ms vs. 21 ms) 435 times more (177 kB vs. 416 B)
unrolled_push(itr, itr[1]) (itr..., itr[1]) Tuple 32 identical nonempty non-singleton Tuples similar (23 LLVM lines) similar (50 ns vs. 50 ns) similar (25 ms vs. 21 ms) 205 times more (238 kB vs. 1 kB)
unrolled_push(itr, itr[1]) (itr..., itr[1]) Tuple 128 identical nonempty non-singleton Tuples similar (71 LLVM lines) 54 times less (70 ns vs. 4 μs) 2 times more (57 ms vs. 21 ms) 968 times more (4 MB vs. 4 kB)
unrolled_push(itr, itr[1]) (itr..., itr[1]) Tuple 2 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (21 ms vs. 21 ms) 605 times more (66 kB vs. 112 B)
unrolled_push(itr, itr[1]) (itr..., itr[1]) Tuple 8 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (21 ms vs. 21 ms) 427 times more (67 kB vs. 160 B)
unrolled_push(itr, itr[1]) (itr..., itr[1]) Tuple 32 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (21 ms vs. 21 ms) 201 times more (69 kB vs. 352 B)
unrolled_push(itr, itr[1]) (itr..., itr[1]) Tuple 128 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (35 ms vs. 21 ms) 416 times more (468 kB vs. 1 kB)
unrolled_push(itr, itr[1]) (itr..., itr[1]) Tuple 2 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (21 ms vs. 21 ms) 326 times more (66 kB vs. 208 B)
unrolled_push(itr, itr[1]) (itr..., itr[1]) Tuple 8 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (21 ms vs. 21 ms) 267 times more (67 kB vs. 256 B)
unrolled_push(itr, itr[1]) (itr..., itr[1]) Tuple 32 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (21 ms vs. 21 ms) 158 times more (69 kB vs. 448 B)
unrolled_push(itr, itr[1]) (itr..., itr[1]) Tuple 128 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (34 ms vs. 21 ms) 384 times more (468 kB vs. 1 kB)
unrolled_push(itr, itr[1]) (itr..., itr[1]) Tuple 2 nonempty non-singleton Tuples similar (13 LLVM lines) similar (50 ns vs. 50 ns) similar (24 ms vs. 21 ms) 632 times more (158 kB vs. 256 B)
unrolled_push(itr, itr[1]) (itr..., itr[1]) Tuple 8 nonempty non-singleton Tuples similar (31 LLVM lines) similar (50 ns vs. 50 ns) similar (25 ms vs. 21 ms) 269 times more (177 kB vs. 672 B)
unrolled_push(itr, itr[1]) (itr..., itr[1]) Tuple 32 nonempty non-singleton Tuples similar (95 LLVM lines) similar (70 ns vs. 80 ns) similar (31 ms vs. 21 ms) 79 times more (239 kB vs. 3 kB)
unrolled_push(itr, itr[1]) (itr..., itr[1]) Tuple 128 nonempty non-singleton Tuples similar (551 LLVM lines) 17 times less (261 ns vs. 5 μs) 6 times more (126 ms vs. 21 ms) 386 times more (4 MB vs. 11 kB)
unrolled_append(itr, Iterators.reverse(itr)) (itr..., Iterators.reverse(itr)...) Tuple 1 empty singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (50 ms vs. 27 ms) 28 times more (3 MB vs. 109 kB)
unrolled_append(itr, Iterators.reverse(itr)) (itr..., Iterators.reverse(itr)...) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (50 ms vs. 27 ms) 22 times more (3 MB vs. 139 kB)
unrolled_append(itr, Iterators.reverse(itr)) (itr..., Iterators.reverse(itr)...) Tuple 1 nonempty non-singleton Tuple similar (10 LLVM lines) similar (40 ns vs. 40 ns) similar (50 ms vs. 31 ms) 16 times more (3 MB vs. 210 kB)
unrolled_append(itr, Iterators.reverse(itr)) (itr..., Iterators.reverse(itr)...) Tuple 2 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (50 ms vs. 27 ms) 22 times more (3 MB vs. 139 kB)
unrolled_append(itr, Iterators.reverse(itr)) (itr..., Iterators.reverse(itr)...) Tuple 8 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (50 ms vs. 27 ms) 23 times more (3 MB vs. 139 kB)
unrolled_append(itr, Iterators.reverse(itr)) (itr..., Iterators.reverse(itr)...) Tuple 32 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (51 ms vs. 27 ms) 23 times more (3 MB vs. 141 kB)
unrolled_append(itr, Iterators.reverse(itr)) (itr..., Iterators.reverse(itr)...) Tuple 128 identical nonempty singleton Tuples better (optimized out vs. 7 kB allocs) 246 times less (30 ns vs. 7 μs) similar (54 ms vs. 27 ms) 24 times more (4 MB vs. 148 kB)
unrolled_append(itr, Iterators.reverse(itr)) (itr..., Iterators.reverse(itr)...) Tuple 2 identical nonempty non-singleton Tuples similar (9 LLVM lines) similar (40 ns vs. 50 ns) similar (51 ms vs. 31 ms) 16 times more (3 MB vs. 210 kB)
unrolled_append(itr, Iterators.reverse(itr)) (itr..., Iterators.reverse(itr)...) Tuple 8 identical nonempty non-singleton Tuples similar (29 LLVM lines) similar (50 ns vs. 40 ns) similar (53 ms vs. 31 ms) 16 times more (4 MB vs. 236 kB)
unrolled_append(itr, Iterators.reverse(itr)) (itr..., Iterators.reverse(itr)...) Tuple 32 identical nonempty non-singleton Tuples similar (157 LLVM lines) similar (70 ns vs. 70 ns) similar (59 ms vs. 31 ms) 24 times more (6 MB vs. 239 kB)
unrolled_append(itr, Iterators.reverse(itr)) (itr..., Iterators.reverse(itr)...) Tuple 128 identical nonempty non-singleton Tuples better (586 LLVM lines vs. 17 kB allocs) 64 times less (170 ns vs. 11 μs) 4 times more (125 ms vs. 30 ms) 52 times more (13 MB vs. 253 kB)
unrolled_append(itr, Iterators.reverse(itr)) (itr..., Iterators.reverse(itr)...) Tuple 2 empty & nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (52 ms vs. 27 ms) 22 times more (3 MB vs. 139 kB)
unrolled_append(itr, Iterators.reverse(itr)) (itr..., Iterators.reverse(itr)...) Tuple 8 empty & nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (50 ms vs. 27 ms) 22 times more (3 MB vs. 141 kB)
unrolled_append(itr, Iterators.reverse(itr)) (itr..., Iterators.reverse(itr)...) Tuple 32 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (51 ms vs. 27 ms) 23 times more (3 MB vs. 143 kB)
unrolled_append(itr, Iterators.reverse(itr)) (itr..., Iterators.reverse(itr)...) Tuple 128 empty & nonempty singleton Tuples better (optimized out vs. 7 kB allocs) 433 times less (30 ns vs. 13 μs) similar (54 ms vs. 28 ms) 17 times more (4 MB vs. 214 kB)
unrolled_append(itr, Iterators.reverse(itr)) (itr..., Iterators.reverse(itr)...) Tuple 2 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (51 ms vs. 27 ms) 22 times more (3 MB vs. 139 kB)
unrolled_append(itr, Iterators.reverse(itr)) (itr..., Iterators.reverse(itr)...) Tuple 8 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (51 ms vs. 27 ms) 15 times more (3 MB vs. 205 kB)
unrolled_append(itr, Iterators.reverse(itr)) (itr..., Iterators.reverse(itr)...) Tuple 32 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (51 ms vs. 27 ms) 23 times more (3 MB vs. 142 kB)
unrolled_append(itr, Iterators.reverse(itr)) (itr..., Iterators.reverse(itr)...) Tuple 128 nonempty singleton Tuples better (optimized out vs. 7 kB allocs) 321 times less (40 ns vs. 13 μs) similar (54 ms vs. 27 ms) 24 times more (4 MB vs. 150 kB)
unrolled_append(itr, Iterators.reverse(itr)) (itr..., Iterators.reverse(itr)...) Tuple 2 nonempty non-singleton Tuples similar (15 LLVM lines) similar (40 ns vs. 40 ns) similar (52 ms vs. 31 ms) 14 times more (3 MB vs. 236 kB)
unrolled_append(itr, Iterators.reverse(itr)) (itr..., Iterators.reverse(itr)...) Tuple 8 nonempty non-singleton Tuples similar (45 LLVM lines) similar (50 ns vs. 50 ns) similar (54 ms vs. 31 ms) 16 times more (4 MB vs. 239 kB)
unrolled_append(itr, Iterators.reverse(itr)) (itr..., Iterators.reverse(itr)...) Tuple 32 nonempty non-singleton Tuples similar (150 LLVM lines) similar (141 ns vs. 130 ns) 2 times more (73 ms vs. 31 ms) 20 times more (6 MB vs. 283 kB)
unrolled_append(itr, Iterators.reverse(itr)) (itr..., Iterators.reverse(itr)...) Tuple 128 nonempty non-singleton Tuples better (1045 LLVM lines vs. 560 kB allocs) 88 times less (480 ns vs. 42 μs) 11 times more (353 ms vs. 31 ms) 16 times more (13 MB vs. 794 kB)
unrolled_prepend(itr, Iterators.reverse(itr)) (Iterators.reverse(itr)..., itr...) Tuple 1 empty singleton Tuple similar (optimized out) similar (30 ns vs. 40 ns) similar (50 ms vs. 28 ms) 28 times more (3 MB vs. 109 kB)
unrolled_prepend(itr, Iterators.reverse(itr)) (Iterators.reverse(itr)..., itr...) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (50 ms vs. 27 ms) 22 times more (3 MB vs. 139 kB)
unrolled_prepend(itr, Iterators.reverse(itr)) (Iterators.reverse(itr)..., itr...) Tuple 1 nonempty non-singleton Tuple similar (10 LLVM lines) similar (40 ns vs. 40 ns) similar (50 ms vs. 30 ms) 16 times more (3 MB vs. 210 kB)
unrolled_prepend(itr, Iterators.reverse(itr)) (Iterators.reverse(itr)..., itr...) Tuple 2 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (51 ms vs. 28 ms) 22 times more (3 MB vs. 139 kB)
unrolled_prepend(itr, Iterators.reverse(itr)) (Iterators.reverse(itr)..., itr...) Tuple 8 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (51 ms vs. 28 ms) 23 times more (3 MB vs. 139 kB)
unrolled_prepend(itr, Iterators.reverse(itr)) (Iterators.reverse(itr)..., itr...) Tuple 32 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (52 ms vs. 28 ms) 23 times more (3 MB vs. 141 kB)
unrolled_prepend(itr, Iterators.reverse(itr)) (Iterators.reverse(itr)..., itr...) Tuple 128 identical nonempty singleton Tuples better (optimized out vs. 7 kB allocs) 185 times less (40 ns vs. 7 μs) similar (54 ms vs. 27 ms) 25 times more (4 MB vs. 148 kB)
unrolled_prepend(itr, Iterators.reverse(itr)) (Iterators.reverse(itr)..., itr...) Tuple 2 identical nonempty non-singleton Tuples similar (9 LLVM lines) similar (50 ns vs. 40 ns) similar (51 ms vs. 31 ms) 17 times more (3 MB vs. 210 kB)
unrolled_prepend(itr, Iterators.reverse(itr)) (Iterators.reverse(itr)..., itr...) Tuple 8 identical nonempty non-singleton Tuples similar (27 LLVM lines) similar (50 ns vs. 50 ns) similar (53 ms vs. 31 ms) 17 times more (4 MB vs. 236 kB)
unrolled_prepend(itr, Iterators.reverse(itr)) (Iterators.reverse(itr)..., itr...) Tuple 32 identical nonempty non-singleton Tuples similar (156 LLVM lines) similar (60 ns vs. 60 ns) similar (61 ms vs. 31 ms) 26 times more (6 MB vs. 239 kB)
unrolled_prepend(itr, Iterators.reverse(itr)) (Iterators.reverse(itr)..., itr...) Tuple 128 identical nonempty non-singleton Tuples better (586 LLVM lines vs. 17 kB allocs) 66 times less (160 ns vs. 11 μs) 3 times more (126 ms vs. 32 ms) 58 times more (15 MB vs. 253 kB)
unrolled_prepend(itr, Iterators.reverse(itr)) (Iterators.reverse(itr)..., itr...) Tuple 2 empty & nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (52 ms vs. 27 ms) 22 times more (3 MB vs. 139 kB)
unrolled_prepend(itr, Iterators.reverse(itr)) (Iterators.reverse(itr)..., itr...) Tuple 8 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (51 ms vs. 27 ms) 22 times more (3 MB vs. 141 kB)
unrolled_prepend(itr, Iterators.reverse(itr)) (Iterators.reverse(itr)..., itr...) Tuple 32 empty & nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (51 ms vs. 28 ms) 23 times more (3 MB vs. 143 kB)
unrolled_prepend(itr, Iterators.reverse(itr)) (Iterators.reverse(itr)..., itr...) Tuple 128 empty & nonempty singleton Tuples better (optimized out vs. 7 kB allocs) 321 times less (40 ns vs. 13 μs) similar (54 ms vs. 28 ms) 17 times more (4 MB vs. 214 kB)
unrolled_prepend(itr, Iterators.reverse(itr)) (Iterators.reverse(itr)..., itr...) Tuple 2 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (51 ms vs. 27 ms) 22 times more (3 MB vs. 139 kB)
unrolled_prepend(itr, Iterators.reverse(itr)) (Iterators.reverse(itr)..., itr...) Tuple 8 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (56 ms vs. 28 ms) 15 times more (3 MB vs. 205 kB)
unrolled_prepend(itr, Iterators.reverse(itr)) (Iterators.reverse(itr)..., itr...) Tuple 32 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (51 ms vs. 27 ms) 23 times more (3 MB vs. 142 kB)
unrolled_prepend(itr, Iterators.reverse(itr)) (Iterators.reverse(itr)..., itr...) Tuple 128 nonempty singleton Tuples better (optimized out vs. 7 kB allocs) 431 times less (30 ns vs. 13 μs) similar (53 ms vs. 27 ms) 24 times more (4 MB vs. 150 kB)
unrolled_prepend(itr, Iterators.reverse(itr)) (Iterators.reverse(itr)..., itr...) Tuple 2 nonempty non-singleton Tuples similar (15 LLVM lines) similar (40 ns vs. 40 ns) similar (52 ms vs. 31 ms) 15 times more (4 MB vs. 236 kB)
unrolled_prepend(itr, Iterators.reverse(itr)) (Iterators.reverse(itr)..., itr...) Tuple 8 nonempty non-singleton Tuples similar (47 LLVM lines) similar (50 ns vs. 60 ns) similar (56 ms vs. 31 ms) 17 times more (4 MB vs. 239 kB)
unrolled_prepend(itr, Iterators.reverse(itr)) (Iterators.reverse(itr)..., itr...) Tuple 32 nonempty non-singleton Tuples similar (169 LLVM lines) similar (160 ns vs. 150 ns) 2 times more (77 ms vs. 31 ms) 22 times more (6 MB vs. 283 kB)
unrolled_prepend(itr, Iterators.reverse(itr)) (Iterators.reverse(itr)..., itr...) Tuple 128 nonempty non-singleton Tuples better (1013 LLVM lines vs. 560 kB allocs) 95 times less (461 ns vs. 44 μs) 10 times more (331 ms vs. 32 ms) 18 times more (15 MB vs. 794 kB)
unrolled_take(itr, Val(length(itr) ÷ 2)) itr[1:length(itr) ÷ 2] Tuple 1 empty singleton Tuple similar (optimized out) similar (30 ns vs. 30 ns) similar (22 ms vs. 23 ms) 357 times more (78 kB vs. 224 B)
unrolled_take(itr, Val(length(itr) ÷ 2)) itr[1:length(itr) ÷ 2] Tuple 1 nonempty singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (21 ms vs. 23 ms) 357 times more (78 kB vs. 224 B)
unrolled_take(itr, Val(length(itr) ÷ 2)) itr[1:length(itr) ÷ 2] Tuple 1 nonempty non-singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (22 ms vs. 23 ms) 529 times more (116 kB vs. 224 B)
unrolled_take(itr, Val(length(itr) ÷ 2)) itr[1:length(itr) ÷ 2] Tuple 2 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (25 ms vs. 23 ms) 651 times more (204 kB vs. 320 B)
unrolled_take(itr, Val(length(itr) ÷ 2)) itr[1:length(itr) ÷ 2] Tuple 8 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (33 ms vs. 23 ms) 694 times more (228 kB vs. 336 B)
unrolled_take(itr, Val(length(itr) ÷ 2)) itr[1:length(itr) ÷ 2] Tuple 32 identical nonempty singleton Tuples better (optimized out vs. 64 B allocs) 7 times less (40 ns vs. 280 ns) similar (34 ms vs. 34 ms) 2 times less (253 kB vs. 723 kB)
unrolled_take(itr, Val(length(itr) ÷ 2)) itr[1:length(itr) ÷ 2] Tuple 128 identical nonempty singleton Tuples better (optimized out vs. 64 B allocs) 28 times less (30 ns vs. 862 ns) similar (34 ms vs. 33 ms) 2 times less (351 kB vs. 723 kB)
unrolled_take(itr, Val(length(itr) ÷ 2)) itr[1:length(itr) ÷ 2] Tuple 2 identical nonempty non-singleton Tuples similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (25 ms vs. 23 ms) 1297 times more (345 kB vs. 272 B)
unrolled_take(itr, Val(length(itr) ÷ 2)) itr[1:length(itr) ÷ 2] Tuple 8 identical nonempty non-singleton Tuples similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (34 ms vs. 23 ms) 897 times more (449 kB vs. 512 B)
unrolled_take(itr, Val(length(itr) ÷ 2)) itr[1:length(itr) ÷ 2] Tuple 32 identical nonempty non-singleton Tuples better (12 LLVM lines vs. 592 B allocs) 14 times less (40 ns vs. 560 ns) similar (35 ms vs. 34 ms) similar (660 kB vs. 724 kB)
unrolled_take(itr, Val(length(itr) ÷ 2)) itr[1:length(itr) ÷ 2] Tuple 128 identical nonempty non-singleton Tuples better (36 LLVM lines vs. 2 kB allocs) 39 times less (50 ns vs. 2 μs) similar (40 ms vs. 34 ms) 2 times more (1 MB vs. 726 kB)
unrolled_take(itr, Val(length(itr) ÷ 2)) itr[1:length(itr) ÷ 2] Tuple 2 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (25 ms vs. 23 ms) 929 times more (203 kB vs. 224 B)
unrolled_take(itr, Val(length(itr) ÷ 2)) itr[1:length(itr) ÷ 2] Tuple 8 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (33 ms vs. 23 ms) 697 times more (229 kB vs. 336 B)
unrolled_take(itr, Val(length(itr) ÷ 2)) itr[1:length(itr) ÷ 2] Tuple 32 empty & nonempty singleton Tuples better (optimized out vs. 192 B allocs) 9 times less (40 ns vs. 380 ns) similar (33 ms vs. 51 ms) 9 times less (253 kB vs. 2 MB)
unrolled_take(itr, Val(length(itr) ÷ 2)) itr[1:length(itr) ÷ 2] Tuple 128 empty & nonempty singleton Tuples better (optimized out vs. 576 B allocs) 31 times less (40 ns vs. 1 μs) similar (34 ms vs. 58 ms) 7 times less (351 kB vs. 3 MB)
unrolled_take(itr, Val(length(itr) ÷ 2)) itr[1:length(itr) ÷ 2] Tuple 2 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (25 ms vs. 23 ms) 651 times more (203 kB vs. 320 B)
unrolled_take(itr, Val(length(itr) ÷ 2)) itr[1:length(itr) ÷ 2] Tuple 8 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (33 ms vs. 23 ms) 696 times more (229 kB vs. 336 B)
unrolled_take(itr, Val(length(itr) ÷ 2)) itr[1:length(itr) ÷ 2] Tuple 32 nonempty singleton Tuples better (optimized out vs. 192 B allocs) 24 times less (40 ns vs. 971 ns) similar (33 ms vs. 51 ms) 9 times less (253 kB vs. 2 MB)
unrolled_take(itr, Val(length(itr) ÷ 2)) itr[1:length(itr) ÷ 2] Tuple 128 nonempty singleton Tuples better (optimized out vs. 576 B allocs) 70 times less (40 ns vs. 3 μs) similar (34 ms vs. 55 ms) 7 times less (351 kB vs. 2 MB)
unrolled_take(itr, Val(length(itr) ÷ 2)) itr[1:length(itr) ÷ 2] Tuple 2 nonempty non-singleton Tuples similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (25 ms vs. 23 ms) 1392 times more (370 kB vs. 272 B)
unrolled_take(itr, Val(length(itr) ÷ 2)) itr[1:length(itr) ÷ 2] Tuple 8 nonempty non-singleton Tuples similar (17 LLVM lines) similar (50 ns vs. 40 ns) similar (34 ms vs. 23 ms) 653 times more (450 kB vs. 704 B)
unrolled_take(itr, Val(length(itr) ÷ 2)) itr[1:length(itr) ÷ 2] Tuple 32 nonempty non-singleton Tuples better (53 LLVM lines vs. 20 kB allocs) 25 times less (60 ns vs. 2 μs) similar (37 ms vs. 63 ms) 3 times less (662 kB vs. 2 MB)
unrolled_take(itr, Val(length(itr) ÷ 2)) itr[1:length(itr) ÷ 2] Tuple 128 nonempty non-singleton Tuples better (177 LLVM lines vs. 268 kB allocs) 219 times less (80 ns vs. 18 μs) similar (52 ms vs. 68 ms) similar (1 MB vs. 2 MB)
unrolled_drop(itr, Val(length(itr) ÷ 2)) itr[length(itr) ÷ 2 + 1:end] Tuple 1 empty singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (30 ms vs. 22 ms) 1913 times more (418 kB vs. 224 B)
unrolled_drop(itr, Val(length(itr) ÷ 2)) itr[length(itr) ÷ 2 + 1:end] Tuple 1 nonempty singleton Tuple similar (optimized out) similar (40 ns vs. 30 ns) similar (30 ms vs. 22 ms) 2051 times more (449 kB vs. 224 B)
unrolled_drop(itr, Val(length(itr) ÷ 2)) itr[length(itr) ÷ 2 + 1:end] Tuple 1 nonempty non-singleton Tuple similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (28 ms vs. 22 ms) 2335 times more (584 kB vs. 256 B)
unrolled_drop(itr, Val(length(itr) ÷ 2)) itr[length(itr) ÷ 2 + 1:end] Tuple 2 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (30 ms vs. 22 ms) 1436 times more (449 kB vs. 320 B)
unrolled_drop(itr, Val(length(itr) ÷ 2)) itr[length(itr) ÷ 2 + 1:end] Tuple 8 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (40 ms vs. 22 ms) 1589 times more (522 kB vs. 336 B)
unrolled_drop(itr, Val(length(itr) ÷ 2)) itr[length(itr) ÷ 2 + 1:end] Tuple 32 identical nonempty singleton Tuples better (optimized out vs. 64 B allocs) 7 times less (40 ns vs. 290 ns) similar (42 ms vs. 33 ms) similar (710 kB vs. 723 kB)
unrolled_drop(itr, Val(length(itr) ÷ 2)) itr[length(itr) ÷ 2 + 1:end] Tuple 128 identical nonempty singleton Tuples better (optimized out vs. 64 B allocs) 29 times less (30 ns vs. 871 ns) similar (52 ms vs. 33 ms) 2 times more (1 MB vs. 723 kB)
unrolled_drop(itr, Val(length(itr) ÷ 2)) itr[length(itr) ÷ 2 + 1:end] Tuple 2 identical nonempty non-singleton Tuples similar (9 LLVM lines) similar (40 ns vs. 40 ns) similar (28 ms vs. 22 ms) 2198 times more (584 kB vs. 272 B)
unrolled_drop(itr, Val(length(itr) ÷ 2)) itr[length(itr) ÷ 2 + 1:end] Tuple 8 identical nonempty non-singleton Tuples similar (9 LLVM lines) similar (50 ns vs. 50 ns) similar (37 ms vs. 22 ms) 1440 times more (720 kB vs. 512 B)
unrolled_drop(itr, Val(length(itr) ÷ 2)) itr[length(itr) ÷ 2 + 1:end] Tuple 32 identical nonempty non-singleton Tuples better (13 LLVM lines vs. 592 B allocs) 11 times less (50 ns vs. 560 ns) similar (38 ms vs. 34 ms) similar (1 MB vs. 724 kB)
unrolled_drop(itr, Val(length(itr) ÷ 2)) itr[length(itr) ÷ 2 + 1:end] Tuple 128 identical nonempty non-singleton Tuples better (37 LLVM lines vs. 2 kB allocs) 32 times less (60 ns vs. 2 μs) similar (44 ms vs. 33 ms) 3 times more (2 MB vs. 726 kB)
unrolled_drop(itr, Val(length(itr) ÷ 2)) itr[length(itr) ÷ 2 + 1:end] Tuple 2 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (31 ms vs. 22 ms) 1438 times more (450 kB vs. 320 B)
unrolled_drop(itr, Val(length(itr) ÷ 2)) itr[length(itr) ÷ 2 + 1:end] Tuple 8 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (40 ms vs. 22 ms) 1595 times more (523 kB vs. 336 B)
unrolled_drop(itr, Val(length(itr) ÷ 2)) itr[length(itr) ÷ 2 + 1:end] Tuple 32 empty & nonempty singleton Tuples better (optimized out vs. 192 B allocs) 9 times less (40 ns vs. 380 ns) similar (42 ms vs. 41 ms) 2 times less (712 kB vs. 2 MB)
unrolled_drop(itr, Val(length(itr) ÷ 2)) itr[length(itr) ÷ 2 + 1:end] Tuple 128 empty & nonempty singleton Tuples better (optimized out vs. 576 B allocs) 31 times less (40 ns vs. 1 μs) similar (51 ms vs. 51 ms) similar (1 MB vs. 2 MB)
unrolled_drop(itr, Val(length(itr) ÷ 2)) itr[length(itr) ÷ 2 + 1:end] Tuple 2 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (30 ms vs. 22 ms) 1438 times more (450 kB vs. 320 B)
unrolled_drop(itr, Val(length(itr) ÷ 2)) itr[length(itr) ÷ 2 + 1:end] Tuple 8 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (40 ms vs. 22 ms) 1594 times more (523 kB vs. 336 B)
unrolled_drop(itr, Val(length(itr) ÷ 2)) itr[length(itr) ÷ 2 + 1:end] Tuple 32 nonempty singleton Tuples better (optimized out vs. 192 B allocs) 15 times less (40 ns vs. 610 ns) similar (42 ms vs. 41 ms) 2 times less (711 kB vs. 2 MB)
unrolled_drop(itr, Val(length(itr) ÷ 2)) itr[length(itr) ÷ 2 + 1:end] Tuple 128 nonempty singleton Tuples better (optimized out vs. 576 B allocs) 89 times less (30 ns vs. 3 μs) similar (50 ms vs. 51 ms) similar (1 MB vs. 2 MB)
unrolled_drop(itr, Val(length(itr) ÷ 2)) itr[length(itr) ÷ 2 + 1:end] Tuple 2 nonempty non-singleton Tuples similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (28 ms vs. 22 ms) 2053 times more (610 kB vs. 304 B)
unrolled_drop(itr, Val(length(itr) ÷ 2)) itr[length(itr) ÷ 2 + 1:end] Tuple 8 nonempty non-singleton Tuples similar (19 LLVM lines) similar (50 ns vs. 50 ns) similar (37 ms vs. 22 ms) 924 times more (722 kB vs. 800 B)
unrolled_drop(itr, Val(length(itr) ÷ 2)) itr[length(itr) ÷ 2 + 1:end] Tuple 32 nonempty non-singleton Tuples better (47 LLVM lines vs. 21 kB allocs) 26 times less (70 ns vs. 2 μs) similar (40 ms vs. 47 ms) similar (1 MB vs. 2 MB)
unrolled_drop(itr, Val(length(itr) ÷ 2)) itr[length(itr) ÷ 2 + 1:end] Tuple 128 nonempty non-singleton Tuples better (170 LLVM lines vs. 268 kB allocs) 101 times less (160 ns vs. 16 μs) similar (56 ms vs. 62 ms) similar (2 MB vs. 2 MB)
unrolled_setindex(itr, itr[1], Val(length(itr) ÷ 2 + 1)) (itr[1:length(itr) ÷ 2]..., itr[1], itr[length(itr) ÷ 2 + 2:end]...) Tuple 1 empty singleton Tuple similar (optimized out) similar (30 ns vs. 30 ns) similar (25 ms vs. 26 ms) 503 times more (157 kB vs. 320 B)
unrolled_setindex(itr, itr[1], Val(length(itr) ÷ 2 + 1)) (itr[1:length(itr) ÷ 2]..., itr[1], itr[length(itr) ÷ 2 + 2:end]...) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (40 ns vs. 30 ns) similar (25 ms vs. 26 ms) 599 times more (187 kB vs. 320 B)
unrolled_setindex(itr, itr[1], Val(length(itr) ÷ 2 + 1)) (itr[1:length(itr) ÷ 2]..., itr[1], itr[length(itr) ÷ 2 + 2:end]...) Tuple 1 nonempty non-singleton Tuple similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (25 ms vs. 27 ms) 813 times more (305 kB vs. 384 B)
unrolled_setindex(itr, itr[1], Val(length(itr) ÷ 2 + 1)) (itr[1:length(itr) ÷ 2]..., itr[1], itr[length(itr) ÷ 2 + 2:end]...) Tuple 2 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (26 ms vs. 26 ms) 464 times more (189 kB vs. 416 B)
unrolled_setindex(itr, itr[1], Val(length(itr) ÷ 2 + 1)) (itr[1:length(itr) ÷ 2]..., itr[1], itr[length(itr) ÷ 2 + 2:end]...) Tuple 8 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (35 ms vs. 26 ms) 352 times more (220 kB vs. 640 B)
unrolled_setindex(itr, itr[1], Val(length(itr) ÷ 2 + 1)) (itr[1:length(itr) ÷ 2]..., itr[1], itr[length(itr) ÷ 2 + 2:end]...) Tuple 32 identical nonempty singleton Tuples better (optimized out vs. 128 B allocs) 26 times less (40 ns vs. 1 μs) similar (34 ms vs. 36 ms) 2 times less (269 kB vs. 723 kB)
unrolled_setindex(itr, itr[1], Val(length(itr) ÷ 2 + 1)) (itr[1:length(itr) ÷ 2]..., itr[1], itr[length(itr) ÷ 2 + 2:end]...) Tuple 128 identical nonempty singleton Tuples better (optimized out vs. 128 B allocs) 94 times less (40 ns vs. 4 μs) similar (35 ms vs. 36 ms) similar (464 kB vs. 724 kB)
unrolled_setindex(itr, itr[1], Val(length(itr) ÷ 2 + 1)) (itr[1:length(itr) ÷ 2]..., itr[1], itr[length(itr) ÷ 2 + 2:end]...) Tuple 2 identical nonempty non-singleton Tuples similar (10 LLVM lines) similar (40 ns vs. 40 ns) similar (26 ms vs. 26 ms) 712 times more (334 kB vs. 480 B)
unrolled_setindex(itr, itr[1], Val(length(itr) ÷ 2 + 1)) (itr[1:length(itr) ÷ 2]..., itr[1], itr[length(itr) ÷ 2 + 2:end]...) Tuple 8 identical nonempty non-singleton Tuples similar (16 LLVM lines) similar (40 ns vs. 40 ns) similar (36 ms vs. 26 ms) 540 times more (583 kB vs. 1 kB)
unrolled_setindex(itr, itr[1], Val(length(itr) ÷ 2 + 1)) (itr[1:length(itr) ÷ 2]..., itr[1], itr[length(itr) ÷ 2 + 2:end]...) Tuple 32 identical nonempty non-singleton Tuples better (31 LLVM lines vs. 2 kB allocs) 40 times less (50 ns vs. 2 μs) similar (38 ms vs. 37 ms) similar (1 MB vs. 725 kB)
unrolled_setindex(itr, itr[1], Val(length(itr) ÷ 2 + 1)) (itr[1:length(itr) ÷ 2]..., itr[1], itr[length(itr) ÷ 2 + 2:end]...) Tuple 128 identical nonempty non-singleton Tuples better (79 LLVM lines vs. 7 kB allocs) 107 times less (70 ns vs. 8 μs) similar (59 ms vs. 37 ms) 6 times more (4 MB vs. 733 kB)
unrolled_setindex(itr, itr[1], Val(length(itr) ÷ 2 + 1)) (itr[1:length(itr) ÷ 2]..., itr[1], itr[length(itr) ÷ 2 + 2:end]...) Tuple 2 empty & nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (26 ms vs. 26 ms) 603 times more (189 kB vs. 320 B)
unrolled_setindex(itr, itr[1], Val(length(itr) ÷ 2 + 1)) (itr[1:length(itr) ÷ 2]..., itr[1], itr[length(itr) ÷ 2 + 2:end]...) Tuple 8 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (34 ms vs. 26 ms) 329 times more (221 kB vs. 688 B)
unrolled_setindex(itr, itr[1], Val(length(itr) ÷ 2 + 1)) (itr[1:length(itr) ÷ 2]..., itr[1], itr[length(itr) ÷ 2 + 2:end]...) Tuple 32 empty & nonempty singleton Tuples better (optimized out vs. 368 B allocs) 31 times less (40 ns vs. 1 μs) similar (35 ms vs. 61 ms) 9 times less (270 kB vs. 3 MB)
unrolled_setindex(itr, itr[1], Val(length(itr) ÷ 2 + 1)) (itr[1:length(itr) ÷ 2]..., itr[1], itr[length(itr) ÷ 2 + 2:end]...) Tuple 128 empty & nonempty singleton Tuples better (optimized out vs. 1 kB allocs) 114 times less (40 ns vs. 5 μs) similar (36 ms vs. 61 ms) 5 times less (464 kB vs. 3 MB)
unrolled_setindex(itr, itr[1], Val(length(itr) ÷ 2 + 1)) (itr[1:length(itr) ÷ 2]..., itr[1], itr[length(itr) ÷ 2 + 2:end]...) Tuple 2 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (26 ms vs. 26 ms) 377 times more (189 kB vs. 512 B)
unrolled_setindex(itr, itr[1], Val(length(itr) ÷ 2 + 1)) (itr[1:length(itr) ÷ 2]..., itr[1], itr[length(itr) ÷ 2 + 2:end]...) Tuple 8 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (34 ms vs. 26 ms) 288 times more (221 kB vs. 784 B)
unrolled_setindex(itr, itr[1], Val(length(itr) ÷ 2 + 1)) (itr[1:length(itr) ÷ 2]..., itr[1], itr[length(itr) ÷ 2 + 2:end]...) Tuple 32 nonempty singleton Tuples better (optimized out vs. 368 B allocs) 52 times less (40 ns vs. 2 μs) similar (34 ms vs. 58 ms) 9 times less (269 kB vs. 2 MB)
unrolled_setindex(itr, itr[1], Val(length(itr) ÷ 2 + 1)) (itr[1:length(itr) ÷ 2]..., itr[1], itr[length(itr) ÷ 2 + 2:end]...) Tuple 128 nonempty singleton Tuples better (optimized out vs. 1 kB allocs) 250 times less (30 ns vs. 8 μs) similar (36 ms vs. 58 ms) 5 times less (464 kB vs. 2 MB)
unrolled_setindex(itr, itr[1], Val(length(itr) ÷ 2 + 1)) (itr[1:length(itr) ÷ 2]..., itr[1], itr[length(itr) ÷ 2 + 2:end]...) Tuple 2 nonempty non-singleton Tuples similar (10 LLVM lines) similar (40 ns vs. 50 ns) similar (27 ms vs. 26 ms) 767 times more (360 kB vs. 480 B)
unrolled_setindex(itr, itr[1], Val(length(itr) ÷ 2 + 1)) (itr[1:length(itr) ÷ 2]..., itr[1], itr[length(itr) ÷ 2 + 2:end]...) Tuple 8 nonempty non-singleton Tuples similar (28 LLVM lines) similar (50 ns vs. 50 ns) similar (36 ms vs. 26 ms) 311 times more (585 kB vs. 2 kB)
unrolled_setindex(itr, itr[1], Val(length(itr) ÷ 2 + 1)) (itr[1:length(itr) ÷ 2]..., itr[1], itr[length(itr) ÷ 2 + 2:end]...) Tuple 32 nonempty non-singleton Tuples better (92 LLVM lines vs. 42 kB allocs) 89 times less (70 ns vs. 6 μs) similar (43 ms vs. 71 ms) similar (1 MB vs. 2 MB)
unrolled_setindex(itr, itr[1], Val(length(itr) ÷ 2 + 1)) (itr[1:length(itr) ÷ 2]..., itr[1], itr[length(itr) ÷ 2 + 2:end]...) Tuple 128 nonempty non-singleton Tuples better (545 LLVM lines vs. 541 kB allocs) 149 times less (270 ns vs. 40 μs) similar (127 ms vs. 71 ms) similar (4 MB vs. 2 MB)
unrolled_insert(itr, itr[1], Val(length(itr) ÷ 2 + 1)) (itr[1:length(itr) ÷ 2]..., itr[1], itr[length(itr) ÷ 2 + 1:end]...) Tuple 1 empty singleton Tuple similar (optimized out) similar (40 ns vs. 30 ns) similar (26 ms vs. 26 ms) 612 times more (192 kB vs. 320 B)
unrolled_insert(itr, itr[1], Val(length(itr) ÷ 2 + 1)) (itr[1:length(itr) ÷ 2]..., itr[1], itr[length(itr) ÷ 2 + 1:end]...) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (40 ns vs. 30 ns) similar (26 ms vs. 26 ms) 545 times more (222 kB vs. 416 B)
unrolled_insert(itr, itr[1], Val(length(itr) ÷ 2 + 1)) (itr[1:length(itr) ÷ 2]..., itr[1], itr[length(itr) ÷ 2 + 1:end]...) Tuple 1 nonempty non-singleton Tuple similar (10 LLVM lines) similar (40 ns vs. 50 ns) similar (26 ms vs. 26 ms) 872 times more (382 kB vs. 448 B)
unrolled_insert(itr, itr[1], Val(length(itr) ÷ 2 + 1)) (itr[1:length(itr) ÷ 2]..., itr[1], itr[length(itr) ÷ 2 + 1:end]...) Tuple 2 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (26 ms vs. 26 ms) 432 times more (223 kB vs. 528 B)
unrolled_insert(itr, itr[1], Val(length(itr) ÷ 2 + 1)) (itr[1:length(itr) ÷ 2]..., itr[1], itr[length(itr) ÷ 2 + 1:end]...) Tuple 8 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (35 ms vs. 26 ms) 379 times more (255 kB vs. 688 B)
unrolled_insert(itr, itr[1], Val(length(itr) ÷ 2 + 1)) (itr[1:length(itr) ÷ 2]..., itr[1], itr[length(itr) ÷ 2 + 1:end]...) Tuple 32 identical nonempty singleton Tuples better (optimized out vs. 128 B allocs) 36 times less (30 ns vs. 1 μs) similar (35 ms vs. 36 ms) 2 times less (304 kB vs. 724 kB)
unrolled_insert(itr, itr[1], Val(length(itr) ÷ 2 + 1)) (itr[1:length(itr) ÷ 2]..., itr[1], itr[length(itr) ÷ 2 + 1:end]...) Tuple 128 identical nonempty singleton Tuples better (optimized out vs. 128 B allocs) 94 times less (40 ns vs. 4 μs) similar (36 ms vs. 37 ms) similar (500 kB vs. 725 kB)
unrolled_insert(itr, itr[1], Val(length(itr) ÷ 2 + 1)) (itr[1:length(itr) ÷ 2]..., itr[1], itr[length(itr) ÷ 2 + 1:end]...) Tuple 2 identical nonempty non-singleton Tuples similar (11 LLVM lines) similar (40 ns vs. 50 ns) similar (26 ms vs. 26 ms) 690 times more (432 kB vs. 640 B)
unrolled_insert(itr, itr[1], Val(length(itr) ÷ 2 + 1)) (itr[1:length(itr) ÷ 2]..., itr[1], itr[length(itr) ÷ 2 + 1:end]...) Tuple 8 identical nonempty non-singleton Tuples similar (18 LLVM lines) similar (50 ns vs. 40 ns) similar (37 ms vs. 26 ms) 622 times more (729 kB vs. 1 kB)
unrolled_insert(itr, itr[1], Val(length(itr) ÷ 2 + 1)) (itr[1:length(itr) ÷ 2]..., itr[1], itr[length(itr) ÷ 2 + 1:end]...) Tuple 32 identical nonempty non-singleton Tuples better (23 LLVM lines vs. 2 kB allocs) 40 times less (50 ns vs. 2 μs) similar (38 ms vs. 37 ms) 2 times more (2 MB vs. 726 kB)
unrolled_insert(itr, itr[1], Val(length(itr) ÷ 2 + 1)) (itr[1:length(itr) ÷ 2]..., itr[1], itr[length(itr) ÷ 2 + 1:end]...) Tuple 128 identical nonempty non-singleton Tuples better (71 LLVM lines vs. 7 kB allocs) 125 times less (60 ns vs. 8 μs) similar (61 ms vs. 37 ms) 8 times more (6 MB vs. 734 kB)
unrolled_insert(itr, itr[1], Val(length(itr) ÷ 2 + 1)) (itr[1:length(itr) ÷ 2]..., itr[1], itr[length(itr) ÷ 2 + 1:end]...) Tuple 2 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (26 ms vs. 26 ms) 432 times more (223 kB vs. 528 B)
unrolled_insert(itr, itr[1], Val(length(itr) ÷ 2 + 1)) (itr[1:length(itr) ÷ 2]..., itr[1], itr[length(itr) ÷ 2 + 1:end]...) Tuple 8 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (35 ms vs. 26 ms) 372 times more (256 kB vs. 704 B)
unrolled_insert(itr, itr[1], Val(length(itr) ÷ 2 + 1)) (itr[1:length(itr) ÷ 2]..., itr[1], itr[length(itr) ÷ 2 + 1:end]...) Tuple 32 empty & nonempty singleton Tuples better (optimized out vs. 384 B allocs) 32 times less (40 ns vs. 1 μs) similar (35 ms vs. 60 ms) 8 times less (304 kB vs. 3 MB)
unrolled_insert(itr, itr[1], Val(length(itr) ÷ 2 + 1)) (itr[1:length(itr) ÷ 2]..., itr[1], itr[length(itr) ÷ 2 + 1:end]...) Tuple 128 empty & nonempty singleton Tuples better (optimized out vs. 1 kB allocs) 115 times less (40 ns vs. 5 μs) similar (37 ms vs. 61 ms) 5 times less (499 kB vs. 3 MB)
unrolled_insert(itr, itr[1], Val(length(itr) ÷ 2 + 1)) (itr[1:length(itr) ÷ 2]..., itr[1], itr[length(itr) ÷ 2 + 1:end]...) Tuple 2 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (26 ms vs. 26 ms) 366 times more (223 kB vs. 624 B)
unrolled_insert(itr, itr[1], Val(length(itr) ÷ 2 + 1)) (itr[1:length(itr) ÷ 2]..., itr[1], itr[length(itr) ÷ 2 + 1:end]...) Tuple 8 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (35 ms vs. 26 ms) 327 times more (256 kB vs. 800 B)
unrolled_insert(itr, itr[1], Val(length(itr) ÷ 2 + 1)) (itr[1:length(itr) ÷ 2]..., itr[1], itr[length(itr) ÷ 2 + 1:end]...) Tuple 32 nonempty singleton Tuples better (optimized out vs. 384 B allocs) 53 times less (40 ns vs. 2 μs) similar (35 ms vs. 57 ms) 8 times less (304 kB vs. 2 MB)
unrolled_insert(itr, itr[1], Val(length(itr) ÷ 2 + 1)) (itr[1:length(itr) ÷ 2]..., itr[1], itr[length(itr) ÷ 2 + 1:end]...) Tuple 128 nonempty singleton Tuples better (optimized out vs. 1 kB allocs) 193 times less (40 ns vs. 8 μs) similar (37 ms vs. 58 ms) 5 times less (499 kB vs. 2 MB)
unrolled_insert(itr, itr[1], Val(length(itr) ÷ 2 + 1)) (itr[1:length(itr) ÷ 2]..., itr[1], itr[length(itr) ÷ 2 + 1:end]...) Tuple 2 nonempty non-singleton Tuples similar (13 LLVM lines) similar (50 ns vs. 40 ns) similar (26 ms vs. 26 ms) 664 times more (457 kB vs. 704 B)
unrolled_insert(itr, itr[1], Val(length(itr) ÷ 2 + 1)) (itr[1:length(itr) ÷ 2]..., itr[1], itr[length(itr) ÷ 2 + 1:end]...) Tuple 8 nonempty non-singleton Tuples similar (31 LLVM lines) similar (50 ns vs. 50 ns) similar (37 ms vs. 26 ms) 365 times more (731 kB vs. 2 kB)
unrolled_insert(itr, itr[1], Val(length(itr) ÷ 2 + 1)) (itr[1:length(itr) ÷ 2]..., itr[1], itr[length(itr) ÷ 2 + 1:end]...) Tuple 32 nonempty non-singleton Tuples better (95 LLVM lines vs. 44 kB allocs) 90 times less (70 ns vs. 6 μs) similar (43 ms vs. 71 ms) similar (2 MB vs. 2 MB)
unrolled_insert(itr, itr[1], Val(length(itr) ÷ 2 + 1)) (itr[1:length(itr) ÷ 2]..., itr[1], itr[length(itr) ÷ 2 + 1:end]...) Tuple 128 nonempty non-singleton Tuples better (550 LLVM lines vs. 546 kB allocs) 148 times less (280 ns vs. 42 μs) similar (131 ms vs. 71 ms) 2 times more (6 MB vs. 2 MB)
unrolled_map(length, itr) map(length, itr) Tuple 1 empty singleton Tuple similar (optimized out) similar (30 ns vs. 30 ns) similar (35 ms vs. 21 ms) 6 times more (57 kB vs. 9 kB)
unrolled_map(length, itr) map(length, itr) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (30 ns vs. 40 ns) similar (35 ms vs. 21 ms) 2 times more (88 kB vs. 40 kB)
unrolled_map(length, itr) map(length, itr) Tuple 1 nonempty non-singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (35 ms vs. 20 ms) 4 times more (61 kB vs. 13 kB)
unrolled_map(length, itr) map(length, itr) Tuple 2 identical nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 30 ns) similar (34 ms vs. 20 ms) 2 times more (92 kB vs. 43 kB)
unrolled_map(length, itr) map(length, itr) Tuple 8 identical nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (30 ns vs. 40 ns) similar (35 ms vs. 21 ms) 2 times less (113 kB vs. 303 kB)
unrolled_map(length, itr) map(length, itr) Tuple 32 identical nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 592 B allocs) 14 times less (40 ns vs. 591 ns) similar (35 ms vs. 27 ms) similar (201 kB vs. 296 kB)
unrolled_map(length, itr) map(length, itr) Tuple 128 identical nonempty singleton Tuples better (37 LLVM lines w/ Const vs. 2 kB allocs) 34 times less (60 ns vs. 2 μs) similar (49 ms vs. 27 ms) 2 times more (679 kB vs. 298 kB)
unrolled_map(length, itr) map(length, itr) Tuple 2 identical nonempty non-singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 40 ns) similar (34 ms vs. 20 ms) 3 times more (69 kB vs. 20 kB)
unrolled_map(length, itr) map(length, itr) Tuple 8 identical nonempty non-singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 40 ns) similar (35 ms vs. 21 ms) 4 times less (143 kB vs. 591 kB)
unrolled_map(length, itr) map(length, itr) Tuple 32 identical nonempty non-singleton Tuples better (7 LLVM lines w/ Const vs. 592 B allocs) 14 times less (40 ns vs. 590 ns) similar (36 ms vs. 27 ms) similar (334 kB vs. 295 kB)
unrolled_map(length, itr) map(length, itr) Tuple 128 identical nonempty non-singleton Tuples better (37 LLVM lines w/ Const vs. 2 kB allocs) 35 times less (60 ns vs. 2 μs) similar (50 ms vs. 26 ms) 4 times more (1 MB vs. 298 kB)
unrolled_map(length, itr) map(length, itr) Tuple 2 empty & nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (30 ns vs. 30 ns) similar (34 ms vs. 20 ms) 2 times more (92 kB vs. 43 kB)
unrolled_map(length, itr) map(length, itr) Tuple 8 empty & nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 30 ns) similar (35 ms vs. 21 ms) 2 times less (124 kB vs. 330 kB)
unrolled_map(length, itr) map(length, itr) Tuple 32 empty & nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 592 B allocs) 30 times less (30 ns vs. 921 ns) similar (35 ms vs. 28 ms) similar (229 kB vs. 320 kB)
unrolled_map(length, itr) map(length, itr) Tuple 128 empty & nonempty singleton Tuples better (43 LLVM lines w/ Const vs. 2 kB allocs) 55 times less (60 ns vs. 3 μs) similar (50 ms vs. 28 ms) 2 times more (706 kB vs. 322 kB)
unrolled_map(length, itr) map(length, itr) Tuple 2 nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (30 ns vs. 40 ns) similar (35 ms vs. 20 ms) 2 times more (96 kB vs. 47 kB)
unrolled_map(length, itr) map(length, itr) Tuple 8 nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (30 ns vs. 40 ns) similar (35 ms vs. 21 ms) 2 times less (128 kB vs. 318 kB)
unrolled_map(length, itr) map(length, itr) Tuple 32 nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 592 B allocs) 22 times less (40 ns vs. 911 ns) similar (36 ms vs. 28 ms) similar (229 kB vs. 324 kB)
unrolled_map(length, itr) map(length, itr) Tuple 128 nonempty singleton Tuples better (37 LLVM lines w/ Const vs. 2 kB allocs) 54 times less (60 ns vs. 3 μs) similar (50 ms vs. 28 ms) 2 times more (706 kB vs. 326 kB)
unrolled_map(length, itr) map(length, itr) Tuple 2 nonempty non-singleton Tuples similar (7 LLVM lines w/ Const) similar (30 ns vs. 40 ns) similar (35 ms vs. 21 ms) 2 times more (96 kB vs. 47 kB)
unrolled_map(length, itr) map(length, itr) Tuple 8 nonempty non-singleton Tuples similar (7 LLVM lines w/ Const) similar (30 ns vs. 40 ns) similar (35 ms vs. 21 ms) 4 times less (144 kB vs. 594 kB)
unrolled_map(length, itr) map(length, itr) Tuple 32 nonempty non-singleton Tuples better (7 LLVM lines w/ Const vs. 39 kB allocs) 74 times less (40 ns vs. 3 μs) similar (36 ms vs. 28 ms) similar (349 kB vs. 339 kB)
unrolled_map(length, itr) map(length, itr) Tuple 128 nonempty non-singleton Tuples better (37 LLVM lines w/ Const vs. 528 kB allocs) 388 times less (60 ns vs. 23 μs) similar (50 ms vs. 29 ms) similar (1 MB vs. 829 kB)
unrolled_any(isempty, itr) any(isempty, itr) Tuple 1 empty singleton Tuple similar (optimized out) similar (30 ns vs. 30 ns) similar (23 ms vs. 24 ms) 2 times less (55 kB vs. 159 kB)
unrolled_any(isempty, itr) any(isempty, itr) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (23 ms vs. 24 ms) 3 times less (89 kB vs. 281 kB)
unrolled_any(isempty, itr) any(isempty, itr) Tuple 1 nonempty non-singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (21 ms vs. 25 ms) 5 times less (62 kB vs. 337 kB)
unrolled_any(isempty, itr) any(isempty, itr) Tuple 2 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (23 ms vs. 27 ms) 4 times less (93 kB vs. 450 kB)
unrolled_any(isempty, itr) any(isempty, itr) Tuple 8 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (38 ms vs. 27 ms) 2 times less (179 kB vs. 450 kB)
unrolled_any(isempty, itr) any(isempty, itr) Tuple 32 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (40 ms vs. 27 ms) similar (323 kB vs. 450 kB)
unrolled_any(isempty, itr) any(isempty, itr) Tuple 128 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (45 ms vs. 27 ms) similar (898 kB vs. 450 kB)
unrolled_any(isempty, itr) any(isempty, itr) Tuple 2 identical nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (21 ms vs. 28 ms) 7 times less (71 kB vs. 521 kB)
unrolled_any(isempty, itr) any(isempty, itr) Tuple 8 identical nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (36 ms vs. 28 ms) 2 times less (209 kB vs. 546 kB)
unrolled_any(isempty, itr) any(isempty, itr) Tuple 32 identical nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (38 ms vs. 28 ms) similar (461 kB vs. 546 kB)
unrolled_any(isempty, itr) any(isempty, itr) Tuple 128 identical nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (43 ms vs. 28 ms) 2 times more (1 MB vs. 547 kB)
unrolled_any(isempty, itr) any(isempty, itr) Tuple 2 empty & nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (24 ms vs. 25 ms) 4 times less (86 kB vs. 377 kB)
unrolled_any(isempty, itr) any(isempty, itr) Tuple 8 empty & nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (39 ms vs. 25 ms) 5 times less (159 kB vs. 805 kB)
unrolled_any(isempty, itr) any(isempty, itr) Tuple 32 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (39 ms vs. 28 ms) 10 times less (247 kB vs. 3 MB)
unrolled_any(isempty, itr) any(isempty, itr) Tuple 128 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (45 ms vs. 27 ms) similar (596 kB vs. 340 kB)
unrolled_any(isempty, itr) any(isempty, itr) Tuple 2 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (24 ms vs. 30 ms) 5 times less (97 kB vs. 532 kB)
unrolled_any(isempty, itr) any(isempty, itr) Tuple 8 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (38 ms vs. 44 ms) 7 times less (192 kB vs. 1 MB)
unrolled_any(isempty, itr) any(isempty, itr) Tuple 32 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (40 ms vs. 75 ms) 11 times less (350 kB vs. 4 MB)
unrolled_any(isempty, itr) any(isempty, itr) Tuple 128 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (46 ms vs. 30 ms) similar (924 kB vs. 504 kB)
unrolled_any(isempty, itr) any(isempty, itr) Tuple 2 nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (20 ms vs. 29 ms) 5 times less (100 kB vs. 532 kB)
unrolled_any(isempty, itr) any(isempty, itr) Tuple 8 nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (36 ms vs. 47 ms) 6 times less (222 kB vs. 1 MB)
unrolled_any(isempty, itr) any(isempty, itr) Tuple 32 nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) 2 times less (38 ms vs. 86 ms) 9 times less (487 kB vs. 5 MB)
unrolled_any(isempty, itr) any(isempty, itr) Tuple 128 nonempty non-singleton Tuples better (optimized out vs. 521 kB allocs) 698 times less (30 ns vs. 21 μs) similar (44 ms vs. 31 ms) similar (1 MB vs. 1 MB)
unrolled_any((x->length(x) == rand(8:10)), itr) any((x->length(x) == rand(8:10)), itr) Tuple 1 empty singleton Tuple similar (9 LLVM lines) similar (40 ns vs. 40 ns) similar (57 ms vs. 57 ms) similar (2 MB vs. 3 MB)
unrolled_any((x->length(x) == rand(8:10)), itr) any((x->length(x) == rand(8:10)), itr) Tuple 1 nonempty singleton Tuple similar (9 LLVM lines) similar (40 ns vs. 40 ns) similar (57 ms vs. 59 ms) similar (2 MB vs. 3 MB)
unrolled_any((x->length(x) == rand(8:10)), itr) any((x->length(x) == rand(8:10)), itr) Tuple 1 nonempty non-singleton Tuple similar (9 LLVM lines) similar (40 ns vs. 40 ns) similar (54 ms vs. 58 ms) similar (2 MB vs. 3 MB)
unrolled_any((x->length(x) == rand(8:10)), itr) any((x->length(x) == rand(8:10)), itr) Tuple 2 identical nonempty singleton Tuples similar (18 LLVM lines) similar (50 ns vs. 40 ns) similar (58 ms vs. 59 ms) similar (2 MB vs. 3 MB)
unrolled_any((x->length(x) == rand(8:10)), itr) any((x->length(x) == rand(8:10)), itr) Tuple 8 identical nonempty singleton Tuples similar (48 LLVM lines) similar (50 ns vs. 60 ns) similar (75 ms vs. 60 ms) similar (3 MB vs. 3 MB)
unrolled_any((x->length(x) == rand(8:10)), itr) any((x->length(x) == rand(8:10)), itr) Tuple 32 identical nonempty singleton Tuples similar (168 LLVM lines) similar (100 ns vs. 110 ns) similar (79 ms vs. 60 ms) similar (3 MB vs. 3 MB)
unrolled_any((x->length(x) == rand(8:10)), itr) any((x->length(x) == rand(8:10)), itr) Tuple 128 identical nonempty singleton Tuples similar (648 LLVM lines) similar (320 ns vs. 310 ns) similar (99 ms vs. 60 ms) similar (5 MB vs. 3 MB)
unrolled_any((x->length(x) == rand(8:10)), itr) any((x->length(x) == rand(8:10)), itr) Tuple 2 identical nonempty non-singleton Tuples similar (18 LLVM lines) similar (40 ns vs. 50 ns) similar (55 ms vs. 60 ms) similar (2 MB vs. 3 MB)
unrolled_any((x->length(x) == rand(8:10)), itr) any((x->length(x) == rand(8:10)), itr) Tuple 8 identical nonempty non-singleton Tuples similar (48 LLVM lines) similar (60 ns vs. 50 ns) similar (72 ms vs. 61 ms) similar (3 MB vs. 3 MB)
unrolled_any((x->length(x) == rand(8:10)), itr) any((x->length(x) == rand(8:10)), itr) Tuple 32 identical nonempty non-singleton Tuples similar (168 LLVM lines) similar (100 ns vs. 110 ns) similar (76 ms vs. 61 ms) similar (3 MB vs. 3 MB)
unrolled_any((x->length(x) == rand(8:10)), itr) any((x->length(x) == rand(8:10)), itr) Tuple 128 identical nonempty non-singleton Tuples similar (648 LLVM lines) similar (320 ns vs. 350 ns) similar (98 ms vs. 61 ms) 2 times more (6 MB vs. 3 MB)
unrolled_any((x->length(x) == rand(8:10)), itr) any((x->length(x) == rand(8:10)), itr) Tuple 2 empty & nonempty singleton Tuples similar (18 LLVM lines) similar (40 ns vs. 40 ns) similar (58 ms vs. 60 ms) similar (3 MB vs. 3 MB)
unrolled_any((x->length(x) == rand(8:10)), itr) any((x->length(x) == rand(8:10)), itr) Tuple 8 empty & nonempty singleton Tuples better (48 LLVM lines vs. 96 B allocs) 32 times less (60 ns vs. 2 μs) similar (74 ms vs. 81 ms) similar (3 MB vs. 5 MB)
unrolled_any((x->length(x) == rand(8:10)), itr) any((x->length(x) == rand(8:10)), itr) Tuple 32 empty & nonempty singleton Tuples better (168 LLVM lines vs. 496 B allocs) 627 times less (110 ns vs. 69 μs) similar (79 ms vs. 121 ms) 2 times less (4 MB vs. 9 MB)
unrolled_any((x->length(x) == rand(8:10)), itr) any((x->length(x) == rand(8:10)), itr) Tuple 128 empty & nonempty singleton Tuples similar (648 LLVM lines) 4 times less (320 ns vs. 1 μs) similar (100 ms vs. 61 ms) similar (6 MB vs. 3 MB)
unrolled_any((x->length(x) == rand(8:10)), itr) any((x->length(x) == rand(8:10)), itr) Tuple 2 nonempty singleton Tuples similar (18 LLVM lines) similar (40 ns vs. 40 ns) similar (58 ms vs. 60 ms) similar (3 MB vs. 3 MB)
unrolled_any((x->length(x) == rand(8:10)), itr) any((x->length(x) == rand(8:10)), itr) Tuple 8 nonempty singleton Tuples better (48 LLVM lines vs. 112 B allocs) 296 times less (50 ns vs. 15 μs) similar (74 ms vs. 82 ms) similar (3 MB vs. 5 MB)
unrolled_any((x->length(x) == rand(8:10)), itr) any((x->length(x) == rand(8:10)), itr) Tuple 32 nonempty singleton Tuples better (168 LLVM lines vs. 496 B allocs) 692 times less (110 ns vs. 76 μs) similar (80 ms vs. 122 ms) 2 times less (4 MB vs. 9 MB)
unrolled_any((x->length(x) == rand(8:10)), itr) any((x->length(x) == rand(8:10)), itr) Tuple 128 nonempty singleton Tuples similar (648 LLVM lines) 4 times less (320 ns vs. 1 μs) similar (100 ms vs. 61 ms) similar (6 MB vs. 3 MB)
unrolled_any((x->length(x) == rand(8:10)), itr) any((x->length(x) == rand(8:10)), itr) Tuple 2 nonempty non-singleton Tuples similar (18 LLVM lines) similar (40 ns vs. 40 ns) similar (55 ms vs. 61 ms) similar (3 MB vs. 3 MB)
unrolled_any((x->length(x) == rand(8:10)), itr) any((x->length(x) == rand(8:10)), itr) Tuple 8 nonempty non-singleton Tuples better (48 LLVM lines vs. 2 kB allocs) 191 times less (60 ns vs. 11 μs) similar (72 ms vs. 85 ms) similar (3 MB vs. 5 MB)
unrolled_any((x->length(x) == rand(8:10)), itr) any((x->length(x) == rand(8:10)), itr) Tuple 32 nonempty non-singleton Tuples better (168 LLVM lines vs. 45 kB allocs) 706 times less (110 ns vs. 78 μs) similar (77 ms vs. 131 ms) 2 times less (4 MB vs. 9 MB)
unrolled_any((x->length(x) == rand(8:10)), itr) any((x->length(x) == rand(8:10)), itr) Tuple 128 nonempty non-singleton Tuples better (648 LLVM lines vs. 521 kB allocs) 66 times less (320 ns vs. 21 μs) similar (98 ms vs. 63 ms) similar (7 MB vs. 3 MB)
unrolled_all(isempty, itr) all(isempty, itr) Tuple 1 empty singleton Tuple similar (optimized out) similar (40 ns vs. 30 ns) similar (23 ms vs. 24 ms) 3 times less (55 kB vs. 165 kB)
unrolled_all(isempty, itr) all(isempty, itr) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (30 ns vs. 30 ns) similar (23 ms vs. 24 ms) 3 times less (89 kB vs. 283 kB)
unrolled_all(isempty, itr) all(isempty, itr) Tuple 1 nonempty non-singleton Tuple similar (optimized out) similar (40 ns vs. 30 ns) similar (21 ms vs. 25 ms) 5 times less (62 kB vs. 326 kB)
unrolled_all(isempty, itr) all(isempty, itr) Tuple 2 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (23 ms vs. 24 ms) 3 times less (90 kB vs. 332 kB)
unrolled_all(isempty, itr) all(isempty, itr) Tuple 8 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (39 ms vs. 24 ms) 2 times less (163 kB vs. 332 kB)
unrolled_all(isempty, itr) all(isempty, itr) Tuple 32 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (40 ms vs. 24 ms) similar (250 kB vs. 332 kB)
unrolled_all(isempty, itr) all(isempty, itr) Tuple 128 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (44 ms vs. 24 ms) similar (601 kB vs. 332 kB)
unrolled_all(isempty, itr) all(isempty, itr) Tuple 2 identical nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (21 ms vs. 25 ms) 5 times less (64 kB vs. 376 kB)
unrolled_all(isempty, itr) all(isempty, itr) Tuple 8 identical nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (36 ms vs. 25 ms) 2 times less (161 kB vs. 401 kB)
unrolled_all(isempty, itr) all(isempty, itr) Tuple 32 identical nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (37 ms vs. 25 ms) similar (249 kB vs. 401 kB)
unrolled_all(isempty, itr) all(isempty, itr) Tuple 128 identical nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (41 ms vs. 25 ms) similar (600 kB vs. 402 kB)
unrolled_all(isempty, itr) all(isempty, itr) Tuple 2 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (24 ms vs. 25 ms) 4 times less (92 kB vs. 415 kB)
unrolled_all(isempty, itr) all(isempty, itr) Tuple 8 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (38 ms vs. 25 ms) 5 times less (166 kB vs. 860 kB)
unrolled_all(isempty, itr) all(isempty, itr) Tuple 32 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (40 ms vs. 28 ms) 11 times less (253 kB vs. 3 MB)
unrolled_all(isempty, itr) all(isempty, itr) Tuple 128 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (44 ms vs. 29 ms) similar (604 kB vs. 508 kB)
unrolled_all(isempty, itr) all(isempty, itr) Tuple 2 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (24 ms vs. 24 ms) 4 times less (90 kB vs. 398 kB)
unrolled_all(isempty, itr) all(isempty, itr) Tuple 8 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (39 ms vs. 25 ms) 5 times less (163 kB vs. 842 kB)
unrolled_all(isempty, itr) all(isempty, itr) Tuple 32 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (40 ms vs. 28 ms) 11 times less (251 kB vs. 3 MB)
unrolled_all(isempty, itr) all(isempty, itr) Tuple 128 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (44 ms vs. 24 ms) similar (602 kB vs. 347 kB)
unrolled_all(isempty, itr) all(isempty, itr) Tuple 2 nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (20 ms vs. 25 ms) 4 times less (89 kB vs. 397 kB)
unrolled_all(isempty, itr) all(isempty, itr) Tuple 8 nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (36 ms vs. 28 ms) 5 times less (162 kB vs. 898 kB)
unrolled_all(isempty, itr) all(isempty, itr) Tuple 32 nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (37 ms vs. 38 ms) 14 times less (250 kB vs. 3 MB)
unrolled_all(isempty, itr) all(isempty, itr) Tuple 128 nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (41 ms vs. 25 ms) similar (601 kB vs. 414 kB)
unrolled_all((x->length(x) == rand(8:10)), itr) all((x->length(x) == rand(8:10)), itr) Tuple 1 empty singleton Tuple similar (9 LLVM lines) similar (40 ns vs. 40 ns) similar (57 ms vs. 58 ms) similar (2 MB vs. 3 MB)
unrolled_all((x->length(x) == rand(8:10)), itr) all((x->length(x) == rand(8:10)), itr) Tuple 1 nonempty singleton Tuple similar (9 LLVM lines) similar (40 ns vs. 40 ns) similar (57 ms vs. 58 ms) similar (2 MB vs. 3 MB)
unrolled_all((x->length(x) == rand(8:10)), itr) all((x->length(x) == rand(8:10)), itr) Tuple 1 nonempty non-singleton Tuple similar (9 LLVM lines) similar (40 ns vs. 40 ns) similar (55 ms vs. 59 ms) similar (2 MB vs. 3 MB)
unrolled_all((x->length(x) == rand(8:10)), itr) all((x->length(x) == rand(8:10)), itr) Tuple 2 identical nonempty singleton Tuples similar (18 LLVM lines) similar (40 ns vs. 40 ns) similar (58 ms vs. 59 ms) similar (2 MB vs. 3 MB)
unrolled_all((x->length(x) == rand(8:10)), itr) all((x->length(x) == rand(8:10)), itr) Tuple 8 identical nonempty singleton Tuples similar (48 LLVM lines) similar (40 ns vs. 40 ns) similar (74 ms vs. 60 ms) similar (3 MB vs. 3 MB)
unrolled_all((x->length(x) == rand(8:10)), itr) all((x->length(x) == rand(8:10)), itr) Tuple 32 identical nonempty singleton Tuples similar (168 LLVM lines) similar (40 ns vs. 40 ns) similar (80 ms vs. 60 ms) similar (3 MB vs. 3 MB)
unrolled_all((x->length(x) == rand(8:10)), itr) all((x->length(x) == rand(8:10)), itr) Tuple 128 identical nonempty singleton Tuples similar (648 LLVM lines) similar (40 ns vs. 40 ns) similar (100 ms vs. 60 ms) similar (5 MB vs. 3 MB)
unrolled_all((x->length(x) == rand(8:10)), itr) all((x->length(x) == rand(8:10)), itr) Tuple 2 identical nonempty non-singleton Tuples similar (18 LLVM lines) similar (40 ns vs. 40 ns) similar (56 ms vs. 60 ms) similar (2 MB vs. 3 MB)
unrolled_all((x->length(x) == rand(8:10)), itr) all((x->length(x) == rand(8:10)), itr) Tuple 8 identical nonempty non-singleton Tuples similar (48 LLVM lines) similar (40 ns vs. 40 ns) similar (72 ms vs. 61 ms) similar (3 MB vs. 3 MB)
unrolled_all((x->length(x) == rand(8:10)), itr) all((x->length(x) == rand(8:10)), itr) Tuple 32 identical nonempty non-singleton Tuples similar (168 LLVM lines) similar (40 ns vs. 40 ns) similar (77 ms vs. 61 ms) similar (3 MB vs. 3 MB)
unrolled_all((x->length(x) == rand(8:10)), itr) all((x->length(x) == rand(8:10)), itr) Tuple 128 identical nonempty non-singleton Tuples similar (648 LLVM lines) similar (40 ns vs. 40 ns) similar (99 ms vs. 61 ms) 2 times more (7 MB vs. 3 MB)
unrolled_all((x->length(x) == rand(8:10)), itr) all((x->length(x) == rand(8:10)), itr) Tuple 2 empty & nonempty singleton Tuples similar (18 LLVM lines) similar (40 ns vs. 40 ns) similar (58 ms vs. 60 ms) similar (3 MB vs. 3 MB)
unrolled_all((x->length(x) == rand(8:10)), itr) all((x->length(x) == rand(8:10)), itr) Tuple 8 empty & nonempty singleton Tuples similar (48 LLVM lines) 7 times less (40 ns vs. 280 ns) similar (75 ms vs. 61 ms) similar (3 MB vs. 3 MB)
unrolled_all((x->length(x) == rand(8:10)), itr) all((x->length(x) == rand(8:10)), itr) Tuple 32 empty & nonempty singleton Tuples similar (168 LLVM lines) 60 times less (40 ns vs. 2 μs) similar (80 ms vs. 64 ms) similar (4 MB vs. 5 MB)
unrolled_all((x->length(x) == rand(8:10)), itr) all((x->length(x) == rand(8:10)), itr) Tuple 128 empty & nonempty singleton Tuples similar (648 LLVM lines) similar (40 ns vs. 40 ns) similar (101 ms vs. 61 ms) similar (6 MB vs. 3 MB)
unrolled_all((x->length(x) == rand(8:10)), itr) all((x->length(x) == rand(8:10)), itr) Tuple 2 nonempty singleton Tuples similar (18 LLVM lines) similar (40 ns vs. 40 ns) similar (58 ms vs. 60 ms) similar (3 MB vs. 3 MB)
unrolled_all((x->length(x) == rand(8:10)), itr) all((x->length(x) == rand(8:10)), itr) Tuple 8 nonempty singleton Tuples similar (48 LLVM lines) 46 times less (40 ns vs. 2 μs) similar (74 ms vs. 60 ms) similar (3 MB vs. 3 MB)
unrolled_all((x->length(x) == rand(8:10)), itr) all((x->length(x) == rand(8:10)), itr) Tuple 32 nonempty singleton Tuples similar (168 LLVM lines) 61 times less (40 ns vs. 2 μs) similar (80 ms vs. 63 ms) similar (4 MB vs. 5 MB)
unrolled_all((x->length(x) == rand(8:10)), itr) all((x->length(x) == rand(8:10)), itr) Tuple 128 nonempty singleton Tuples similar (648 LLVM lines) similar (40 ns vs. 40 ns) similar (101 ms vs. 61 ms) similar (6 MB vs. 3 MB)
unrolled_all((x->length(x) == rand(8:10)), itr) all((x->length(x) == rand(8:10)), itr) Tuple 2 nonempty non-singleton Tuples similar (18 LLVM lines) similar (40 ns vs. 40 ns) similar (55 ms vs. 61 ms) similar (3 MB vs. 3 MB)
unrolled_all((x->length(x) == rand(8:10)), itr) all((x->length(x) == rand(8:10)), itr) Tuple 8 nonempty non-singleton Tuples better (48 LLVM lines vs. 448 B allocs) 49 times less (40 ns vs. 2 μs) similar (72 ms vs. 64 ms) similar (3 MB vs. 4 MB)
unrolled_all((x->length(x) == rand(8:10)), itr) all((x->length(x) == rand(8:10)), itr) Tuple 32 nonempty non-singleton Tuples better (168 LLVM lines vs. 3 kB allocs) 71 times less (40 ns vs. 3 μs) similar (78 ms vs. 73 ms) similar (4 MB vs. 6 MB)
unrolled_all((x->length(x) == rand(8:10)), itr) all((x->length(x) == rand(8:10)), itr) Tuple 128 nonempty non-singleton Tuples similar (648 LLVM lines) similar (40 ns vs. 40 ns) similar (100 ms vs. 63 ms) 2 times more (7 MB vs. 3 MB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) foreach((x->@assert(length(x) <= 7)), itr) Tuple 1 empty singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (42 ms vs. 59 ms) 8 times less (66 kB vs. 544 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) foreach((x->@assert(length(x) <= 7)), itr) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (41 ms vs. 58 ms) 5 times less (100 kB vs. 582 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) foreach((x->@assert(length(x) <= 7)), itr) Tuple 1 nonempty non-singleton Tuple similar (optimized out) similar (30 ns vs. 40 ns) similar (39 ms vs. 43 ms) 9 times less (73 kB vs. 726 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) foreach((x->@assert(length(x) <= 7)), itr) Tuple 2 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (42 ms vs. 58 ms) 5 times less (103 kB vs. 585 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) foreach((x->@assert(length(x) <= 7)), itr) Tuple 8 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (55 ms vs. 58 ms) 3 times less (174 kB vs. 606 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) foreach((x->@assert(length(x) <= 7)), itr) Tuple 32 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (56 ms vs. 58 ms) 2 times less (261 kB vs. 703 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) foreach((x->@assert(length(x) <= 7)), itr) Tuple 128 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (59 ms vs. 62 ms) 2 times less (612 kB vs. 1 MB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) foreach((x->@assert(length(x) <= 7)), itr) Tuple 2 identical nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (38 ms vs. 42 ms) 9 times less (80 kB vs. 732 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) foreach((x->@assert(length(x) <= 7)), itr) Tuple 8 identical nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (53 ms vs. 43 ms) 3 times less (203 kB vs. 806 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) foreach((x->@assert(length(x) <= 7)), itr) Tuple 32 identical nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (53 ms vs. 42 ms) 2 times less (399 kB vs. 1005 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) foreach((x->@assert(length(x) <= 7)), itr) Tuple 128 identical nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (57 ms vs. 47 ms) similar (1 MB vs. 2 MB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) foreach((x->@assert(length(x) <= 7)), itr) Tuple 2 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (42 ms vs. 58 ms) 5 times less (112 kB vs. 608 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) foreach((x->@assert(length(x) <= 7)), itr) Tuple 8 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (56 ms vs. 58 ms) 3 times less (212 kB vs. 684 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) foreach((x->@assert(length(x) <= 7)), itr) Tuple 32 empty & nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (57 ms vs. 59 ms) 2 times less (355 kB vs. 891 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) foreach((x->@assert(length(x) <= 7)), itr) Tuple 128 empty & nonempty singleton Tuples better (optimized out vs. 54 LLVM lines w/ Const) 36 times less (30 ns vs. 1 μs) similar (58 ms vs. 65 ms) 2 times less (704 kB vs. 2 MB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) foreach((x->@assert(length(x) <= 7)), itr) Tuple 2 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (42 ms vs. 58 ms) 5 times less (117 kB vs. 613 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) foreach((x->@assert(length(x) <= 7)), itr) Tuple 8 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (55 ms vs. 58 ms) 3 times less (216 kB vs. 688 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) foreach((x->@assert(length(x) <= 7)), itr) Tuple 32 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (56 ms vs. 59 ms) 2 times less (346 kB vs. 868 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) foreach((x->@assert(length(x) <= 7)), itr) Tuple 128 nonempty singleton Tuples better (optimized out vs. 54 LLVM lines w/ Const) 35 times less (30 ns vs. 1 μs) similar (59 ms vs. 65 ms) 2 times less (695 kB vs. 2 MB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) foreach((x->@assert(length(x) <= 7)), itr) Tuple 2 nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (39 ms vs. 43 ms) 6 times less (115 kB vs. 781 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) foreach((x->@assert(length(x) <= 7)), itr) Tuple 8 nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (54 ms vs. 43 ms) 3 times less (233 kB vs. 875 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) foreach((x->@assert(length(x) <= 7)), itr) Tuple 32 nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (54 ms vs. 44 ms) 2 times less (470 kB vs. 1 MB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) foreach((x->@assert(length(x) <= 7)), itr) Tuple 128 nonempty non-singleton Tuples better (optimized out vs. 521 kB allocs) 670 times less (30 ns vs. 20 μs) similar (57 ms vs. 50 ms) 2 times less (1 MB vs. 2 MB)
unrolled_reduce(tuple, itr) reduce(tuple, itr) Tuple 1 empty singleton Tuple similar (optimized out) similar (30 ns vs. 40 ns) 2 times less (23 ms vs. 47 ms) 26 times less (78 kB vs. 2 MB)
unrolled_reduce(tuple, itr) reduce(tuple, itr) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) 2 times less (23 ms vs. 47 ms) 19 times less (108 kB vs. 2 MB)
unrolled_reduce(tuple, itr) reduce(tuple, itr) Tuple 1 nonempty non-singleton Tuple similar (8 LLVM lines) similar (50 ns vs. 40 ns) similar (23 ms vs. 36 ms) 14 times less (224 kB vs. 3 MB)
unrolled_reduce(tuple, itr) reduce(tuple, itr) Tuple 2 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) 2 times less (23 ms vs. 48 ms) 22 times less (110 kB vs. 2 MB)
unrolled_reduce(tuple, itr) reduce(tuple, itr) Tuple 8 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (43 ms vs. 48 ms) similar (2 MB vs. 3 MB)
unrolled_reduce(tuple, itr) reduce(tuple, itr) Tuple 32 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (44 ms vs. 49 ms) similar (2 MB vs. 4 MB)
unrolled_reduce(tuple, itr) reduce(tuple, itr) Tuple 128 identical nonempty singleton Tuples better (optimized out vs. 35 LLVM lines) 91 times less (40 ns vs. 4 μs) similar (48 ms vs. 51 ms) similar (3 MB vs. 2 MB)
unrolled_reduce(tuple, itr) reduce(tuple, itr) Tuple 2 identical nonempty non-singleton Tuples similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (24 ms vs. 37 ms) 13 times less (244 kB vs. 3 MB)
unrolled_reduce(tuple, itr) reduce(tuple, itr) Tuple 8 identical nonempty non-singleton Tuples similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (45 ms vs. 38 ms) similar (2 MB vs. 4 MB)
unrolled_reduce(tuple, itr) reduce(tuple, itr) Tuple 32 identical nonempty non-singleton Tuples similar (20 LLVM lines) similar (50 ns vs. 40 ns) similar (48 ms vs. 43 ms) 2 times less (3 MB vs. 7 MB)
unrolled_reduce(tuple, itr) reduce(tuple, itr) Tuple 128 identical nonempty non-singleton Tuples better (68 LLVM lines vs. 70 kB allocs) 146 times less (70 ns vs. 10 μs) similar (69 ms vs. 40 ms) similar (5 MB vs. 3 MB)
unrolled_reduce(tuple, itr) reduce(tuple, itr) Tuple 2 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) 2 times less (24 ms vs. 48 ms) 25 times less (110 kB vs. 3 MB)
unrolled_reduce(tuple, itr) reduce(tuple, itr) Tuple 8 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (44 ms vs. 49 ms) similar (2 MB vs. 4 MB)
unrolled_reduce(tuple, itr) reduce(tuple, itr) Tuple 32 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (44 ms vs. 51 ms) 2 times less (2 MB vs. 5 MB)
unrolled_reduce(tuple, itr) reduce(tuple, itr) Tuple 128 empty & nonempty singleton Tuples better (optimized out vs. 40 LLVM lines) 99 times less (40 ns vs. 4 μs) similar (49 ms vs. 54 ms) similar (3 MB vs. 3 MB)
unrolled_reduce(tuple, itr) reduce(tuple, itr) Tuple 2 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) 2 times less (24 ms vs. 48 ms) 26 times less (110 kB vs. 3 MB)
unrolled_reduce(tuple, itr) reduce(tuple, itr) Tuple 8 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (43 ms vs. 49 ms) similar (2 MB vs. 4 MB)
unrolled_reduce(tuple, itr) reduce(tuple, itr) Tuple 32 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (45 ms vs. 51 ms) 2 times less (2 MB vs. 5 MB)
unrolled_reduce(tuple, itr) reduce(tuple, itr) Tuple 128 nonempty singleton Tuples better (optimized out vs. 39 LLVM lines) 108 times less (40 ns vs. 4 μs) similar (49 ms vs. 54 ms) similar (3 MB vs. 3 MB)
unrolled_reduce(tuple, itr) reduce(tuple, itr) Tuple 2 nonempty non-singleton Tuples similar (11 LLVM lines) similar (40 ns vs. 40 ns) similar (24 ms vs. 38 ms) 13 times less (270 kB vs. 4 MB)
unrolled_reduce(tuple, itr) reduce(tuple, itr) Tuple 8 nonempty non-singleton Tuples similar (29 LLVM lines) similar (50 ns vs. 50 ns) similar (45 ms vs. 41 ms) 2 times less (2 MB vs. 5 MB)
unrolled_reduce(tuple, itr) reduce(tuple, itr) Tuple 32 nonempty non-singleton Tuples similar (93 LLVM lines) similar (70 ns vs. 70 ns) similar (53 ms vs. 51 ms) 3 times less (3 MB vs. 9 MB)
unrolled_reduce(tuple, itr) reduce(tuple, itr) Tuple 128 nonempty non-singleton Tuples better (548 LLVM lines vs. 792 kB allocs) 333 times less (270 ns vs. 90 μs) 3 times more (140 ms vs. 42 ms) similar (5 MB vs. 4 MB)
unrolled_reduce(tuple, itr; init = ()) reduce(tuple, itr; init = ()) Tuple 1 empty singleton Tuple similar (optimized out) similar (30 ns vs. 40 ns) 2 times less (23 ms vs. 50 ms) 28 times less (92 kB vs. 3 MB)
unrolled_reduce(tuple, itr; init = ()) reduce(tuple, itr; init = ()) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (30 ns vs. 30 ns) 2 times less (23 ms vs. 50 ms) 21 times less (122 kB vs. 3 MB)
unrolled_reduce(tuple, itr; init = ()) reduce(tuple, itr; init = ()) Tuple 1 nonempty non-singleton Tuple similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (24 ms vs. 40 ms) 12 times less (258 kB vs. 3 MB)
unrolled_reduce(tuple, itr; init = ()) reduce(tuple, itr; init = ()) Tuple 2 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) 2 times less (24 ms vs. 50 ms) 22 times less (124 kB vs. 3 MB)
unrolled_reduce(tuple, itr; init = ()) reduce(tuple, itr; init = ()) Tuple 8 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (44 ms vs. 50 ms) similar (2 MB vs. 3 MB)
unrolled_reduce(tuple, itr; init = ()) reduce(tuple, itr; init = ()) Tuple 32 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (45 ms vs. 52 ms) similar (2 MB vs. 4 MB)
unrolled_reduce(tuple, itr; init = ()) reduce(tuple, itr; init = ()) Tuple 128 identical nonempty singleton Tuples better (optimized out vs. 35 LLVM lines) 92 times less (40 ns vs. 4 μs) similar (49 ms vs. 54 ms) similar (3 MB vs. 2 MB)
unrolled_reduce(tuple, itr; init = ()) reduce(tuple, itr; init = ()) Tuple 2 identical nonempty non-singleton Tuples similar (8 LLVM lines) similar (50 ns vs. 40 ns) similar (24 ms vs. 40 ms) 12 times less (278 kB vs. 4 MB)
unrolled_reduce(tuple, itr; init = ()) reduce(tuple, itr; init = ()) Tuple 8 identical nonempty non-singleton Tuples similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (45 ms vs. 42 ms) similar (2 MB vs. 4 MB)
unrolled_reduce(tuple, itr; init = ()) reduce(tuple, itr; init = ()) Tuple 32 identical nonempty non-singleton Tuples similar (20 LLVM lines) similar (40 ns vs. 50 ns) similar (47 ms vs. 47 ms) 2 times less (3 MB vs. 7 MB)
unrolled_reduce(tuple, itr; init = ()) reduce(tuple, itr; init = ()) Tuple 128 identical nonempty non-singleton Tuples better (68 LLVM lines vs. 70 kB allocs) 167 times less (60 ns vs. 10 μs) similar (70 ms vs. 43 ms) similar (5 MB vs. 3 MB)
unrolled_reduce(tuple, itr; init = ()) reduce(tuple, itr; init = ()) Tuple 2 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) 2 times less (24 ms vs. 51 ms) 25 times less (123 kB vs. 3 MB)
unrolled_reduce(tuple, itr; init = ()) reduce(tuple, itr; init = ()) Tuple 8 empty & nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (43 ms vs. 52 ms) 2 times less (2 MB vs. 4 MB)
unrolled_reduce(tuple, itr; init = ()) reduce(tuple, itr; init = ()) Tuple 32 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (44 ms vs. 54 ms) 2 times less (2 MB vs. 5 MB)
unrolled_reduce(tuple, itr; init = ()) reduce(tuple, itr; init = ()) Tuple 128 empty & nonempty singleton Tuples better (optimized out vs. 39 LLVM lines) 135 times less (30 ns vs. 4 μs) similar (49 ms vs. 57 ms) similar (3 MB vs. 3 MB)
unrolled_reduce(tuple, itr; init = ()) reduce(tuple, itr; init = ()) Tuple 2 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) 2 times less (24 ms vs. 51 ms) 25 times less (124 kB vs. 3 MB)
unrolled_reduce(tuple, itr; init = ()) reduce(tuple, itr; init = ()) Tuple 8 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (44 ms vs. 52 ms) 2 times less (2 MB vs. 4 MB)
unrolled_reduce(tuple, itr; init = ()) reduce(tuple, itr; init = ()) Tuple 32 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (45 ms vs. 54 ms) 2 times less (2 MB vs. 5 MB)
unrolled_reduce(tuple, itr; init = ()) reduce(tuple, itr; init = ()) Tuple 128 nonempty singleton Tuples better (optimized out vs. 39 LLVM lines) 144 times less (30 ns vs. 4 μs) similar (49 ms vs. 57 ms) similar (3 MB vs. 3 MB)
unrolled_reduce(tuple, itr; init = ()) reduce(tuple, itr; init = ()) Tuple 2 nonempty non-singleton Tuples similar (11 LLVM lines) similar (40 ns vs. 40 ns) similar (24 ms vs. 41 ms) 13 times less (303 kB vs. 4 MB)
unrolled_reduce(tuple, itr; init = ()) reduce(tuple, itr; init = ()) Tuple 8 nonempty non-singleton Tuples similar (29 LLVM lines) similar (50 ns vs. 50 ns) similar (46 ms vs. 44 ms) 2 times less (2 MB vs. 5 MB)
unrolled_reduce(tuple, itr; init = ()) reduce(tuple, itr; init = ()) Tuple 32 nonempty non-singleton Tuples similar (93 LLVM lines) similar (70 ns vs. 70 ns) similar (52 ms vs. 55 ms) 3 times less (3 MB vs. 9 MB)
unrolled_reduce(tuple, itr; init = ()) reduce(tuple, itr; init = ()) Tuple 128 nonempty non-singleton Tuples better (548 LLVM lines vs. 792 kB allocs) 277 times less (260 ns vs. 72 μs) 3 times more (139 ms vs. 44 ms) similar (5 MB vs. 5 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr) mapreduce((x->(x, length(x))), tuple, itr) Tuple 1 empty singleton Tuple similar (optimized out) similar (30 ns vs. 30 ns) similar (44 ms vs. 67 ms) 8 times less (268 kB vs. 2 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr) mapreduce((x->(x, length(x))), tuple, itr) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (30 ns vs. 30 ns) similar (45 ms vs. 66 ms) 7 times less (299 kB vs. 2 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr) mapreduce((x->(x, length(x))), tuple, itr) Tuple 1 nonempty non-singleton Tuple similar (10 LLVM lines) similar (40 ns vs. 40 ns) similar (45 ms vs. 46 ms) 6 times less (408 kB vs. 3 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr) mapreduce((x->(x, length(x))), tuple, itr) Tuple 2 identical nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 30 ns) similar (44 ms vs. 69 ms) 7 times less (317 kB vs. 2 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr) mapreduce((x->(x, length(x))), tuple, itr) Tuple 8 identical nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (30 ns vs. 40 ns) similar (66 ms vs. 86 ms) similar (2 MB vs. 3 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr) mapreduce((x->(x, length(x))), tuple, itr) Tuple 32 identical nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (30 ns vs. 30 ns) 2 times less (69 ms vs. 157 ms) similar (3 MB vs. 5 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr) mapreduce((x->(x, length(x))), tuple, itr) Tuple 128 identical nonempty singleton Tuples better (31 LLVM lines w/ Const vs. 68 kB allocs) 128 times less (60 ns vs. 8 μs) similar (134 ms vs. 74 ms) 2 times more (6 MB vs. 3 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr) mapreduce((x->(x, length(x))), tuple, itr) Tuple 2 identical nonempty non-singleton Tuples similar (16 LLVM lines) similar (40 ns vs. 40 ns) similar (45 ms vs. 47 ms) 6 times less (453 kB vs. 3 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr) mapreduce((x->(x, length(x))), tuple, itr) Tuple 8 identical nonempty non-singleton Tuples similar (52 LLVM lines) similar (40 ns vs. 50 ns) similar (66 ms vs. 48 ms) similar (3 MB vs. 4 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr) mapreduce((x->(x, length(x))), tuple, itr) Tuple 32 identical nonempty non-singleton Tuples similar (196 LLVM lines) similar (60 ns vs. 60 ns) similar (75 ms vs. 58 ms) similar (4 MB vs. 7 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr) mapreduce((x->(x, length(x))), tuple, itr) Tuple 128 identical nonempty non-singleton Tuples better (772 LLVM lines vs. 140 kB allocs) 64 times less (181 ns vs. 12 μs) 2 times more (134 ms vs. 50 ms) 2 times more (8 MB vs. 3 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr) mapreduce((x->(x, length(x))), tuple, itr) Tuple 2 empty & nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 30 ns) similar (45 ms vs. 70 ms) 8 times less (324 kB vs. 3 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr) mapreduce((x->(x, length(x))), tuple, itr) Tuple 8 empty & nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 40 ns) similar (65 ms vs. 89 ms) similar (2 MB vs. 4 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr) mapreduce((x->(x, length(x))), tuple, itr) Tuple 32 empty & nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 40 ns) 2 times less (69 ms vs. 160 ms) similar (3 MB vs. 6 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr) mapreduce((x->(x, length(x))), tuple, itr) Tuple 128 empty & nonempty singleton Tuples better (37 LLVM lines w/ Const vs. 70 kB allocs) 257 times less (60 ns vs. 15 μs) similar (135 ms vs. 77 ms) similar (7 MB vs. 4 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr) mapreduce((x->(x, length(x))), tuple, itr) Tuple 2 nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 40 ns) similar (45 ms vs. 70 ms) 8 times less (329 kB vs. 3 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr) mapreduce((x->(x, length(x))), tuple, itr) Tuple 8 nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 40 ns) similar (65 ms vs. 88 ms) similar (2 MB vs. 4 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr) mapreduce((x->(x, length(x))), tuple, itr) Tuple 32 nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 40 ns) 2 times less (69 ms vs. 162 ms) similar (3 MB vs. 6 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr) mapreduce((x->(x, length(x))), tuple, itr) Tuple 128 nonempty singleton Tuples better (31 LLVM lines w/ Const vs. 70 kB allocs) 269 times less (60 ns vs. 16 μs) similar (134 ms vs. 78 ms) similar (7 MB vs. 4 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr) mapreduce((x->(x, length(x))), tuple, itr) Tuple 2 nonempty non-singleton Tuples similar (15 LLVM lines) similar (40 ns vs. 50 ns) similar (46 ms vs. 47 ms) 6 times less (504 kB vs. 3 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr) mapreduce((x->(x, length(x))), tuple, itr) Tuple 8 nonempty non-singleton Tuples similar (45 LLVM lines) similar (50 ns vs. 50 ns) similar (69 ms vs. 51 ms) similar (3 MB vs. 5 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr) mapreduce((x->(x, length(x))), tuple, itr) Tuple 32 nonempty non-singleton Tuples similar (169 LLVM lines) similar (80 ns vs. 80 ns) similar (86 ms vs. 63 ms) 2 times less (4 MB vs. 8 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr) mapreduce((x->(x, length(x))), tuple, itr) Tuple 128 nonempty non-singleton Tuples better (876 LLVM lines vs. 864 kB allocs) 309 times less (331 ns vs. 102 μs) 4 times more (230 ms vs. 52 ms) similar (8 MB vs. 5 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr; init = ()) mapreduce((x->(x, length(x))), tuple, itr; init = ()) Tuple 1 empty singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (47 ms vs. 70 ms) 8 times less (295 kB vs. 2 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr; init = ()) mapreduce((x->(x, length(x))), tuple, itr; init = ()) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (30 ns vs. 40 ns) similar (45 ms vs. 70 ms) 7 times less (326 kB vs. 2 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr; init = ()) mapreduce((x->(x, length(x))), tuple, itr; init = ()) Tuple 1 nonempty non-singleton Tuple similar (10 LLVM lines) similar (40 ns vs. 40 ns) similar (45 ms vs. 50 ms) 6 times less (454 kB vs. 3 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr; init = ()) mapreduce((x->(x, length(x))), tuple, itr; init = ()) Tuple 2 identical nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 40 ns) similar (46 ms vs. 73 ms) 7 times less (345 kB vs. 2 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr; init = ()) mapreduce((x->(x, length(x))), tuple, itr; init = ()) Tuple 8 identical nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 30 ns) similar (66 ms vs. 91 ms) similar (2 MB vs. 3 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr; init = ()) mapreduce((x->(x, length(x))), tuple, itr; init = ()) Tuple 32 identical nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 30 ns) 2 times less (70 ms vs. 163 ms) similar (3 MB vs. 5 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr; init = ()) mapreduce((x->(x, length(x))), tuple, itr; init = ()) Tuple 128 identical nonempty singleton Tuples better (31 LLVM lines w/ Const vs. 68 kB allocs) 127 times less (60 ns vs. 8 μs) similar (136 ms vs. 79 ms) 2 times more (6 MB vs. 3 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr; init = ()) mapreduce((x->(x, length(x))), tuple, itr; init = ()) Tuple 2 identical nonempty non-singleton Tuples similar (16 LLVM lines) similar (40 ns vs. 50 ns) similar (46 ms vs. 50 ms) 6 times less (498 kB vs. 3 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr; init = ()) mapreduce((x->(x, length(x))), tuple, itr; init = ()) Tuple 8 identical nonempty non-singleton Tuples similar (52 LLVM lines) similar (40 ns vs. 50 ns) similar (68 ms vs. 53 ms) similar (3 MB vs. 4 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr; init = ()) mapreduce((x->(x, length(x))), tuple, itr; init = ()) Tuple 32 identical nonempty non-singleton Tuples similar (196 LLVM lines) similar (60 ns vs. 70 ns) similar (75 ms vs. 62 ms) similar (4 MB vs. 7 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr; init = ()) mapreduce((x->(x, length(x))), tuple, itr; init = ()) Tuple 128 identical nonempty non-singleton Tuples better (772 LLVM lines vs. 140 kB allocs) 58 times less (180 ns vs. 11 μs) 2 times more (135 ms vs. 54 ms) 2 times more (8 MB vs. 3 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr; init = ()) mapreduce((x->(x, length(x))), tuple, itr; init = ()) Tuple 2 empty & nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 30 ns) similar (46 ms vs. 73 ms) 8 times less (352 kB vs. 3 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr; init = ()) mapreduce((x->(x, length(x))), tuple, itr; init = ()) Tuple 8 empty & nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 40 ns) similar (67 ms vs. 92 ms) similar (2 MB vs. 4 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr; init = ()) mapreduce((x->(x, length(x))), tuple, itr; init = ()) Tuple 32 empty & nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 40 ns) 2 times less (70 ms vs. 166 ms) 2 times less (3 MB vs. 6 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr; init = ()) mapreduce((x->(x, length(x))), tuple, itr; init = ()) Tuple 128 empty & nonempty singleton Tuples better (37 LLVM lines w/ Const vs. 70 kB allocs) 260 times less (60 ns vs. 16 μs) similar (136 ms vs. 81 ms) similar (7 MB vs. 4 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr; init = ()) mapreduce((x->(x, length(x))), tuple, itr; init = ()) Tuple 2 nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 40 ns) similar (45 ms vs. 74 ms) 8 times less (356 kB vs. 3 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr; init = ()) mapreduce((x->(x, length(x))), tuple, itr; init = ()) Tuple 8 nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (30 ns vs. 30 ns) similar (67 ms vs. 92 ms) similar (2 MB vs. 4 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr; init = ()) mapreduce((x->(x, length(x))), tuple, itr; init = ()) Tuple 32 nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 30 ns) 2 times less (70 ms vs. 166 ms) 2 times less (3 MB vs. 6 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr; init = ()) mapreduce((x->(x, length(x))), tuple, itr; init = ()) Tuple 128 nonempty singleton Tuples better (31 LLVM lines w/ Const vs. 70 kB allocs) 258 times less (60 ns vs. 16 μs) similar (135 ms vs. 81 ms) similar (7 MB vs. 4 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr; init = ()) mapreduce((x->(x, length(x))), tuple, itr; init = ()) Tuple 2 nonempty non-singleton Tuples similar (15 LLVM lines) similar (40 ns vs. 40 ns) similar (46 ms vs. 52 ms) 6 times less (549 kB vs. 3 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr; init = ()) mapreduce((x->(x, length(x))), tuple, itr; init = ()) Tuple 8 nonempty non-singleton Tuples similar (45 LLVM lines) similar (50 ns vs. 50 ns) similar (70 ms vs. 55 ms) similar (3 MB vs. 5 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr; init = ()) mapreduce((x->(x, length(x))), tuple, itr; init = ()) Tuple 32 nonempty non-singleton Tuples similar (169 LLVM lines) similar (70 ns vs. 80 ns) similar (87 ms vs. 67 ms) 2 times less (4 MB vs. 8 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr; init = ()) mapreduce((x->(x, length(x))), tuple, itr; init = ()) Tuple 128 nonempty non-singleton Tuples better (876 LLVM lines vs. 864 kB allocs) 348 times less (320 ns vs. 112 μs) 4 times more (230 ms vs. 56 ms) similar (8 MB vs. 5 MB)
unrolled_accumulate(tuple, itr) accumulate(tuple, itr) Tuple 1 empty singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (23 ms vs. 34 ms) 3 times less (129 kB vs. 483 kB)
unrolled_accumulate(tuple, itr) accumulate(tuple, itr) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (30 ns vs. 40 ns) similar (23 ms vs. 35 ms) 3 times less (159 kB vs. 514 kB)
unrolled_accumulate(tuple, itr) accumulate(tuple, itr) Tuple 1 nonempty non-singleton Tuple similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (24 ms vs. 35 ms) 2 times less (367 kB vs. 901 kB)
unrolled_accumulate(tuple, itr) accumulate(tuple, itr) Tuple 2 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (23 ms vs. 42 ms) 6 times less (162 kB vs. 1 MB)
unrolled_accumulate(tuple, itr) accumulate(tuple, itr) Tuple 8 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (49 ms vs. 81 ms) 9 times less (290 kB vs. 3 MB)
unrolled_accumulate(tuple, itr) accumulate(tuple, itr) Tuple 32 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) 4 times less (50 ms vs. 236 ms) 24 times less (432 kB vs. 10 MB)
unrolled_accumulate(tuple, itr) accumulate(tuple, itr) Tuple 2 identical nonempty non-singleton Tuples similar (11 LLVM lines) similar (40 ns vs. 50 ns) similar (24 ms vs. 41 ms) 4 times less (394 kB vs. 2 MB)
unrolled_accumulate(tuple, itr) accumulate(tuple, itr) Tuple 8 identical nonempty non-singleton Tuples similar (38 LLVM lines) similar (50 ns vs. 50 ns) similar (54 ms vs. 50 ms) 6 times less (677 kB vs. 4 MB)
unrolled_accumulate(tuple, itr) accumulate(tuple, itr) Tuple 32 identical nonempty non-singleton Tuples similar (669 LLVM lines) similar (220 ns vs. 220 ns) similar (383 ms vs. 368 ms) 12 times less (1 MB vs. 16 MB)
unrolled_accumulate(tuple, itr) accumulate(tuple, itr) Tuple 2 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (25 ms vs. 42 ms) 6 times less (162 kB vs. 1 MB)
unrolled_accumulate(tuple, itr) accumulate(tuple, itr) Tuple 8 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (49 ms vs. 81 ms) 10 times less (290 kB vs. 3 MB)
unrolled_accumulate(tuple, itr) accumulate(tuple, itr) Tuple 32 empty & nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) 4 times less (50 ms vs. 239 ms) 25 times less (433 kB vs. 11 MB)
unrolled_accumulate(tuple, itr) accumulate(tuple, itr) Tuple 2 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (24 ms vs. 42 ms) 6 times less (162 kB vs. 1 MB)
unrolled_accumulate(tuple, itr) accumulate(tuple, itr) Tuple 8 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (49 ms vs. 81 ms) 10 times less (290 kB vs. 3 MB)
unrolled_accumulate(tuple, itr) accumulate(tuple, itr) Tuple 32 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) 4 times less (50 ms vs. 237 ms) 25 times less (433 kB vs. 11 MB)
unrolled_accumulate(tuple, itr) accumulate(tuple, itr) Tuple 2 nonempty non-singleton Tuples similar (13 LLVM lines) similar (40 ns vs. 40 ns) similar (24 ms vs. 41 ms) 3 times less (420 kB vs. 2 MB)
unrolled_accumulate(tuple, itr) accumulate(tuple, itr) Tuple 8 nonempty non-singleton Tuples similar (85 LLVM lines) similar (60 ns vs. 60 ns) similar (59 ms vs. 58 ms) 7 times less (679 kB vs. 5 MB)
unrolled_accumulate(tuple, itr) accumulate(tuple, itr) Tuple 32 nonempty non-singleton Tuples similar (2973 LLVM lines) similar (2 μs vs. 2 μs) similar (990 ms vs. 732 ms) 12 times less (1 MB vs. 17 MB)
unrolled_accumulate(tuple, itr; init = ()) accumulate(tuple, itr; init = ()) Tuple 1 empty singleton Tuple similar (optimized out) similar (40 ns vs. 30 ns) similar (24 ms vs. 30 ms) 5 times less (143 kB vs. 819 kB)
unrolled_accumulate(tuple, itr; init = ()) accumulate(tuple, itr; init = ()) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (24 ms vs. 30 ms) 4 times less (173 kB vs. 850 kB)
unrolled_accumulate(tuple, itr; init = ()) accumulate(tuple, itr; init = ()) Tuple 1 nonempty non-singleton Tuple similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (24 ms vs. 33 ms) 2 times less (401 kB vs. 1 MB)
unrolled_accumulate(tuple, itr; init = ()) accumulate(tuple, itr; init = ()) Tuple 2 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (24 ms vs. 36 ms) 6 times less (176 kB vs. 1 MB)
unrolled_accumulate(tuple, itr; init = ()) accumulate(tuple, itr; init = ()) Tuple 8 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (49 ms vs. 75 ms) 9 times less (303 kB vs. 3 MB)
unrolled_accumulate(tuple, itr; init = ()) accumulate(tuple, itr; init = ()) Tuple 32 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) 4 times less (50 ms vs. 231 ms) 23 times less (446 kB vs. 10 MB)
unrolled_accumulate(tuple, itr; init = ()) accumulate(tuple, itr; init = ()) Tuple 2 identical nonempty non-singleton Tuples similar (11 LLVM lines) similar (40 ns vs. 40 ns) similar (24 ms vs. 35 ms) 3 times less (429 kB vs. 2 MB)
unrolled_accumulate(tuple, itr; init = ()) accumulate(tuple, itr; init = ()) Tuple 8 identical nonempty non-singleton Tuples similar (38 LLVM lines) similar (50 ns vs. 50 ns) similar (53 ms vs. 45 ms) 6 times less (711 kB vs. 4 MB)
unrolled_accumulate(tuple, itr; init = ()) accumulate(tuple, itr; init = ()) Tuple 32 identical nonempty non-singleton Tuples similar (669 LLVM lines) similar (230 ns vs. 230 ns) similar (370 ms vs. 375 ms) 11 times less (1 MB vs. 16 MB)
unrolled_accumulate(tuple, itr; init = ()) accumulate(tuple, itr; init = ()) Tuple 2 empty & nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (24 ms vs. 36 ms) 6 times less (175 kB vs. 1 MB)
unrolled_accumulate(tuple, itr; init = ()) accumulate(tuple, itr; init = ()) Tuple 8 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (48 ms vs. 76 ms) 10 times less (304 kB vs. 3 MB)
unrolled_accumulate(tuple, itr; init = ()) accumulate(tuple, itr; init = ()) Tuple 32 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) 4 times less (50 ms vs. 230 ms) 24 times less (447 kB vs. 11 MB)
unrolled_accumulate(tuple, itr; init = ()) accumulate(tuple, itr; init = ()) Tuple 2 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (24 ms vs. 36 ms) 6 times less (176 kB vs. 1 MB)
unrolled_accumulate(tuple, itr; init = ()) accumulate(tuple, itr; init = ()) Tuple 8 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (49 ms vs. 75 ms) 10 times less (304 kB vs. 3 MB)
unrolled_accumulate(tuple, itr; init = ()) accumulate(tuple, itr; init = ()) Tuple 32 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) 4 times less (50 ms vs. 232 ms) 24 times less (446 kB vs. 11 MB)
unrolled_accumulate(tuple, itr; init = ()) accumulate(tuple, itr; init = ()) Tuple 2 nonempty non-singleton Tuples similar (13 LLVM lines) similar (40 ns vs. 40 ns) similar (24 ms vs. 35 ms) 3 times less (455 kB vs. 2 MB)
unrolled_accumulate(tuple, itr; init = ()) accumulate(tuple, itr; init = ()) Tuple 8 nonempty non-singleton Tuples similar (85 LLVM lines) similar (60 ns vs. 60 ns) similar (57 ms vs. 50 ms) 6 times less (713 kB vs. 5 MB)
unrolled_accumulate(tuple, itr; init = ()) accumulate(tuple, itr; init = ()) Tuple 32 nonempty non-singleton Tuples similar (2972 LLVM lines) similar (2 μs vs. 2 μs) similar (991 ms vs. 725 ms) 12 times less (1 MB vs. 17 MB)
unrolled_applyat((x->length(x) <= 7), rand(1:length(itr)), itr) length(itr[rand(1:length(itr))]) <= 7 Tuple 1 empty singleton Tuple similar (17 LLVM lines w/ Const) similar (40 ns vs. 40 ns) similar (60 ms vs. 37 ms) similar (3 MB vs. 2 MB)
unrolled_applyat((x->length(x) <= 7), rand(1:length(itr)), itr) length(itr[rand(1:length(itr))]) <= 7 Tuple 1 nonempty singleton Tuple similar (17 LLVM lines w/ Const) similar (40 ns vs. 40 ns) similar (58 ms vs. 37 ms) similar (3 MB vs. 2 MB)
unrolled_applyat((x->length(x) <= 7), rand(1:length(itr)), itr) length(itr[rand(1:length(itr))]) <= 7 Tuple 1 nonempty non-singleton Tuple similar (20 LLVM lines w/ Const) similar (40 ns vs. 40 ns) similar (57 ms vs. 37 ms) similar (3 MB vs. 2 MB)
unrolled_applyat((x->length(x) <= 7), rand(1:length(itr)), itr) length(itr[rand(1:length(itr))]) <= 7 Tuple 2 identical nonempty singleton Tuples similar (18 LLVM lines w/ Const) similar (40 ns vs. 40 ns) similar (59 ms vs. 38 ms) similar (3 MB vs. 2 MB)
unrolled_applyat((x->length(x) <= 7), rand(1:length(itr)), itr) length(itr[rand(1:length(itr))]) <= 7 Tuple 8 identical nonempty singleton Tuples similar (18 LLVM lines w/ Const) similar (40 ns vs. 40 ns) similar (75 ms vs. 38 ms) similar (3 MB vs. 2 MB)
unrolled_applyat((x->length(x) <= 7), rand(1:length(itr)), itr) length(itr[rand(1:length(itr))]) <= 7 Tuple 32 identical nonempty singleton Tuples similar (18 LLVM lines w/ Const) similar (40 ns vs. 40 ns) 2 times more (78 ms vs. 37 ms) 2 times more (5 MB vs. 2 MB)
unrolled_applyat((x->length(x) <= 7), rand(1:length(itr)), itr) length(itr[rand(1:length(itr))]) <= 7 Tuple 128 identical nonempty singleton Tuples similar (18 LLVM lines w/ Const) similar (40 ns vs. 30 ns) 2 times more (95 ms vs. 38 ms) 6 times more (13 MB vs. 2 MB)
unrolled_applyat((x->length(x) <= 7), rand(1:length(itr)), itr) length(itr[rand(1:length(itr))]) <= 7 Tuple 2 identical nonempty non-singleton Tuples similar (20 LLVM lines w/ Const) similar (40 ns vs. 40 ns) similar (57 ms vs. 37 ms) similar (3 MB vs. 2 MB)
unrolled_applyat((x->length(x) <= 7), rand(1:length(itr)), itr) length(itr[rand(1:length(itr))]) <= 7 Tuple 8 identical nonempty non-singleton Tuples similar (20 LLVM lines w/ Const) similar (40 ns vs. 40 ns) similar (73 ms vs. 37 ms) similar (3 MB vs. 2 MB)
unrolled_applyat((x->length(x) <= 7), rand(1:length(itr)), itr) length(itr[rand(1:length(itr))]) <= 7 Tuple 32 identical nonempty non-singleton Tuples similar (20 LLVM lines w/ Const) similar (40 ns vs. 40 ns) 2 times more (77 ms vs. 38 ms) 2 times more (5 MB vs. 2 MB)
unrolled_applyat((x->length(x) <= 7), rand(1:length(itr)), itr) length(itr[rand(1:length(itr))]) <= 7 Tuple 128 identical nonempty non-singleton Tuples similar (20 LLVM lines w/ Const) similar (50 ns vs. 40 ns) 2 times more (93 ms vs. 37 ms) 7 times more (14 MB vs. 2 MB)
unrolled_applyat((x->length(x) <= 7), rand(1:length(itr)), itr) length(itr[rand(1:length(itr))]) <= 7 Tuple 2 empty & nonempty singleton Tuples better (18 LLVM lines w/ Const vs. 11 LLVM lines) similar (40 ns vs. 50 ns) similar (60 ms vs. 37 ms) similar (3 MB vs. 2 MB)
unrolled_applyat((x->length(x) <= 7), rand(1:length(itr)), itr) length(itr[rand(1:length(itr))]) <= 7 Tuple 8 empty & nonempty singleton Tuples better (18 LLVM lines w/ Const vs. 18 LLVM lines) similar (40 ns vs. 50 ns) similar (74 ms vs. 37 ms) similar (3 MB vs. 2 MB)
unrolled_applyat((x->length(x) <= 7), rand(1:length(itr)), itr) length(itr[rand(1:length(itr))]) <= 7 Tuple 32 empty & nonempty singleton Tuples better (18 LLVM lines w/ Const vs. 18 LLVM lines) similar (40 ns vs. 50 ns) 2 times more (78 ms vs. 37 ms) 2 times more (5 MB vs. 2 MB)
unrolled_applyat((x->length(x) <= 7), rand(1:length(itr)), itr) length(itr[rand(1:length(itr))]) <= 7 Tuple 128 empty & nonempty singleton Tuples better (18 LLVM lines w/ Const vs. 18 LLVM lines) similar (40 ns vs. 50 ns) 2 times more (94 ms vs. 37 ms) 6 times more (13 MB vs. 2 MB)
unrolled_applyat((x->length(x) <= 7), rand(1:length(itr)), itr) length(itr[rand(1:length(itr))]) <= 7 Tuple 2 nonempty singleton Tuples better (18 LLVM lines w/ Const vs. 11 LLVM lines) similar (40 ns vs. 50 ns) similar (60 ms vs. 37 ms) similar (3 MB vs. 2 MB)
unrolled_applyat((x->length(x) <= 7), rand(1:length(itr)), itr) length(itr[rand(1:length(itr))]) <= 7 Tuple 8 nonempty singleton Tuples better (18 LLVM lines w/ Const vs. 18 LLVM lines) similar (40 ns vs. 50 ns) 2 times more (74 ms vs. 37 ms) similar (3 MB vs. 2 MB)
unrolled_applyat((x->length(x) <= 7), rand(1:length(itr)), itr) length(itr[rand(1:length(itr))]) <= 7 Tuple 32 nonempty singleton Tuples better (18 LLVM lines w/ Const vs. 18 LLVM lines) similar (40 ns vs. 50 ns) 2 times more (78 ms vs. 38 ms) 2 times more (5 MB vs. 2 MB)
unrolled_applyat((x->length(x) <= 7), rand(1:length(itr)), itr) length(itr[rand(1:length(itr))]) <= 7 Tuple 128 nonempty singleton Tuples better (18 LLVM lines w/ Const vs. 18 LLVM lines) similar (40 ns vs. 50 ns) 2 times more (94 ms vs. 38 ms) 6 times more (13 MB vs. 2 MB)
unrolled_applyat((x->length(x) <= 7), rand(1:length(itr)), itr) length(itr[rand(1:length(itr))]) <= 7 Tuple 2 nonempty non-singleton Tuples better (20 LLVM lines w/ Const vs. 64 B allocs) similar (40 ns vs. 70 ns) similar (57 ms vs. 37 ms) similar (3 MB vs. 2 MB)
unrolled_applyat((x->length(x) <= 7), rand(1:length(itr)), itr) length(itr[rand(1:length(itr))]) <= 7 Tuple 8 nonempty non-singleton Tuples better (20 LLVM lines w/ Const vs. 224 B allocs) similar (40 ns vs. 70 ns) similar (73 ms vs. 38 ms) similar (3 MB vs. 2 MB)
unrolled_applyat((x->length(x) <= 7), rand(1:length(itr)), itr) length(itr[rand(1:length(itr))]) <= 7 Tuple 32 nonempty non-singleton Tuples better (20 LLVM lines w/ Const vs. 1 kB allocs) similar (50 ns vs. 80 ns) 2 times more (77 ms vs. 37 ms) 2 times more (5 MB vs. 2 MB)
unrolled_applyat((x->length(x) <= 7), rand(1:length(itr)), itr) length(itr[rand(1:length(itr))]) <= 7 Tuple 128 nonempty non-singleton Tuples better (20 LLVM lines w/ Const vs. 4 kB allocs) 2 times less (80 ns vs. 190 ns) 2 times more (93 ms vs. 37 ms) 7 times more (14 MB vs. 2 MB)
unrolled_in(nothing, itr) nothing in itr Tuple 1 empty singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (25 ms vs. 23 ms) 2 times more (132 kB vs. 49 kB)
unrolled_in(nothing, itr) nothing in itr Tuple 1 nonempty singleton Tuple similar (optimized out) similar (30 ns vs. 40 ns) similar (25 ms vs. 23 ms) similar (162 kB vs. 164 kB)
unrolled_in(nothing, itr) nothing in itr Tuple 1 nonempty non-singleton Tuple similar (optimized out) similar (30 ns vs. 40 ns) similar (21 ms vs. 21 ms) similar (138 kB vs. 194 kB)
unrolled_in(nothing, itr) nothing in itr Tuple 2 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (25 ms vs. 26 ms) similar (166 kB vs. 283 kB)
unrolled_in(nothing, itr) nothing in itr Tuple 8 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (41 ms vs. 26 ms) similar (254 kB vs. 283 kB)
unrolled_in(nothing, itr) nothing in itr Tuple 32 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (44 ms vs. 26 ms) similar (406 kB vs. 283 kB)
unrolled_in(nothing, itr) nothing in itr Tuple 128 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (48 ms vs. 26 ms) 3 times more (1011 kB vs. 283 kB)
unrolled_in(nothing, itr) nothing in itr Tuple 2 identical nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (21 ms vs. 24 ms) 2 times less (147 kB vs. 326 kB)
unrolled_in(nothing, itr) nothing in itr Tuple 8 identical nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (37 ms vs. 24 ms) similar (285 kB vs. 352 kB)
unrolled_in(nothing, itr) nothing in itr Tuple 32 identical nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (38 ms vs. 24 ms) similar (536 kB vs. 352 kB)
unrolled_in(nothing, itr) nothing in itr Tuple 128 identical nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (44 ms vs. 24 ms) 4 times more (2 MB vs. 352 kB)
unrolled_in(nothing, itr) nothing in itr Tuple 2 empty & nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (28 ms vs. 28 ms) similar (194 kB vs. 315 kB)
unrolled_in(nothing, itr) nothing in itr Tuple 8 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (47 ms vs. 29 ms) similar (338 kB vs. 340 kB)
unrolled_in(nothing, itr) nothing in itr Tuple 32 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (57 ms vs. 29 ms) similar (616 kB vs. 340 kB)
unrolled_in(nothing, itr) nothing in itr Tuple 128 empty & nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) 2 times more (63 ms vs. 29 ms) 3 times more (1 MB vs. 340 kB)
unrolled_in(nothing, itr) nothing in itr Tuple 2 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (28 ms vs. 28 ms) similar (194 kB vs. 315 kB)
unrolled_in(nothing, itr) nothing in itr Tuple 8 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (48 ms vs. 29 ms) similar (338 kB vs. 340 kB)
unrolled_in(nothing, itr) nothing in itr Tuple 32 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (55 ms vs. 29 ms) similar (588 kB vs. 340 kB)
unrolled_in(nothing, itr) nothing in itr Tuple 128 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) 2 times more (61 ms vs. 29 ms) 3 times more (1 MB vs. 340 kB)
unrolled_in(nothing, itr) nothing in itr Tuple 2 nonempty non-singleton Tuples better (optimized out vs. 64 B allocs) similar (40 ns vs. 70 ns) similar (21 ms vs. 25 ms) similar (199 kB vs. 382 kB)
unrolled_in(nothing, itr) nothing in itr Tuple 8 nonempty non-singleton Tuples better (optimized out vs. 2 kB allocs) 6 times less (30 ns vs. 180 ns) similar (36 ms vs. 26 ms) similar (367 kB vs. 410 kB)
unrolled_in(nothing, itr) nothing in itr Tuple 32 nonempty non-singleton Tuples better (optimized out vs. 37 kB allocs) 76 times less (30 ns vs. 2 μs) similar (38 ms vs. 26 ms) similar (699 kB vs. 445 kB)
unrolled_in(nothing, itr) nothing in itr Tuple 128 nonempty non-singleton Tuples better (optimized out vs. 521 kB allocs) 744 times less (30 ns vs. 22 μs) similar (44 ms vs. 26 ms) similar (2 MB vs. 929 kB)
unrolled_in(itr[1], itr) itr[1] in itr Tuple 1 empty singleton Tuple similar (optimized out) similar (30 ns vs. 30 ns) similar (28 ms vs. 21 ms) 4 times more (136 kB vs. 34 kB)
unrolled_in(itr[1], itr) itr[1] in itr Tuple 1 nonempty singleton Tuple similar (optimized out) similar (40 ns vs. 30 ns) similar (26 ms vs. 26 ms) similar (167 kB vs. 254 kB)
unrolled_in(itr[1], itr) itr[1] in itr Tuple 1 nonempty non-singleton Tuple similar (6 LLVM lines) similar (40 ns vs. 40 ns) similar (24 ms vs. 24 ms) similar (290 kB vs. 260 kB)
unrolled_in(itr[1], itr) itr[1] in itr Tuple 2 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (26 ms vs. 26 ms) similar (168 kB vs. 254 kB)
unrolled_in(itr[1], itr) itr[1] in itr Tuple 8 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (42 ms vs. 26 ms) similar (240 kB vs. 254 kB)
unrolled_in(itr[1], itr) itr[1] in itr Tuple 32 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (43 ms vs. 26 ms) similar (328 kB vs. 254 kB)
unrolled_in(itr[1], itr) itr[1] in itr Tuple 128 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (48 ms vs. 26 ms) 2 times more (677 kB vs. 254 kB)
unrolled_in(itr[1], itr) itr[1] in itr Tuple 2 identical nonempty non-singleton Tuples similar (6 LLVM lines) similar (40 ns vs. 40 ns) similar (25 ms vs. 26 ms) similar (335 kB vs. 335 kB)
unrolled_in(itr[1], itr) itr[1] in itr Tuple 8 identical nonempty non-singleton Tuples similar (6 LLVM lines) similar (40 ns vs. 40 ns) similar (41 ms vs. 27 ms) similar (644 kB vs. 361 kB)
unrolled_in(itr[1], itr) itr[1] in itr Tuple 32 identical nonempty non-singleton Tuples similar (6 LLVM lines) similar (40 ns vs. 40 ns) similar (44 ms vs. 26 ms) 4 times more (2 MB vs. 360 kB)
unrolled_in(itr[1], itr) itr[1] in itr Tuple 128 identical nonempty non-singleton Tuples similar (6 LLVM lines) similar (40 ns vs. 40 ns) 2 times more (63 ms vs. 27 ms) 15 times more (5 MB vs. 361 kB)
unrolled_in(itr[1], itr) itr[1] in itr Tuple 2 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (26 ms vs. 21 ms) similar (168 kB vs. 149 kB)
unrolled_in(itr[1], itr) itr[1] in itr Tuple 8 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (41 ms vs. 21 ms) similar (241 kB vs. 150 kB)
unrolled_in(itr[1], itr) itr[1] in itr Tuple 32 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) 2 times more (43 ms vs. 21 ms) 2 times more (329 kB vs. 150 kB)
unrolled_in(itr[1], itr) itr[1] in itr Tuple 128 empty & nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) 2 times more (48 ms vs. 22 ms) 4 times more (678 kB vs. 150 kB)
unrolled_in(itr[1], itr) itr[1] in itr Tuple 2 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (27 ms vs. 26 ms) similar (168 kB vs. 254 kB)
unrolled_in(itr[1], itr) itr[1] in itr Tuple 8 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (41 ms vs. 25 ms) similar (241 kB vs. 255 kB)
unrolled_in(itr[1], itr) itr[1] in itr Tuple 32 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (43 ms vs. 26 ms) similar (329 kB vs. 255 kB)
unrolled_in(itr[1], itr) itr[1] in itr Tuple 128 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (48 ms vs. 26 ms) 2 times more (678 kB vs. 255 kB)
unrolled_in(itr[1], itr) itr[1] in itr Tuple 2 nonempty non-singleton Tuples similar (6 LLVM lines) similar (40 ns vs. 40 ns) similar (24 ms vs. 27 ms) similar (375 kB vs. 390 kB)
unrolled_in(itr[1], itr) itr[1] in itr Tuple 8 nonempty non-singleton Tuples better (6 LLVM lines vs. 32 B allocs) similar (40 ns vs. 60 ns) similar (40 ms vs. 31 ms) similar (585 kB vs. 571 kB)
unrolled_in(itr[1], itr) itr[1] in itr Tuple 32 nonempty non-singleton Tuples better (6 LLVM lines vs. 32 B allocs) similar (40 ns vs. 60 ns) similar (42 ms vs. 31 ms) similar (1 MB vs. 571 kB)
unrolled_in(itr[1], itr) itr[1] in itr Tuple 128 nonempty non-singleton Tuples better (6 LLVM lines vs. 32 B allocs) similar (40 ns vs. 60 ns) similar (52 ms vs. 31 ms) 5 times more (3 MB vs. 571 kB)
unrolled_in(itr[end], itr) itr[end] in itr Tuple 1 empty singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (27 ms vs. 22 ms) 4 times more (136 kB vs. 34 kB)
unrolled_in(itr[end], itr) itr[end] in itr Tuple 1 nonempty singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (26 ms vs. 26 ms) similar (167 kB vs. 254 kB)
unrolled_in(itr[end], itr) itr[end] in itr Tuple 1 nonempty non-singleton Tuple similar (6 LLVM lines) similar (40 ns vs. 40 ns) similar (24 ms vs. 24 ms) similar (290 kB vs. 260 kB)
unrolled_in(itr[end], itr) itr[end] in itr Tuple 2 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (26 ms vs. 26 ms) similar (168 kB vs. 254 kB)
unrolled_in(itr[end], itr) itr[end] in itr Tuple 8 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (42 ms vs. 26 ms) similar (240 kB vs. 254 kB)
unrolled_in(itr[end], itr) itr[end] in itr Tuple 32 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (44 ms vs. 26 ms) similar (328 kB vs. 254 kB)
unrolled_in(itr[end], itr) itr[end] in itr Tuple 128 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (48 ms vs. 26 ms) 2 times more (677 kB vs. 254 kB)
unrolled_in(itr[end], itr) itr[end] in itr Tuple 2 identical nonempty non-singleton Tuples similar (6 LLVM lines) similar (40 ns vs. 40 ns) similar (25 ms vs. 26 ms) similar (335 kB vs. 335 kB)
unrolled_in(itr[end], itr) itr[end] in itr Tuple 8 identical nonempty non-singleton Tuples similar (6 LLVM lines) similar (40 ns vs. 40 ns) similar (41 ms vs. 27 ms) similar (644 kB vs. 361 kB)
unrolled_in(itr[end], itr) itr[end] in itr Tuple 32 identical nonempty non-singleton Tuples similar (6 LLVM lines) similar (40 ns vs. 40 ns) similar (45 ms vs. 27 ms) 4 times more (2 MB vs. 360 kB)
unrolled_in(itr[end], itr) itr[end] in itr Tuple 128 identical nonempty non-singleton Tuples similar (6 LLVM lines) similar (40 ns vs. 40 ns) 2 times more (63 ms vs. 27 ms) 15 times more (5 MB vs. 361 kB)
unrolled_in(itr[end], itr) itr[end] in itr Tuple 2 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (29 ms vs. 30 ms) 2 times less (198 kB vs. 415 kB)
unrolled_in(itr[end], itr) itr[end] in itr Tuple 8 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (48 ms vs. 38 ms) 3 times less (340 kB vs. 1 MB)
unrolled_in(itr[end], itr) itr[end] in itr Tuple 32 empty & nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (58 ms vs. 47 ms) 3 times less (597 kB vs. 2 MB)
unrolled_in(itr[end], itr) itr[end] in itr Tuple 128 empty & nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (63 ms vs. 47 ms) 2 times less (946 kB vs. 2 MB)
unrolled_in(itr[end], itr) itr[end] in itr Tuple 2 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (29 ms vs. 32 ms) 2 times less (198 kB vs. 506 kB)
unrolled_in(itr[end], itr) itr[end] in itr Tuple 8 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (48 ms vs. 41 ms) 3 times less (340 kB vs. 1 MB)
unrolled_in(itr[end], itr) itr[end] in itr Tuple 32 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (43 ms vs. 26 ms) similar (329 kB vs. 255 kB)
unrolled_in(itr[end], itr) itr[end] in itr Tuple 128 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (51 ms vs. 35 ms) similar (708 kB vs. 898 kB)
unrolled_in(itr[end], itr) itr[end] in itr Tuple 2 nonempty non-singleton Tuples better (6 LLVM lines vs. 64 B allocs) similar (40 ns vs. 60 ns) similar (25 ms vs. 28 ms) similar (360 kB vs. 408 kB)
unrolled_in(itr[end], itr) itr[end] in itr Tuple 8 nonempty non-singleton Tuples better (6 LLVM lines vs. 2 kB allocs) 7 times less (40 ns vs. 280 ns) similar (41 ms vs. 34 ms) 2 times less (604 kB vs. 1 MB)
unrolled_in(itr[end], itr) itr[end] in itr Tuple 32 nonempty non-singleton Tuples better (6 LLVM lines vs. 32 B allocs) similar (40 ns vs. 60 ns) similar (43 ms vs. 32 ms) similar (1 MB vs. 571 kB)
unrolled_in(itr[end], itr) itr[end] in itr Tuple 128 nonempty non-singleton Tuples better (6 LLVM lines vs. 4 kB allocs) 5 times less (40 ns vs. 230 ns) similar (54 ms vs. 32 ms) 4 times more (3 MB vs. 674 kB)
unrolled_unique(length, itr) Tuple(unique(length, itr)) Tuple 1 empty singleton Tuple better (optimized out vs. 384 B allocs) 7 times less (40 ns vs. 300 ns) similar (61 ms vs. 70 ms) similar (4 MB vs. 5 MB)
unrolled_unique(length, itr) Tuple(unique(length, itr)) Tuple 1 nonempty singleton Tuple better (optimized out vs. 384 B allocs) 10 times less (30 ns vs. 300 ns) similar (61 ms vs. 69 ms) similar (4 MB vs. 5 MB)
unrolled_unique(length, itr) Tuple(unique(length, itr)) Tuple 1 nonempty non-singleton Tuple better (8 LLVM lines vs. 480 B allocs) 8 times less (40 ns vs. 330 ns) similar (54 ms vs. 67 ms) similar (4 MB vs. 5 MB)
unrolled_unique(length, itr) Tuple(unique(length, itr)) Tuple 2 identical nonempty singleton Tuples better (optimized out vs. 384 B allocs) 7 times less (40 ns vs. 300 ns) similar (68 ms vs. 70 ms) similar (4 MB vs. 5 MB)
unrolled_unique(length, itr) Tuple(unique(length, itr)) Tuple 8 identical nonempty singleton Tuples better (optimized out vs. 384 B allocs) 7 times less (40 ns vs. 310 ns) similar (104 ms vs. 70 ms) similar (7 MB vs. 5 MB)
unrolled_unique(length, itr) Tuple(unique(length, itr)) Tuple 32 identical nonempty singleton Tuples better (optimized out vs. 384 B allocs) 9 times less (40 ns vs. 360 ns) similar (113 ms vs. 70 ms) 2 times more (13 MB vs. 5 MB)
unrolled_unique(length, itr) Tuple(unique(length, itr)) Tuple 128 identical nonempty singleton Tuples better (optimized out vs. 384 B allocs) 13 times less (40 ns vs. 541 ns) 2 times more (153 ms vs. 70 ms) 7 times more (34 MB vs. 5 MB)
unrolled_unique(length, itr) Tuple(unique(length, itr)) Tuple 2 identical nonempty non-singleton Tuples better (8 LLVM lines vs. 480 B allocs) 8 times less (40 ns vs. 340 ns) similar (60 ms vs. 68 ms) similar (5 MB vs. 5 MB)
unrolled_unique(length, itr) Tuple(unique(length, itr)) Tuple 8 identical nonempty non-singleton Tuples better (8 LLVM lines vs. 480 B allocs) 8 times less (40 ns vs. 340 ns) similar (96 ms vs. 68 ms) similar (9 MB vs. 5 MB)
unrolled_unique(length, itr) Tuple(unique(length, itr)) Tuple 32 identical nonempty non-singleton Tuples better (8 LLVM lines vs. 480 B allocs) 9 times less (40 ns vs. 381 ns) similar (111 ms vs. 68 ms) 4 times more (22 MB vs. 5 MB)
unrolled_unique(length, itr) Tuple(unique(length, itr)) Tuple 128 identical nonempty non-singleton Tuples better (8 LLVM lines vs. 480 B allocs) 14 times less (40 ns vs. 580 ns) 3 times more (267 ms vs. 68 ms) 26 times more (129 MB vs. 5 MB)
unrolled_unique(length, itr) Tuple(unique(length, itr)) Tuple 2 empty & nonempty singleton Tuples better (optimized out vs. 448 B allocs) 8 times less (40 ns vs. 340 ns) similar (70 ms vs. 80 ms) similar (4 MB vs. 4 MB)
unrolled_unique(length, itr) Tuple(unique(length, itr)) Tuple 8 empty & nonempty singleton Tuples better (optimized out vs. 448 B allocs) 11 times less (40 ns vs. 461 ns) similar (125 ms vs. 78 ms) similar (8 MB vs. 4 MB)
unrolled_unique(length, itr) Tuple(unique(length, itr)) Tuple 32 empty & nonempty singleton Tuples better (optimized out vs. 448 B allocs) 20 times less (40 ns vs. 801 ns) 2 times more (165 ms vs. 79 ms) 2 times more (13 MB vs. 4 MB)
unrolled_unique(length, itr) Tuple(unique(length, itr)) Tuple 128 empty & nonempty singleton Tuples better (optimized out vs. 448 B allocs) 47 times less (40 ns vs. 2 μs) 2 times more (207 ms vs. 78 ms) 5 times more (26 MB vs. 4 MB)
unrolled_unique(length, itr) Tuple(unique(length, itr)) Tuple 2 nonempty singleton Tuples better (optimized out vs. 448 B allocs) 8 times less (40 ns vs. 330 ns) similar (70 ms vs. 80 ms) similar (4 MB vs. 4 MB)
unrolled_unique(length, itr) Tuple(unique(length, itr)) Tuple 8 nonempty singleton Tuples better (optimized out vs. 448 B allocs) 16 times less (30 ns vs. 480 ns) similar (125 ms vs. 91 ms) similar (8 MB vs. 6 MB)
unrolled_unique(length, itr) Tuple(unique(length, itr)) Tuple 32 nonempty singleton Tuples better (optimized out vs. 448 B allocs) 32 times less (40 ns vs. 1 μs) similar (157 ms vs. 107 ms) similar (13 MB vs. 7 MB)
unrolled_unique(length, itr) Tuple(unique(length, itr)) Tuple 128 nonempty singleton Tuples better (optimized out vs. 448 B allocs) 59 times less (40 ns vs. 2 μs) similar (202 ms vs. 107 ms) 3 times more (25 MB vs. 7 MB)
unrolled_unique(length, itr) Tuple(unique(length, itr)) Tuple 2 nonempty non-singleton Tuples better (11 LLVM lines vs. 592 B allocs) 7 times less (50 ns vs. 381 ns) similar (60 ms vs. 80 ms) similar (5 MB vs. 4 MB)
unrolled_unique(length, itr) Tuple(unique(length, itr)) Tuple 8 nonempty non-singleton Tuples better (17 LLVM lines vs. 2 kB allocs) 16 times less (40 ns vs. 651 ns) similar (101 ms vs. 93 ms) 2 times more (12 MB vs. 6 MB)
unrolled_unique(length, itr) Tuple(unique(length, itr)) Tuple 32 nonempty non-singleton Tuples better (26 LLVM lines vs. 38 kB allocs) 81 times less (50 ns vs. 4 μs) similar (132 ms vs. 114 ms) 4 times more (32 MB vs. 7 MB)
unrolled_unique(length, itr) Tuple(unique(length, itr)) Tuple 128 nonempty non-singleton Tuples better (26 LLVM lines vs. 522 kB allocs) 452 times less (50 ns vs. 23 μs) 2 times more (335 ms vs. 113 ms) 23 times more (163 MB vs. 7 MB)
unrolled_unique(itr) Tuple(unique(itr)) Tuple 1 empty singleton Tuple better (optimized out vs. 256 B allocs) 9 times less (30 ns vs. 280 ns) similar (61 ms vs. 89 ms) 2 times less (4 MB vs. 7 MB)
unrolled_unique(itr) Tuple(unique(itr)) Tuple 1 nonempty singleton Tuple better (optimized out vs. 256 B allocs) 9 times less (30 ns vs. 281 ns) similar (61 ms vs. 93 ms) 2 times less (4 MB vs. 8 MB)
unrolled_unique(itr) Tuple(unique(itr)) Tuple 1 nonempty non-singleton Tuple better (8 LLVM lines vs. 480 B allocs) 8 times less (40 ns vs. 320 ns) similar (53 ms vs. 97 ms) similar (4 MB vs. 7 MB)
unrolled_unique(itr) Tuple(unique(itr)) Tuple 2 identical nonempty singleton Tuples better (optimized out vs. 256 B allocs) 7 times less (40 ns vs. 300 ns) similar (68 ms vs. 96 ms) similar (4 MB vs. 8 MB)
unrolled_unique(itr) Tuple(unique(itr)) Tuple 8 identical nonempty singleton Tuples better (optimized out vs. 256 B allocs) 7 times less (40 ns vs. 310 ns) similar (103 ms vs. 95 ms) similar (6 MB vs. 8 MB)
unrolled_unique(itr) Tuple(unique(itr)) Tuple 32 identical nonempty singleton Tuples better (optimized out vs. 256 B allocs) 12 times less (30 ns vs. 360 ns) similar (108 ms vs. 95 ms) similar (9 MB vs. 8 MB)
unrolled_unique(itr) Tuple(unique(itr)) Tuple 128 identical nonempty singleton Tuples better (optimized out vs. 256 B allocs) 19 times less (30 ns vs. 571 ns) similar (133 ms vs. 96 ms) 2 times more (20 MB vs. 8 MB)
unrolled_unique(itr) Tuple(unique(itr)) Tuple 2 identical nonempty non-singleton Tuples better (21 LLVM lines vs. 480 B allocs) 8 times less (40 ns vs. 321 ns) similar (63 ms vs. 101 ms) similar (6 MB vs. 8 MB)
unrolled_unique(itr) Tuple(unique(itr)) Tuple 8 identical nonempty non-singleton Tuples fewer allocs (48 B allocs vs. 480 B allocs) similar (180 ns vs. 350 ns) similar (136 ms vs. 100 ms) 3 times more (23 MB vs. 8 MB)
unrolled_unique(itr) Tuple(unique(itr)) Tuple 32 identical nonempty non-singleton Tuples fewer allocs (48 B allocs vs. 480 B allocs) similar (701 ns vs. 450 ns) 5 times more (563 ms vs. 100 ms) 12 times more (93 MB vs. 8 MB)
unrolled_unique(itr) Tuple(unique(itr)) Tuple 128 identical nonempty non-singleton Tuples fewer allocs (48 B allocs vs. 480 B allocs) 7 times more (6 μs vs. 871 ns) 87 times more (9 s vs. 101 ms) 146 times more (1 GB vs. 8 MB)
unrolled_unique(itr) Tuple(unique(itr)) Tuple 2 empty & nonempty singleton Tuples better (optimized out vs. 448 B allocs) 8 times less (40 ns vs. 330 ns) similar (70 ms vs. 135 ms) 2 times less (4 MB vs. 10 MB)
unrolled_unique(itr) Tuple(unique(itr)) Tuple 8 empty & nonempty singleton Tuples better (optimized out vs. 576 B allocs) 19 times less (30 ns vs. 590 ns) similar (126 ms vs. 202 ms) 2 times less (8 MB vs. 18 MB)
unrolled_unique(itr) Tuple(unique(itr)) Tuple 32 empty & nonempty singleton Tuples better (optimized out vs. 960 B allocs) 45 times less (40 ns vs. 2 μs) 2 times less (167 ms vs. 337 ms) 2 times less (13 MB vs. 34 MB)
unrolled_unique(itr) Tuple(unique(itr)) Tuple 128 empty & nonempty singleton Tuples better (optimized out vs. 2 kB allocs) 124 times less (40 ns vs. 5 μs) similar (213 ms vs. 338 ms) similar (26 MB vs. 34 MB)
unrolled_unique(itr) Tuple(unique(itr)) Tuple 2 nonempty singleton Tuples better (optimized out vs. 448 B allocs) 8 times less (40 ns vs. 320 ns) 2 times less (70 ms vs. 145 ms) 2 times less (4 MB vs. 12 MB)
unrolled_unique(itr) Tuple(unique(itr)) Tuple 8 nonempty singleton Tuples better (optimized out vs. 576 B allocs) 27 times less (40 ns vs. 1 μs) similar (125 ms vs. 232 ms) 2 times less (8 MB vs. 22 MB)
unrolled_unique(itr) Tuple(unique(itr)) Tuple 32 nonempty singleton Tuples better (optimized out vs. 960 B allocs) 69 times less (40 ns vs. 3 μs) 2 times less (159 ms vs. 351 ms) 2 times less (13 MB vs. 35 MB)
unrolled_unique(itr) Tuple(unique(itr)) Tuple 128 nonempty singleton Tuples better (optimized out vs. 2 kB allocs) 155 times less (40 ns vs. 6 μs) similar (207 ms vs. 351 ms) similar (25 MB vs. 35 MB)
unrolled_unique(itr) Tuple(unique(itr)) Tuple 2 nonempty non-singleton Tuples better (11 LLVM lines vs. 640 B allocs) 9 times less (40 ns vs. 390 ns) 2 times less (60 ms vs. 146 ms) 2 times less (5 MB vs. 11 MB)
unrolled_unique(itr) Tuple(unique(itr)) Tuple 8 nonempty non-singleton Tuples fewer allocs (320 B allocs vs. 2 kB allocs) 7 times less (190 ns vs. 1 μs) similar (143 ms vs. 245 ms) similar (25 MB vs. 20 MB)
unrolled_unique(itr) Tuple(unique(itr)) Tuple 32 nonempty non-singleton Tuples fewer allocs (784 B allocs vs. 39 kB allocs) 11 times less (560 ns vs. 6 μs) similar (362 ms vs. 391 ms) 2 times more (78 MB vs. 33 MB)
unrolled_unique(itr) Tuple(unique(itr)) Tuple 128 nonempty non-singleton Tuples fewer allocs (784 B allocs vs. 525 kB allocs) 16 times less (2 μs vs. 38 μs) 8 times more (3 s vs. 394 ms) 23 times more (785 MB vs. 33 MB)
unrolled_allunique(length, itr) allunique(length, itr) Tuple 1 empty singleton Tuple similar (optimized out) similar (30 ns vs. 30 ns) similar (37 ms vs. 21 ms) 51 times more (768 kB vs. 15 kB)
unrolled_allunique(length, itr) allunique(length, itr) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (37 ms vs. 21 ms) 41 times more (803 kB vs. 20 kB)
unrolled_allunique(length, itr) allunique(length, itr) Tuple 1 nonempty non-singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (33 ms vs. 21 ms) 40 times more (794 kB vs. 19 kB)
unrolled_allunique(length, itr) allunique(length, itr) Tuple 2 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (38 ms vs. 24 ms) similar (1 MB vs. 1003 kB)
unrolled_allunique(length, itr) allunique(length, itr) Tuple 8 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (56 ms vs. 37 ms) 3 times less (2 MB vs. 9 MB)
unrolled_allunique(length, itr) allunique(length, itr) Tuple 32 identical nonempty singleton Tuples better (optimized out vs. 320 B allocs) 5 times less (40 ns vs. 210 ns) similar (65 ms vs. 47 ms) 3 times more (8 MB vs. 2 MB)
unrolled_allunique(length, itr) allunique(length, itr) Tuple 128 identical nonempty singleton Tuples better (optimized out vs. 320 B allocs) 5 times less (40 ns vs. 210 ns) 2 times more (102 ms vs. 47 ms) 14 times more (29 MB vs. 2 MB)
unrolled_allunique(length, itr) allunique(length, itr) Tuple 2 identical nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (33 ms vs. 24 ms) similar (1 MB vs. 981 kB)
unrolled_allunique(length, itr) allunique(length, itr) Tuple 8 identical nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (51 ms vs. 37 ms) 3 times less (3 MB vs. 9 MB)
unrolled_allunique(length, itr) allunique(length, itr) Tuple 32 identical nonempty non-singleton Tuples better (optimized out vs. 320 B allocs) 7 times less (30 ns vs. 220 ns) similar (59 ms vs. 41 ms) 3 times more (8 MB vs. 2 MB)
unrolled_allunique(length, itr) allunique(length, itr) Tuple 128 identical nonempty non-singleton Tuples better (optimized out vs. 320 B allocs) 5 times less (40 ns vs. 220 ns) 2 times more (95 ms vs. 41 ms) 14 times more (31 MB vs. 2 MB)
unrolled_allunique(length, itr) allunique(length, itr) Tuple 2 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (38 ms vs. 24 ms) similar (806 kB vs. 1003 kB)
unrolled_allunique(length, itr) allunique(length, itr) Tuple 8 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (55 ms vs. 37 ms) 5 times less (2 MB vs. 9 MB)
unrolled_allunique(length, itr) allunique(length, itr) Tuple 32 empty & nonempty singleton Tuples better (optimized out vs. 320 B allocs) 6 times less (40 ns vs. 240 ns) similar (63 ms vs. 48 ms) 2 times more (4 MB vs. 2 MB)
unrolled_allunique(length, itr) allunique(length, itr) Tuple 128 empty & nonempty singleton Tuples better (optimized out vs. 320 B allocs) 8 times less (30 ns vs. 240 ns) similar (101 ms vs. 55 ms) 7 times more (16 MB vs. 2 MB)
unrolled_allunique(length, itr) allunique(length, itr) Tuple 2 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (39 ms vs. 24 ms) similar (811 kB vs. 1008 kB)
unrolled_allunique(length, itr) allunique(length, itr) Tuple 8 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (56 ms vs. 37 ms) 5 times less (2 MB vs. 9 MB)
unrolled_allunique(length, itr) allunique(length, itr) Tuple 32 nonempty singleton Tuples better (optimized out vs. 320 B allocs) 7 times less (30 ns vs. 230 ns) similar (63 ms vs. 48 ms) 2 times more (4 MB vs. 2 MB)
unrolled_allunique(length, itr) allunique(length, itr) Tuple 128 nonempty singleton Tuples better (optimized out vs. 320 B allocs) 6 times less (40 ns vs. 240 ns) 2 times more (102 ms vs. 48 ms) 7 times more (16 MB vs. 2 MB)
unrolled_allunique(length, itr) allunique(length, itr) Tuple 2 nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (32 ms vs. 24 ms) similar (851 kB vs. 1007 kB)
unrolled_allunique(length, itr) allunique(length, itr) Tuple 8 nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (49 ms vs. 37 ms) 5 times less (2 MB vs. 9 MB)
unrolled_allunique(length, itr) allunique(length, itr) Tuple 32 nonempty non-singleton Tuples better (optimized out vs. 3 kB allocs) 8 times less (40 ns vs. 320 ns) similar (54 ms vs. 42 ms) 2 times more (5 MB vs. 2 MB)
unrolled_allunique(length, itr) allunique(length, itr) Tuple 128 nonempty non-singleton Tuples better (optimized out vs. 8 kB allocs) 18 times less (30 ns vs. 561 ns) similar (76 ms vs. 42 ms) 8 times more (19 MB vs. 2 MB)
unrolled_allequal(length, itr) allequal(length, itr) Tuple 1 empty singleton Tuple similar (optimized out) similar (30 ns vs. 40 ns) similar (34 ms vs. 20 ms) 15 times more (321 kB vs. 21 kB)
unrolled_allequal(length, itr) allequal(length, itr) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (34 ms vs. 20 ms) 13 times more (356 kB vs. 25 kB)
unrolled_allequal(length, itr) allequal(length, itr) Tuple 1 nonempty non-singleton Tuple similar (optimized out) similar (30 ns vs. 40 ns) similar (29 ms vs. 21 ms) 14 times more (369 kB vs. 25 kB)
unrolled_allequal(length, itr) allequal(length, itr) Tuple 2 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (42 ms vs. 23 ms) 4 times more (858 kB vs. 194 kB)
unrolled_allequal(length, itr) allequal(length, itr) Tuple 8 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) 2 times more (68 ms vs. 26 ms) 4 times more (1 MB vs. 297 kB)
unrolled_allequal(length, itr) allequal(length, itr) Tuple 32 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) 2 times more (76 ms vs. 26 ms) 7 times more (2 MB vs. 299 kB)
unrolled_allequal(length, itr) allequal(length, itr) Tuple 128 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) 4 times more (110 ms vs. 26 ms) 20 times more (6 MB vs. 310 kB)
unrolled_allequal(length, itr) allequal(length, itr) Tuple 2 identical nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (30 ms vs. 23 ms) 5 times more (979 kB vs. 187 kB)
unrolled_allequal(length, itr) allequal(length, itr) Tuple 8 identical nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) 2 times more (54 ms vs. 26 ms) 3 times more (1 MB vs. 434 kB)
unrolled_allequal(length, itr) allequal(length, itr) Tuple 32 identical nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) 2 times more (57 ms vs. 27 ms) 6 times more (3 MB vs. 494 kB)
unrolled_allequal(length, itr) allequal(length, itr) Tuple 128 identical nonempty non-singleton Tuples better (optimized out vs. 4 kB allocs) 122 times less (40 ns vs. 5 μs) 2 times more (70 ms vs. 30 ms) 21 times more (9 MB vs. 438 kB)
unrolled_allequal(length, itr) allequal(length, itr) Tuple 2 empty & nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (43 ms vs. 23 ms) 4 times more (855 kB vs. 192 kB)
unrolled_allequal(length, itr) allequal(length, itr) Tuple 8 empty & nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) 2 times more (69 ms vs. 23 ms) 7 times more (1 MB vs. 194 kB)
unrolled_allequal(length, itr) allequal(length, itr) Tuple 32 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) 3 times more (74 ms vs. 23 ms) 13 times more (3 MB vs. 197 kB)
unrolled_allequal(length, itr) allequal(length, itr) Tuple 128 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) 4 times more (106 ms vs. 23 ms) 33 times more (7 MB vs. 208 kB)
unrolled_allequal(length, itr) allequal(length, itr) Tuple 2 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (43 ms vs. 23 ms) 4 times more (860 kB vs. 196 kB)
unrolled_allequal(length, itr) allequal(length, itr) Tuple 8 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) 2 times more (68 ms vs. 24 ms) 6 times more (1 MB vs. 198 kB)
unrolled_allequal(length, itr) allequal(length, itr) Tuple 32 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) 3 times more (74 ms vs. 23 ms) 13 times more (3 MB vs. 202 kB)
unrolled_allequal(length, itr) allequal(length, itr) Tuple 128 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) 4 times more (106 ms vs. 24 ms) 32 times more (7 MB vs. 212 kB)
unrolled_allequal(length, itr) allequal(length, itr) Tuple 2 nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (30 ms vs. 23 ms) 3 times more (1006 kB vs. 260 kB)
unrolled_allequal(length, itr) allequal(length, itr) Tuple 8 nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) 2 times more (55 ms vs. 23 ms) 5 times more (2 MB vs. 292 kB)
unrolled_allequal(length, itr) allequal(length, itr) Tuple 32 nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) 2 times more (58 ms vs. 23 ms) 10 times more (4 MB vs. 331 kB)
unrolled_allequal(length, itr) allequal(length, itr) Tuple 128 nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) 3 times more (70 ms vs. 23 ms) 35 times more (10 MB vs. 283 kB)
unrolled_sum(length, itr) sum(length, itr) Tuple 1 empty singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (37 ms vs. 53 ms) 8 times less (250 kB vs. 2 MB)
unrolled_sum(length, itr) sum(length, itr) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (30 ns vs. 40 ns) similar (37 ms vs. 53 ms) 7 times less (281 kB vs. 2 MB)
unrolled_sum(length, itr) sum(length, itr) Tuple 1 nonempty non-singleton Tuple similar (optimized out) similar (30 ns vs. 40 ns) similar (37 ms vs. 33 ms) 9 times less (254 kB vs. 2 MB)
unrolled_sum(length, itr) sum(length, itr) Tuple 2 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (38 ms vs. 56 ms) 7 times less (305 kB vs. 2 MB)
unrolled_sum(length, itr) sum(length, itr) Tuple 8 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (58 ms vs. 55 ms) similar (2 MB vs. 2 MB)
unrolled_sum(length, itr) sum(length, itr) Tuple 32 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (62 ms vs. 56 ms) similar (3 MB vs. 2 MB)
unrolled_sum(length, itr) sum(length, itr) Tuple 128 identical nonempty singleton Tuples better (optimized out vs. 6 LLVM lines) similar (40 ns vs. 40 ns) similar (75 ms vs. 59 ms) 2 times more (6 MB vs. 2 MB)
unrolled_sum(length, itr) sum(length, itr) Tuple 2 identical nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (37 ms vs. 33 ms) 8 times less (282 kB vs. 2 MB)
unrolled_sum(length, itr) sum(length, itr) Tuple 8 identical nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (59 ms vs. 34 ms) similar (2 MB vs. 3 MB)
unrolled_sum(length, itr) sum(length, itr) Tuple 32 identical nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (61 ms vs. 34 ms) similar (3 MB vs. 3 MB)
unrolled_sum(length, itr) sum(length, itr) Tuple 128 identical nonempty non-singleton Tuples better (optimized out vs. 6 LLVM lines) similar (40 ns vs. 40 ns) 2 times more (75 ms vs. 37 ms) 2 times more (6 MB vs. 3 MB)
unrolled_sum(length, itr) sum(length, itr) Tuple 2 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (37 ms vs. 56 ms) 8 times less (304 kB vs. 2 MB)
unrolled_sum(length, itr) sum(length, itr) Tuple 8 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (58 ms vs. 61 ms) similar (2 MB vs. 3 MB)
unrolled_sum(length, itr) sum(length, itr) Tuple 32 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (61 ms vs. 72 ms) similar (3 MB vs. 4 MB)
unrolled_sum(length, itr) sum(length, itr) Tuple 128 empty & nonempty singleton Tuples better (optimized out vs. 26 LLVM lines) 35 times less (30 ns vs. 1 μs) similar (74 ms vs. 62 ms) similar (6 MB vs. 3 MB)
unrolled_sum(length, itr) sum(length, itr) Tuple 2 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (38 ms vs. 56 ms) 8 times less (309 kB vs. 3 MB)
unrolled_sum(length, itr) sum(length, itr) Tuple 8 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (58 ms vs. 61 ms) similar (2 MB vs. 3 MB)
unrolled_sum(length, itr) sum(length, itr) Tuple 32 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (61 ms vs. 72 ms) similar (3 MB vs. 4 MB)
unrolled_sum(length, itr) sum(length, itr) Tuple 128 nonempty singleton Tuples better (optimized out vs. 26 LLVM lines) 26 times less (40 ns vs. 1 μs) similar (76 ms vs. 62 ms) similar (6 MB vs. 3 MB)
unrolled_sum(length, itr) sum(length, itr) Tuple 2 nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (37 ms vs. 34 ms) 9 times less (308 kB vs. 3 MB)
unrolled_sum(length, itr) sum(length, itr) Tuple 8 nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (58 ms vs. 35 ms) similar (2 MB vs. 4 MB)
unrolled_sum(length, itr) sum(length, itr) Tuple 32 nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (62 ms vs. 36 ms) similar (3 MB vs. 4 MB)
unrolled_sum(length, itr) sum(length, itr) Tuple 128 nonempty non-singleton Tuples better (optimized out vs. 521 kB allocs) 524 times less (40 ns vs. 21 μs) similar (75 ms vs. 40 ms) similar (6 MB vs. 4 MB)
unrolled_prod(length, itr) prod(length, itr) Tuple 1 empty singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (37 ms vs. 59 ms) 9 times less (250 kB vs. 2 MB)
unrolled_prod(length, itr) prod(length, itr) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (30 ns vs. 40 ns) similar (37 ms vs. 60 ms) 8 times less (281 kB vs. 2 MB)
unrolled_prod(length, itr) prod(length, itr) Tuple 1 nonempty non-singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (37 ms vs. 39 ms) 10 times less (254 kB vs. 3 MB)
unrolled_prod(length, itr) prod(length, itr) Tuple 2 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (38 ms vs. 63 ms) 8 times less (305 kB vs. 2 MB)
unrolled_prod(length, itr) prod(length, itr) Tuple 8 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (60 ms vs. 62 ms) similar (2 MB vs. 3 MB)
unrolled_prod(length, itr) prod(length, itr) Tuple 32 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (61 ms vs. 63 ms) similar (3 MB vs. 3 MB)
unrolled_prod(length, itr) prod(length, itr) Tuple 128 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (74 ms vs. 65 ms) 2 times more (6 MB vs. 2 MB)
unrolled_prod(length, itr) prod(length, itr) Tuple 2 identical nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (37 ms vs. 40 ms) 9 times less (282 kB vs. 3 MB)
unrolled_prod(length, itr) prod(length, itr) Tuple 8 identical nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (58 ms vs. 40 ms) similar (2 MB vs. 3 MB)
unrolled_prod(length, itr) prod(length, itr) Tuple 32 identical nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (62 ms vs. 41 ms) similar (3 MB vs. 4 MB)
unrolled_prod(length, itr) prod(length, itr) Tuple 128 identical nonempty non-singleton Tuples similar (optimized out) similar (31 ns vs. 30 ns) similar (75 ms vs. 43 ms) 2 times more (6 MB vs. 3 MB)
unrolled_prod(length, itr) prod(length, itr) Tuple 2 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (38 ms vs. 63 ms) 9 times less (304 kB vs. 3 MB)
unrolled_prod(length, itr) prod(length, itr) Tuple 8 empty & nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (58 ms vs. 68 ms) similar (2 MB vs. 3 MB)
unrolled_prod(length, itr) prod(length, itr) Tuple 32 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (62 ms vs. 78 ms) similar (3 MB vs. 4 MB)
unrolled_prod(length, itr) prod(length, itr) Tuple 128 empty & nonempty singleton Tuples better (optimized out vs. 19 LLVM lines) 26 times less (40 ns vs. 1 μs) similar (75 ms vs. 68 ms) similar (6 MB vs. 3 MB)
unrolled_prod(length, itr) prod(length, itr) Tuple 2 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (38 ms vs. 63 ms) 9 times less (309 kB vs. 3 MB)
unrolled_prod(length, itr) prod(length, itr) Tuple 8 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (58 ms vs. 72 ms) similar (2 MB vs. 3 MB)
unrolled_prod(length, itr) prod(length, itr) Tuple 32 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (62 ms vs. 79 ms) similar (3 MB vs. 4 MB)
unrolled_prod(length, itr) prod(length, itr) Tuple 128 nonempty singleton Tuples better (optimized out vs. 26 LLVM lines) 35 times less (30 ns vs. 1 μs) similar (75 ms vs. 69 ms) similar (6 MB vs. 3 MB)
unrolled_prod(length, itr) prod(length, itr) Tuple 2 nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (37 ms vs. 40 ms) 10 times less (308 kB vs. 3 MB)
unrolled_prod(length, itr) prod(length, itr) Tuple 8 nonempty non-singleton Tuples similar (optimized out) similar (31 ns vs. 40 ns) similar (58 ms vs. 41 ms) similar (2 MB vs. 4 MB)
unrolled_prod(length, itr) prod(length, itr) Tuple 32 nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (62 ms vs. 43 ms) similar (3 MB vs. 5 MB)
unrolled_prod(length, itr) prod(length, itr) Tuple 128 nonempty non-singleton Tuples better (optimized out vs. 521 kB allocs) 524 times less (40 ns vs. 21 μs) similar (75 ms vs. 47 ms) similar (6 MB vs. 4 MB)
unrolled_cumsum(length, itr) Tuple(cumsum(Iterators.map(length, itr))) Tuple 1 empty singleton Tuple better (optimized out vs. 80 B allocs) 3 times less (40 ns vs. 130 ns) similar (37 ms vs. 54 ms) 6 times less (429 kB vs. 3 MB)
unrolled_cumsum(length, itr) Tuple(cumsum(Iterators.map(length, itr))) Tuple 1 nonempty singleton Tuple better (optimized out vs. 80 B allocs) 4 times less (30 ns vs. 140 ns) similar (38 ms vs. 54 ms) 6 times less (460 kB vs. 3 MB)
unrolled_cumsum(length, itr) Tuple(cumsum(Iterators.map(length, itr))) Tuple 1 nonempty non-singleton Tuple better (optimized out vs. 80 B allocs) 3 times less (40 ns vs. 130 ns) similar (38 ms vs. 47 ms) 7 times less (433 kB vs. 3 MB)
unrolled_cumsum(length, itr) Tuple(cumsum(Iterators.map(length, itr))) Tuple 2 identical nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 112 B allocs) 3 times less (40 ns vs. 150 ns) similar (38 ms vs. 57 ms) 7 times less (498 kB vs. 4 MB)
unrolled_cumsum(length, itr) Tuple(cumsum(Iterators.map(length, itr))) Tuple 8 identical nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 208 B allocs) 6 times less (40 ns vs. 270 ns) similar (56 ms vs. 56 ms) 4 times less (839 kB vs. 4 MB)
unrolled_cumsum(length, itr) Tuple(cumsum(Iterators.map(length, itr))) Tuple 32 identical nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 592 B allocs) 27 times less (30 ns vs. 811 ns) similar (64 ms vs. 57 ms) 2 times less (2 MB vs. 4 MB)
unrolled_cumsum(length, itr) Tuple(cumsum(Iterators.map(length, itr))) Tuple 128 identical nonempty singleton Tuples better (37 LLVM lines w/ Const vs. 2 kB allocs) 48 times less (60 ns vs. 3 μs) 5 times more (335 ms vs. 58 ms) 2 times more (8 MB vs. 4 MB)
unrolled_cumsum(length, itr) Tuple(cumsum(Iterators.map(length, itr))) Tuple 2 identical nonempty non-singleton Tuples better (7 LLVM lines w/ Const vs. 112 B allocs) 5 times less (30 ns vs. 150 ns) similar (38 ms vs. 48 ms) 8 times less (475 kB vs. 4 MB)
unrolled_cumsum(length, itr) Tuple(cumsum(Iterators.map(length, itr))) Tuple 8 identical nonempty non-singleton Tuples better (7 LLVM lines w/ Const vs. 208 B allocs) 9 times less (30 ns vs. 271 ns) similar (56 ms vs. 49 ms) 4 times less (868 kB vs. 4 MB)
unrolled_cumsum(length, itr) Tuple(cumsum(Iterators.map(length, itr))) Tuple 32 identical nonempty non-singleton Tuples better (7 LLVM lines w/ Const vs. 592 B allocs) 26 times less (30 ns vs. 801 ns) similar (64 ms vs. 50 ms) 2 times less (2 MB vs. 4 MB)
unrolled_cumsum(length, itr) Tuple(cumsum(Iterators.map(length, itr))) Tuple 128 identical nonempty non-singleton Tuples better (37 LLVM lines w/ Const vs. 2 kB allocs) 48 times less (60 ns vs. 3 μs) 6 times more (338 ms vs. 52 ms) 2 times more (8 MB vs. 4 MB)
unrolled_cumsum(length, itr) Tuple(cumsum(Iterators.map(length, itr))) Tuple 2 empty & nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 112 B allocs) 5 times less (30 ns vs. 161 ns) similar (38 ms vs. 58 ms) 7 times less (497 kB vs. 4 MB)
unrolled_cumsum(length, itr) Tuple(cumsum(Iterators.map(length, itr))) Tuple 8 empty & nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 208 B allocs) 8 times less (40 ns vs. 350 ns) similar (56 ms vs. 59 ms) 4 times less (849 kB vs. 4 MB)
unrolled_cumsum(length, itr) Tuple(cumsum(Iterators.map(length, itr))) Tuple 32 empty & nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 592 B allocs) 27 times less (40 ns vs. 1 μs) similar (63 ms vs. 58 ms) 2 times less (2 MB vs. 4 MB)
unrolled_cumsum(length, itr) Tuple(cumsum(Iterators.map(length, itr))) Tuple 128 empty & nonempty singleton Tuples better (37 LLVM lines w/ Const vs. 2 kB allocs) 66 times less (60 ns vs. 4 μs) 5 times more (335 ms vs. 59 ms) 2 times more (8 MB vs. 4 MB)
unrolled_cumsum(length, itr) Tuple(cumsum(Iterators.map(length, itr))) Tuple 2 nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 112 B allocs) 4 times less (40 ns vs. 170 ns) similar (38 ms vs. 58 ms) 7 times less (502 kB vs. 4 MB)
unrolled_cumsum(length, itr) Tuple(cumsum(Iterators.map(length, itr))) Tuple 8 nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 208 B allocs) 8 times less (40 ns vs. 331 ns) similar (57 ms vs. 59 ms) 4 times less (853 kB vs. 4 MB)
unrolled_cumsum(length, itr) Tuple(cumsum(Iterators.map(length, itr))) Tuple 32 nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 592 B allocs) 27 times less (40 ns vs. 1 μs) similar (64 ms vs. 58 ms) 2 times less (2 MB vs. 4 MB)
unrolled_cumsum(length, itr) Tuple(cumsum(Iterators.map(length, itr))) Tuple 128 nonempty singleton Tuples better (37 LLVM lines w/ Const vs. 2 kB allocs) 66 times less (60 ns vs. 4 μs) 5 times more (339 ms vs. 59 ms) 2 times more (8 MB vs. 4 MB)
unrolled_cumsum(length, itr) Tuple(cumsum(Iterators.map(length, itr))) Tuple 2 nonempty non-singleton Tuples better (7 LLVM lines w/ Const vs. 176 B allocs) 5 times less (30 ns vs. 170 ns) similar (38 ms vs. 50 ms) 8 times less (502 kB vs. 4 MB)
unrolled_cumsum(length, itr) Tuple(cumsum(Iterators.map(length, itr))) Tuple 8 nonempty non-singleton Tuples better (7 LLVM lines w/ Const vs. 2 kB allocs) 10 times less (40 ns vs. 431 ns) similar (56 ms vs. 53 ms) 4 times less (869 kB vs. 4 MB)
unrolled_cumsum(length, itr) Tuple(cumsum(Iterators.map(length, itr))) Tuple 32 nonempty non-singleton Tuples better (7 LLVM lines w/ Const vs. 37 kB allocs) 111 times less (30 ns vs. 3 μs) similar (64 ms vs. 51 ms) 2 times less (2 MB vs. 4 MB)
unrolled_cumsum(length, itr) Tuple(cumsum(Iterators.map(length, itr))) Tuple 128 nonempty non-singleton Tuples better (37 LLVM lines w/ Const vs. 523 kB allocs) 438 times less (60 ns vs. 26 μs) 6 times more (337 ms vs. 52 ms) similar (8 MB vs. 4 MB)
unrolled_cumprod(length, itr) Tuple(cumprod(Iterators.map(length, itr))) Tuple 1 empty singleton Tuple better (optimized out vs. 80 B allocs) 3 times less (40 ns vs. 140 ns) similar (37 ms vs. 57 ms) 7 times less (429 kB vs. 3 MB)
unrolled_cumprod(length, itr) Tuple(cumprod(Iterators.map(length, itr))) Tuple 1 nonempty singleton Tuple better (optimized out vs. 80 B allocs) 4 times less (30 ns vs. 140 ns) similar (38 ms vs. 57 ms) 6 times less (460 kB vs. 3 MB)
unrolled_cumprod(length, itr) Tuple(cumprod(Iterators.map(length, itr))) Tuple 1 nonempty non-singleton Tuple better (optimized out vs. 80 B allocs) 3 times less (40 ns vs. 140 ns) similar (38 ms vs. 50 ms) 7 times less (433 kB vs. 3 MB)
unrolled_cumprod(length, itr) Tuple(cumprod(Iterators.map(length, itr))) Tuple 2 identical nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 112 B allocs) 3 times less (40 ns vs. 150 ns) similar (38 ms vs. 59 ms) 7 times less (498 kB vs. 4 MB)
unrolled_cumprod(length, itr) Tuple(cumprod(Iterators.map(length, itr))) Tuple 8 identical nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 208 B allocs) 6 times less (40 ns vs. 270 ns) similar (57 ms vs. 60 ms) 4 times less (839 kB vs. 4 MB)
unrolled_cumprod(length, itr) Tuple(cumprod(Iterators.map(length, itr))) Tuple 32 identical nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 592 B allocs) 27 times less (30 ns vs. 811 ns) similar (64 ms vs. 60 ms) 2 times less (2 MB vs. 4 MB)
unrolled_cumprod(length, itr) Tuple(cumprod(Iterators.map(length, itr))) Tuple 128 identical nonempty singleton Tuples better (37 LLVM lines w/ Const vs. 2 kB allocs) 49 times less (60 ns vs. 3 μs) 5 times more (339 ms vs. 61 ms) 2 times more (8 MB vs. 4 MB)
unrolled_cumprod(length, itr) Tuple(cumprod(Iterators.map(length, itr))) Tuple 2 identical nonempty non-singleton Tuples better (7 LLVM lines w/ Const vs. 112 B allocs) 5 times less (30 ns vs. 150 ns) similar (38 ms vs. 51 ms) 8 times less (475 kB vs. 4 MB)
unrolled_cumprod(length, itr) Tuple(cumprod(Iterators.map(length, itr))) Tuple 8 identical nonempty non-singleton Tuples better (7 LLVM lines w/ Const vs. 208 B allocs) 9 times less (30 ns vs. 270 ns) similar (56 ms vs. 52 ms) 4 times less (868 kB vs. 4 MB)
unrolled_cumprod(length, itr) Tuple(cumprod(Iterators.map(length, itr))) Tuple 32 identical nonempty non-singleton Tuples better (7 LLVM lines w/ Const vs. 592 B allocs) 19 times less (40 ns vs. 791 ns) similar (64 ms vs. 53 ms) 2 times less (2 MB vs. 4 MB)
unrolled_cumprod(length, itr) Tuple(cumprod(Iterators.map(length, itr))) Tuple 128 identical nonempty non-singleton Tuples better (37 LLVM lines w/ Const vs. 2 kB allocs) 48 times less (60 ns vs. 3 μs) 6 times more (340 ms vs. 53 ms) 2 times more (8 MB vs. 4 MB)
unrolled_cumprod(length, itr) Tuple(cumprod(Iterators.map(length, itr))) Tuple 2 empty & nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 112 B allocs) 4 times less (40 ns vs. 160 ns) similar (38 ms vs. 60 ms) 8 times less (497 kB vs. 4 MB)
unrolled_cumprod(length, itr) Tuple(cumprod(Iterators.map(length, itr))) Tuple 8 empty & nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 208 B allocs) 11 times less (30 ns vs. 330 ns) similar (57 ms vs. 61 ms) 4 times less (849 kB vs. 4 MB)
unrolled_cumprod(length, itr) Tuple(cumprod(Iterators.map(length, itr))) Tuple 32 empty & nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 592 B allocs) 26 times less (40 ns vs. 1 μs) similar (64 ms vs. 60 ms) 2 times less (2 MB vs. 4 MB)
unrolled_cumprod(length, itr) Tuple(cumprod(Iterators.map(length, itr))) Tuple 128 empty & nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 2 kB allocs) 65 times less (60 ns vs. 4 μs) 5 times more (332 ms vs. 61 ms) 2 times more (8 MB vs. 4 MB)
unrolled_cumprod(length, itr) Tuple(cumprod(Iterators.map(length, itr))) Tuple 2 nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 112 B allocs) 5 times less (30 ns vs. 160 ns) similar (38 ms vs. 61 ms) 7 times less (502 kB vs. 4 MB)
unrolled_cumprod(length, itr) Tuple(cumprod(Iterators.map(length, itr))) Tuple 8 nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 224 B allocs) 8 times less (40 ns vs. 340 ns) similar (56 ms vs. 62 ms) 4 times less (853 kB vs. 4 MB)
unrolled_cumprod(length, itr) Tuple(cumprod(Iterators.map(length, itr))) Tuple 32 nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 992 B allocs) 29 times less (40 ns vs. 1 μs) similar (64 ms vs. 61 ms) 2 times less (2 MB vs. 4 MB)
unrolled_cumprod(length, itr) Tuple(cumprod(Iterators.map(length, itr))) Tuple 128 nonempty singleton Tuples better (43 LLVM lines w/ Const vs. 4 kB allocs) 74 times less (60 ns vs. 4 μs) 5 times more (339 ms vs. 61 ms) 2 times more (8 MB vs. 4 MB)
unrolled_cumprod(length, itr) Tuple(cumprod(Iterators.map(length, itr))) Tuple 2 nonempty non-singleton Tuples better (7 LLVM lines w/ Const vs. 176 B allocs) 5 times less (30 ns vs. 170 ns) similar (38 ms vs. 53 ms) 8 times less (502 kB vs. 4 MB)
unrolled_cumprod(length, itr) Tuple(cumprod(Iterators.map(length, itr))) Tuple 8 nonempty non-singleton Tuples better (7 LLVM lines w/ Const vs. 2 kB allocs) 11 times less (40 ns vs. 440 ns) similar (56 ms vs. 57 ms) 4 times less (869 kB vs. 4 MB)
unrolled_cumprod(length, itr) Tuple(cumprod(Iterators.map(length, itr))) Tuple 32 nonempty non-singleton Tuples better (7 LLVM lines w/ Const vs. 38 kB allocs) 102 times less (30 ns vs. 3 μs) similar (65 ms vs. 54 ms) 2 times less (2 MB vs. 4 MB)
unrolled_cumprod(length, itr) Tuple(cumprod(Iterators.map(length, itr))) Tuple 128 nonempty non-singleton Tuples better (43 LLVM lines w/ Const vs. 525 kB allocs) 423 times less (60 ns vs. 25 μs) 6 times more (340 ms vs. 54 ms) similar (8 MB vs. 5 MB)
unrolled_count(!isempty, itr) count(!isempty, itr) Tuple 1 empty singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (38 ms vs. 60 ms) 9 times less (386 kB vs. 4 MB)
unrolled_count(!isempty, itr) count(!isempty, itr) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (40 ns vs. 30 ns) similar (38 ms vs. 60 ms) 8 times less (417 kB vs. 4 MB)
unrolled_count(!isempty, itr) count(!isempty, itr) Tuple 1 nonempty non-singleton Tuple similar (optimized out) similar (30 ns vs. 30 ns) similar (38 ms vs. 39 ms) 10 times less (390 kB vs. 4 MB)
unrolled_count(!isempty, itr) count(!isempty, itr) Tuple 2 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (38 ms vs. 61 ms) 6 times less (566 kB vs. 4 MB)
unrolled_count(!isempty, itr) count(!isempty, itr) Tuple 8 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (59 ms vs. 61 ms) similar (3 MB vs. 4 MB)
unrolled_count(!isempty, itr) count(!isempty, itr) Tuple 32 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (65 ms vs. 62 ms) similar (5 MB vs. 4 MB)
unrolled_count(!isempty, itr) count(!isempty, itr) Tuple 128 identical nonempty singleton Tuples better (optimized out vs. 6 LLVM lines) similar (30 ns vs. 40 ns) similar (86 ms vs. 62 ms) 4 times more (15 MB vs. 3 MB)
unrolled_count(!isempty, itr) count(!isempty, itr) Tuple 2 identical nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (38 ms vs. 40 ms) 7 times less (544 kB vs. 4 MB)
unrolled_count(!isempty, itr) count(!isempty, itr) Tuple 8 identical nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (59 ms vs. 40 ms) similar (3 MB vs. 4 MB)
unrolled_count(!isempty, itr) count(!isempty, itr) Tuple 32 identical nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (65 ms vs. 42 ms) similar (5 MB vs. 5 MB)
unrolled_count(!isempty, itr) count(!isempty, itr) Tuple 128 identical nonempty non-singleton Tuples better (optimized out vs. 6 LLVM lines) similar (40 ns vs. 40 ns) 2 times more (85 ms vs. 41 ms) 4 times more (15 MB vs. 4 MB)
unrolled_count(!isempty, itr) count(!isempty, itr) Tuple 2 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (38 ms vs. 62 ms) 6 times less (618 kB vs. 4 MB)
unrolled_count(!isempty, itr) count(!isempty, itr) Tuple 8 empty & nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (60 ms vs. 62 ms) similar (3 MB vs. 5 MB)
unrolled_count(!isempty, itr) count(!isempty, itr) Tuple 32 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (65 ms vs. 64 ms) similar (6 MB vs. 6 MB)
unrolled_count(!isempty, itr) count(!isempty, itr) Tuple 128 empty & nonempty singleton Tuples better (optimized out vs. 25 LLVM lines) 37 times less (30 ns vs. 1 μs) similar (86 ms vs. 65 ms) 3 times more (15 MB vs. 5 MB)
unrolled_count(!isempty, itr) count(!isempty, itr) Tuple 2 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (39 ms vs. 61 ms) 6 times less (623 kB vs. 4 MB)
unrolled_count(!isempty, itr) count(!isempty, itr) Tuple 8 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (60 ms vs. 62 ms) similar (3 MB vs. 5 MB)
unrolled_count(!isempty, itr) count(!isempty, itr) Tuple 32 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (65 ms vs. 64 ms) similar (6 MB vs. 6 MB)
unrolled_count(!isempty, itr) count(!isempty, itr) Tuple 128 nonempty singleton Tuples better (optimized out vs. 25 LLVM lines) 34 times less (30 ns vs. 1 μs) similar (87 ms vs. 66 ms) 3 times more (15 MB vs. 5 MB)
unrolled_count(!isempty, itr) count(!isempty, itr) Tuple 2 nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (38 ms vs. 40 ms) 7 times less (626 kB vs. 4 MB)
unrolled_count(!isempty, itr) count(!isempty, itr) Tuple 8 nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (59 ms vs. 42 ms) similar (3 MB vs. 5 MB)
unrolled_count(!isempty, itr) count(!isempty, itr) Tuple 32 nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (65 ms vs. 44 ms) similar (6 MB vs. 7 MB)
unrolled_count(!isempty, itr) count(!isempty, itr) Tuple 128 nonempty non-singleton Tuples better (optimized out vs. 521 kB allocs) 564 times less (40 ns vs. 23 μs) similar (86 ms vs. 45 ms) 2 times more (16 MB vs. 6 MB)
unrolled_maximum(length, itr) maximum(length, itr) Tuple 1 empty singleton Tuple similar (optimized out) similar (30 ns vs. 30 ns) similar (37 ms vs. 57 ms) 9 times less (236 kB vs. 2 MB)
unrolled_maximum(length, itr) maximum(length, itr) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (40 ns vs. 30 ns) similar (37 ms vs. 57 ms) 8 times less (267 kB vs. 2 MB)
unrolled_maximum(length, itr) maximum(length, itr) Tuple 1 nonempty non-singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (38 ms vs. 37 ms) 10 times less (240 kB vs. 2 MB)
unrolled_maximum(length, itr) maximum(length, itr) Tuple 2 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (38 ms vs. 60 ms) 7 times less (294 kB vs. 2 MB)
unrolled_maximum(length, itr) maximum(length, itr) Tuple 8 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (58 ms vs. 59 ms) similar (2 MB vs. 2 MB)
unrolled_maximum(length, itr) maximum(length, itr) Tuple 32 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (61 ms vs. 62 ms) similar (3 MB vs. 3 MB)
unrolled_maximum(length, itr) maximum(length, itr) Tuple 128 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (75 ms vs. 63 ms) 2 times more (6 MB vs. 2 MB)
unrolled_maximum(length, itr) maximum(length, itr) Tuple 2 identical nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (37 ms vs. 37 ms) 9 times less (271 kB vs. 3 MB)
unrolled_maximum(length, itr) maximum(length, itr) Tuple 8 identical nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (59 ms vs. 37 ms) similar (2 MB vs. 3 MB)
unrolled_maximum(length, itr) maximum(length, itr) Tuple 32 identical nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (61 ms vs. 38 ms) similar (3 MB vs. 3 MB)
unrolled_maximum(length, itr) maximum(length, itr) Tuple 128 identical nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (75 ms vs. 40 ms) 2 times more (6 MB vs. 3 MB)
unrolled_maximum(length, itr) maximum(length, itr) Tuple 2 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (38 ms vs. 60 ms) 9 times less (293 kB vs. 3 MB)
unrolled_maximum(length, itr) maximum(length, itr) Tuple 8 empty & nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (58 ms vs. 66 ms) similar (2 MB vs. 3 MB)
unrolled_maximum(length, itr) maximum(length, itr) Tuple 32 empty & nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (62 ms vs. 76 ms) similar (3 MB vs. 4 MB)
unrolled_maximum(length, itr) maximum(length, itr) Tuple 128 empty & nonempty singleton Tuples better (optimized out vs. 26 LLVM lines) 26 times less (40 ns vs. 1 μs) similar (75 ms vs. 66 ms) similar (6 MB vs. 3 MB)
unrolled_maximum(length, itr) maximum(length, itr) Tuple 2 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (38 ms vs. 60 ms) 9 times less (298 kB vs. 3 MB)
unrolled_maximum(length, itr) maximum(length, itr) Tuple 8 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (59 ms vs. 66 ms) similar (2 MB vs. 3 MB)
unrolled_maximum(length, itr) maximum(length, itr) Tuple 32 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (62 ms vs. 77 ms) similar (3 MB vs. 4 MB)
unrolled_maximum(length, itr) maximum(length, itr) Tuple 128 nonempty singleton Tuples better (optimized out vs. 26 LLVM lines) 26 times less (40 ns vs. 1 μs) similar (75 ms vs. 66 ms) similar (6 MB vs. 3 MB)
unrolled_maximum(length, itr) maximum(length, itr) Tuple 2 nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (38 ms vs. 38 ms) 10 times less (297 kB vs. 3 MB)
unrolled_maximum(length, itr) maximum(length, itr) Tuple 8 nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (58 ms vs. 39 ms) similar (2 MB vs. 4 MB)
unrolled_maximum(length, itr) maximum(length, itr) Tuple 32 nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (62 ms vs. 40 ms) similar (3 MB vs. 5 MB)
unrolled_maximum(length, itr) maximum(length, itr) Tuple 128 nonempty non-singleton Tuples better (optimized out vs. 521 kB allocs) 727 times less (30 ns vs. 22 μs) similar (76 ms vs. 44 ms) similar (6 MB vs. 4 MB)
unrolled_minimum(length, itr) minimum(length, itr) Tuple 1 empty singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (37 ms vs. 58 ms) 9 times less (236 kB vs. 2 MB)
unrolled_minimum(length, itr) minimum(length, itr) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (37 ms vs. 57 ms) 8 times less (267 kB vs. 2 MB)
unrolled_minimum(length, itr) minimum(length, itr) Tuple 1 nonempty non-singleton Tuple similar (optimized out) similar (40 ns vs. 30 ns) similar (37 ms vs. 37 ms) 10 times less (240 kB vs. 3 MB)
unrolled_minimum(length, itr) minimum(length, itr) Tuple 2 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (37 ms vs. 60 ms) 8 times less (294 kB vs. 2 MB)
unrolled_minimum(length, itr) minimum(length, itr) Tuple 8 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (59 ms vs. 60 ms) similar (2 MB vs. 2 MB)
unrolled_minimum(length, itr) minimum(length, itr) Tuple 32 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (62 ms vs. 60 ms) similar (3 MB vs. 3 MB)
unrolled_minimum(length, itr) minimum(length, itr) Tuple 128 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (75 ms vs. 63 ms) 2 times more (6 MB vs. 2 MB)
unrolled_minimum(length, itr) minimum(length, itr) Tuple 2 identical nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (37 ms vs. 37 ms) 9 times less (271 kB vs. 3 MB)
unrolled_minimum(length, itr) minimum(length, itr) Tuple 8 identical nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (58 ms vs. 38 ms) similar (2 MB vs. 3 MB)
unrolled_minimum(length, itr) minimum(length, itr) Tuple 32 identical nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (62 ms vs. 39 ms) similar (3 MB vs. 4 MB)
unrolled_minimum(length, itr) minimum(length, itr) Tuple 128 identical nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (75 ms vs. 40 ms) 2 times more (6 MB vs. 3 MB)
unrolled_minimum(length, itr) minimum(length, itr) Tuple 2 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (37 ms vs. 60 ms) 9 times less (293 kB vs. 3 MB)
unrolled_minimum(length, itr) minimum(length, itr) Tuple 8 empty & nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (58 ms vs. 66 ms) similar (2 MB vs. 3 MB)
unrolled_minimum(length, itr) minimum(length, itr) Tuple 32 empty & nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (62 ms vs. 76 ms) similar (3 MB vs. 4 MB)
unrolled_minimum(length, itr) minimum(length, itr) Tuple 128 empty & nonempty singleton Tuples better (optimized out vs. 26 LLVM lines) 35 times less (30 ns vs. 1 μs) similar (75 ms vs. 66 ms) similar (6 MB vs. 3 MB)
unrolled_minimum(length, itr) minimum(length, itr) Tuple 2 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (37 ms vs. 60 ms) 9 times less (298 kB vs. 3 MB)
unrolled_minimum(length, itr) minimum(length, itr) Tuple 8 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (58 ms vs. 66 ms) similar (2 MB vs. 3 MB)
unrolled_minimum(length, itr) minimum(length, itr) Tuple 32 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (62 ms vs. 77 ms) similar (3 MB vs. 4 MB)
unrolled_minimum(length, itr) minimum(length, itr) Tuple 128 nonempty singleton Tuples better (optimized out vs. 26 LLVM lines) 35 times less (30 ns vs. 1 μs) similar (75 ms vs. 66 ms) similar (6 MB vs. 3 MB)
unrolled_minimum(length, itr) minimum(length, itr) Tuple 2 nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (37 ms vs. 38 ms) 10 times less (297 kB vs. 3 MB)
unrolled_minimum(length, itr) minimum(length, itr) Tuple 8 nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (59 ms vs. 39 ms) similar (2 MB vs. 4 MB)
unrolled_minimum(length, itr) minimum(length, itr) Tuple 32 nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (62 ms vs. 41 ms) similar (3 MB vs. 5 MB)
unrolled_minimum(length, itr) minimum(length, itr) Tuple 128 nonempty non-singleton Tuples better (optimized out vs. 521 kB allocs) 707 times less (30 ns vs. 21 μs) similar (75 ms vs. 44 ms) similar (6 MB vs. 4 MB)
unrolled_extrema(length, itr) extrema(length, itr) Tuple 1 empty singleton Tuple similar (7 LLVM lines w/ Const) similar (40 ns vs. 40 ns) similar (38 ms vs. 64 ms) 14 times less (252 kB vs. 3 MB)
unrolled_extrema(length, itr) extrema(length, itr) Tuple 1 nonempty singleton Tuple similar (7 LLVM lines w/ Const) similar (30 ns vs. 30 ns) similar (38 ms vs. 65 ms) 12 times less (283 kB vs. 3 MB)
unrolled_extrema(length, itr) extrema(length, itr) Tuple 1 nonempty non-singleton Tuple similar (7 LLVM lines w/ Const) similar (30 ns vs. 40 ns) similar (37 ms vs. 44 ms) 15 times less (256 kB vs. 4 MB)
unrolled_extrema(length, itr) extrema(length, itr) Tuple 2 identical nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (30 ns vs. 40 ns) similar (38 ms vs. 68 ms) 8 times less (438 kB vs. 4 MB)
unrolled_extrema(length, itr) extrema(length, itr) Tuple 8 identical nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 30 ns) similar (60 ms vs. 68 ms) similar (2 MB vs. 4 MB)
unrolled_extrema(length, itr) extrema(length, itr) Tuple 32 identical nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (30 ns vs. 30 ns) similar (68 ms vs. 69 ms) similar (4 MB vs. 4 MB)
unrolled_extrema(length, itr) extrema(length, itr) Tuple 128 identical nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (30 ns vs. 40 ns) similar (109 ms vs. 71 ms) 2 times more (8 MB vs. 4 MB)
unrolled_extrema(length, itr) extrema(length, itr) Tuple 2 identical nonempty non-singleton Tuples similar (7 LLVM lines w/ Const) similar (30 ns vs. 40 ns) similar (39 ms vs. 44 ms) 9 times less (415 kB vs. 4 MB)
unrolled_extrema(length, itr) extrema(length, itr) Tuple 8 identical nonempty non-singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 30 ns) similar (60 ms vs. 45 ms) similar (3 MB vs. 4 MB)
unrolled_extrema(length, itr) extrema(length, itr) Tuple 32 identical nonempty non-singleton Tuples similar (7 LLVM lines w/ Const) similar (30 ns vs. 30 ns) similar (69 ms vs. 46 ms) similar (4 MB vs. 5 MB)
unrolled_extrema(length, itr) extrema(length, itr) Tuple 128 identical nonempty non-singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 40 ns) 2 times more (109 ms vs. 48 ms) 2 times more (9 MB vs. 4 MB)
unrolled_extrema(length, itr) extrema(length, itr) Tuple 2 empty & nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (30 ns vs. 40 ns) similar (38 ms vs. 69 ms) 9 times less (445 kB vs. 4 MB)
unrolled_extrema(length, itr) extrema(length, itr) Tuple 8 empty & nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 40 ns) similar (60 ms vs. 75 ms) similar (3 MB vs. 5 MB)
unrolled_extrema(length, itr) extrema(length, itr) Tuple 32 empty & nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 40 ns) similar (69 ms vs. 92 ms) similar (4 MB vs. 5 MB)
unrolled_extrema(length, itr) extrema(length, itr) Tuple 128 empty & nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 31 LLVM lines) 28 times less (40 ns vs. 1 μs) similar (109 ms vs. 76 ms) similar (8 MB vs. 5 MB)
unrolled_extrema(length, itr) extrema(length, itr) Tuple 2 nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 30 ns) similar (38 ms vs. 68 ms) 9 times less (449 kB vs. 4 MB)
unrolled_extrema(length, itr) extrema(length, itr) Tuple 8 nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 30 ns) similar (60 ms vs. 75 ms) similar (3 MB vs. 5 MB)
unrolled_extrema(length, itr) extrema(length, itr) Tuple 32 nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 40 ns) similar (68 ms vs. 89 ms) similar (4 MB vs. 5 MB)
unrolled_extrema(length, itr) extrema(length, itr) Tuple 128 nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 31 LLVM lines) 36 times less (30 ns vs. 1 μs) similar (109 ms vs. 75 ms) similar (8 MB vs. 5 MB)
unrolled_extrema(length, itr) extrema(length, itr) Tuple 2 nonempty non-singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 40 ns) similar (38 ms vs. 45 ms) 9 times less (449 kB vs. 4 MB)
unrolled_extrema(length, itr) extrema(length, itr) Tuple 8 nonempty non-singleton Tuples similar (7 LLVM lines w/ Const) similar (30 ns vs. 40 ns) similar (60 ms vs. 46 ms) 2 times less (3 MB vs. 5 MB)
unrolled_extrema(length, itr) extrema(length, itr) Tuple 32 nonempty non-singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 40 ns) similar (68 ms vs. 48 ms) similar (4 MB vs. 6 MB)
unrolled_extrema(length, itr) extrema(length, itr) Tuple 128 nonempty non-singleton Tuples better (7 LLVM lines w/ Const vs. 521 kB allocs) 726 times less (30 ns vs. 22 μs) 2 times more (109 ms vs. 52 ms) similar (9 MB vs. 6 MB)
unrolled_findmax(length, itr) findmax(length, itr) Tuple 1 empty singleton Tuple similar (7 LLVM lines w/ Const) similar (30 ns vs. 40 ns) similar (36 ms vs. 50 ms) 9 times less (515 kB vs. 5 MB)
unrolled_findmax(length, itr) findmax(length, itr) Tuple 1 nonempty singleton Tuple similar (7 LLVM lines w/ Const) similar (30 ns vs. 40 ns) similar (36 ms vs. 50 ms) 7 times less (623 kB vs. 5 MB)
unrolled_findmax(length, itr) findmax(length, itr) Tuple 1 nonempty non-singleton Tuple similar (7 LLVM lines w/ Const) similar (40 ns vs. 40 ns) similar (24 ms vs. 48 ms) 6 times less (720 kB vs. 5 MB)
unrolled_findmax(length, itr) findmax(length, itr) Tuple 2 identical nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (30 ns vs. 40 ns) similar (37 ms vs. 51 ms) 6 times less (789 kB vs. 5 MB)
unrolled_findmax(length, itr) findmax(length, itr) Tuple 8 identical nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (30 ns vs. 40 ns) similar (73 ms vs. 53 ms) similar (3 MB vs. 5 MB)
unrolled_findmax(length, itr) findmax(length, itr) Tuple 32 identical nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 50 ns) similar (84 ms vs. 53 ms) similar (5 MB vs. 5 MB)
unrolled_findmax(length, itr) findmax(length, itr) Tuple 128 identical nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (30 ns vs. 40 ns) 2 times more (149 ms vs. 53 ms) 2 times more (11 MB vs. 5 MB)
unrolled_findmax(length, itr) findmax(length, itr) Tuple 2 identical nonempty non-singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 40 ns) 2 times less (25 ms vs. 53 ms) 5 times less (899 kB vs. 5 MB)
unrolled_findmax(length, itr) findmax(length, itr) Tuple 8 identical nonempty non-singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 40 ns) similar (62 ms vs. 51 ms) similar (3 MB vs. 5 MB)
unrolled_findmax(length, itr) findmax(length, itr) Tuple 32 identical nonempty non-singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 40 ns) similar (73 ms vs. 51 ms) similar (5 MB vs. 5 MB)
unrolled_findmax(length, itr) findmax(length, itr) Tuple 128 identical nonempty non-singleton Tuples similar (7 LLVM lines w/ Const) similar (30 ns vs. 40 ns) 2 times more (138 ms vs. 51 ms) 2 times more (12 MB vs. 5 MB)
unrolled_findmax(length, itr) findmax(length, itr) Tuple 2 empty & nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 26 LLVM lines) similar (30 ns vs. 50 ns) similar (40 ms vs. 54 ms) 6 times less (852 kB vs. 5 MB)
unrolled_findmax(length, itr) findmax(length, itr) Tuple 8 empty & nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 86 LLVM lines) 3 times less (30 ns vs. 100 ns) similar (83 ms vs. 54 ms) similar (3 MB vs. 6 MB)
unrolled_findmax(length, itr) findmax(length, itr) Tuple 32 empty & nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 32 LLVM lines) 7 times less (40 ns vs. 300 ns) similar (104 ms vs. 54 ms) similar (5 MB vs. 6 MB)
unrolled_findmax(length, itr) findmax(length, itr) Tuple 128 empty & nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 32 LLVM lines) 27 times less (40 ns vs. 1 μs) 3 times more (169 ms vs. 54 ms) 2 times more (11 MB vs. 6 MB)
unrolled_findmax(length, itr) findmax(length, itr) Tuple 2 nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 26 LLVM lines) similar (30 ns vs. 50 ns) similar (40 ms vs. 54 ms) 5 times less (934 kB vs. 5 MB)
unrolled_findmax(length, itr) findmax(length, itr) Tuple 8 nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 146 LLVM lines) 83 times less (30 ns vs. 3 μs) similar (82 ms vs. 55 ms) similar (3 MB vs. 6 MB)
unrolled_findmax(length, itr) findmax(length, itr) Tuple 32 nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 55 LLVM lines) 589 times less (30 ns vs. 18 μs) similar (101 ms vs. 55 ms) similar (5 MB vs. 6 MB)
unrolled_findmax(length, itr) findmax(length, itr) Tuple 128 nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 55 LLVM lines) 1537 times less (40 ns vs. 62 μs) 3 times more (166 ms vs. 55 ms) similar (11 MB vs. 6 MB)
unrolled_findmax(length, itr) findmax(length, itr) Tuple 2 nonempty non-singleton Tuples better (7 LLVM lines w/ Const vs. 64 B allocs) similar (40 ns vs. 70 ns) 2 times less (26 ms vs. 53 ms) 5 times less (1 MB vs. 5 MB)
unrolled_findmax(length, itr) findmax(length, itr) Tuple 8 nonempty non-singleton Tuples better (7 LLVM lines w/ Const vs. 2 kB allocs) 24 times less (30 ns vs. 721 ns) similar (62 ms vs. 54 ms) similar (4 MB vs. 6 MB)
unrolled_findmax(length, itr) findmax(length, itr) Tuple 32 nonempty non-singleton Tuples better (7 LLVM lines w/ Const vs. 37 kB allocs) 117 times less (40 ns vs. 5 μs) similar (74 ms vs. 54 ms) similar (6 MB vs. 6 MB)
unrolled_findmax(length, itr) findmax(length, itr) Tuple 128 nonempty non-singleton Tuples better (7 LLVM lines w/ Const vs. 521 kB allocs) 1029 times less (30 ns vs. 31 μs) 2 times more (139 ms vs. 54 ms) 2 times more (13 MB vs. 6 MB)
unrolled_findmin(length, itr) findmin(length, itr) Tuple 1 empty singleton Tuple similar (7 LLVM lines w/ Const) similar (30 ns vs. 40 ns) similar (36 ms vs. 47 ms) 9 times less (513 kB vs. 5 MB)
unrolled_findmin(length, itr) findmin(length, itr) Tuple 1 nonempty singleton Tuple similar (7 LLVM lines w/ Const) similar (30 ns vs. 30 ns) similar (36 ms vs. 47 ms) 7 times less (623 kB vs. 5 MB)
unrolled_findmin(length, itr) findmin(length, itr) Tuple 1 nonempty non-singleton Tuple similar (7 LLVM lines w/ Const) similar (30 ns vs. 30 ns) similar (24 ms vs. 47 ms) 6 times less (722 kB vs. 5 MB)
unrolled_findmin(length, itr) findmin(length, itr) Tuple 2 identical nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 40 ns) similar (37 ms vs. 48 ms) 5 times less (790 kB vs. 5 MB)
unrolled_findmin(length, itr) findmin(length, itr) Tuple 8 identical nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (30 ns vs. 40 ns) similar (74 ms vs. 50 ms) similar (3 MB vs. 5 MB)
unrolled_findmin(length, itr) findmin(length, itr) Tuple 32 identical nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (30 ns vs. 40 ns) similar (85 ms vs. 50 ms) similar (5 MB vs. 5 MB)
unrolled_findmin(length, itr) findmin(length, itr) Tuple 128 identical nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 40 ns) 3 times more (152 ms vs. 50 ms) 2 times more (11 MB vs. 5 MB)
unrolled_findmin(length, itr) findmin(length, itr) Tuple 2 identical nonempty non-singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 40 ns) similar (26 ms vs. 46 ms) 5 times less (897 kB vs. 5 MB)
unrolled_findmin(length, itr) findmin(length, itr) Tuple 8 identical nonempty non-singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 40 ns) similar (62 ms vs. 48 ms) similar (3 MB vs. 5 MB)
unrolled_findmin(length, itr) findmin(length, itr) Tuple 32 identical nonempty non-singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 40 ns) similar (73 ms vs. 48 ms) similar (5 MB vs. 5 MB)
unrolled_findmin(length, itr) findmin(length, itr) Tuple 128 identical nonempty non-singleton Tuples similar (7 LLVM lines w/ Const) similar (30 ns vs. 40 ns) 2 times more (142 ms vs. 48 ms) 2 times more (12 MB vs. 5 MB)
unrolled_findmin(length, itr) findmin(length, itr) Tuple 2 empty & nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 26 LLVM lines) similar (40 ns vs. 50 ns) similar (40 ms vs. 51 ms) 5 times less (852 kB vs. 5 MB)
unrolled_findmin(length, itr) findmin(length, itr) Tuple 8 empty & nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 86 LLVM lines) 3 times less (30 ns vs. 100 ns) similar (82 ms vs. 51 ms) similar (3 MB vs. 5 MB)
unrolled_findmin(length, itr) findmin(length, itr) Tuple 32 empty & nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 32 LLVM lines) 7 times less (40 ns vs. 300 ns) 2 times more (105 ms vs. 52 ms) similar (5 MB vs. 5 MB)
unrolled_findmin(length, itr) findmin(length, itr) Tuple 128 empty & nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 32 LLVM lines) 28 times less (40 ns vs. 1 μs) 3 times more (173 ms vs. 52 ms) 2 times more (12 MB vs. 5 MB)
unrolled_findmin(length, itr) findmin(length, itr) Tuple 2 nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 26 LLVM lines) similar (40 ns vs. 50 ns) similar (40 ms vs. 51 ms) 5 times less (933 kB vs. 5 MB)
unrolled_findmin(length, itr) findmin(length, itr) Tuple 8 nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 146 LLVM lines) 62 times less (40 ns vs. 3 μs) similar (82 ms vs. 52 ms) similar (3 MB vs. 5 MB)
unrolled_findmin(length, itr) findmin(length, itr) Tuple 32 nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 55 LLVM lines) 443 times less (40 ns vs. 18 μs) similar (103 ms vs. 53 ms) similar (5 MB vs. 5 MB)
unrolled_findmin(length, itr) findmin(length, itr) Tuple 128 nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 55 LLVM lines) 1544 times less (40 ns vs. 62 μs) 3 times more (170 ms vs. 52 ms) 2 times more (12 MB vs. 5 MB)
unrolled_findmin(length, itr) findmin(length, itr) Tuple 2 nonempty non-singleton Tuples better (7 LLVM lines w/ Const vs. 64 B allocs) similar (40 ns vs. 70 ns) similar (26 ms vs. 51 ms) 4 times less (1 MB vs. 5 MB)
unrolled_findmin(length, itr) findmin(length, itr) Tuple 8 nonempty non-singleton Tuples better (7 LLVM lines w/ Const vs. 2 kB allocs) 18 times less (40 ns vs. 731 ns) similar (63 ms vs. 52 ms) similar (4 MB vs. 5 MB)
unrolled_findmin(length, itr) findmin(length, itr) Tuple 32 nonempty non-singleton Tuples better (7 LLVM lines w/ Const vs. 37 kB allocs) 122 times less (40 ns vs. 5 μs) similar (74 ms vs. 51 ms) similar (6 MB vs. 5 MB)
unrolled_findmin(length, itr) findmin(length, itr) Tuple 128 nonempty non-singleton Tuples better (7 LLVM lines w/ Const vs. 521 kB allocs) 796 times less (40 ns vs. 32 μs) 2 times more (143 ms vs. 51 ms) 2 times more (13 MB vs. 6 MB)
unrolled_argmax(length, itr) argmax(length, itr) Tuple 1 empty singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (38 ms vs. 54 ms) 3 times less (304 kB vs. 1 MB)
unrolled_argmax(length, itr) argmax(length, itr) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (38 ms vs. 53 ms) 3 times less (335 kB vs. 1 MB)
unrolled_argmax(length, itr) argmax(length, itr) Tuple 1 nonempty non-singleton Tuple similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (38 ms vs. 32 ms) 3 times less (492 kB vs. 2 MB)
unrolled_argmax(length, itr) argmax(length, itr) Tuple 2 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (39 ms vs. 56 ms) 2 times less (562 kB vs. 1 MB)
unrolled_argmax(length, itr) argmax(length, itr) Tuple 8 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (60 ms vs. 56 ms) similar (3 MB vs. 2 MB)
unrolled_argmax(length, itr) argmax(length, itr) Tuple 32 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (66 ms vs. 57 ms) 2 times more (4 MB vs. 2 MB)
unrolled_argmax(length, itr) argmax(length, itr) Tuple 128 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (97 ms vs. 60 ms) 4 times more (9 MB vs. 2 MB)
unrolled_argmax(length, itr) argmax(length, itr) Tuple 2 identical nonempty non-singleton Tuples similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (38 ms vs. 33 ms) 2 times less (786 kB vs. 2 MB)
unrolled_argmax(length, itr) argmax(length, itr) Tuple 8 identical nonempty non-singleton Tuples similar (8 LLVM lines) similar (40 ns vs. 50 ns) similar (59 ms vs. 33 ms) similar (3 MB vs. 3 MB)
unrolled_argmax(length, itr) argmax(length, itr) Tuple 32 identical nonempty non-singleton Tuples similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (63 ms vs. 36 ms) similar (5 MB vs. 5 MB)
unrolled_argmax(length, itr) argmax(length, itr) Tuple 128 identical nonempty non-singleton Tuples similar (8 LLVM lines) similar (40 ns vs. 40 ns) 2 times more (80 ms vs. 34 ms) 6 times more (15 MB vs. 2 MB)
unrolled_argmax(length, itr) argmax(length, itr) Tuple 2 empty & nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (39 ms vs. 58 ms) 2 times less (570 kB vs. 1 MB)
unrolled_argmax(length, itr) argmax(length, itr) Tuple 8 empty & nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (65 ms vs. 75 ms) similar (4 MB vs. 3 MB)
unrolled_argmax(length, itr) argmax(length, itr) Tuple 32 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (78 ms vs. 103 ms) similar (6 MB vs. 5 MB)
unrolled_argmax(length, itr) argmax(length, itr) Tuple 128 empty & nonempty singleton Tuples better (optimized out vs. 44 LLVM lines) 38 times less (30 ns vs. 1 μs) 2 times more (145 ms vs. 64 ms) 4 times more (12 MB vs. 3 MB)
unrolled_argmax(length, itr) argmax(length, itr) Tuple 2 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (39 ms vs. 58 ms) 2 times less (650 kB vs. 2 MB)
unrolled_argmax(length, itr) argmax(length, itr) Tuple 8 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (65 ms vs. 75 ms) similar (4 MB vs. 3 MB)
unrolled_argmax(length, itr) argmax(length, itr) Tuple 32 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (77 ms vs. 100 ms) similar (6 MB vs. 5 MB)
unrolled_argmax(length, itr) argmax(length, itr) Tuple 128 nonempty singleton Tuples better (optimized out vs. 43 LLVM lines) 27 times less (40 ns vs. 1 μs) 2 times more (145 ms vs. 64 ms) 3 times more (12 MB vs. 3 MB)
unrolled_argmax(length, itr) argmax(length, itr) Tuple 2 nonempty non-singleton Tuples similar (8 LLVM lines) similar (50 ns vs. 50 ns) similar (38 ms vs. 33 ms) 2 times less (912 kB vs. 2 MB)
unrolled_argmax(length, itr) argmax(length, itr) Tuple 8 nonempty non-singleton Tuples similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (62 ms vs. 39 ms) similar (5 MB vs. 6 MB)
unrolled_argmax(length, itr) argmax(length, itr) Tuple 32 nonempty non-singleton Tuples similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (67 ms vs. 48 ms) similar (8 MB vs. 12 MB)
unrolled_argmax(length, itr) argmax(length, itr) Tuple 128 nonempty non-singleton Tuples better (8 LLVM lines vs. 521 kB allocs) 524 times less (40 ns vs. 21 μs) 2 times more (84 ms vs. 37 ms) 4 times more (18 MB vs. 4 MB)
unrolled_argmin(length, itr) argmin(length, itr) Tuple 1 empty singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (38 ms vs. 51 ms) 3 times less (304 kB vs. 1 MB)
unrolled_argmin(length, itr) argmin(length, itr) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (30 ns vs. 30 ns) similar (38 ms vs. 51 ms) 3 times less (335 kB vs. 1 MB)
unrolled_argmin(length, itr) argmin(length, itr) Tuple 1 nonempty non-singleton Tuple similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (38 ms vs. 30 ms) 3 times less (492 kB vs. 2 MB)
unrolled_argmin(length, itr) argmin(length, itr) Tuple 2 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (39 ms vs. 54 ms) 2 times less (563 kB vs. 1 MB)
unrolled_argmin(length, itr) argmin(length, itr) Tuple 8 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (60 ms vs. 54 ms) similar (3 MB vs. 1 MB)
unrolled_argmin(length, itr) argmin(length, itr) Tuple 32 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (66 ms vs. 55 ms) 2 times more (4 MB vs. 2 MB)
unrolled_argmin(length, itr) argmin(length, itr) Tuple 128 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (97 ms vs. 58 ms) 4 times more (9 MB vs. 2 MB)
unrolled_argmin(length, itr) argmin(length, itr) Tuple 2 identical nonempty non-singleton Tuples similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (39 ms vs. 31 ms) 2 times less (787 kB vs. 2 MB)
unrolled_argmin(length, itr) argmin(length, itr) Tuple 8 identical nonempty non-singleton Tuples similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (59 ms vs. 31 ms) similar (3 MB vs. 3 MB)
unrolled_argmin(length, itr) argmin(length, itr) Tuple 32 identical nonempty non-singleton Tuples similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (63 ms vs. 33 ms) similar (5 MB vs. 5 MB)
unrolled_argmin(length, itr) argmin(length, itr) Tuple 128 identical nonempty non-singleton Tuples similar (8 LLVM lines) similar (40 ns vs. 40 ns) 2 times more (80 ms vs. 31 ms) 6 times more (15 MB vs. 2 MB)
unrolled_argmin(length, itr) argmin(length, itr) Tuple 2 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (39 ms vs. 55 ms) 2 times less (570 kB vs. 1 MB)
unrolled_argmin(length, itr) argmin(length, itr) Tuple 8 empty & nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (65 ms vs. 62 ms) similar (4 MB vs. 2 MB)
unrolled_argmin(length, itr) argmin(length, itr) Tuple 32 empty & nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (76 ms vs. 79 ms) similar (6 MB vs. 3 MB)
unrolled_argmin(length, itr) argmin(length, itr) Tuple 128 empty & nonempty singleton Tuples better (optimized out vs. 44 LLVM lines) 28 times less (40 ns vs. 1 μs) 2 times more (137 ms vs. 61 ms) 4 times more (12 MB vs. 3 MB)
unrolled_argmin(length, itr) argmin(length, itr) Tuple 2 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (39 ms vs. 55 ms) 2 times less (651 kB vs. 2 MB)
unrolled_argmin(length, itr) argmin(length, itr) Tuple 8 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (64 ms vs. 63 ms) similar (4 MB vs. 2 MB)
unrolled_argmin(length, itr) argmin(length, itr) Tuple 32 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (76 ms vs. 78 ms) similar (6 MB vs. 3 MB)
unrolled_argmin(length, itr) argmin(length, itr) Tuple 128 nonempty singleton Tuples better (optimized out vs. 43 LLVM lines) 36 times less (30 ns vs. 1 μs) 2 times more (138 ms vs. 62 ms) 4 times more (12 MB vs. 3 MB)
unrolled_argmin(length, itr) argmin(length, itr) Tuple 2 nonempty non-singleton Tuples similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (39 ms vs. 30 ms) 2 times less (915 kB vs. 2 MB)
unrolled_argmin(length, itr) argmin(length, itr) Tuple 8 nonempty non-singleton Tuples similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (62 ms vs. 32 ms) similar (5 MB vs. 3 MB)
unrolled_argmin(length, itr) argmin(length, itr) Tuple 32 nonempty non-singleton Tuples similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (66 ms vs. 36 ms) similar (8 MB vs. 7 MB)
unrolled_argmin(length, itr) argmin(length, itr) Tuple 128 nonempty non-singleton Tuples better (8 LLVM lines vs. 521 kB allocs) 524 times less (40 ns vs. 21 μs) 2 times more (85 ms vs. 35 ms) 4 times more (18 MB vs. 4 MB)
unrolled_argmax(unrolled_map(length, itr)) argmax(Iterators.map(length, itr)) Tuple 1 empty singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) 2 times less (36 ms vs. 104 ms) 22 times less (1 MB vs. 23 MB)
unrolled_argmax(unrolled_map(length, itr)) argmax(Iterators.map(length, itr)) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (30 ns vs. 40 ns) 2 times less (36 ms vs. 103 ms) 22 times less (1 MB vs. 23 MB)
unrolled_argmax(unrolled_map(length, itr)) argmax(Iterators.map(length, itr)) Tuple 1 nonempty non-singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) 2 times less (36 ms vs. 80 ms) 22 times less (1 MB vs. 23 MB)
unrolled_argmax(unrolled_map(length, itr)) argmax(Iterators.map(length, itr)) Tuple 2 identical nonempty singleton Tuples better (optimized out vs. 6 LLVM lines) similar (40 ns vs. 40 ns) 2 times less (39 ms vs. 113 ms) 17 times less (1 MB vs. 25 MB)
unrolled_argmax(unrolled_map(length, itr)) argmax(Iterators.map(length, itr)) Tuple 8 identical nonempty singleton Tuples better (optimized out vs. 6 LLVM lines) similar (40 ns vs. 40 ns) similar (68 ms vs. 111 ms) 5 times less (4 MB vs. 25 MB)
unrolled_argmax(unrolled_map(length, itr)) argmax(Iterators.map(length, itr)) Tuple 32 identical nonempty singleton Tuples better (optimized out vs. 6 LLVM lines) similar (30 ns vs. 40 ns) similar (80 ms vs. 113 ms) 2 times less (8 MB vs. 25 MB)
unrolled_argmax(unrolled_map(length, itr)) argmax(Iterators.map(length, itr)) Tuple 128 identical nonempty singleton Tuples better (optimized out vs. 6 LLVM lines) similar (40 ns vs. 40 ns) similar (145 ms vs. 113 ms) similar (26 MB vs. 25 MB)
unrolled_argmax(unrolled_map(length, itr)) argmax(Iterators.map(length, itr)) Tuple 2 identical nonempty non-singleton Tuples better (optimized out vs. 6 LLVM lines) similar (30 ns vs. 40 ns) 2 times less (40 ms vs. 87 ms) 18 times less (1 MB vs. 25 MB)
unrolled_argmax(unrolled_map(length, itr)) argmax(Iterators.map(length, itr)) Tuple 8 identical nonempty non-singleton Tuples better (optimized out vs. 6 LLVM lines) similar (40 ns vs. 40 ns) similar (68 ms vs. 88 ms) 5 times less (4 MB vs. 25 MB)
unrolled_argmax(unrolled_map(length, itr)) argmax(Iterators.map(length, itr)) Tuple 32 identical nonempty non-singleton Tuples better (optimized out vs. 6 LLVM lines) similar (40 ns vs. 40 ns) similar (80 ms vs. 88 ms) 2 times less (9 MB vs. 25 MB)
unrolled_argmax(unrolled_map(length, itr)) argmax(Iterators.map(length, itr)) Tuple 128 identical nonempty non-singleton Tuples better (optimized out vs. 6 LLVM lines) similar (40 ns vs. 40 ns) similar (145 ms vs. 88 ms) similar (26 MB vs. 25 MB)
unrolled_argmax(unrolled_map(length, itr)) argmax(Iterators.map(length, itr)) Tuple 2 empty & nonempty singleton Tuples better (optimized out vs. 15 LLVM lines) similar (30 ns vs. 50 ns) 2 times less (40 ms vs. 114 ms) 18 times less (1 MB vs. 25 MB)
unrolled_argmax(unrolled_map(length, itr)) argmax(Iterators.map(length, itr)) Tuple 8 empty & nonempty singleton Tuples better (optimized out vs. 82 LLVM lines) 2 times less (40 ns vs. 100 ns) similar (68 ms vs. 115 ms) 5 times less (4 MB vs. 25 MB)
unrolled_argmax(unrolled_map(length, itr)) argmax(Iterators.map(length, itr)) Tuple 32 empty & nonempty singleton Tuples better (optimized out vs. 29 LLVM lines) 7 times less (40 ns vs. 310 ns) similar (80 ms vs. 115 ms) 2 times less (8 MB vs. 25 MB)
unrolled_argmax(unrolled_map(length, itr)) argmax(Iterators.map(length, itr)) Tuple 128 empty & nonempty singleton Tuples better (optimized out vs. 29 LLVM lines) 29 times less (40 ns vs. 1 μs) similar (145 ms vs. 116 ms) similar (26 MB vs. 25 MB)
unrolled_argmax(unrolled_map(length, itr)) argmax(Iterators.map(length, itr)) Tuple 2 nonempty singleton Tuples better (optimized out vs. 15 LLVM lines) similar (40 ns vs. 50 ns) 2 times less (39 ms vs. 114 ms) 17 times less (1 MB vs. 25 MB)
unrolled_argmax(unrolled_map(length, itr)) argmax(Iterators.map(length, itr)) Tuple 8 nonempty singleton Tuples better (optimized out vs. 82 LLVM lines) 2 times less (40 ns vs. 100 ns) similar (68 ms vs. 115 ms) 5 times less (4 MB vs. 25 MB)
unrolled_argmax(unrolled_map(length, itr)) argmax(Iterators.map(length, itr)) Tuple 32 nonempty singleton Tuples better (optimized out vs. 29 LLVM lines) 9 times less (30 ns vs. 290 ns) similar (80 ms vs. 114 ms) 2 times less (8 MB vs. 25 MB)
unrolled_argmax(unrolled_map(length, itr)) argmax(Iterators.map(length, itr)) Tuple 128 nonempty singleton Tuples better (optimized out vs. 29 LLVM lines) 26 times less (40 ns vs. 1 μs) similar (146 ms vs. 114 ms) similar (26 MB vs. 25 MB)
unrolled_argmax(unrolled_map(length, itr)) argmax(Iterators.map(length, itr)) Tuple 2 nonempty non-singleton Tuples better (optimized out vs. 64 B allocs) 2 times less (30 ns vs. 70 ns) 2 times less (39 ms vs. 90 ms) 18 times less (1 MB vs. 25 MB)
unrolled_argmax(unrolled_map(length, itr)) argmax(Iterators.map(length, itr)) Tuple 8 nonempty non-singleton Tuples better (optimized out vs. 2 kB allocs) 4 times less (40 ns vs. 190 ns) similar (68 ms vs. 94 ms) 5 times less (4 MB vs. 25 MB)
unrolled_argmax(unrolled_map(length, itr)) argmax(Iterators.map(length, itr)) Tuple 32 nonempty non-singleton Tuples better (optimized out vs. 37 kB allocs) 70 times less (30 ns vs. 2 μs) similar (81 ms vs. 91 ms) 2 times less (9 MB vs. 25 MB)
unrolled_argmax(unrolled_map(length, itr)) argmax(Iterators.map(length, itr)) Tuple 128 nonempty non-singleton Tuples better (optimized out vs. 521 kB allocs) 501 times less (40 ns vs. 20 μs) similar (145 ms vs. 91 ms) similar (26 MB vs. 26 MB)
unrolled_argmin(unrolled_map(length, itr)) argmin(Iterators.map(length, itr)) Tuple 1 empty singleton Tuple similar (optimized out) similar (40 ns vs. 30 ns) 2 times less (37 ms vs. 97 ms) 21 times less (1 MB vs. 22 MB)
unrolled_argmin(unrolled_map(length, itr)) argmin(Iterators.map(length, itr)) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) 2 times less (36 ms vs. 97 ms) 21 times less (1 MB vs. 22 MB)
unrolled_argmin(unrolled_map(length, itr)) argmin(Iterators.map(length, itr)) Tuple 1 nonempty non-singleton Tuple similar (optimized out) similar (40 ns vs. 30 ns) similar (37 ms vs. 72 ms) 22 times less (1 MB vs. 22 MB)
unrolled_argmin(unrolled_map(length, itr)) argmin(Iterators.map(length, itr)) Tuple 2 identical nonempty singleton Tuples better (optimized out vs. 6 LLVM lines) similar (30 ns vs. 30 ns) 2 times less (39 ms vs. 105 ms) 17 times less (1 MB vs. 24 MB)
unrolled_argmin(unrolled_map(length, itr)) argmin(Iterators.map(length, itr)) Tuple 8 identical nonempty singleton Tuples better (optimized out vs. 6 LLVM lines) similar (30 ns vs. 40 ns) similar (67 ms vs. 106 ms) 5 times less (4 MB vs. 24 MB)
unrolled_argmin(unrolled_map(length, itr)) argmin(Iterators.map(length, itr)) Tuple 32 identical nonempty singleton Tuples better (optimized out vs. 6 LLVM lines) similar (40 ns vs. 30 ns) similar (79 ms vs. 106 ms) 2 times less (8 MB vs. 24 MB)
unrolled_argmin(unrolled_map(length, itr)) argmin(Iterators.map(length, itr)) Tuple 128 identical nonempty singleton Tuples better (optimized out vs. 6 LLVM lines) similar (30 ns vs. 40 ns) similar (147 ms vs. 105 ms) similar (26 MB vs. 24 MB)
unrolled_argmin(unrolled_map(length, itr)) argmin(Iterators.map(length, itr)) Tuple 2 identical nonempty non-singleton Tuples better (optimized out vs. 6 LLVM lines) similar (40 ns vs. 30 ns) 2 times less (39 ms vs. 82 ms) 18 times less (1 MB vs. 25 MB)
unrolled_argmin(unrolled_map(length, itr)) argmin(Iterators.map(length, itr)) Tuple 8 identical nonempty non-singleton Tuples better (optimized out vs. 6 LLVM lines) similar (30 ns vs. 40 ns) similar (68 ms vs. 81 ms) 5 times less (4 MB vs. 24 MB)
unrolled_argmin(unrolled_map(length, itr)) argmin(Iterators.map(length, itr)) Tuple 32 identical nonempty non-singleton Tuples better (optimized out vs. 6 LLVM lines) similar (30 ns vs. 40 ns) similar (80 ms vs. 81 ms) 2 times less (9 MB vs. 24 MB)
unrolled_argmin(unrolled_map(length, itr)) argmin(Iterators.map(length, itr)) Tuple 128 identical nonempty non-singleton Tuples better (optimized out vs. 6 LLVM lines) similar (30 ns vs. 40 ns) similar (145 ms vs. 81 ms) similar (26 MB vs. 24 MB)
unrolled_argmin(unrolled_map(length, itr)) argmin(Iterators.map(length, itr)) Tuple 2 empty & nonempty singleton Tuples better (optimized out vs. 9 LLVM lines) similar (40 ns vs. 50 ns) 2 times less (39 ms vs. 107 ms) 17 times less (1 MB vs. 24 MB)
unrolled_argmin(unrolled_map(length, itr)) argmin(Iterators.map(length, itr)) Tuple 8 empty & nonempty singleton Tuples better (optimized out vs. 82 LLVM lines) 2 times less (40 ns vs. 100 ns) similar (68 ms vs. 116 ms) 5 times less (4 MB vs. 24 MB)
unrolled_argmin(unrolled_map(length, itr)) argmin(Iterators.map(length, itr)) Tuple 32 empty & nonempty singleton Tuples better (optimized out vs. 29 LLVM lines) 7 times less (40 ns vs. 300 ns) similar (80 ms vs. 109 ms) 2 times less (8 MB vs. 24 MB)
unrolled_argmin(unrolled_map(length, itr)) argmin(Iterators.map(length, itr)) Tuple 128 empty & nonempty singleton Tuples better (optimized out vs. 29 LLVM lines) 38 times less (30 ns vs. 1 μs) similar (144 ms vs. 108 ms) similar (26 MB vs. 24 MB)
unrolled_argmin(unrolled_map(length, itr)) argmin(Iterators.map(length, itr)) Tuple 2 nonempty singleton Tuples better (optimized out vs. 9 LLVM lines) similar (30 ns vs. 40 ns) 2 times less (39 ms vs. 107 ms) 17 times less (1 MB vs. 24 MB)
unrolled_argmin(unrolled_map(length, itr)) argmin(Iterators.map(length, itr)) Tuple 8 nonempty singleton Tuples better (optimized out vs. 82 LLVM lines) 3 times less (30 ns vs. 100 ns) similar (68 ms vs. 109 ms) 5 times less (4 MB vs. 24 MB)
unrolled_argmin(unrolled_map(length, itr)) argmin(Iterators.map(length, itr)) Tuple 32 nonempty singleton Tuples better (optimized out vs. 29 LLVM lines) 7 times less (40 ns vs. 290 ns) similar (80 ms vs. 108 ms) 2 times less (8 MB vs. 24 MB)
unrolled_argmin(unrolled_map(length, itr)) argmin(Iterators.map(length, itr)) Tuple 128 nonempty singleton Tuples better (optimized out vs. 29 LLVM lines) 35 times less (30 ns vs. 1 μs) similar (146 ms vs. 108 ms) similar (26 MB vs. 24 MB)
unrolled_argmin(unrolled_map(length, itr)) argmin(Iterators.map(length, itr)) Tuple 2 nonempty non-singleton Tuples better (optimized out vs. 64 B allocs) similar (40 ns vs. 70 ns) 2 times less (40 ms vs. 82 ms) 17 times less (1 MB vs. 25 MB)
unrolled_argmin(unrolled_map(length, itr)) argmin(Iterators.map(length, itr)) Tuple 8 nonempty non-singleton Tuples better (optimized out vs. 2 kB allocs) 6 times less (30 ns vs. 191 ns) similar (68 ms vs. 86 ms) 5 times less (4 MB vs. 24 MB)
unrolled_argmin(unrolled_map(length, itr)) argmin(Iterators.map(length, itr)) Tuple 32 nonempty non-singleton Tuples better (optimized out vs. 37 kB allocs) 69 times less (30 ns vs. 2 μs) similar (80 ms vs. 85 ms) 2 times less (9 MB vs. 24 MB)
unrolled_argmin(unrolled_map(length, itr)) argmin(Iterators.map(length, itr)) Tuple 128 nonempty non-singleton Tuples better (optimized out vs. 521 kB allocs) 706 times less (30 ns vs. 21 μs) similar (145 ms vs. 84 ms) similar (26 MB vs. 25 MB)
unrolled_findfirst(!isempty, itr) findfirst(!isempty, itr) Tuple 1 empty singleton Tuple similar (optimized out) similar (30 ns vs. 40 ns) similar (26 ms vs. 25 ms) similar (198 kB vs. 181 kB)
unrolled_findfirst(!isempty, itr) findfirst(!isempty, itr) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (28 ms vs. 27 ms) similar (239 kB vs. 246 kB)
unrolled_findfirst(!isempty, itr) findfirst(!isempty, itr) Tuple 1 nonempty non-singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (26 ms vs. 25 ms) similar (213 kB vs. 235 kB)
unrolled_findfirst(!isempty, itr) findfirst(!isempty, itr) Tuple 2 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (28 ms vs. 28 ms) similar (242 kB vs. 407 kB)
unrolled_findfirst(!isempty, itr) findfirst(!isempty, itr) Tuple 8 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (43 ms vs. 30 ms) 3 times less (328 kB vs. 1 MB)
unrolled_findfirst(!isempty, itr) findfirst(!isempty, itr) Tuple 32 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (44 ms vs. 25 ms) similar (456 kB vs. 269 kB)
unrolled_findfirst(!isempty, itr) findfirst(!isempty, itr) Tuple 128 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) 2 times more (51 ms vs. 24 ms) 3 times more (963 kB vs. 269 kB)
unrolled_findfirst(!isempty, itr) findfirst(!isempty, itr) Tuple 2 identical nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (26 ms vs. 28 ms) similar (215 kB vs. 420 kB)
unrolled_findfirst(!isempty, itr) findfirst(!isempty, itr) Tuple 8 identical nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (40 ms vs. 29 ms) 6 times less (327 kB vs. 2 MB)
unrolled_findfirst(!isempty, itr) findfirst(!isempty, itr) Tuple 32 identical nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (42 ms vs. 25 ms) similar (454 kB vs. 273 kB)
unrolled_findfirst(!isempty, itr) findfirst(!isempty, itr) Tuple 128 identical nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (48 ms vs. 25 ms) 3 times more (961 kB vs. 274 kB)
unrolled_findfirst(!isempty, itr) findfirst(!isempty, itr) Tuple 2 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (29 ms vs. 28 ms) similar (288 kB vs. 451 kB)
unrolled_findfirst(!isempty, itr) findfirst(!isempty, itr) Tuple 8 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (43 ms vs. 32 ms) 3 times less (375 kB vs. 1 MB)
unrolled_findfirst(!isempty, itr) findfirst(!isempty, itr) Tuple 32 empty & nonempty singleton Tuples better (optimized out vs. 31 LLVM lines) similar (40 ns vs. 60 ns) similar (45 ms vs. 30 ms) similar (502 kB vs. 608 kB)
unrolled_findfirst(!isempty, itr) findfirst(!isempty, itr) Tuple 128 empty & nonempty singleton Tuples better (optimized out vs. 31 LLVM lines) 2 times less (30 ns vs. 60 ns) similar (51 ms vs. 30 ms) similar (1009 kB vs. 608 kB)
unrolled_findfirst(!isempty, itr) findfirst(!isempty, itr) Tuple 2 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (29 ms vs. 28 ms) similar (242 kB vs. 407 kB)
unrolled_findfirst(!isempty, itr) findfirst(!isempty, itr) Tuple 8 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (44 ms vs. 30 ms) 3 times less (329 kB vs. 1 MB)
unrolled_findfirst(!isempty, itr) findfirst(!isempty, itr) Tuple 32 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (44 ms vs. 25 ms) similar (457 kB vs. 270 kB)
unrolled_findfirst(!isempty, itr) findfirst(!isempty, itr) Tuple 128 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) 2 times more (52 ms vs. 24 ms) 3 times more (964 kB vs. 270 kB)
unrolled_findfirst(!isempty, itr) findfirst(!isempty, itr) Tuple 2 nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (26 ms vs. 27 ms) 2 times less (241 kB vs. 506 kB)
unrolled_findfirst(!isempty, itr) findfirst(!isempty, itr) Tuple 8 nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (40 ms vs. 30 ms) 6 times less (328 kB vs. 2 MB)
unrolled_findfirst(!isempty, itr) findfirst(!isempty, itr) Tuple 32 nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (42 ms vs. 25 ms) similar (455 kB vs. 275 kB)
unrolled_findfirst(!isempty, itr) findfirst(!isempty, itr) Tuple 128 nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (48 ms vs. 25 ms) 3 times more (962 kB vs. 278 kB)
unrolled_findlast(isempty, itr) findlast(isempty, itr) Tuple 1 empty singleton Tuple similar (optimized out) similar (30 ns vs. 30 ns) similar (34 ms vs. 31 ms) similar (358 kB vs. 344 kB)
unrolled_findlast(isempty, itr) findlast(isempty, itr) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (30 ns vs. 40 ns) similar (29 ms vs. 34 ms) similar (302 kB vs. 399 kB)
unrolled_findlast(isempty, itr) findlast(isempty, itr) Tuple 1 nonempty non-singleton Tuple similar (optimized out) similar (30 ns vs. 30 ns) similar (24 ms vs. 30 ms) similar (342 kB vs. 471 kB)
unrolled_findlast(isempty, itr) findlast(isempty, itr) Tuple 2 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (29 ms vs. 35 ms) similar (308 kB vs. 562 kB)
unrolled_findlast(isempty, itr) findlast(isempty, itr) Tuple 8 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (44 ms vs. 45 ms) 3 times less (408 kB vs. 2 MB)
unrolled_findlast(isempty, itr) findlast(isempty, itr) Tuple 32 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (46 ms vs. 33 ms) similar (593 kB vs. 691 kB)
unrolled_findlast(isempty, itr) findlast(isempty, itr) Tuple 128 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (53 ms vs. 32 ms) similar (1 MB vs. 691 kB)
unrolled_findlast(isempty, itr) findlast(isempty, itr) Tuple 2 identical nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (24 ms vs. 31 ms) similar (353 kB vs. 670 kB)
unrolled_findlast(isempty, itr) findlast(isempty, itr) Tuple 8 identical nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (39 ms vs. 43 ms) 4 times less (517 kB vs. 2 MB)
unrolled_findlast(isempty, itr) findlast(isempty, itr) Tuple 32 identical nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (40 ms vs. 34 ms) similar (853 kB vs. 696 kB)
unrolled_findlast(isempty, itr) findlast(isempty, itr) Tuple 128 identical nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (48 ms vs. 33 ms) 3 times more (2 MB vs. 697 kB)
unrolled_findlast(isempty, itr) findlast(isempty, itr) Tuple 2 empty & nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (34 ms vs. 30 ms) similar (397 kB vs. 467 kB)
unrolled_findlast(isempty, itr) findlast(isempty, itr) Tuple 8 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (49 ms vs. 34 ms) 3 times less (507 kB vs. 2 MB)
unrolled_findlast(isempty, itr) findlast(isempty, itr) Tuple 32 empty & nonempty singleton Tuples better (optimized out vs. 30 LLVM lines) 10 times less (30 ns vs. 310 ns) similar (51 ms vs. 34 ms) similar (710 kB vs. 710 kB)
unrolled_findlast(isempty, itr) findlast(isempty, itr) Tuple 128 empty & nonempty singleton Tuples better (optimized out vs. 30 LLVM lines) 25 times less (30 ns vs. 771 ns) similar (57 ms vs. 35 ms) similar (1 MB vs. 710 kB)
unrolled_findlast(isempty, itr) findlast(isempty, itr) Tuple 2 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (30 ms vs. 32 ms) similar (312 kB vs. 527 kB)
unrolled_findlast(isempty, itr) findlast(isempty, itr) Tuple 8 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (43 ms vs. 33 ms) 3 times less (421 kB vs. 2 MB)
unrolled_findlast(isempty, itr) findlast(isempty, itr) Tuple 32 nonempty singleton Tuples better (optimized out vs. 30 LLVM lines) 9 times less (30 ns vs. 290 ns) similar (45 ms vs. 34 ms) similar (620 kB vs. 710 kB)
unrolled_findlast(isempty, itr) findlast(isempty, itr) Tuple 128 nonempty singleton Tuples better (optimized out vs. 30 LLVM lines) 26 times less (40 ns vs. 1 μs) similar (52 ms vs. 34 ms) similar (1 MB vs. 710 kB)
unrolled_findlast(isempty, itr) findlast(isempty, itr) Tuple 2 nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (24 ms vs. 32 ms) similar (383 kB vs. 724 kB)
unrolled_findlast(isempty, itr) findlast(isempty, itr) Tuple 8 nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (39 ms vs. 37 ms) 5 times less (530 kB vs. 3 MB)
unrolled_findlast(isempty, itr) findlast(isempty, itr) Tuple 32 nonempty non-singleton Tuples better (optimized out vs. 38 kB allocs) 72 times less (30 ns vs. 2 μs) similar (41 ms vs. 36 ms) similar (880 kB vs. 753 kB)
unrolled_findlast(isempty, itr) findlast(isempty, itr) Tuple 128 nonempty non-singleton Tuples better (optimized out vs. 525 kB allocs) 567 times less (40 ns vs. 23 μs) similar (48 ms vs. 36 ms) similar (2 MB vs. 1 MB)
unrolled_argfirst((x->length(x) >= length(itr[end])), itr) itr[findfirst((x->length(x) >= length(itr[end])), itr)] Tuple 1 empty singleton Tuple similar (optimized out) similar (30 ns vs. 40 ns) similar (40 ms vs. 36 ms) similar (272 kB vs. 201 kB)
unrolled_argfirst((x->length(x) >= length(itr[end])), itr) itr[findfirst((x->length(x) >= length(itr[end])), itr)] Tuple 1 nonempty singleton Tuple similar (optimized out) similar (30 ns vs. 30 ns) similar (39 ms vs. 38 ms) similar (307 kB vs. 267 kB)
unrolled_argfirst((x->length(x) >= length(itr[end])), itr) itr[findfirst((x->length(x) >= length(itr[end])), itr)] Tuple 1 nonempty non-singleton Tuple similar (8 LLVM lines) similar (50 ns vs. 40 ns) similar (37 ms vs. 37 ms) similar (316 kB vs. 256 kB)
unrolled_argfirst((x->length(x) >= length(itr[end])), itr) itr[findfirst((x->length(x) >= length(itr[end])), itr)] Tuple 2 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (40 ms vs. 39 ms) similar (328 kB vs. 428 kB)
unrolled_argfirst((x->length(x) >= length(itr[end])), itr) itr[findfirst((x->length(x) >= length(itr[end])), itr)] Tuple 8 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (58 ms vs. 40 ms) 2 times less (539 kB vs. 1 MB)
unrolled_argfirst((x->length(x) >= length(itr[end])), itr) itr[findfirst((x->length(x) >= length(itr[end])), itr)] Tuple 32 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (70 ms vs. 41 ms) 2 times more (1 MB vs. 397 kB)
unrolled_argfirst((x->length(x) >= length(itr[end])), itr) itr[findfirst((x->length(x) >= length(itr[end])), itr)] Tuple 128 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) 3 times more (142 ms vs. 41 ms) 9 times more (4 MB vs. 397 kB)
unrolled_argfirst((x->length(x) >= length(itr[end])), itr) itr[findfirst((x->length(x) >= length(itr[end])), itr)] Tuple 2 identical nonempty non-singleton Tuples similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (39 ms vs. 38 ms) similar (356 kB vs. 441 kB)
unrolled_argfirst((x->length(x) >= length(itr[end])), itr) itr[findfirst((x->length(x) >= length(itr[end])), itr)] Tuple 8 identical nonempty non-singleton Tuples similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (57 ms vs. 41 ms) 2 times less (695 kB vs. 2 MB)
unrolled_argfirst((x->length(x) >= length(itr[end])), itr) itr[findfirst((x->length(x) >= length(itr[end])), itr)] Tuple 32 identical nonempty non-singleton Tuples similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (73 ms vs. 42 ms) 4 times more (2 MB vs. 401 kB)
unrolled_argfirst((x->length(x) >= length(itr[end])), itr) itr[findfirst((x->length(x) >= length(itr[end])), itr)] Tuple 128 identical nonempty non-singleton Tuples similar (8 LLVM lines) similar (40 ns vs. 40 ns) 3 times more (161 ms vs. 42 ms) 14 times more (6 MB vs. 402 kB)
unrolled_argfirst((x->length(x) >= length(itr[end])), itr) itr[findfirst((x->length(x) >= length(itr[end])), itr)] Tuple 2 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (44 ms vs. 43 ms) similar (372 kB vs. 464 kB)
unrolled_argfirst((x->length(x) >= length(itr[end])), itr) itr[findfirst((x->length(x) >= length(itr[end])), itr)] Tuple 8 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (68 ms vs. 59 ms) 2 times less (681 kB vs. 2 MB)
unrolled_argfirst((x->length(x) >= length(itr[end])), itr) itr[findfirst((x->length(x) >= length(itr[end])), itr)] Tuple 32 empty & nonempty singleton Tuples better (optimized out vs. type-unstable) 7 times less (40 ns vs. 290 ns) similar (97 ms vs. 66 ms) 2 times more (1 MB vs. 747 kB)
unrolled_argfirst((x->length(x) >= length(itr[end])), itr) itr[findfirst((x->length(x) >= length(itr[end])), itr)] Tuple 128 empty & nonempty singleton Tuples better (optimized out vs. type-unstable) 9 times less (30 ns vs. 290 ns) 2 times more (177 ms vs. 67 ms) 5 times more (4 MB vs. 747 kB)
unrolled_argfirst((x->length(x) >= length(itr[end])), itr) itr[findfirst((x->length(x) >= length(itr[end])), itr)] Tuple 2 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (44 ms vs. 43 ms) similar (376 kB vs. 469 kB)
unrolled_argfirst((x->length(x) >= length(itr[end])), itr) itr[findfirst((x->length(x) >= length(itr[end])), itr)] Tuple 8 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (68 ms vs. 60 ms) 2 times less (685 kB vs. 2 MB)
unrolled_argfirst((x->length(x) >= length(itr[end])), itr) itr[findfirst((x->length(x) >= length(itr[end])), itr)] Tuple 32 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) 2 times more (93 ms vs. 41 ms) 3 times more (1 MB vs. 464 kB)
unrolled_argfirst((x->length(x) >= length(itr[end])), itr) itr[findfirst((x->length(x) >= length(itr[end])), itr)] Tuple 128 nonempty singleton Tuples better (optimized out vs. type-unstable) similar (40 ns vs. 60 ns) 3 times more (173 ms vs. 45 ms) 7 times more (4 MB vs. 505 kB)
unrolled_argfirst((x->length(x) >= length(itr[end])), itr) itr[findfirst((x->length(x) >= length(itr[end])), itr)] Tuple 2 nonempty non-singleton Tuples similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (43 ms vs. 41 ms) similar (440 kB vs. 563 kB)
unrolled_argfirst((x->length(x) >= length(itr[end])), itr) itr[findfirst((x->length(x) >= length(itr[end])), itr)] Tuple 8 nonempty non-singleton Tuples similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (69 ms vs. 62 ms) 3 times less (875 kB vs. 3 MB)
unrolled_argfirst((x->length(x) >= length(itr[end])), itr) itr[findfirst((x->length(x) >= length(itr[end])), itr)] Tuple 32 nonempty non-singleton Tuples similar (8 LLVM lines) similar (40 ns vs. 40 ns) 2 times more (104 ms vs. 43 ms) 4 times more (2 MB vs. 448 kB)
unrolled_argfirst((x->length(x) >= length(itr[end])), itr) itr[findfirst((x->length(x) >= length(itr[end])), itr)] Tuple 128 nonempty non-singleton Tuples better (8 LLVM lines vs. 12 kB allocs) 11 times less (40 ns vs. 441 ns) 4 times more (220 ms vs. 47 ms) 12 times more (6 MB vs. 495 kB)
unrolled_arglast((x->length(x) >= length(itr[1])), itr) itr[findlast((x->length(x) >= length(itr[1])), itr)] Tuple 1 empty singleton Tuple similar (optimized out) similar (30 ns vs. 40 ns) similar (42 ms vs. 43 ms) similar (411 kB vs. 406 kB)
unrolled_arglast((x->length(x) >= length(itr[1])), itr) itr[findlast((x->length(x) >= length(itr[1])), itr)] Tuple 1 nonempty singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (42 ms vs. 45 ms) similar (445 kB vs. 466 kB)
unrolled_arglast((x->length(x) >= length(itr[1])), itr) itr[findlast((x->length(x) >= length(itr[1])), itr)] Tuple 1 nonempty non-singleton Tuple similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (37 ms vs. 41 ms) similar (532 kB vs. 533 kB)
unrolled_arglast((x->length(x) >= length(itr[1])), itr) itr[findlast((x->length(x) >= length(itr[1])), itr)] Tuple 2 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (43 ms vs. 46 ms) similar (469 kB vs. 629 kB)
unrolled_arglast((x->length(x) >= length(itr[1])), itr) itr[findlast((x->length(x) >= length(itr[1])), itr)] Tuple 8 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (61 ms vs. 56 ms) 2 times less (706 kB vs. 2 MB)
unrolled_arglast((x->length(x) >= length(itr[1])), itr) itr[findlast((x->length(x) >= length(itr[1])), itr)] Tuple 32 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (73 ms vs. 47 ms) similar (1 MB vs. 761 kB)
unrolled_arglast((x->length(x) >= length(itr[1])), itr) itr[findlast((x->length(x) >= length(itr[1])), itr)] Tuple 128 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) 3 times more (144 ms vs. 46 ms) 5 times more (4 MB vs. 761 kB)
unrolled_arglast((x->length(x) >= length(itr[1])), itr) itr[findlast((x->length(x) >= length(itr[1])), itr)] Tuple 2 identical nonempty non-singleton Tuples similar (9 LLVM lines) similar (40 ns vs. 40 ns) similar (39 ms vs. 42 ms) similar (588 kB vs. 732 kB)
unrolled_arglast((x->length(x) >= length(itr[1])), itr) itr[findlast((x->length(x) >= length(itr[1])), itr)] Tuple 8 identical nonempty non-singleton Tuples similar (9 LLVM lines) similar (40 ns vs. 40 ns) similar (57 ms vs. 54 ms) 2 times less (1011 kB vs. 2 MB)
unrolled_arglast((x->length(x) >= length(itr[1])), itr) itr[findlast((x->length(x) >= length(itr[1])), itr)] Tuple 32 identical nonempty non-singleton Tuples similar (9 LLVM lines) similar (40 ns vs. 40 ns) similar (74 ms vs. 48 ms) 3 times more (2 MB vs. 765 kB)
unrolled_arglast((x->length(x) >= length(itr[1])), itr) itr[findlast((x->length(x) >= length(itr[1])), itr)] Tuple 128 identical nonempty non-singleton Tuples similar (9 LLVM lines) similar (40 ns vs. 40 ns) 3 times more (164 ms vs. 47 ms) 10 times more (8 MB vs. 765 kB)
unrolled_arglast((x->length(x) >= length(itr[1])), itr) itr[findlast((x->length(x) >= length(itr[1])), itr)] Tuple 2 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (47 ms vs. 41 ms) similar (513 kB vs. 534 kB)
unrolled_arglast((x->length(x) >= length(itr[1])), itr) itr[findlast((x->length(x) >= length(itr[1])), itr)] Tuple 8 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (70 ms vs. 42 ms) similar (842 kB vs. 1 MB)
unrolled_arglast((x->length(x) >= length(itr[1])), itr) itr[findlast((x->length(x) >= length(itr[1])), itr)] Tuple 32 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) 2 times more (98 ms vs. 47 ms) 2 times more (2 MB vs. 825 kB)
unrolled_arglast((x->length(x) >= length(itr[1])), itr) itr[findlast((x->length(x) >= length(itr[1])), itr)] Tuple 128 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) 3 times more (180 ms vs. 47 ms) 5 times more (5 MB vs. 825 kB)
unrolled_arglast((x->length(x) >= length(itr[1])), itr) itr[findlast((x->length(x) >= length(itr[1])), itr)] Tuple 2 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (47 ms vs. 43 ms) similar (517 kB vs. 594 kB)
unrolled_arglast((x->length(x) >= length(itr[1])), itr) itr[findlast((x->length(x) >= length(itr[1])), itr)] Tuple 8 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (70 ms vs. 44 ms) similar (846 kB vs. 2 MB)
unrolled_arglast((x->length(x) >= length(itr[1])), itr) itr[findlast((x->length(x) >= length(itr[1])), itr)] Tuple 32 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) 2 times more (94 ms vs. 46 ms) 2 times more (2 MB vs. 825 kB)
unrolled_arglast((x->length(x) >= length(itr[1])), itr) itr[findlast((x->length(x) >= length(itr[1])), itr)] Tuple 128 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) 3 times more (172 ms vs. 47 ms) 5 times more (5 MB vs. 825 kB)
unrolled_arglast((x->length(x) >= length(itr[1])), itr) itr[findlast((x->length(x) >= length(itr[1])), itr)] Tuple 2 nonempty non-singleton Tuples similar (8 LLVM lines) similar (40 ns vs. 50 ns) similar (43 ms vs. 43 ms) similar (668 kB vs. 787 kB)
unrolled_arglast((x->length(x) >= length(itr[1])), itr) itr[findlast((x->length(x) >= length(itr[1])), itr)] Tuple 8 nonempty non-singleton Tuples similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (69 ms vs. 48 ms) 2 times less (1 MB vs. 3 MB)
unrolled_arglast((x->length(x) >= length(itr[1])), itr) itr[findlast((x->length(x) >= length(itr[1])), itr)] Tuple 32 nonempty non-singleton Tuples similar (9 LLVM lines) similar (40 ns vs. 40 ns) 2 times more (102 ms vs. 48 ms) 3 times more (3 MB vs. 809 kB)
unrolled_arglast((x->length(x) >= length(itr[1])), itr) itr[findlast((x->length(x) >= length(itr[1])), itr)] Tuple 128 nonempty non-singleton Tuples similar (8 LLVM lines) similar (40 ns vs. 40 ns) 4 times more (223 ms vs. 48 ms) 10 times more (8 MB vs. 815 kB)
unrolled_filter(!isempty, itr) filter(!isempty, itr) Tuple 1 empty singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (47 ms vs. 24 ms) 5 times more (3 MB vs. 603 kB)
unrolled_filter(!isempty, itr) filter(!isempty, itr) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (30 ns vs. 30 ns) 2 times more (53 ms vs. 25 ms) 5 times more (3 MB vs. 641 kB)
unrolled_filter(!isempty, itr) filter(!isempty, itr) Tuple 1 nonempty non-singleton Tuple similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (48 ms vs. 28 ms) 4 times more (4 MB vs. 828 kB)
unrolled_filter(!isempty, itr) filter(!isempty, itr) Tuple 2 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) 2 times more (58 ms vs. 24 ms) 4 times more (3 MB vs. 704 kB)
unrolled_filter(!isempty, itr) filter(!isempty, itr) Tuple 8 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) 4 times more (104 ms vs. 24 ms) 7 times more (7 MB vs. 936 kB)
unrolled_filter(!isempty, itr) filter(!isempty, itr) Tuple 32 identical nonempty singleton Tuples better (optimized out vs. 128 B allocs) 16 times less (30 ns vs. 500 ns) 2 times more (209 ms vs. 91 ms) 2 times more (15 MB vs. 7 MB)
unrolled_filter(!isempty, itr) filter(!isempty, itr) Tuple 128 identical nonempty singleton Tuples better (optimized out vs. 128 B allocs) 56 times less (30 ns vs. 2 μs) 8 times more (740 ms vs. 89 ms) 8 times more (58 MB vs. 7 MB)
unrolled_filter(!isempty, itr) filter(!isempty, itr) Tuple 2 identical nonempty non-singleton Tuples similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (54 ms vs. 29 ms) 4 times more (4 MB vs. 960 kB)
unrolled_filter(!isempty, itr) filter(!isempty, itr) Tuple 8 identical nonempty non-singleton Tuples similar (8 LLVM lines) similar (40 ns vs. 40 ns) 2 times more (85 ms vs. 29 ms) 6 times more (11 MB vs. 2 MB)
unrolled_filter(!isempty, itr) filter(!isempty, itr) Tuple 32 identical nonempty non-singleton Tuples better (20 LLVM lines vs. 1 kB allocs) 27 times less (40 ns vs. 1 μs) similar (186 ms vs. 101 ms) 7 times more (49 MB vs. 7 MB)
unrolled_filter(!isempty, itr) filter(!isempty, itr) Tuple 128 identical nonempty non-singleton Tuples better (68 LLVM lines vs. 5 kB allocs) 66 times less (60 ns vs. 4 μs) 9 times more (1 s vs. 102 ms) 77 times more (544 MB vs. 7 MB)
unrolled_filter(!isempty, itr) filter(!isempty, itr) Tuple 2 empty & nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) 2 times more (59 ms vs. 24 ms) 4 times more (3 MB vs. 782 kB)
unrolled_filter(!isempty, itr) filter(!isempty, itr) Tuple 8 empty & nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) 4 times more (105 ms vs. 25 ms) 6 times more (7 MB vs. 1 MB)
unrolled_filter(!isempty, itr) filter(!isempty, itr) Tuple 32 empty & nonempty singleton Tuples better (optimized out vs. 640 B allocs) 24 times less (30 ns vs. 731 ns) similar (217 ms vs. 109 ms) similar (16 MB vs. 8 MB)
unrolled_filter(!isempty, itr) filter(!isempty, itr) Tuple 128 empty & nonempty singleton Tuples better (optimized out vs. 2 kB allocs) 83 times less (30 ns vs. 3 μs) 6 times more (715 ms vs. 109 ms) 6 times more (54 MB vs. 8 MB)
unrolled_filter(!isempty, itr) filter(!isempty, itr) Tuple 2 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) 2 times more (59 ms vs. 24 ms) 4 times more (4 MB vs. 789 kB)
unrolled_filter(!isempty, itr) filter(!isempty, itr) Tuple 8 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) 4 times more (106 ms vs. 24 ms) 6 times more (7 MB vs. 1 MB)
unrolled_filter(!isempty, itr) filter(!isempty, itr) Tuple 32 nonempty singleton Tuples better (optimized out vs. 640 B allocs) 42 times less (40 ns vs. 2 μs) similar (215 ms vs. 132 ms) similar (16 MB vs. 9 MB)
unrolled_filter(!isempty, itr) filter(!isempty, itr) Tuple 128 nonempty singleton Tuples better (optimized out vs. 2 kB allocs) 188 times less (30 ns vs. 6 μs) 5 times more (772 ms vs. 132 ms) 6 times more (59 MB vs. 9 MB)
unrolled_filter(!isempty, itr) filter(!isempty, itr) Tuple 2 nonempty non-singleton Tuples similar (11 LLVM lines) similar (40 ns vs. 40 ns) similar (54 ms vs. 28 ms) 4 times more (4 MB vs. 1 MB)
unrolled_filter(!isempty, itr) filter(!isempty, itr) Tuple 8 nonempty non-singleton Tuples similar (29 LLVM lines) similar (50 ns vs. 50 ns) 2 times more (86 ms vs. 30 ms) 6 times more (11 MB vs. 2 MB)
unrolled_filter(!isempty, itr) filter(!isempty, itr) Tuple 32 nonempty non-singleton Tuples better (93 LLVM lines vs. 40 kB allocs) 88 times less (60 ns vs. 5 μs) similar (192 ms vs. 146 ms) 5 times more (50 MB vs. 9 MB)
unrolled_filter(!isempty, itr) filter(!isempty, itr) Tuple 128 nonempty non-singleton Tuples better (548 LLVM lines vs. 533 kB allocs) 124 times less (280 ns vs. 35 μs) 7 times more (1 s vs. 147 ms) 60 times more (545 MB vs. 9 MB)
unrolled_split(isempty, itr) (filter(isempty, itr), filter(!isempty, itr)) Tuple 1 empty singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) 2 times more (63 ms vs. 25 ms) 6 times more (5 MB vs. 780 kB)
unrolled_split(isempty, itr) (filter(isempty, itr), filter(!isempty, itr)) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (30 ns vs. 40 ns) 2 times more (63 ms vs. 25 ms) 6 times more (5 MB vs. 815 kB)
unrolled_split(isempty, itr) (filter(isempty, itr), filter(!isempty, itr)) Tuple 1 nonempty non-singleton Tuple similar (8 LLVM lines) similar (50 ns vs. 50 ns) similar (50 ms vs. 29 ms) 4 times more (4 MB vs. 1006 kB)
unrolled_split(isempty, itr) (filter(isempty, itr), filter(!isempty, itr)) Tuple 2 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) 3 times more (80 ms vs. 25 ms) 7 times more (6 MB vs. 882 kB)
unrolled_split(isempty, itr) (filter(isempty, itr), filter(!isempty, itr)) Tuple 8 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) 5 times more (146 ms vs. 25 ms) 16 times more (18 MB vs. 1 MB)
unrolled_split(isempty, itr) (filter(isempty, itr), filter(!isempty, itr)) Tuple 32 identical nonempty singleton Tuples better (optimized out vs. 256 B allocs) 15 times less (40 ns vs. 600 ns) 2 times more (268 ms vs. 97 ms) 3 times more (29 MB vs. 7 MB)
unrolled_split(isempty, itr) (filter(isempty, itr), filter(!isempty, itr)) Tuple 128 identical nonempty singleton Tuples better (optimized out vs. 256 B allocs) 45 times less (40 ns vs. 2 μs) 9 times more (868 ms vs. 95 ms) 11 times more (84 MB vs. 7 MB)
unrolled_split(isempty, itr) (filter(isempty, itr), filter(!isempty, itr)) Tuple 2 identical nonempty non-singleton Tuples similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (57 ms vs. 30 ms) 5 times more (6 MB vs. 1 MB)
unrolled_split(isempty, itr) (filter(isempty, itr), filter(!isempty, itr)) Tuple 8 identical nonempty non-singleton Tuples similar (8 LLVM lines) similar (50 ns vs. 40 ns) 3 times more (109 ms vs. 29 ms) 12 times more (22 MB vs. 2 MB)
unrolled_split(isempty, itr) (filter(isempty, itr), filter(!isempty, itr)) Tuple 32 identical nonempty non-singleton Tuples better (20 LLVM lines vs. 2 kB allocs) 24 times less (50 ns vs. 1 μs) 2 times more (221 ms vs. 110 ms) 8 times more (63 MB vs. 7 MB)
unrolled_split(isempty, itr) (filter(isempty, itr), filter(!isempty, itr)) Tuple 128 identical nonempty non-singleton Tuples better (68 LLVM lines vs. 7 kB allocs) 70 times less (60 ns vs. 4 μs) 9 times more (1 s vs. 110 ms) 74 times more (544 MB vs. 7 MB)
unrolled_split(isempty, itr) (filter(isempty, itr), filter(!isempty, itr)) Tuple 2 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) 3 times more (78 ms vs. 24 ms) 6 times more (6 MB vs. 970 kB)
unrolled_split(isempty, itr) (filter(isempty, itr), filter(!isempty, itr)) Tuple 8 empty & nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) 5 times more (145 ms vs. 25 ms) 13 times more (18 MB vs. 1 MB)
unrolled_split(isempty, itr) (filter(isempty, itr), filter(!isempty, itr)) Tuple 32 empty & nonempty singleton Tuples better (optimized out vs. 1 kB allocs) 29 times less (40 ns vs. 1 μs) 2 times more (272 ms vs. 119 ms) 3 times more (30 MB vs. 8 MB)
unrolled_split(isempty, itr) (filter(isempty, itr), filter(!isempty, itr)) Tuple 128 empty & nonempty singleton Tuples better (optimized out vs. 4 kB allocs) 102 times less (40 ns vs. 4 μs) 7 times more (881 ms vs. 119 ms) 9 times more (83 MB vs. 8 MB)
unrolled_split(isempty, itr) (filter(isempty, itr), filter(!isempty, itr)) Tuple 2 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) 3 times more (78 ms vs. 25 ms) 6 times more (6 MB vs. 975 kB)
unrolled_split(isempty, itr) (filter(isempty, itr), filter(!isempty, itr)) Tuple 8 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) 5 times more (146 ms vs. 25 ms) 13 times more (18 MB vs. 1 MB)
unrolled_split(isempty, itr) (filter(isempty, itr), filter(!isempty, itr)) Tuple 32 nonempty singleton Tuples better (optimized out vs. 1 kB allocs) 77 times less (40 ns vs. 3 μs) similar (271 ms vs. 141 ms) 3 times more (30 MB vs. 9 MB)
unrolled_split(isempty, itr) (filter(isempty, itr), filter(!isempty, itr)) Tuple 128 nonempty singleton Tuples better (optimized out vs. 4 kB allocs) 252 times less (40 ns vs. 10 μs) 6 times more (897 ms vs. 142 ms) 9 times more (85 MB vs. 9 MB)
unrolled_split(isempty, itr) (filter(isempty, itr), filter(!isempty, itr)) Tuple 2 nonempty non-singleton Tuples similar (11 LLVM lines) similar (40 ns vs. 40 ns) 2 times more (58 ms vs. 28 ms) 5 times more (6 MB vs. 1 MB)
unrolled_split(isempty, itr) (filter(isempty, itr), filter(!isempty, itr)) Tuple 8 nonempty non-singleton Tuples similar (29 LLVM lines) similar (50 ns vs. 50 ns) 3 times more (111 ms vs. 31 ms) 11 times more (23 MB vs. 2 MB)
unrolled_split(isempty, itr) (filter(isempty, itr), filter(!isempty, itr)) Tuple 32 nonempty non-singleton Tuples better (93 LLVM lines vs. 79 kB allocs) 147 times less (70 ns vs. 10 μs) similar (225 ms vs. 155 ms) 7 times more (64 MB vs. 9 MB)
unrolled_split(isempty, itr) (filter(isempty, itr), filter(!isempty, itr)) Tuple 128 nonempty non-singleton Tuples better (756 LLVM lines vs. 1 MB allocs) 181 times less (380 ns vs. 69 μs) 7 times more (1 s vs. 157 ms) 55 times more (546 MB vs. 10 MB)
unrolled_flatten(itr) Tuple(Iterators.flatten(itr)) Tuple 1 empty singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (46 ms vs. 25 ms) 2 times more (3 MB vs. 1 MB)
unrolled_flatten(itr) Tuple(Iterators.flatten(itr)) Tuple 1 nonempty singleton Tuple better (optimized out vs. 64 B allocs) 2 times less (40 ns vs. 110 ns) similar (49 ms vs. 38 ms) similar (3 MB vs. 3 MB)
unrolled_flatten(itr) Tuple(Iterators.flatten(itr)) Tuple 1 nonempty non-singleton Tuple better (8 LLVM lines vs. 80 B allocs) 3 times less (40 ns vs. 140 ns) similar (47 ms vs. 31 ms) similar (3 MB vs. 2 MB)
unrolled_flatten(itr) Tuple(Iterators.flatten(itr)) Tuple 2 identical nonempty singleton Tuples better (optimized out vs. 64 B allocs) 3 times less (40 ns vs. 130 ns) similar (55 ms vs. 40 ms) similar (3 MB vs. 3 MB)
unrolled_flatten(itr) Tuple(Iterators.flatten(itr)) Tuple 8 identical nonempty singleton Tuples better (optimized out vs. 64 B allocs) 6 times less (30 ns vs. 180 ns) 2 times more (95 ms vs. 40 ms) 2 times more (7 MB vs. 3 MB)
unrolled_flatten(itr) Tuple(Iterators.flatten(itr)) Tuple 32 identical nonempty singleton Tuples better (optimized out vs. 64 B allocs) 12 times less (40 ns vs. 480 ns) 4 times more (201 ms vs. 44 ms) 4 times more (15 MB vs. 3 MB)
unrolled_flatten(itr) Tuple(Iterators.flatten(itr)) Tuple 128 identical nonempty singleton Tuples better (optimized out vs. 64 B allocs) 41 times less (40 ns vs. 2 μs) 17 times more (726 ms vs. 41 ms) 17 times more (58 MB vs. 3 MB)
unrolled_flatten(itr) Tuple(Iterators.flatten(itr)) Tuple 2 identical nonempty non-singleton Tuples better (8 LLVM lines vs. 112 B allocs) 3 times less (40 ns vs. 150 ns) similar (53 ms vs. 34 ms) similar (4 MB vs. 3 MB)
unrolled_flatten(itr) Tuple(Iterators.flatten(itr)) Tuple 8 identical nonempty non-singleton Tuples better (8 LLVM lines vs. 208 B allocs) 6 times less (40 ns vs. 270 ns) 2 times more (76 ms vs. 36 ms) 2 times more (10 MB vs. 3 MB)
unrolled_flatten(itr) Tuple(Iterators.flatten(itr)) Tuple 32 identical nonempty non-singleton Tuples better (20 LLVM lines vs. 592 B allocs) 20 times less (40 ns vs. 811 ns) 4 times more (170 ms vs. 36 ms) 12 times more (43 MB vs. 3 MB)
unrolled_flatten(itr) Tuple(Iterators.flatten(itr)) Tuple 128 identical nonempty non-singleton Tuples better (68 LLVM lines vs. 2 kB allocs) 49 times less (60 ns vs. 3 μs) 26 times more (922 ms vs. 35 ms) 136 times more (458 MB vs. 3 MB)
unrolled_flatten(itr) Tuple(Iterators.flatten(itr)) Tuple 2 empty & nonempty singleton Tuples better (optimized out vs. 96 B allocs) 7 times less (40 ns vs. 310 ns) similar (56 ms vs. 57 ms) similar (3 MB vs. 5 MB)
unrolled_flatten(itr) Tuple(Iterators.flatten(itr)) Tuple 8 empty & nonempty singleton Tuples better (optimized out vs. 496 B allocs) 11 times less (40 ns vs. 470 ns) similar (100 ms vs. 68 ms) similar (7 MB vs. 6 MB)
unrolled_flatten(itr) Tuple(Iterators.flatten(itr)) Tuple 32 empty & nonempty singleton Tuples better (optimized out vs. 2 kB allocs) 79 times less (40 ns vs. 3 μs) 3 times more (220 ms vs. 64 ms) 3 times more (17 MB vs. 6 MB)
unrolled_flatten(itr) Tuple(Iterators.flatten(itr)) Tuple 128 empty & nonempty singleton Tuples better (optimized out vs. 8 kB allocs) 286 times less (40 ns vs. 11 μs) 14 times more (925 ms vs. 65 ms) 16 times more (93 MB vs. 6 MB)
unrolled_flatten(itr) Tuple(Iterators.flatten(itr)) Tuple 2 nonempty singleton Tuples better (optimized out vs. 192 B allocs) 5 times less (40 ns vs. 230 ns) similar (56 ms vs. 69 ms) similar (3 MB vs. 5 MB)
unrolled_flatten(itr) Tuple(Iterators.flatten(itr)) Tuple 8 nonempty singleton Tuples better (optimized out vs. 496 B allocs) 15 times less (40 ns vs. 621 ns) similar (100 ms vs. 67 ms) similar (7 MB vs. 7 MB)
unrolled_flatten(itr) Tuple(Iterators.flatten(itr)) Tuple 32 nonempty singleton Tuples better (optimized out vs. 2 kB allocs) 107 times less (30 ns vs. 3 μs) 3 times more (222 ms vs. 67 ms) 2 times more (18 MB vs. 7 MB)
unrolled_flatten(itr) Tuple(Iterators.flatten(itr)) Tuple 128 nonempty singleton Tuples better (optimized out vs. 8 kB allocs) 286 times less (40 ns vs. 11 μs) 15 times more (1 s vs. 67 ms) 16 times more (108 MB vs. 7 MB)
unrolled_flatten(itr) Tuple(Iterators.flatten(itr)) Tuple 2 nonempty non-singleton Tuples better (12 LLVM lines vs. 352 B allocs) 7 times less (40 ns vs. 290 ns) similar (53 ms vs. 50 ms) similar (4 MB vs. 5 MB)
unrolled_flatten(itr) Tuple(Iterators.flatten(itr)) Tuple 8 nonempty non-singleton Tuples better (20 LLVM lines vs. 2 kB allocs) 17 times less (50 ns vs. 851 ns) similar (81 ms vs. 46 ms) 2 times more (12 MB vs. 4 MB)
unrolled_flatten(itr) Tuple(Iterators.flatten(itr)) Tuple 32 nonempty non-singleton Tuples better (76 LLVM lines vs. 40 kB allocs) 98 times less (60 ns vs. 6 μs) 6 times more (304 ms vs. 47 ms) 28 times more (124 MB vs. 4 MB)
unrolled_flatten(itr) Tuple(Iterators.flatten(itr)) Tuple 128 nonempty non-singleton Tuples better (264 LLVM lines vs. 533 kB allocs) 117 times less (251 ns vs. 29 μs) 62 times more (3 s vs. 47 ms) 343 times more (2 GB vs. 5 MB)
unrolled_flatmap(Iterators.reverse, itr) Tuple(Iterators.flatmap(Iterators.reverse, itr)) Tuple 1 empty singleton Tuple similar (optimized out) similar (40 ns vs. 30 ns) similar (51 ms vs. 43 ms) 2 times more (3 MB vs. 1 MB)
unrolled_flatmap(Iterators.reverse, itr) Tuple(Iterators.flatmap(Iterators.reverse, itr)) Tuple 1 nonempty singleton Tuple better (optimized out vs. 64 B allocs) 3 times less (40 ns vs. 120 ns) similar (53 ms vs. 68 ms) similar (3 MB vs. 5 MB)
unrolled_flatmap(Iterators.reverse, itr) Tuple(Iterators.flatmap(Iterators.reverse, itr)) Tuple 1 nonempty non-singleton Tuple better (8 LLVM lines vs. 144 B allocs) 3 times less (40 ns vs. 140 ns) similar (47 ms vs. 43 ms) similar (4 MB vs. 4 MB)
unrolled_flatmap(Iterators.reverse, itr) Tuple(Iterators.flatmap(Iterators.reverse, itr)) Tuple 2 identical nonempty singleton Tuples better (optimized out vs. 96 B allocs) 3 times less (40 ns vs. 140 ns) similar (59 ms vs. 81 ms) similar (3 MB vs. 5 MB)
unrolled_flatmap(Iterators.reverse, itr) Tuple(Iterators.flatmap(Iterators.reverse, itr)) Tuple 8 identical nonempty singleton Tuples better (optimized out vs. 96 B allocs) 5 times less (40 ns vs. 210 ns) similar (98 ms vs. 82 ms) similar (7 MB vs. 5 MB)
unrolled_flatmap(Iterators.reverse, itr) Tuple(Iterators.flatmap(Iterators.reverse, itr)) Tuple 32 identical nonempty singleton Tuples better (optimized out vs. 128 B allocs) 17 times less (30 ns vs. 530 ns) 2 times more (208 ms vs. 81 ms) 2 times more (15 MB vs. 5 MB)
unrolled_flatmap(Iterators.reverse, itr) Tuple(Iterators.flatmap(Iterators.reverse, itr)) Tuple 128 identical nonempty singleton Tuples better (optimized out vs. 160 B allocs) 43 times less (40 ns vs. 2 μs) 9 times more (744 ms vs. 81 ms) 11 times more (58 MB vs. 5 MB)
unrolled_flatmap(Iterators.reverse, itr) Tuple(Iterators.flatmap(Iterators.reverse, itr)) Tuple 2 identical nonempty non-singleton Tuples better (8 LLVM lines vs. 192 B allocs) 4 times less (40 ns vs. 180 ns) similar (54 ms vs. 52 ms) similar (4 MB vs. 4 MB)
unrolled_flatmap(Iterators.reverse, itr) Tuple(Iterators.flatmap(Iterators.reverse, itr)) Tuple 8 identical nonempty non-singleton Tuples better (8 LLVM lines vs. 240 B allocs) 7 times less (40 ns vs. 300 ns) similar (78 ms vs. 53 ms) 2 times more (10 MB vs. 5 MB)
unrolled_flatmap(Iterators.reverse, itr) Tuple(Iterators.flatmap(Iterators.reverse, itr)) Tuple 32 identical nonempty non-singleton Tuples better (20 LLVM lines vs. 800 B allocs) 17 times less (50 ns vs. 881 ns) 3 times more (179 ms vs. 54 ms) 11 times more (48 MB vs. 4 MB)
unrolled_flatmap(Iterators.reverse, itr) Tuple(Iterators.flatmap(Iterators.reverse, itr)) Tuple 128 identical nonempty non-singleton Tuples better (68 LLVM lines vs. 3 kB allocs) 51 times less (60 ns vs. 3 μs) 18 times more (978 ms vs. 53 ms) 121 times more (527 MB vs. 4 MB)
unrolled_flatmap(Iterators.reverse, itr) Tuple(Iterators.flatmap(Iterators.reverse, itr)) Tuple 2 empty & nonempty singleton Tuples better (optimized out vs. 144 B allocs) 8 times less (30 ns vs. 240 ns) similar (62 ms vs. 96 ms) 2 times less (4 MB vs. 7 MB)
unrolled_flatmap(Iterators.reverse, itr) Tuple(Iterators.flatmap(Iterators.reverse, itr)) Tuple 8 empty & nonempty singleton Tuples better (optimized out vs. 2 kB allocs) 139 times less (30 ns vs. 4 μs) 2 times less (111 ms vs. 268 ms) 4 times less (7 MB vs. 30 MB)
unrolled_flatmap(Iterators.reverse, itr) Tuple(Iterators.flatmap(Iterators.reverse, itr)) Tuple 32 empty & nonempty singleton Tuples better (optimized out vs. 15 kB allocs) 696 times less (30 ns vs. 21 μs) similar (245 ms vs. 331 ms) similar (18 MB vs. 33 MB)
unrolled_flatmap(Iterators.reverse, itr) Tuple(Iterators.flatmap(Iterators.reverse, itr)) Tuple 128 empty & nonempty singleton Tuples better (optimized out vs. 55 kB allocs) 1679 times less (40 ns vs. 67 μs) 2 times more (959 ms vs. 331 ms) 2 times more (94 MB vs. 33 MB)
unrolled_flatmap(Iterators.reverse, itr) Tuple(Iterators.flatmap(Iterators.reverse, itr)) Tuple 2 nonempty singleton Tuples better (optimized out vs. 240 B allocs) 10 times less (30 ns vs. 310 ns) 3 times less (63 ms vs. 190 ms) 4 times less (4 MB vs. 17 MB)
unrolled_flatmap(Iterators.reverse, itr) Tuple(Iterators.flatmap(Iterators.reverse, itr)) Tuple 8 nonempty singleton Tuples better (optimized out vs. 3 kB allocs) 79 times less (40 ns vs. 3 μs) 2 times less (112 ms vs. 249 ms) 3 times less (7 MB vs. 24 MB)
unrolled_flatmap(Iterators.reverse, itr) Tuple(Iterators.flatmap(Iterators.reverse, itr)) Tuple 32 nonempty singleton Tuples better (optimized out vs. 15 kB allocs) 463 times less (40 ns vs. 19 μs) similar (245 ms vs. 305 ms) similar (19 MB vs. 26 MB)
unrolled_flatmap(Iterators.reverse, itr) Tuple(Iterators.flatmap(Iterators.reverse, itr)) Tuple 128 nonempty singleton Tuples better (optimized out vs. 55 kB allocs) 1658 times less (40 ns vs. 66 μs) 3 times more (1 s vs. 305 ms) 4 times more (109 MB vs. 26 MB)
unrolled_flatmap(Iterators.reverse, itr) Tuple(Iterators.flatmap(Iterators.reverse, itr)) Tuple 2 nonempty non-singleton Tuples better (13 LLVM lines vs. 352 B allocs) 8 times less (40 ns vs. 320 ns) similar (54 ms vs. 68 ms) similar (4 MB vs. 6 MB)
unrolled_flatmap(Iterators.reverse, itr) Tuple(Iterators.flatmap(Iterators.reverse, itr)) Tuple 8 nonempty non-singleton Tuples better (32 LLVM lines vs. 9 kB allocs) 55 times less (50 ns vs. 3 μs) similar (85 ms vs. 112 ms) similar (14 MB vs. 7 MB)
unrolled_flatmap(Iterators.reverse, itr) Tuple(Iterators.flatmap(Iterators.reverse, itr)) Tuple 32 nonempty non-singleton Tuples better (239 LLVM lines vs. 229 kB allocs) 470 times less (70 ns vs. 33 μs) similar (329 ms vs. 179 ms) 15 times more (147 MB vs. 9 MB)
unrolled_flatmap(Iterators.reverse, itr) Tuple(Iterators.flatmap(Iterators.reverse, itr)) Tuple 128 nonempty non-singleton Tuples better (816 LLVM lines vs. 3 MB allocs) 918 times less (260 ns vs. 239 μs) 19 times more (4 s vs. 179 ms) 162 times more (2 GB vs. 12 MB)
unrolled_product(itr, itr) Tuple(Iterators.product(itr, itr)) Tuple 1 empty singleton Tuple better (optimized out vs. 80 B allocs) 2 times less (40 ns vs. 110 ns) similar (70 ms vs. 88 ms) 2 times less (7 MB vs. 15 MB)
unrolled_product(itr, itr) Tuple(Iterators.product(itr, itr)) Tuple 1 nonempty singleton Tuple better (optimized out vs. 80 B allocs) 2 times less (40 ns vs. 110 ns) similar (71 ms vs. 87 ms) 2 times less (7 MB vs. 15 MB)
unrolled_product(itr, itr) Tuple(Iterators.product(itr, itr)) Tuple 1 nonempty non-singleton Tuple better (10 LLVM lines vs. 160 B allocs) 3 times less (40 ns vs. 140 ns) similar (72 ms vs. 81 ms) 2 times less (7 MB vs. 17 MB)
unrolled_product(itr, itr) Tuple(Iterators.product(itr, itr)) Tuple 2 identical nonempty singleton Tuples better (optimized out vs. 80 B allocs) 3 times less (40 ns vs. 140 ns) similar (73 ms vs. 91 ms) 2 times less (8 MB vs. 16 MB)
unrolled_product(itr, itr) Tuple(Iterators.product(itr, itr)) Tuple 8 identical nonempty singleton Tuples better (optimized out vs. 80 B allocs) 22 times less (40 ns vs. 891 ns) similar (100 ms vs. 91 ms) similar (10 MB vs. 16 MB)
unrolled_product(itr, itr) Tuple(Iterators.product(itr, itr)) Tuple 32 identical nonempty singleton Tuples better (optimized out vs. 8 kB allocs) 439 times less (30 ns vs. 13 μs) 7 times more (704 ms vs. 91 ms) 2 times more (46 MB vs. 16 MB)
unrolled_product(itr, itr) Tuple(Iterators.product(itr, itr)) Tuple 2 identical nonempty non-singleton Tuples better (9 LLVM lines vs. 352 B allocs) 5 times less (40 ns vs. 220 ns) similar (75 ms vs. 87 ms) 2 times less (8 MB vs. 16 MB)
unrolled_product(itr, itr) Tuple(Iterators.product(itr, itr)) Tuple 8 identical nonempty non-singleton Tuples better (137 LLVM lines vs. 4 kB allocs) 29 times less (70 ns vs. 2 μs) similar (140 ms vs. 87 ms) similar (10 MB vs. 16 MB)
unrolled_product(itr, itr) Tuple(Iterators.product(itr, itr)) Tuple 32 identical nonempty non-singleton Tuples better (2267 LLVM lines vs. 72 kB allocs) 39 times less (761 ns vs. 30 μs) 80 times more (7 s vs. 88 ms) 3 times more (55 MB vs. 16 MB)
unrolled_product(itr, itr) Tuple(Iterators.product(itr, itr)) Tuple 2 empty & nonempty singleton Tuples better (optimized out vs. 112 B allocs) 6 times less (40 ns vs. 240 ns) similar (75 ms vs. 114 ms) 2 times less (8 MB vs. 21 MB)
unrolled_product(itr, itr) Tuple(Iterators.product(itr, itr)) Tuple 8 empty & nonempty singleton Tuples better (optimized out vs. 592 B allocs) 66 times less (40 ns vs. 3 μs) similar (110 ms vs. 114 ms) 2 times less (10 MB vs. 21 MB)
unrolled_product(itr, itr) Tuple(Iterators.product(itr, itr)) Tuple 32 empty & nonempty singleton Tuples better (optimized out vs. 16 kB allocs) 1052 times less (40 ns vs. 42 μs) 18 times more (2 s vs. 113 ms) 2 times more (48 MB vs. 21 MB)
unrolled_product(itr, itr) Tuple(Iterators.product(itr, itr)) Tuple 2 nonempty singleton Tuples better (optimized out vs. 112 B allocs) 5 times less (40 ns vs. 231 ns) similar (75 ms vs. 115 ms) 2 times less (8 MB vs. 21 MB)
unrolled_product(itr, itr) Tuple(Iterators.product(itr, itr)) Tuple 8 nonempty singleton Tuples better (optimized out vs. 592 B allocs) 162 times less (30 ns vs. 5 μs) similar (110 ms vs. 164 ms) 2 times less (10 MB vs. 23 MB)
unrolled_product(itr, itr) Tuple(Iterators.product(itr, itr)) Tuple 32 nonempty singleton Tuples better (optimized out vs. 24 kB allocs) 2509 times less (30 ns vs. 75 μs) 7 times more (2 s vs. 270 ms) similar (48 MB vs. 27 MB)
unrolled_product(itr, itr) Tuple(Iterators.product(itr, itr)) Tuple 2 nonempty non-singleton Tuples better (25 LLVM lines vs. 592 B allocs) 7 times less (50 ns vs. 380 ns) similar (77 ms vs. 117 ms) 2 times less (8 MB vs. 21 MB)
unrolled_product(itr, itr) Tuple(Iterators.product(itr, itr)) Tuple 8 nonempty non-singleton Tuples better (394 LLVM lines vs. 25 kB allocs) 40 times less (220 ns vs. 9 μs) similar (151 ms vs. 189 ms) 2 times less (10 MB vs. 24 MB)
unrolled_product(itr, itr) Tuple(Iterators.product(itr, itr)) Tuple 32 nonempty non-singleton Tuples better (8159 LLVM lines vs. 1 MB allocs) 34 times less (8 μs vs. 276 μs) 12 times more (4 s vs. 356 ms) similar (56 MB vs. 30 MB)
unrolled_product(itr, itr, itr) Tuple(Iterators.product(itr, itr, itr)) Tuple 1 empty singleton Tuple better (optimized out vs. 80 B allocs) 2 times less (40 ns vs. 110 ns) similar (74 ms vs. 101 ms) similar (9 MB vs. 17 MB)
unrolled_product(itr, itr, itr) Tuple(Iterators.product(itr, itr, itr)) Tuple 1 nonempty singleton Tuple better (optimized out vs. 80 B allocs) 2 times less (40 ns vs. 100 ns) similar (74 ms vs. 102 ms) similar (9 MB vs. 17 MB)
unrolled_product(itr, itr, itr) Tuple(Iterators.product(itr, itr, itr)) Tuple 1 nonempty non-singleton Tuple better (12 LLVM lines vs. 160 B allocs) 3 times less (40 ns vs. 140 ns) similar (74 ms vs. 94 ms) 2 times less (9 MB vs. 19 MB)
unrolled_product(itr, itr, itr) Tuple(Iterators.product(itr, itr, itr)) Tuple 2 identical nonempty singleton Tuples better (optimized out vs. 80 B allocs) 4 times less (40 ns vs. 180 ns) similar (80 ms vs. 106 ms) similar (9 MB vs. 18 MB)
unrolled_product(itr, itr, itr) Tuple(Iterators.product(itr, itr, itr)) Tuple 8 identical nonempty singleton Tuples better (optimized out vs. 4 kB allocs) 166 times less (40 ns vs. 7 μs) 6 times more (646 ms vs. 107 ms) 2 times more (36 MB vs. 18 MB)
unrolled_product(itr, itr, itr) Tuple(Iterators.product(itr, itr, itr)) Tuple 2 identical nonempty non-singleton Tuples better (15 LLVM lines vs. 736 B allocs) 8 times less (40 ns vs. 340 ns) similar (86 ms vs. 106 ms) similar (9 MB vs. 18 MB)
unrolled_product(itr, itr, itr) Tuple(Iterators.product(itr, itr, itr)) Tuple 8 identical nonempty non-singleton Tuples better (1108 LLVM lines vs. 44 kB allocs) 31 times less (491 ns vs. 15 μs) 37 times more (4 s vs. 106 ms) 2 times more (41 MB vs. 19 MB)
unrolled_product(itr, itr, itr) Tuple(Iterators.product(itr, itr, itr)) Tuple 2 empty & nonempty singleton Tuples better (optimized out vs. 144 B allocs) 11 times less (40 ns vs. 451 ns) similar (83 ms vs. 126 ms) 2 times less (9 MB vs. 23 MB)
unrolled_product(itr, itr, itr) Tuple(Iterators.product(itr, itr, itr)) Tuple 8 empty & nonempty singleton Tuples better (optimized out vs. 8 kB allocs) 603 times less (40 ns vs. 24 μs) 10 times more (1 s vs. 123 ms) similar (37 MB vs. 24 MB)
unrolled_product(itr, itr, itr) Tuple(Iterators.product(itr, itr, itr)) Tuple 2 nonempty singleton Tuples better (optimized out vs. 144 B allocs) 15 times less (30 ns vs. 460 ns) similar (82 ms vs. 128 ms) 2 times less (9 MB vs. 24 MB)
unrolled_product(itr, itr, itr) Tuple(Iterators.product(itr, itr, itr)) Tuple 8 nonempty singleton Tuples better (optimized out vs. 8 kB allocs) 1051 times less (40 ns vs. 42 μs) 3 times more (1 s vs. 331 ms) similar (37 MB vs. 32 MB)
unrolled_product(itr, itr, itr) Tuple(Iterators.product(itr, itr, itr)) Tuple 2 nonempty non-singleton Tuples better (59 LLVM lines vs. 1 kB allocs) 18 times less (50 ns vs. 901 ns) similar (89 ms vs. 146 ms) 2 times less (9 MB vs. 24 MB)
unrolled_product(itr, itr, itr) Tuple(Iterators.product(itr, itr, itr)) Tuple 8 nonempty non-singleton Tuples better (5538 LLVM lines vs. 234 kB allocs) 29 times less (3 μs vs. 93 μs) 6 times more (3 s vs. 444 ms) similar (42 MB vs. 33 MB)
unrolled_cycle(itr, Val(3)) Tuple(Iterators.cycle(itr, 3)) Tuple 1 empty singleton Tuple better (optimized out vs. 64 B allocs) 3 times less (40 ns vs. 130 ns) similar (54 ms vs. 46 ms) similar (3 MB vs. 5 MB)
unrolled_cycle(itr, Val(3)) Tuple(Iterators.cycle(itr, 3)) Tuple 1 nonempty singleton Tuple better (optimized out vs. 64 B allocs) 3 times less (40 ns vs. 140 ns) similar (54 ms vs. 48 ms) similar (3 MB vs. 5 MB)
unrolled_cycle(itr, Val(3)) Tuple(Iterators.cycle(itr, 3)) Tuple 1 nonempty non-singleton Tuple better (12 LLVM lines vs. 160 B allocs) 4 times less (40 ns vs. 190 ns) similar (49 ms vs. 44 ms) similar (4 MB vs. 5 MB)
unrolled_cycle(itr, Val(3)) Tuple(Iterators.cycle(itr, 3)) Tuple 2 identical nonempty singleton Tuples better (optimized out vs. 64 B allocs) 4 times less (40 ns vs. 160 ns) similar (55 ms vs. 45 ms) similar (3 MB vs. 5 MB)
unrolled_cycle(itr, Val(3)) Tuple(Iterators.cycle(itr, 3)) Tuple 8 identical nonempty singleton Tuples better (optimized out vs. 64 B allocs) 12 times less (30 ns vs. 380 ns) similar (55 ms vs. 45 ms) similar (4 MB vs. 5 MB)
unrolled_cycle(itr, Val(3)) Tuple(Iterators.cycle(itr, 3)) Tuple 32 identical nonempty singleton Tuples better (optimized out vs. 64 B allocs) 43 times less (30 ns vs. 1 μs) similar (56 ms vs. 45 ms) similar (4 MB vs. 5 MB)
unrolled_cycle(itr, Val(3)) Tuple(Iterators.cycle(itr, 3)) Tuple 128 identical nonempty singleton Tuples better (optimized out vs. 64 B allocs) 121 times less (40 ns vs. 5 μs) similar (62 ms vs. 45 ms) similar (5 MB vs. 5 MB)
unrolled_cycle(itr, Val(3)) Tuple(Iterators.cycle(itr, 3)) Tuple 2 identical nonempty non-singleton Tuples better (11 LLVM lines vs. 272 B allocs) 5 times less (50 ns vs. 280 ns) similar (51 ms vs. 46 ms) similar (5 MB vs. 5 MB)
unrolled_cycle(itr, Val(3)) Tuple(Iterators.cycle(itr, 3)) Tuple 8 identical nonempty non-singleton Tuples better (68 LLVM lines vs. 848 B allocs) 22 times less (50 ns vs. 1 μs) similar (55 ms vs. 48 ms) similar (7 MB vs. 6 MB)
unrolled_cycle(itr, Val(3)) Tuple(Iterators.cycle(itr, 3)) Tuple 32 identical nonempty non-singleton Tuples better (260 LLVM lines vs. 3 kB allocs) 83 times less (70 ns vs. 6 μs) similar (79 ms vs. 49 ms) 2 times more (14 MB vs. 6 MB)
unrolled_cycle(itr, Val(3)) Tuple(Iterators.cycle(itr, 3)) Tuple 128 identical nonempty non-singleton Tuples better (132 LLVM lines vs. 12 kB allocs) 255 times less (160 ns vs. 41 μs) 4 times more (209 ms vs. 48 ms) 7 times more (42 MB vs. 5 MB)
unrolled_cycle(itr, Val(3)) Tuple(Iterators.cycle(itr, 3)) Tuple 2 empty & nonempty singleton Tuples better (optimized out vs. 112 B allocs) 4 times less (40 ns vs. 180 ns) similar (56 ms vs. 49 ms) similar (3 MB vs. 6 MB)
unrolled_cycle(itr, Val(3)) Tuple(Iterators.cycle(itr, 3)) Tuple 8 empty & nonempty singleton Tuples better (optimized out vs. 256 B allocs) 13 times less (40 ns vs. 520 ns) similar (55 ms vs. 49 ms) similar (4 MB vs. 6 MB)
unrolled_cycle(itr, Val(3)) Tuple(Iterators.cycle(itr, 3)) Tuple 32 empty & nonempty singleton Tuples better (optimized out vs. 848 B allocs) 45 times less (40 ns vs. 2 μs) similar (56 ms vs. 49 ms) similar (4 MB vs. 6 MB)
unrolled_cycle(itr, Val(3)) Tuple(Iterators.cycle(itr, 3)) Tuple 128 empty & nonempty singleton Tuples better (optimized out vs. 3 kB allocs) 181 times less (40 ns vs. 7 μs) similar (63 ms vs. 50 ms) similar (5 MB vs. 6 MB)
unrolled_cycle(itr, Val(3)) Tuple(Iterators.cycle(itr, 3)) Tuple 2 nonempty singleton Tuples better (optimized out vs. 112 B allocs) 4 times less (40 ns vs. 190 ns) similar (56 ms vs. 48 ms) similar (3 MB vs. 6 MB)
unrolled_cycle(itr, Val(3)) Tuple(Iterators.cycle(itr, 3)) Tuple 8 nonempty singleton Tuples better (optimized out vs. 256 B allocs) 22 times less (40 ns vs. 901 ns) similar (54 ms vs. 61 ms) similar (4 MB vs. 6 MB)
unrolled_cycle(itr, Val(3)) Tuple(Iterators.cycle(itr, 3)) Tuple 32 nonempty singleton Tuples better (optimized out vs. 848 B allocs) 118 times less (40 ns vs. 5 μs) similar (56 ms vs. 72 ms) similar (4 MB vs. 6 MB)
unrolled_cycle(itr, Val(3)) Tuple(Iterators.cycle(itr, 3)) Tuple 128 nonempty singleton Tuples better (optimized out vs. 3 kB allocs) 541 times less (30 ns vs. 16 μs) similar (63 ms vs. 71 ms) similar (5 MB vs. 6 MB)
unrolled_cycle(itr, Val(3)) Tuple(Iterators.cycle(itr, 3)) Tuple 2 nonempty non-singleton Tuples better (19 LLVM lines vs. 528 B allocs) 7 times less (40 ns vs. 300 ns) similar (51 ms vs. 56 ms) similar (5 MB vs. 6 MB)
unrolled_cycle(itr, Val(3)) Tuple(Iterators.cycle(itr, 3)) Tuple 8 nonempty non-singleton Tuples better (61 LLVM lines vs. 6 kB allocs) 31 times less (60 ns vs. 2 μs) similar (57 ms vs. 71 ms) similar (7 MB vs. 6 MB)
unrolled_cycle(itr, Val(3)) Tuple(Iterators.cycle(itr, 3)) Tuple 32 nonempty non-singleton Tuples better (233 LLVM lines vs. 119 kB allocs) 131 times less (180 ns vs. 24 μs) similar (99 ms vs. 86 ms) 2 times more (14 MB vs. 6 MB)
unrolled_cycle(itr, Val(3)) Tuple(Iterators.cycle(itr, 3)) Tuple 128 nonempty non-singleton Tuples better (1416 LLVM lines vs. 2 MB allocs) 328 times less (711 ns vs. 234 μs) 6 times more (577 ms vs. 87 ms) 5 times more (42 MB vs. 8 MB)
unrolled_partition(itr, Val(3)) Tuple(Iterators.map(Tuple, Iterators.partition(itr, 3))) Tuple 1 empty singleton Tuple better (optimized out vs. 320 B allocs) 28 times less (30 ns vs. 841 ns) similar (47 ms vs. 92 ms) 5 times less (2 MB vs. 11 MB)
unrolled_partition(itr, Val(3)) Tuple(Iterators.map(Tuple, Iterators.partition(itr, 3))) Tuple 1 nonempty singleton Tuple better (optimized out vs. 320 B allocs) 20 times less (40 ns vs. 821 ns) similar (47 ms vs. 92 ms) 5 times less (2 MB vs. 12 MB)
unrolled_partition(itr, Val(3)) Tuple(Iterators.map(Tuple, Iterators.partition(itr, 3))) Tuple 1 nonempty non-singleton Tuple better (8 LLVM lines vs. 400 B allocs) 24 times less (40 ns vs. 971 ns) 2 times less (42 ms vs. 95 ms) 4 times less (3 MB vs. 12 MB)
unrolled_partition(itr, Val(3)) Tuple(Iterators.map(Tuple, Iterators.partition(itr, 3))) Tuple 2 identical nonempty singleton Tuples better (optimized out vs. 320 B allocs) 27 times less (30 ns vs. 811 ns) similar (47 ms vs. 94 ms) 5 times less (2 MB vs. 11 MB)
unrolled_partition(itr, Val(3)) Tuple(Iterators.map(Tuple, Iterators.partition(itr, 3))) Tuple 8 identical nonempty singleton Tuples better (optimized out vs. 592 B allocs) 40 times less (30 ns vs. 1 μs) 2 times less (70 ms vs. 151 ms) 6 times less (3 MB vs. 20 MB)
unrolled_partition(itr, Val(3)) Tuple(Iterators.map(Tuple, Iterators.partition(itr, 3))) Tuple 32 identical nonempty singleton Tuples better (optimized out vs. 1 kB allocs) 49 times less (40 ns vs. 2 μs) similar (126 ms vs. 156 ms) 2 times less (7 MB vs. 20 MB)
unrolled_partition(itr, Val(3)) Tuple(Iterators.map(Tuple, Iterators.partition(itr, 3))) Tuple 128 identical nonempty singleton Tuples better (optimized out vs. 3 kB allocs) 127 times less (40 ns vs. 5 μs) 2 times more (374 ms vs. 156 ms) similar (25 MB vs. 20 MB)
unrolled_partition(itr, Val(3)) Tuple(Iterators.map(Tuple, Iterators.partition(itr, 3))) Tuple 2 identical nonempty non-singleton Tuples better (8 LLVM lines vs. 496 B allocs) 23 times less (40 ns vs. 922 ns) 2 times less (42 ms vs. 97 ms) 4 times less (3 MB vs. 12 MB)
unrolled_partition(itr, Val(3)) Tuple(Iterators.map(Tuple, Iterators.partition(itr, 3))) Tuple 8 identical nonempty non-singleton Tuples better (8 LLVM lines vs. 1 kB allocs) 35 times less (40 ns vs. 1 μs) 3 times less (54 ms vs. 170 ms) 4 times less (5 MB vs. 20 MB)
unrolled_partition(itr, Val(3)) Tuple(Iterators.map(Tuple, Iterators.partition(itr, 3))) Tuple 32 identical nonempty non-singleton Tuples better (20 LLVM lines vs. 4 kB allocs) 69 times less (40 ns vs. 3 μs) 2 times less (73 ms vs. 170 ms) similar (14 MB vs. 20 MB)
unrolled_partition(itr, Val(3)) Tuple(Iterators.map(Tuple, Iterators.partition(itr, 3))) Tuple 128 identical nonempty non-singleton Tuples better (68 LLVM lines vs. 14 kB allocs) 135 times less (60 ns vs. 8 μs) similar (268 ms vs. 186 ms) 4 times more (90 MB vs. 20 MB)
unrolled_partition(itr, Val(3)) Tuple(Iterators.map(Tuple, Iterators.partition(itr, 3))) Tuple 2 empty & nonempty singleton Tuples better (optimized out vs. 368 B allocs) 23 times less (40 ns vs. 941 ns) 2 times less (47 ms vs. 103 ms) 4 times less (2 MB vs. 10 MB)
unrolled_partition(itr, Val(3)) Tuple(Iterators.map(Tuple, Iterators.partition(itr, 3))) Tuple 8 empty & nonempty singleton Tuples better (optimized out vs. 752 B allocs) 46 times less (30 ns vs. 1 μs) 2 times less (72 ms vs. 211 ms) 9 times less (3 MB vs. 29 MB)
unrolled_partition(itr, Val(3)) Tuple(Iterators.map(Tuple, Iterators.partition(itr, 3))) Tuple 32 empty & nonempty singleton Tuples better (optimized out vs. 2 kB allocs) 517 times less (30 ns vs. 16 μs) 2 times less (127 ms vs. 264 ms) 5 times less (7 MB vs. 36 MB)
unrolled_partition(itr, Val(3)) Tuple(Iterators.map(Tuple, Iterators.partition(itr, 3))) Tuple 128 empty & nonempty singleton Tuples better (optimized out vs. 5 kB allocs) 1714 times less (30 ns vs. 51 μs) similar (383 ms vs. 353 ms) similar (25 MB vs. 43 MB)
unrolled_partition(itr, Val(3)) Tuple(Iterators.map(Tuple, Iterators.partition(itr, 3))) Tuple 2 nonempty singleton Tuples better (optimized out vs. 368 B allocs) 23 times less (40 ns vs. 931 ns) 2 times less (47 ms vs. 103 ms) 4 times less (2 MB vs. 10 MB)
unrolled_partition(itr, Val(3)) Tuple(Iterators.map(Tuple, Iterators.partition(itr, 3))) Tuple 8 nonempty singleton Tuples better (optimized out vs. 832 B allocs) 43 times less (40 ns vs. 2 μs) 3 times less (69 ms vs. 224 ms) 8 times less (3 MB vs. 28 MB)
unrolled_partition(itr, Val(3)) Tuple(Iterators.map(Tuple, Iterators.partition(itr, 3))) Tuple 32 nonempty singleton Tuples better (optimized out vs. 2 kB allocs) 389 times less (40 ns vs. 16 μs) 2 times less (127 ms vs. 361 ms) 6 times less (7 MB vs. 43 MB)
unrolled_partition(itr, Val(3)) Tuple(Iterators.map(Tuple, Iterators.partition(itr, 3))) Tuple 128 nonempty singleton Tuples better (optimized out vs. 7 kB allocs) 1268 times less (40 ns vs. 51 μs) similar (385 ms vs. 363 ms) similar (25 MB vs. 43 MB)
unrolled_partition(itr, Val(3)) Tuple(Iterators.map(Tuple, Iterators.partition(itr, 3))) Tuple 2 nonempty non-singleton Tuples better (11 LLVM lines vs. 624 B allocs) 26 times less (40 ns vs. 1 μs) 2 times less (43 ms vs. 112 ms) 3 times less (3 MB vs. 11 MB)
unrolled_partition(itr, Val(3)) Tuple(Iterators.map(Tuple, Iterators.partition(itr, 3))) Tuple 8 nonempty non-singleton Tuples better (29 LLVM lines vs. 4 kB allocs) 42 times less (50 ns vs. 2 μs) 4 times less (55 ms vs. 245 ms) 6 times less (5 MB vs. 28 MB)
unrolled_partition(itr, Val(3)) Tuple(Iterators.map(Tuple, Iterators.partition(itr, 3))) Tuple 32 nonempty non-singleton Tuples better (93 LLVM lines vs. 49 kB allocs) 183 times less (70 ns vs. 13 μs) 4 times less (79 ms vs. 329 ms) 2 times less (14 MB vs. 36 MB)
unrolled_partition(itr, Val(3)) Tuple(Iterators.map(Tuple, Iterators.partition(itr, 3))) Tuple 128 nonempty non-singleton Tuples better (548 LLVM lines vs. 564 kB allocs) 1162 times less (240 ns vs. 279 μs) similar (336 ms vs. 489 ms) 2 times more (90 MB vs. 36 MB)

Nested Unrolled Functions

Unrolled Expression Reference Expression Itr Type Itr Length Itr Contents Optimization Run Time Compilation Time Total Allocations
unrolled_any((x->unrolled_sum(x) > 7), itr3) any((x->sum(x) > 7), itr3) Tuple 1 nonempty non-singleton Tuple similar (9 LLVM lines) similar (40 ns vs. 40 ns) similar (45 ms vs. 37 ms) 2 times less (712 kB vs. 2 MB)
unrolled_any((x->unrolled_sum(x) > 7), itr3) any((x->sum(x) > 7), itr3) Tuple 2 identical nonempty non-singleton Tuples similar (13 LLVM lines) similar (40 ns vs. 40 ns) similar (45 ms vs. 39 ms) 2 times less (753 kB vs. 2 MB)
unrolled_any((x->unrolled_sum(x) > 7), itr3) any((x->sum(x) > 7), itr3) Tuple 8 identical nonempty non-singleton Tuples similar (12 LLVM lines) similar (40 ns vs. 40 ns) similar (62 ms vs. 39 ms) similar (1 MB vs. 2 MB)
unrolled_any((x->unrolled_sum(x) > 7), itr3) any((x->sum(x) > 7), itr3) Tuple 32 identical nonempty non-singleton Tuples similar (12 LLVM lines) similar (40 ns vs. 50 ns) similar (65 ms vs. 39 ms) similar (2 MB vs. 2 MB)
unrolled_any((x->unrolled_sum(x) > 7), itr3) any((x->sum(x) > 7), itr3) Tuple 128 identical nonempty non-singleton Tuples similar (12 LLVM lines) similar (50 ns vs. 70 ns) 2 times more (84 ms vs. 40 ms) 3 times more (6 MB vs. 2 MB)
unrolled_any((x->unrolled_sum(x) > 7), itr3) any((x->sum(x) > 7), itr3) Tuple 2 nonempty non-singleton Tuples similar (22 LLVM lines) similar (40 ns vs. 40 ns) similar (47 ms vs. 40 ms) similar (1 MB vs. 2 MB)
unrolled_any((x->unrolled_sum(x) > 7), itr3) any((x->sum(x) > 7), itr3) Tuple 8 nonempty non-singleton Tuples similar (81 LLVM lines) similar (40 ns vs. 40 ns) similar (87 ms vs. 65 ms) similar (5 MB vs. 5 MB)
unrolled_any((x->unrolled_sum(x) > 7), itr3) any((x->sum(x) > 7), itr3) Tuple 32 nonempty non-singleton Tuples similar (353 LLVM lines) 558 times less (40 ns vs. 22 μs) similar (111 ms vs. 75 ms) similar (9 MB vs. 7 MB)
unrolled_any((x->unrolled_sum(x) > 7), itr3) any((x->sum(x) > 7), itr3) Tuple 128 nonempty non-singleton Tuples better (1252 LLVM lines vs. 25 kB allocs) 22 times less (40 ns vs. 881 ns) 3 times more (210 ms vs. 57 ms) 2 times more (15 MB vs. 6 MB)
unrolled_mapreduce(unrolled_sum, max, itr3) mapreduce(sum, max, itr3) Tuple 1 nonempty non-singleton Tuple similar (7 LLVM lines) similar (40 ns vs. 40 ns) similar (44 ms vs. 45 ms) 6 times less (970 kB vs. 7 MB)
unrolled_mapreduce(unrolled_sum, max, itr3) mapreduce(sum, max, itr3) Tuple 2 identical nonempty non-singleton Tuples similar (10 LLVM lines) similar (40 ns vs. 40 ns) similar (44 ms vs. 45 ms) 6 times less (1 MB vs. 7 MB)
unrolled_mapreduce(unrolled_sum, max, itr3) mapreduce(sum, max, itr3) Tuple 8 identical nonempty non-singleton Tuples similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (66 ms vs. 48 ms) 2 times less (3 MB vs. 8 MB)
unrolled_mapreduce(unrolled_sum, max, itr3) mapreduce(sum, max, itr3) Tuple 32 identical nonempty non-singleton Tuples similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (70 ms vs. 57 ms) 2 times less (5 MB vs. 14 MB)
unrolled_mapreduce(unrolled_sum, max, itr3) mapreduce(sum, max, itr3) Tuple 128 identical nonempty non-singleton Tuples similar (8 LLVM lines) 2 times less (50 ns vs. 110 ns) similar (89 ms vs. 47 ms) similar (11 MB vs. 7 MB)
unrolled_mapreduce(unrolled_sum, max, itr3) mapreduce(sum, max, itr3) Tuple 2 nonempty non-singleton Tuples similar (13 LLVM lines) similar (40 ns vs. 40 ns) similar (45 ms vs. 46 ms) 4 times less (2 MB vs. 7 MB)
unrolled_mapreduce(unrolled_sum, max, itr3) mapreduce(sum, max, itr3) Tuple 8 nonempty non-singleton Tuples similar (54 LLVM lines) similar (40 ns vs. 40 ns) similar (70 ms vs. 53 ms) 2 times less (5 MB vs. 11 MB)
unrolled_mapreduce(unrolled_sum, max, itr3) mapreduce(sum, max, itr3) Tuple 32 nonempty non-singleton Tuples similar (252 LLVM lines) similar (60 ns vs. 80 ns) similar (93 ms vs. 99 ms) 2 times less (10 MB vs. 23 MB)
unrolled_mapreduce(unrolled_sum, max, itr3) mapreduce(sum, max, itr3) Tuple 128 nonempty non-singleton Tuples better (1295 LLVM lines vs. 521 kB allocs) 235 times less (130 ns vs. 31 μs) similar (146 ms vs. 86 ms) similar (18 MB vs. 20 MB)
unrolled_applyat(unrolled_minimum, rand(1:length(itr3)), itr3) minimum(itr3[rand(1:length(itr3))]) Tuple 1 nonempty non-singleton Tuple similar (20 LLVM lines) similar (40 ns vs. 40 ns) similar (66 ms vs. 41 ms) similar (3 MB vs. 3 MB)
unrolled_applyat(unrolled_minimum, rand(1:length(itr3)), itr3) minimum(itr3[rand(1:length(itr3))]) Tuple 2 identical nonempty non-singleton Tuples similar (27 LLVM lines w/ switch) similar (40 ns vs. 50 ns) similar (67 ms vs. 41 ms) similar (3 MB vs. 3 MB)
unrolled_applyat(unrolled_minimum, rand(1:length(itr3)), itr3) minimum(itr3[rand(1:length(itr3))]) Tuple 8 identical nonempty non-singleton Tuples similar (57 LLVM lines w/ switch) similar (50 ns vs. 50 ns) similar (82 ms vs. 41 ms) similar (4 MB vs. 3 MB)
unrolled_applyat(unrolled_minimum, rand(1:length(itr3)), itr3) minimum(itr3[rand(1:length(itr3))]) Tuple 32 identical nonempty non-singleton Tuples similar (177 LLVM lines w/ switch) similar (50 ns vs. 50 ns) 2 times more (90 ms vs. 41 ms) 2 times more (6 MB vs. 3 MB)
unrolled_applyat(unrolled_minimum, rand(1:length(itr3)), itr3) minimum(itr3[rand(1:length(itr3))]) Tuple 128 identical nonempty non-singleton Tuples similar (657 LLVM lines w/ switch) similar (60 ns vs. 50 ns) 2 times more (121 ms vs. 41 ms) 5 times more (17 MB vs. 3 MB)
unrolled_applyat(unrolled_minimum, rand(1:length(itr3)), itr3) minimum(itr3[rand(1:length(itr3))]) Tuple 2 nonempty non-singleton Tuples better (34 LLVM lines w/ switch vs. 48 B allocs) similar (50 ns vs. 70 ns) similar (67 ms vs. 42 ms) similar (4 MB vs. 3 MB)
unrolled_applyat(unrolled_minimum, rand(1:length(itr3)), itr3) minimum(itr3[rand(1:length(itr3))]) Tuple 8 nonempty non-singleton Tuples better (93 LLVM lines w/ switch vs. 14 kB allocs) similar (50 ns vs. 80 ns) 2 times more (96 ms vs. 41 ms) 2 times more (7 MB vs. 3 MB)
unrolled_applyat(unrolled_minimum, rand(1:length(itr3)), itr3) minimum(itr3[rand(1:length(itr3))]) Tuple 32 nonempty non-singleton Tuples better (371 LLVM lines w/ switch vs. 1 kB allocs) similar (60 ns vs. 100 ns) 2 times more (119 ms vs. 42 ms) 3 times more (13 MB vs. 3 MB)
unrolled_applyat(unrolled_minimum, rand(1:length(itr3)), itr3) minimum(itr3[rand(1:length(itr3))]) Tuple 128 nonempty non-singleton Tuples better (1348 LLVM lines w/ switch vs. 4 kB allocs) 2 times less (90 ns vs. 210 ns) 4 times more (178 ms vs. 42 ms) 7 times more (27 MB vs. 3 MB)
unrolled_foreach(((x1, x2)->@assert(unrolled_all(unrolled_map(==, x1, x2)))), itr1, itr2) foreach(((x1, x2)->@assert(all(map(==, x1, x2)))), itr1, itr2) Tuple 1 singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (74 ms vs. 114 ms) 9 times less (1010 kB vs. 9 MB)
unrolled_foreach(((x1, x2)->@assert(unrolled_all(unrolled_map(==, x1, x2)))), itr1, itr2) foreach(((x1, x2)->@assert(all(map(==, x1, x2)))), itr1, itr2) Tuple 2 identical singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (75 ms vs. 119 ms) 9 times less (1024 kB vs. 10 MB)
unrolled_foreach(((x1, x2)->@assert(unrolled_all(unrolled_map(==, x1, x2)))), itr1, itr2) foreach(((x1, x2)->@assert(all(map(==, x1, x2)))), itr1, itr2) Tuple 8 identical singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (89 ms vs. 119 ms) 8 times less (1 MB vs. 10 MB)
unrolled_foreach(((x1, x2)->@assert(unrolled_all(unrolled_map(==, x1, x2)))), itr1, itr2) foreach(((x1, x2)->@assert(all(map(==, x1, x2)))), itr1, itr2) Tuple 32 identical singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (90 ms vs. 118 ms) 7 times less (1 MB vs. 10 MB)
unrolled_foreach(((x1, x2)->@assert(unrolled_all(unrolled_map(==, x1, x2)))), itr1, itr2) foreach(((x1, x2)->@assert(all(map(==, x1, x2)))), itr1, itr2) Tuple 128 identical singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (96 ms vs. 118 ms) 4 times less (2 MB vs. 10 MB)
unrolled_foreach(((x1, x2)->@assert(unrolled_all(unrolled_map(==, x1, x2)))), itr1, itr2) foreach(((x1, x2)->@assert(all(map(==, x1, x2)))), itr1, itr2) Tuple 2 singleton Tuples better (optimized out vs. 8 LLVM lines w/ Const) similar (40 ns vs. 60 ns) similar (81 ms vs. 143 ms) 10 times less (1 MB vs. 14 MB)
unrolled_foreach(((x1, x2)->@assert(unrolled_all(unrolled_map(==, x1, x2)))), itr1, itr2) foreach(((x1, x2)->@assert(all(map(==, x1, x2)))), itr1, itr2) Tuple 8 singleton Tuples better (optimized out vs. type-unstable) 8 times less (40 ns vs. 350 ns) similar (114 ms vs. 163 ms) 6 times less (3 MB vs. 16 MB)
unrolled_foreach(((x1, x2)->@assert(unrolled_all(unrolled_map(==, x1, x2)))), itr1, itr2) foreach(((x1, x2)->@assert(all(map(==, x1, x2)))), itr1, itr2) Tuple 32 singleton Tuples better (optimized out vs. type-unstable) 54 times less (40 ns vs. 2 μs) similar (144 ms vs. 192 ms) 3 times less (5 MB vs. 18 MB)
unrolled_foreach(((x1, x2)->@assert(unrolled_all(unrolled_map(==, x1, x2)))), itr1, itr2) foreach(((x1, x2)->@assert(all(map(==, x1, x2)))), itr1, itr2) Tuple 128 singleton Tuples better (optimized out vs. type-unstable) 183 times less (40 ns vs. 7 μs) similar (153 ms vs. 190 ms) 2 times less (7 MB vs. 19 MB)
unrolled_foreach(((x2, x3)->@assert(x2 == unrolled_map(Val, x3))), itr2, itr3) foreach(((x2, x3)->@assert(x2 == map(Val, x3))), itr2, itr3) Tuple 1 nonempty Tuple similar (46 LLVM lines w/ Const) similar (100 ns vs. 100 ns) similar (72 ms vs. 96 ms) 7 times less (1 MB vs. 11 MB)
unrolled_foreach(((x2, x3)->@assert(x2 == unrolled_map(Val, x3))), itr2, itr3) foreach(((x2, x3)->@assert(x2 == map(Val, x3))), itr2, itr3) Tuple 2 identical nonempty Tuples similar (72 LLVM lines w/ Const) similar (160 ns vs. 160 ns) similar (72 ms vs. 103 ms) 7 times less (2 MB vs. 12 MB)
unrolled_foreach(((x2, x3)->@assert(x2 == unrolled_map(Val, x3))), itr2, itr3) foreach(((x2, x3)->@assert(x2 == map(Val, x3))), itr2, itr3) Tuple 8 identical nonempty Tuples similar (228 LLVM lines w/ Const) similar (531 ns vs. 530 ns) similar (92 ms vs. 106 ms) 5 times less (2 MB vs. 12 MB)
unrolled_foreach(((x2, x3)->@assert(x2 == unrolled_map(Val, x3))), itr2, itr3) foreach(((x2, x3)->@assert(x2 == map(Val, x3))), itr2, itr3) Tuple 32 identical nonempty Tuples similar (852 LLVM lines w/ Const) similar (2 μs vs. 2 μs) similar (113 ms vs. 106 ms) 2 times less (4 MB vs. 12 MB)
unrolled_foreach(((x2, x3)->@assert(x2 == unrolled_map(Val, x3))), itr2, itr3) foreach(((x2, x3)->@assert(x2 == map(Val, x3))), itr2, itr3) Tuple 128 identical nonempty Tuples similar (3348 LLVM lines w/ Const) similar (8 μs vs. 8 μs) similar (201 ms vs. 103 ms) similar (11 MB vs. 12 MB)
unrolled_foreach(((x2, x3)->@assert(x2 == unrolled_map(Val, x3))), itr2, itr3) foreach(((x2, x3)->@assert(x2 == map(Val, x3))), itr2, itr3) Tuple 2 nonempty Tuples better (83 LLVM lines w/ Const vs. 96 B allocs) similar (220 ns vs. 320 ns) similar (80 ms vs. 128 ms) 7 times less (2 MB vs. 16 MB)
unrolled_foreach(((x2, x3)->@assert(x2 == unrolled_map(Val, x3))), itr2, itr3) foreach(((x2, x3)->@assert(x2 == map(Val, x3))), itr2, itr3) Tuple 8 nonempty Tuples better (382 LLVM lines w/ Const vs. 2 kB allocs) similar (1 μs vs. 2 μs) similar (111 ms vs. 146 ms) 3 times less (5 MB vs. 19 MB)
unrolled_foreach(((x2, x3)->@assert(x2 == unrolled_map(Val, x3))), itr2, itr3) foreach(((x2, x3)->@assert(x2 == map(Val, x3))), itr2, itr3) Tuple 32 nonempty Tuples better (1454 LLVM lines w/ Const vs. 38 kB allocs) 2 times less (10 μs vs. 27 μs) similar (178 ms vs. 184 ms) similar (12 MB vs. 23 MB)
unrolled_foreach(((x2, x3)->@assert(x2 == unrolled_map(Val, x3))), itr2, itr3) foreach(((x2, x3)->@assert(x2 == map(Val, x3))), itr2, itr3) Tuple 128 nonempty Tuples better (5627 LLVM lines w/ Const vs. 527 kB allocs) 2 times less (35 μs vs. 81 μs) 2 times more (379 ms vs. 183 ms) similar (22 MB vs. 24 MB)
unrolled_applyat(((x1, x2)->@assert(unrolled_all(unrolled_map(==, x1, x2)))), rand(1:length(itr1)), itr1, itr2) let n = rand(1:length(itr1)) @assert all(map(==, itr1[n], itr2[n])) end Tuple 1 singleton Tuple similar (17 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (96 ms vs. 50 ms) similar (3 MB vs. 2 MB)
unrolled_applyat(((x1, x2)->@assert(unrolled_all(unrolled_map(==, x1, x2)))), rand(1:length(itr1)), itr1, itr2) let n = rand(1:length(itr1)) @assert all(map(==, itr1[n], itr2[n])) end Tuple 2 identical singleton Tuples similar (18 LLVM lines w/ Const) similar (50 ns vs. 40 ns) similar (97 ms vs. 50 ms) similar (3 MB vs. 2 MB)
unrolled_applyat(((x1, x2)->@assert(unrolled_all(unrolled_map(==, x1, x2)))), rand(1:length(itr1)), itr1, itr2) let n = rand(1:length(itr1)) @assert all(map(==, itr1[n], itr2[n])) end Tuple 8 identical singleton Tuples similar (18 LLVM lines w/ Const) similar (50 ns vs. 50 ns) 2 times more (111 ms vs. 50 ms) 2 times more (4 MB vs. 2 MB)
unrolled_applyat(((x1, x2)->@assert(unrolled_all(unrolled_map(==, x1, x2)))), rand(1:length(itr1)), itr1, itr2) let n = rand(1:length(itr1)) @assert all(map(==, itr1[n], itr2[n])) end Tuple 32 identical singleton Tuples similar (18 LLVM lines w/ Const) similar (50 ns vs. 50 ns) 2 times more (116 ms vs. 50 ms) 3 times more (6 MB vs. 2 MB)
unrolled_applyat(((x1, x2)->@assert(unrolled_all(unrolled_map(==, x1, x2)))), rand(1:length(itr1)), itr1, itr2) let n = rand(1:length(itr1)) @assert all(map(==, itr1[n], itr2[n])) end Tuple 128 identical singleton Tuples similar (18 LLVM lines w/ Const) similar (40 ns vs. 40 ns) 2 times more (133 ms vs. 50 ms) 7 times more (15 MB vs. 2 MB)
unrolled_applyat(((x1, x2)->@assert(unrolled_all(unrolled_map(==, x1, x2)))), rand(1:length(itr1)), itr1, itr2) let n = rand(1:length(itr1)) @assert all(map(==, itr1[n], itr2[n])) end Tuple 2 singleton Tuples similar (18 LLVM lines w/ Const) similar (50 ns vs. 70 ns) 2 times more (102 ms vs. 50 ms) similar (4 MB vs. 2 MB)
unrolled_applyat(((x1, x2)->@assert(unrolled_all(unrolled_map(==, x1, x2)))), rand(1:length(itr1)), itr1, itr2) let n = rand(1:length(itr1)) @assert all(map(==, itr1[n], itr2[n])) end Tuple 8 singleton Tuples better (18 LLVM lines w/ Const vs. type-unstable) similar (50 ns vs. 90 ns) 2 times more (130 ms vs. 50 ms) 2 times more (5 MB vs. 2 MB)
unrolled_applyat(((x1, x2)->@assert(unrolled_all(unrolled_map(==, x1, x2)))), rand(1:length(itr1)), itr1, itr2) let n = rand(1:length(itr1)) @assert all(map(==, itr1[n], itr2[n])) end Tuple 32 singleton Tuples better (18 LLVM lines w/ Const vs. type-unstable) similar (50 ns vs. 90 ns) 2 times more (168 ms vs. 57 ms) 4 times more (10 MB vs. 2 MB)
unrolled_applyat(((x1, x2)->@assert(unrolled_all(unrolled_map(==, x1, x2)))), rand(1:length(itr1)), itr1, itr2) let n = rand(1:length(itr1)) @assert all(map(==, itr1[n], itr2[n])) end Tuple 128 singleton Tuples better (18 LLVM lines w/ Const vs. type-unstable) 2 times less (40 ns vs. 100 ns) 2 times more (190 ms vs. 68 ms) 6 times more (19 MB vs. 3 MB)
unrolled_applyat(((x2, x3)->@assert(x2 == unrolled_map(Val, x3))), rand(1:length(itr2)), itr2, itr3) let n = rand(1:length(itr2)) @assert itr2[n] == map(Val, itr3[n]) end Tuple 1 nonempty Tuple similar (59 LLVM lines w/ Const) similar (100 ns vs. 110 ns) similar (90 ms vs. 58 ms) similar (4 MB vs. 2 MB)
unrolled_applyat(((x2, x3)->@assert(x2 == unrolled_map(Val, x3))), rand(1:length(itr2)), itr2, itr3) let n = rand(1:length(itr2)) @assert itr2[n] == map(Val, itr3[n]) end Tuple 2 identical nonempty Tuples similar (89 LLVM lines w/ Const) similar (100 ns vs. 110 ns) similar (92 ms vs. 58 ms) similar (4 MB vs. 2 MB)
unrolled_applyat(((x2, x3)->@assert(x2 == unrolled_map(Val, x3))), rand(1:length(itr2)), itr2, itr3) let n = rand(1:length(itr2)) @assert itr2[n] == map(Val, itr3[n]) end Tuple 8 identical nonempty Tuples similar (263 LLVM lines w/ Const) similar (110 ns vs. 110 ns) similar (113 ms vs. 57 ms) 2 times more (5 MB vs. 2 MB)
unrolled_applyat(((x2, x3)->@assert(x2 == unrolled_map(Val, x3))), rand(1:length(itr2)), itr2, itr3) let n = rand(1:length(itr2)) @assert itr2[n] == map(Val, itr3[n]) end Tuple 32 identical nonempty Tuples similar (959 LLVM lines w/ Const) similar (110 ns vs. 110 ns) 2 times more (145 ms vs. 57 ms) 5 times more (11 MB vs. 2 MB)
unrolled_applyat(((x2, x3)->@assert(x2 == unrolled_map(Val, x3))), rand(1:length(itr2)), itr2, itr3) let n = rand(1:length(itr2)) @assert itr2[n] == map(Val, itr3[n]) end Tuple 128 identical nonempty Tuples similar (3743 LLVM lines w/ Const) similar (120 ns vs. 110 ns) 5 times more (306 ms vs. 57 ms) 15 times more (32 MB vs. 2 MB)
unrolled_applyat(((x2, x3)->@assert(x2 == unrolled_map(Val, x3))), rand(1:length(itr2)), itr2, itr3) let n = rand(1:length(itr2)) @assert itr2[n] == map(Val, itr3[n]) end Tuple 2 nonempty Tuples better (100 LLVM lines w/ Const vs. 64 B allocs) similar (100 ns vs. 150 ns) similar (96 ms vs. 62 ms) 2 times more (5 MB vs. 2 MB)
unrolled_applyat(((x2, x3)->@assert(x2 == unrolled_map(Val, x3))), rand(1:length(itr2)), itr2, itr3) let n = rand(1:length(itr2)) @assert itr2[n] == map(Val, itr3[n]) end Tuple 8 nonempty Tuples better (417 LLVM lines w/ Const vs. 4 kB allocs) 3 times less (110 ns vs. 350 ns) 2 times more (136 ms vs. 63 ms) 3 times more (9 MB vs. 2 MB)
unrolled_applyat(((x2, x3)->@assert(x2 == unrolled_map(Val, x3))), rand(1:length(itr2)), itr2, itr3) let n = rand(1:length(itr2)) @assert itr2[n] == map(Val, itr3[n]) end Tuple 32 nonempty Tuples better (1568 LLVM lines w/ Const vs. 7 kB allocs) 2 times less (130 ns vs. 360 ns) 2 times more (204 ms vs. 74 ms) 6 times more (21 MB vs. 3 MB)
unrolled_applyat(((x2, x3)->@assert(x2 == unrolled_map(Val, x3))), rand(1:length(itr2)), itr2, itr3) let n = rand(1:length(itr2)) @assert itr2[n] == map(Val, itr3[n]) end Tuple 128 nonempty Tuples better (6043 LLVM lines w/ Const vs. 4 kB allocs) 3 times less (160 ns vs. 520 ns) 6 times more (441 ms vs. 71 ms) 17 times more (52 MB vs. 3 MB)

Recursive Unrolled Functions

Unrolled Expression Reference Expression Itr Type Itr Length Itr Contents Optimization Run Time Compilation Time Total Allocations
(map((x->if eltype(x) <: Tuple unrolled_sum(var"#self#", x) else length(x) end), (itr,)))[1] (map((x->if eltype(x) <: Tuple sum(var"#self#", x) else length(x) end), (itr,)))[1] Tuple 2 Tuples with 1 value similar (optimized out) similar (40 ns vs. 40 ns) similar (45 ms vs. 37 ms) 3 times less (363 kB vs. 1 MB)
(map((x->if eltype(x) <: Tuple unrolled_sum(var"#self#", x) else length(x) end), (itr,)))[1] (map((x->if eltype(x) <: Tuple sum(var"#self#", x) else length(x) end), (itr,)))[1] Tuple 2 Tuples with 4 values similar (optimized out) similar (40 ns vs. 30 ns) similar (45 ms vs. 36 ms) 3 times less (399 kB vs. 1 MB)
(map((x->if eltype(x) <: Tuple unrolled_sum(var"#self#", x) else length(x) end), (itr,)))[1] (map((x->if eltype(x) <: Tuple sum(var"#self#", x) else length(x) end), (itr,)))[1] Tuple 2 nested Tuples with 4 values at depth 3 similar (optimized out) similar (30 ns vs. 30 ns) similar (52 ms vs. 39 ms) 4 times less (769 kB vs. 3 MB)
(map((x->if eltype(x) <: Tuple unrolled_sum(var"#self#", x) else length(x) end), (itr,)))[1] (map((x->if eltype(x) <: Tuple sum(var"#self#", x) else length(x) end), (itr,)))[1] Tuple 2 Tuples with 16 values similar (optimized out) similar (30 ns vs. 30 ns) similar (47 ms vs. 37 ms) 3 times less (403 kB vs. 1 MB)
(map((x->if eltype(x) <: Tuple unrolled_sum(var"#self#", x) else length(x) end), (itr,)))[1] (map((x->if eltype(x) <: Tuple sum(var"#self#", x) else length(x) end), (itr,)))[1] Tuple 2 nested Tuples with 16 values at depth 3 similar (optimized out) similar (40 ns vs. 40 ns) similar (52 ms vs. 39 ms) 3 times less (804 kB vs. 3 MB)
(map((x->if eltype(x) <: Tuple unrolled_sum(var"#self#", x) else length(x) end), (itr,)))[1] (map((x->if eltype(x) <: Tuple sum(var"#self#", x) else length(x) end), (itr,)))[1] Tuple 2 nested Tuples with 16 values at depth 5 similar (optimized out) similar (30 ns vs. 30 ns) similar (53 ms vs. 42 ms) 4 times less (1022 kB vs. 5 MB)
(map((x->if eltype(x) <: Tuple unrolled_sum(var"#self#", x) else length(x) end), (itr,)))[1] (map((x->if eltype(x) <: Tuple sum(var"#self#", x) else length(x) end), (itr,)))[1] Tuple 2 Tuples with 64 values similar (optimized out) similar (40 ns vs. 30 ns) similar (46 ms vs. 36 ms) 3 times less (404 kB vs. 1 MB)
(map((x->if eltype(x) <: Tuple unrolled_sum(var"#self#", x) else length(x) end), (itr,)))[1] (map((x->if eltype(x) <: Tuple sum(var"#self#", x) else length(x) end), (itr,)))[1] Tuple 2 nested Tuples with 64 values at depth 3 similar (optimized out) similar (30 ns vs. 30 ns) similar (52 ms vs. 40 ms) 3 times less (809 kB vs. 3 MB)
(map((x->if eltype(x) <: Tuple unrolled_sum(var"#self#", x) else length(x) end), (itr,)))[1] (map((x->if eltype(x) <: Tuple sum(var"#self#", x) else length(x) end), (itr,)))[1] Tuple 2 nested Tuples with 64 values at depth 5 similar (optimized out) similar (40 ns vs. 30 ns) similar (54 ms vs. 42 ms) 4 times less (1 MB vs. 5 MB)
(map((x->if eltype(x) <: Tuple unrolled_sum(var"#self#", x) else length(x) end), (itr,)))[1] (map((x->if eltype(x) <: Tuple sum(var"#self#", x) else length(x) end), (itr,)))[1] Tuple 2 nested Tuples with 64 values at depth 7 similar (optimized out) similar (30 ns vs. 30 ns) similar (55 ms vs. 45 ms) 5 times less (1 MB vs. 6 MB)
(map((x->if eltype(x) <: Tuple unrolled_sum(var"#self#", x) else unrolled_sum(x) end), (itr,)))[1] (map((x->if eltype(x) <: Tuple sum(var"#self#", x) else sum(x) end), (itr,)))[1] Tuple 2 Tuples with 1 value similar (10 LLVM lines) similar (40 ns vs. 40 ns) similar (53 ms vs. 40 ms) 2 times less (1 MB vs. 4 MB)
(map((x->if eltype(x) <: Tuple unrolled_sum(var"#self#", x) else unrolled_sum(x) end), (itr,)))[1] (map((x->if eltype(x) <: Tuple sum(var"#self#", x) else sum(x) end), (itr,)))[1] Tuple 2 Tuples with 4 values similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (74 ms vs. 51 ms) 2 times less (3 MB vs. 8 MB)
(map((x->if eltype(x) <: Tuple unrolled_sum(var"#self#", x) else unrolled_sum(x) end), (itr,)))[1] (map((x->if eltype(x) <: Tuple sum(var"#self#", x) else sum(x) end), (itr,)))[1] Tuple 2 nested Tuples with 4 values at depth 3 similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (56 ms vs. 52 ms) 4 times less (3 MB vs. 11 MB)
(map((x->if eltype(x) <: Tuple unrolled_sum(var"#self#", x) else unrolled_sum(x) end), (itr,)))[1] (map((x->if eltype(x) <: Tuple sum(var"#self#", x) else sum(x) end), (itr,)))[1] Tuple 2 Tuples with 16 values better (8 LLVM lines vs. type-unstable) similar (40 ns vs. 60 ns) similar (77 ms vs. 54 ms) similar (5 MB vs. 9 MB)
(map((x->if eltype(x) <: Tuple unrolled_sum(var"#self#", x) else unrolled_sum(x) end), (itr,)))[1] (map((x->if eltype(x) <: Tuple sum(var"#self#", x) else sum(x) end), (itr,)))[1] Tuple 2 nested Tuples with 16 values at depth 3 similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (80 ms vs. 60 ms) 2 times less (5 MB vs. 12 MB)
(map((x->if eltype(x) <: Tuple unrolled_sum(var"#self#", x) else unrolled_sum(x) end), (itr,)))[1] (map((x->if eltype(x) <: Tuple sum(var"#self#", x) else sum(x) end), (itr,)))[1] Tuple 2 nested Tuples with 16 values at depth 5 similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (66 ms vs. 92 ms) 5 times less (6 MB vs. 36 MB)
(map((x->if eltype(x) <: Tuple unrolled_sum(var"#self#", x) else unrolled_sum(x) end), (itr,)))[1] (map((x->if eltype(x) <: Tuple sum(var"#self#", x) else sum(x) end), (itr,)))[1] Tuple 2 Tuples with 64 values similar (7 LLVM lines) similar (50 ns vs. 50 ns) similar (93 ms vs. 49 ms) similar (9 MB vs. 6 MB)
(map((x->if eltype(x) <: Tuple unrolled_sum(var"#self#", x) else unrolled_sum(x) end), (itr,)))[1] (map((x->if eltype(x) <: Tuple sum(var"#self#", x) else sum(x) end), (itr,)))[1] Tuple 2 nested Tuples with 64 values at depth 3 better (7 LLVM lines vs. type-unstable) similar (50 ns vs. 50 ns) similar (92 ms vs. 62 ms) similar (9 MB vs. 13 MB)
(map((x->if eltype(x) <: Tuple unrolled_sum(var"#self#", x) else unrolled_sum(x) end), (itr,)))[1] (map((x->if eltype(x) <: Tuple sum(var"#self#", x) else sum(x) end), (itr,)))[1] Tuple 2 nested Tuples with 64 values at depth 5 similar (7 LLVM lines) similar (50 ns vs. 50 ns) similar (99 ms vs. 73 ms) similar (12 MB vs. 16 MB)
(map((x->if eltype(x) <: Tuple unrolled_sum(var"#self#", x) else unrolled_sum(x) end), (itr,)))[1] (map((x->if eltype(x) <: Tuple sum(var"#self#", x) else sum(x) end), (itr,)))[1] Tuple 2 nested Tuples with 64 values at depth 7 similar (7 LLVM lines) similar (50 ns vs. 50 ns) 2 times less (97 ms vs. 235 ms) 4 times less (19 MB vs. 78 MB)
(map((x->if eltype(x) <: Tuple unrolled_sum(var"#self#", x) + unrolled_sum(log ∘ var"#self#", x) else unrolled_sum(x) end), (itr,)))[1] (map((x->if eltype(x) <: Tuple sum(var"#self#", x) + sum(log ∘ var"#self#", x) else sum(x) end), (itr,)))[1] Tuple 2 Tuples with 1 value similar (17 LLVM lines) similar (50 ns vs. 50 ns) similar (56 ms vs. 49 ms) 2 times less (2 MB vs. 7 MB)
(map((x->if eltype(x) <: Tuple unrolled_sum(var"#self#", x) + unrolled_sum(log ∘ var"#self#", x) else unrolled_sum(x) end), (itr,)))[1] (map((x->if eltype(x) <: Tuple sum(var"#self#", x) + sum(log ∘ var"#self#", x) else sum(x) end), (itr,)))[1] Tuple 2 Tuples with 4 values similar (30 LLVM lines) similar (50 ns vs. 50 ns) similar (77 ms vs. 65 ms) 2 times less (5 MB vs. 12 MB)
(map((x->if eltype(x) <: Tuple unrolled_sum(var"#self#", x) + unrolled_sum(log ∘ var"#self#", x) else unrolled_sum(x) end), (itr,)))[1] (map((x->if eltype(x) <: Tuple sum(var"#self#", x) + sum(log ∘ var"#self#", x) else sum(x) end), (itr,)))[1] Tuple 2 nested Tuples with 4 values at depth 3 better (7 LLVM lines vs. 208 B allocs) similar (280 ns vs. 350 ns) similar (67 ms vs. 129 ms) 4 times less (5 MB vs. 22 MB)
(map((x->if eltype(x) <: Tuple unrolled_sum(var"#self#", x) + unrolled_sum(log ∘ var"#self#", x) else unrolled_sum(x) end), (itr,)))[1] (map((x->if eltype(x) <: Tuple sum(var"#self#", x) + sum(log ∘ var"#self#", x) else sum(x) end), (itr,)))[1] Tuple 2 Tuples with 16 values better (7 LLVM lines vs. type-unstable) similar (60 ns vs. 60 ns) similar (86 ms vs. 69 ms) 2 times less (6 MB vs. 13 MB)
(map((x->if eltype(x) <: Tuple unrolled_sum(var"#self#", x) + unrolled_sum(log ∘ var"#self#", x) else unrolled_sum(x) end), (itr,)))[1] (map((x->if eltype(x) <: Tuple sum(var"#self#", x) + sum(log ∘ var"#self#", x) else sum(x) end), (itr,)))[1] Tuple 2 nested Tuples with 16 values at depth 3 better (7 LLVM lines vs. 592 B allocs) similar (330 ns vs. 440 ns) similar (92 ms vs. 145 ms) 3 times less (8 MB vs. 26 MB)
(map((x->if eltype(x) <: Tuple unrolled_sum(var"#self#", x) + unrolled_sum(log ∘ var"#self#", x) else unrolled_sum(x) end), (itr,)))[1] (map((x->if eltype(x) <: Tuple sum(var"#self#", x) + sum(log ∘ var"#self#", x) else sum(x) end), (itr,)))[1] Tuple 2 nested Tuples with 16 values at depth 5 better (7 LLVM lines vs. 4 kB allocs) similar (4 μs vs. 6 μs) 2 times less (77 ms vs. 223 ms) 5 times less (7 MB vs. 40 MB)
(map((x->if eltype(x) <: Tuple unrolled_sum(var"#self#", x) + unrolled_sum(log ∘ var"#self#", x) else unrolled_sum(x) end), (itr,)))[1] (map((x->if eltype(x) <: Tuple sum(var"#self#", x) + sum(log ∘ var"#self#", x) else sum(x) end), (itr,)))[1] Tuple 2 Tuples with 64 values similar (7 LLVM lines) similar (80 ns vs. 130 ns) similar (113 ms vs. 67 ms) similar (13 MB vs. 9 MB)
(map((x->if eltype(x) <: Tuple unrolled_sum(var"#self#", x) + unrolled_sum(log ∘ var"#self#", x) else unrolled_sum(x) end), (itr,)))[1] (map((x->if eltype(x) <: Tuple sum(var"#self#", x) + sum(log ∘ var"#self#", x) else sum(x) end), (itr,)))[1] Tuple 2 nested Tuples with 64 values at depth 3 better (7 LLVM lines vs. 2 kB allocs) similar (430 ns vs. 541 ns) similar (96 ms vs. 152 ms) 3 times less (8 MB vs. 27 MB)
(map((x->if eltype(x) <: Tuple unrolled_sum(var"#self#", x) + unrolled_sum(log ∘ var"#self#", x) else unrolled_sum(x) end), (itr,)))[1] (map((x->if eltype(x) <: Tuple sum(var"#self#", x) + sum(log ∘ var"#self#", x) else sum(x) end), (itr,)))[1] Tuple 2 nested Tuples with 64 values at depth 5 better (7 LLVM lines vs. 12 kB allocs) similar (5 μs vs. 8 μs) 2 times less (103 ms vs. 282 ms) 4 times less (10 MB vs. 44 MB)
(map((x->if eltype(x) <: Tuple unrolled_sum(var"#self#", x) + unrolled_sum(log ∘ var"#self#", x) else unrolled_sum(x) end), (itr,)))[1] (map((x->if eltype(x) <: Tuple sum(var"#self#", x) + sum(log ∘ var"#self#", x) else sum(x) end), (itr,)))[1] Tuple 2 nested Tuples with 64 values at depth 7 better (7 LLVM lines vs. 69 kB allocs) similar (64 μs vs. 92 μs) 4 times less (86 ms vs. 381 ms) 9 times less (8 MB vs. 81 MB)

Nested Unrolled Closures

Unrolled Expression Reference Expression Itr Type Itr Length Itr Contents Optimization Run Time Compilation Time Total Allocations
unrolled_reduce(((itr′, i)->Base.setindex(itr′, !(itr′[i]), i)), StaticOneTo(length(itr)); init = itr) reduce(((itr′, i)->Base.setindex(itr′, !(itr′[i]), i)), StaticOneTo(length(itr)); init = itr) Tuple 32 Bools similar (9 LLVM lines) 4 times less (40 ns vs. 160 ns) similar (97 ms vs. 99 ms) 2 times more (23 MB vs. 8 MB)
unrolled_reduce(((itr′, i)->Base.setindex(itr′, !(itr′[i]), i)), StaticOneTo(length(itr)); init = itr) reduce(((itr′, i)->Base.setindex(itr′, !(itr′[i]), i)), StaticOneTo(length(itr)); init = itr) Tuple 33 Bools better (591 LLVM lines vs. 4 kB allocs) similar (11 μs vs. 12 μs) similar (110 ms vs. 97 ms) similar (14 MB vs. 7 MB)
unrolled_reduce(((itr′, i)->Base.setindex(itr′, !(itr′[i]), i)), StaticOneTo(length(itr)); init = itr) reduce(((itr′, i)->Base.setindex(itr′, !(itr′[i]), i)), StaticOneTo(length(itr)); init = itr) StaticBitVector 256 Bools similar (519 LLVM lines) similar (3 μs vs. 3 μs) similar (109 ms vs. 92 ms) similar (7 MB vs. 5 MB)
unrolled_reduce(((itr′, i)->Base.setindex(itr′, !(itr′[i]), i)), StaticOneTo(length(itr)); init = itr) reduce(((itr′, i)->Base.setindex(itr′, !(itr′[i]), i)), StaticOneTo(length(itr)); init = itr) StaticBitVector 257 Bools similar (32 kB allocs) similar (85 μs vs. 88 μs) similar (115 ms vs. 96 ms) similar (7 MB vs. 5 MB)
unrolled_reduce(((itr′, i)->unrolled_reduce(((itr′′, j)->Base.setindex(itr′′, !(itr′′[min(i, j)]), j)), StaticOneTo(length(itr′)); init = itr′)), StaticOneTo(length(itr)); init = itr) reduce(((itr′, i)->reduce(((itr′′, j)->Base.setindex(itr′′, !(itr′′[min(i, j)]), j)), StaticOneTo(length(itr′)); init = itr′)), StaticOneTo(length(itr)); init = itr) Tuple 32 Bools better (71 LLVM lines vs. 96 B allocs) 82 times less (50 ns vs. 4 μs) 3 times more (398 ms vs. 126 ms) 11 times more (151 MB vs. 13 MB)
unrolled_reduce(((itr′, i)->unrolled_reduce(((itr′′, j)->Base.setindex(itr′′, !(itr′′[min(i, j)]), j)), StaticOneTo(length(itr′)); init = itr′)), StaticOneTo(length(itr)); init = itr) reduce(((itr′, i)->reduce(((itr′′, j)->Base.setindex(itr′′, !(itr′′[min(i, j)]), j)), StaticOneTo(length(itr′)); init = itr′)), StaticOneTo(length(itr)); init = itr) Tuple 33 Bools fewer allocs (87 kB allocs vs. 136 kB allocs) similar (372 μs vs. 409 μs) similar (135 ms vs. 126 ms) similar (16 MB vs. 12 MB)
unrolled_reduce(((itr′, i)->unrolled_reduce(((itr′′, j)->Base.setindex(itr′′, !(itr′′[min(i, j)]), j)), StaticOneTo(length(itr′)); init = itr′)), StaticOneTo(length(itr)); init = itr) reduce(((itr′, i)->reduce(((itr′′, j)->Base.setindex(itr′′, !(itr′′[min(i, j)]), j)), StaticOneTo(length(itr′)); init = itr′)), StaticOneTo(length(itr)); init = itr) StaticBitVector 256 Bools better (519 LLVM lines vs. 96 B allocs) similar (672 μs vs. 869 μs) similar (152 ms vs. 125 ms) similar (10 MB vs. 12 MB)
unrolled_reduce(((itr′, i)->unrolled_reduce(((itr′′, j)->Base.setindex(itr′′, !(itr′′[min(i, j)]), j)), StaticOneTo(length(itr′)); init = itr′)), StaticOneTo(length(itr)); init = itr) reduce(((itr′, i)->reduce(((itr′′, j)->Base.setindex(itr′′, !(itr′′[min(i, j)]), j)), StaticOneTo(length(itr′)); init = itr′)), StaticOneTo(length(itr)); init = itr) StaticBitVector 257 Bools fewer allocs (8 MB allocs vs. 8 MB allocs) similar (25 ms vs. 25 ms) similar (158 ms vs. 130 ms) similar (18 MB vs. 19 MB)
unrolled_reduce(((itr′, i)->unrolled_reduce(((itr′′, j)->unrolled_reduce(((itr′′′, k)->Base.setindex(itr′′′, !(itr′′′[min(i, j, k)]), k)), StaticOneTo(length(itr′′)); init = itr′′)), StaticOneTo(length(itr′)); init = itr′)), StaticOneTo(length(itr)); init = itr) reduce(((itr′, i)->reduce(((itr′′, j)->reduce(((itr′′′, k)->Base.setindex(itr′′′, !(itr′′′[min(i, j, k)]), k)), StaticOneTo(length(itr′′)); init = itr′′)), StaticOneTo(length(itr′)); init = itr′)), StaticOneTo(length(itr)); init = itr) Tuple 32 Bools better (71 LLVM lines vs. 2 kB allocs) similar (183 μs vs. 128 μs) 50 times more (7 s vs. 145 ms) 14 times more (221 MB vs. 16 MB)
unrolled_reduce(((itr′, i)->unrolled_reduce(((itr′′, j)->unrolled_reduce(((itr′′′, k)->Base.setindex(itr′′′, !(itr′′′[min(i, j, k)]), k)), StaticOneTo(length(itr′′)); init = itr′′)), StaticOneTo(length(itr′)); init = itr′)), StaticOneTo(length(itr)); init = itr) reduce(((itr′, i)->reduce(((itr′′, j)->reduce(((itr′′′, k)->Base.setindex(itr′′′, !(itr′′′[min(i, j, k)]), k)), StaticOneTo(length(itr′′)); init = itr′′)), StaticOneTo(length(itr′)); init = itr′)), StaticOneTo(length(itr)); init = itr) Tuple 33 Bools fewer allocs (3 MB allocs vs. 4 MB allocs) similar (12 ms vs. 13 ms) similar (146 ms vs. 145 ms) similar (20 MB vs. 19 MB)
unrolled_reduce(((itr′, i)->unrolled_reduce(((itr′′, j)->unrolled_reduce(((itr′′′, k)->Base.setindex(itr′′′, !(itr′′′[min(i, j, k)]), k)), StaticOneTo(length(itr′′)); init = itr′′)), StaticOneTo(length(itr′)); init = itr′)), StaticOneTo(length(itr)); init = itr) reduce(((itr′, i)->reduce(((itr′′, j)->reduce(((itr′′′, k)->Base.setindex(itr′′′, !(itr′′′[min(i, j, k)]), k)), StaticOneTo(length(itr′′)); init = itr′′)), StaticOneTo(length(itr′)); init = itr′)), StaticOneTo(length(itr)); init = itr) StaticBitVector 256 Bools better (519 LLVM lines vs. 12 kB allocs) similar (182 ms vs. 224 ms) similar (190 ms vs. 142 ms) similar (14 MB vs. 14 MB)

Empty Iterators

Unrolled Expression Reference Expression Itr Type Itr Length Itr Contents Optimization Run Time Compilation Time Total Allocations
unrolled_map(error, itr) map(error, itr) Tuple 0 nothing similar (optimized out) similar (30 ns vs. 30 ns) similar (35 ms vs. 20 ms) 10 times more (53 kB vs. 5 kB)
unrolled_any(error, itr) any(error, itr) Tuple 0 nothing similar (optimized out) similar (40 ns vs. 30 ns) similar (20 ms vs. 21 ms) similar (16 kB vs. 30 kB)
unrolled_all(error, itr) all(error, itr) Tuple 0 nothing similar (optimized out) similar (40 ns vs. 40 ns) similar (21 ms vs. 21 ms) similar (16 kB vs. 30 kB)
unrolled_foreach(error, itr) foreach(error, itr) Tuple 0 nothing similar (optimized out) similar (40 ns vs. 40 ns) similar (20 ms vs. 37 ms) 21 times less (16 kB vs. 345 kB)
unrolled_reduce(error, itr; init = 0) reduce(error, itr; init = 0) Tuple 0 nothing similar (optimized out) similar (30 ns vs. 40 ns) 2 times less (23 ms vs. 47 ms) 8 times less (186 kB vs. 2 MB)
unrolled_accumulate(error, itr) accumulate(error, itr) Tuple 0 nothing similar (optimized out) similar (40 ns vs. 30 ns) similar (21 ms vs. 29 ms) 2 times less (85 kB vs. 178 kB)
unrolled_accumulate(error, itr; init = 0) accumulate(error, itr; init = 0) Tuple 0 nothing similar (optimized out) similar (40 ns vs. 40 ns) similar (21 ms vs. 26 ms) 2 times less (91 kB vs. 224 kB)

Very Long Iterators

Unrolled Expression Reference Expression Itr Type Itr Length Itr Contents Optimization Run Time Compilation Time Total Allocations
unrolled_sum(itr) sum(itr) Tuple 2000 Ints similar (293 LLVM lines) similar (120 ns vs. 231 ns) 34 times more (1 s vs. 31 ms) 70 times more (125 MB vs. 2 MB)
unrolled_sum(itr) sum(itr) StaticOneTo 2000 Ints better (optimized out vs. 6 LLVM lines) similar (40 ns vs. 40 ns) 18 times more (897 ms vs. 49 ms) 55 times more (64 MB vs. 1 MB)
unrolled_sum(itr) sum(itr) StaticOneTo 9000 Ints better (optimized out vs. 6 LLVM lines) similar (30 ns vs. 40 ns) 1494 times more (72 s vs. 48 ms) 246 times more (284 MB vs. 1 MB)
unrolled_sum(log, itr) sum(log, itr) Tuple 2000 Ints similar (10004 LLVM lines) similar (11 μs vs. 11 μs) 19 times more (835 ms vs. 42 ms) 37 times more (136 MB vs. 4 MB)
unrolled_sum(log, itr) sum(log, itr) StaticOneTo 2000 Ints better (optimized out vs. 19 LLVM lines) 284 times less (40 ns vs. 11 μs) 7 times more (490 ms vs. 69 ms) 22 times more (64 MB vs. 3 MB)
unrolled_sum(log, itr) sum(log, itr) StaticOneTo 9000 Ints better (optimized out vs. 19 LLVM lines) 1706 times less (30 ns vs. 51 μs) 50 times more (3 s vs. 69 ms) 101 times more (285 MB vs. 3 MB)

Manual vs. Recursive Unrolling

Unrolled Expression Reference Expression Itr Type Itr Length Itr Contents Optimization Run Time Compilation Time Total Allocations
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 1 empty singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (20 ms vs. 20 ms) similar (55 kB vs. 84 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (20 ms vs. 20 ms) similar (89 kB vs. 84 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 1 nonempty non-singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (17 ms vs. 21 ms) similar (62 kB vs. 85 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 1 empty singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (20 ms vs. 20 ms) similar (55 kB vs. 84 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 2 identical empty singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 40 ns) similar (19 ms vs. 20 ms) 2 times less (62 kB vs. 141 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 3 identical empty singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 30 ns) similar (20 ms vs. 23 ms) 3 times less (90 kB vs. 318 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 4 identical empty singleton Tuples similar (7 LLVM lines w/ Const) similar (30 ns vs. 40 ns) similar (31 ms vs. 24 ms) 2 times less (144 kB vs. 381 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 5 identical empty singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 30 ns) similar (32 ms vs. 25 ms) 2 times less (148 kB vs. 433 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 6 identical empty singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 30 ns) similar (32 ms vs. 24 ms) 3 times less (153 kB vs. 500 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 7 identical empty singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 30 ns) similar (32 ms vs. 23 ms) 3 times less (157 kB vs. 556 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 8 identical empty singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 40 ns) similar (32 ms vs. 25 ms) 3 times less (162 kB vs. 632 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 16 identical empty singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 40 ns) similar (32 ms vs. 27 ms) 6 times less (197 kB vs. 1 MB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 32 identical empty singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 40 ns) similar (32 ms vs. 31 ms) 10 times less (270 kB vs. 3 MB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 128 identical empty singleton Tuples similar (7 LLVM lines w/ Const) 6212 times less (60 ns vs. 373 μs) similar (41 ms vs. 34 ms) 9 times less (893 kB vs. 8 MB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 256 identical empty singleton Tuples similar (7 LLVM lines w/ Const) 11781 times less (120 ns vs. 1 ms) similar (47 ms vs. 52 ms) 10 times less (2 MB vs. 17 MB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (30 ns vs. 40 ns) similar (20 ms vs. 20 ms) similar (89 kB vs. 84 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 2 identical nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (30 ns vs. 40 ns) similar (20 ms vs. 20 ms) similar (92 kB vs. 142 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 3 identical nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (30 ns vs. 40 ns) similar (20 ms vs. 23 ms) 3 times less (95 kB vs. 323 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 4 identical nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 30 ns) similar (32 ms vs. 24 ms) 2 times less (148 kB vs. 386 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 5 identical nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (30 ns vs. 40 ns) similar (32 ms vs. 23 ms) 2 times less (153 kB vs. 438 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 6 identical nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (30 ns vs. 40 ns) similar (32 ms vs. 25 ms) 3 times less (158 kB vs. 505 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 7 identical nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 40 ns) similar (32 ms vs. 23 ms) 3 times less (162 kB vs. 561 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 8 identical nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (31 ns vs. 40 ns) similar (32 ms vs. 25 ms) 3 times less (166 kB vs. 637 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 16 identical nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 30 ns) similar (32 ms vs. 27 ms) 6 times less (202 kB vs. 1 MB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 32 identical nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 40 ns) similar (33 ms vs. 30 ms) 10 times less (274 kB vs. 3 MB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 128 identical nonempty singleton Tuples similar (37 LLVM lines w/ Const) 5537 times less (60 ns vs. 332 μs) similar (48 ms vs. 34 ms) 9 times less (897 kB vs. 8 MB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 256 identical nonempty singleton Tuples similar (69 LLVM lines w/ Const) 11774 times less (120 ns vs. 1 ms) similar (62 ms vs. 53 ms) 10 times less (2 MB vs. 17 MB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 1 nonempty non-singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (17 ms vs. 21 ms) similar (62 kB vs. 85 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 2 identical nonempty non-singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 40 ns) similar (17 ms vs. 21 ms) 2 times less (70 kB vs. 148 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 3 identical nonempty non-singleton Tuples similar (7 LLVM lines w/ Const) similar (30 ns vs. 30 ns) similar (17 ms vs. 24 ms) 3 times less (102 kB vs. 326 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 4 identical nonempty non-singleton Tuples similar (7 LLVM lines w/ Const) similar (30 ns vs. 40 ns) similar (29 ms vs. 25 ms) 2 times less (160 kB vs. 398 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 5 identical nonempty non-singleton Tuples similar (7 LLVM lines w/ Const) similar (30 ns vs. 40 ns) similar (29 ms vs. 25 ms) 2 times less (169 kB vs. 457 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 6 identical nonempty non-singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 40 ns) similar (30 ms vs. 26 ms) 3 times less (178 kB vs. 540 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 7 identical nonempty non-singleton Tuples similar (7 LLVM lines w/ Const) similar (30 ns vs. 40 ns) similar (29 ms vs. 25 ms) 3 times less (187 kB vs. 606 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 8 identical nonempty non-singleton Tuples similar (7 LLVM lines w/ Const) similar (30 ns vs. 40 ns) similar (29 ms vs. 27 ms) 3 times less (196 kB vs. 701 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 16 identical nonempty non-singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 40 ns) similar (30 ms vs. 30 ms) 5 times less (268 kB vs. 1 MB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 32 identical nonempty non-singleton Tuples similar (7 LLVM lines w/ Const) similar (30 ns vs. 40 ns) similar (30 ms vs. 40 ms) 9 times less (412 kB vs. 4 MB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 128 identical nonempty non-singleton Tuples similar (37 LLVM lines w/ Const) 7506 times less (60 ns vs. 450 μs) similar (45 ms vs. 37 ms) 6 times less (1 MB vs. 9 MB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 256 identical nonempty non-singleton Tuples similar (69 LLVM lines w/ Const) 16145 times less (120 ns vs. 2 ms) similar (62 ms vs. 56 ms) 6 times less (3 MB vs. 18 MB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 1 empty singleton Tuple similar (optimized out) similar (40 ns vs. 30 ns) similar (20 ms vs. 20 ms) similar (55 kB vs. 84 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 2 empty & nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 40 ns) similar (20 ms vs. 21 ms) similar (92 kB vs. 142 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 3 empty & nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 30 ns) similar (20 ms vs. 23 ms) 3 times less (95 kB vs. 337 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 4 empty & nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 30 ns) similar (33 ms vs. 24 ms) 2 times less (153 kB vs. 435 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 5 empty & nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (30 ns vs. 40 ns) similar (32 ms vs. 29 ms) 4 times less (158 kB vs. 635 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 6 empty & nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (30 ns vs. 40 ns) similar (33 ms vs. 31 ms) 4 times less (162 kB vs. 688 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 7 empty & nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 30 ns) similar (32 ms vs. 32 ms) 4 times less (172 kB vs. 771 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 8 empty & nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (30 ns vs. 40 ns) similar (32 ms vs. 34 ms) 5 times less (177 kB vs. 916 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 16 empty & nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 30 ns) similar (32 ms vs. 44 ms) 7 times less (221 kB vs. 2 MB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 32 empty & nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 40 ns) 2 times less (32 ms vs. 66 ms) 12 times less (302 kB vs. 4 MB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 128 empty & nonempty singleton Tuples similar (43 LLVM lines w/ Const) 12270 times less (60 ns vs. 736 μs) similar (47 ms vs. 79 ms) 9 times less (924 kB vs. 9 MB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 256 empty & nonempty singleton Tuples similar (79 LLVM lines w/ Const) 21089 times less (120 ns vs. 3 ms) similar (63 ms vs. 98 ms) 11 times less (2 MB vs. 18 MB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (30 ns vs. 30 ns) similar (20 ms vs. 20 ms) similar (89 kB vs. 84 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 2 nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (30 ns vs. 40 ns) similar (21 ms vs. 20 ms) similar (97 kB vs. 142 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 3 nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 40 ns) similar (20 ms vs. 22 ms) 3 times less (99 kB vs. 341 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 4 nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (30 ns vs. 40 ns) similar (32 ms vs. 24 ms) 2 times less (158 kB vs. 435 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 5 nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 30 ns) similar (32 ms vs. 28 ms) 3 times less (163 kB vs. 639 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 6 nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 40 ns) similar (32 ms vs. 30 ms) 4 times less (167 kB vs. 689 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 7 nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 30 ns) similar (32 ms vs. 32 ms) 4 times less (176 kB vs. 775 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 8 nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 30 ns) similar (32 ms vs. 34 ms) 5 times less (181 kB vs. 916 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 16 nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (30 ns vs. 40 ns) similar (32 ms vs. 44 ms) 7 times less (226 kB vs. 2 MB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 32 nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (30 ns vs. 40 ns) 2 times less (32 ms vs. 65 ms) 12 times less (302 kB vs. 4 MB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 128 nonempty singleton Tuples similar (37 LLVM lines w/ Const) 13095 times less (60 ns vs. 786 μs) similar (48 ms vs. 73 ms) 9 times less (924 kB vs. 9 MB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 256 nonempty singleton Tuples similar (69 LLVM lines w/ Const) 22426 times less (120 ns vs. 3 ms) similar (63 ms vs. 94 ms) 11 times less (2 MB vs. 18 MB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 1 nonempty non-singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (20 ms vs. 20 ms) similar (62 kB vs. 85 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 2 nonempty non-singleton Tuples similar (7 LLVM lines w/ Const) similar (30 ns vs. 40 ns) similar (17 ms vs. 21 ms) similar (95 kB vs. 148 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 3 nonempty non-singleton Tuples similar (7 LLVM lines w/ Const) similar (30 ns vs. 40 ns) similar (17 ms vs. 24 ms) 3 times less (102 kB vs. 339 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 4 nonempty non-singleton Tuples similar (7 LLVM lines w/ Const) similar (30 ns vs. 30 ns) similar (29 ms vs. 25 ms) 2 times less (161 kB vs. 442 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 5 nonempty non-singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 30 ns) similar (29 ms vs. 31 ms) 3 times less (170 kB vs. 650 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 6 nonempty non-singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 30 ns) similar (29 ms vs. 32 ms) 4 times less (179 kB vs. 719 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 7 nonempty non-singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 40 ns) similar (29 ms vs. 34 ms) 4 times less (188 kB vs. 807 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 8 nonempty non-singleton Tuples similar (7 LLVM lines w/ Const) similar (30 ns vs. 40 ns) similar (30 ms vs. 36 ms) 4 times less (197 kB vs. 972 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 16 nonempty non-singleton Tuples similar (7 LLVM lines w/ Const) similar (30 ns vs. 30 ns) similar (30 ms vs. 48 ms) 6 times less (278 kB vs. 2 MB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 32 nonempty non-singleton Tuples similar (7 LLVM lines w/ Const) similar (30 ns vs. 30 ns) 2 times less (30 ms vs. 75 ms) 11 times less (426 kB vs. 5 MB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 128 nonempty non-singleton Tuples similar (37 LLVM lines w/ Const) 14020 times less (60 ns vs. 841 μs) similar (46 ms vs. 74 ms) 6 times less (1 MB vs. 10 MB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 256 nonempty non-singleton Tuples similar (69 LLVM lines w/ Const) 23444 times less (120 ns vs. 3 ms) similar (63 ms vs. 97 ms) 7 times less (3 MB vs. 20 MB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 1 empty singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (20 ms vs. 20 ms) similar (55 kB vs. 89 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (40 ns vs. 30 ns) similar (20 ms vs. 21 ms) similar (89 kB vs. 89 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 1 nonempty non-singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (17 ms vs. 21 ms) similar (62 kB vs. 90 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 1 empty singleton Tuple similar (optimized out) similar (40 ns vs. 30 ns) similar (21 ms vs. 21 ms) similar (55 kB vs. 89 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 2 identical empty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (20 ms vs. 21 ms) 2 times less (61 kB vs. 151 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 3 identical empty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (20 ms vs. 20 ms) 2 times less (88 kB vs. 208 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 4 identical empty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (33 ms vs. 21 ms) similar (143 kB vs. 255 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 5 identical empty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (33 ms vs. 20 ms) 2 times less (146 kB vs. 308 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 6 identical empty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (33 ms vs. 21 ms) 2 times less (150 kB vs. 356 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 7 identical empty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (33 ms vs. 20 ms) 2 times less (154 kB vs. 409 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 8 identical empty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (33 ms vs. 22 ms) 2 times less (157 kB vs. 459 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 16 identical empty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (33 ms vs. 22 ms) 4 times less (187 kB vs. 888 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 32 identical empty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (34 ms vs. 23 ms) 7 times less (245 kB vs. 2 MB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 128 identical empty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (40 ms vs. 28 ms) 10 times less (594 kB vs. 6 MB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 256 identical empty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (47 ms vs. 40 ms) 13 times less (1 MB vs. 14 MB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (40 ns vs. 30 ns) similar (20 ms vs. 21 ms) similar (89 kB vs. 89 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 2 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (20 ms vs. 22 ms) similar (93 kB vs. 152 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 3 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (20 ms vs. 22 ms) 3 times less (96 kB vs. 297 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 4 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (33 ms vs. 24 ms) 2 times less (154 kB vs. 354 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 5 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (33 ms vs. 23 ms) 2 times less (160 kB vs. 397 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 6 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (33 ms vs. 24 ms) 2 times less (166 kB vs. 455 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 7 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (34 ms vs. 23 ms) 2 times less (172 kB vs. 499 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 8 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (34 ms vs. 24 ms) 3 times less (178 kB vs. 558 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 16 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (34 ms vs. 25 ms) 4 times less (225 kB vs. 987 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 32 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (35 ms vs. 26 ms) 5 times less (322 kB vs. 2 MB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 128 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (41 ms vs. 31 ms) 7 times less (897 kB vs. 6 MB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 256 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (48 ms vs. 44 ms) 8 times less (2 MB vs. 14 MB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 1 nonempty non-singleton Tuple similar (optimized out) similar (30 ns vs. 40 ns) similar (17 ms vs. 21 ms) similar (62 kB vs. 90 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 2 identical nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (17 ms vs. 22 ms) 2 times less (71 kB vs. 160 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 3 identical nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (17 ms vs. 24 ms) 2 times less (104 kB vs. 299 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 4 identical nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (32 ms vs. 25 ms) 2 times less (166 kB vs. 366 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 5 identical nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (31 ms vs. 24 ms) 2 times less (177 kB vs. 414 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 6 identical nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (30 ms vs. 26 ms) 2 times less (187 kB vs. 486 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 7 identical nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (31 ms vs. 25 ms) 2 times less (198 kB vs. 537 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 8 identical nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (31 ms vs. 26 ms) 2 times less (208 kB vs. 617 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 16 identical nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (31 ms vs. 30 ms) 4 times less (292 kB vs. 1 MB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 32 identical nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (32 ms vs. 36 ms) 6 times less (460 kB vs. 3 MB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 128 identical nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (39 ms vs. 33 ms) 5 times less (1 MB vs. 7 MB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 256 identical nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (47 ms vs. 47 ms) 5 times less (3 MB vs. 15 MB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 1 empty singleton Tuple similar (optimized out) similar (30 ns vs. 30 ns) similar (20 ms vs. 20 ms) similar (55 kB vs. 89 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 2 empty & nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (20 ms vs. 21 ms) similar (86 kB vs. 152 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 3 empty & nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (20 ms vs. 20 ms) 2 times less (88 kB vs. 208 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 4 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (34 ms vs. 21 ms) similar (143 kB vs. 256 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 5 empty & nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (33 ms vs. 20 ms) 2 times less (147 kB vs. 308 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 6 empty & nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (33 ms vs. 21 ms) 2 times less (150 kB vs. 356 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 7 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (33 ms vs. 20 ms) 2 times less (155 kB vs. 410 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 8 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (33 ms vs. 22 ms) 2 times less (158 kB vs. 459 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 16 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (33 ms vs. 22 ms) 4 times less (188 kB vs. 889 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 32 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (34 ms vs. 24 ms) 7 times less (246 kB vs. 2 MB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 128 empty & nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (39 ms vs. 29 ms) 10 times less (595 kB vs. 6 MB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 256 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (46 ms vs. 43 ms) 13 times less (1 MB vs. 14 MB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (30 ns vs. 30 ns) similar (20 ms vs. 20 ms) similar (89 kB vs. 89 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 2 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (20 ms vs. 21 ms) similar (97 kB vs. 152 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 3 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (20 ms vs. 23 ms) 3 times less (101 kB vs. 313 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 4 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (34 ms vs. 24 ms) 2 times less (162 kB vs. 405 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 5 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (34 ms vs. 28 ms) 3 times less (169 kB vs. 567 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 6 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (34 ms vs. 29 ms) 3 times less (174 kB vs. 609 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 7 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (33 ms vs. 31 ms) 3 times less (185 kB vs. 706 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 8 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 31 ns) similar (33 ms vs. 33 ms) 4 times less (191 kB vs. 802 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 16 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (34 ms vs. 41 ms) 5 times less (247 kB vs. 1 MB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 32 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (35 ms vs. 59 ms) 7 times less (349 kB vs. 3 MB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 128 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (40 ms vs. 66 ms) 7 times less (923 kB vs. 7 MB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 256 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (47 ms vs. 81 ms) 9 times less (2 MB vs. 15 MB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 1 nonempty non-singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (17 ms vs. 21 ms) similar (62 kB vs. 90 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 2 nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (17 ms vs. 22 ms) similar (100 kB vs. 160 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 3 nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (18 ms vs. 24 ms) 2 times less (109 kB vs. 315 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 4 nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (30 ms vs. 26 ms) 2 times less (175 kB vs. 421 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 5 nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (30 ms vs. 30 ms) 3 times less (186 kB vs. 584 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 6 nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (31 ms vs. 32 ms) 3 times less (196 kB vs. 645 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 7 nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (30 ms vs. 33 ms) 3 times less (211 kB vs. 744 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 8 nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (31 ms vs. 35 ms) 3 times less (221 kB vs. 865 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 16 nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (31 ms vs. 46 ms) 5 times less (313 kB vs. 2 MB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 32 nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) 2 times less (32 ms vs. 70 ms) 7 times less (486 kB vs. 4 MB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 128 nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (38 ms vs. 68 ms) 5 times less (1 MB vs. 8 MB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 256 nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (48 ms vs. 85 ms) 6 times less (3 MB vs. 17 MB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 1 empty singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (20 ms vs. 21 ms) similar (55 kB vs. 89 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (30 ns vs. 40 ns) similar (20 ms vs. 21 ms) similar (89 kB vs. 90 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 1 nonempty non-singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (17 ms vs. 21 ms) similar (62 kB vs. 90 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 1 empty singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (19 ms vs. 21 ms) similar (55 kB vs. 89 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 2 identical empty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (20 ms vs. 22 ms) 2 times less (63 kB vs. 152 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 3 identical empty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (20 ms vs. 23 ms) 3 times less (92 kB vs. 298 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 4 identical empty singleton Tuples similar (optimized out) similar (40 ns vs. 31 ns) similar (33 ms vs. 24 ms) 2 times less (150 kB vs. 355 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 5 identical empty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (33 ms vs. 23 ms) 2 times less (156 kB vs. 398 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 6 identical empty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (33 ms vs. 24 ms) 2 times less (162 kB vs. 456 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 7 identical empty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (33 ms vs. 23 ms) 2 times less (168 kB vs. 500 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 8 identical empty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (33 ms vs. 24 ms) 3 times less (174 kB vs. 559 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 16 identical empty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (34 ms vs. 25 ms) 4 times less (221 kB vs. 990 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 32 identical empty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (34 ms vs. 27 ms) 5 times less (318 kB vs. 2 MB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 128 identical empty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (39 ms vs. 31 ms) 7 times less (894 kB vs. 6 MB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 256 identical empty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (45 ms vs. 44 ms) 8 times less (2 MB vs. 14 MB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (30 ns vs. 30 ns) similar (19 ms vs. 20 ms) similar (89 kB vs. 90 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 2 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (20 ms vs. 21 ms) similar (90 kB vs. 152 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 3 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (20 ms vs. 20 ms) 2 times less (92 kB vs. 214 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 4 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (33 ms vs. 21 ms) similar (147 kB vs. 258 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 5 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (33 ms vs. 20 ms) 2 times less (151 kB vs. 315 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 6 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (33 ms vs. 21 ms) 2 times less (154 kB vs. 359 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 7 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (33 ms vs. 20 ms) 2 times less (158 kB vs. 417 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 8 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (33 ms vs. 22 ms) 2 times less (162 kB vs. 462 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 16 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (34 ms vs. 23 ms) 4 times less (191 kB vs. 893 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 32 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (34 ms vs. 24 ms) 7 times less (249 kB vs. 2 MB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 128 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (39 ms vs. 28 ms) 10 times less (600 kB vs. 6 MB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 256 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (44 ms vs. 42 ms) 13 times less (1 MB vs. 14 MB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 1 nonempty non-singleton Tuple similar (optimized out) similar (30 ns vs. 30 ns) similar (17 ms vs. 21 ms) similar (62 kB vs. 90 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 2 identical nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (17 ms vs. 22 ms) 2 times less (64 kB vs. 160 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 3 identical nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (17 ms vs. 21 ms) 2 times less (91 kB vs. 218 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 4 identical nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (30 ms vs. 23 ms) similar (146 kB vs. 275 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 5 identical nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (30 ms vs. 22 ms) 2 times less (150 kB vs. 333 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 6 identical nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (31 ms vs. 23 ms) 2 times less (153 kB vs. 395 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 7 identical nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (31 ms vs. 23 ms) 2 times less (157 kB vs. 455 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 8 identical nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (31 ms vs. 24 ms) 3 times less (161 kB vs. 525 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 16 identical nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (31 ms vs. 27 ms) 6 times less (190 kB vs. 1 MB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 32 identical nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (32 ms vs. 33 ms) 11 times less (248 kB vs. 3 MB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 128 identical nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (36 ms vs. 31 ms) 11 times less (599 kB vs. 7 MB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 256 identical nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (42 ms vs. 45 ms) 13 times less (1 MB vs. 14 MB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 1 empty singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (20 ms vs. 21 ms) similar (55 kB vs. 89 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 2 empty & nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (20 ms vs. 21 ms) similar (92 kB vs. 152 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 3 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (21 ms vs. 20 ms) 2 times less (94 kB vs. 226 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 4 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (34 ms vs. 21 ms) similar (150 kB vs. 272 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 5 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (34 ms vs. 20 ms) 2 times less (153 kB vs. 326 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 6 empty & nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (34 ms vs. 22 ms) 2 times less (157 kB vs. 373 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 7 empty & nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (33 ms vs. 20 ms) 2 times less (161 kB vs. 429 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 8 empty & nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (33 ms vs. 22 ms) 2 times less (165 kB vs. 476 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 16 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (34 ms vs. 23 ms) 4 times less (194 kB vs. 908 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 32 empty & nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (35 ms vs. 24 ms) 7 times less (252 kB vs. 2 MB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 128 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (38 ms vs. 29 ms) 10 times less (603 kB vs. 6 MB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 256 empty & nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (44 ms vs. 44 ms) 13 times less (1 MB vs. 14 MB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (30 ns vs. 30 ns) similar (20 ms vs. 21 ms) similar (89 kB vs. 90 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 2 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (20 ms vs. 21 ms) similar (90 kB vs. 152 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 3 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (20 ms vs. 20 ms) 2 times less (92 kB vs. 215 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 4 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (33 ms vs. 21 ms) similar (147 kB vs. 258 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 5 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (34 ms vs. 20 ms) 2 times less (151 kB vs. 315 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 6 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (34 ms vs. 21 ms) 2 times less (155 kB vs. 359 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 7 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (33 ms vs. 20 ms) 2 times less (159 kB vs. 417 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 8 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (33 ms vs. 22 ms) 2 times less (162 kB vs. 463 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 16 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (33 ms vs. 23 ms) 4 times less (192 kB vs. 894 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 32 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (34 ms vs. 24 ms) 7 times less (250 kB vs. 2 MB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 128 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (39 ms vs. 29 ms) 10 times less (601 kB vs. 6 MB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 256 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (43 ms vs. 44 ms) 13 times less (1 MB vs. 14 MB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 1 nonempty non-singleton Tuple similar (optimized out) similar (30 ns vs. 30 ns) similar (17 ms vs. 21 ms) similar (62 kB vs. 90 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 2 nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (18 ms vs. 23 ms) similar (89 kB vs. 160 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 3 nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (17 ms vs. 21 ms) 2 times less (91 kB vs. 218 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 4 nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (31 ms vs. 23 ms) similar (146 kB vs. 275 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 5 nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (32 ms vs. 22 ms) 2 times less (150 kB vs. 333 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 6 nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (30 ms vs. 24 ms) 2 times less (154 kB vs. 395 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 7 nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (31 ms vs. 23 ms) 2 times less (158 kB vs. 456 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 8 nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (30 ms vs. 24 ms) 3 times less (161 kB vs. 526 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 16 nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (31 ms vs. 28 ms) 5 times less (191 kB vs. 1 MB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 32 nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (32 ms vs. 36 ms) 10 times less (249 kB vs. 3 MB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 128 nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (36 ms vs. 31 ms) 11 times less (600 kB vs. 7 MB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 256 nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (41 ms vs. 48 ms) 13 times less (1 MB vs. 14 MB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 1 empty singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (38 ms vs. 38 ms) similar (66 kB vs. 89 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (30 ns vs. 40 ns) similar (38 ms vs. 38 ms) similar (100 kB vs. 94 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 1 nonempty non-singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (36 ms vs. 38 ms) similar (73 kB vs. 92 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 1 empty singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (38 ms vs. 38 ms) similar (66 kB vs. 89 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 2 identical empty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (38 ms vs. 38 ms) similar (73 kB vs. 137 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 3 identical empty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (38 ms vs. 41 ms) 2 times less (101 kB vs. 260 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 4 identical empty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (52 ms vs. 41 ms) similar (154 kB vs. 307 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 5 identical empty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (52 ms vs. 41 ms) 2 times less (158 kB vs. 344 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 6 identical empty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (52 ms vs. 41 ms) 2 times less (162 kB vs. 391 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 7 identical empty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (52 ms vs. 41 ms) 2 times less (165 kB vs. 429 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 8 identical empty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (52 ms vs. 41 ms) 2 times less (169 kB vs. 478 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 16 identical empty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (52 ms vs. 42 ms) 4 times less (198 kB vs. 840 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 32 identical empty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (54 ms vs. 43 ms) 6 times less (257 kB vs. 2 MB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 128 identical empty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (55 ms vs. 48 ms) 9 times less (607 kB vs. 6 MB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 256 identical empty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (59 ms vs. 60 ms) 12 times less (1 MB vs. 13 MB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (30 ns vs. 30 ns) similar (38 ms vs. 38 ms) similar (100 kB vs. 94 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 2 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (38 ms vs. 38 ms) similar (103 kB vs. 141 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 3 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (38 ms vs. 40 ms) 2 times less (106 kB vs. 265 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 4 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (52 ms vs. 41 ms) similar (159 kB vs. 312 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 5 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (52 ms vs. 41 ms) 2 times less (163 kB vs. 348 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 6 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (53 ms vs. 42 ms) 2 times less (166 kB vs. 396 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 7 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (52 ms vs. 41 ms) 2 times less (170 kB vs. 434 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 8 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (52 ms vs. 41 ms) 2 times less (174 kB vs. 483 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 16 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (52 ms vs. 42 ms) 4 times less (202 kB vs. 845 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 32 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (52 ms vs. 43 ms) 6 times less (261 kB vs. 2 MB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 128 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (54 ms vs. 49 ms) 9 times less (612 kB vs. 6 MB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 256 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (58 ms vs. 61 ms) 12 times less (1 MB vs. 13 MB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 1 nonempty non-singleton Tuple similar (optimized out) similar (30 ns vs. 40 ns) similar (36 ms vs. 38 ms) similar (73 kB vs. 92 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 2 identical nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (36 ms vs. 39 ms) similar (80 kB vs. 143 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 3 identical nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (36 ms vs. 42 ms) 2 times less (113 kB vs. 269 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 4 identical nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (49 ms vs. 42 ms) similar (171 kB vs. 326 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 5 identical nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (49 ms vs. 43 ms) 2 times less (179 kB vs. 367 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 6 identical nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (50 ms vs. 43 ms) 2 times less (187 kB vs. 429 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 7 identical nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (49 ms vs. 43 ms) 2 times less (195 kB vs. 473 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 8 identical nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (49 ms vs. 44 ms) 2 times less (203 kB vs. 542 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 16 identical nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (49 ms vs. 46 ms) 4 times less (268 kB vs. 1 MB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 32 identical nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (51 ms vs. 52 ms) 6 times less (399 kB vs. 2 MB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 128 identical nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (53 ms vs. 51 ms) 5 times less (1 MB vs. 6 MB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 256 identical nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (57 ms vs. 64 ms) 6 times less (2 MB vs. 13 MB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 1 empty singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (38 ms vs. 38 ms) similar (66 kB vs. 89 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 2 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (39 ms vs. 38 ms) similar (112 kB vs. 152 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 3 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (38 ms vs. 41 ms) 2 times less (115 kB vs. 285 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 4 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (53 ms vs. 41 ms) 2 times less (183 kB vs. 417 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 5 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (52 ms vs. 47 ms) 2 times less (186 kB vs. 558 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 6 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (53 ms vs. 47 ms) 3 times less (190 kB vs. 596 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 7 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (52 ms vs. 49 ms) 3 times less (208 kB vs. 688 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 8 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (52 ms vs. 49 ms) 3 times less (212 kB vs. 774 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 16 empty & nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (53 ms vs. 58 ms) 4 times less (269 kB vs. 1 MB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 32 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (53 ms vs. 76 ms) 6 times less (355 kB vs. 2 MB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 128 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (55 ms vs. 92 ms) 9 times less (704 kB vs. 7 MB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 256 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (58 ms vs. 103 ms) 12 times less (1 MB vs. 14 MB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (38 ms vs. 37 ms) similar (100 kB vs. 94 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 2 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (39 ms vs. 38 ms) similar (117 kB vs. 157 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 3 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (38 ms vs. 41 ms) 2 times less (120 kB vs. 289 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 4 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (53 ms vs. 41 ms) 2 times less (187 kB vs. 421 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 5 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (52 ms vs. 47 ms) 2 times less (191 kB vs. 563 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 6 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (52 ms vs. 47 ms) 3 times less (195 kB vs. 601 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 7 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (52 ms vs. 49 ms) 3 times less (213 kB vs. 692 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 8 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (52 ms vs. 49 ms) 3 times less (216 kB vs. 779 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 16 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (52 ms vs. 58 ms) 4 times less (273 kB vs. 1 MB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 32 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (53 ms vs. 77 ms) 6 times less (346 kB vs. 2 MB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 128 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (55 ms vs. 84 ms) 9 times less (695 kB vs. 6 MB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 256 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (57 ms vs. 99 ms) 12 times less (1 MB vs. 14 MB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 1 nonempty non-singleton Tuple similar (optimized out) similar (40 ns vs. 30 ns) similar (35 ms vs. 39 ms) similar (73 kB vs. 92 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 2 nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (35 ms vs. 39 ms) similar (115 kB vs. 154 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 3 nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (35 ms vs. 42 ms) 2 times less (123 kB vs. 289 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 4 nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (50 ms vs. 42 ms) 2 times less (190 kB vs. 426 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 5 nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (49 ms vs. 49 ms) 2 times less (199 kB vs. 572 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 6 nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (50 ms vs. 49 ms) 3 times less (207 kB vs. 624 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 7 nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (50 ms vs. 51 ms) 3 times less (224 kB vs. 718 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 8 nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (50 ms vs. 52 ms) 3 times less (233 kB vs. 825 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 16 nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (50 ms vs. 63 ms) 4 times less (325 kB vs. 2 MB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 32 nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (51 ms vs. 86 ms) 7 times less (470 kB vs. 3 MB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 128 nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (53 ms vs. 87 ms) 6 times less (1 MB vs. 8 MB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 256 nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (57 ms vs. 103 ms) 7 times less (2 MB vs. 16 MB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 1 empty singleton Tuple similar (optimized out) similar (30 ns vs. 40 ns) similar (20 ms vs. 19 ms) similar (60 kB vs. 116 kB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (30 ns vs. 40 ns) similar (20 ms vs. 19 ms) similar (90 kB vs. 117 kB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 1 nonempty non-singleton Tuple similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (20 ms vs. 20 ms) similar (153 kB vs. 118 kB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 1 empty singleton Tuple similar (optimized out) similar (30 ns vs. 30 ns) similar (20 ms vs. 19 ms) similar (60 kB vs. 116 kB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 2 identical empty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (20 ms vs. 20 ms) 2 times less (67 kB vs. 167 kB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 3 identical empty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (20 ms vs. 23 ms) 3 times less (94 kB vs. 321 kB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 4 identical empty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (40 ms vs. 23 ms) 5 times more (2 MB vs. 372 kB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 5 identical empty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (40 ms vs. 28 ms) 3 times more (2 MB vs. 592 kB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 6 identical empty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (40 ms vs. 29 ms) 2 times more (2 MB vs. 646 kB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 7 identical empty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (40 ms vs. 33 ms) 2 times more (2 MB vs. 867 kB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 8 identical empty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (40 ms vs. 34 ms) 2 times more (2 MB vs. 922 kB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 16 identical empty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (41 ms vs. 57 ms) similar (2 MB vs. 2 MB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 32 identical empty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) 2 times less (41 ms vs. 105 ms) 2 times less (2 MB vs. 4 MB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (20 ms vs. 19 ms) similar (90 kB vs. 117 kB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 2 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (20 ms vs. 20 ms) similar (92 kB vs. 167 kB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 3 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (20 ms vs. 23 ms) 3 times less (94 kB vs. 322 kB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 4 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (40 ms vs. 23 ms) 5 times more (2 MB vs. 373 kB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 5 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (40 ms vs. 28 ms) 3 times more (2 MB vs. 592 kB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 6 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (41 ms vs. 29 ms) 2 times more (2 MB vs. 646 kB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 7 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (40 ms vs. 33 ms) 2 times more (2 MB vs. 868 kB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 8 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (40 ms vs. 34 ms) 2 times more (2 MB vs. 923 kB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 16 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (41 ms vs. 57 ms) similar (2 MB vs. 2 MB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 32 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) 2 times less (41 ms vs. 107 ms) 2 times less (2 MB vs. 4 MB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 1 nonempty non-singleton Tuple similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (20 ms vs. 20 ms) similar (153 kB vs. 118 kB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 2 identical nonempty non-singleton Tuples similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (20 ms vs. 21 ms) similar (167 kB vs. 173 kB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 3 identical nonempty non-singleton Tuples similar (12 LLVM lines) similar (40 ns vs. 40 ns) similar (21 ms vs. 28 ms) 2 times less (208 kB vs. 436 kB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 4 identical nonempty non-singleton Tuples similar (8 LLVM lines) similar (50 ns vs. 40 ns) similar (41 ms vs. 28 ms) 4 times more (2 MB vs. 496 kB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 5 identical nonempty non-singleton Tuples similar (12 LLVM lines) similar (50 ns vs. 40 ns) similar (40 ms vs. 35 ms) 2 times more (2 MB vs. 757 kB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 6 identical nonempty non-singleton Tuples similar (12 LLVM lines) similar (40 ns vs. 40 ns) similar (41 ms vs. 36 ms) 2 times more (2 MB vs. 824 kB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 7 identical nonempty non-singleton Tuples similar (16 LLVM lines) similar (40 ns vs. 40 ns) similar (41 ms vs. 43 ms) similar (2 MB vs. 1 MB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 8 identical nonempty non-singleton Tuples similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (41 ms vs. 44 ms) similar (2 MB vs. 1 MB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 16 identical nonempty non-singleton Tuples similar (12 LLVM lines) similar (40 ns vs. 40 ns) similar (42 ms vs. 77 ms) similar (2 MB vs. 3 MB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 32 identical nonempty non-singleton Tuples similar (20 LLVM lines) similar (50 ns vs. 50 ns) 3 times less (43 ms vs. 145 ms) 2 times less (2 MB vs. 6 MB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 1 empty singleton Tuple similar (optimized out) similar (30 ns vs. 30 ns) similar (20 ms vs. 19 ms) similar (60 kB vs. 116 kB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 2 empty & nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (20 ms vs. 20 ms) similar (92 kB vs. 167 kB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 3 empty & nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (20 ms vs. 22 ms) 3 times less (94 kB vs. 321 kB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 4 empty & nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (40 ms vs. 23 ms) 4 times more (2 MB vs. 406 kB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 5 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (41 ms vs. 28 ms) 2 times more (2 MB vs. 661 kB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 6 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (41 ms vs. 29 ms) 2 times more (2 MB vs. 749 kB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 7 empty & nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (40 ms vs. 34 ms) similar (2 MB vs. 1 MB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 8 empty & nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (40 ms vs. 35 ms) similar (2 MB vs. 1 MB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 16 empty & nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (41 ms vs. 65 ms) 2 times less (2 MB vs. 5 MB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 32 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) 4 times less (41 ms vs. 197 ms) 8 times less (2 MB vs. 18 MB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (40 ns vs. 30 ns) similar (20 ms vs. 20 ms) similar (90 kB vs. 117 kB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 2 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (20 ms vs. 20 ms) similar (92 kB vs. 167 kB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 3 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (20 ms vs. 22 ms) 3 times less (94 kB vs. 322 kB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 4 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (41 ms vs. 23 ms) 4 times more (2 MB vs. 441 kB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 5 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (41 ms vs. 29 ms) 2 times more (2 MB vs. 730 kB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 6 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (41 ms vs. 29 ms) 2 times more (2 MB vs. 787 kB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 7 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (40 ms vs. 34 ms) similar (2 MB vs. 1 MB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 8 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (40 ms vs. 35 ms) similar (2 MB vs. 1 MB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 16 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (40 ms vs. 66 ms) 2 times less (2 MB vs. 6 MB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 32 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) 5 times less (41 ms vs. 234 ms) 10 times less (2 MB vs. 21 MB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 1 nonempty non-singleton Tuple similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (20 ms vs. 20 ms) similar (153 kB vs. 118 kB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 2 nonempty non-singleton Tuples similar (11 LLVM lines) similar (40 ns vs. 40 ns) similar (20 ms vs. 21 ms) similar (193 kB vs. 174 kB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 3 nonempty non-singleton Tuples similar (14 LLVM lines) similar (40 ns vs. 40 ns) similar (20 ms vs. 28 ms) 2 times less (208 kB vs. 437 kB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 4 nonempty non-singleton Tuples similar (17 LLVM lines) similar (40 ns vs. 40 ns) similar (41 ms vs. 29 ms) 3 times more (2 MB vs. 564 kB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 5 nonempty non-singleton Tuples similar (20 LLVM lines) similar (50 ns vs. 50 ns) similar (41 ms vs. 36 ms) 2 times more (2 MB vs. 895 kB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 6 nonempty non-singleton Tuples similar (23 LLVM lines) similar (50 ns vs. 50 ns) similar (41 ms vs. 37 ms) 2 times more (2 MB vs. 965 kB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 7 nonempty non-singleton Tuples similar (26 LLVM lines) similar (50 ns vs. 50 ns) similar (42 ms vs. 44 ms) similar (2 MB vs. 2 MB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 8 nonempty non-singleton Tuples similar (29 LLVM lines) similar (40 ns vs. 50 ns) similar (42 ms vs. 45 ms) similar (2 MB vs. 2 MB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 16 nonempty non-singleton Tuples similar (53 LLVM lines) similar (60 ns vs. 50 ns) similar (44 ms vs. 86 ms) 2 times less (2 MB vs. 6 MB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 32 nonempty non-singleton Tuples similar (93 LLVM lines) similar (70 ns vs. 70 ns) 5 times less (49 ms vs. 274 ms) 9 times less (2 MB vs. 23 MB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 1 empty singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (20 ms vs. 26 ms) 3 times less (61 kB vs. 233 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (40 ns vs. 30 ns) similar (20 ms vs. 26 ms) 2 times less (91 kB vs. 262 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 1 nonempty non-singleton Tuple similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (20 ms vs. 23 ms) 2 times less (157 kB vs. 345 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 1 empty singleton Tuple similar (optimized out) similar (40 ns vs. 30 ns) similar (20 ms vs. 25 ms) 3 times less (61 kB vs. 233 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 2 identical empty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (20 ms vs. 29 ms) 6 times less (68 kB vs. 469 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 3 identical empty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (20 ms vs. 29 ms) 5 times less (97 kB vs. 523 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 4 identical empty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (45 ms vs. 29 ms) 2 times less (198 kB vs. 552 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 5 identical empty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (45 ms vs. 38 ms) 2 times less (204 kB vs. 609 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 6 identical empty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (45 ms vs. 38 ms) 3 times less (210 kB vs. 639 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 7 identical empty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (46 ms vs. 38 ms) 3 times less (216 kB vs. 670 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 8 identical empty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (46 ms vs. 39 ms) 3 times less (221 kB vs. 701 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 16 identical empty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (46 ms vs. 41 ms) 3 times less (269 kB vs. 953 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 32 identical empty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (47 ms vs. 45 ms) 4 times less (364 kB vs. 1 MB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (30 ns vs. 30 ns) similar (20 ms vs. 26 ms) 2 times less (91 kB vs. 262 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 2 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (20 ms vs. 29 ms) 5 times less (94 kB vs. 494 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 3 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (20 ms vs. 29 ms) 5 times less (97 kB vs. 523 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 4 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (45 ms vs. 29 ms) 2 times less (198 kB vs. 552 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 5 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (46 ms vs. 38 ms) 2 times less (204 kB vs. 609 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 6 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (45 ms vs. 39 ms) 3 times less (210 kB vs. 639 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 7 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (45 ms vs. 39 ms) 3 times less (216 kB vs. 670 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 8 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (45 ms vs. 39 ms) 3 times less (222 kB vs. 701 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 16 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (46 ms vs. 41 ms) 3 times less (269 kB vs. 953 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 32 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (47 ms vs. 45 ms) 4 times less (364 kB vs. 1 MB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 1 nonempty non-singleton Tuple similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (20 ms vs. 23 ms) 2 times less (157 kB vs. 345 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 2 identical nonempty non-singleton Tuples similar (11 LLVM lines) similar (40 ns vs. 40 ns) similar (20 ms vs. 24 ms) 4 times less (175 kB vs. 748 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 3 identical nonempty non-singleton Tuples similar (16 LLVM lines) similar (50 ns vs. 40 ns) similar (21 ms vs. 24 ms) 3 times less (218 kB vs. 866 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 4 identical nonempty non-singleton Tuples similar (16 LLVM lines) similar (40 ns vs. 40 ns) similar (46 ms vs. 25 ms) 2 times less (329 kB vs. 963 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 5 identical nonempty non-singleton Tuples similar (20 LLVM lines) similar (40 ns vs. 50 ns) similar (46 ms vs. 34 ms) 3 times less (347 kB vs. 1 MB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 6 identical nonempty non-singleton Tuples similar (25 LLVM lines) similar (50 ns vs. 40 ns) similar (47 ms vs. 35 ms) 3 times less (366 kB vs. 1 MB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 7 identical nonempty non-singleton Tuples similar (31 LLVM lines) similar (40 ns vs. 40 ns) similar (48 ms vs. 35 ms) 3 times less (385 kB vs. 1 MB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 8 identical nonempty non-singleton Tuples similar (38 LLVM lines) similar (50 ns vs. 50 ns) similar (49 ms vs. 37 ms) 3 times less (405 kB vs. 1 MB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 16 identical nonempty non-singleton Tuples similar (77 LLVM lines) similar (70 ns vs. 70 ns) similar (59 ms vs. 48 ms) 4 times less (558 kB vs. 3 MB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 32 identical nonempty non-singleton Tuples similar (669 LLVM lines) similar (230 ns vs. 230 ns) similar (365 ms vs. 357 ms) 6 times less (867 kB vs. 6 MB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 1 empty singleton Tuple similar (optimized out) similar (40 ns vs. 30 ns) similar (20 ms vs. 26 ms) 3 times less (61 kB vs. 233 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 2 empty & nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (21 ms vs. 29 ms) 5 times less (94 kB vs. 495 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 3 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (20 ms vs. 30 ms) 5 times less (97 kB vs. 524 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 4 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (46 ms vs. 30 ms) 2 times less (198 kB vs. 554 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 5 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (46 ms vs. 39 ms) 2 times less (204 kB vs. 611 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 6 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (46 ms vs. 40 ms) 3 times less (210 kB vs. 641 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 7 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (45 ms vs. 38 ms) 3 times less (216 kB vs. 672 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 8 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (46 ms vs. 39 ms) 3 times less (222 kB vs. 702 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 16 empty & nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (45 ms vs. 41 ms) 3 times less (270 kB vs. 970 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 32 empty & nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (47 ms vs. 44 ms) 4 times less (365 kB vs. 1 MB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (40 ns vs. 30 ns) similar (20 ms vs. 25 ms) 2 times less (91 kB vs. 262 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 2 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (21 ms vs. 29 ms) 5 times less (94 kB vs. 495 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 3 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (21 ms vs. 30 ms) 5 times less (97 kB vs. 524 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 4 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (46 ms vs. 30 ms) 2 times less (198 kB vs. 554 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 5 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (46 ms vs. 39 ms) 2 times less (204 kB vs. 611 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 6 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (46 ms vs. 39 ms) 3 times less (210 kB vs. 641 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 7 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (46 ms vs. 38 ms) 3 times less (216 kB vs. 672 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 8 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (46 ms vs. 39 ms) 3 times less (222 kB vs. 702 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 16 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (46 ms vs. 40 ms) 3 times less (270 kB vs. 970 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 32 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (46 ms vs. 45 ms) 4 times less (365 kB vs. 1 MB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 1 nonempty non-singleton Tuple similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (20 ms vs. 23 ms) 2 times less (157 kB vs. 345 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 2 nonempty non-singleton Tuples similar (13 LLVM lines) similar (40 ns vs. 40 ns) similar (20 ms vs. 24 ms) 3 times less (200 kB vs. 774 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 3 nonempty non-singleton Tuples similar (20 LLVM lines) similar (40 ns vs. 40 ns) similar (21 ms vs. 25 ms) 3 times less (218 kB vs. 867 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 4 nonempty non-singleton Tuples similar (29 LLVM lines) similar (50 ns vs. 50 ns) similar (48 ms vs. 26 ms) 2 times less (330 kB vs. 965 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 5 nonempty non-singleton Tuples similar (40 LLVM lines) similar (50 ns vs. 50 ns) similar (48 ms vs. 35 ms) 3 times less (348 kB vs. 1 MB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 6 nonempty non-singleton Tuples similar (53 LLVM lines) similar (50 ns vs. 60 ns) similar (50 ms vs. 37 ms) 3 times less (367 kB vs. 1 MB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 7 nonempty non-singleton Tuples similar (68 LLVM lines) similar (60 ns vs. 60 ns) similar (51 ms vs. 38 ms) 3 times less (386 kB vs. 1 MB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 8 nonempty non-singleton Tuples similar (85 LLVM lines) similar (60 ns vs. 60 ns) similar (53 ms vs. 41 ms) 3 times less (406 kB vs. 1 MB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 16 nonempty non-singleton Tuples similar (743 LLVM lines) similar (501 ns vs. 571 ns) similar (175 ms vs. 164 ms) 4 times less (561 kB vs. 3 MB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 32 nonempty non-singleton Tuples similar (2972 LLVM lines) similar (2 μs vs. 2 μs) similar (992 ms vs. 985 ms) 6 times less (882 kB vs. 6 MB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 1 empty singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (34 ms vs. 34 ms) similar (202 kB vs. 269 kB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (40 ns vs. 30 ns) similar (34 ms vs. 34 ms) similar (236 kB vs. 273 kB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 1 nonempty non-singleton Tuple similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (32 ms vs. 35 ms) similar (243 kB vs. 290 kB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 1 empty singleton Tuple similar (optimized out) similar (40 ns vs. 30 ns) similar (34 ms vs. 33 ms) similar (202 kB vs. 269 kB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 2 identical empty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (34 ms vs. 34 ms) similar (224 kB vs. 378 kB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 3 identical empty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (35 ms vs. 35 ms) similar (268 kB vs. 401 kB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 4 identical empty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (50 ms vs. 35 ms) similar (345 kB vs. 450 kB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 5 identical empty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (51 ms vs. 35 ms) similar (364 kB vs. 500 kB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 6 identical empty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (53 ms vs. 35 ms) similar (387 kB vs. 550 kB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 7 identical empty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (52 ms vs. 35 ms) similar (409 kB vs. 600 kB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 8 identical empty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (53 ms vs. 35 ms) similar (433 kB vs. 651 kB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 16 identical empty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (56 ms vs. 36 ms) similar (600 kB vs. 1 MB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 32 identical empty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (65 ms vs. 37 ms) 2 times less (944 kB vs. 2 MB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 128 identical empty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) 3 times more (135 ms vs. 43 ms) 2 times less (3 MB vs. 7 MB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 256 identical empty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) 4 times more (242 ms vs. 56 ms) 2 times less (6 MB vs. 15 MB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (34 ms vs. 33 ms) similar (236 kB vs. 273 kB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 2 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (34 ms vs. 35 ms) similar (254 kB vs. 383 kB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 3 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (35 ms vs. 34 ms) similar (272 kB vs. 406 kB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 4 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (50 ms vs. 35 ms) similar (349 kB vs. 455 kB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 5 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (51 ms vs. 34 ms) similar (369 kB vs. 505 kB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 6 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (51 ms vs. 35 ms) similar (392 kB vs. 555 kB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 7 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (52 ms vs. 35 ms) similar (414 kB vs. 605 kB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 8 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (53 ms vs. 35 ms) similar (438 kB vs. 656 kB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 16 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (56 ms vs. 35 ms) similar (605 kB vs. 1 MB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 32 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (65 ms vs. 37 ms) 2 times less (949 kB vs. 2 MB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 128 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) 3 times more (135 ms vs. 43 ms) 2 times less (3 MB vs. 7 MB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 256 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) 4 times more (241 ms vs. 56 ms) 2 times less (6 MB vs. 15 MB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 1 nonempty non-singleton Tuple similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (32 ms vs. 35 ms) similar (243 kB vs. 290 kB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 2 identical nonempty non-singleton Tuples similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (33 ms vs. 37 ms) similar (276 kB vs. 406 kB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 3 identical nonempty non-singleton Tuples similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (33 ms vs. 36 ms) similar (334 kB vs. 438 kB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 4 identical nonempty non-singleton Tuples similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (49 ms vs. 36 ms) similar (425 kB vs. 491 kB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 5 identical nonempty non-singleton Tuples similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (49 ms vs. 37 ms) similar (459 kB vs. 546 kB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 6 identical nonempty non-singleton Tuples similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (51 ms vs. 37 ms) similar (500 kB vs. 604 kB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 7 identical nonempty non-singleton Tuples similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (51 ms vs. 37 ms) similar (536 kB vs. 663 kB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 8 identical nonempty non-singleton Tuples similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (52 ms vs. 37 ms) similar (575 kB vs. 723 kB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 16 identical nonempty non-singleton Tuples similar (8 LLVM lines) similar (50 ns vs. 40 ns) similar (57 ms vs. 40 ms) similar (856 kB vs. 1 MB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 32 identical nonempty non-singleton Tuples similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (67 ms vs. 46 ms) similar (1 MB vs. 2 MB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 128 identical nonempty non-singleton Tuples similar (8 LLVM lines) 128 times less (40 ns vs. 5 μs) 3 times more (155 ms vs. 45 ms) similar (5 MB vs. 7 MB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 256 identical nonempty non-singleton Tuples similar (8 LLVM lines) 246 times less (40 ns vs. 10 μs) 4 times more (289 ms vs. 59 ms) similar (9 MB vs. 15 MB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 1 empty singleton Tuple similar (optimized out) similar (40 ns vs. 30 ns) similar (34 ms vs. 34 ms) similar (202 kB vs. 269 kB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 2 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (39 ms vs. 39 ms) similar (296 kB vs. 424 kB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 3 empty & nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (39 ms vs. 42 ms) similar (315 kB vs. 564 kB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 4 empty & nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (58 ms vs. 51 ms) 2 times less (440 kB vs. 1 MB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 5 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (59 ms vs. 55 ms) 2 times less (460 kB vs. 1 MB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 6 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (60 ms vs. 54 ms) 2 times less (483 kB vs. 1 MB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 7 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (63 ms vs. 62 ms) 2 times less (553 kB vs. 1 MB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 8 empty & nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (63 ms vs. 66 ms) 2 times less (577 kB vs. 2 MB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 16 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (75 ms vs. 87 ms) 2 times less (840 kB vs. 2 MB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 32 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (91 ms vs. 114 ms) 2 times less (1 MB vs. 3 MB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 128 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (172 ms vs. 122 ms) 2 times less (3 MB vs. 8 MB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 256 empty & nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) 2 times more (292 ms vs. 125 ms) 2 times less (6 MB vs. 16 MB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (34 ms vs. 34 ms) similar (236 kB vs. 273 kB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 2 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (39 ms vs. 38 ms) similar (301 kB vs. 429 kB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 3 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (39 ms vs. 42 ms) similar (319 kB vs. 569 kB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 4 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (59 ms vs. 51 ms) 2 times less (445 kB vs. 1 MB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 5 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (58 ms vs. 55 ms) 2 times less (464 kB vs. 1 MB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 6 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (60 ms vs. 54 ms) 2 times less (488 kB vs. 1 MB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 7 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (63 ms vs. 63 ms) 2 times less (557 kB vs. 1 MB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 8 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (63 ms vs. 66 ms) 2 times less (581 kB vs. 2 MB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 16 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (75 ms vs. 86 ms) 2 times less (844 kB vs. 2 MB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 32 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) 2 times more (88 ms vs. 38 ms) similar (1 MB vs. 2 MB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 128 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) 3 times more (168 ms vs. 52 ms) 2 times less (3 MB vs. 7 MB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 256 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) 4 times more (284 ms vs. 67 ms) 2 times less (6 MB vs. 15 MB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 1 nonempty non-singleton Tuple similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (33 ms vs. 35 ms) similar (243 kB vs. 290 kB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 2 nonempty non-singleton Tuples similar (8 LLVM lines) similar (40 ns vs. 50 ns) similar (37 ms vs. 40 ms) similar (359 kB vs. 464 kB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 3 nonempty non-singleton Tuples similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (38 ms vs. 45 ms) similar (392 kB vs. 622 kB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 4 nonempty non-singleton Tuples similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (58 ms vs. 54 ms) 2 times less (544 kB vs. 1 MB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 5 nonempty non-singleton Tuples similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (59 ms vs. 58 ms) 2 times less (578 kB vs. 1 MB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 6 nonempty non-singleton Tuples similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (59 ms vs. 57 ms) 2 times less (619 kB vs. 1 MB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 7 nonempty non-singleton Tuples similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (63 ms vs. 66 ms) 2 times less (714 kB vs. 2 MB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 8 nonempty non-singleton Tuples similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (64 ms vs. 70 ms) 2 times less (754 kB vs. 2 MB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 16 nonempty non-singleton Tuples similar (8 LLVM lines) similar (40 ns vs. 40 ns) similar (78 ms vs. 92 ms) 2 times less (1 MB vs. 3 MB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 32 nonempty non-singleton Tuples similar (8 LLVM lines) similar (40 ns vs. 40 ns) 2 times more (97 ms vs. 47 ms) similar (2 MB vs. 3 MB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 128 nonempty non-singleton Tuples similar (8 LLVM lines) 290 times less (40 ns vs. 12 μs) 3 times more (215 ms vs. 54 ms) similar (5 MB vs. 8 MB)
UnrolledUtilities.unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) rec_unrolled_ifelse((x->length(x) >= length(itr[end])), identity, error, itr) Tuple 256 nonempty non-singleton Tuples similar (8 LLVM lines) 550 times less (40 ns vs. 22 μs) 5 times more (395 ms vs. 70 ms) similar (10 MB vs. 15 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 1 empty singleton Tuple similar (optimized out) similar (30 ns vs. 40 ns) 2 times less (23 ms vs. 50 ms) 10 times less (180 kB vs. 2 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (26 ms vs. 50 ms) 8 times less (221 kB vs. 2 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 1 nonempty non-singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (23 ms vs. 35 ms) 12 times less (195 kB vs. 2 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 1 empty singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) 2 times less (24 ms vs. 50 ms) 10 times less (180 kB vs. 2 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 2 identical empty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) 2 times less (24 ms vs. 51 ms) 11 times less (190 kB vs. 2 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 3 identical empty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) 2 times less (24 ms vs. 54 ms) 11 times less (220 kB vs. 2 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 4 identical empty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (38 ms vs. 54 ms) 9 times less (285 kB vs. 3 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 5 identical empty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (38 ms vs. 55 ms) 9 times less (293 kB vs. 3 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 6 identical empty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (39 ms vs. 55 ms) 9 times less (301 kB vs. 3 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 7 identical empty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (38 ms vs. 55 ms) 10 times less (308 kB vs. 3 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 8 identical empty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (38 ms vs. 55 ms) 10 times less (316 kB vs. 3 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 16 identical empty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (39 ms vs. 57 ms) 12 times less (377 kB vs. 5 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 32 identical empty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (40 ms vs. 60 ms) 15 times less (501 kB vs. 8 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 128 identical empty singleton Tuples better (optimized out vs. 207 kB allocs) 16634 times less (30 ns vs. 499 μs) similar (47 ms vs. 59 ms) 5 times less (1 MB vs. 7 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 256 identical empty singleton Tuples better (optimized out vs. 806 kB allocs) 71708 times less (30 ns vs. 2 ms) similar (57 ms vs. 58 ms) 3 times less (2 MB vs. 8 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (30 ns vs. 30 ns) similar (26 ms vs. 51 ms) 8 times less (221 kB vs. 2 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 2 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (26 ms vs. 51 ms) 9 times less (224 kB vs. 2 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 3 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (26 ms vs. 50 ms) 10 times less (227 kB vs. 2 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 4 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (40 ms vs. 51 ms) 8 times less (289 kB vs. 2 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 5 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (40 ms vs. 51 ms) 8 times less (294 kB vs. 3 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 6 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (40 ms vs. 52 ms) 9 times less (300 kB vs. 3 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 7 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (40 ms vs. 52 ms) 9 times less (305 kB vs. 3 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 8 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (40 ms vs. 52 ms) 9 times less (310 kB vs. 3 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 16 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (41 ms vs. 53 ms) 12 times less (353 kB vs. 4 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 32 identical nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (42 ms vs. 57 ms) 17 times less (438 kB vs. 7 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 128 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (49 ms vs. 55 ms) 6 times less (945 kB vs. 6 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 256 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (59 ms vs. 55 ms) 3 times less (2 MB vs. 6 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 1 nonempty non-singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (23 ms vs. 35 ms) 12 times less (195 kB vs. 2 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 2 identical nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (23 ms vs. 37 ms) 13 times less (197 kB vs. 3 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 3 identical nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (23 ms vs. 37 ms) 13 times less (226 kB vs. 3 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 4 identical nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (38 ms vs. 37 ms) 11 times less (288 kB vs. 3 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 5 identical nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (38 ms vs. 38 ms) 12 times less (293 kB vs. 3 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 6 identical nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (38 ms vs. 38 ms) 12 times less (298 kB vs. 4 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 7 identical nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (38 ms vs. 39 ms) 13 times less (304 kB vs. 4 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 8 identical nonempty non-singleton Tuples similar (optimized out) similar (31 ns vs. 30 ns) similar (38 ms vs. 40 ms) 14 times less (309 kB vs. 4 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 16 identical nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (39 ms vs. 44 ms) 19 times less (352 kB vs. 7 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 32 identical nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (39 ms vs. 56 ms) 27 times less (436 kB vs. 12 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 128 identical nonempty non-singleton Tuples better (optimized out vs. 18 kB allocs) 309 times less (30 ns vs. 9 μs) similar (46 ms vs. 49 ms) 9 times less (943 kB vs. 9 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 256 identical nonempty non-singleton Tuples better (optimized out vs. 38 kB allocs) 466 times less (40 ns vs. 19 μs) similar (56 ms vs. 49 ms) 5 times less (2 MB vs. 9 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 1 empty singleton Tuple similar (optimized out) similar (30 ns vs. 30 ns) 2 times less (24 ms vs. 50 ms) 10 times less (180 kB vs. 2 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 2 empty & nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) 2 times less (26 ms vs. 60 ms) 9 times less (269 kB vs. 3 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 3 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) 2 times less (26 ms vs. 63 ms) 10 times less (272 kB vs. 3 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 4 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (41 ms vs. 70 ms) 9 times less (335 kB vs. 3 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 5 empty & nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (41 ms vs. 70 ms) 9 times less (340 kB vs. 3 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 6 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (42 ms vs. 70 ms) 9 times less (346 kB vs. 3 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 7 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (40 ms vs. 76 ms) 10 times less (351 kB vs. 4 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 8 empty & nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (41 ms vs. 76 ms) 10 times less (357 kB vs. 4 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 16 empty & nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) 2 times less (41 ms vs. 92 ms) 13 times less (399 kB vs. 5 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 32 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) 2 times less (42 ms vs. 109 ms) 17 times less (484 kB vs. 8 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 128 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) 2 times less (49 ms vs. 107 ms) 7 times less (991 kB vs. 7 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 256 empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 30 ns) similar (57 ms vs. 108 ms) 4 times less (2 MB vs. 7 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (40 ns vs. 40 ns) similar (26 ms vs. 50 ms) 8 times less (221 kB vs. 2 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 2 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) 2 times less (26 ms vs. 59 ms) 10 times less (224 kB vs. 2 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 3 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) 2 times less (26 ms vs. 59 ms) 11 times less (227 kB vs. 3 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 4 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (41 ms vs. 67 ms) 9 times less (289 kB vs. 3 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 5 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (41 ms vs. 67 ms) 10 times less (295 kB vs. 3 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 6 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (41 ms vs. 67 ms) 10 times less (300 kB vs. 3 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 7 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (40 ms vs. 73 ms) 11 times less (306 kB vs. 3 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 8 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (40 ms vs. 73 ms) 11 times less (311 kB vs. 3 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 16 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) 2 times less (41 ms vs. 89 ms) 14 times less (354 kB vs. 5 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 32 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) 2 times less (42 ms vs. 99 ms) 18 times less (439 kB vs. 8 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 128 nonempty singleton Tuples similar (optimized out) similar (30 ns vs. 30 ns) similar (49 ms vs. 98 ms) 7 times less (946 kB vs. 7 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 256 nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (56 ms vs. 97 ms) 4 times less (2 MB vs. 7 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 1 nonempty non-singleton Tuple similar (optimized out) similar (30 ns vs. 40 ns) similar (23 ms vs. 36 ms) 12 times less (195 kB vs. 2 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 2 nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (23 ms vs. 37 ms) 13 times less (223 kB vs. 3 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 3 nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (23 ms vs. 38 ms) 14 times less (226 kB vs. 3 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 4 nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (37 ms vs. 38 ms) 12 times less (288 kB vs. 4 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 5 nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (38 ms vs. 39 ms) 13 times less (293 kB vs. 4 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 6 nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (38 ms vs. 40 ms) 14 times less (299 kB vs. 4 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 7 nonempty non-singleton Tuples similar (optimized out) similar (30 ns vs. 40 ns) similar (38 ms vs. 40 ms) 14 times less (305 kB vs. 4 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 8 nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (38 ms vs. 41 ms) 15 times less (310 kB vs. 5 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 16 nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (38 ms vs. 48 ms) 21 times less (352 kB vs. 7 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 32 nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (39 ms vs. 62 ms) 29 times less (437 kB vs. 13 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 128 nonempty non-singleton Tuples better (optimized out vs. 558 kB allocs) 1498 times less (40 ns vs. 60 μs) similar (46 ms vs. 51 ms) 10 times less (944 kB vs. 10 MB)
UnrolledUtilities.unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) rec_unrolled_ifelse(!isempty, identity, Returns(nothing), itr, StaticOneTo(length(itr))) Tuple 256 nonempty non-singleton Tuples better (optimized out vs. 2 MB allocs) 5889 times less (30 ns vs. 177 μs) similar (56 ms vs. 52 ms) 7 times less (2 MB vs. 12 MB)