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 (50 ns vs. 50 ns) similar (26 ms vs. 27 ms) Inf times more (51 kB vs. 0 B)
unrolled_push(itr, itr[1]) (itr..., itr[1]) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (50 ns vs. 50 ns) similar (26 ms vs. 27 ms) 548 times more (51 kB vs. 96 B)
unrolled_push(itr, itr[1]) (itr..., itr[1]) Tuple 1 nonempty non-singleton Tuple similar (10 LLVM lines) similar (60 ns vs. 60 ns) similar (30 ms vs. 27 ms) 1404 times more (132 kB vs. 96 B)
unrolled_push(itr, itr[1]) (itr..., itr[1]) Tuple 2 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (26 ms vs. 26 ms) 254 times more (52 kB vs. 208 B)
unrolled_push(itr, itr[1]) (itr..., itr[1]) Tuple 4 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (26 ms vs. 27 ms) 236 times more (52 kB vs. 224 B)
unrolled_push(itr, itr[1]) (itr..., itr[1]) Tuple 8 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (27 ms vs. 27 ms) 208 times more (52 kB vs. 256 B)
unrolled_push(itr, itr[1]) (itr..., itr[1]) Tuple 32 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (27 ms vs. 27 ms) 124 times more (55 kB vs. 448 B)
unrolled_push(itr, itr[1]) (itr..., itr[1]) Tuple 128 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (26 ms vs. 26 ms) 53 times more (65 kB vs. 1 kB)
unrolled_push(itr, itr[1]) (itr..., itr[1]) Tuple 2 identical nonempty non-singleton Tuples similar (11 LLVM lines) similar (60 ns vs. 60 ns) similar (31 ms vs. 27 ms) 619 times more (136 kB vs. 224 B)
unrolled_push(itr, itr[1]) (itr..., itr[1]) Tuple 4 identical nonempty non-singleton Tuples similar (11 LLVM lines) similar (50 ns vs. 50 ns) similar (31 ms vs. 27 ms) 498 times more (140 kB vs. 288 B)
unrolled_push(itr, itr[1]) (itr..., itr[1]) Tuple 8 identical nonempty non-singleton Tuples similar (15 LLVM lines) similar (60 ns vs. 60 ns) similar (31 ms vs. 27 ms) 375 times more (153 kB vs. 416 B)
unrolled_push(itr, itr[1]) (itr..., itr[1]) Tuple 32 identical nonempty non-singleton Tuples similar (39 LLVM lines) similar (60 ns vs. 60 ns) similar (34 ms vs. 27 ms) 186 times more (215 kB vs. 1 kB)
unrolled_push(itr, itr[1]) (itr..., itr[1]) Tuple 128 identical nonempty non-singleton Tuples similar (44 LLVM lines) similar (5 μs vs. 5 μs) similar (32 ms vs. 27 ms) 34 times more (144 kB vs. 4 kB)
unrolled_push(itr, itr[1]) (itr..., itr[1]) Tuple 2 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (27 ms vs. 27 ms) 470 times more (52 kB vs. 112 B)
unrolled_push(itr, itr[1]) (itr..., itr[1]) Tuple 4 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (26 ms vs. 27 ms) 412 times more (52 kB vs. 128 B)
unrolled_push(itr, itr[1]) (itr..., itr[1]) Tuple 8 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (26 ms vs. 27 ms) 333 times more (52 kB vs. 160 B)
unrolled_push(itr, itr[1]) (itr..., itr[1]) Tuple 32 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (26 ms vs. 27 ms) 158 times more (55 kB vs. 352 B)
unrolled_push(itr, itr[1]) (itr..., itr[1]) Tuple 128 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (27 ms vs. 27 ms) 57 times more (65 kB vs. 1 kB)
unrolled_push(itr, itr[1]) (itr..., itr[1]) Tuple 2 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (26 ms vs. 27 ms) 254 times more (52 kB vs. 208 B)
unrolled_push(itr, itr[1]) (itr..., itr[1]) Tuple 4 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (27 ms vs. 27 ms) 236 times more (52 kB vs. 224 B)
unrolled_push(itr, itr[1]) (itr..., itr[1]) Tuple 8 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (27 ms vs. 27 ms) 208 times more (52 kB vs. 256 B)
unrolled_push(itr, itr[1]) (itr..., itr[1]) Tuple 32 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (26 ms vs. 27 ms) 124 times more (55 kB vs. 448 B)
unrolled_push(itr, itr[1]) (itr..., itr[1]) Tuple 128 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (26 ms vs. 28 ms) 53 times more (65 kB vs. 1 kB)
unrolled_push(itr, itr[1]) (itr..., itr[1]) Tuple 2 distinct nonempty non-singleton Tuples similar (13 LLVM lines) similar (60 ns vs. 50 ns) similar (30 ms vs. 27 ms) 542 times more (136 kB vs. 256 B)
unrolled_push(itr, itr[1]) (itr..., itr[1]) Tuple 4 distinct nonempty non-singleton Tuples similar (19 LLVM lines) similar (60 ns vs. 60 ns) similar (31 ms vs. 27 ms) 359 times more (140 kB vs. 400 B)
unrolled_push(itr, itr[1]) (itr..., itr[1]) Tuple 8 distinct nonempty non-singleton Tuples similar (32 LLVM lines) similar (70 ns vs. 70 ns) similar (32 ms vs. 27 ms) 200 times more (153 kB vs. 784 B)
unrolled_push(itr, itr[1]) (itr..., itr[1]) Tuple 32 distinct nonempty non-singleton Tuples similar (107 LLVM lines) similar (90 ns vs. 90 ns) similar (38 ms vs. 27 ms) 80 times more (217 kB vs. 3 kB)
unrolled_push(itr, itr[1]) (itr..., itr[1]) Tuple 128 distinct nonempty non-singleton Tuples similar (44 LLVM lines) similar (6 μs vs. 6 μs) similar (32 ms vs. 27 ms) 14 times more (157 kB vs. 11 kB)
unrolled_append(itr, Iterators.reverse(itr)) (itr..., Iterators.reverse(itr)...) Tuple 1 empty singleton Tuple similar (optimized out) similar (50 ns vs. 50 ns) similar (55 ms vs. 35 ms) 29 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 (50 ns vs. 50 ns) similar (55 ms vs. 34 ms) 23 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 (50 ns vs. 50 ns) similar (47 ms vs. 38 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 (50 ns vs. 40 ns) similar (66 ms vs. 35 ms) 23 times more (3 MB vs. 139 kB)
unrolled_append(itr, Iterators.reverse(itr)) (itr..., Iterators.reverse(itr)...) Tuple 4 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (66 ms vs. 35 ms) 23 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 (50 ns vs. 50 ns) similar (67 ms vs. 35 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 (50 ns vs. 40 ns) similar (68 ms vs. 35 ms) 24 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) 190 times less (50 ns vs. 10 μs) 2 times more (70 ms vs. 35 ms) 25 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 (50 ns vs. 60 ns) similar (59 ms vs. 39 ms) 17 times more (4 MB vs. 210 kB)
unrolled_append(itr, Iterators.reverse(itr)) (itr..., Iterators.reverse(itr)...) Tuple 4 identical nonempty non-singleton Tuples similar (22 LLVM lines) similar (60 ns vs. 60 ns) similar (59 ms vs. 39 ms) 16 times more (4 MB vs. 235 kB)
unrolled_append(itr, Iterators.reverse(itr)) (itr..., Iterators.reverse(itr)...) Tuple 8 identical nonempty non-singleton Tuples similar (37 LLVM lines) similar (60 ns vs. 60 ns) similar (60 ms vs. 39 ms) 17 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 (181 LLVM lines) similar (80 ns vs. 80 ns) similar (70 ms vs. 40 ms) 25 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 (641 LLVM lines vs. 17 kB allocs) 64 times less (220 ns vs. 14 μs) 4 times more (183 ms vs. 40 ms) 53 times more (13 MB vs. 253 kB)
unrolled_append(itr, Iterators.reverse(itr)) (itr..., Iterators.reverse(itr)...) Tuple 2 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (67 ms vs. 35 ms) 23 times more (3 MB vs. 139 kB)
unrolled_append(itr, Iterators.reverse(itr)) (itr..., Iterators.reverse(itr)...) Tuple 4 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (66 ms vs. 34 ms) 23 times more (3 MB vs. 141 kB)
unrolled_append(itr, Iterators.reverse(itr)) (itr..., Iterators.reverse(itr)...) Tuple 8 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (67 ms vs. 35 ms) 16 times more (3 MB vs. 205 kB)
unrolled_append(itr, Iterators.reverse(itr)) (itr..., Iterators.reverse(itr)...) Tuple 32 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (68 ms vs. 35 ms) 24 times more (3 MB vs. 142 kB)
unrolled_append(itr, Iterators.reverse(itr)) (itr..., Iterators.reverse(itr)...) Tuple 128 distinct empty & nonempty singleton Tuples better (optimized out vs. 7 kB allocs) 338 times less (50 ns vs. 17 μs) 2 times more (70 ms vs. 35 ms) 25 times more (4 MB vs. 150 kB)
unrolled_append(itr, Iterators.reverse(itr)) (itr..., Iterators.reverse(itr)...) Tuple 2 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (68 ms vs. 35 ms) 23 times more (3 MB vs. 139 kB)
unrolled_append(itr, Iterators.reverse(itr)) (itr..., Iterators.reverse(itr)...) Tuple 4 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (67 ms vs. 35 ms) 23 times more (3 MB vs. 140 kB)
unrolled_append(itr, Iterators.reverse(itr)) (itr..., Iterators.reverse(itr)...) Tuple 8 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (66 ms vs. 34 ms) 23 times more (3 MB vs. 141 kB)
unrolled_append(itr, Iterators.reverse(itr)) (itr..., Iterators.reverse(itr)...) Tuple 32 distinct nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) similar (67 ms vs. 34 ms) 24 times more (3 MB vs. 142 kB)
unrolled_append(itr, Iterators.reverse(itr)) (itr..., Iterators.reverse(itr)...) Tuple 128 distinct nonempty singleton Tuples better (optimized out vs. 7 kB allocs) 340 times less (50 ns vs. 17 μs) 2 times more (71 ms vs. 35 ms) 25 times more (4 MB vs. 150 kB)
unrolled_append(itr, Iterators.reverse(itr)) (itr..., Iterators.reverse(itr)...) Tuple 2 distinct nonempty non-singleton Tuples similar (15 LLVM lines) similar (60 ns vs. 60 ns) similar (59 ms vs. 39 ms) 15 times more (4 MB vs. 236 kB)
unrolled_append(itr, Iterators.reverse(itr)) (itr..., Iterators.reverse(itr)...) Tuple 4 distinct nonempty non-singleton Tuples similar (25 LLVM lines) similar (60 ns vs. 60 ns) similar (60 ms vs. 39 ms) 16 times more (4 MB vs. 237 kB)
unrolled_append(itr, Iterators.reverse(itr)) (itr..., Iterators.reverse(itr)...) Tuple 8 distinct nonempty non-singleton Tuples similar (46 LLVM lines) similar (70 ns vs. 70 ns) similar (63 ms vs. 40 ms) 17 times more (4 MB vs. 240 kB)
unrolled_append(itr, Iterators.reverse(itr)) (itr..., Iterators.reverse(itr)...) Tuple 32 distinct nonempty non-singleton Tuples similar (169 LLVM lines) similar (110 ns vs. 110 ns) 2 times more (85 ms vs. 39 ms) 21 times more (6 MB vs. 277 kB)
unrolled_append(itr, Iterators.reverse(itr)) (itr..., Iterators.reverse(itr)...) Tuple 128 distinct nonempty non-singleton Tuples better (1110 LLVM lines vs. 560 kB allocs) 106 times less (651 ns vs. 69 μs) 12 times more (489 ms vs. 39 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 (40 ns vs. 50 ns) similar (56 ms vs. 35 ms) 29 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 (50 ns vs. 50 ns) similar (56 ms vs. 35 ms) 23 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 (60 ns vs. 50 ns) similar (47 ms vs. 39 ms) 17 times more (4 MB vs. 210 kB)
unrolled_prepend(itr, Iterators.reverse(itr)) (Iterators.reverse(itr)..., itr...) Tuple 2 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (68 ms vs. 35 ms) 23 times more (3 MB vs. 139 kB)
unrolled_prepend(itr, Iterators.reverse(itr)) (Iterators.reverse(itr)..., itr...) Tuple 4 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (66 ms vs. 35 ms) 23 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 (50 ns vs. 50 ns) similar (66 ms vs. 35 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 (50 ns vs. 50 ns) similar (67 ms vs. 35 ms) 24 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) 191 times less (50 ns vs. 10 μs) similar (71 ms vs. 36 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 (60 ns vs. 60 ns) similar (59 ms vs. 39 ms) 17 times more (4 MB vs. 210 kB)
unrolled_prepend(itr, Iterators.reverse(itr)) (Iterators.reverse(itr)..., itr...) Tuple 4 identical nonempty non-singleton Tuples similar (21 LLVM lines) similar (60 ns vs. 60 ns) similar (60 ms vs. 40 ms) 16 times more (4 MB vs. 235 kB)
unrolled_prepend(itr, Iterators.reverse(itr)) (Iterators.reverse(itr)..., itr...) Tuple 8 identical nonempty non-singleton Tuples similar (36 LLVM lines) similar (60 ns vs. 60 ns) similar (61 ms vs. 39 ms) 18 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 (180 LLVM lines) similar (90 ns vs. 80 ns) similar (72 ms vs. 40 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 (642 LLVM lines vs. 17 kB allocs) 66 times less (210 ns vs. 14 μs) 4 times more (185 ms vs. 40 ms) 59 times more (15 MB vs. 253 kB)
unrolled_prepend(itr, Iterators.reverse(itr)) (Iterators.reverse(itr)..., itr...) Tuple 2 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (67 ms vs. 35 ms) 23 times more (3 MB vs. 139 kB)
unrolled_prepend(itr, Iterators.reverse(itr)) (Iterators.reverse(itr)..., itr...) Tuple 4 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (66 ms vs. 35 ms) 23 times more (3 MB vs. 141 kB)
unrolled_prepend(itr, Iterators.reverse(itr)) (Iterators.reverse(itr)..., itr...) Tuple 8 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (67 ms vs. 35 ms) 16 times more (3 MB vs. 205 kB)
unrolled_prepend(itr, Iterators.reverse(itr)) (Iterators.reverse(itr)..., itr...) Tuple 32 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (67 ms vs. 35 ms) 24 times more (3 MB vs. 142 kB)
unrolled_prepend(itr, Iterators.reverse(itr)) (Iterators.reverse(itr)..., itr...) Tuple 128 distinct empty & nonempty singleton Tuples better (optimized out vs. 7 kB allocs) 341 times less (50 ns vs. 17 μs) 2 times more (70 ms vs. 35 ms) 25 times more (4 MB vs. 150 kB)
unrolled_prepend(itr, Iterators.reverse(itr)) (Iterators.reverse(itr)..., itr...) Tuple 2 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (68 ms vs. 35 ms) 23 times more (3 MB vs. 139 kB)
unrolled_prepend(itr, Iterators.reverse(itr)) (Iterators.reverse(itr)..., itr...) Tuple 4 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (67 ms vs. 35 ms) 23 times more (3 MB vs. 140 kB)
unrolled_prepend(itr, Iterators.reverse(itr)) (Iterators.reverse(itr)..., itr...) Tuple 8 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (66 ms vs. 34 ms) 23 times more (3 MB vs. 141 kB)
unrolled_prepend(itr, Iterators.reverse(itr)) (Iterators.reverse(itr)..., itr...) Tuple 32 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (67 ms vs. 35 ms) 24 times more (3 MB vs. 142 kB)
unrolled_prepend(itr, Iterators.reverse(itr)) (Iterators.reverse(itr)..., itr...) Tuple 128 distinct nonempty singleton Tuples better (optimized out vs. 7 kB allocs) 342 times less (50 ns vs. 17 μs) 2 times more (70 ms vs. 35 ms) 25 times more (4 MB vs. 150 kB)
unrolled_prepend(itr, Iterators.reverse(itr)) (Iterators.reverse(itr)..., itr...) Tuple 2 distinct nonempty non-singleton Tuples similar (15 LLVM lines) similar (60 ns vs. 60 ns) similar (59 ms vs. 39 ms) 16 times more (4 MB vs. 236 kB)
unrolled_prepend(itr, Iterators.reverse(itr)) (Iterators.reverse(itr)..., itr...) Tuple 4 distinct nonempty non-singleton Tuples similar (27 LLVM lines) similar (60 ns vs. 60 ns) similar (61 ms vs. 40 ms) 16 times more (4 MB vs. 237 kB)
unrolled_prepend(itr, Iterators.reverse(itr)) (Iterators.reverse(itr)..., itr...) Tuple 8 distinct nonempty non-singleton Tuples similar (46 LLVM lines) similar (80 ns vs. 70 ns) similar (64 ms vs. 40 ms) 17 times more (4 MB vs. 240 kB)
unrolled_prepend(itr, Iterators.reverse(itr)) (Iterators.reverse(itr)..., itr...) Tuple 32 distinct nonempty non-singleton Tuples similar (171 LLVM lines) similar (130 ns vs. 110 ns) 2 times more (90 ms vs. 40 ms) 24 times more (7 MB vs. 277 kB)
unrolled_prepend(itr, Iterators.reverse(itr)) (Iterators.reverse(itr)..., itr...) Tuple 128 distinct nonempty non-singleton Tuples better (1110 LLVM lines vs. 560 kB allocs) 95 times less (711 ns vs. 68 μs) 10 times more (433 ms vs. 40 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 (40 ns vs. 50 ns) similar (28 ms vs. 29 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. 50 ns) similar (27 ms vs. 29 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 (50 ns vs. 50 ns) similar (28 ms vs. 29 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. 50 ns) similar (31 ms vs. 29 ms) 651 times more (204 kB vs. 320 B)
unrolled_take(itr, Val(length(itr) ÷ 2)) itr[1:length(itr) ÷ 2] Tuple 4 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (31 ms vs. 29 ms) 655 times more (205 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 (50 ns vs. 40 ns) similar (43 ms vs. 29 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 (50 ns vs. 370 ns) similar (43 ms vs. 43 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) 22 times less (50 ns vs. 1 μs) similar (44 ms vs. 43 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 (60 ns vs. 50 ns) similar (31 ms vs. 29 ms) 1297 times more (345 kB vs. 272 B)
unrolled_take(itr, Val(length(itr) ÷ 2)) itr[1:length(itr) ÷ 2] Tuple 4 identical nonempty non-singleton Tuples similar (8 LLVM lines) similar (60 ns vs. 60 ns) similar (32 ms vs. 29 ms) 1240 times more (388 kB vs. 320 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 (50 ns vs. 60 ns) similar (43 ms vs. 29 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 (20 LLVM lines vs. 592 B allocs) 12 times less (60 ns vs. 731 ns) similar (45 ms vs. 44 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 (68 LLVM lines vs. 2 kB allocs) 35 times less (70 ns vs. 3 μs) similar (52 ms vs. 43 ms) 2 times more (1 MB vs. 726 kB)
unrolled_take(itr, Val(length(itr) ÷ 2)) itr[1:length(itr) ÷ 2] Tuple 2 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (32 ms vs. 29 ms) 929 times more (203 kB vs. 224 B)
unrolled_take(itr, Val(length(itr) ÷ 2)) itr[1:length(itr) ÷ 2] Tuple 4 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (31 ms vs. 29 ms) 658 times more (206 kB vs. 320 B)
unrolled_take(itr, Val(length(itr) ÷ 2)) itr[1:length(itr) ÷ 2] Tuple 8 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (42 ms vs. 29 ms) 697 times more (229 kB vs. 336 B)
unrolled_take(itr, Val(length(itr) ÷ 2)) itr[1:length(itr) ÷ 2] Tuple 32 distinct empty & nonempty singleton Tuples better (optimized out vs. 192 B allocs) 10 times less (50 ns vs. 500 ns) similar (42 ms vs. 70 ms) 9 times less (253 kB vs. 2 MB)
unrolled_take(itr, Val(length(itr) ÷ 2)) itr[1:length(itr) ÷ 2] Tuple 128 distinct empty & nonempty singleton Tuples better (optimized out vs. 576 B allocs) 32 times less (50 ns vs. 2 μs) similar (43 ms vs. 69 ms) 6 times less (351 kB vs. 2 MB)
unrolled_take(itr, Val(length(itr) ÷ 2)) itr[1:length(itr) ÷ 2] Tuple 2 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (32 ms vs. 29 ms) 651 times more (203 kB vs. 320 B)
unrolled_take(itr, Val(length(itr) ÷ 2)) itr[1:length(itr) ÷ 2] Tuple 4 distinct nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) similar (32 ms vs. 29 ms) 658 times more (206 kB vs. 320 B)
unrolled_take(itr, Val(length(itr) ÷ 2)) itr[1:length(itr) ÷ 2] Tuple 8 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (42 ms vs. 29 ms) 696 times more (229 kB vs. 336 B)
unrolled_take(itr, Val(length(itr) ÷ 2)) itr[1:length(itr) ÷ 2] Tuple 32 distinct nonempty singleton Tuples better (optimized out vs. 192 B allocs) 36 times less (50 ns vs. 2 μs) similar (42 ms vs. 69 ms) 9 times less (253 kB vs. 2 MB)
unrolled_take(itr, Val(length(itr) ÷ 2)) itr[1:length(itr) ÷ 2] Tuple 128 distinct nonempty singleton Tuples better (optimized out vs. 576 B allocs) 144 times less (50 ns vs. 7 μs) similar (43 ms vs. 72 ms) 7 times less (351 kB vs. 2 MB)
unrolled_take(itr, Val(length(itr) ÷ 2)) itr[1:length(itr) ÷ 2] Tuple 2 distinct nonempty non-singleton Tuples similar (8 LLVM lines) similar (60 ns vs. 60 ns) similar (32 ms vs. 30 ms) 1392 times more (370 kB vs. 272 B)
unrolled_take(itr, Val(length(itr) ÷ 2)) itr[1:length(itr) ÷ 2] Tuple 4 distinct nonempty non-singleton Tuples similar (11 LLVM lines) similar (60 ns vs. 60 ns) similar (32 ms vs. 29 ms) 829 times more (389 kB vs. 480 B)
unrolled_take(itr, Val(length(itr) ÷ 2)) itr[1:length(itr) ÷ 2] Tuple 8 distinct nonempty non-singleton Tuples similar (17 LLVM lines) similar (60 ns vs. 70 ns) similar (44 ms vs. 29 ms) 588 times more (450 kB vs. 784 B)
unrolled_take(itr, Val(length(itr) ÷ 2)) itr[1:length(itr) ÷ 2] Tuple 32 distinct nonempty non-singleton Tuples better (55 LLVM lines vs. 18 kB allocs) 46 times less (70 ns vs. 3 μs) similar (47 ms vs. 87 ms) 3 times less (662 kB vs. 2 MB)
unrolled_take(itr, Val(length(itr) ÷ 2)) itr[1:length(itr) ÷ 2] Tuple 128 distinct nonempty non-singleton Tuples better (206 LLVM lines vs. 268 kB allocs) 246 times less (120 ns vs. 30 μs) similar (67 ms vs. 89 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. 50 ns) similar (38 ms vs. 28 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 (50 ns vs. 40 ns) similar (38 ms vs. 28 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 (60 ns vs. 60 ns) similar (35 ms vs. 28 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. 50 ns) similar (39 ms vs. 28 ms) 1436 times more (449 kB vs. 320 B)
unrolled_drop(itr, Val(length(itr) ÷ 2)) itr[length(itr) ÷ 2 + 1:end] Tuple 4 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (40 ms vs. 28 ms) 1485 times more (464 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 (50 ns vs. 50 ns) similar (50 ms vs. 28 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 (50 ns vs. 370 ns) similar (54 ms vs. 42 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) 22 times less (50 ns vs. 1 μs) similar (66 ms vs. 42 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 (60 ns vs. 60 ns) similar (35 ms vs. 28 ms) 2198 times more (584 kB vs. 272 B)
unrolled_drop(itr, Val(length(itr) ÷ 2)) itr[length(itr) ÷ 2 + 1:end] Tuple 4 identical nonempty non-singleton Tuples similar (9 LLVM lines) similar (60 ns vs. 50 ns) similar (36 ms vs. 28 ms) 2038 times more (637 kB vs. 320 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 (60 ns vs. 60 ns) similar (47 ms vs. 28 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 (21 LLVM lines vs. 592 B allocs) 12 times less (60 ns vs. 731 ns) similar (49 ms vs. 42 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 (69 LLVM lines vs. 2 kB allocs) 35 times less (70 ns vs. 2 μs) similar (57 ms vs. 43 ms) 3 times more (2 MB vs. 726 kB)
unrolled_drop(itr, Val(length(itr) ÷ 2)) itr[length(itr) ÷ 2 + 1:end] Tuple 2 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (38 ms vs. 28 ms) 1438 times more (450 kB vs. 320 B)
unrolled_drop(itr, Val(length(itr) ÷ 2)) itr[length(itr) ÷ 2 + 1:end] Tuple 4 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (39 ms vs. 28 ms) 1492 times more (466 kB vs. 320 B)
unrolled_drop(itr, Val(length(itr) ÷ 2)) itr[length(itr) ÷ 2 + 1:end] Tuple 8 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (50 ms vs. 28 ms) 1595 times more (523 kB vs. 336 B)
unrolled_drop(itr, Val(length(itr) ÷ 2)) itr[length(itr) ÷ 2 + 1:end] Tuple 32 distinct empty & nonempty singleton Tuples better (optimized out vs. 192 B allocs) 10 times less (50 ns vs. 510 ns) similar (53 ms vs. 69 ms) 3 times less (712 kB vs. 2 MB)
unrolled_drop(itr, Val(length(itr) ÷ 2)) itr[length(itr) ÷ 2 + 1:end] Tuple 128 distinct empty & nonempty singleton Tuples better (optimized out vs. 576 B allocs) 41 times less (40 ns vs. 2 μs) similar (64 ms vs. 70 ms) similar (1 MB vs. 2 MB)
unrolled_drop(itr, Val(length(itr) ÷ 2)) itr[length(itr) ÷ 2 + 1:end] Tuple 2 distinct nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (39 ms vs. 29 ms) 1438 times more (450 kB vs. 320 B)
unrolled_drop(itr, Val(length(itr) ÷ 2)) itr[length(itr) ÷ 2 + 1:end] Tuple 4 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (39 ms vs. 28 ms) 1491 times more (466 kB vs. 320 B)
unrolled_drop(itr, Val(length(itr) ÷ 2)) itr[length(itr) ÷ 2 + 1:end] Tuple 8 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (52 ms vs. 28 ms) 1594 times more (523 kB vs. 336 B)
unrolled_drop(itr, Val(length(itr) ÷ 2)) itr[length(itr) ÷ 2 + 1:end] Tuple 32 distinct nonempty singleton Tuples better (optimized out vs. 192 B allocs) 38 times less (50 ns vs. 2 μs) similar (54 ms vs. 69 ms) 3 times less (711 kB vs. 2 MB)
unrolled_drop(itr, Val(length(itr) ÷ 2)) itr[length(itr) ÷ 2 + 1:end] Tuple 128 distinct nonempty singleton Tuples better (optimized out vs. 576 B allocs) 144 times less (50 ns vs. 7 μs) similar (66 ms vs. 73 ms) similar (1 MB vs. 2 MB)
unrolled_drop(itr, Val(length(itr) ÷ 2)) itr[length(itr) ÷ 2 + 1:end] Tuple 2 distinct nonempty non-singleton Tuples similar (8 LLVM lines) similar (60 ns vs. 60 ns) similar (36 ms vs. 28 ms) 2053 times more (610 kB vs. 304 B)
unrolled_drop(itr, Val(length(itr) ÷ 2)) itr[length(itr) ÷ 2 + 1:end] Tuple 4 distinct nonempty non-singleton Tuples similar (13 LLVM lines) similar (60 ns vs. 60 ns) similar (36 ms vs. 28 ms) 1202 times more (639 kB vs. 544 B)
unrolled_drop(itr, Val(length(itr) ÷ 2)) itr[length(itr) ÷ 2 + 1:end] Tuple 8 distinct nonempty non-singleton Tuples similar (20 LLVM lines) similar (70 ns vs. 70 ns) similar (49 ms vs. 28 ms) 810 times more (722 kB vs. 912 B)
unrolled_drop(itr, Val(length(itr) ÷ 2)) itr[length(itr) ÷ 2 + 1:end] Tuple 32 distinct nonempty non-singleton Tuples better (57 LLVM lines vs. 18 kB allocs) 39 times less (80 ns vs. 3 μs) similar (52 ms vs. 86 ms) 2 times less (1 MB vs. 2 MB)
unrolled_drop(itr, Val(length(itr) ÷ 2)) itr[length(itr) ÷ 2 + 1:end] Tuple 128 distinct nonempty non-singleton Tuples better (208 LLVM lines vs. 268 kB allocs) 177 times less (170 ns vs. 30 μs) similar (74 ms vs. 86 ms) similar (2 MB vs. 2 MB)
unrolled_map(length, itr) map(length, itr) Tuple 1 empty singleton Tuple similar (optimized out) similar (50 ns vs. 50 ns) similar (35 ms vs. 26 ms) 19 times more (174 kB vs. 9 kB)
unrolled_map(length, itr) map(length, itr) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (50 ns vs. 40 ns) similar (34 ms vs. 26 ms) 5 times more (207 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 (26 ms vs. 26 ms) 18 times more (239 kB vs. 13 kB)
unrolled_map(length, itr) map(length, itr) Tuple 2 identical nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (35 ms vs. 26 ms) 4 times more (210 kB vs. 43 kB)
unrolled_map(length, itr) map(length, itr) Tuple 4 identical nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) 2 times more (52 ms vs. 26 ms) 2 times more (267 kB vs. 97 kB)
unrolled_map(length, itr) map(length, itr) Tuple 8 identical nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (53 ms vs. 26 ms) similar (285 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) 15 times less (50 ns vs. 781 ns) similar (54 ms vs. 34 ms) similar (393 kB vs. 296 kB)
unrolled_map(length, itr) map(length, itr) Tuple 128 identical nonempty singleton Tuples better (69 LLVM lines w/ Const vs. 2 kB allocs) 34 times less (80 ns vs. 3 μs) 2 times more (74 ms vs. 34 ms) 3 times more (1 MB vs. 298 kB)
unrolled_map(length, itr) map(length, itr) Tuple 2 identical nonempty non-singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (27 ms vs. 26 ms) 12 times more (244 kB vs. 20 kB)
unrolled_map(length, itr) map(length, itr) Tuple 4 identical nonempty non-singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (44 ms vs. 26 ms) 2 times more (336 kB vs. 159 kB)
unrolled_map(length, itr) map(length, itr) Tuple 8 identical nonempty non-singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (45 ms vs. 27 ms) similar (372 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) 15 times less (50 ns vs. 781 ns) similar (46 ms vs. 34 ms) similar (587 kB vs. 295 kB)
unrolled_map(length, itr) map(length, itr) Tuple 128 identical nonempty non-singleton Tuples better (69 LLVM lines w/ Const vs. 2 kB allocs) 38 times less (70 ns vs. 3 μs) similar (67 ms vs. 34 ms) 5 times more (2 MB vs. 298 kB)
unrolled_map(length, itr) map(length, itr) Tuple 2 distinct empty & nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (35 ms vs. 26 ms) 4 times more (212 kB vs. 43 kB)
unrolled_map(length, itr) map(length, itr) Tuple 4 distinct empty & nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 50 ns) similar (52 ms vs. 26 ms) 2 times more (279 kB vs. 107 kB)
unrolled_map(length, itr) map(length, itr) Tuple 8 distinct empty & nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (52 ms vs. 27 ms) similar (309 kB vs. 347 kB)
unrolled_map(length, itr) map(length, itr) Tuple 32 distinct empty & nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 592 B allocs) 23 times less (50 ns vs. 1 μs) similar (53 ms vs. 35 ms) similar (416 kB vs. 320 kB)
unrolled_map(length, itr) map(length, itr) Tuple 128 distinct empty & nonempty singleton Tuples better (69 LLVM lines w/ Const vs. 2 kB allocs) 53 times less (80 ns vs. 4 μs) 2 times more (73 ms vs. 36 ms) 3 times more (1 MB vs. 322 kB)
unrolled_map(length, itr) map(length, itr) Tuple 2 distinct nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (35 ms vs. 26 ms) 4 times more (216 kB vs. 47 kB)
unrolled_map(length, itr) map(length, itr) Tuple 4 distinct nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 40 ns) 2 times more (52 ms vs. 26 ms) 2 times more (283 kB vs. 112 kB)
unrolled_map(length, itr) map(length, itr) Tuple 8 distinct nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (52 ms vs. 27 ms) similar (313 kB vs. 352 kB)
unrolled_map(length, itr) map(length, itr) Tuple 32 distinct nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 592 B allocs) 23 times less (50 ns vs. 1 μs) similar (54 ms vs. 35 ms) similar (421 kB vs. 324 kB)
unrolled_map(length, itr) map(length, itr) Tuple 128 distinct nonempty singleton Tuples better (69 LLVM lines w/ Const vs. 2 kB allocs) 53 times less (80 ns vs. 4 μs) 2 times more (76 ms vs. 36 ms) 3 times more (1 MB vs. 326 kB)
unrolled_map(length, itr) map(length, itr) Tuple 2 distinct nonempty non-singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (27 ms vs. 27 ms) 5 times more (270 kB vs. 47 kB)
unrolled_map(length, itr) map(length, itr) Tuple 4 distinct nonempty non-singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (45 ms vs. 26 ms) 2 times more (336 kB vs. 160 kB)
unrolled_map(length, itr) map(length, itr) Tuple 8 distinct nonempty non-singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (45 ms vs. 27 ms) similar (386 kB vs. 627 kB)
unrolled_map(length, itr) map(length, itr) Tuple 32 distinct nonempty non-singleton Tuples better (7 LLVM lines w/ Const vs. 33 kB allocs) 76 times less (40 ns vs. 3 μs) similar (46 ms vs. 36 ms) similar (602 kB vs. 334 kB)
unrolled_map(length, itr) map(length, itr) Tuple 128 distinct nonempty non-singleton Tuples better (69 LLVM lines w/ Const vs. 528 kB allocs) 330 times less (80 ns vs. 26 μs) similar (66 ms vs. 36 ms) 2 times more (2 MB vs. 829 kB)
unrolled_any(isempty, itr) any(isempty, itr) Tuple 1 empty singleton Tuple similar (optimized out) similar (50 ns vs. 50 ns) similar (30 ms vs. 31 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. 50 ns) similar (30 ms vs. 31 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 (50 ns vs. 50 ns) similar (26 ms vs. 33 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 (50 ns vs. 50 ns) similar (29 ms vs. 35 ms) 4 times less (93 kB vs. 450 kB)
unrolled_any(isempty, itr) any(isempty, itr) Tuple 4 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) similar (49 ms vs. 35 ms) 2 times less (155 kB vs. 450 kB)
unrolled_any(isempty, itr) any(isempty, itr) Tuple 8 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (49 ms vs. 34 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 (50 ns vs. 50 ns) similar (51 ms vs. 35 ms) similar (323 kB vs. 450 kB)
unrolled_any(isempty, itr) any(isempty, itr) Tuple 128 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (59 ms vs. 35 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 (50 ns vs. 50 ns) similar (26 ms vs. 36 ms) 7 times less (71 kB vs. 521 kB)
unrolled_any(isempty, itr) any(isempty, itr) Tuple 4 identical nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (46 ms vs. 36 ms) 3 times less (167 kB vs. 546 kB)
unrolled_any(isempty, itr) any(isempty, itr) Tuple 8 identical nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) similar (47 ms vs. 36 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 (50 ns vs. 50 ns) similar (48 ms vs. 36 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 (50 ns vs. 50 ns) similar (56 ms vs. 36 ms) 2 times more (1 MB vs. 547 kB)
unrolled_any(isempty, itr) any(isempty, itr) Tuple 2 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (30 ms vs. 31 ms) 4 times less (86 kB vs. 377 kB)
unrolled_any(isempty, itr) any(isempty, itr) Tuple 4 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (49 ms vs. 31 ms) 3 times less (145 kB vs. 500 kB)
unrolled_any(isempty, itr) any(isempty, itr) Tuple 8 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (49 ms vs. 32 ms) 5 times less (159 kB vs. 805 kB)
unrolled_any(isempty, itr) any(isempty, itr) Tuple 32 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (51 ms vs. 36 ms) 10 times less (247 kB vs. 3 MB)
unrolled_any(isempty, itr) any(isempty, itr) Tuple 128 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (58 ms vs. 31 ms) similar (596 kB vs. 340 kB)
unrolled_any(isempty, itr) any(isempty, itr) Tuple 2 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (30 ms vs. 35 ms) 5 times less (97 kB vs. 532 kB)
unrolled_any(isempty, itr) any(isempty, itr) Tuple 4 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (49 ms vs. 44 ms) 5 times less (168 kB vs. 940 kB)
unrolled_any(isempty, itr) any(isempty, itr) Tuple 8 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (50 ms vs. 61 ms) 8 times less (206 kB vs. 2 MB)
unrolled_any(isempty, itr) any(isempty, itr) Tuple 32 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (51 ms vs. 68 ms) 10 times less (350 kB vs. 4 MB)
unrolled_any(isempty, itr) any(isempty, itr) Tuple 128 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (60 ms vs. 38 ms) similar (924 kB vs. 504 kB)
unrolled_any(isempty, itr) any(isempty, itr) Tuple 2 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (26 ms vs. 37 ms) 5 times less (100 kB vs. 532 kB)
unrolled_any(isempty, itr) any(isempty, itr) Tuple 4 distinct nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) similar (46 ms vs. 46 ms) 5 times less (180 kB vs. 951 kB)
unrolled_any(isempty, itr) any(isempty, itr) Tuple 8 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (46 ms vs. 65 ms) 7 times less (235 kB vs. 2 MB)
unrolled_any(isempty, itr) any(isempty, itr) Tuple 32 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (48 ms vs. 83 ms) 8 times less (487 kB vs. 4 MB)
unrolled_any(isempty, itr) any(isempty, itr) Tuple 128 distinct nonempty non-singleton Tuples better (optimized out vs. 521 kB allocs) 473 times less (50 ns vs. 24 μs) similar (56 ms vs. 40 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 (50 ns vs. 50 ns) similar (73 ms vs. 74 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 (50 ns vs. 50 ns) similar (73 ms vs. 74 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 (50 ns vs. 60 ns) similar (70 ms vs. 76 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. 60 ns) similar (73 ms vs. 76 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 4 identical nonempty singleton Tuples similar (28 LLVM lines) similar (60 ns vs. 60 ns) similar (94 ms vs. 76 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 identical nonempty singleton Tuples similar (48 LLVM lines) similar (70 ns vs. 70 ns) similar (95 ms vs. 77 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 (140 ns vs. 140 ns) similar (101 ms vs. 76 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 (400 ns vs. 410 ns) similar (127 ms vs. 77 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 (60 ns vs. 60 ns) similar (70 ms vs. 77 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 4 identical nonempty non-singleton Tuples similar (28 LLVM lines) similar (60 ns vs. 60 ns) similar (91 ms vs. 79 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 identical nonempty non-singleton Tuples similar (48 LLVM lines) similar (70 ns vs. 80 ns) similar (93 ms vs. 78 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 (140 ns vs. 140 ns) similar (99 ms vs. 79 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 (400 ns vs. 410 ns) similar (128 ms vs. 79 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 distinct empty & nonempty singleton Tuples similar (18 LLVM lines) similar (50 ns vs. 60 ns) similar (75 ms vs. 77 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 4 distinct empty & nonempty singleton Tuples similar (28 LLVM lines) similar (60 ns vs. 60 ns) similar (94 ms vs. 89 ms) similar (3 MB vs. 4 MB)
unrolled_any((x->length(x) == rand(8:10)), itr) any((x->length(x) == rand(8:10)), itr) Tuple 8 distinct empty & nonempty singleton Tuples better (48 LLVM lines vs. 96 B allocs) 30 times less (70 ns vs. 2 μs) similar (95 ms vs. 112 ms) 2 times less (3 MB vs. 6 MB)
unrolled_any((x->length(x) == rand(8:10)), itr) any((x->length(x) == rand(8:10)), itr) Tuple 32 distinct empty & nonempty singleton Tuples better (168 LLVM lines vs. 480 B allocs) 156 times less (140 ns vs. 22 μs) similar (102 ms vs. 120 ms) 2 times less (4 MB vs. 8 MB)
unrolled_any((x->length(x) == rand(8:10)), itr) any((x->length(x) == rand(8:10)), itr) Tuple 128 distinct empty & nonempty singleton Tuples similar (648 LLVM lines) 4 times less (410 ns vs. 2 μs) similar (141 ms vs. 79 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 distinct nonempty singleton Tuples similar (18 LLVM lines) similar (50 ns vs. 50 ns) similar (75 ms vs. 78 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 4 distinct nonempty singleton Tuples similar (28 LLVM lines) similar (60 ns vs. 70 ns) similar (97 ms vs. 90 ms) similar (3 MB vs. 4 MB)
unrolled_any((x->length(x) == rand(8:10)), itr) any((x->length(x) == rand(8:10)), itr) Tuple 8 distinct nonempty singleton Tuples better (48 LLVM lines vs. 96 B allocs) 234 times less (70 ns vs. 16 μs) similar (96 ms vs. 112 ms) 2 times less (3 MB vs. 6 MB)
unrolled_any((x->length(x) == rand(8:10)), itr) any((x->length(x) == rand(8:10)), itr) Tuple 32 distinct nonempty singleton Tuples better (168 LLVM lines vs. 496 B allocs) 710 times less (140 ns vs. 99 μs) similar (102 ms vs. 121 ms) 2 times less (4 MB vs. 8 MB)
unrolled_any((x->length(x) == rand(8:10)), itr) any((x->length(x) == rand(8:10)), itr) Tuple 128 distinct nonempty singleton Tuples similar (648 LLVM lines) 4 times less (400 ns vs. 2 μs) similar (128 ms vs. 79 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 distinct nonempty non-singleton Tuples similar (18 LLVM lines) similar (50 ns vs. 60 ns) similar (71 ms vs. 79 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 4 distinct nonempty non-singleton Tuples similar (28 LLVM lines) similar (60 ns vs. 60 ns) similar (91 ms vs. 92 ms) similar (3 MB vs. 4 MB)
unrolled_any((x->length(x) == rand(8:10)), itr) any((x->length(x) == rand(8:10)), itr) Tuple 8 distinct nonempty non-singleton Tuples better (48 LLVM lines vs. 3 kB allocs) 248 times less (70 ns vs. 17 μs) similar (94 ms vs. 116 ms) 2 times less (3 MB vs. 6 MB)
unrolled_any((x->length(x) == rand(8:10)), itr) any((x->length(x) == rand(8:10)), itr) Tuple 32 distinct nonempty non-singleton Tuples better (168 LLVM lines vs. 38 kB allocs) 857 times less (140 ns vs. 120 μs) similar (100 ms vs. 134 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 distinct nonempty non-singleton Tuples better (648 LLVM lines vs. 521 kB allocs) 60 times less (400 ns vs. 24 μs) similar (126 ms vs. 82 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. 50 ns) similar (29 ms vs. 31 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 (50 ns vs. 50 ns) similar (29 ms vs. 31 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 (50 ns vs. 50 ns) similar (26 ms vs. 32 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 (50 ns vs. 40 ns) similar (30 ms vs. 31 ms) 3 times less (90 kB vs. 332 kB)
unrolled_all(isempty, itr) all(isempty, itr) Tuple 4 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) similar (49 ms vs. 31 ms) 2 times less (148 kB vs. 332 kB)
unrolled_all(isempty, itr) all(isempty, itr) Tuple 8 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (49 ms vs. 33 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 (50 ns vs. 50 ns) similar (51 ms vs. 31 ms) similar (250 kB vs. 332 kB)
unrolled_all(isempty, itr) all(isempty, itr) Tuple 128 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (56 ms vs. 32 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 (50 ns vs. 50 ns) similar (27 ms vs. 32 ms) 5 times less (64 kB vs. 376 kB)
unrolled_all(isempty, itr) all(isempty, itr) Tuple 4 identical nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) similar (46 ms vs. 33 ms) 2 times less (147 kB vs. 401 kB)
unrolled_all(isempty, itr) all(isempty, itr) Tuple 8 identical nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (47 ms vs. 33 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 (50 ns vs. 50 ns) similar (48 ms vs. 33 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 (50 ns vs. 40 ns) similar (52 ms vs. 32 ms) similar (600 kB vs. 402 kB)
unrolled_all(isempty, itr) all(isempty, itr) Tuple 2 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (30 ms vs. 31 ms) 4 times less (92 kB vs. 415 kB)
unrolled_all(isempty, itr) all(isempty, itr) Tuple 4 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (49 ms vs. 31 ms) 3 times less (151 kB vs. 543 kB)
unrolled_all(isempty, itr) all(isempty, itr) Tuple 8 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (50 ms vs. 32 ms) 5 times less (166 kB vs. 860 kB)
unrolled_all(isempty, itr) all(isempty, itr) Tuple 32 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (50 ms vs. 36 ms) 11 times less (253 kB vs. 3 MB)
unrolled_all(isempty, itr) all(isempty, itr) Tuple 128 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (56 ms vs. 37 ms) similar (604 kB vs. 508 kB)
unrolled_all(isempty, itr) all(isempty, itr) Tuple 2 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (30 ms vs. 31 ms) 4 times less (90 kB vs. 398 kB)
unrolled_all(isempty, itr) all(isempty, itr) Tuple 4 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (49 ms vs. 31 ms) 3 times less (149 kB vs. 525 kB)
unrolled_all(isempty, itr) all(isempty, itr) Tuple 8 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (49 ms vs. 32 ms) 5 times less (163 kB vs. 843 kB)
unrolled_all(isempty, itr) all(isempty, itr) Tuple 32 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (51 ms vs. 35 ms) 11 times less (251 kB vs. 3 MB)
unrolled_all(isempty, itr) all(isempty, itr) Tuple 128 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (56 ms vs. 31 ms) similar (602 kB vs. 347 kB)
unrolled_all(isempty, itr) all(isempty, itr) Tuple 2 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (26 ms vs. 33 ms) 4 times less (89 kB vs. 397 kB)
unrolled_all(isempty, itr) all(isempty, itr) Tuple 4 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (46 ms vs. 33 ms) 3 times less (148 kB vs. 537 kB)
unrolled_all(isempty, itr) all(isempty, itr) Tuple 8 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (46 ms vs. 36 ms) 5 times less (162 kB vs. 898 kB)
unrolled_all(isempty, itr) all(isempty, itr) Tuple 32 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (48 ms vs. 49 ms) 14 times less (250 kB vs. 3 MB)
unrolled_all(isempty, itr) all(isempty, itr) Tuple 128 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (53 ms vs. 32 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 (50 ns vs. 50 ns) similar (74 ms vs. 77 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 (50 ns vs. 50 ns) similar (73 ms vs. 74 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 (50 ns vs. 50 ns) similar (70 ms vs. 75 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 (50 ns vs. 50 ns) similar (73 ms vs. 76 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 4 identical nonempty singleton Tuples similar (28 LLVM lines) similar (60 ns vs. 50 ns) similar (94 ms vs. 76 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 identical nonempty singleton Tuples similar (48 LLVM lines) similar (60 ns vs. 50 ns) similar (96 ms vs. 77 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 (50 ns vs. 50 ns) similar (102 ms vs. 77 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 (50 ns vs. 50 ns) similar (128 ms vs. 77 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 (50 ns vs. 50 ns) similar (71 ms vs. 78 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 4 identical nonempty non-singleton Tuples similar (28 LLVM lines) similar (50 ns vs. 50 ns) similar (92 ms vs. 78 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 identical nonempty non-singleton Tuples similar (48 LLVM lines) similar (50 ns vs. 50 ns) similar (94 ms vs. 79 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 (50 ns vs. 50 ns) similar (100 ms vs. 79 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 (50 ns vs. 50 ns) similar (128 ms vs. 78 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 distinct empty & nonempty singleton Tuples similar (18 LLVM lines) similar (50 ns vs. 50 ns) similar (75 ms vs. 78 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 4 distinct empty & nonempty singleton Tuples similar (28 LLVM lines) similar (60 ns vs. 50 ns) similar (95 ms vs. 77 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 distinct empty & nonempty singleton Tuples similar (48 LLVM lines) 7 times less (50 ns vs. 360 ns) similar (95 ms vs. 77 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 distinct empty & nonempty singleton Tuples similar (168 LLVM lines) 18 times less (50 ns vs. 931 ns) similar (102 ms vs. 81 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 distinct empty & nonempty singleton Tuples similar (648 LLVM lines) similar (50 ns vs. 50 ns) similar (128 ms vs. 78 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 distinct nonempty singleton Tuples similar (18 LLVM lines) similar (50 ns vs. 50 ns) similar (75 ms vs. 77 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 4 distinct nonempty singleton Tuples similar (28 LLVM lines) similar (50 ns vs. 50 ns) similar (94 ms vs. 77 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 distinct nonempty singleton Tuples similar (48 LLVM lines) 50 times less (50 ns vs. 3 μs) similar (95 ms vs. 78 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 distinct nonempty singleton Tuples similar (168 LLVM lines) 63 times less (50 ns vs. 3 μs) similar (110 ms vs. 82 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 distinct nonempty singleton Tuples similar (648 LLVM lines) similar (50 ns vs. 50 ns) similar (130 ms vs. 79 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 distinct nonempty non-singleton Tuples similar (18 LLVM lines) similar (50 ns vs. 50 ns) similar (71 ms vs. 78 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 4 distinct nonempty non-singleton Tuples similar (28 LLVM lines) similar (50 ns vs. 50 ns) similar (91 ms vs. 80 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 distinct nonempty non-singleton Tuples better (48 LLVM lines vs. 560 B allocs) 59 times less (50 ns vs. 3 μs) similar (92 ms vs. 82 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 distinct nonempty non-singleton Tuples better (168 LLVM lines vs. 2 kB allocs) 73 times less (50 ns vs. 4 μs) similar (100 ms vs. 95 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 distinct nonempty non-singleton Tuples similar (648 LLVM lines) similar (50 ns vs. 60 ns) similar (127 ms vs. 82 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 (54 ms vs. 76 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 (50 ns vs. 50 ns) similar (52 ms vs. 74 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 (50 ns vs. 50 ns) similar (49 ms vs. 54 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 (50 ns vs. 50 ns) similar (53 ms vs. 74 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 4 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) similar (71 ms vs. 79 ms) 3 times less (159 kB vs. 593 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 (50 ns vs. 50 ns) similar (71 ms vs. 75 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 (50 ns vs. 50 ns) similar (73 ms vs. 74 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 (50 ns vs. 50 ns) similar (75 ms vs. 80 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 (50 ns vs. 50 ns) similar (50 ms vs. 55 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 4 identical nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (68 ms vs. 54 ms) 4 times less (171 kB vs. 775 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 (50 ns vs. 50 ns) similar (68 ms vs. 55 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 (50 ns vs. 50 ns) similar (70 ms vs. 55 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 (50 ns vs. 50 ns) similar (73 ms vs. 61 ms) similar (1 MB vs. 2 MB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) foreach((x->@assert(length(x) <= 7)), itr) Tuple 2 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (53 ms vs. 75 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 4 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (71 ms vs. 81 ms) 3 times less (197 kB vs. 669 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) foreach((x->@assert(length(x) <= 7)), itr) Tuple 8 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (71 ms vs. 75 ms) 3 times less (254 kB vs. 766 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) foreach((x->@assert(length(x) <= 7)), itr) Tuple 32 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (72 ms vs. 76 ms) 2 times less (341 kB vs. 864 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) foreach((x->@assert(length(x) <= 7)), itr) Tuple 128 distinct empty & nonempty singleton Tuples better (optimized out vs. 54 LLVM lines w/ Const) 35 times less (40 ns vs. 1 μs) similar (75 ms vs. 83 ms) 2 times less (690 kB vs. 2 MB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) foreach((x->@assert(length(x) <= 7)), itr) Tuple 2 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (53 ms vs. 74 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 4 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (71 ms vs. 74 ms) 3 times less (202 kB vs. 678 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) foreach((x->@assert(length(x) <= 7)), itr) Tuple 8 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (71 ms vs. 75 ms) 2 times less (259 kB vs. 773 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) foreach((x->@assert(length(x) <= 7)), itr) Tuple 32 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (72 ms vs. 75 ms) 2 times less (346 kB vs. 866 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) foreach((x->@assert(length(x) <= 7)), itr) Tuple 128 distinct nonempty singleton Tuples better (optimized out vs. 54 LLVM lines w/ Const) 34 times less (40 ns vs. 1 μs) similar (74 ms vs. 83 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 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (50 ms vs. 55 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 4 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (69 ms vs. 55 ms) 4 times less (200 kB vs. 843 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) foreach((x->@assert(length(x) <= 7)), itr) Tuple 8 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (68 ms vs. 55 ms) 3 times less (275 kB vs. 958 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) foreach((x->@assert(length(x) <= 7)), itr) Tuple 32 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (69 ms vs. 55 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 distinct nonempty non-singleton Tuples better (optimized out vs. 521 kB allocs) 469 times less (50 ns vs. 23 μs) similar (72 ms vs. 64 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 (50 ns vs. 50 ns) 2 times less (30 ms vs. 61 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 (50 ns vs. 50 ns) 2 times less (29 ms vs. 59 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 (60 ns vs. 60 ns) similar (29 ms vs. 45 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 (50 ns vs. 50 ns) 2 times less (29 ms vs. 60 ms) 22 times less (110 kB vs. 2 MB)
unrolled_reduce(tuple, itr) reduce(tuple, itr) Tuple 4 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (55 ms vs. 61 ms) similar (2 MB vs. 3 MB)
unrolled_reduce(tuple, itr) reduce(tuple, itr) Tuple 8 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (56 ms vs. 61 ms) similar (2 MB vs. 3 MB)
unrolled_reduce(tuple, itr) reduce(tuple, itr) Tuple 32 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (57 ms vs. 63 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) 88 times less (50 ns vs. 4 μs) similar (63 ms vs. 67 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 (60 ns vs. 60 ns) similar (30 ms vs. 47 ms) 13 times less (244 kB vs. 3 MB)
unrolled_reduce(tuple, itr) reduce(tuple, itr) Tuple 4 identical nonempty non-singleton Tuples similar (8 LLVM lines) similar (60 ns vs. 60 ns) similar (56 ms vs. 48 ms) similar (2 MB vs. 4 MB)
unrolled_reduce(tuple, itr) reduce(tuple, itr) Tuple 8 identical nonempty non-singleton Tuples similar (12 LLVM lines) similar (50 ns vs. 60 ns) similar (57 ms vs. 50 ms) similar (2 MB vs. 4 MB)
unrolled_reduce(tuple, itr) reduce(tuple, itr) Tuple 32 identical nonempty non-singleton Tuples similar (36 LLVM lines) similar (60 ns vs. 60 ns) similar (61 ms vs. 56 ms) 2 times less (3 MB vs. 7 MB)
unrolled_reduce(tuple, itr) reduce(tuple, itr) Tuple 128 identical nonempty non-singleton Tuples better (132 LLVM lines vs. 70 kB allocs) 152 times less (80 ns vs. 12 μs) similar (95 ms vs. 52 ms) similar (5 MB vs. 3 MB)
unrolled_reduce(tuple, itr) reduce(tuple, itr) Tuple 2 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) 2 times less (31 ms vs. 61 ms) 25 times less (110 kB vs. 3 MB)
unrolled_reduce(tuple, itr) reduce(tuple, itr) Tuple 4 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (56 ms vs. 63 ms) similar (2 MB vs. 3 MB)
unrolled_reduce(tuple, itr) reduce(tuple, itr) Tuple 8 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (55 ms vs. 63 ms) 2 times less (2 MB vs. 4 MB)
unrolled_reduce(tuple, itr) reduce(tuple, itr) Tuple 32 distinct empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) similar (57 ms vs. 65 ms) 2 times less (2 MB vs. 5 MB)
unrolled_reduce(tuple, itr) reduce(tuple, itr) Tuple 128 distinct empty & nonempty singleton Tuples better (optimized out vs. 40 LLVM lines) 110 times less (50 ns vs. 6 μs) similar (61 ms vs. 68 ms) similar (3 MB vs. 3 MB)
unrolled_reduce(tuple, itr) reduce(tuple, itr) Tuple 2 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) 2 times less (30 ms vs. 62 ms) 26 times less (110 kB vs. 3 MB)
unrolled_reduce(tuple, itr) reduce(tuple, itr) Tuple 4 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (55 ms vs. 63 ms) similar (2 MB vs. 4 MB)
unrolled_reduce(tuple, itr) reduce(tuple, itr) Tuple 8 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (55 ms vs. 64 ms) 2 times less (2 MB vs. 4 MB)
unrolled_reduce(tuple, itr) reduce(tuple, itr) Tuple 32 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (56 ms vs. 65 ms) 2 times less (2 MB vs. 5 MB)
unrolled_reduce(tuple, itr) reduce(tuple, itr) Tuple 128 distinct nonempty singleton Tuples better (optimized out vs. 39 LLVM lines) 137 times less (50 ns vs. 7 μs) similar (62 ms vs. 69 ms) similar (3 MB vs. 3 MB)
unrolled_reduce(tuple, itr) reduce(tuple, itr) Tuple 2 distinct nonempty non-singleton Tuples similar (11 LLVM lines) similar (60 ns vs. 60 ns) similar (30 ms vs. 49 ms) 13 times less (270 kB vs. 4 MB)
unrolled_reduce(tuple, itr) reduce(tuple, itr) Tuple 4 distinct nonempty non-singleton Tuples similar (17 LLVM lines) similar (60 ns vs. 60 ns) similar (57 ms vs. 51 ms) 2 times less (2 MB vs. 5 MB)
unrolled_reduce(tuple, itr) reduce(tuple, itr) Tuple 8 distinct nonempty non-singleton Tuples similar (30 LLVM lines) similar (70 ns vs. 60 ns) similar (58 ms vs. 54 ms) 2 times less (2 MB vs. 6 MB)
unrolled_reduce(tuple, itr) reduce(tuple, itr) Tuple 32 distinct nonempty non-singleton Tuples similar (105 LLVM lines) similar (90 ns vs. 90 ns) similar (66 ms vs. 66 ms) 3 times less (3 MB vs. 9 MB)
unrolled_reduce(tuple, itr) reduce(tuple, itr) Tuple 128 distinct nonempty non-singleton Tuples better (625 LLVM lines vs. 784 kB allocs) 460 times less (360 ns vs. 166 μs) 3 times more (187 ms vs. 53 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 (50 ns vs. 50 ns) 2 times less (30 ms vs. 66 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 (50 ns vs. 50 ns) 2 times less (29 ms vs. 64 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 (50 ns vs. 60 ns) similar (30 ms vs. 51 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 (50 ns vs. 40 ns) 2 times less (30 ms vs. 64 ms) 22 times less (124 kB vs. 3 MB)
unrolled_reduce(tuple, itr; init = ()) reduce(tuple, itr; init = ()) Tuple 4 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (56 ms vs. 64 ms) similar (2 MB vs. 3 MB)
unrolled_reduce(tuple, itr; init = ()) reduce(tuple, itr; init = ()) Tuple 8 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (56 ms vs. 65 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 (50 ns vs. 40 ns) similar (57 ms vs. 67 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) 90 times less (50 ns vs. 5 μs) similar (62 ms vs. 70 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 (60 ns vs. 60 ns) similar (30 ms vs. 52 ms) 12 times less (278 kB vs. 4 MB)
unrolled_reduce(tuple, itr; init = ()) reduce(tuple, itr; init = ()) Tuple 4 identical nonempty non-singleton Tuples similar (8 LLVM lines) similar (60 ns vs. 60 ns) similar (56 ms vs. 52 ms) similar (2 MB vs. 4 MB)
unrolled_reduce(tuple, itr; init = ()) reduce(tuple, itr; init = ()) Tuple 8 identical nonempty non-singleton Tuples similar (12 LLVM lines) similar (50 ns vs. 60 ns) similar (58 ms vs. 57 ms) similar (2 MB vs. 4 MB)
unrolled_reduce(tuple, itr; init = ()) reduce(tuple, itr; init = ()) Tuple 32 identical nonempty non-singleton Tuples similar (36 LLVM lines) similar (60 ns vs. 60 ns) similar (62 ms vs. 61 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 (132 LLVM lines vs. 70 kB allocs) 150 times less (80 ns vs. 12 μs) similar (95 ms vs. 55 ms) similar (5 MB vs. 3 MB)
unrolled_reduce(tuple, itr; init = ()) reduce(tuple, itr; init = ()) Tuple 2 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) 2 times less (30 ms vs. 65 ms) 25 times less (123 kB vs. 3 MB)
unrolled_reduce(tuple, itr; init = ()) reduce(tuple, itr; init = ()) Tuple 4 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (56 ms vs. 66 ms) similar (2 MB vs. 4 MB)
unrolled_reduce(tuple, itr; init = ()) reduce(tuple, itr; init = ()) Tuple 8 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (55 ms vs. 69 ms) 2 times less (2 MB vs. 4 MB)
unrolled_reduce(tuple, itr; init = ()) reduce(tuple, itr; init = ()) Tuple 32 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (58 ms vs. 69 ms) 2 times less (2 MB vs. 5 MB)
unrolled_reduce(tuple, itr; init = ()) reduce(tuple, itr; init = ()) Tuple 128 distinct empty & nonempty singleton Tuples better (optimized out vs. 39 LLVM lines) 110 times less (50 ns vs. 6 μs) similar (67 ms vs. 72 ms) similar (3 MB vs. 3 MB)
unrolled_reduce(tuple, itr; init = ()) reduce(tuple, itr; init = ()) Tuple 2 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) 2 times less (31 ms vs. 65 ms) 25 times less (124 kB vs. 3 MB)
unrolled_reduce(tuple, itr; init = ()) reduce(tuple, itr; init = ()) Tuple 4 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (56 ms vs. 67 ms) similar (2 MB vs. 4 MB)
unrolled_reduce(tuple, itr; init = ()) reduce(tuple, itr; init = ()) Tuple 8 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (56 ms vs. 67 ms) 2 times less (2 MB vs. 4 MB)
unrolled_reduce(tuple, itr; init = ()) reduce(tuple, itr; init = ()) Tuple 32 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (57 ms vs. 69 ms) 2 times less (2 MB vs. 5 MB)
unrolled_reduce(tuple, itr; init = ()) reduce(tuple, itr; init = ()) Tuple 128 distinct nonempty singleton Tuples better (optimized out vs. 39 LLVM lines) 133 times less (50 ns vs. 7 μs) similar (62 ms vs. 72 ms) similar (3 MB vs. 3 MB)
unrolled_reduce(tuple, itr; init = ()) reduce(tuple, itr; init = ()) Tuple 2 distinct nonempty non-singleton Tuples similar (11 LLVM lines) similar (60 ns vs. 60 ns) similar (30 ms vs. 53 ms) 13 times less (303 kB vs. 4 MB)
unrolled_reduce(tuple, itr; init = ()) reduce(tuple, itr; init = ()) Tuple 4 distinct nonempty non-singleton Tuples similar (17 LLVM lines) similar (60 ns vs. 60 ns) similar (57 ms vs. 55 ms) 2 times less (2 MB vs. 5 MB)
unrolled_reduce(tuple, itr; init = ()) reduce(tuple, itr; init = ()) Tuple 8 distinct nonempty non-singleton Tuples similar (30 LLVM lines) similar (60 ns vs. 60 ns) similar (58 ms vs. 58 ms) 2 times less (2 MB vs. 6 MB)
unrolled_reduce(tuple, itr; init = ()) reduce(tuple, itr; init = ()) Tuple 32 distinct nonempty non-singleton Tuples similar (105 LLVM lines) similar (90 ns vs. 90 ns) similar (68 ms vs. 69 ms) 3 times less (3 MB vs. 9 MB)
unrolled_reduce(tuple, itr; init = ()) reduce(tuple, itr; init = ()) Tuple 128 distinct nonempty non-singleton Tuples better (625 LLVM lines vs. 784 kB allocs) 458 times less (351 ns vs. 161 μs) 3 times more (189 ms vs. 57 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 (50 ns vs. 50 ns) similar (47 ms vs. 85 ms) 5 times less (382 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 (50 ns vs. 50 ns) similar (47 ms vs. 85 ms) 5 times less (417 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 (50 ns vs. 60 ns) similar (40 ms vs. 59 ms) 4 times less (685 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 (50 ns vs. 50 ns) similar (47 ms vs. 89 ms) 5 times less (435 kB vs. 2 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr) mapreduce((x->(x, length(x))), tuple, itr) Tuple 4 identical nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 50 ns) similar (92 ms vs. 96 ms) similar (2 MB 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 (50 ns vs. 50 ns) similar (92 ms vs. 111 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 (50 ns vs. 50 ns) 2 times less (96 ms vs. 206 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 (55 LLVM lines w/ Const vs. 68 kB allocs) 115 times less (80 ns vs. 9 μs) 2 times more (211 ms vs. 94 ms) 2 times more (7 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 (60 ns vs. 60 ns) similar (40 ms vs. 60 ms) 4 times less (740 kB vs. 3 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr) mapreduce((x->(x, length(x))), tuple, itr) Tuple 4 identical nonempty non-singleton Tuples similar (28 LLVM lines) similar (60 ns vs. 60 ns) similar (84 ms vs. 61 ms) similar (3 MB 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 (60 ns vs. 60 ns) similar (87 ms vs. 63 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 (90 ns vs. 90 ns) similar (98 ms vs. 76 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) 69 times less (240 ns vs. 17 μs) 2 times more (176 ms vs. 64 ms) 2 times more (9 MB vs. 3 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr) mapreduce((x->(x, length(x))), tuple, itr) Tuple 2 distinct empty & nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (48 ms vs. 90 ms) 6 times less (443 kB vs. 3 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr) mapreduce((x->(x, length(x))), tuple, itr) Tuple 4 distinct empty & nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (91 ms vs. 98 ms) similar (2 MB vs. 3 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr) mapreduce((x->(x, length(x))), tuple, itr) Tuple 8 distinct empty & nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (92 ms vs. 113 ms) similar (2 MB vs. 4 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr) mapreduce((x->(x, length(x))), tuple, itr) Tuple 32 distinct empty & nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) 2 times less (97 ms vs. 208 ms) similar (3 MB vs. 6 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr) mapreduce((x->(x, length(x))), tuple, itr) Tuple 128 distinct empty & nonempty singleton Tuples better (55 LLVM lines w/ Const vs. 70 kB allocs) 258 times less (80 ns vs. 21 μs) similar (193 ms vs. 99 ms) similar (7 MB vs. 4 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr) mapreduce((x->(x, length(x))), tuple, itr) Tuple 2 distinct nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (49 ms vs. 89 ms) 6 times less (446 kB vs. 3 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr) mapreduce((x->(x, length(x))), tuple, itr) Tuple 4 distinct nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (91 ms vs. 97 ms) similar (2 MB vs. 3 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr) mapreduce((x->(x, length(x))), tuple, itr) Tuple 8 distinct nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (92 ms vs. 113 ms) similar (2 MB vs. 4 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr) mapreduce((x->(x, length(x))), tuple, itr) Tuple 32 distinct nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) 2 times less (97 ms vs. 210 ms) similar (3 MB vs. 6 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr) mapreduce((x->(x, length(x))), tuple, itr) Tuple 128 distinct nonempty singleton Tuples better (55 LLVM lines w/ Const vs. 70 kB allocs) 268 times less (80 ns vs. 21 μs) similar (194 ms vs. 99 ms) similar (7 MB vs. 4 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr) mapreduce((x->(x, length(x))), tuple, itr) Tuple 2 distinct nonempty non-singleton Tuples similar (15 LLVM lines) similar (50 ns vs. 60 ns) similar (41 ms vs. 61 ms) 4 times less (788 kB vs. 3 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr) mapreduce((x->(x, length(x))), tuple, itr) Tuple 4 distinct nonempty non-singleton Tuples similar (25 LLVM lines) similar (60 ns vs. 60 ns) similar (86 ms vs. 63 ms) similar (3 MB vs. 4 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr) mapreduce((x->(x, length(x))), tuple, itr) Tuple 8 distinct nonempty non-singleton Tuples similar (46 LLVM lines) similar (70 ns vs. 70 ns) similar (91 ms vs. 65 ms) similar (3 MB vs. 5 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr) mapreduce((x->(x, length(x))), tuple, itr) Tuple 32 distinct nonempty non-singleton Tuples similar (169 LLVM lines) similar (100 ns vs. 100 ns) similar (110 ms vs. 82 ms) similar (4 MB vs. 8 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr) mapreduce((x->(x, length(x))), tuple, itr) Tuple 128 distinct nonempty non-singleton Tuples better (881 LLVM lines vs. 855 kB allocs) 556 times less (410 ns vs. 228 μs) 4 times more (284 ms vs. 67 ms) similar (10 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 (50 ns vs. 50 ns) similar (48 ms vs. 92 ms) 5 times less (410 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 (50 ns vs. 50 ns) similar (48 ms vs. 90 ms) 5 times less (444 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 (60 ns vs. 60 ns) similar (41 ms vs. 65 ms) 4 times less (730 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 (50 ns vs. 50 ns) similar (49 ms vs. 94 ms) 5 times less (462 kB vs. 2 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr; init = ()) mapreduce((x->(x, length(x))), tuple, itr; init = ()) Tuple 4 identical nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (92 ms vs. 101 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 8 identical nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (97 ms vs. 116 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 (50 ns vs. 50 ns) 2 times less (98 ms vs. 212 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 (55 LLVM lines w/ Const vs. 68 kB allocs) 118 times less (80 ns vs. 9 μs) similar (196 ms vs. 101 ms) 2 times more (7 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 (50 ns vs. 50 ns) similar (42 ms vs. 64 ms) 3 times less (785 kB vs. 3 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr; init = ()) mapreduce((x->(x, length(x))), tuple, itr; init = ()) Tuple 4 identical nonempty non-singleton Tuples similar (28 LLVM lines) similar (60 ns vs. 60 ns) similar (85 ms vs. 64 ms) similar (3 MB 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 (60 ns vs. 60 ns) similar (88 ms vs. 68 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 (81 ns vs. 90 ns) similar (100 ms vs. 80 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) 57 times less (230 ns vs. 13 μs) 2 times more (177 ms vs. 69 ms) 2 times more (9 MB vs. 3 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr; init = ()) mapreduce((x->(x, length(x))), tuple, itr; init = ()) Tuple 2 distinct empty & nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (49 ms vs. 95 ms) 6 times less (471 kB vs. 3 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr; init = ()) mapreduce((x->(x, length(x))), tuple, itr; init = ()) Tuple 4 distinct empty & nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (92 ms vs. 103 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 8 distinct empty & nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 50 ns) similar (93 ms vs. 119 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 distinct empty & nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) 2 times less (102 ms vs. 216 ms) similar (3 MB vs. 6 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr; init = ()) mapreduce((x->(x, length(x))), tuple, itr; init = ()) Tuple 128 distinct empty & nonempty singleton Tuples better (55 LLVM lines w/ Const vs. 70 kB allocs) 262 times less (80 ns vs. 21 μs) similar (195 ms vs. 104 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 distinct nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (50 ms vs. 95 ms) 6 times less (474 kB vs. 3 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr; init = ()) mapreduce((x->(x, length(x))), tuple, itr; init = ()) Tuple 4 distinct nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (92 ms vs. 104 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 8 distinct nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (95 ms vs. 118 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 distinct nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 50 ns) 2 times less (98 ms vs. 215 ms) similar (3 MB vs. 6 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr; init = ()) mapreduce((x->(x, length(x))), tuple, itr; init = ()) Tuple 128 distinct nonempty singleton Tuples better (55 LLVM lines w/ Const vs. 70 kB allocs) 263 times less (80 ns vs. 21 μs) similar (196 ms vs. 106 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 distinct nonempty non-singleton Tuples similar (15 LLVM lines) similar (50 ns vs. 60 ns) similar (42 ms vs. 66 ms) 4 times less (833 kB vs. 3 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr; init = ()) mapreduce((x->(x, length(x))), tuple, itr; init = ()) Tuple 4 distinct nonempty non-singleton Tuples similar (25 LLVM lines) similar (60 ns vs. 60 ns) similar (87 ms vs. 68 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 8 distinct nonempty non-singleton Tuples similar (46 LLVM lines) similar (70 ns vs. 80 ns) similar (92 ms vs. 70 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 distinct nonempty non-singleton Tuples similar (169 LLVM lines) similar (100 ns vs. 90 ns) similar (111 ms vs. 86 ms) similar (4 MB vs. 8 MB)
unrolled_mapreduce((x->(x, length(x))), tuple, itr; init = ()) mapreduce((x->(x, length(x))), tuple, itr; init = ()) Tuple 128 distinct nonempty non-singleton Tuples better (881 LLVM lines vs. 855 kB allocs) 530 times less (410 ns vs. 218 μs) 3 times more (283 ms vs. 72 ms) similar (10 MB vs. 5 MB)
unrolled_accumulate(tuple, itr) accumulate(tuple, itr) Tuple 1 empty singleton Tuple similar (optimized out) similar (50 ns vs. 50 ns) similar (30 ms vs. 46 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 (50 ns vs. 50 ns) similar (30 ms vs. 44 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 (50 ns vs. 50 ns) similar (30 ms vs. 43 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 (50 ns vs. 50 ns) similar (30 ms vs. 54 ms) 6 times less (162 kB vs. 1 MB)
unrolled_accumulate(tuple, itr) accumulate(tuple, itr) Tuple 4 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) similar (63 ms vs. 71 ms) 6 times less (266 kB vs. 2 MB)
unrolled_accumulate(tuple, itr) accumulate(tuple, itr) Tuple 8 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (63 ms vs. 103 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 (50 ns vs. 50 ns) 4 times less (64 ms vs. 304 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 (60 ns vs. 60 ns) similar (31 ms vs. 52 ms) 4 times less (394 kB vs. 2 MB)
unrolled_accumulate(tuple, itr) accumulate(tuple, itr) Tuple 4 identical nonempty non-singleton Tuples similar (21 LLVM lines) similar (60 ns vs. 60 ns) similar (64 ms vs. 55 ms) 4 times less (566 kB vs. 2 MB)
unrolled_accumulate(tuple, itr) accumulate(tuple, itr) Tuple 8 identical nonempty non-singleton Tuples similar (65 LLVM lines) similar (60 ns vs. 60 ns) similar (68 ms vs. 65 ms) 6 times less (677 kB vs. 4 MB)
unrolled_accumulate(tuple, itr) accumulate(tuple, itr) Tuple 32 identical nonempty non-singleton Tuples similar (857 LLVM lines) similar (261 ns vs. 240 ns) similar (292 ms vs. 471 ms) 12 times less (1 MB vs. 16 MB)
unrolled_accumulate(tuple, itr) accumulate(tuple, itr) Tuple 2 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (30 ms vs. 54 ms) 6 times less (162 kB vs. 1 MB)
unrolled_accumulate(tuple, itr) accumulate(tuple, itr) Tuple 4 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (62 ms vs. 71 ms) 6 times less (267 kB vs. 2 MB)
unrolled_accumulate(tuple, itr) accumulate(tuple, itr) Tuple 8 distinct empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) similar (62 ms vs. 104 ms) 11 times less (290 kB vs. 3 MB)
unrolled_accumulate(tuple, itr) accumulate(tuple, itr) Tuple 32 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) 4 times less (64 ms vs. 305 ms) 25 times less (433 kB vs. 11 MB)
unrolled_accumulate(tuple, itr) accumulate(tuple, itr) Tuple 2 distinct nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) similar (31 ms vs. 54 ms) 6 times less (162 kB vs. 1 MB)
unrolled_accumulate(tuple, itr) accumulate(tuple, itr) Tuple 4 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (62 ms vs. 71 ms) 6 times less (266 kB vs. 2 MB)
unrolled_accumulate(tuple, itr) accumulate(tuple, itr) Tuple 8 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (62 ms vs. 105 ms) 11 times less (290 kB vs. 3 MB)
unrolled_accumulate(tuple, itr) accumulate(tuple, itr) Tuple 32 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) 4 times less (64 ms vs. 309 ms) 25 times less (433 kB vs. 11 MB)
unrolled_accumulate(tuple, itr) accumulate(tuple, itr) Tuple 2 distinct nonempty non-singleton Tuples similar (13 LLVM lines) similar (60 ns vs. 60 ns) similar (31 ms vs. 53 ms) 3 times less (420 kB vs. 2 MB)
unrolled_accumulate(tuple, itr) accumulate(tuple, itr) Tuple 4 distinct nonempty non-singleton Tuples similar (29 LLVM lines) similar (70 ns vs. 60 ns) similar (65 ms vs. 59 ms) 5 times less (567 kB vs. 3 MB)
unrolled_accumulate(tuple, itr) accumulate(tuple, itr) Tuple 8 distinct nonempty non-singleton Tuples similar (86 LLVM lines) similar (80 ns vs. 80 ns) similar (74 ms vs. 76 ms) 7 times less (680 kB vs. 5 MB)
unrolled_accumulate(tuple, itr) accumulate(tuple, itr) Tuple 32 distinct nonempty non-singleton Tuples similar (2796 LLVM lines) similar (2 μs vs. 2 μs) similar (1 s vs. 840 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. 50 ns) similar (30 ms vs. 38 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 (50 ns vs. 40 ns) similar (30 ms vs. 37 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 (50 ns vs. 50 ns) similar (30 ms vs. 42 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 (50 ns vs. 40 ns) similar (30 ms vs. 46 ms) 6 times less (176 kB vs. 1 MB)
unrolled_accumulate(tuple, itr; init = ()) accumulate(tuple, itr; init = ()) Tuple 4 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (63 ms vs. 64 ms) 6 times less (279 kB vs. 2 MB)
unrolled_accumulate(tuple, itr; init = ()) accumulate(tuple, itr; init = ()) Tuple 8 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (63 ms vs. 96 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 (50 ns vs. 50 ns) 4 times less (64 ms vs. 298 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 (60 ns vs. 60 ns) similar (31 ms vs. 45 ms) 3 times less (429 kB vs. 2 MB)
unrolled_accumulate(tuple, itr; init = ()) accumulate(tuple, itr; init = ()) Tuple 4 identical nonempty non-singleton Tuples similar (21 LLVM lines) similar (60 ns vs. 60 ns) similar (64 ms vs. 47 ms) 4 times less (602 kB vs. 2 MB)
unrolled_accumulate(tuple, itr; init = ()) accumulate(tuple, itr; init = ()) Tuple 8 identical nonempty non-singleton Tuples similar (65 LLVM lines) similar (60 ns vs. 60 ns) similar (67 ms vs. 56 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 (857 LLVM lines) similar (270 ns vs. 240 ns) similar (284 ms vs. 436 ms) 11 times less (1 MB vs. 16 MB)
unrolled_accumulate(tuple, itr; init = ()) accumulate(tuple, itr; init = ()) Tuple 2 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (30 ms vs. 46 ms) 6 times less (175 kB vs. 1 MB)
unrolled_accumulate(tuple, itr; init = ()) accumulate(tuple, itr; init = ()) Tuple 4 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (63 ms vs. 64 ms) 6 times less (280 kB vs. 2 MB)
unrolled_accumulate(tuple, itr; init = ()) accumulate(tuple, itr; init = ()) Tuple 8 distinct empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (63 ms vs. 97 ms) 11 times less (304 kB vs. 3 MB)
unrolled_accumulate(tuple, itr; init = ()) accumulate(tuple, itr; init = ()) Tuple 32 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) 4 times less (64 ms vs. 297 ms) 24 times less (447 kB vs. 11 MB)
unrolled_accumulate(tuple, itr; init = ()) accumulate(tuple, itr; init = ()) Tuple 2 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (31 ms vs. 46 ms) 6 times less (176 kB vs. 1 MB)
unrolled_accumulate(tuple, itr; init = ()) accumulate(tuple, itr; init = ()) Tuple 4 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (62 ms vs. 63 ms) 6 times less (280 kB vs. 2 MB)
unrolled_accumulate(tuple, itr; init = ()) accumulate(tuple, itr; init = ()) Tuple 8 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (63 ms vs. 97 ms) 11 times less (304 kB vs. 3 MB)
unrolled_accumulate(tuple, itr; init = ()) accumulate(tuple, itr; init = ()) Tuple 32 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) 4 times less (65 ms vs. 299 ms) 24 times less (446 kB vs. 11 MB)
unrolled_accumulate(tuple, itr; init = ()) accumulate(tuple, itr; init = ()) Tuple 2 distinct nonempty non-singleton Tuples similar (13 LLVM lines) similar (60 ns vs. 60 ns) similar (32 ms vs. 46 ms) 3 times less (455 kB vs. 2 MB)
unrolled_accumulate(tuple, itr; init = ()) accumulate(tuple, itr; init = ()) Tuple 4 distinct nonempty non-singleton Tuples similar (29 LLVM lines) similar (60 ns vs. 60 ns) similar (65 ms vs. 50 ms) 4 times less (603 kB vs. 3 MB)
unrolled_accumulate(tuple, itr; init = ()) accumulate(tuple, itr; init = ()) Tuple 8 distinct nonempty non-singleton Tuples similar (86 LLVM lines) similar (90 ns vs. 90 ns) similar (74 ms vs. 67 ms) 7 times less (714 kB vs. 5 MB)
unrolled_accumulate(tuple, itr; init = ()) accumulate(tuple, itr; init = ()) Tuple 32 distinct nonempty non-singleton Tuples similar (2795 LLVM lines) similar (2 μs vs. 2 μs) similar (1 s vs. 794 ms) 12 times less (1 MB vs. 17 MB)
unrolled_applyat(length, rand(1:7:length(itr)), itr) length(itr[rand(1:7:length(itr))]) Tuple 1 empty singleton Tuple similar (19 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (73 ms vs. 57 ms) similar (4 MB vs. 3 MB)
unrolled_applyat(length, rand(1:7:length(itr)), itr) length(itr[rand(1:7:length(itr))]) Tuple 1 nonempty singleton Tuple similar (19 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (74 ms vs. 56 ms) similar (4 MB vs. 3 MB)
unrolled_applyat(length, rand(1:7:length(itr)), itr) length(itr[rand(1:7:length(itr))]) Tuple 1 nonempty non-singleton Tuple similar (22 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (71 ms vs. 57 ms) similar (4 MB vs. 3 MB)
unrolled_applyat(length, rand(1:7:length(itr)), itr) length(itr[rand(1:7:length(itr))]) Tuple 2 identical nonempty singleton Tuples similar (20 LLVM lines w/ Const) similar (60 ns vs. 50 ns) similar (74 ms vs. 56 ms) similar (4 MB vs. 3 MB)
unrolled_applyat(length, rand(1:7:length(itr)), itr) length(itr[rand(1:7:length(itr))]) Tuple 4 identical nonempty singleton Tuples similar (20 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (93 ms vs. 56 ms) similar (4 MB vs. 3 MB)
unrolled_applyat(length, rand(1:7:length(itr)), itr) length(itr[rand(1:7:length(itr))]) Tuple 8 identical nonempty singleton Tuples similar (20 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (94 ms vs. 56 ms) similar (5 MB vs. 3 MB)
unrolled_applyat(length, rand(1:7:length(itr)), itr) length(itr[rand(1:7:length(itr))]) Tuple 32 identical nonempty singleton Tuples similar (20 LLVM lines w/ Const) similar (60 ns vs. 50 ns) similar (98 ms vs. 56 ms) similar (7 MB vs. 3 MB)
unrolled_applyat(length, rand(1:7:length(itr)), itr) length(itr[rand(1:7:length(itr))]) Tuple 128 identical nonempty singleton Tuples similar (20 LLVM lines w/ Const) similar (50 ns vs. 50 ns) 2 times more (119 ms vs. 57 ms) 4 times more (15 MB vs. 3 MB)
unrolled_applyat(length, rand(1:7:length(itr)), itr) length(itr[rand(1:7:length(itr))]) Tuple 2 identical nonempty non-singleton Tuples similar (22 LLVM lines w/ Const) similar (60 ns vs. 50 ns) similar (71 ms vs. 56 ms) similar (4 MB vs. 3 MB)
unrolled_applyat(length, rand(1:7:length(itr)), itr) length(itr[rand(1:7:length(itr))]) Tuple 4 identical nonempty non-singleton Tuples similar (22 LLVM lines w/ Const) similar (50 ns vs. 60 ns) similar (90 ms vs. 55 ms) similar (4 MB vs. 3 MB)
unrolled_applyat(length, rand(1:7:length(itr)), itr) length(itr[rand(1:7:length(itr))]) Tuple 8 identical nonempty non-singleton Tuples similar (22 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (93 ms vs. 57 ms) similar (5 MB vs. 3 MB)
unrolled_applyat(length, rand(1:7:length(itr)), itr) length(itr[rand(1:7:length(itr))]) Tuple 32 identical nonempty non-singleton Tuples similar (22 LLVM lines w/ Const) similar (60 ns vs. 50 ns) similar (104 ms vs. 56 ms) 2 times more (7 MB vs. 3 MB)
unrolled_applyat(length, rand(1:7:length(itr)), itr) length(itr[rand(1:7:length(itr))]) Tuple 128 identical nonempty non-singleton Tuples similar (22 LLVM lines w/ Const) similar (60 ns vs. 50 ns) 2 times more (119 ms vs. 56 ms) 4 times more (15 MB vs. 3 MB)
unrolled_applyat(length, rand(1:7:length(itr)), itr) length(itr[rand(1:7:length(itr))]) Tuple 2 distinct empty & nonempty singleton Tuples similar (25 LLVM lines w/ switch) similar (50 ns vs. 70 ns) similar (74 ms vs. 56 ms) similar (4 MB vs. 3 MB)
unrolled_applyat(length, rand(1:7:length(itr)), itr) length(itr[rand(1:7:length(itr))]) Tuple 4 distinct empty & nonempty singleton Tuples similar (20 LLVM lines w/ switch) similar (50 ns vs. 70 ns) similar (92 ms vs. 56 ms) similar (4 MB vs. 3 MB)
unrolled_applyat(length, rand(1:7:length(itr)), itr) length(itr[rand(1:7:length(itr))]) Tuple 8 distinct empty & nonempty singleton Tuples similar (22 LLVM lines w/ switch) similar (50 ns vs. 60 ns) similar (93 ms vs. 56 ms) similar (5 MB vs. 3 MB)
unrolled_applyat(length, rand(1:7:length(itr)), itr) length(itr[rand(1:7:length(itr))]) Tuple 32 distinct empty & nonempty singleton Tuples similar (22 LLVM lines w/ switch) similar (50 ns vs. 70 ns) similar (98 ms vs. 57 ms) similar (7 MB vs. 3 MB)
unrolled_applyat(length, rand(1:7:length(itr)), itr) length(itr[rand(1:7:length(itr))]) Tuple 128 distinct empty & nonempty singleton Tuples similar (22 LLVM lines w/ switch) similar (50 ns vs. 60 ns) 2 times more (122 ms vs. 56 ms) 4 times more (15 MB vs. 3 MB)
unrolled_applyat(length, rand(1:7:length(itr)), itr) length(itr[rand(1:7:length(itr))]) Tuple 2 distinct nonempty singleton Tuples similar (25 LLVM lines w/ switch) similar (50 ns vs. 60 ns) similar (75 ms vs. 56 ms) similar (4 MB vs. 3 MB)
unrolled_applyat(length, rand(1:7:length(itr)), itr) length(itr[rand(1:7:length(itr))]) Tuple 4 distinct nonempty singleton Tuples similar (20 LLVM lines w/ switch) similar (50 ns vs. 60 ns) similar (93 ms vs. 57 ms) similar (4 MB vs. 3 MB)
unrolled_applyat(length, rand(1:7:length(itr)), itr) length(itr[rand(1:7:length(itr))]) Tuple 8 distinct nonempty singleton Tuples similar (22 LLVM lines w/ switch) similar (60 ns vs. 70 ns) similar (94 ms vs. 56 ms) similar (5 MB vs. 3 MB)
unrolled_applyat(length, rand(1:7:length(itr)), itr) length(itr[rand(1:7:length(itr))]) Tuple 32 distinct nonempty singleton Tuples similar (22 LLVM lines w/ switch) similar (50 ns vs. 70 ns) similar (100 ms vs. 56 ms) similar (7 MB vs. 3 MB)
unrolled_applyat(length, rand(1:7:length(itr)), itr) length(itr[rand(1:7:length(itr))]) Tuple 128 distinct nonempty singleton Tuples similar (22 LLVM lines w/ switch) similar (50 ns vs. 60 ns) 2 times more (123 ms vs. 56 ms) 4 times more (15 MB vs. 3 MB)
unrolled_applyat(length, rand(1:7:length(itr)), itr) length(itr[rand(1:7:length(itr))]) Tuple 2 distinct nonempty non-singleton Tuples better (27 LLVM lines w/ switch vs. 48 B allocs) similar (60 ns vs. 90 ns) similar (74 ms vs. 57 ms) similar (4 MB vs. 3 MB)
unrolled_applyat(length, rand(1:7:length(itr)), itr) length(itr[rand(1:7:length(itr))]) Tuple 4 distinct nonempty non-singleton Tuples better (22 LLVM lines w/ switch vs. 112 B allocs) similar (50 ns vs. 90 ns) similar (91 ms vs. 57 ms) similar (4 MB vs. 3 MB)
unrolled_applyat(length, rand(1:7:length(itr)), itr) length(itr[rand(1:7:length(itr))]) Tuple 8 distinct nonempty non-singleton Tuples better (24 LLVM lines w/ switch vs. 256 B allocs) similar (50 ns vs. 90 ns) similar (92 ms vs. 56 ms) similar (5 MB vs. 3 MB)
unrolled_applyat(length, rand(1:7:length(itr)), itr) length(itr[rand(1:7:length(itr))]) Tuple 32 distinct nonempty non-singleton Tuples better (24 LLVM lines w/ switch vs. 1 kB allocs) similar (70 ns vs. 100 ns) similar (97 ms vs. 56 ms) 2 times more (7 MB vs. 3 MB)
unrolled_applyat(length, rand(1:7:length(itr)), itr) length(itr[rand(1:7:length(itr))]) Tuple 128 distinct nonempty non-singleton Tuples better (24 LLVM lines w/ switch vs. 4 kB allocs) 2 times less (110 ns vs. 240 ns) 2 times more (121 ms vs. 56 ms) 4 times more (15 MB vs. 3 MB)
unrolled_in(nothing, itr) nothing in itr Tuple 1 empty singleton Tuple similar (optimized out) similar (40 ns vs. 50 ns) similar (32 ms vs. 29 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 (50 ns vs. 50 ns) similar (32 ms vs. 29 ms) similar (162 kB vs. 164 kB)
unrolled_in(nothing, itr) nothing in itr Tuple 1 nonempty non-singleton Tuple similar (optimized out) similar (50 ns vs. 50 ns) similar (26 ms vs. 26 ms) similar (138 kB vs. 194 kB)
unrolled_in(nothing, itr) nothing in itr Tuple 2 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (32 ms vs. 33 ms) similar (166 kB vs. 283 kB)
unrolled_in(nothing, itr) nothing in itr Tuple 4 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) similar (52 ms vs. 33 ms) similar (229 kB vs. 283 kB)
unrolled_in(nothing, itr) nothing in itr Tuple 8 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (52 ms vs. 33 ms) similar (254 kB vs. 283 kB)
unrolled_in(nothing, itr) nothing in itr Tuple 32 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (54 ms vs. 33 ms) similar (406 kB vs. 283 kB)
unrolled_in(nothing, itr) nothing in itr Tuple 128 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (61 ms vs. 33 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. 50 ns) similar (27 ms vs. 30 ms) 2 times less (147 kB vs. 326 kB)
unrolled_in(nothing, itr) nothing in itr Tuple 4 identical nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (46 ms vs. 30 ms) similar (243 kB vs. 352 kB)
unrolled_in(nothing, itr) nothing in itr Tuple 8 identical nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (47 ms vs. 31 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 (50 ns vs. 50 ns) similar (51 ms vs. 31 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 (50 ns vs. 50 ns) similar (56 ms vs. 30 ms) 4 times more (2 MB vs. 352 kB)
unrolled_in(nothing, itr) nothing in itr Tuple 2 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (35 ms vs. 36 ms) similar (194 kB vs. 315 kB)
unrolled_in(nothing, itr) nothing in itr Tuple 4 distinct empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) similar (60 ms vs. 36 ms) similar (313 kB vs. 340 kB)
unrolled_in(nothing, itr) nothing in itr Tuple 8 distinct empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) similar (68 ms vs. 37 ms) similar (437 kB vs. 340 kB)
unrolled_in(nothing, itr) nothing in itr Tuple 32 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (70 ms vs. 37 ms) similar (588 kB vs. 340 kB)
unrolled_in(nothing, itr) nothing in itr Tuple 128 distinct empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) 2 times more (78 ms vs. 37 ms) 3 times more (1 MB vs. 340 kB)
unrolled_in(nothing, itr) nothing in itr Tuple 2 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (36 ms vs. 36 ms) similar (194 kB vs. 315 kB)
unrolled_in(nothing, itr) nothing in itr Tuple 4 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (60 ms vs. 38 ms) similar (312 kB vs. 340 kB)
unrolled_in(nothing, itr) nothing in itr Tuple 8 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (69 ms vs. 36 ms) similar (437 kB vs. 340 kB)
unrolled_in(nothing, itr) nothing in itr Tuple 32 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (71 ms vs. 37 ms) similar (588 kB vs. 340 kB)
unrolled_in(nothing, itr) nothing in itr Tuple 128 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) 2 times more (78 ms vs. 38 ms) 3 times more (1 MB vs. 340 kB)
unrolled_in(nothing, itr) nothing in itr Tuple 2 distinct nonempty non-singleton Tuples better (optimized out vs. 64 B allocs) 2 times less (40 ns vs. 90 ns) similar (27 ms vs. 32 ms) similar (199 kB vs. 382 kB)
unrolled_in(nothing, itr) nothing in itr Tuple 4 distinct nonempty non-singleton Tuples better (optimized out vs. 400 B allocs) 2 times less (50 ns vs. 140 ns) similar (46 ms vs. 33 ms) similar (325 kB vs. 408 kB)
unrolled_in(nothing, itr) nothing in itr Tuple 8 distinct nonempty non-singleton Tuples better (optimized out vs. 2 kB allocs) 5 times less (50 ns vs. 260 ns) similar (47 ms vs. 35 ms) similar (447 kB vs. 410 kB)
unrolled_in(nothing, itr) nothing in itr Tuple 32 distinct nonempty non-singleton Tuples better (optimized out vs. 32 kB allocs) 35 times less (50 ns vs. 2 μs) similar (48 ms vs. 33 ms) similar (699 kB vs. 440 kB)
unrolled_in(nothing, itr) nothing in itr Tuple 128 distinct nonempty non-singleton Tuples better (optimized out vs. 521 kB allocs) 468 times less (50 ns vs. 23 μs) similar (56 ms vs. 33 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 (50 ns vs. 50 ns) similar (33 ms vs. 27 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 (50 ns vs. 50 ns) similar (33 ms vs. 32 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 (50 ns vs. 50 ns) similar (30 ms vs. 30 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 (50 ns vs. 50 ns) similar (33 ms vs. 33 ms) similar (168 kB vs. 254 kB)
unrolled_in(itr[1], itr) itr[1] in itr Tuple 4 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (53 ms vs. 33 ms) similar (226 kB vs. 254 kB)
unrolled_in(itr[1], itr) itr[1] in itr Tuple 8 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (53 ms vs. 33 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 (50 ns vs. 50 ns) similar (55 ms vs. 32 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 (50 ns vs. 50 ns) similar (61 ms vs. 33 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 (50 ns vs. 50 ns) similar (32 ms vs. 32 ms) similar (335 kB vs. 335 kB)
unrolled_in(itr[1], itr) itr[1] in itr Tuple 4 identical nonempty non-singleton Tuples similar (6 LLVM lines) similar (50 ns vs. 50 ns) similar (51 ms vs. 33 ms) similar (482 kB vs. 360 kB)
unrolled_in(itr[1], itr) itr[1] in itr Tuple 8 identical nonempty non-singleton Tuples similar (6 LLVM lines) similar (50 ns vs. 50 ns) similar (55 ms vs. 34 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 (50 ns vs. 50 ns) similar (58 ms vs. 34 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 (50 ns vs. 50 ns) 2 times more (84 ms vs. 34 ms) 15 times more (5 MB vs. 361 kB)
unrolled_in(itr[1], itr) itr[1] in itr Tuple 2 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (33 ms vs. 27 ms) similar (168 kB vs. 149 kB)
unrolled_in(itr[1], itr) itr[1] in itr Tuple 4 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (53 ms vs. 27 ms) similar (227 kB vs. 150 kB)
unrolled_in(itr[1], itr) itr[1] in itr Tuple 8 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (53 ms vs. 27 ms) similar (241 kB vs. 150 kB)
unrolled_in(itr[1], itr) itr[1] in itr Tuple 32 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (54 ms vs. 29 ms) 2 times more (329 kB vs. 150 kB)
unrolled_in(itr[1], itr) itr[1] in itr Tuple 128 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) 2 times more (61 ms vs. 27 ms) 4 times more (678 kB vs. 150 kB)
unrolled_in(itr[1], itr) itr[1] in itr Tuple 2 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (34 ms vs. 32 ms) similar (168 kB vs. 254 kB)
unrolled_in(itr[1], itr) itr[1] in itr Tuple 4 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (53 ms vs. 33 ms) similar (226 kB vs. 255 kB)
unrolled_in(itr[1], itr) itr[1] in itr Tuple 8 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (53 ms vs. 32 ms) similar (241 kB vs. 255 kB)
unrolled_in(itr[1], itr) itr[1] in itr Tuple 32 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (55 ms vs. 33 ms) similar (329 kB vs. 255 kB)
unrolled_in(itr[1], itr) itr[1] in itr Tuple 128 distinct nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (62 ms vs. 33 ms) 2 times more (678 kB vs. 255 kB)
unrolled_in(itr[1], itr) itr[1] in itr Tuple 2 distinct nonempty non-singleton Tuples similar (6 LLVM lines) similar (50 ns vs. 50 ns) similar (30 ms vs. 35 ms) similar (375 kB vs. 390 kB)
unrolled_in(itr[1], itr) itr[1] in itr Tuple 4 distinct nonempty non-singleton Tuples better (6 LLVM lines vs. 32 B allocs) similar (50 ns vs. 80 ns) similar (51 ms vs. 41 ms) similar (527 kB vs. 571 kB)
unrolled_in(itr[1], itr) itr[1] in itr Tuple 8 distinct nonempty non-singleton Tuples better (6 LLVM lines vs. 32 B allocs) similar (50 ns vs. 70 ns) similar (51 ms vs. 40 ms) similar (706 kB vs. 571 kB)
unrolled_in(itr[1], itr) itr[1] in itr Tuple 32 distinct nonempty non-singleton Tuples better (6 LLVM lines vs. 32 B allocs) similar (50 ns vs. 81 ns) similar (54 ms vs. 40 ms) similar (1 MB vs. 571 kB)
unrolled_in(itr[1], itr) itr[1] in itr Tuple 128 distinct nonempty non-singleton Tuples better (6 LLVM lines vs. 32 B allocs) similar (50 ns vs. 80 ns) similar (66 ms vs. 40 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 (50 ns vs. 50 ns) similar (34 ms vs. 27 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 (50 ns vs. 50 ns) similar (34 ms vs. 33 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 (50 ns vs. 50 ns) similar (31 ms vs. 31 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 (50 ns vs. 40 ns) similar (33 ms vs. 33 ms) similar (168 kB vs. 254 kB)
unrolled_in(itr[end], itr) itr[end] in itr Tuple 4 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (53 ms vs. 33 ms) similar (226 kB vs. 254 kB)
unrolled_in(itr[end], itr) itr[end] in itr Tuple 8 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (54 ms vs. 33 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 (50 ns vs. 40 ns) similar (55 ms vs. 33 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 (50 ns vs. 50 ns) similar (62 ms vs. 33 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 (50 ns vs. 50 ns) similar (31 ms vs. 33 ms) similar (335 kB vs. 335 kB)
unrolled_in(itr[end], itr) itr[end] in itr Tuple 4 identical nonempty non-singleton Tuples similar (6 LLVM lines) similar (50 ns vs. 50 ns) similar (52 ms vs. 34 ms) similar (482 kB vs. 360 kB)
unrolled_in(itr[end], itr) itr[end] in itr Tuple 8 identical nonempty non-singleton Tuples similar (6 LLVM lines) similar (50 ns vs. 50 ns) similar (54 ms vs. 35 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 (50 ns vs. 50 ns) similar (58 ms vs. 34 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 (50 ns vs. 50 ns) 2 times more (85 ms vs. 35 ms) 15 times more (5 MB vs. 361 kB)
unrolled_in(itr[end], itr) itr[end] in itr Tuple 2 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (37 ms vs. 38 ms) 2 times less (198 kB vs. 415 kB)
unrolled_in(itr[end], itr) itr[end] in itr Tuple 4 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (61 ms vs. 47 ms) 3 times less (317 kB vs. 1 MB)
unrolled_in(itr[end], itr) itr[end] in itr Tuple 8 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (53 ms vs. 27 ms) similar (241 kB vs. 150 kB)
unrolled_in(itr[end], itr) itr[end] in itr Tuple 32 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (62 ms vs. 47 ms) 2 times less (419 kB vs. 1 MB)
unrolled_in(itr[end], itr) itr[end] in itr Tuple 128 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (65 ms vs. 42 ms) similar (708 kB vs. 702 kB)
unrolled_in(itr[end], itr) itr[end] in itr Tuple 2 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (37 ms vs. 41 ms) 2 times less (198 kB vs. 506 kB)
unrolled_in(itr[end], itr) itr[end] in itr Tuple 4 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (61 ms vs. 50 ms) 4 times less (317 kB vs. 1 MB)
unrolled_in(itr[end], itr) itr[end] in itr Tuple 8 distinct nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) similar (53 ms vs. 33 ms) similar (241 kB vs. 255 kB)
unrolled_in(itr[end], itr) itr[end] in itr Tuple 32 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (64 ms vs. 50 ms) 3 times less (419 kB vs. 1 MB)
unrolled_in(itr[end], itr) itr[end] in itr Tuple 128 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (65 ms vs. 44 ms) similar (708 kB vs. 898 kB)
unrolled_in(itr[end], itr) itr[end] in itr Tuple 2 distinct nonempty non-singleton Tuples better (6 LLVM lines vs. 64 B allocs) similar (50 ns vs. 80 ns) similar (32 ms vs. 36 ms) similar (360 kB vs. 408 kB)
unrolled_in(itr[end], itr) itr[end] in itr Tuple 4 distinct nonempty non-singleton Tuples better (6 LLVM lines vs. 608 B allocs) 4 times less (50 ns vs. 210 ns) similar (52 ms vs. 44 ms) 2 times less (513 kB vs. 1 MB)
unrolled_in(itr[end], itr) itr[end] in itr Tuple 8 distinct nonempty non-singleton Tuples better (6 LLVM lines vs. 32 B allocs) similar (50 ns vs. 70 ns) similar (52 ms vs. 41 ms) similar (706 kB vs. 571 kB)
unrolled_in(itr[end], itr) itr[end] in itr Tuple 32 distinct nonempty non-singleton Tuples better (6 LLVM lines vs. 3 kB allocs) 6 times less (50 ns vs. 331 ns) similar (57 ms vs. 43 ms) similar (1 MB vs. 1 MB)
unrolled_in(itr[end], itr) itr[end] in itr Tuple 128 distinct nonempty non-singleton Tuples better (6 LLVM lines vs. 4 kB allocs) 5 times less (50 ns vs. 270 ns) similar (69 ms vs. 42 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) 5 times less (40 ns vs. 220 ns) similar (69 ms vs. 89 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) 5 times less (41 ns vs. 230 ns) similar (69 ms vs. 88 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) 4 times less (60 ns vs. 261 ns) similar (51 ms vs. 86 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) 4 times less (50 ns vs. 230 ns) similar (74 ms vs. 89 ms) similar (4 MB vs. 5 MB)
unrolled_unique(length, itr) Tuple(unique(length, itr)) Tuple 4 identical nonempty singleton Tuples better (optimized out vs. 384 B allocs) 4 times less (50 ns vs. 240 ns) similar (132 ms vs. 90 ms) similar (6 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) 6 times less (40 ns vs. 240 ns) similar (134 ms vs. 90 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) 5 times less (50 ns vs. 290 ns) similar (146 ms vs. 89 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) 12 times less (40 ns vs. 500 ns) 2 times more (201 ms vs. 89 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) 4 times less (60 ns vs. 270 ns) similar (58 ms vs. 87 ms) similar (5 MB vs. 5 MB)
unrolled_unique(length, itr) Tuple(unique(length, itr)) Tuple 4 identical nonempty non-singleton Tuples better (8 LLVM lines vs. 480 B allocs) 5 times less (50 ns vs. 280 ns) similar (114 ms vs. 87 ms) similar (8 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) 4 times less (60 ns vs. 280 ns) similar (117 ms vs. 88 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) 6 times less (50 ns vs. 340 ns) similar (140 ms vs. 90 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) 9 times less (60 ns vs. 541 ns) 3 times more (327 ms vs. 88 ms) 26 times more (130 MB vs. 5 MB)
unrolled_unique(length, itr) Tuple(unique(length, itr)) Tuple 2 distinct empty & nonempty singleton Tuples better (optimized out vs. 448 B allocs) 5 times less (50 ns vs. 270 ns) similar (76 ms vs. 102 ms) similar (4 MB vs. 4 MB)
unrolled_unique(length, itr) Tuple(unique(length, itr)) Tuple 4 distinct empty & nonempty singleton Tuples better (optimized out vs. 448 B allocs) 7 times less (50 ns vs. 350 ns) similar (162 ms vs. 101 ms) similar (7 MB vs. 4 MB)
unrolled_unique(length, itr) Tuple(unique(length, itr)) Tuple 8 distinct empty & nonempty singleton Tuples better (optimized out vs. 448 B allocs) 10 times less (50 ns vs. 500 ns) 2 times more (220 ms vs. 100 ms) 2 times more (9 MB vs. 4 MB)
unrolled_unique(length, itr) Tuple(unique(length, itr)) Tuple 32 distinct empty & nonempty singleton Tuples better (optimized out vs. 448 B allocs) 20 times less (40 ns vs. 831 ns) 2 times more (232 ms vs. 101 ms) 2 times more (12 MB vs. 4 MB)
unrolled_unique(length, itr) Tuple(unique(length, itr)) Tuple 128 distinct empty & nonempty singleton Tuples better (optimized out vs. 448 B allocs) 44 times less (50 ns vs. 2 μs) 2 times more (281 ms vs. 102 ms) 5 times more (24 MB vs. 4 MB)
unrolled_unique(length, itr) Tuple(unique(length, itr)) Tuple 2 distinct nonempty singleton Tuples better (optimized out vs. 448 B allocs) 5 times less (50 ns vs. 270 ns) similar (76 ms vs. 104 ms) similar (4 MB vs. 4 MB)
unrolled_unique(length, itr) Tuple(unique(length, itr)) Tuple 4 distinct nonempty singleton Tuples better (optimized out vs. 448 B allocs) 7 times less (50 ns vs. 391 ns) similar (162 ms vs. 121 ms) similar (7 MB vs. 6 MB)
unrolled_unique(length, itr) Tuple(unique(length, itr)) Tuple 8 distinct nonempty singleton Tuples better (optimized out vs. 448 B allocs) 27 times less (50 ns vs. 1 μs) similar (220 ms vs. 136 ms) similar (9 MB vs. 7 MB)
unrolled_unique(length, itr) Tuple(unique(length, itr)) Tuple 32 distinct nonempty singleton Tuples better (optimized out vs. 448 B allocs) 34 times less (50 ns vs. 2 μs) similar (232 ms vs. 137 ms) similar (12 MB vs. 7 MB)
unrolled_unique(length, itr) Tuple(unique(length, itr)) Tuple 128 distinct nonempty singleton Tuples better (optimized out vs. 448 B allocs) 61 times less (50 ns vs. 3 μs) 2 times more (286 ms vs. 136 ms) 3 times more (24 MB vs. 7 MB)
unrolled_unique(length, itr) Tuple(unique(length, itr)) Tuple 2 distinct nonempty non-singleton Tuples better (11 LLVM lines vs. 592 B allocs) 6 times less (50 ns vs. 340 ns) similar (60 ms vs. 104 ms) similar (5 MB vs. 4 MB)
unrolled_unique(length, itr) Tuple(unique(length, itr)) Tuple 4 distinct nonempty non-singleton Tuples better (17 LLVM lines vs. 1 kB allocs) 8 times less (60 ns vs. 520 ns) similar (117 ms vs. 119 ms) similar (9 MB vs. 6 MB)
unrolled_unique(length, itr) Tuple(unique(length, itr)) Tuple 8 distinct nonempty non-singleton Tuples better (26 LLVM lines vs. 3 kB allocs) 29 times less (60 ns vs. 2 μs) similar (130 ms vs. 149 ms) 2 times more (16 MB vs. 7 MB)
unrolled_unique(length, itr) Tuple(unique(length, itr)) Tuple 32 distinct nonempty non-singleton Tuples better (26 LLVM lines vs. 33 kB allocs) 53 times less (70 ns vs. 4 μs) similar (157 ms vs. 146 ms) 5 times more (34 MB vs. 7 MB)
unrolled_unique(length, itr) Tuple(unique(length, itr)) Tuple 128 distinct nonempty non-singleton Tuples better (26 LLVM lines vs. 522 kB allocs) 441 times less (60 ns vs. 26 μs) 2 times more (398 ms vs. 147 ms) 23 times more (168 MB vs. 7 MB)
unrolled_unique(itr) Tuple(unique(itr)) Tuple 1 empty singleton Tuple better (optimized out vs. 256 B allocs) 4 times less (50 ns vs. 200 ns) similar (69 ms vs. 113 ms) similar (4 MB vs. 7 MB)
unrolled_unique(itr) Tuple(unique(itr)) Tuple 1 nonempty singleton Tuple better (optimized out vs. 256 B allocs) 4 times less (50 ns vs. 200 ns) similar (69 ms vs. 119 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) 4 times less (60 ns vs. 250 ns) 2 times less (51 ms vs. 124 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) 4 times less (50 ns vs. 210 ns) similar (73 ms vs. 122 ms) similar (4 MB vs. 8 MB)
unrolled_unique(itr) Tuple(unique(itr)) Tuple 4 identical nonempty singleton Tuples better (optimized out vs. 256 B allocs) 4 times less (50 ns vs. 220 ns) similar (133 ms vs. 121 ms) similar (6 MB vs. 8 MB)
unrolled_unique(itr) Tuple(unique(itr)) Tuple 8 identical nonempty singleton Tuples better (optimized out vs. 256 B allocs) 5 times less (40 ns vs. 220 ns) similar (133 ms vs. 122 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) 6 times less (50 ns vs. 300 ns) similar (139 ms vs. 122 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) 15 times less (40 ns vs. 610 ns) similar (173 ms vs. 122 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) 4 times less (60 ns vs. 260 ns) 2 times less (63 ms vs. 129 ms) similar (6 MB vs. 8 MB)
unrolled_unique(itr) Tuple(unique(itr)) Tuple 4 identical nonempty non-singleton Tuples better (111 LLVM lines vs. 480 B allocs) 4 times less (60 ns vs. 270 ns) similar (130 ms vs. 129 ms) similar (13 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 (230 ns vs. 300 ns) similar (170 ms vs. 131 ms) 3 times more (25 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) 2 times more (901 ns vs. 430 ns) 5 times more (696 ms vs. 131 ms) 12 times more (96 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) 8 times more (8 μs vs. 971 ns) 78 times more (10 s vs. 129 ms) 149 times more (1 GB vs. 8 MB)
unrolled_unique(itr) Tuple(unique(itr)) Tuple 2 distinct empty & nonempty singleton Tuples better (optimized out vs. 448 B allocs) 5 times less (50 ns vs. 250 ns) 2 times less (76 ms vs. 174 ms) 2 times less (4 MB vs. 10 MB)
unrolled_unique(itr) Tuple(unique(itr)) Tuple 4 distinct empty & nonempty singleton Tuples better (optimized out vs. 512 B allocs) 8 times less (50 ns vs. 420 ns) similar (160 ms vs. 258 ms) 2 times less (7 MB vs. 18 MB)
unrolled_unique(itr) Tuple(unique(itr)) Tuple 8 distinct empty & nonempty singleton Tuples better (optimized out vs. 576 B allocs) 22 times less (50 ns vs. 1 μs) similar (221 ms vs. 385 ms) 3 times less (9 MB vs. 29 MB)
unrolled_unique(itr) Tuple(unique(itr)) Tuple 32 distinct empty & nonempty singleton Tuples better (optimized out vs. 960 B allocs) 67 times less (50 ns vs. 3 μs) similar (233 ms vs. 388 ms) 2 times less (12 MB vs. 29 MB)
unrolled_unique(itr) Tuple(unique(itr)) Tuple 128 distinct empty & nonempty singleton Tuples better (optimized out vs. 2 kB allocs) 264 times less (50 ns vs. 13 μs) similar (283 ms vs. 384 ms) similar (24 MB vs. 29 MB)
unrolled_unique(itr) Tuple(unique(itr)) Tuple 2 distinct nonempty singleton Tuples better (optimized out vs. 448 B allocs) 5 times less (50 ns vs. 250 ns) 2 times less (76 ms vs. 186 ms) 2 times less (4 MB vs. 12 MB)
unrolled_unique(itr) Tuple(unique(itr)) Tuple 4 distinct nonempty singleton Tuples better (optimized out vs. 512 B allocs) 9 times less (50 ns vs. 491 ns) similar (170 ms vs. 318 ms) 3 times less (7 MB vs. 22 MB)
unrolled_unique(itr) Tuple(unique(itr)) Tuple 8 distinct nonempty singleton Tuples better (optimized out vs. 576 B allocs) 49 times less (50 ns vs. 2 μs) 2 times less (220 ms vs. 449 ms) 3 times less (9 MB vs. 35 MB)
unrolled_unique(itr) Tuple(unique(itr)) Tuple 32 distinct nonempty singleton Tuples better (optimized out vs. 960 B allocs) 108 times less (50 ns vs. 5 μs) similar (232 ms vs. 450 ms) 2 times less (12 MB vs. 35 MB)
unrolled_unique(itr) Tuple(unique(itr)) Tuple 128 distinct nonempty singleton Tuples better (optimized out vs. 2 kB allocs) 464 times less (40 ns vs. 19 μs) similar (285 ms vs. 452 ms) similar (24 MB vs. 35 MB)
unrolled_unique(itr) Tuple(unique(itr)) Tuple 2 distinct nonempty non-singleton Tuples better (11 LLVM lines vs. 640 B allocs) 5 times less (60 ns vs. 350 ns) 3 times less (59 ms vs. 187 ms) 2 times less (5 MB vs. 11 MB)
unrolled_unique(itr) Tuple(unique(itr)) Tuple 4 distinct nonempty non-singleton Tuples better (17 LLVM lines vs. 1 kB allocs) 11 times less (60 ns vs. 701 ns) 2 times less (119 ms vs. 317 ms) 2 times less (10 MB vs. 20 MB)
unrolled_unique(itr) Tuple(unique(itr)) Tuple 8 distinct nonempty non-singleton Tuples better (39 LLVM lines vs. 3 kB allocs) 53 times less (60 ns vs. 3 μs) 3 times less (141 ms vs. 506 ms) similar (18 MB vs. 33 MB)
unrolled_unique(itr) Tuple(unique(itr)) Tuple 32 distinct nonempty non-singleton Tuples fewer allocs (784 B allocs vs. 34 kB allocs) 11 times less (801 ns vs. 10 μs) similar (424 ms vs. 503 ms) 2 times more (87 MB vs. 33 MB)
unrolled_unique(itr) Tuple(unique(itr)) Tuple 128 distinct nonempty non-singleton Tuples fewer allocs (784 B allocs vs. 525 kB allocs) 18 times less (3 μs vs. 62 μs) 9 times more (5 s vs. 512 ms) 27 times more (925 MB vs. 33 MB)
unrolled_allunique(length, itr) allunique(length, itr) Tuple 1 empty singleton Tuple similar (optimized out) similar (50 ns vs. 50 ns) 2 times more (71 ms vs. 26 ms) 262 times more (4 MB vs. 15 kB)
unrolled_allunique(length, itr) allunique(length, itr) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (50 ns vs. 50 ns) 2 times more (69 ms vs. 26 ms) 202 times more (4 MB vs. 20 kB)
unrolled_allunique(length, itr) allunique(length, itr) Tuple 1 nonempty non-singleton Tuple similar (optimized out) similar (50 ns vs. 40 ns) similar (47 ms vs. 26 ms) 232 times more (4 MB vs. 19 kB)
unrolled_allunique(length, itr) allunique(length, itr) Tuple 2 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) 2 times more (74 ms vs. 31 ms) 4 times more (4 MB vs. 1003 kB)
unrolled_allunique(length, itr) allunique(length, itr) Tuple 4 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) 3 times more (133 ms vs. 35 ms) 2 times more (6 MB vs. 3 MB)
unrolled_allunique(length, itr) allunique(length, itr) Tuple 8 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) 2 times more (134 ms vs. 48 ms) similar (7 MB vs. 9 MB)
unrolled_allunique(length, itr) allunique(length, itr) Tuple 32 identical nonempty singleton Tuples better (optimized out vs. 320 B allocs) 2 times less (50 ns vs. 120 ns) 2 times more (146 ms vs. 60 ms) 6 times more (13 MB vs. 2 MB)
unrolled_allunique(length, itr) allunique(length, itr) Tuple 128 identical nonempty singleton Tuples better (optimized out vs. 320 B allocs) 2 times less (50 ns vs. 130 ns) 3 times more (200 ms vs. 60 ms) 16 times more (34 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. 50 ns) similar (55 ms vs. 31 ms) 5 times more (5 MB vs. 981 kB)
unrolled_allunique(length, itr) allunique(length, itr) Tuple 4 identical nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) 3 times more (109 ms vs. 35 ms) 2 times more (8 MB vs. 3 MB)
unrolled_allunique(length, itr) allunique(length, itr) Tuple 8 identical nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) 2 times more (113 ms vs. 47 ms) similar (9 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) 3 times less (40 ns vs. 130 ns) 2 times more (132 ms vs. 53 ms) 10 times more (22 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) 2 times less (50 ns vs. 130 ns) 6 times more (320 ms vs. 51 ms) 59 times more (130 MB vs. 2 MB)
unrolled_allunique(length, itr) allunique(length, itr) Tuple 2 distinct empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) 2 times more (76 ms vs. 31 ms) 4 times more (4 MB vs. 1003 kB)
unrolled_allunique(length, itr) allunique(length, itr) Tuple 4 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) 4 times more (161 ms vs. 35 ms) 2 times more (7 MB vs. 3 MB)
unrolled_allunique(length, itr) allunique(length, itr) Tuple 8 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) 4 times more (221 ms vs. 47 ms) similar (9 MB vs. 9 MB)
unrolled_allunique(length, itr) allunique(length, itr) Tuple 32 distinct empty & nonempty singleton Tuples better (optimized out vs. 320 B allocs) 7 times less (40 ns vs. 280 ns) 3 times more (231 ms vs. 61 ms) 5 times more (12 MB vs. 2 MB)
unrolled_allunique(length, itr) allunique(length, itr) Tuple 128 distinct empty & nonempty singleton Tuples better (optimized out vs. 320 B allocs) 7 times less (40 ns vs. 280 ns) 4 times more (284 ms vs. 62 ms) 11 times more (24 MB vs. 2 MB)
unrolled_allunique(length, itr) allunique(length, itr) Tuple 2 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) 2 times more (77 ms vs. 33 ms) 4 times more (4 MB vs. 1008 kB)
unrolled_allunique(length, itr) allunique(length, itr) Tuple 4 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) 4 times more (168 ms vs. 35 ms) 2 times more (7 MB vs. 3 MB)
unrolled_allunique(length, itr) allunique(length, itr) Tuple 8 distinct nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) 4 times more (220 ms vs. 48 ms) similar (9 MB vs. 9 MB)
unrolled_allunique(length, itr) allunique(length, itr) Tuple 32 distinct nonempty singleton Tuples better (optimized out vs. 320 B allocs) 6 times less (40 ns vs. 270 ns) 3 times more (231 ms vs. 61 ms) 5 times more (12 MB vs. 2 MB)
unrolled_allunique(length, itr) allunique(length, itr) Tuple 128 distinct nonempty singleton Tuples better (optimized out vs. 320 B allocs) 5 times less (50 ns vs. 261 ns) 4 times more (288 ms vs. 63 ms) 11 times more (24 MB vs. 2 MB)
unrolled_allunique(length, itr) allunique(length, itr) Tuple 2 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (55 ms vs. 31 ms) 5 times more (5 MB vs. 1007 kB)
unrolled_allunique(length, itr) allunique(length, itr) Tuple 4 distinct nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) 3 times more (113 ms vs. 35 ms) 2 times more (9 MB vs. 3 MB)
unrolled_allunique(length, itr) allunique(length, itr) Tuple 8 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) 2 times more (126 ms vs. 47 ms) similar (16 MB vs. 9 MB)
unrolled_allunique(length, itr) allunique(length, itr) Tuple 32 distinct nonempty non-singleton Tuples better (optimized out vs. 8 kB allocs) 16 times less (40 ns vs. 641 ns) 2 times more (151 ms vs. 53 ms) 15 times more (33 MB vs. 2 MB)
unrolled_allunique(length, itr) allunique(length, itr) Tuple 128 distinct nonempty non-singleton Tuples better (optimized out vs. 29 kB allocs) 32 times less (50 ns vs. 2 μs) 7 times more (389 ms vs. 55 ms) 74 times more (168 MB vs. 2 MB)
unrolled_allequal(length, itr) allequal(length, itr) Tuple 1 empty singleton Tuple similar (optimized out) similar (50 ns vs. 40 ns) similar (43 ms vs. 26 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 (50 ns vs. 50 ns) similar (43 ms vs. 26 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 (50 ns vs. 50 ns) similar (36 ms vs. 26 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 (50 ns vs. 50 ns) similar (54 ms vs. 29 ms) 4 times more (858 kB vs. 194 kB)
unrolled_allequal(length, itr) allequal(length, itr) Tuple 4 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (55 ms vs. 33 ms) 3 times more (938 kB vs. 296 kB)
unrolled_allequal(length, itr) allequal(length, itr) Tuple 8 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) 2 times more (88 ms vs. 33 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 (50 ns vs. 50 ns) 2 times more (97 ms vs. 33 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 (50 ns vs. 50 ns) 4 times more (142 ms vs. 33 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 (50 ns vs. 50 ns) similar (38 ms vs. 29 ms) 5 times more (979 kB vs. 187 kB)
unrolled_allequal(length, itr) allequal(length, itr) Tuple 4 identical nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (39 ms vs. 33 ms) 2 times more (1 MB vs. 425 kB)
unrolled_allequal(length, itr) allequal(length, itr) Tuple 8 identical nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) 2 times more (70 ms vs. 34 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 (50 ns vs. 50 ns) 2 times more (74 ms vs. 34 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 (50 ns vs. 6 μs) 2 times more (90 ms vs. 38 ms) 21 times more (9 MB vs. 438 kB)
unrolled_allequal(length, itr) allequal(length, itr) Tuple 2 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (55 ms vs. 30 ms) 4 times more (855 kB vs. 192 kB)
unrolled_allequal(length, itr) allequal(length, itr) Tuple 4 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (55 ms vs. 30 ms) 5 times more (1 MB vs. 194 kB)
unrolled_allequal(length, itr) allequal(length, itr) Tuple 8 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) 2 times more (87 ms vs. 30 ms) 8 times more (2 MB vs. 195 kB)
unrolled_allequal(length, itr) allequal(length, itr) Tuple 32 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) 3 times more (95 ms vs. 30 ms) 13 times more (3 MB vs. 197 kB)
unrolled_allequal(length, itr) allequal(length, itr) Tuple 128 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) 4 times more (135 ms vs. 30 ms) 32 times more (7 MB vs. 208 kB)
unrolled_allequal(length, itr) allequal(length, itr) Tuple 2 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (55 ms vs. 29 ms) 4 times more (860 kB vs. 196 kB)
unrolled_allequal(length, itr) allequal(length, itr) Tuple 4 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (56 ms vs. 30 ms) 5 times more (1 MB vs. 198 kB)
unrolled_allequal(length, itr) allequal(length, itr) Tuple 8 distinct nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) 2 times more (87 ms vs. 29 ms) 8 times more (2 MB vs. 199 kB)
unrolled_allequal(length, itr) allequal(length, itr) Tuple 32 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) 3 times more (95 ms vs. 30 ms) 13 times more (3 MB vs. 202 kB)
unrolled_allequal(length, itr) allequal(length, itr) Tuple 128 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) 4 times more (141 ms vs. 30 ms) 32 times more (7 MB vs. 212 kB)
unrolled_allequal(length, itr) allequal(length, itr) Tuple 2 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (38 ms vs. 30 ms) 3 times more (1006 kB vs. 260 kB)
unrolled_allequal(length, itr) allequal(length, itr) Tuple 4 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (39 ms vs. 30 ms) 4 times more (1 MB vs. 287 kB)
unrolled_allequal(length, itr) allequal(length, itr) Tuple 8 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) 2 times more (70 ms vs. 29 ms) 6 times more (2 MB vs. 292 kB)
unrolled_allequal(length, itr) allequal(length, itr) Tuple 32 distinct nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) 2 times more (74 ms vs. 30 ms) 10 times more (4 MB vs. 331 kB)
unrolled_allequal(length, itr) allequal(length, itr) Tuple 128 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) 3 times more (93 ms vs. 31 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 (50 ns vs. 50 ns) similar (39 ms vs. 69 ms) 5 times less (366 kB vs. 2 MB)
unrolled_sum(length, itr) sum(length, itr) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (50 ns vs. 50 ns) similar (38 ms vs. 68 ms) 5 times less (399 kB vs. 2 MB)
unrolled_sum(length, itr) sum(length, itr) Tuple 1 nonempty non-singleton Tuple similar (optimized out) similar (50 ns vs. 50 ns) similar (30 ms vs. 42 ms) 5 times less (431 kB vs. 2 MB)
unrolled_sum(length, itr) sum(length, itr) Tuple 2 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (38 ms vs. 71 ms) 5 times less (422 kB vs. 2 MB)
unrolled_sum(length, itr) sum(length, itr) Tuple 4 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (82 ms vs. 74 ms) similar (2 MB vs. 2 MB)
unrolled_sum(length, itr) sum(length, itr) Tuple 8 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (83 ms vs. 71 ms) similar (2 MB vs. 2 MB)
unrolled_sum(length, itr) sum(length, itr) Tuple 32 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (87 ms vs. 72 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 (50 ns vs. 50 ns) similar (106 ms vs. 76 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 (40 ns vs. 50 ns) similar (30 ms vs. 42 ms) 5 times less (456 kB vs. 2 MB)
unrolled_sum(length, itr) sum(length, itr) Tuple 4 identical nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (74 ms vs. 42 ms) similar (2 MB vs. 3 MB)
unrolled_sum(length, itr) sum(length, itr) Tuple 8 identical nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) similar (75 ms vs. 43 ms) similar (3 MB vs. 3 MB)
unrolled_sum(length, itr) sum(length, itr) Tuple 32 identical nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (81 ms vs. 45 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 (50 ns vs. 50 ns) 2 times more (98 ms vs. 47 ms) 2 times more (7 MB vs. 3 MB)
unrolled_sum(length, itr) sum(length, itr) Tuple 2 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (38 ms vs. 72 ms) 5 times less (424 kB vs. 2 MB)
unrolled_sum(length, itr) sum(length, itr) Tuple 4 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (82 ms vs. 79 ms) similar (2 MB vs. 3 MB)
unrolled_sum(length, itr) sum(length, itr) Tuple 8 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (82 ms vs. 91 ms) similar (2 MB vs. 3 MB)
unrolled_sum(length, itr) sum(length, itr) Tuple 32 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (86 ms vs. 91 ms) similar (3 MB vs. 4 MB)
unrolled_sum(length, itr) sum(length, itr) Tuple 128 distinct empty & nonempty singleton Tuples better (optimized out vs. 26 LLVM lines) 28 times less (50 ns vs. 1 μs) similar (105 ms vs. 80 ms) similar (6 MB vs. 3 MB)
unrolled_sum(length, itr) sum(length, itr) Tuple 2 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (38 ms vs. 72 ms) 6 times less (428 kB vs. 3 MB)
unrolled_sum(length, itr) sum(length, itr) Tuple 4 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (84 ms vs. 80 ms) similar (2 MB vs. 3 MB)
unrolled_sum(length, itr) sum(length, itr) Tuple 8 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (82 ms vs. 92 ms) similar (2 MB vs. 3 MB)
unrolled_sum(length, itr) sum(length, itr) Tuple 32 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (87 ms vs. 92 ms) similar (3 MB vs. 4 MB)
unrolled_sum(length, itr) sum(length, itr) Tuple 128 distinct nonempty singleton Tuples better (optimized out vs. 26 LLVM lines) 27 times less (50 ns vs. 1 μs) similar (107 ms vs. 81 ms) similar (6 MB vs. 3 MB)
unrolled_sum(length, itr) sum(length, itr) Tuple 2 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (30 ms vs. 43 ms) 5 times less (482 kB vs. 3 MB)
unrolled_sum(length, itr) sum(length, itr) Tuple 4 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (74 ms vs. 44 ms) similar (2 MB vs. 3 MB)
unrolled_sum(length, itr) sum(length, itr) Tuple 8 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (75 ms vs. 45 ms) similar (3 MB vs. 4 MB)
unrolled_sum(length, itr) sum(length, itr) Tuple 32 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (79 ms vs. 46 ms) similar (3 MB vs. 4 MB)
unrolled_sum(length, itr) sum(length, itr) Tuple 128 distinct nonempty non-singleton Tuples better (optimized out vs. 521 kB allocs) 619 times less (40 ns vs. 25 μs) similar (103 ms vs. 54 ms) similar (7 MB vs. 4 MB)
unrolled_prod(length, itr) prod(length, itr) Tuple 1 empty singleton Tuple similar (optimized out) similar (50 ns vs. 50 ns) 2 times less (38 ms vs. 77 ms) 6 times less (366 kB vs. 2 MB)
unrolled_prod(length, itr) prod(length, itr) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (50 ns vs. 50 ns) 2 times less (38 ms vs. 76 ms) 5 times less (399 kB vs. 2 MB)
unrolled_prod(length, itr) prod(length, itr) Tuple 1 nonempty non-singleton Tuple similar (optimized out) similar (50 ns vs. 50 ns) similar (30 ms vs. 50 ms) 6 times less (431 kB vs. 3 MB)
unrolled_prod(length, itr) prod(length, itr) Tuple 2 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) 2 times less (38 ms vs. 80 ms) 5 times less (422 kB vs. 2 MB)
unrolled_prod(length, itr) prod(length, itr) Tuple 4 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) similar (81 ms vs. 80 ms) similar (2 MB vs. 2 MB)
unrolled_prod(length, itr) prod(length, itr) Tuple 8 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (82 ms vs. 80 ms) similar (2 MB vs. 3 MB)
unrolled_prod(length, itr) prod(length, itr) Tuple 32 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (89 ms vs. 82 ms) similar (3 MB vs. 3 MB)
unrolled_prod(length, itr) prod(length, itr) Tuple 128 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (112 ms vs. 84 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 (50 ns vs. 50 ns) similar (30 ms vs. 51 ms) 6 times less (456 kB vs. 3 MB)
unrolled_prod(length, itr) prod(length, itr) Tuple 4 identical nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (74 ms vs. 51 ms) similar (2 MB vs. 3 MB)
unrolled_prod(length, itr) prod(length, itr) Tuple 8 identical nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) similar (75 ms vs. 51 ms) similar (3 MB vs. 3 MB)
unrolled_prod(length, itr) prod(length, itr) Tuple 32 identical nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (82 ms vs. 54 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 (50 ns vs. 50 ns) similar (105 ms vs. 55 ms) 2 times more (7 MB vs. 3 MB)
unrolled_prod(length, itr) prod(length, itr) Tuple 2 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) 2 times less (39 ms vs. 80 ms) 6 times less (424 kB vs. 3 MB)
unrolled_prod(length, itr) prod(length, itr) Tuple 4 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (82 ms vs. 87 ms) similar (2 MB vs. 3 MB)
unrolled_prod(length, itr) prod(length, itr) Tuple 8 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (82 ms vs. 100 ms) similar (2 MB vs. 4 MB)
unrolled_prod(length, itr) prod(length, itr) Tuple 32 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (88 ms vs. 101 ms) similar (3 MB vs. 4 MB)
unrolled_prod(length, itr) prod(length, itr) Tuple 128 distinct empty & nonempty singleton Tuples better (optimized out vs. 19 LLVM lines) 27 times less (50 ns vs. 1 μs) similar (113 ms vs. 87 ms) similar (6 MB vs. 3 MB)
unrolled_prod(length, itr) prod(length, itr) Tuple 2 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) 2 times less (39 ms vs. 81 ms) 6 times less (428 kB vs. 3 MB)
unrolled_prod(length, itr) prod(length, itr) Tuple 4 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (85 ms vs. 90 ms) similar (2 MB vs. 3 MB)
unrolled_prod(length, itr) prod(length, itr) Tuple 8 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (83 ms vs. 100 ms) similar (2 MB vs. 4 MB)
unrolled_prod(length, itr) prod(length, itr) Tuple 32 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (88 ms vs. 101 ms) similar (3 MB vs. 4 MB)
unrolled_prod(length, itr) prod(length, itr) Tuple 128 distinct nonempty singleton Tuples better (optimized out vs. 26 LLVM lines) 27 times less (50 ns vs. 1 μs) similar (112 ms vs. 89 ms) similar (6 MB vs. 3 MB)
unrolled_prod(length, itr) prod(length, itr) Tuple 2 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (31 ms vs. 51 ms) 6 times less (482 kB vs. 3 MB)
unrolled_prod(length, itr) prod(length, itr) Tuple 4 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (74 ms vs. 53 ms) similar (2 MB vs. 4 MB)
unrolled_prod(length, itr) prod(length, itr) Tuple 8 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (76 ms vs. 54 ms) similar (3 MB vs. 4 MB)
unrolled_prod(length, itr) prod(length, itr) Tuple 32 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (81 ms vs. 55 ms) similar (3 MB vs. 5 MB)
unrolled_prod(length, itr) prod(length, itr) Tuple 128 distinct nonempty non-singleton Tuples better (optimized out vs. 521 kB allocs) 461 times less (50 ns vs. 23 μs) similar (106 ms vs. 60 ms) similar (7 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) 4 times less (40 ns vs. 160 ns) similar (38 ms vs. 69 ms) 5 times less (518 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) 3 times less (50 ns vs. 160 ns) similar (39 ms vs. 70 ms) 5 times less (551 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 (50 ns vs. 170 ns) similar (31 ms vs. 60 ms) 5 times less (583 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 (50 ns vs. 190 ns) similar (39 ms vs. 72 ms) 6 times less (587 kB vs. 4 MB)
unrolled_cumsum(length, itr) Tuple(cumsum(Iterators.map(length, itr))) Tuple 4 identical nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 144 B allocs) 6 times less (40 ns vs. 240 ns) similar (79 ms vs. 72 ms) 4 times less (798 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) 7 times less (50 ns vs. 350 ns) similar (80 ms vs. 72 ms) 3 times less (982 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) 20 times less (50 ns vs. 1 μs) similar (90 ms vs. 74 ms) similar (2 MB vs. 4 MB)
unrolled_cumsum(length, itr) Tuple(cumsum(Iterators.map(length, itr))) Tuple 128 identical nonempty singleton Tuples better (69 LLVM lines w/ Const vs. 2 kB allocs) 47 times less (80 ns vs. 4 μs) 5 times more (427 ms vs. 76 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) 4 times less (40 ns vs. 190 ns) similar (31 ms vs. 62 ms) 6 times less (622 kB vs. 4 MB)
unrolled_cumsum(length, itr) Tuple(cumsum(Iterators.map(length, itr))) Tuple 4 identical nonempty non-singleton Tuples better (7 LLVM lines w/ Const vs. 144 B allocs) 4 times less (50 ns vs. 240 ns) similar (71 ms vs. 63 ms) 4 times less (867 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) 7 times less (50 ns vs. 360 ns) similar (73 ms vs. 64 ms) 3 times less (1 MB 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) 25 times less (40 ns vs. 1 μs) similar (82 ms vs. 65 ms) similar (2 MB vs. 4 MB)
unrolled_cumsum(length, itr) Tuple(cumsum(Iterators.map(length, itr))) Tuple 128 identical nonempty non-singleton Tuples better (69 LLVM lines w/ Const vs. 2 kB allocs) 47 times less (80 ns vs. 4 μs) 6 times more (413 ms vs. 67 ms) 2 times more (9 MB vs. 4 MB)
unrolled_cumsum(length, itr) Tuple(cumsum(Iterators.map(length, itr))) Tuple 2 distinct empty & nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 112 B allocs) 4 times less (50 ns vs. 210 ns) similar (40 ms vs. 74 ms) 6 times less (589 kB vs. 4 MB)
unrolled_cumsum(length, itr) Tuple(cumsum(Iterators.map(length, itr))) Tuple 4 distinct empty & nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 144 B allocs) 5 times less (50 ns vs. 290 ns) similar (79 ms vs. 75 ms) 4 times less (810 kB vs. 4 MB)
unrolled_cumsum(length, itr) Tuple(cumsum(Iterators.map(length, itr))) Tuple 8 distinct empty & nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 208 B allocs) 9 times less (50 ns vs. 460 ns) similar (93 ms vs. 77 ms) 3 times less (1006 kB vs. 4 MB)
unrolled_cumsum(length, itr) Tuple(cumsum(Iterators.map(length, itr))) Tuple 32 distinct empty & nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 592 B allocs) 27 times less (50 ns vs. 1 μs) similar (89 ms vs. 74 ms) similar (2 MB vs. 4 MB)
unrolled_cumsum(length, itr) Tuple(cumsum(Iterators.map(length, itr))) Tuple 128 distinct empty & nonempty singleton Tuples better (69 LLVM lines w/ Const vs. 2 kB allocs) 64 times less (80 ns vs. 5 μs) 5 times more (421 ms vs. 76 ms) 2 times more (8 MB vs. 4 MB)
unrolled_cumsum(length, itr) Tuple(cumsum(Iterators.map(length, itr))) Tuple 2 distinct nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 112 B allocs) 4 times less (50 ns vs. 210 ns) similar (40 ms vs. 74 ms) 6 times less (594 kB vs. 4 MB)
unrolled_cumsum(length, itr) Tuple(cumsum(Iterators.map(length, itr))) Tuple 4 distinct nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 144 B allocs) 5 times less (50 ns vs. 280 ns) similar (81 ms vs. 75 ms) 4 times less (814 kB vs. 4 MB)
unrolled_cumsum(length, itr) Tuple(cumsum(Iterators.map(length, itr))) Tuple 8 distinct nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 208 B allocs) 8 times less (50 ns vs. 440 ns) similar (99 ms vs. 77 ms) 3 times less (1010 kB vs. 4 MB)
unrolled_cumsum(length, itr) Tuple(cumsum(Iterators.map(length, itr))) Tuple 32 distinct nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 592 B allocs) 27 times less (50 ns vs. 1 μs) similar (89 ms vs. 76 ms) similar (2 MB vs. 4 MB)
unrolled_cumsum(length, itr) Tuple(cumsum(Iterators.map(length, itr))) Tuple 128 distinct nonempty singleton Tuples better (69 LLVM lines w/ Const vs. 2 kB allocs) 64 times less (80 ns vs. 5 μs) 5 times more (425 ms vs. 75 ms) 2 times more (8 MB vs. 4 MB)
unrolled_cumsum(length, itr) Tuple(cumsum(Iterators.map(length, itr))) Tuple 2 distinct nonempty non-singleton Tuples better (7 LLVM lines w/ Const vs. 176 B allocs) 5 times less (40 ns vs. 220 ns) 2 times less (31 ms vs. 64 ms) 6 times less (647 kB vs. 4 MB)
unrolled_cumsum(length, itr) Tuple(cumsum(Iterators.map(length, itr))) Tuple 4 distinct nonempty non-singleton Tuples better (7 LLVM lines w/ Const vs. 544 B allocs) 6 times less (50 ns vs. 330 ns) similar (72 ms vs. 66 ms) 4 times less (867 kB vs. 4 MB)
unrolled_cumsum(length, itr) Tuple(cumsum(Iterators.map(length, itr))) Tuple 8 distinct nonempty non-singleton Tuples better (7 LLVM lines w/ Const vs. 2 kB allocs) 11 times less (50 ns vs. 580 ns) similar (73 ms vs. 70 ms) 3 times less (1 MB vs. 4 MB)
unrolled_cumsum(length, itr) Tuple(cumsum(Iterators.map(length, itr))) Tuple 32 distinct nonempty non-singleton Tuples better (7 LLVM lines w/ Const vs. 32 kB allocs) 65 times less (50 ns vs. 3 μs) similar (82 ms vs. 66 ms) similar (2 MB vs. 4 MB)
unrolled_cumsum(length, itr) Tuple(cumsum(Iterators.map(length, itr))) Tuple 128 distinct nonempty non-singleton Tuples better (69 LLVM lines w/ Const vs. 523 kB allocs) 348 times less (80 ns vs. 28 μs) 6 times more (417 ms vs. 66 ms) similar (9 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 (50 ns vs. 160 ns) similar (39 ms vs. 73 ms) 5 times less (518 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) 3 times less (50 ns vs. 160 ns) similar (39 ms vs. 73 ms) 5 times less (551 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 (50 ns vs. 160 ns) 2 times less (31 ms vs. 64 ms) 5 times less (583 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) 4 times less (40 ns vs. 180 ns) similar (39 ms vs. 76 ms) 6 times less (587 kB vs. 4 MB)
unrolled_cumprod(length, itr) Tuple(cumprod(Iterators.map(length, itr))) Tuple 4 identical nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 144 B allocs) 4 times less (50 ns vs. 240 ns) similar (79 ms vs. 75 ms) 4 times less (798 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) 7 times less (50 ns vs. 350 ns) similar (81 ms vs. 76 ms) 3 times less (982 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) 20 times less (50 ns vs. 1 μs) similar (91 ms vs. 77 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 (69 LLVM lines w/ Const vs. 2 kB allocs) 54 times less (70 ns vs. 4 μs) 5 times more (426 ms vs. 81 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) 3 times less (50 ns vs. 190 ns) 2 times less (31 ms vs. 66 ms) 6 times less (622 kB vs. 4 MB)
unrolled_cumprod(length, itr) Tuple(cumprod(Iterators.map(length, itr))) Tuple 4 identical nonempty non-singleton Tuples better (7 LLVM lines w/ Const vs. 144 B allocs) 4 times less (50 ns vs. 240 ns) similar (72 ms vs. 66 ms) 4 times less (867 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) 8 times less (40 ns vs. 350 ns) similar (73 ms vs. 67 ms) 3 times less (1 MB 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) 25 times less (40 ns vs. 1 μs) similar (83 ms vs. 69 ms) similar (2 MB vs. 4 MB)
unrolled_cumprod(length, itr) Tuple(cumprod(Iterators.map(length, itr))) Tuple 128 identical nonempty non-singleton Tuples better (69 LLVM lines w/ Const vs. 2 kB allocs) 47 times less (80 ns vs. 4 μs) 6 times more (424 ms vs. 69 ms) 2 times more (9 MB vs. 4 MB)
unrolled_cumprod(length, itr) Tuple(cumprod(Iterators.map(length, itr))) Tuple 2 distinct empty & nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 112 B allocs) 4 times less (50 ns vs. 200 ns) similar (39 ms vs. 77 ms) 6 times less (589 kB vs. 4 MB)
unrolled_cumprod(length, itr) Tuple(cumprod(Iterators.map(length, itr))) Tuple 4 distinct empty & nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 144 B allocs) 5 times less (50 ns vs. 280 ns) similar (78 ms vs. 78 ms) 4 times less (810 kB vs. 4 MB)
unrolled_cumprod(length, itr) Tuple(cumprod(Iterators.map(length, itr))) Tuple 8 distinct empty & nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 208 B allocs) 9 times less (50 ns vs. 450 ns) similar (80 ms vs. 78 ms) 3 times less (1006 kB vs. 4 MB)
unrolled_cumprod(length, itr) Tuple(cumprod(Iterators.map(length, itr))) Tuple 32 distinct empty & nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 592 B allocs) 27 times less (50 ns vs. 1 μs) similar (90 ms vs. 78 ms) 2 times less (2 MB vs. 4 MB)
unrolled_cumprod(length, itr) Tuple(cumprod(Iterators.map(length, itr))) Tuple 128 distinct empty & nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 2 kB allocs) 63 times less (80 ns vs. 5 μs) 5 times more (417 ms vs. 78 ms) 2 times more (8 MB vs. 4 MB)
unrolled_cumprod(length, itr) Tuple(cumprod(Iterators.map(length, itr))) Tuple 2 distinct nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 112 B allocs) 4 times less (50 ns vs. 200 ns) similar (40 ms vs. 78 ms) 6 times less (594 kB vs. 4 MB)
unrolled_cumprod(length, itr) Tuple(cumprod(Iterators.map(length, itr))) Tuple 4 distinct nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 144 B allocs) 5 times less (50 ns vs. 280 ns) similar (79 ms vs. 79 ms) 4 times less (814 kB vs. 4 MB)
unrolled_cumprod(length, itr) Tuple(cumprod(Iterators.map(length, itr))) Tuple 8 distinct nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 256 B allocs) 9 times less (50 ns vs. 451 ns) similar (80 ms vs. 80 ms) 3 times less (1010 kB vs. 4 MB)
unrolled_cumprod(length, itr) Tuple(cumprod(Iterators.map(length, itr))) Tuple 32 distinct nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 1 kB allocs) 38 times less (40 ns vs. 2 μs) similar (89 ms vs. 80 ms) 2 times less (2 MB vs. 4 MB)
unrolled_cumprod(length, itr) Tuple(cumprod(Iterators.map(length, itr))) Tuple 128 distinct nonempty singleton Tuples better (65 LLVM lines w/ Const vs. 4 kB allocs) 70 times less (80 ns vs. 6 μs) 5 times more (430 ms vs. 79 ms) 2 times more (8 MB vs. 4 MB)
unrolled_cumprod(length, itr) Tuple(cumprod(Iterators.map(length, itr))) Tuple 2 distinct nonempty non-singleton Tuples better (7 LLVM lines w/ Const vs. 176 B allocs) 4 times less (50 ns vs. 210 ns) 2 times less (31 ms vs. 68 ms) 6 times less (647 kB vs. 4 MB)
unrolled_cumprod(length, itr) Tuple(cumprod(Iterators.map(length, itr))) Tuple 4 distinct nonempty non-singleton Tuples better (7 LLVM lines w/ Const vs. 544 B allocs) 6 times less (50 ns vs. 330 ns) similar (72 ms vs. 70 ms) 4 times less (867 kB vs. 4 MB)
unrolled_cumprod(length, itr) Tuple(cumprod(Iterators.map(length, itr))) Tuple 8 distinct nonempty non-singleton Tuples better (7 LLVM lines w/ Const vs. 2 kB allocs) 11 times less (50 ns vs. 591 ns) similar (76 ms vs. 74 ms) 3 times less (1 MB vs. 4 MB)
unrolled_cumprod(length, itr) Tuple(cumprod(Iterators.map(length, itr))) Tuple 32 distinct nonempty non-singleton Tuples better (7 LLVM lines w/ Const vs. 33 kB allocs) 62 times less (50 ns vs. 3 μs) similar (82 ms vs. 70 ms) similar (2 MB vs. 4 MB)
unrolled_cumprod(length, itr) Tuple(cumprod(Iterators.map(length, itr))) Tuple 128 distinct nonempty non-singleton Tuples better (65 LLVM lines w/ Const vs. 525 kB allocs) 369 times less (80 ns vs. 30 μs) 5 times more (421 ms vs. 71 ms) similar (9 MB vs. 5 MB)
unrolled_count(!isempty, itr) count(!isempty, itr) Tuple 1 empty singleton Tuple similar (optimized out) similar (50 ns vs. 50 ns) 2 times less (38 ms vs. 78 ms) 7 times less (500 kB vs. 4 MB)
unrolled_count(!isempty, itr) count(!isempty, itr) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (40 ns vs. 50 ns) 2 times less (38 ms vs. 77 ms) 6 times less (535 kB vs. 4 MB)
unrolled_count(!isempty, itr) count(!isempty, itr) Tuple 1 nonempty non-singleton Tuple similar (optimized out) similar (50 ns vs. 50 ns) similar (30 ms vs. 51 ms) 6 times less (565 kB vs. 4 MB)
unrolled_count(!isempty, itr) count(!isempty, itr) Tuple 2 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) 2 times less (39 ms vs. 78 ms) 5 times less (683 kB vs. 4 MB)
unrolled_count(!isempty, itr) count(!isempty, itr) Tuple 4 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (83 ms vs. 78 ms) similar (3 MB vs. 4 MB)
unrolled_count(!isempty, itr) count(!isempty, itr) Tuple 8 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (84 ms vs. 78 ms) similar (3 MB vs. 4 MB)
unrolled_count(!isempty, itr) count(!isempty, itr) Tuple 32 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (91 ms vs. 80 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 (40 ns vs. 50 ns) similar (121 ms vs. 78 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 (50 ns vs. 50 ns) similar (31 ms vs. 50 ms) 5 times less (718 kB vs. 4 MB)
unrolled_count(!isempty, itr) count(!isempty, itr) Tuple 4 identical nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (75 ms vs. 51 ms) similar (3 MB vs. 4 MB)
unrolled_count(!isempty, itr) count(!isempty, itr) Tuple 8 identical nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (77 ms vs. 52 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. 50 ns) similar (84 ms vs. 55 ms) similar (6 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 (50 ns vs. 50 ns) 2 times more (112 ms vs. 53 ms) 4 times more (16 MB vs. 4 MB)
unrolled_count(!isempty, itr) count(!isempty, itr) Tuple 2 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (40 ms vs. 79 ms) 5 times less (736 kB vs. 4 MB)
unrolled_count(!isempty, itr) count(!isempty, itr) Tuple 4 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (83 ms vs. 80 ms) similar (3 MB vs. 5 MB)
unrolled_count(!isempty, itr) count(!isempty, itr) Tuple 8 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (85 ms vs. 81 ms) similar (3 MB vs. 5 MB)
unrolled_count(!isempty, itr) count(!isempty, itr) Tuple 32 distinct empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) similar (92 ms vs. 83 ms) similar (6 MB vs. 6 MB)
unrolled_count(!isempty, itr) count(!isempty, itr) Tuple 128 distinct empty & nonempty singleton Tuples better (optimized out vs. 25 LLVM lines) 27 times less (50 ns vs. 1 μs) similar (122 ms vs. 84 ms) 3 times more (15 MB vs. 5 MB)
unrolled_count(!isempty, itr) count(!isempty, itr) Tuple 2 distinct nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) 2 times less (39 ms vs. 79 ms) 5 times less (740 kB vs. 4 MB)
unrolled_count(!isempty, itr) count(!isempty, itr) Tuple 4 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (83 ms vs. 80 ms) similar (3 MB vs. 5 MB)
unrolled_count(!isempty, itr) count(!isempty, itr) Tuple 8 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (85 ms vs. 81 ms) similar (3 MB vs. 5 MB)
unrolled_count(!isempty, itr) count(!isempty, itr) Tuple 32 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (91 ms vs. 83 ms) similar (6 MB vs. 6 MB)
unrolled_count(!isempty, itr) count(!isempty, itr) Tuple 128 distinct nonempty singleton Tuples better (optimized out vs. 25 LLVM lines) 33 times less (40 ns vs. 1 μs) similar (122 ms vs. 84 ms) 3 times more (15 MB vs. 5 MB)
unrolled_count(!isempty, itr) count(!isempty, itr) Tuple 2 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (31 ms vs. 52 ms) 5 times less (800 kB vs. 4 MB)
unrolled_count(!isempty, itr) count(!isempty, itr) Tuple 4 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (75 ms vs. 53 ms) similar (3 MB vs. 5 MB)
unrolled_count(!isempty, itr) count(!isempty, itr) Tuple 8 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (79 ms vs. 55 ms) similar (4 MB vs. 6 MB)
unrolled_count(!isempty, itr) count(!isempty, itr) Tuple 32 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (84 ms vs. 57 ms) similar (6 MB vs. 7 MB)
unrolled_count(!isempty, itr) count(!isempty, itr) Tuple 128 distinct nonempty non-singleton Tuples better (optimized out vs. 521 kB allocs) 474 times less (50 ns vs. 24 μs) similar (115 ms vs. 60 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 (50 ns vs. 40 ns) similar (39 ms vs. 74 ms) 6 times less (353 kB vs. 2 MB)
unrolled_maximum(length, itr) maximum(length, itr) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (50 ns vs. 50 ns) similar (38 ms vs. 73 ms) 5 times less (385 kB vs. 2 MB)
unrolled_maximum(length, itr) maximum(length, itr) Tuple 1 nonempty non-singleton Tuple similar (optimized out) similar (50 ns vs. 50 ns) similar (30 ms vs. 47 ms) 6 times less (417 kB vs. 2 MB)
unrolled_maximum(length, itr) maximum(length, itr) Tuple 2 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (38 ms vs. 76 ms) 5 times less (411 kB vs. 2 MB)
unrolled_maximum(length, itr) maximum(length, itr) Tuple 4 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (81 ms vs. 77 ms) similar (2 MB vs. 2 MB)
unrolled_maximum(length, itr) maximum(length, itr) Tuple 8 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (85 ms vs. 76 ms) similar (2 MB vs. 2 MB)
unrolled_maximum(length, itr) maximum(length, itr) Tuple 32 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (88 ms vs. 77 ms) similar (3 MB vs. 3 MB)
unrolled_maximum(length, itr) maximum(length, itr) Tuple 128 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (106 ms vs. 80 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. 50 ns) similar (30 ms vs. 47 ms) 5 times less (445 kB vs. 3 MB)
unrolled_maximum(length, itr) maximum(length, itr) Tuple 4 identical nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (74 ms vs. 47 ms) similar (2 MB vs. 3 MB)
unrolled_maximum(length, itr) maximum(length, itr) Tuple 8 identical nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (77 ms vs. 49 ms) similar (3 MB vs. 3 MB)
unrolled_maximum(length, itr) maximum(length, itr) Tuple 32 identical nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (79 ms vs. 49 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 (50 ns vs. 50 ns) similar (100 ms vs. 51 ms) 2 times more (7 MB vs. 3 MB)
unrolled_maximum(length, itr) maximum(length, itr) Tuple 2 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (39 ms vs. 77 ms) 6 times less (413 kB vs. 3 MB)
unrolled_maximum(length, itr) maximum(length, itr) Tuple 4 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (81 ms vs. 84 ms) similar (2 MB vs. 3 MB)
unrolled_maximum(length, itr) maximum(length, itr) Tuple 8 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (82 ms vs. 97 ms) similar (2 MB vs. 3 MB)
unrolled_maximum(length, itr) maximum(length, itr) Tuple 32 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (87 ms vs. 98 ms) similar (3 MB vs. 4 MB)
unrolled_maximum(length, itr) maximum(length, itr) Tuple 128 distinct empty & nonempty singleton Tuples better (optimized out vs. 26 LLVM lines) 28 times less (50 ns vs. 1 μs) similar (109 ms vs. 86 ms) similar (6 MB vs. 3 MB)
unrolled_maximum(length, itr) maximum(length, itr) Tuple 2 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (43 ms vs. 78 ms) 6 times less (417 kB vs. 3 MB)
unrolled_maximum(length, itr) maximum(length, itr) Tuple 4 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (82 ms vs. 85 ms) similar (2 MB vs. 3 MB)
unrolled_maximum(length, itr) maximum(length, itr) Tuple 8 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (82 ms vs. 97 ms) similar (2 MB vs. 3 MB)
unrolled_maximum(length, itr) maximum(length, itr) Tuple 32 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (87 ms vs. 99 ms) similar (3 MB vs. 4 MB)
unrolled_maximum(length, itr) maximum(length, itr) Tuple 128 distinct nonempty singleton Tuples better (optimized out vs. 26 LLVM lines) 27 times less (50 ns vs. 1 μs) similar (108 ms vs. 87 ms) similar (6 MB vs. 3 MB)
unrolled_maximum(length, itr) maximum(length, itr) Tuple 2 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (30 ms vs. 48 ms) 6 times less (471 kB vs. 3 MB)
unrolled_maximum(length, itr) maximum(length, itr) Tuple 4 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (74 ms vs. 49 ms) similar (2 MB vs. 3 MB)
unrolled_maximum(length, itr) maximum(length, itr) Tuple 8 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (75 ms vs. 51 ms) similar (3 MB vs. 4 MB)
unrolled_maximum(length, itr) maximum(length, itr) Tuple 32 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (80 ms vs. 52 ms) similar (3 MB vs. 5 MB)
unrolled_maximum(length, itr) maximum(length, itr) Tuple 128 distinct nonempty non-singleton Tuples better (optimized out vs. 521 kB allocs) 477 times less (50 ns vs. 24 μs) similar (104 ms vs. 60 ms) similar (7 MB vs. 4 MB)
unrolled_minimum(length, itr) minimum(length, itr) Tuple 1 empty singleton Tuple similar (optimized out) similar (40 ns vs. 50 ns) similar (38 ms vs. 74 ms) 6 times less (353 kB vs. 2 MB)
unrolled_minimum(length, itr) minimum(length, itr) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (50 ns vs. 50 ns) similar (38 ms vs. 73 ms) 5 times less (385 kB vs. 2 MB)
unrolled_minimum(length, itr) minimum(length, itr) Tuple 1 nonempty non-singleton Tuple similar (optimized out) similar (50 ns vs. 50 ns) similar (30 ms vs. 47 ms) 6 times less (417 kB vs. 3 MB)
unrolled_minimum(length, itr) minimum(length, itr) Tuple 2 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (38 ms vs. 76 ms) 5 times less (411 kB vs. 2 MB)
unrolled_minimum(length, itr) minimum(length, itr) Tuple 4 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) similar (82 ms vs. 77 ms) similar (2 MB vs. 2 MB)
unrolled_minimum(length, itr) minimum(length, itr) Tuple 8 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (83 ms vs. 76 ms) similar (2 MB vs. 2 MB)
unrolled_minimum(length, itr) minimum(length, itr) Tuple 32 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (88 ms vs. 78 ms) similar (3 MB vs. 3 MB)
unrolled_minimum(length, itr) minimum(length, itr) Tuple 128 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (106 ms vs. 80 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 (50 ns vs. 50 ns) similar (30 ms vs. 47 ms) 6 times less (445 kB vs. 3 MB)
unrolled_minimum(length, itr) minimum(length, itr) Tuple 4 identical nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (74 ms vs. 48 ms) similar (2 MB vs. 3 MB)
unrolled_minimum(length, itr) minimum(length, itr) Tuple 8 identical nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (79 ms vs. 48 ms) similar (3 MB vs. 3 MB)
unrolled_minimum(length, itr) minimum(length, itr) Tuple 32 identical nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (80 ms vs. 50 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 (50 ns vs. 50 ns) similar (99 ms vs. 52 ms) 2 times more (7 MB vs. 3 MB)
unrolled_minimum(length, itr) minimum(length, itr) Tuple 2 distinct empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) similar (39 ms vs. 77 ms) 6 times less (413 kB vs. 3 MB)
unrolled_minimum(length, itr) minimum(length, itr) Tuple 4 distinct empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) similar (82 ms vs. 84 ms) similar (2 MB vs. 3 MB)
unrolled_minimum(length, itr) minimum(length, itr) Tuple 8 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (82 ms vs. 96 ms) similar (2 MB vs. 3 MB)
unrolled_minimum(length, itr) minimum(length, itr) Tuple 32 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (87 ms vs. 98 ms) similar (3 MB vs. 4 MB)
unrolled_minimum(length, itr) minimum(length, itr) Tuple 128 distinct empty & nonempty singleton Tuples better (optimized out vs. 26 LLVM lines) 28 times less (50 ns vs. 1 μs) similar (108 ms vs. 85 ms) similar (6 MB vs. 3 MB)
unrolled_minimum(length, itr) minimum(length, itr) Tuple 2 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) 2 times less (38 ms vs. 78 ms) 6 times less (417 kB vs. 3 MB)
unrolled_minimum(length, itr) minimum(length, itr) Tuple 4 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (82 ms vs. 85 ms) similar (2 MB vs. 3 MB)
unrolled_minimum(length, itr) minimum(length, itr) Tuple 8 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (83 ms vs. 97 ms) similar (2 MB vs. 4 MB)
unrolled_minimum(length, itr) minimum(length, itr) Tuple 32 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (87 ms vs. 99 ms) similar (3 MB vs. 4 MB)
unrolled_minimum(length, itr) minimum(length, itr) Tuple 128 distinct nonempty singleton Tuples better (optimized out vs. 26 LLVM lines) 27 times less (50 ns vs. 1 μs) similar (111 ms vs. 87 ms) similar (6 MB vs. 3 MB)
unrolled_minimum(length, itr) minimum(length, itr) Tuple 2 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (30 ms vs. 48 ms) 6 times less (471 kB vs. 3 MB)
unrolled_minimum(length, itr) minimum(length, itr) Tuple 4 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (74 ms vs. 49 ms) similar (2 MB vs. 4 MB)
unrolled_minimum(length, itr) minimum(length, itr) Tuple 8 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (77 ms vs. 51 ms) similar (3 MB vs. 4 MB)
unrolled_minimum(length, itr) minimum(length, itr) Tuple 32 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (80 ms vs. 51 ms) similar (3 MB vs. 5 MB)
unrolled_minimum(length, itr) minimum(length, itr) Tuple 128 distinct nonempty non-singleton Tuples better (optimized out vs. 521 kB allocs) 477 times less (50 ns vs. 24 μs) similar (102 ms vs. 58 ms) similar (7 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. 50 ns) 2 times less (38 ms vs. 82 ms) 9 times less (366 kB vs. 3 MB)
unrolled_extrema(length, itr) extrema(length, itr) Tuple 1 nonempty singleton Tuple similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) 2 times less (38 ms vs. 83 ms) 8 times less (403 kB vs. 3 MB)
unrolled_extrema(length, itr) extrema(length, itr) Tuple 1 nonempty non-singleton Tuple similar (7 LLVM lines w/ Const) similar (40 ns vs. 50 ns) similar (30 ms vs. 56 ms) 8 times less (431 kB vs. 4 MB)
unrolled_extrema(length, itr) extrema(length, itr) Tuple 2 identical nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 50 ns) 2 times less (40 ms vs. 87 ms) 6 times less (557 kB vs. 4 MB)
unrolled_extrema(length, itr) extrema(length, itr) Tuple 4 identical nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (83 ms vs. 87 ms) similar (2 MB vs. 4 MB)
unrolled_extrema(length, itr) extrema(length, itr) Tuple 8 identical nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (84 ms vs. 87 ms) similar (3 MB vs. 4 MB)
unrolled_extrema(length, itr) extrema(length, itr) Tuple 32 identical nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (95 ms vs. 88 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 (50 ns vs. 60 ns) similar (144 ms vs. 91 ms) 2 times more (9 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 (50 ns vs. 50 ns) similar (31 ms vs. 57 ms) 6 times less (589 kB vs. 4 MB)
unrolled_extrema(length, itr) extrema(length, itr) Tuple 4 identical nonempty non-singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (75 ms vs. 57 ms) similar (3 MB vs. 4 MB)
unrolled_extrema(length, itr) extrema(length, itr) Tuple 8 identical nonempty non-singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (78 ms vs. 58 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 (50 ns vs. 50 ns) similar (87 ms vs. 59 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 (50 ns vs. 60 ns) 2 times more (137 ms vs. 62 ms) 2 times more (9 MB vs. 4 MB)
unrolled_extrema(length, itr) extrema(length, itr) Tuple 2 distinct empty & nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 40 ns) 2 times less (40 ms vs. 88 ms) 7 times less (562 kB vs. 4 MB)
unrolled_extrema(length, itr) extrema(length, itr) Tuple 4 distinct empty & nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (83 ms vs. 96 ms) similar (3 MB vs. 5 MB)
unrolled_extrema(length, itr) extrema(length, itr) Tuple 8 distinct empty & nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 40 ns) similar (85 ms vs. 113 ms) similar (3 MB vs. 5 MB)
unrolled_extrema(length, itr) extrema(length, itr) Tuple 32 distinct empty & nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (95 ms vs. 114 ms) similar (4 MB vs. 5 MB)
unrolled_extrema(length, itr) extrema(length, itr) Tuple 128 distinct empty & nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 31 LLVM lines) 36 times less (40 ns vs. 1 μs) similar (146 ms vs. 115 ms) similar (9 MB vs. 5 MB)
unrolled_extrema(length, itr) extrema(length, itr) Tuple 2 distinct nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) 2 times less (40 ms vs. 89 ms) 7 times less (567 kB vs. 4 MB)
unrolled_extrema(length, itr) extrema(length, itr) Tuple 4 distinct nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (83 ms vs. 96 ms) similar (3 MB vs. 5 MB)
unrolled_extrema(length, itr) extrema(length, itr) Tuple 8 distinct nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (85 ms vs. 113 ms) similar (3 MB vs. 5 MB)
unrolled_extrema(length, itr) extrema(length, itr) Tuple 32 distinct nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 40 ns) similar (96 ms vs. 114 ms) similar (4 MB vs. 5 MB)
unrolled_extrema(length, itr) extrema(length, itr) Tuple 128 distinct nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 31 LLVM lines) 28 times less (50 ns vs. 1 μs) similar (146 ms vs. 97 ms) similar (9 MB vs. 5 MB)
unrolled_extrema(length, itr) extrema(length, itr) Tuple 2 distinct nonempty non-singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (31 ms vs. 59 ms) 7 times less (622 kB vs. 4 MB)
unrolled_extrema(length, itr) extrema(length, itr) Tuple 4 distinct nonempty non-singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (75 ms vs. 59 ms) similar (3 MB vs. 5 MB)
unrolled_extrema(length, itr) extrema(length, itr) Tuple 8 distinct nonempty non-singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (78 ms vs. 65 ms) similar (3 MB vs. 5 MB)
unrolled_extrema(length, itr) extrema(length, itr) Tuple 32 distinct nonempty non-singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (88 ms vs. 61 ms) similar (4 MB vs. 6 MB)
unrolled_extrema(length, itr) extrema(length, itr) Tuple 128 distinct nonempty non-singleton Tuples better (7 LLVM lines w/ Const vs. 521 kB allocs) 465 times less (50 ns vs. 23 μs) similar (139 ms vs. 70 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 (50 ns vs. 50 ns) similar (46 ms vs. 65 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 (40 ns vs. 50 ns) similar (46 ms vs. 66 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 (50 ns vs. 50 ns) similar (31 ms vs. 62 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 (50 ns vs. 60 ns) similar (47 ms vs. 65 ms) 6 times less (789 kB vs. 5 MB)
unrolled_findmax(length, itr) findmax(length, itr) Tuple 4 identical nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (92 ms vs. 67 ms) similar (3 MB vs. 5 MB)
unrolled_findmax(length, itr) findmax(length, itr) Tuple 8 identical nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 60 ns) similar (94 ms vs. 67 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 (50 ns vs. 60 ns) similar (108 ms vs. 67 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 (50 ns vs. 50 ns) 2 times more (190 ms vs. 68 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 (50 ns vs. 50 ns) similar (32 ms vs. 63 ms) 5 times less (897 kB vs. 5 MB)
unrolled_findmax(length, itr) findmax(length, itr) Tuple 4 identical nonempty non-singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (80 ms vs. 83 ms) similar (3 MB vs. 5 MB)
unrolled_findmax(length, itr) findmax(length, itr) Tuple 8 identical nonempty non-singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 60 ns) similar (79 ms vs. 65 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 (50 ns vs. 50 ns) similar (92 ms vs. 67 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 (40 ns vs. 60 ns) 2 times more (178 ms vs. 65 ms) 2 times more (12 MB vs. 5 MB)
unrolled_findmax(length, itr) findmax(length, itr) Tuple 2 distinct empty & nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 26 LLVM lines) similar (50 ns vs. 70 ns) similar (51 ms vs. 69 ms) 6 times less (852 kB vs. 5 MB)
unrolled_findmax(length, itr) findmax(length, itr) Tuple 4 distinct empty & nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 42 LLVM lines) 2 times less (50 ns vs. 100 ns) similar (103 ms vs. 69 ms) similar (3 MB vs. 6 MB)
unrolled_findmax(length, itr) findmax(length, itr) Tuple 8 distinct empty & nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 86 LLVM lines) 2 times less (50 ns vs. 140 ns) similar (117 ms vs. 69 ms) similar (4 MB vs. 6 MB)
unrolled_findmax(length, itr) findmax(length, itr) Tuple 32 distinct empty & nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 32 LLVM lines) 7 times less (50 ns vs. 390 ns) similar (130 ms vs. 71 ms) similar (5 MB vs. 6 MB)
unrolled_findmax(length, itr) findmax(length, itr) Tuple 128 distinct empty & nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 32 LLVM lines) 35 times less (40 ns vs. 1 μs) 3 times more (216 ms vs. 71 ms) 2 times more (11 MB vs. 6 MB)
unrolled_findmax(length, itr) findmax(length, itr) Tuple 2 distinct nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 26 LLVM lines) similar (50 ns vs. 70 ns) similar (51 ms vs. 69 ms) 5 times less (932 kB vs. 5 MB)
unrolled_findmax(length, itr) findmax(length, itr) Tuple 4 distinct nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 78 LLVM lines) 28 times less (50 ns vs. 1 μs) similar (103 ms vs. 70 ms) similar (3 MB vs. 6 MB)
unrolled_findmax(length, itr) findmax(length, itr) Tuple 8 distinct nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 146 LLVM lines) 89 times less (50 ns vs. 4 μs) similar (116 ms vs. 70 ms) similar (4 MB vs. 6 MB)
unrolled_findmax(length, itr) findmax(length, itr) Tuple 32 distinct nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 55 LLVM lines) 378 times less (50 ns vs. 19 μs) similar (130 ms vs. 72 ms) similar (5 MB vs. 6 MB)
unrolled_findmax(length, itr) findmax(length, itr) Tuple 128 distinct nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 55 LLVM lines) 1586 times less (50 ns vs. 79 μs) 3 times more (216 ms vs. 71 ms) similar (11 MB vs. 6 MB)
unrolled_findmax(length, itr) findmax(length, itr) Tuple 2 distinct nonempty non-singleton Tuples better (7 LLVM lines w/ Const vs. 64 B allocs) similar (50 ns vs. 90 ns) 2 times less (32 ms vs. 68 ms) 5 times less (1 MB vs. 5 MB)
unrolled_findmax(length, itr) findmax(length, itr) Tuple 4 distinct nonempty non-singleton Tuples better (7 LLVM lines w/ Const vs. 400 B allocs) 9 times less (50 ns vs. 460 ns) similar (77 ms vs. 69 ms) similar (3 MB vs. 6 MB)
unrolled_findmax(length, itr) findmax(length, itr) Tuple 8 distinct nonempty non-singleton Tuples better (7 LLVM lines w/ Const vs. 2 kB allocs) 21 times less (50 ns vs. 1 μs) similar (81 ms vs. 70 ms) similar (4 MB vs. 6 MB)
unrolled_findmax(length, itr) findmax(length, itr) Tuple 32 distinct nonempty non-singleton Tuples better (7 LLVM lines w/ Const vs. 32 kB allocs) 105 times less (50 ns vs. 5 μs) similar (95 ms vs. 69 ms) similar (6 MB vs. 6 MB)
unrolled_findmax(length, itr) findmax(length, itr) Tuple 128 distinct nonempty non-singleton Tuples better (7 LLVM lines w/ Const vs. 521 kB allocs) 783 times less (50 ns vs. 39 μs) 2 times more (184 ms vs. 72 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 (50 ns vs. 40 ns) similar (46 ms vs. 62 ms) 9 times less (515 kB vs. 5 MB)
unrolled_findmin(length, itr) findmin(length, itr) Tuple 1 nonempty singleton Tuple similar (7 LLVM lines w/ Const) similar (40 ns vs. 50 ns) similar (46 ms vs. 61 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 (50 ns vs. 50 ns) similar (31 ms vs. 59 ms) 6 times less (720 kB vs. 5 MB)
unrolled_findmin(length, itr) findmin(length, itr) Tuple 2 identical nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (47 ms vs. 61 ms) 5 times less (792 kB vs. 5 MB)
unrolled_findmin(length, itr) findmin(length, itr) Tuple 4 identical nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (92 ms vs. 63 ms) similar (3 MB vs. 5 MB)
unrolled_findmin(length, itr) findmin(length, itr) Tuple 8 identical nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (94 ms vs. 63 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 (40 ns vs. 60 ns) similar (108 ms vs. 64 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 (50 ns vs. 50 ns) 3 times more (196 ms vs. 63 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 (50 ns vs. 50 ns) similar (33 ms vs. 60 ms) 5 times less (897 kB vs. 5 MB)
unrolled_findmin(length, itr) findmin(length, itr) Tuple 4 identical nonempty non-singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (77 ms vs. 61 ms) similar (3 MB vs. 5 MB)
unrolled_findmin(length, itr) findmin(length, itr) Tuple 8 identical nonempty non-singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 60 ns) similar (81 ms vs. 62 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 (50 ns vs. 50 ns) similar (96 ms vs. 62 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 (50 ns vs. 50 ns) 2 times more (182 ms vs. 62 ms) 2 times more (12 MB vs. 5 MB)
unrolled_findmin(length, itr) findmin(length, itr) Tuple 2 distinct empty & nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 26 LLVM lines) similar (50 ns vs. 70 ns) similar (51 ms vs. 65 ms) 5 times less (852 kB vs. 5 MB)
unrolled_findmin(length, itr) findmin(length, itr) Tuple 4 distinct empty & nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 42 LLVM lines) similar (50 ns vs. 90 ns) similar (103 ms vs. 65 ms) similar (3 MB vs. 5 MB)
unrolled_findmin(length, itr) findmin(length, itr) Tuple 8 distinct empty & nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 86 LLVM lines) 2 times less (50 ns vs. 140 ns) similar (116 ms vs. 66 ms) similar (4 MB vs. 5 MB)
unrolled_findmin(length, itr) findmin(length, itr) Tuple 32 distinct empty & nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 32 LLVM lines) 7 times less (50 ns vs. 390 ns) similar (130 ms vs. 66 ms) similar (5 MB vs. 5 MB)
unrolled_findmin(length, itr) findmin(length, itr) Tuple 128 distinct empty & nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 32 LLVM lines) 28 times less (50 ns vs. 1 μs) 3 times more (219 ms vs. 67 ms) 2 times more (11 MB vs. 5 MB)
unrolled_findmin(length, itr) findmin(length, itr) Tuple 2 distinct nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 26 LLVM lines) similar (50 ns vs. 70 ns) similar (51 ms vs. 65 ms) 5 times less (935 kB vs. 5 MB)
unrolled_findmin(length, itr) findmin(length, itr) Tuple 4 distinct nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 78 LLVM lines) 28 times less (50 ns vs. 1 μs) similar (104 ms vs. 67 ms) similar (3 MB vs. 5 MB)
unrolled_findmin(length, itr) findmin(length, itr) Tuple 8 distinct nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 146 LLVM lines) 89 times less (50 ns vs. 4 μs) similar (117 ms vs. 66 ms) similar (4 MB vs. 5 MB)
unrolled_findmin(length, itr) findmin(length, itr) Tuple 32 distinct nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 55 LLVM lines) 376 times less (50 ns vs. 19 μs) similar (133 ms vs. 67 ms) similar (5 MB vs. 5 MB)
unrolled_findmin(length, itr) findmin(length, itr) Tuple 128 distinct nonempty singleton Tuples better (7 LLVM lines w/ Const vs. 55 LLVM lines) 1981 times less (40 ns vs. 79 μs) 3 times more (220 ms vs. 67 ms) 2 times more (12 MB vs. 5 MB)
unrolled_findmin(length, itr) findmin(length, itr) Tuple 2 distinct nonempty non-singleton Tuples better (7 LLVM lines w/ Const vs. 64 B allocs) similar (50 ns vs. 90 ns) similar (33 ms vs. 65 ms) 4 times less (1 MB vs. 5 MB)
unrolled_findmin(length, itr) findmin(length, itr) Tuple 4 distinct nonempty non-singleton Tuples better (7 LLVM lines w/ Const vs. 400 B allocs) 11 times less (40 ns vs. 470 ns) similar (78 ms vs. 65 ms) similar (3 MB vs. 5 MB)
unrolled_findmin(length, itr) findmin(length, itr) Tuple 8 distinct nonempty non-singleton Tuples better (7 LLVM lines w/ Const vs. 2 kB allocs) 20 times less (50 ns vs. 1 μs) similar (83 ms vs. 68 ms) similar (4 MB vs. 5 MB)
unrolled_findmin(length, itr) findmin(length, itr) Tuple 32 distinct nonempty non-singleton Tuples better (7 LLVM lines w/ Const vs. 32 kB allocs) 108 times less (50 ns vs. 5 μs) similar (96 ms vs. 65 ms) similar (6 MB vs. 5 MB)
unrolled_findmin(length, itr) findmin(length, itr) Tuple 128 distinct nonempty non-singleton Tuples better (7 LLVM lines w/ Const vs. 521 kB allocs) 988 times less (40 ns vs. 40 μs) 2 times more (188 ms vs. 68 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 (50 ns vs. 50 ns) similar (39 ms vs. 69 ms) 2 times less (421 kB vs. 1 MB)
unrolled_argmax(length, itr) argmax(length, itr) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (50 ns vs. 40 ns) similar (38 ms vs. 68 ms) 2 times less (453 kB vs. 1 MB)
unrolled_argmax(length, itr) argmax(length, itr) Tuple 1 nonempty non-singleton Tuple similar (8 LLVM lines) similar (50 ns vs. 60 ns) similar (31 ms vs. 41 ms) 2 times less (769 kB vs. 2 MB)
unrolled_argmax(length, itr) argmax(length, itr) Tuple 2 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (39 ms vs. 73 ms) 2 times less (682 kB vs. 1 MB)
unrolled_argmax(length, itr) argmax(length, itr) Tuple 4 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) similar (83 ms vs. 73 ms) similar (3 MB vs. 1 MB)
unrolled_argmax(length, itr) argmax(length, itr) Tuple 8 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (84 ms vs. 72 ms) similar (3 MB vs. 2 MB)
unrolled_argmax(length, itr) argmax(length, itr) Tuple 32 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (93 ms vs. 73 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 (50 ns vs. 50 ns) similar (132 ms vs. 77 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 (50 ns vs. 50 ns) similar (32 ms vs. 42 ms) 2 times less (1 MB vs. 2 MB)
unrolled_argmax(length, itr) argmax(length, itr) Tuple 4 identical nonempty non-singleton Tuples similar (8 LLVM lines) similar (50 ns vs. 60 ns) similar (76 ms vs. 42 ms) similar (3 MB vs. 2 MB)
unrolled_argmax(length, itr) argmax(length, itr) Tuple 8 identical nonempty non-singleton Tuples similar (8 LLVM lines) similar (50 ns vs. 60 ns) similar (77 ms vs. 43 ms) similar (4 MB vs. 3 MB)
unrolled_argmax(length, itr) argmax(length, itr) Tuple 32 identical nonempty non-singleton Tuples similar (8 LLVM lines) similar (60 ns vs. 60 ns) similar (82 ms vs. 46 ms) similar (6 MB vs. 5 MB)
unrolled_argmax(length, itr) argmax(length, itr) Tuple 128 identical nonempty non-singleton Tuples similar (8 LLVM lines) similar (50 ns vs. 60 ns) 2 times more (107 ms vs. 43 ms) 6 times more (16 MB vs. 2 MB)
unrolled_argmax(length, itr) argmax(length, itr) Tuple 2 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (41 ms vs. 73 ms) 2 times less (687 kB vs. 1 MB)
unrolled_argmax(length, itr) argmax(length, itr) Tuple 4 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (87 ms vs. 83 ms) similar (3 MB vs. 2 MB)
unrolled_argmax(length, itr) argmax(length, itr) Tuple 8 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (90 ms vs. 104 ms) similar (4 MB vs. 3 MB)
unrolled_argmax(length, itr) argmax(length, itr) Tuple 32 distinct empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) similar (103 ms vs. 133 ms) similar (6 MB vs. 4 MB)
unrolled_argmax(length, itr) argmax(length, itr) Tuple 128 distinct empty & nonempty singleton Tuples better (optimized out vs. 44 LLVM lines) 28 times less (50 ns vs. 1 μs) 2 times more (168 ms vs. 83 ms) 4 times more (12 MB vs. 3 MB)
unrolled_argmax(length, itr) argmax(length, itr) Tuple 2 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (41 ms vs. 74 ms) 2 times less (767 kB vs. 2 MB)
unrolled_argmax(length, itr) argmax(length, itr) Tuple 4 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (87 ms vs. 83 ms) similar (3 MB vs. 2 MB)
unrolled_argmax(length, itr) argmax(length, itr) Tuple 8 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (89 ms vs. 103 ms) similar (4 MB vs. 3 MB)
unrolled_argmax(length, itr) argmax(length, itr) Tuple 32 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (104 ms vs. 137 ms) similar (6 MB vs. 5 MB)
unrolled_argmax(length, itr) argmax(length, itr) Tuple 128 distinct nonempty singleton Tuples better (optimized out vs. 43 LLVM lines) 35 times less (40 ns vs. 1 μs) similar (164 ms vs. 82 ms) 3 times more (12 MB vs. 3 MB)
unrolled_argmax(length, itr) argmax(length, itr) Tuple 2 distinct nonempty non-singleton Tuples similar (8 LLVM lines) similar (50 ns vs. 50 ns) similar (32 ms vs. 42 ms) similar (1 MB vs. 2 MB)
unrolled_argmax(length, itr) argmax(length, itr) Tuple 4 distinct nonempty non-singleton Tuples similar (8 LLVM lines) similar (50 ns vs. 60 ns) similar (77 ms vs. 45 ms) similar (4 MB vs. 4 MB)
unrolled_argmax(length, itr) argmax(length, itr) Tuple 8 distinct nonempty non-singleton Tuples similar (8 LLVM lines) similar (60 ns vs. 60 ns) similar (82 ms vs. 58 ms) similar (5 MB vs. 6 MB)
unrolled_argmax(length, itr) argmax(length, itr) Tuple 32 distinct nonempty non-singleton Tuples similar (8 LLVM lines) similar (50 ns vs. 51 ns) similar (86 ms vs. 57 ms) similar (8 MB vs. 11 MB)
unrolled_argmax(length, itr) argmax(length, itr) Tuple 128 distinct nonempty non-singleton Tuples better (8 LLVM lines vs. 521 kB allocs) 405 times less (60 ns vs. 24 μs) 2 times more (116 ms vs. 50 ms) 4 times more (19 MB vs. 4 MB)
unrolled_argmin(length, itr) argmin(length, itr) Tuple 1 empty singleton Tuple similar (optimized out) similar (50 ns vs. 50 ns) similar (39 ms vs. 66 ms) 2 times less (421 kB vs. 1 MB)
unrolled_argmin(length, itr) argmin(length, itr) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (50 ns vs. 40 ns) similar (38 ms vs. 65 ms) 2 times less (456 kB vs. 1 MB)
unrolled_argmin(length, itr) argmin(length, itr) Tuple 1 nonempty non-singleton Tuple similar (8 LLVM lines) similar (50 ns vs. 50 ns) similar (31 ms vs. 37 ms) 2 times less (769 kB vs. 2 MB)
unrolled_argmin(length, itr) argmin(length, itr) Tuple 2 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (39 ms vs. 69 ms) 2 times less (680 kB vs. 1 MB)
unrolled_argmin(length, itr) argmin(length, itr) Tuple 4 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (84 ms vs. 69 ms) similar (3 MB vs. 1 MB)
unrolled_argmin(length, itr) argmin(length, itr) Tuple 8 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (84 ms vs. 69 ms) similar (3 MB vs. 1 MB)
unrolled_argmin(length, itr) argmin(length, itr) Tuple 32 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (93 ms vs. 70 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 (40 ns vs. 50 ns) similar (130 ms vs. 73 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 (50 ns vs. 50 ns) similar (32 ms vs. 38 ms) 2 times less (1 MB vs. 2 MB)
unrolled_argmin(length, itr) argmin(length, itr) Tuple 4 identical nonempty non-singleton Tuples similar (8 LLVM lines) similar (50 ns vs. 60 ns) similar (76 ms vs. 39 ms) similar (3 MB vs. 2 MB)
unrolled_argmin(length, itr) argmin(length, itr) Tuple 8 identical nonempty non-singleton Tuples similar (8 LLVM lines) similar (60 ns vs. 60 ns) similar (77 ms vs. 40 ms) similar (4 MB vs. 3 MB)
unrolled_argmin(length, itr) argmin(length, itr) Tuple 32 identical nonempty non-singleton Tuples similar (8 LLVM lines) similar (50 ns vs. 50 ns) similar (83 ms vs. 43 ms) similar (6 MB vs. 5 MB)
unrolled_argmin(length, itr) argmin(length, itr) Tuple 128 identical nonempty non-singleton Tuples similar (8 LLVM lines) similar (50 ns vs. 60 ns) 2 times more (107 ms vs. 40 ms) 6 times more (17 MB vs. 2 MB)
unrolled_argmin(length, itr) argmin(length, itr) Tuple 2 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (41 ms vs. 70 ms) 2 times less (690 kB vs. 1 MB)
unrolled_argmin(length, itr) argmin(length, itr) Tuple 4 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (87 ms vs. 80 ms) similar (3 MB vs. 2 MB)
unrolled_argmin(length, itr) argmin(length, itr) Tuple 8 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (90 ms vs. 100 ms) similar (4 MB vs. 3 MB)
unrolled_argmin(length, itr) argmin(length, itr) Tuple 32 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (104 ms vs. 100 ms) similar (6 MB vs. 3 MB)
unrolled_argmin(length, itr) argmin(length, itr) Tuple 128 distinct empty & nonempty singleton Tuples better (optimized out vs. 44 LLVM lines) 28 times less (50 ns vs. 1 μs) 2 times more (167 ms vs. 80 ms) 4 times more (12 MB vs. 3 MB)
unrolled_argmin(length, itr) argmin(length, itr) Tuple 2 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (41 ms vs. 71 ms) 2 times less (768 kB vs. 2 MB)
unrolled_argmin(length, itr) argmin(length, itr) Tuple 4 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (87 ms vs. 81 ms) similar (4 MB vs. 2 MB)
unrolled_argmin(length, itr) argmin(length, itr) Tuple 8 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (90 ms vs. 99 ms) similar (4 MB vs. 3 MB)
unrolled_argmin(length, itr) argmin(length, itr) Tuple 32 distinct nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) similar (104 ms vs. 101 ms) similar (6 MB vs. 3 MB)
unrolled_argmin(length, itr) argmin(length, itr) Tuple 128 distinct nonempty singleton Tuples better (optimized out vs. 43 LLVM lines) 28 times less (50 ns vs. 1 μs) 2 times more (165 ms vs. 81 ms) 4 times more (12 MB vs. 3 MB)
unrolled_argmin(length, itr) argmin(length, itr) Tuple 2 distinct nonempty non-singleton Tuples similar (8 LLVM lines) similar (60 ns vs. 60 ns) similar (32 ms vs. 39 ms) similar (1 MB vs. 2 MB)
unrolled_argmin(length, itr) argmin(length, itr) Tuple 4 distinct nonempty non-singleton Tuples similar (8 LLVM lines) similar (50 ns vs. 50 ns) similar (78 ms vs. 40 ms) similar (4 MB vs. 3 MB)
unrolled_argmin(length, itr) argmin(length, itr) Tuple 8 distinct nonempty non-singleton Tuples similar (8 LLVM lines) similar (50 ns vs. 60 ns) similar (82 ms vs. 43 ms) similar (5 MB vs. 5 MB)
unrolled_argmin(length, itr) argmin(length, itr) Tuple 32 distinct nonempty non-singleton Tuples similar (8 LLVM lines) similar (60 ns vs. 60 ns) similar (86 ms vs. 46 ms) similar (8 MB vs. 7 MB)
unrolled_argmin(length, itr) argmin(length, itr) Tuple 128 distinct nonempty non-singleton Tuples better (8 LLVM lines vs. 521 kB allocs) 384 times less (60 ns vs. 23 μs) 2 times more (114 ms vs. 46 ms) 5 times more (19 MB vs. 4 MB)
unrolled_argmax(unrolled_map(length, itr)) argmax(Iterators.map(length, itr)) Tuple 1 empty singleton Tuple similar (optimized out) similar (50 ns vs. 50 ns) 3 times less (37 ms vs. 136 ms) 20 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 (50 ns vs. 50 ns) 3 times less (36 ms vs. 132 ms) 19 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 (50 ns vs. 50 ns) 3 times less (28 ms vs. 101 ms) 19 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 (50 ns vs. 50 ns) 3 times less (40 ms vs. 144 ms) 16 times less (1 MB vs. 25 MB)
unrolled_argmax(unrolled_map(length, itr)) argmax(Iterators.map(length, itr)) Tuple 4 identical nonempty singleton Tuples better (optimized out vs. 6 LLVM lines) similar (50 ns vs. 50 ns) similar (86 ms vs. 144 ms) 6 times less (4 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 (50 ns vs. 50 ns) similar (88 ms vs. 144 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 (40 ns vs. 50 ns) similar (104 ms vs. 147 ms) 2 times less (9 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 (50 ns vs. 50 ns) similar (186 ms vs. 152 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 (50 ns vs. 50 ns) 3 times less (32 ms vs. 112 ms) 16 times less (2 MB vs. 25 MB)
unrolled_argmax(unrolled_map(length, itr)) argmax(Iterators.map(length, itr)) Tuple 4 identical nonempty non-singleton Tuples better (optimized out vs. 6 LLVM lines) similar (50 ns vs. 50 ns) similar (78 ms vs. 112 ms) 6 times less (4 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 (50 ns vs. 50 ns) similar (82 ms vs. 113 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. 50 ns) similar (118 ms vs. 114 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 (50 ns vs. 50 ns) similar (176 ms vs. 114 ms) similar (27 MB vs. 25 MB)
unrolled_argmax(unrolled_map(length, itr)) argmax(Iterators.map(length, itr)) Tuple 2 distinct empty & nonempty singleton Tuples better (optimized out vs. 15 LLVM lines) similar (50 ns vs. 60 ns) 3 times less (41 ms vs. 146 ms) 16 times less (1 MB vs. 25 MB)
unrolled_argmax(unrolled_map(length, itr)) argmax(Iterators.map(length, itr)) Tuple 4 distinct empty & nonempty singleton Tuples better (optimized out vs. 38 LLVM lines) similar (50 ns vs. 80 ns) similar (86 ms vs. 146 ms) 6 times less (4 MB vs. 25 MB)
unrolled_argmax(unrolled_map(length, itr)) argmax(Iterators.map(length, itr)) Tuple 8 distinct empty & nonempty singleton Tuples better (optimized out vs. 82 LLVM lines) 3 times less (40 ns vs. 130 ns) similar (89 ms vs. 148 ms) 5 times less (4 MB vs. 25 MB)
unrolled_argmax(unrolled_map(length, itr)) argmax(Iterators.map(length, itr)) Tuple 32 distinct empty & nonempty singleton Tuples better (optimized out vs. 29 LLVM lines) 7 times less (50 ns vs. 380 ns) similar (104 ms vs. 148 ms) 2 times less (9 MB vs. 25 MB)
unrolled_argmax(unrolled_map(length, itr)) argmax(Iterators.map(length, itr)) Tuple 128 distinct empty & nonempty singleton Tuples better (optimized out vs. 29 LLVM lines) 35 times less (40 ns vs. 1 μs) similar (186 ms vs. 150 ms) similar (26 MB vs. 25 MB)
unrolled_argmax(unrolled_map(length, itr)) argmax(Iterators.map(length, itr)) Tuple 2 distinct nonempty singleton Tuples better (optimized out vs. 15 LLVM lines) similar (50 ns vs. 60 ns) 3 times less (42 ms vs. 146 ms) 16 times less (1 MB vs. 25 MB)
unrolled_argmax(unrolled_map(length, itr)) argmax(Iterators.map(length, itr)) Tuple 4 distinct nonempty singleton Tuples better (optimized out vs. 38 LLVM lines) 2 times less (40 ns vs. 80 ns) similar (85 ms vs. 148 ms) 6 times less (4 MB vs. 25 MB)
unrolled_argmax(unrolled_map(length, itr)) argmax(Iterators.map(length, itr)) Tuple 8 distinct nonempty singleton Tuples better (optimized out vs. 82 LLVM lines) 2 times less (50 ns vs. 130 ns) similar (88 ms vs. 148 ms) 5 times less (4 MB vs. 25 MB)
unrolled_argmax(unrolled_map(length, itr)) argmax(Iterators.map(length, itr)) Tuple 32 distinct nonempty singleton Tuples better (optimized out vs. 29 LLVM lines) 7 times less (50 ns vs. 371 ns) similar (105 ms vs. 149 ms) 2 times less (9 MB vs. 25 MB)
unrolled_argmax(unrolled_map(length, itr)) argmax(Iterators.map(length, itr)) Tuple 128 distinct nonempty singleton Tuples better (optimized out vs. 29 LLVM lines) 27 times less (50 ns vs. 1 μs) similar (191 ms vs. 147 ms) similar (26 MB vs. 25 MB)
unrolled_argmax(unrolled_map(length, itr)) argmax(Iterators.map(length, itr)) Tuple 2 distinct nonempty non-singleton Tuples better (optimized out vs. 64 B allocs) similar (50 ns vs. 90 ns) 3 times less (33 ms vs. 115 ms) 16 times less (2 MB vs. 25 MB)
unrolled_argmax(unrolled_map(length, itr)) argmax(Iterators.map(length, itr)) Tuple 4 distinct nonempty non-singleton Tuples better (optimized out vs. 400 B allocs) 3 times less (40 ns vs. 140 ns) similar (78 ms vs. 117 ms) 6 times less (4 MB vs. 25 MB)
unrolled_argmax(unrolled_map(length, itr)) argmax(Iterators.map(length, itr)) Tuple 8 distinct nonempty non-singleton Tuples better (optimized out vs. 2 kB allocs) 5 times less (50 ns vs. 260 ns) similar (81 ms vs. 123 ms) 5 times less (5 MB vs. 25 MB)
unrolled_argmax(unrolled_map(length, itr)) argmax(Iterators.map(length, itr)) Tuple 32 distinct nonempty non-singleton Tuples better (optimized out vs. 32 kB allocs) 47 times less (50 ns vs. 2 μs) similar (97 ms vs. 118 ms) 2 times less (9 MB vs. 25 MB)
unrolled_argmax(unrolled_map(length, itr)) argmax(Iterators.map(length, itr)) Tuple 128 distinct nonempty non-singleton Tuples better (optimized out vs. 521 kB allocs) 481 times less (50 ns vs. 24 μs) similar (185 ms vs. 120 ms) similar (27 MB vs. 26 MB)
unrolled_argmin(unrolled_map(length, itr)) argmin(Iterators.map(length, itr)) Tuple 1 empty singleton Tuple similar (optimized out) similar (50 ns vs. 50 ns) 3 times less (37 ms vs. 123 ms) 19 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 (50 ns vs. 50 ns) 3 times less (37 ms vs. 125 ms) 19 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 (50 ns vs. 50 ns) 3 times less (29 ms vs. 92 ms) 19 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 (50 ns vs. 50 ns) 2 times less (45 ms vs. 134 ms) 16 times less (1 MB vs. 24 MB)
unrolled_argmin(unrolled_map(length, itr)) argmin(Iterators.map(length, itr)) Tuple 4 identical nonempty singleton Tuples better (optimized out vs. 6 LLVM lines) similar (50 ns vs. 50 ns) similar (86 ms vs. 135 ms) 6 times less (4 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 (40 ns vs. 50 ns) similar (88 ms vs. 135 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 (50 ns vs. 50 ns) similar (103 ms vs. 137 ms) 2 times less (9 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 (40 ns vs. 50 ns) similar (191 ms vs. 137 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 (50 ns vs. 50 ns) 3 times less (33 ms vs. 106 ms) 16 times less (2 MB vs. 25 MB)
unrolled_argmin(unrolled_map(length, itr)) argmin(Iterators.map(length, itr)) Tuple 4 identical nonempty non-singleton Tuples better (optimized out vs. 6 LLVM lines) similar (50 ns vs. 50 ns) similar (78 ms vs. 104 ms) 6 times less (4 MB vs. 24 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 (50 ns vs. 50 ns) similar (82 ms vs. 104 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 (50 ns vs. 50 ns) similar (97 ms vs. 104 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 (40 ns vs. 50 ns) similar (176 ms vs. 104 ms) similar (27 MB vs. 24 MB)
unrolled_argmin(unrolled_map(length, itr)) argmin(Iterators.map(length, itr)) Tuple 2 distinct empty & nonempty singleton Tuples better (optimized out vs. 9 LLVM lines) similar (40 ns vs. 60 ns) 3 times less (41 ms vs. 138 ms) 16 times less (1 MB vs. 24 MB)
unrolled_argmin(unrolled_map(length, itr)) argmin(Iterators.map(length, itr)) Tuple 4 distinct empty & nonempty singleton Tuples better (optimized out vs. 38 LLVM lines) similar (50 ns vs. 80 ns) similar (85 ms vs. 138 ms) 6 times less (4 MB vs. 24 MB)
unrolled_argmin(unrolled_map(length, itr)) argmin(Iterators.map(length, itr)) Tuple 8 distinct empty & nonempty singleton Tuples better (optimized out vs. 82 LLVM lines) 2 times less (50 ns vs. 130 ns) similar (88 ms vs. 140 ms) 5 times less (4 MB vs. 24 MB)
unrolled_argmin(unrolled_map(length, itr)) argmin(Iterators.map(length, itr)) Tuple 32 distinct empty & nonempty singleton Tuples better (optimized out vs. 29 LLVM lines) 9 times less (40 ns vs. 380 ns) similar (104 ms vs. 137 ms) 2 times less (9 MB vs. 24 MB)
unrolled_argmin(unrolled_map(length, itr)) argmin(Iterators.map(length, itr)) Tuple 128 distinct empty & nonempty singleton Tuples better (optimized out vs. 29 LLVM lines) 28 times less (50 ns vs. 1 μs) similar (183 ms vs. 138 ms) similar (26 MB vs. 24 MB)
unrolled_argmin(unrolled_map(length, itr)) argmin(Iterators.map(length, itr)) Tuple 2 distinct nonempty singleton Tuples better (optimized out vs. 9 LLVM lines) similar (50 ns vs. 60 ns) 3 times less (41 ms vs. 140 ms) 16 times less (1 MB vs. 24 MB)
unrolled_argmin(unrolled_map(length, itr)) argmin(Iterators.map(length, itr)) Tuple 4 distinct nonempty singleton Tuples better (optimized out vs. 38 LLVM lines) similar (50 ns vs. 80 ns) similar (86 ms vs. 138 ms) 6 times less (4 MB vs. 24 MB)
unrolled_argmin(unrolled_map(length, itr)) argmin(Iterators.map(length, itr)) Tuple 8 distinct nonempty singleton Tuples better (optimized out vs. 82 LLVM lines) 3 times less (40 ns vs. 130 ns) similar (88 ms vs. 139 ms) 5 times less (4 MB vs. 24 MB)
unrolled_argmin(unrolled_map(length, itr)) argmin(Iterators.map(length, itr)) Tuple 32 distinct nonempty singleton Tuples better (optimized out vs. 29 LLVM lines) 7 times less (50 ns vs. 370 ns) similar (105 ms vs. 140 ms) 2 times less (9 MB vs. 24 MB)
unrolled_argmin(unrolled_map(length, itr)) argmin(Iterators.map(length, itr)) Tuple 128 distinct nonempty singleton Tuples better (optimized out vs. 29 LLVM lines) 34 times less (40 ns vs. 1 μs) similar (186 ms vs. 140 ms) similar (26 MB vs. 24 MB)
unrolled_argmin(unrolled_map(length, itr)) argmin(Iterators.map(length, itr)) Tuple 2 distinct nonempty non-singleton Tuples better (optimized out vs. 64 B allocs) 2 times less (40 ns vs. 90 ns) 3 times less (33 ms vs. 109 ms) 15 times less (2 MB vs. 25 MB)
unrolled_argmin(unrolled_map(length, itr)) argmin(Iterators.map(length, itr)) Tuple 4 distinct nonempty non-singleton Tuples better (optimized out vs. 400 B allocs) 2 times less (50 ns vs. 140 ns) similar (78 ms vs. 108 ms) 6 times less (4 MB vs. 24 MB)
unrolled_argmin(unrolled_map(length, itr)) argmin(Iterators.map(length, itr)) Tuple 8 distinct nonempty non-singleton Tuples better (optimized out vs. 2 kB allocs) 5 times less (50 ns vs. 260 ns) similar (81 ms vs. 115 ms) 5 times less (5 MB vs. 24 MB)
unrolled_argmin(unrolled_map(length, itr)) argmin(Iterators.map(length, itr)) Tuple 32 distinct nonempty non-singleton Tuples better (optimized out vs. 32 kB allocs) 46 times less (50 ns vs. 2 μs) similar (96 ms vs. 110 ms) 2 times less (9 MB vs. 24 MB)
unrolled_argmin(unrolled_map(length, itr)) argmin(Iterators.map(length, itr)) Tuple 128 distinct nonempty non-singleton Tuples better (optimized out vs. 521 kB allocs) 471 times less (50 ns vs. 24 μs) similar (180 ms vs. 112 ms) similar (27 MB vs. 25 MB)
unrolled_findfirst(!isempty, itr) findfirst(!isempty, itr) Tuple 1 empty singleton Tuple similar (optimized out) similar (40 ns vs. 50 ns) similar (33 ms vs. 32 ms) similar (198 kB vs. 181 kB)
unrolled_findfirst(!isempty, itr) findfirst(!isempty, itr) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (50 ns vs. 50 ns) similar (36 ms vs. 34 ms) similar (239 kB vs. 246 kB)
unrolled_findfirst(!isempty, itr) findfirst(!isempty, itr) Tuple 1 nonempty non-singleton Tuple similar (optimized out) similar (50 ns vs. 50 ns) similar (33 ms vs. 33 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. 40 ns) similar (36 ms vs. 36 ms) similar (242 kB vs. 407 kB)
unrolled_findfirst(!isempty, itr) findfirst(!isempty, itr) Tuple 4 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (55 ms vs. 37 ms) 2 times less (307 kB vs. 707 kB)
unrolled_findfirst(!isempty, itr) findfirst(!isempty, itr) Tuple 8 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (55 ms vs. 38 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 (50 ns vs. 50 ns) similar (57 ms vs. 31 ms) similar (456 kB vs. 269 kB)
unrolled_findfirst(!isempty, itr) findfirst(!isempty, itr) Tuple 128 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) 2 times more (66 ms vs. 31 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 (50 ns vs. 50 ns) similar (33 ms vs. 34 ms) similar (215 kB vs. 420 kB)
unrolled_findfirst(!isempty, itr) findfirst(!isempty, itr) Tuple 4 identical nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (54 ms vs. 36 ms) 3 times less (306 kB vs. 937 kB)
unrolled_findfirst(!isempty, itr) findfirst(!isempty, itr) Tuple 8 identical nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (52 ms vs. 38 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 (50 ns vs. 50 ns) similar (54 ms vs. 32 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 (50 ns vs. 50 ns) similar (62 ms vs. 32 ms) 3 times more (961 kB vs. 274 kB)
unrolled_findfirst(!isempty, itr) findfirst(!isempty, itr) Tuple 2 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (37 ms vs. 36 ms) similar (288 kB vs. 451 kB)
unrolled_findfirst(!isempty, itr) findfirst(!isempty, itr) Tuple 4 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (55 ms vs. 39 ms) 2 times less (354 kB vs. 786 kB)
unrolled_findfirst(!isempty, itr) findfirst(!isempty, itr) Tuple 8 distinct empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) similar (55 ms vs. 38 ms) 3 times less (375 kB vs. 1 MB)
unrolled_findfirst(!isempty, itr) findfirst(!isempty, itr) Tuple 32 distinct empty & nonempty singleton Tuples better (optimized out vs. 31 LLVM lines) similar (50 ns vs. 70 ns) similar (57 ms vs. 37 ms) similar (502 kB vs. 608 kB)
unrolled_findfirst(!isempty, itr) findfirst(!isempty, itr) Tuple 128 distinct empty & nonempty singleton Tuples better (optimized out vs. 31 LLVM lines) similar (50 ns vs. 80 ns) similar (65 ms vs. 38 ms) similar (1009 kB vs. 608 kB)
unrolled_findfirst(!isempty, itr) findfirst(!isempty, itr) Tuple 2 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (37 ms vs. 36 ms) similar (242 kB vs. 407 kB)
unrolled_findfirst(!isempty, itr) findfirst(!isempty, itr) Tuple 4 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (55 ms vs. 37 ms) 2 times less (308 kB vs. 713 kB)
unrolled_findfirst(!isempty, itr) findfirst(!isempty, itr) Tuple 8 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (58 ms vs. 38 ms) 3 times less (329 kB vs. 1 MB)
unrolled_findfirst(!isempty, itr) findfirst(!isempty, itr) Tuple 32 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (58 ms vs. 31 ms) similar (457 kB vs. 270 kB)
unrolled_findfirst(!isempty, itr) findfirst(!isempty, itr) Tuple 128 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) 2 times more (66 ms vs. 31 ms) 3 times more (964 kB vs. 270 kB)
unrolled_findfirst(!isempty, itr) findfirst(!isempty, itr) Tuple 2 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (33 ms vs. 34 ms) 2 times less (241 kB vs. 506 kB)
unrolled_findfirst(!isempty, itr) findfirst(!isempty, itr) Tuple 4 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (52 ms vs. 37 ms) 3 times less (307 kB vs. 1 MB)
unrolled_findfirst(!isempty, itr) findfirst(!isempty, itr) Tuple 8 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (52 ms vs. 40 ms) 6 times less (328 kB vs. 2 MB)
unrolled_findfirst(!isempty, itr) findfirst(!isempty, itr) Tuple 32 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (54 ms vs. 32 ms) similar (455 kB vs. 275 kB)
unrolled_findfirst(!isempty, itr) findfirst(!isempty, itr) Tuple 128 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (63 ms vs. 32 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 (50 ns vs. 50 ns) similar (43 ms vs. 40 ms) similar (358 kB vs. 344 kB)
unrolled_findlast(isempty, itr) findlast(isempty, itr) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (50 ns vs. 50 ns) similar (37 ms vs. 42 ms) similar (302 kB vs. 399 kB)
unrolled_findlast(isempty, itr) findlast(isempty, itr) Tuple 1 nonempty non-singleton Tuple similar (optimized out) similar (50 ns vs. 50 ns) similar (30 ms vs. 38 ms) similar (342 kB vs. 471 kB)
unrolled_findlast(isempty, itr) findlast(isempty, itr) Tuple 2 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (37 ms vs. 44 ms) similar (308 kB vs. 562 kB)
unrolled_findlast(isempty, itr) findlast(isempty, itr) Tuple 4 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) similar (56 ms vs. 57 ms) 2 times less (378 kB vs. 936 kB)
unrolled_findlast(isempty, itr) findlast(isempty, itr) Tuple 8 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) similar (56 ms vs. 58 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 (50 ns vs. 50 ns) similar (58 ms vs. 43 ms) similar (593 kB vs. 691 kB)
unrolled_findlast(isempty, itr) findlast(isempty, itr) Tuple 128 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (67 ms vs. 41 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 (50 ns vs. 50 ns) similar (31 ms vs. 41 ms) similar (353 kB vs. 670 kB)
unrolled_findlast(isempty, itr) findlast(isempty, itr) Tuple 4 identical nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (49 ms vs. 53 ms) 2 times less (461 kB vs. 1 MB)
unrolled_findlast(isempty, itr) findlast(isempty, itr) Tuple 8 identical nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (50 ms vs. 56 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 (50 ns vs. 50 ns) similar (52 ms vs. 43 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 (50 ns vs. 50 ns) similar (61 ms vs. 42 ms) 3 times more (2 MB vs. 697 kB)
unrolled_findlast(isempty, itr) findlast(isempty, itr) Tuple 2 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (44 ms vs. 38 ms) similar (397 kB vs. 467 kB)
unrolled_findlast(isempty, itr) findlast(isempty, itr) Tuple 4 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (61 ms vs. 61 ms) similar (477 kB vs. 930 kB)
unrolled_findlast(isempty, itr) findlast(isempty, itr) Tuple 8 distinct empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) similar (62 ms vs. 40 ms) 3 times less (478 kB vs. 1 MB)
unrolled_findlast(isempty, itr) findlast(isempty, itr) Tuple 32 distinct empty & nonempty singleton Tuples better (optimized out vs. 30 LLVM lines) 2 times less (50 ns vs. 100 ns) similar (64 ms vs. 43 ms) similar (625 kB vs. 710 kB)
unrolled_findlast(isempty, itr) findlast(isempty, itr) Tuple 128 distinct empty & nonempty singleton Tuples better (optimized out vs. 30 LLVM lines) similar (50 ns vs. 70 ns) similar (73 ms vs. 44 ms) similar (1 MB vs. 710 kB)
unrolled_findlast(isempty, itr) findlast(isempty, itr) Tuple 2 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (38 ms vs. 41 ms) similar (312 kB vs. 527 kB)
unrolled_findlast(isempty, itr) findlast(isempty, itr) Tuple 4 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (55 ms vs. 42 ms) 2 times less (391 kB vs. 906 kB)
unrolled_findlast(isempty, itr) findlast(isempty, itr) Tuple 8 distinct nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) similar (56 ms vs. 43 ms) 3 times less (436 kB vs. 2 MB)
unrolled_findlast(isempty, itr) findlast(isempty, itr) Tuple 32 distinct nonempty singleton Tuples better (optimized out vs. 30 LLVM lines) 7 times less (50 ns vs. 370 ns) similar (58 ms vs. 43 ms) similar (620 kB vs. 710 kB)
unrolled_findlast(isempty, itr) findlast(isempty, itr) Tuple 128 distinct nonempty singleton Tuples better (optimized out vs. 30 LLVM lines) 27 times less (50 ns vs. 1 μs) similar (68 ms vs. 44 ms) similar (1 MB vs. 710 kB)
unrolled_findlast(isempty, itr) findlast(isempty, itr) Tuple 2 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (31 ms vs. 40 ms) similar (383 kB vs. 724 kB)
unrolled_findlast(isempty, itr) findlast(isempty, itr) Tuple 4 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (49 ms vs. 42 ms) 2 times less (474 kB vs. 1 MB)
unrolled_findlast(isempty, itr) findlast(isempty, itr) Tuple 8 distinct nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) similar (51 ms vs. 52 ms) 5 times less (543 kB vs. 3 MB)
unrolled_findlast(isempty, itr) findlast(isempty, itr) Tuple 32 distinct nonempty non-singleton Tuples better (optimized out vs. 33 kB allocs) 47 times less (50 ns vs. 2 μs) similar (52 ms vs. 46 ms) similar (880 kB vs. 752 kB)
unrolled_findlast(isempty, itr) findlast(isempty, itr) Tuple 128 distinct nonempty non-singleton Tuples better (optimized out vs. 525 kB allocs) 484 times less (50 ns vs. 24 μs) similar (62 ms vs. 47 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 (50 ns vs. 50 ns) similar (50 ms vs. 46 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 (50 ns vs. 50 ns) similar (50 ms vs. 49 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. 60 ns) similar (48 ms vs. 47 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 (50 ns vs. 50 ns) similar (51 ms vs. 50 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 4 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (71 ms vs. 51 ms) similar (434 kB vs. 728 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 (50 ns vs. 50 ns) similar (74 ms vs. 52 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 (50 ns vs. 50 ns) similar (90 ms vs. 52 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. 50 ns) 3 times more (182 ms vs. 52 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 (60 ns vs. 60 ns) similar (49 ms vs. 49 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 4 identical nonempty non-singleton Tuples similar (8 LLVM lines) similar (50 ns vs. 60 ns) similar (70 ms vs. 51 ms) similar (518 kB vs. 958 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 (60 ns vs. 60 ns) similar (73 ms vs. 52 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 (50 ns vs. 50 ns) similar (94 ms vs. 54 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 (50 ns vs. 50 ns) 3 times more (205 ms vs. 53 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 distinct empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) similar (57 ms vs. 55 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 4 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (85 ms vs. 72 ms) similar (574 kB vs. 1022 kB)
unrolled_argfirst((x->length(x) >= length(itr[end])), itr) itr[findfirst((x->length(x) >= length(itr[end])), itr)] Tuple 8 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) 2 times more (101 ms vs. 50 ms) similar (818 kB vs. 1 MB)
unrolled_argfirst((x->length(x) >= length(itr[end])), itr) itr[findfirst((x->length(x) >= length(itr[end])), itr)] Tuple 32 distinct empty & nonempty singleton Tuples better (optimized out vs. type-unstable) 2 times less (50 ns vs. 110 ns) similar (121 ms vs. 66 ms) 2 times more (1 MB vs. 583 kB)
unrolled_argfirst((x->length(x) >= length(itr[end])), itr) itr[findfirst((x->length(x) >= length(itr[end])), itr)] Tuple 128 distinct empty & nonempty singleton Tuples better (optimized out vs. type-unstable) similar (50 ns vs. 90 ns) 4 times more (234 ms vs. 58 ms) 7 times more (4 MB vs. 501 kB)
unrolled_argfirst((x->length(x) >= length(itr[end])), itr) itr[findfirst((x->length(x) >= length(itr[end])), itr)] Tuple 2 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (57 ms vs. 55 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 4 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (85 ms vs. 73 ms) similar (578 kB vs. 1 MB)
unrolled_argfirst((x->length(x) >= length(itr[end])), itr) itr[findfirst((x->length(x) >= length(itr[end])), itr)] Tuple 8 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (100 ms vs. 52 ms) similar (822 kB vs. 1 MB)
unrolled_argfirst((x->length(x) >= length(itr[end])), itr) itr[findfirst((x->length(x) >= length(itr[end])), itr)] Tuple 32 distinct nonempty singleton Tuples better (optimized out vs. type-unstable) 2 times less (50 ns vs. 100 ns) similar (120 ms vs. 66 ms) 2 times more (1 MB vs. 587 kB)
unrolled_argfirst((x->length(x) >= length(itr[end])), itr) itr[findfirst((x->length(x) >= length(itr[end])), itr)] Tuple 128 distinct nonempty singleton Tuples better (optimized out vs. type-unstable) similar (50 ns vs. 80 ns) 3 times more (220 ms vs. 58 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 distinct nonempty non-singleton Tuples similar (8 LLVM lines) similar (50 ns vs. 60 ns) similar (55 ms vs. 54 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 4 distinct nonempty non-singleton Tuples similar (8 LLVM lines) similar (50 ns vs. 60 ns) similar (85 ms vs. 73 ms) 2 times less (695 kB vs. 1 MB)
unrolled_argfirst((x->length(x) >= length(itr[end])), itr) itr[findfirst((x->length(x) >= length(itr[end])), itr)] Tuple 8 distinct nonempty non-singleton Tuples similar (8 LLVM lines) similar (60 ns vs. 50 ns) similar (102 ms vs. 54 ms) 2 times less (1 MB vs. 2 MB)
unrolled_argfirst((x->length(x) >= length(itr[end])), itr) itr[findfirst((x->length(x) >= length(itr[end])), itr)] Tuple 32 distinct nonempty non-singleton Tuples better (8 LLVM lines vs. 5 kB allocs) 5 times less (60 ns vs. 330 ns) similar (131 ms vs. 69 ms) 3 times more (2 MB vs. 560 kB)
unrolled_argfirst((x->length(x) >= length(itr[end])), itr) itr[findfirst((x->length(x) >= length(itr[end])), itr)] Tuple 128 distinct nonempty non-singleton Tuples better (8 LLVM lines vs. 12 kB allocs) 11 times less (60 ns vs. 681 ns) 4 times more (288 ms vs. 60 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 (50 ns vs. 50 ns) similar (53 ms vs. 54 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. 50 ns) similar (54 ms vs. 57 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 (50 ns vs. 50 ns) similar (48 ms vs. 52 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 (50 ns vs. 40 ns) similar (55 ms vs. 58 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 4 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (74 ms vs. 71 ms) similar (585 kB vs. 956 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 (50 ns vs. 40 ns) similar (77 ms vs. 71 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. 50 ns) similar (93 ms vs. 58 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 (50 ns vs. 50 ns) 3 times more (185 ms vs. 60 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 (50 ns vs. 50 ns) similar (49 ms vs. 54 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 4 identical nonempty non-singleton Tuples similar (9 LLVM lines) similar (50 ns vs. 60 ns) similar (70 ms vs. 67 ms) similar (783 kB vs. 1 MB)
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 (50 ns vs. 60 ns) similar (73 ms vs. 69 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 (50 ns vs. 50 ns) similar (95 ms vs. 61 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 (50 ns vs. 50 ns) 3 times more (209 ms vs. 61 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 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (60 ms vs. 52 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 4 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (87 ms vs. 53 ms) similar (718 kB vs. 858 kB)
unrolled_arglast((x->length(x) >= length(itr[1])), itr) itr[findlast((x->length(x) >= length(itr[1])), itr)] Tuple 8 distinct empty & nonempty singleton Tuples similar (optimized out) similar (60 ns vs. 40 ns) similar (103 ms vs. 55 ms) similar (971 kB vs. 1 MB)
unrolled_arglast((x->length(x) >= length(itr[1])), itr) itr[findlast((x->length(x) >= length(itr[1])), itr)] Tuple 32 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) 2 times more (123 ms vs. 59 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 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) 3 times more (232 ms vs. 60 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 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (60 ms vs. 56 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 4 distinct nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) similar (88 ms vs. 56 ms) similar (723 kB vs. 918 kB)
unrolled_arglast((x->length(x) >= length(itr[1])), itr) itr[findlast((x->length(x) >= length(itr[1])), itr)] Tuple 8 distinct nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (102 ms vs. 57 ms) similar (975 kB vs. 2 MB)
unrolled_arglast((x->length(x) >= length(itr[1])), itr) itr[findlast((x->length(x) >= length(itr[1])), itr)] Tuple 32 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) 2 times more (122 ms vs. 59 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 distinct nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) 3 times more (222 ms vs. 60 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 distinct nonempty non-singleton Tuples similar (8 LLVM lines) similar (50 ns vs. 50 ns) similar (55 ms vs. 54 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 4 distinct nonempty non-singleton Tuples similar (8 LLVM lines) similar (50 ns vs. 60 ns) similar (84 ms vs. 57 ms) similar (953 kB vs. 1 MB)
unrolled_arglast((x->length(x) >= length(itr[1])), itr) itr[findlast((x->length(x) >= length(itr[1])), itr)] Tuple 8 distinct nonempty non-singleton Tuples similar (9 LLVM lines) similar (50 ns vs. 50 ns) similar (101 ms vs. 62 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 distinct nonempty non-singleton Tuples similar (8 LLVM lines) similar (50 ns vs. 50 ns) 2 times more (132 ms vs. 61 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 distinct nonempty non-singleton Tuples similar (8 LLVM lines) similar (50 ns vs. 60 ns) 4 times more (285 ms vs. 62 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 (50 ns vs. 50 ns) similar (50 ms vs. 31 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 (40 ns vs. 50 ns) similar (58 ms vs. 31 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 (50 ns vs. 50 ns) similar (44 ms vs. 36 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 (50 ns vs. 50 ns) similar (61 ms vs. 31 ms) 5 times more (3 MB vs. 704 kB)
unrolled_filter(!isempty, itr) filter(!isempty, itr) Tuple 4 identical nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) 4 times more (128 ms vs. 30 ms) 7 times more (6 MB vs. 831 kB)
unrolled_filter(!isempty, itr) filter(!isempty, itr) Tuple 8 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) 5 times more (183 ms vs. 31 ms) 8 times more (8 MB vs. 936 kB)
unrolled_filter(!isempty, itr) filter(!isempty, itr) Tuple 32 identical nonempty singleton Tuples better (optimized out vs. 128 B allocs) 13 times less (50 ns vs. 650 ns) 4 times more (524 ms vs. 116 ms) 2 times more (19 MB vs. 7 MB)
unrolled_filter(!isempty, itr) filter(!isempty, itr) Tuple 128 identical nonempty singleton Tuples better (optimized out vs. 128 B allocs) 42 times less (50 ns vs. 2 μs) 18 times more (2 s vs. 114 ms) 10 times more (74 MB vs. 7 MB)
unrolled_filter(!isempty, itr) filter(!isempty, itr) Tuple 2 identical nonempty non-singleton Tuples similar (8 LLVM lines) similar (60 ns vs. 60 ns) similar (51 ms vs. 37 ms) 4 times more (4 MB vs. 960 kB)
unrolled_filter(!isempty, itr) filter(!isempty, itr) Tuple 4 identical nonempty non-singleton Tuples similar (8 LLVM lines) similar (60 ns vs. 60 ns) 2 times more (91 ms vs. 36 ms) 6 times more (8 MB vs. 1 MB)
unrolled_filter(!isempty, itr) filter(!isempty, itr) Tuple 8 identical nonempty non-singleton Tuples similar (12 LLVM lines) similar (60 ns vs. 50 ns) 2 times more (103 ms vs. 37 ms) 7 times more (12 MB vs. 2 MB)
unrolled_filter(!isempty, itr) filter(!isempty, itr) Tuple 32 identical nonempty non-singleton Tuples better (36 LLVM lines vs. 1 kB allocs) 22 times less (60 ns vs. 1 μs) similar (239 ms vs. 131 ms) 7 times more (55 MB vs. 7 MB)
unrolled_filter(!isempty, itr) filter(!isempty, itr) Tuple 128 identical nonempty non-singleton Tuples better (132 LLVM lines vs. 5 kB allocs) 55 times less (90 ns vs. 5 μs) 9 times more (1 s vs. 130 ms) 80 times more (567 MB vs. 7 MB)
unrolled_filter(!isempty, itr) filter(!isempty, itr) Tuple 2 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) 2 times more (63 ms vs. 30 ms) 4 times more (4 MB vs. 782 kB)
unrolled_filter(!isempty, itr) filter(!isempty, itr) Tuple 4 distinct empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) 4 times more (130 ms vs. 31 ms) 6 times more (6 MB vs. 1004 kB)
unrolled_filter(!isempty, itr) filter(!isempty, itr) Tuple 8 distinct empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) 5 times more (186 ms vs. 31 ms) 6 times more (8 MB vs. 1 MB)
unrolled_filter(!isempty, itr) filter(!isempty, itr) Tuple 32 distinct empty & nonempty singleton Tuples better (optimized out vs. 880 B allocs) 19 times less (50 ns vs. 971 ns) 3 times more (528 ms vs. 139 ms) 2 times more (19 MB vs. 8 MB)
unrolled_filter(!isempty, itr) filter(!isempty, itr) Tuple 128 distinct empty & nonempty singleton Tuples better (optimized out vs. 3 kB allocs) 80 times less (40 ns vs. 3 μs) 14 times more (2 s vs. 140 ms) 8 times more (71 MB vs. 8 MB)
unrolled_filter(!isempty, itr) filter(!isempty, itr) Tuple 2 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) 2 times more (83 ms vs. 31 ms) 4 times more (4 MB vs. 789 kB)
unrolled_filter(!isempty, itr) filter(!isempty, itr) Tuple 4 distinct nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) 4 times more (130 ms vs. 31 ms) 6 times more (6 MB vs. 1011 kB)
unrolled_filter(!isempty, itr) filter(!isempty, itr) Tuple 8 distinct nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) 5 times more (186 ms vs. 32 ms) 6 times more (8 MB vs. 1 MB)
unrolled_filter(!isempty, itr) filter(!isempty, itr) Tuple 32 distinct nonempty singleton Tuples better (optimized out vs. 640 B allocs) 88 times less (40 ns vs. 4 μs) 3 times more (532 ms vs. 169 ms) 2 times more (20 MB vs. 9 MB)
unrolled_filter(!isempty, itr) filter(!isempty, itr) Tuple 128 distinct nonempty singleton Tuples better (optimized out vs. 2 kB allocs) 290 times less (50 ns vs. 15 μs) 12 times more (2 s vs. 170 ms) 8 times more (75 MB vs. 9 MB)
unrolled_filter(!isempty, itr) filter(!isempty, itr) Tuple 2 distinct nonempty non-singleton Tuples similar (11 LLVM lines) similar (60 ns vs. 50 ns) similar (51 ms vs. 35 ms) 4 times more (4 MB vs. 1 MB)
unrolled_filter(!isempty, itr) filter(!isempty, itr) Tuple 4 distinct nonempty non-singleton Tuples similar (17 LLVM lines) similar (60 ns vs. 60 ns) 2 times more (93 ms vs. 37 ms) 5 times more (8 MB vs. 1 MB)
unrolled_filter(!isempty, itr) filter(!isempty, itr) Tuple 8 distinct nonempty non-singleton Tuples similar (30 LLVM lines) similar (70 ns vs. 60 ns) 2 times more (107 ms vs. 39 ms) 6 times more (13 MB vs. 2 MB)
unrolled_filter(!isempty, itr) filter(!isempty, itr) Tuple 32 distinct nonempty non-singleton Tuples better (105 LLVM lines vs. 35 kB allocs) 90 times less (80 ns vs. 7 μs) similar (241 ms vs. 188 ms) 6 times more (56 MB vs. 9 MB)
unrolled_filter(!isempty, itr) filter(!isempty, itr) Tuple 128 distinct nonempty non-singleton Tuples better (625 LLVM lines vs. 533 kB allocs) 159 times less (360 ns vs. 57 μs) 7 times more (1 s vs. 189 ms) 62 times more (568 MB vs. 9 MB)
unrolled_split(isempty, itr) (filter(isempty, itr), filter(!isempty, itr)) Tuple 1 empty singleton Tuple similar (optimized out) similar (50 ns vs. 50 ns) 2 times more (81 ms vs. 32 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 (40 ns vs. 50 ns) 2 times more (80 ms vs. 32 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 (53 ms vs. 37 ms) 4 times more (5 MB vs. 1006 kB)
unrolled_split(isempty, itr) (filter(isempty, itr), filter(!isempty, itr)) Tuple 2 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) 3 times more (119 ms vs. 32 ms) 7 times more (7 MB vs. 882 kB)
unrolled_split(isempty, itr) (filter(isempty, itr), filter(!isempty, itr)) Tuple 4 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) 6 times more (194 ms vs. 31 ms) 10 times more (10 MB vs. 1016 kB)
unrolled_split(isempty, itr) (filter(isempty, itr), filter(!isempty, itr)) Tuple 8 identical nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) 8 times more (271 ms vs. 32 ms) 17 times more (20 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 (50 ns vs. 771 ns) 5 times more (640 ms vs. 124 ms) 4 times more (34 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 (50 ns vs. 2 μs) 18 times more (2 s vs. 121 ms) 13 times more (101 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 (60 ns vs. 60 ns) similar (64 ms vs. 38 ms) 6 times more (7 MB vs. 1 MB)
unrolled_split(isempty, itr) (filter(isempty, itr), filter(!isempty, itr)) Tuple 4 identical nonempty non-singleton Tuples similar (8 LLVM lines) similar (60 ns vs. 60 ns) 3 times more (115 ms vs. 37 ms) 9 times more (13 MB vs. 1 MB)
unrolled_split(isempty, itr) (filter(isempty, itr), filter(!isempty, itr)) Tuple 8 identical nonempty non-singleton Tuples similar (12 LLVM lines) similar (50 ns vs. 60 ns) 3 times more (144 ms vs. 38 ms) 13 times more (25 MB vs. 2 MB)
unrolled_split(isempty, itr) (filter(isempty, itr), filter(!isempty, itr)) Tuple 32 identical nonempty non-singleton Tuples better (36 LLVM lines vs. 2 kB allocs) 26 times less (60 ns vs. 2 μs) similar (280 ms vs. 141 ms) 9 times more (70 MB vs. 7 MB)
unrolled_split(isempty, itr) (filter(isempty, itr), filter(!isempty, itr)) Tuple 128 identical nonempty non-singleton Tuples better (132 LLVM lines vs. 7 kB allocs) 59 times less (90 ns vs. 5 μs) 9 times more (1 s vs. 141 ms) 77 times more (569 MB vs. 7 MB)
unrolled_split(isempty, itr) (filter(isempty, itr), filter(!isempty, itr)) Tuple 2 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) 3 times more (116 ms vs. 31 ms) 7 times more (7 MB vs. 970 kB)
unrolled_split(isempty, itr) (filter(isempty, itr), filter(!isempty, itr)) Tuple 4 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) 6 times more (203 ms vs. 32 ms) 15 times more (18 MB vs. 1 MB)
unrolled_split(isempty, itr) (filter(isempty, itr), filter(!isempty, itr)) Tuple 8 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) 8 times more (278 ms vs. 32 ms) 13 times more (21 MB vs. 2 MB)
unrolled_split(isempty, itr) (filter(isempty, itr), filter(!isempty, itr)) Tuple 32 distinct empty & nonempty singleton Tuples better (optimized out vs. 2 kB allocs) 31 times less (50 ns vs. 2 μs) 4 times more (732 ms vs. 152 ms) 4 times more (37 MB vs. 8 MB)
unrolled_split(isempty, itr) (filter(isempty, itr), filter(!isempty, itr)) Tuple 128 distinct empty & nonempty singleton Tuples better (optimized out vs. 5 kB allocs) 108 times less (50 ns vs. 5 μs) 17 times more (3 s vs. 153 ms) 13 times more (112 MB vs. 8 MB)
unrolled_split(isempty, itr) (filter(isempty, itr), filter(!isempty, itr)) Tuple 2 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) 3 times more (116 ms vs. 31 ms) 7 times more (7 MB vs. 975 kB)
unrolled_split(isempty, itr) (filter(isempty, itr), filter(!isempty, itr)) Tuple 4 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) 6 times more (206 ms vs. 33 ms) 15 times more (18 MB vs. 1 MB)
unrolled_split(isempty, itr) (filter(isempty, itr), filter(!isempty, itr)) Tuple 8 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) 8 times more (264 ms vs. 33 ms) 12 times more (21 MB vs. 2 MB)
unrolled_split(isempty, itr) (filter(isempty, itr), filter(!isempty, itr)) Tuple 32 distinct nonempty singleton Tuples better (optimized out vs. 1 kB allocs) 131 times less (50 ns vs. 7 μs) 3 times more (648 ms vs. 185 ms) 3 times more (35 MB vs. 9 MB)
unrolled_split(isempty, itr) (filter(isempty, itr), filter(!isempty, itr)) Tuple 128 distinct nonempty singleton Tuples better (optimized out vs. 4 kB allocs) 549 times less (50 ns vs. 27 μs) 11 times more (2 s vs. 191 ms) 11 times more (102 MB vs. 9 MB)
unrolled_split(isempty, itr) (filter(isempty, itr), filter(!isempty, itr)) Tuple 2 distinct nonempty non-singleton Tuples similar (11 LLVM lines) similar (60 ns vs. 60 ns) similar (64 ms vs. 36 ms) 5 times more (7 MB vs. 1 MB)
unrolled_split(isempty, itr) (filter(isempty, itr), filter(!isempty, itr)) Tuple 4 distinct nonempty non-singleton Tuples similar (17 LLVM lines) similar (60 ns vs. 60 ns) 3 times more (133 ms vs. 38 ms) 12 times more (20 MB vs. 2 MB)
unrolled_split(isempty, itr) (filter(isempty, itr), filter(!isempty, itr)) Tuple 8 distinct nonempty non-singleton Tuples similar (30 LLVM lines) similar (60 ns vs. 70 ns) 3 times more (147 ms vs. 40 ms) 11 times more (26 MB vs. 2 MB)
unrolled_split(isempty, itr) (filter(isempty, itr), filter(!isempty, itr)) Tuple 32 distinct nonempty non-singleton Tuples better (105 LLVM lines vs. 69 kB allocs) 193 times less (80 ns vs. 15 μs) similar (286 ms vs. 201 ms) 7 times more (71 MB vs. 9 MB)
unrolled_split(isempty, itr) (filter(isempty, itr), filter(!isempty, itr)) Tuple 128 distinct nonempty non-singleton Tuples better (843 LLVM lines vs. 1 MB allocs) 182 times less (611 ns vs. 111 μs) 7 times more (1 s vs. 202 ms) 57 times more (570 MB vs. 10 MB)
unrolled_flatten(itr) Tuple(Iterators.flatten(itr)) Tuple 1 empty singleton Tuple similar (optimized out) similar (50 ns vs. 50 ns) similar (50 ms vs. 32 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 (50 ns vs. 140 ns) similar (54 ms vs. 48 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 (50 ns vs. 170 ns) similar (43 ms vs. 39 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 (50 ns vs. 150 ns) similar (57 ms vs. 51 ms) similar (3 MB vs. 3 MB)
unrolled_flatten(itr) Tuple(Iterators.flatten(itr)) Tuple 4 identical nonempty singleton Tuples better (optimized out vs. 64 B allocs) 3 times less (50 ns vs. 190 ns) 2 times more (118 ms vs. 52 ms) similar (6 MB vs. 3 MB)
unrolled_flatten(itr) Tuple(Iterators.flatten(itr)) Tuple 8 identical nonempty singleton Tuples better (optimized out vs. 64 B allocs) 5 times less (50 ns vs. 250 ns) 3 times more (174 ms vs. 51 ms) 2 times more (8 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 (50 ns vs. 620 ns) 9 times more (513 ms vs. 55 ms) 5 times more (18 MB vs. 3 MB)
unrolled_flatten(itr) Tuple(Iterators.flatten(itr)) Tuple 128 identical nonempty singleton Tuples better (optimized out vs. 64 B allocs) 54 times less (40 ns vs. 2 μs) 38 times more (2 s vs. 53 ms) 22 times more (74 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 (60 ns vs. 190 ns) similar (50 ms vs. 44 ms) similar (4 MB vs. 3 MB)
unrolled_flatten(itr) Tuple(Iterators.flatten(itr)) Tuple 4 identical nonempty non-singleton Tuples better (8 LLVM lines vs. 144 B allocs) 4 times less (60 ns vs. 240 ns) similar (83 ms vs. 44 ms) 2 times more (7 MB vs. 3 MB)
unrolled_flatten(itr) Tuple(Iterators.flatten(itr)) Tuple 8 identical nonempty non-singleton Tuples better (12 LLVM lines vs. 208 B allocs) 5 times less (60 ns vs. 350 ns) 2 times more (93 ms vs. 46 ms) 3 times more (11 MB vs. 3 MB)
unrolled_flatten(itr) Tuple(Iterators.flatten(itr)) Tuple 32 identical nonempty non-singleton Tuples better (36 LLVM lines vs. 592 B allocs) 17 times less (60 ns vs. 1 μs) 4 times more (210 ms vs. 45 ms) 14 times more (48 MB vs. 3 MB)
unrolled_flatten(itr) Tuple(Iterators.flatten(itr)) Tuple 128 identical nonempty non-singleton Tuples better (132 LLVM lines vs. 2 kB allocs) 47 times less (80 ns vs. 4 μs) 24 times more (1 s vs. 46 ms) 143 times more (481 MB vs. 3 MB)
unrolled_flatten(itr) Tuple(Iterators.flatten(itr)) Tuple 2 distinct empty & nonempty singleton Tuples better (optimized out vs. 96 B allocs) 7 times less (50 ns vs. 391 ns) similar (58 ms vs. 73 ms) similar (3 MB vs. 5 MB)
unrolled_flatten(itr) Tuple(Iterators.flatten(itr)) Tuple 4 distinct empty & nonempty singleton Tuples better (optimized out vs. 128 B allocs) 6 times less (50 ns vs. 340 ns) similar (122 ms vs. 87 ms) similar (6 MB vs. 6 MB)
unrolled_flatten(itr) Tuple(Iterators.flatten(itr)) Tuple 8 distinct empty & nonempty singleton Tuples better (optimized out vs. 496 B allocs) 16 times less (50 ns vs. 801 ns) 2 times more (191 ms vs. 87 ms) similar (8 MB vs. 6 MB)
unrolled_flatten(itr) Tuple(Iterators.flatten(itr)) Tuple 32 distinct empty & nonempty singleton Tuples better (optimized out vs. 2 kB allocs) 56 times less (50 ns vs. 3 μs) 6 times more (526 ms vs. 83 ms) 3 times more (20 MB vs. 6 MB)
unrolled_flatten(itr) Tuple(Iterators.flatten(itr)) Tuple 128 distinct empty & nonempty singleton Tuples better (optimized out vs. 8 kB allocs) 232 times less (50 ns vs. 12 μs) 27 times more (2 s vs. 83 ms) 18 times more (104 MB vs. 6 MB)
unrolled_flatten(itr) Tuple(Iterators.flatten(itr)) Tuple 2 distinct nonempty singleton Tuples better (optimized out vs. 192 B allocs) 5 times less (50 ns vs. 290 ns) similar (59 ms vs. 88 ms) similar (3 MB vs. 5 MB)
unrolled_flatten(itr) Tuple(Iterators.flatten(itr)) Tuple 4 distinct nonempty singleton Tuples better (optimized out vs. 496 B allocs) 9 times less (50 ns vs. 460 ns) similar (121 ms vs. 87 ms) similar (6 MB vs. 7 MB)
unrolled_flatten(itr) Tuple(Iterators.flatten(itr)) Tuple 8 distinct nonempty singleton Tuples better (optimized out vs. 496 B allocs) 20 times less (50 ns vs. 1 μs) 2 times more (176 ms vs. 86 ms) similar (8 MB vs. 7 MB)
unrolled_flatten(itr) Tuple(Iterators.flatten(itr)) Tuple 32 distinct nonempty singleton Tuples better (optimized out vs. 2 kB allocs) 72 times less (50 ns vs. 4 μs) 6 times more (557 ms vs. 86 ms) 3 times more (22 MB vs. 7 MB)
unrolled_flatten(itr) Tuple(Iterators.flatten(itr)) Tuple 128 distinct nonempty singleton Tuples better (optimized out vs. 8 kB allocs) 295 times less (50 ns vs. 15 μs) 28 times more (2 s vs. 86 ms) 18 times more (122 MB vs. 7 MB)
unrolled_flatten(itr) Tuple(Iterators.flatten(itr)) Tuple 2 distinct nonempty non-singleton Tuples better (12 LLVM lines vs. 352 B allocs) 6 times less (60 ns vs. 380 ns) similar (51 ms vs. 64 ms) similar (4 MB vs. 5 MB)
unrolled_flatten(itr) Tuple(Iterators.flatten(itr)) Tuple 4 distinct nonempty non-singleton Tuples better (16 LLVM lines vs. 1 kB allocs) 9 times less (60 ns vs. 591 ns) similar (87 ms vs. 59 ms) similar (8 MB vs. 4 MB)
unrolled_flatten(itr) Tuple(Iterators.flatten(itr)) Tuple 8 distinct nonempty non-singleton Tuples better (36 LLVM lines vs. 3 kB allocs) 21 times less (60 ns vs. 1 μs) similar (102 ms vs. 60 ms) 3 times more (15 MB vs. 4 MB)
unrolled_flatten(itr) Tuple(Iterators.flatten(itr)) Tuple 32 distinct nonempty non-singleton Tuples better (128 LLVM lines vs. 35 kB allocs) 74 times less (80 ns vs. 6 μs) 5 times more (349 ms vs. 60 ms) 27 times more (118 MB vs. 4 MB)
unrolled_flatten(itr) Tuple(Iterators.flatten(itr)) Tuple 128 distinct nonempty non-singleton Tuples better (516 LLVM lines vs. 533 kB allocs) 141 times less (300 ns vs. 42 μs) 64 times more (4 s vs. 60 ms) 339 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 (50 ns vs. 50 ns) similar (62 ms vs. 55 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 (50 ns vs. 150 ns) similar (66 ms vs. 86 ms) similar (4 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 (60 ns vs. 180 ns) similar (44 ms vs. 57 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 (50 ns vs. 180 ns) similar (70 ms vs. 104 ms) similar (4 MB vs. 5 MB)
unrolled_flatmap(Iterators.reverse, itr) Tuple(Iterators.flatmap(Iterators.reverse, itr)) Tuple 4 identical nonempty singleton Tuples better (optimized out vs. 96 B allocs) 4 times less (50 ns vs. 210 ns) similar (137 ms vs. 106 ms) similar (6 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 (50 ns vs. 280 ns) similar (192 ms vs. 104 ms) similar (8 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) 13 times less (50 ns vs. 691 ns) 5 times more (537 ms vs. 104 ms) 3 times more (19 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) 46 times less (50 ns vs. 2 μs) 19 times more (2 s vs. 105 ms) 14 times more (75 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) 3 times less (60 ns vs. 220 ns) similar (52 ms vs. 66 ms) similar (4 MB vs. 4 MB)
unrolled_flatmap(Iterators.reverse, itr) Tuple(Iterators.flatmap(Iterators.reverse, itr)) Tuple 4 identical nonempty non-singleton Tuples better (8 LLVM lines vs. 208 B allocs) 4 times less (60 ns vs. 280 ns) similar (92 ms vs. 69 ms) similar (8 MB vs. 4 MB)
unrolled_flatmap(Iterators.reverse, itr) Tuple(Iterators.flatmap(Iterators.reverse, itr)) Tuple 8 identical nonempty non-singleton Tuples better (12 LLVM lines vs. 240 B allocs) 7 times less (50 ns vs. 390 ns) similar (103 ms vs. 69 ms) 2 times more (12 MB vs. 5 MB)
unrolled_flatmap(Iterators.reverse, itr) Tuple(Iterators.flatmap(Iterators.reverse, itr)) Tuple 32 identical nonempty non-singleton Tuples better (36 LLVM lines vs. 800 B allocs) 19 times less (60 ns vs. 1 μs) 3 times more (236 ms vs. 69 ms) 12 times more (54 MB vs. 4 MB)
unrolled_flatmap(Iterators.reverse, itr) Tuple(Iterators.flatmap(Iterators.reverse, itr)) Tuple 128 identical nonempty non-singleton Tuples better (132 LLVM lines vs. 3 kB allocs) 44 times less (90 ns vs. 4 μs) 18 times more (1 s vs. 68 ms) 127 times more (552 MB vs. 4 MB)
unrolled_flatmap(Iterators.reverse, itr) Tuple(Iterators.flatmap(Iterators.reverse, itr)) Tuple 2 distinct empty & nonempty singleton Tuples better (optimized out vs. 144 B allocs) 6 times less (50 ns vs. 310 ns) similar (74 ms vs. 123 ms) similar (4 MB vs. 7 MB)
unrolled_flatmap(Iterators.reverse, itr) Tuple(Iterators.flatmap(Iterators.reverse, itr)) Tuple 4 distinct empty & nonempty singleton Tuples better (optimized out vs. 1 kB allocs) 74 times less (50 ns vs. 4 μs) 2 times less (150 ms vs. 331 ms) 4 times less (7 MB vs. 30 MB)
unrolled_flatmap(Iterators.reverse, itr) Tuple(Iterators.flatmap(Iterators.reverse, itr)) Tuple 8 distinct empty & nonempty singleton Tuples better (optimized out vs. 3 kB allocs) 144 times less (50 ns vs. 7 μs) similar (215 ms vs. 394 ms) 3 times less (9 MB vs. 32 MB)
unrolled_flatmap(Iterators.reverse, itr) Tuple(Iterators.flatmap(Iterators.reverse, itr)) Tuple 32 distinct empty & nonempty singleton Tuples better (optimized out vs. 11 kB allocs) 439 times less (50 ns vs. 22 μs) similar (565 ms vs. 405 ms) similar (21 MB vs. 32 MB)
unrolled_flatmap(Iterators.reverse, itr) Tuple(Iterators.flatmap(Iterators.reverse, itr)) Tuple 128 distinct empty & nonempty singleton Tuples better (optimized out vs. 43 kB allocs) 2102 times less (40 ns vs. 84 μs) 5 times more (2 s vs. 407 ms) 3 times more (106 MB vs. 32 MB)
unrolled_flatmap(Iterators.reverse, itr) Tuple(Iterators.flatmap(Iterators.reverse, itr)) Tuple 2 distinct nonempty singleton Tuples better (optimized out vs. 240 B allocs) 8 times less (50 ns vs. 400 ns) 3 times less (75 ms vs. 244 ms) 4 times less (4 MB vs. 17 MB)
unrolled_flatmap(Iterators.reverse, itr) Tuple(Iterators.flatmap(Iterators.reverse, itr)) Tuple 4 distinct nonempty singleton Tuples better (optimized out vs. 1 kB allocs) 38 times less (50 ns vs. 2 μs) 2 times less (150 ms vs. 320 ms) 3 times less (7 MB vs. 24 MB)
unrolled_flatmap(Iterators.reverse, itr) Tuple(Iterators.flatmap(Iterators.reverse, itr)) Tuple 8 distinct nonempty singleton Tuples better (optimized out vs. 3 kB allocs) 121 times less (50 ns vs. 6 μs) similar (217 ms vs. 389 ms) 2 times less (9 MB vs. 26 MB)
unrolled_flatmap(Iterators.reverse, itr) Tuple(Iterators.flatmap(Iterators.reverse, itr)) Tuple 32 distinct nonempty singleton Tuples better (optimized out vs. 13 kB allocs) 503 times less (50 ns vs. 25 μs) similar (587 ms vs. 392 ms) similar (23 MB vs. 26 MB)
unrolled_flatmap(Iterators.reverse, itr) Tuple(Iterators.flatmap(Iterators.reverse, itr)) Tuple 128 distinct nonempty singleton Tuples better (optimized out vs. 55 kB allocs) 2314 times less (50 ns vs. 116 μs) 6 times more (3 s vs. 399 ms) 4 times more (124 MB vs. 26 MB)
unrolled_flatmap(Iterators.reverse, itr) Tuple(Iterators.flatmap(Iterators.reverse, itr)) Tuple 2 distinct nonempty non-singleton Tuples better (13 LLVM lines vs. 352 B allocs) 6 times less (60 ns vs. 410 ns) similar (53 ms vs. 89 ms) similar (5 MB vs. 6 MB)
unrolled_flatmap(Iterators.reverse, itr) Tuple(Iterators.flatmap(Iterators.reverse, itr)) Tuple 4 distinct nonempty non-singleton Tuples better (32 LLVM lines vs. 3 kB allocs) 32 times less (60 ns vs. 2 μs) similar (96 ms vs. 144 ms) similar (9 MB vs. 7 MB)
unrolled_flatmap(Iterators.reverse, itr) Tuple(Iterators.flatmap(Iterators.reverse, itr)) Tuple 8 distinct nonempty non-singleton Tuples better (69 LLVM lines vs. 14 kB allocs) 100 times less (60 ns vs. 6 μs) similar (117 ms vs. 234 ms) similar (18 MB vs. 9 MB)
unrolled_flatmap(Iterators.reverse, itr) Tuple(Iterators.flatmap(Iterators.reverse, itr)) Tuple 32 distinct nonempty non-singleton Tuples better (276 LLVM lines vs. 175 kB allocs) 434 times less (90 ns vs. 39 μs) similar (397 ms vs. 231 ms) 14 times more (138 MB vs. 9 MB)
unrolled_flatmap(Iterators.reverse, itr) Tuple(Iterators.flatmap(Iterators.reverse, itr)) Tuple 128 distinct nonempty non-singleton Tuples better (1111 LLVM lines vs. 3 MB allocs) 826 times less (351 ns vs. 290 μs) 18 times more (4 s vs. 231 ms) 160 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 (50 ns vs. 140 ns) similar (84 ms vs. 111 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 (50 ns vs. 140 ns) similar (83 ms vs. 111 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) 2 times less (60 ns vs. 170 ns) similar (72 ms vs. 105 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 (50 ns vs. 180 ns) similar (97 ms vs. 117 ms) 2 times less (7 MB vs. 16 MB)
unrolled_product(itr, itr) Tuple(Iterators.product(itr, itr)) Tuple 4 identical nonempty singleton Tuples better (optimized out vs. 80 B allocs) 7 times less (50 ns vs. 380 ns) similar (104 ms vs. 117 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) 28 times less (40 ns vs. 1 μs) similar (131 ms vs. 117 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) 346 times less (50 ns vs. 17 μs) 7 times more (898 ms vs. 116 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 (19 LLVM lines vs. 352 B allocs) 5 times less (50 ns vs. 280 ns) similar (87 ms vs. 112 ms) 2 times less (8 MB vs. 16 MB)
unrolled_product(itr, itr) Tuple(Iterators.product(itr, itr)) Tuple 4 identical nonempty non-singleton Tuples better (63 LLVM lines vs. 1 kB allocs) 12 times less (60 ns vs. 731 ns) similar (101 ms vs. 112 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 (246 LLVM lines vs. 4 kB allocs) 25 times less (100 ns vs. 3 μs) similar (172 ms vs. 114 ms) similar (10 MB vs. 16 MB)
unrolled_product(itr, itr) Tuple(Iterators.product(itr, itr)) Tuple 32 identical nonempty non-singleton Tuples better (4026 LLVM lines vs. 72 kB allocs) 38 times less (1 μs vs. 38 μs) 80 times more (9 s vs. 113 ms) 3 times more (54 MB vs. 16 MB)
unrolled_product(itr, itr) Tuple(Iterators.product(itr, itr)) Tuple 2 distinct empty & nonempty singleton Tuples better (optimized out vs. 112 B allocs) 6 times less (50 ns vs. 320 ns) similar (99 ms vs. 148 ms) 2 times less (7 MB vs. 21 MB)
unrolled_product(itr, itr) Tuple(Iterators.product(itr, itr)) Tuple 4 distinct empty & nonempty singleton Tuples better (optimized out vs. 208 B allocs) 19 times less (50 ns vs. 991 ns) similar (108 ms vs. 145 ms) 2 times less (8 MB vs. 21 MB)
unrolled_product(itr, itr) Tuple(Iterators.product(itr, itr)) Tuple 8 distinct empty & nonempty singleton Tuples better (optimized out vs. 592 B allocs) 75 times less (50 ns vs. 4 μs) similar (146 ms vs. 145 ms) 2 times less (10 MB vs. 21 MB)
unrolled_product(itr, itr) Tuple(Iterators.product(itr, itr)) Tuple 32 distinct empty & nonempty singleton Tuples better (optimized out vs. 16 kB allocs) 1098 times less (50 ns vs. 55 μs) 27 times more (4 s vs. 145 ms) 2 times more (48 MB vs. 21 MB)
unrolled_product(itr, itr) Tuple(Iterators.product(itr, itr)) Tuple 2 distinct nonempty singleton Tuples better (optimized out vs. 112 B allocs) 6 times less (50 ns vs. 340 ns) similar (98 ms vs. 147 ms) 2 times less (7 MB vs. 21 MB)
unrolled_product(itr, itr) Tuple(Iterators.product(itr, itr)) Tuple 4 distinct nonempty singleton Tuples better (optimized out vs. 208 B allocs) 53 times less (50 ns vs. 3 μs) similar (108 ms vs. 214 ms) 2 times less (8 MB vs. 23 MB)
unrolled_product(itr, itr) Tuple(Iterators.product(itr, itr)) Tuple 8 distinct nonempty singleton Tuples better (optimized out vs. 592 B allocs) 265 times less (40 ns vs. 11 μs) 2 times less (145 ms vs. 351 ms) 2 times less (10 MB vs. 27 MB)
unrolled_product(itr, itr) Tuple(Iterators.product(itr, itr)) Tuple 32 distinct nonempty singleton Tuples better (optimized out vs. 24 kB allocs) 3228 times less (50 ns vs. 161 μs) 10 times more (4 s vs. 350 ms) similar (48 MB vs. 27 MB)
unrolled_product(itr, itr) Tuple(Iterators.product(itr, itr)) Tuple 2 distinct nonempty non-singleton Tuples better (25 LLVM lines vs. 592 B allocs) 9 times less (60 ns vs. 560 ns) similar (89 ms vs. 150 ms) 2 times less (8 MB vs. 21 MB)
unrolled_product(itr, itr) Tuple(Iterators.product(itr, itr)) Tuple 4 distinct nonempty non-singleton Tuples better (91 LLVM lines vs. 4 kB allocs) 57 times less (90 ns vs. 5 μs) 2 times less (108 ms vs. 243 ms) 2 times less (8 MB vs. 24 MB)
unrolled_product(itr, itr) Tuple(Iterators.product(itr, itr)) Tuple 8 distinct nonempty non-singleton Tuples better (374 LLVM lines vs. 31 kB allocs) 116 times less (310 ns vs. 36 μs) 2 times less (196 ms vs. 459 ms) 2 times less (10 MB vs. 28 MB)
unrolled_product(itr, itr) Tuple(Iterators.product(itr, itr)) Tuple 32 distinct nonempty non-singleton Tuples better (8209 LLVM lines vs. 1 MB allocs) 67 times less (8 μs vs. 559 μs) 12 times more (6 s vs. 462 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 (50 ns vs. 140 ns) similar (87 ms vs. 129 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 (50 ns vs. 130 ns) similar (87 ms vs. 130 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 (60 ns vs. 180 ns) similar (76 ms vs. 121 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 (50 ns vs. 240 ns) similar (107 ms vs. 155 ms) similar (9 MB vs. 18 MB)
unrolled_product(itr, itr, itr) Tuple(Iterators.product(itr, itr, itr)) Tuple 4 identical nonempty singleton Tuples better (optimized out vs. 80 B allocs) 22 times less (50 ns vs. 1 μs) similar (169 ms vs. 136 ms) similar (12 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) 171 times less (50 ns vs. 9 μs) 6 times more (836 ms vs. 136 ms) similar (36 MB vs. 18 MB)
unrolled_product(itr, itr, itr) Tuple(Iterators.product(itr, itr, itr)) Tuple 2 identical nonempty non-singleton Tuples better (32 LLVM lines vs. 736 B allocs) 7 times less (60 ns vs. 450 ns) similar (101 ms vs. 137 ms) similar (9 MB vs. 18 MB)
unrolled_product(itr, itr, itr) Tuple(Iterators.product(itr, itr, itr)) Tuple 4 identical nonempty non-singleton Tuples better (298 LLVM lines vs. 5 kB allocs) 25 times less (100 ns vs. 3 μs) similar (271 ms vs. 136 ms) similar (13 MB vs. 18 MB)
unrolled_product(itr, itr, itr) Tuple(Iterators.product(itr, itr, itr)) Tuple 8 identical nonempty non-singleton Tuples better (2716 LLVM lines vs. 44 kB allocs) 26 times less (741 ns vs. 20 μs) 37 times more (5 s vs. 138 ms) 2 times more (41 MB vs. 19 MB)
unrolled_product(itr, itr, itr) Tuple(Iterators.product(itr, itr, itr)) Tuple 2 distinct empty & nonempty singleton Tuples better (optimized out vs. 144 B allocs) 12 times less (50 ns vs. 610 ns) similar (109 ms vs. 160 ms) 2 times less (9 MB vs. 23 MB)
unrolled_product(itr, itr, itr) Tuple(Iterators.product(itr, itr, itr)) Tuple 4 distinct empty & nonempty singleton Tuples better (optimized out vs. 592 B allocs) 85 times less (50 ns vs. 4 μs) similar (188 ms vs. 163 ms) similar (12 MB vs. 24 MB)
unrolled_product(itr, itr, itr) Tuple(Iterators.product(itr, itr, itr)) Tuple 8 distinct empty & nonempty singleton Tuples better (optimized out vs. 8 kB allocs) 690 times less (50 ns vs. 35 μs) 10 times more (2 s vs. 158 ms) similar (37 MB vs. 24 MB)
unrolled_product(itr, itr, itr) Tuple(Iterators.product(itr, itr, itr)) Tuple 2 distinct nonempty singleton Tuples better (optimized out vs. 144 B allocs) 11 times less (50 ns vs. 590 ns) similar (109 ms vs. 161 ms) 2 times less (9 MB vs. 24 MB)
unrolled_product(itr, itr, itr) Tuple(Iterators.product(itr, itr, itr)) Tuple 4 distinct nonempty singleton Tuples better (optimized out vs. 592 B allocs) 239 times less (50 ns vs. 12 μs) 2 times less (187 ms vs. 424 ms) 2 times less (12 MB vs. 32 MB)
unrolled_product(itr, itr, itr) Tuple(Iterators.product(itr, itr, itr)) Tuple 8 distinct nonempty singleton Tuples better (optimized out vs. 8 kB allocs) 2705 times less (50 ns vs. 135 μs) similar (2 s vs. 2 s) similar (37 MB vs. 72 MB)
unrolled_product(itr, itr, itr) Tuple(Iterators.product(itr, itr, itr)) Tuple 2 distinct nonempty non-singleton Tuples better (59 LLVM lines vs. 1 kB allocs) 18 times less (70 ns vs. 1 μs) similar (106 ms vs. 189 ms) 2 times less (9 MB vs. 24 MB)
unrolled_product(itr, itr, itr) Tuple(Iterators.product(itr, itr, itr)) Tuple 4 distinct nonempty non-singleton Tuples better (556 LLVM lines vs. 22 kB allocs) 107 times less (350 ns vs. 38 μs) 2 times less (262 ms vs. 573 ms) 2 times less (13 MB vs. 34 MB)
unrolled_product(itr, itr, itr) Tuple(Iterators.product(itr, itr, itr)) Tuple 8 distinct nonempty non-singleton Tuples better (5702 LLVM lines vs. 293 kB allocs) 76 times less (6 μs vs. 436 μs) similar (4 s vs. 3 s) similar (42 MB vs. 73 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 (50 ns vs. 160 ns) similar (68 ms vs. 58 ms) similar (4 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 (50 ns vs. 170 ns) similar (68 ms vs. 60 ms) similar (4 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 (60 ns vs. 240 ns) similar (45 ms vs. 57 ms) similar (5 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 (50 ns vs. 210 ns) similar (80 ms vs. 58 ms) similar (4 MB vs. 5 MB)
unrolled_cycle(itr, Val(3)) Tuple(Iterators.cycle(itr, 3)) Tuple 4 identical nonempty singleton Tuples better (optimized out vs. 64 B allocs) 6 times less (50 ns vs. 310 ns) similar (80 ms vs. 58 ms) similar (4 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) 10 times less (50 ns vs. 510 ns) similar (80 ms vs. 57 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) 41 times less (40 ns vs. 2 μs) similar (82 ms vs. 57 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) 154 times less (40 ns vs. 6 μs) similar (89 ms vs. 57 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) 7 times less (50 ns vs. 350 ns) similar (58 ms vs. 60 ms) similar (5 MB vs. 5 MB)
unrolled_cycle(itr, Val(3)) Tuple(Iterators.cycle(itr, 3)) Tuple 4 identical nonempty non-singleton Tuples better (36 LLVM lines vs. 464 B allocs) 10 times less (60 ns vs. 610 ns) similar (60 ms vs. 60 ms) similar (6 MB vs. 5 MB)
unrolled_cycle(itr, Val(3)) Tuple(Iterators.cycle(itr, 3)) Tuple 8 identical nonempty non-singleton Tuples better (37 LLVM lines vs. 848 B allocs) 18 times less (60 ns vs. 1 μs) similar (66 ms vs. 63 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 (229 LLVM lines vs. 3 kB allocs) 76 times less (90 ns vs. 7 μs) similar (94 ms vs. 65 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 (260 LLVM lines vs. 12 kB allocs) 230 times less (220 ns vs. 51 μs) 5 times more (360 ms vs. 63 ms) 7 times more (43 MB vs. 5 MB)
unrolled_cycle(itr, Val(3)) Tuple(Iterators.cycle(itr, 3)) Tuple 2 distinct empty & nonempty singleton Tuples better (optimized out vs. 112 B allocs) 4 times less (50 ns vs. 230 ns) similar (81 ms vs. 62 ms) similar (4 MB vs. 6 MB)
unrolled_cycle(itr, Val(3)) Tuple(Iterators.cycle(itr, 3)) Tuple 4 distinct empty & nonempty singleton Tuples better (optimized out vs. 160 B allocs) 9 times less (40 ns vs. 390 ns) similar (79 ms vs. 63 ms) similar (4 MB vs. 6 MB)
unrolled_cycle(itr, Val(3)) Tuple(Iterators.cycle(itr, 3)) Tuple 8 distinct empty & nonempty singleton Tuples better (optimized out vs. 256 B allocs) 13 times less (50 ns vs. 681 ns) similar (80 ms vs. 63 ms) similar (4 MB vs. 6 MB)
unrolled_cycle(itr, Val(3)) Tuple(Iterators.cycle(itr, 3)) Tuple 32 distinct empty & nonempty singleton Tuples better (optimized out vs. 848 B allocs) 47 times less (50 ns vs. 2 μs) similar (82 ms vs. 63 ms) similar (4 MB vs. 6 MB)
unrolled_cycle(itr, Val(3)) Tuple(Iterators.cycle(itr, 3)) Tuple 128 distinct empty & nonempty singleton Tuples better (optimized out vs. 3 kB allocs) 185 times less (50 ns vs. 9 μs) similar (90 ms vs. 63 ms) similar (5 MB vs. 6 MB)
unrolled_cycle(itr, Val(3)) Tuple(Iterators.cycle(itr, 3)) Tuple 2 distinct nonempty singleton Tuples better (optimized out vs. 112 B allocs) 4 times less (50 ns vs. 230 ns) similar (81 ms vs. 63 ms) similar (4 MB vs. 6 MB)
unrolled_cycle(itr, Val(3)) Tuple(Iterators.cycle(itr, 3)) Tuple 4 distinct nonempty singleton Tuples better (optimized out vs. 160 B allocs) 12 times less (50 ns vs. 620 ns) similar (80 ms vs. 79 ms) similar (4 MB vs. 6 MB)
unrolled_cycle(itr, Val(3)) Tuple(Iterators.cycle(itr, 3)) Tuple 8 distinct nonempty singleton Tuples better (optimized out vs. 256 B allocs) 53 times less (50 ns vs. 3 μs) similar (79 ms vs. 91 ms) similar (4 MB vs. 6 MB)
unrolled_cycle(itr, Val(3)) Tuple(Iterators.cycle(itr, 3)) Tuple 32 distinct nonempty singleton Tuples better (optimized out vs. 848 B allocs) 200 times less (50 ns vs. 10 μs) similar (81 ms vs. 92 ms) similar (4 MB vs. 6 MB)
unrolled_cycle(itr, Val(3)) Tuple(Iterators.cycle(itr, 3)) Tuple 128 distinct nonempty singleton Tuples better (optimized out vs. 3 kB allocs) 854 times less (50 ns vs. 43 μs) similar (91 ms vs. 93 ms) similar (5 MB vs. 6 MB)
unrolled_cycle(itr, Val(3)) Tuple(Iterators.cycle(itr, 3)) Tuple 2 distinct nonempty non-singleton Tuples better (19 LLVM lines vs. 528 B allocs) 7 times less (60 ns vs. 460 ns) similar (59 ms vs. 72 ms) similar (5 MB vs. 6 MB)
unrolled_cycle(itr, Val(3)) Tuple(Iterators.cycle(itr, 3)) Tuple 4 distinct nonempty non-singleton Tuples better (33 LLVM lines vs. 2 kB allocs) 17 times less (60 ns vs. 1 μs) similar (61 ms vs. 91 ms) similar (6 MB vs. 6 MB)
unrolled_cycle(itr, Val(3)) Tuple(Iterators.cycle(itr, 3)) Tuple 8 distinct nonempty non-singleton Tuples better (62 LLVM lines vs. 8 kB allocs) 64 times less (80 ns vs. 5 μs) similar (70 ms vs. 121 ms) similar (7 MB vs. 6 MB)
unrolled_cycle(itr, Val(3)) Tuple(Iterators.cycle(itr, 3)) Tuple 32 distinct nonempty non-singleton Tuples better (233 LLVM lines vs. 103 kB allocs) 150 times less (211 ns vs. 32 μs) similar (113 ms vs. 111 ms) 2 times more (14 MB vs. 6 MB)
unrolled_cycle(itr, Val(3)) Tuple(Iterators.cycle(itr, 3)) Tuple 128 distinct nonempty non-singleton Tuples better (1611 LLVM lines vs. 2 MB allocs) 337 times less (962 ns vs. 324 μs) 7 times more (839 ms vs. 114 ms) 5 times more (43 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) 21 times less (50 ns vs. 1 μs) similar (79 ms vs. 119 ms) similar (11 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 (50 ns vs. 1 μs) similar (77 ms vs. 118 ms) similar (11 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) 19 times less (60 ns vs. 1 μs) similar (87 ms vs. 123 ms) similar (12 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) 20 times less (50 ns vs. 1 μs) similar (78 ms vs. 121 ms) similar (11 MB vs. 11 MB)
unrolled_partition(itr, Val(3)) Tuple(Iterators.map(Tuple, Iterators.partition(itr, 3))) Tuple 4 identical nonempty singleton Tuples better (optimized out vs. 528 B allocs) 27 times less (50 ns vs. 1 μs) similar (97 ms vs. 193 ms) similar (12 MB vs. 20 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) 30 times less (50 ns vs. 2 μs) similar (108 ms vs. 195 ms) similar (12 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) 50 times less (50 ns vs. 3 μs) similar (179 ms vs. 200 ms) similar (16 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 (50 ns vs. 6 μs) 2 times more (504 ms vs. 200 ms) similar (34 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 (50 ns vs. 1 μs) similar (71 ms vs. 125 ms) similar (12 MB vs. 12 MB)
unrolled_partition(itr, Val(3)) Tuple(Iterators.map(Tuple, Iterators.partition(itr, 3))) Tuple 4 identical nonempty non-singleton Tuples better (8 LLVM lines vs. 912 B allocs) 26 times less (60 ns vs. 2 μs) 2 times less (85 ms vs. 216 ms) similar (13 MB vs. 20 MB)
unrolled_partition(itr, Val(3)) Tuple(Iterators.map(Tuple, Iterators.partition(itr, 3))) Tuple 8 identical nonempty non-singleton Tuples better (12 LLVM lines vs. 1 kB allocs) 31 times less (60 ns vs. 2 μs) 2 times less (92 ms vs. 219 ms) similar (14 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 (36 LLVM lines vs. 4 kB allocs) 59 times less (60 ns vs. 4 μs) similar (115 ms vs. 218 ms) similar (23 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 (132 LLVM lines vs. 14 kB allocs) 114 times less (90 ns vs. 10 μs) similar (357 ms vs. 243 ms) 5 times more (99 MB vs. 20 MB)
unrolled_partition(itr, Val(3)) Tuple(Iterators.map(Tuple, Iterators.partition(itr, 3))) Tuple 2 distinct empty & nonempty singleton Tuples better (optimized out vs. 368 B allocs) 24 times less (50 ns vs. 1 μs) similar (79 ms vs. 134 ms) similar (11 MB vs. 10 MB)
unrolled_partition(itr, Val(3)) Tuple(Iterators.map(Tuple, Iterators.partition(itr, 3))) Tuple 4 distinct empty & nonempty singleton Tuples better (optimized out vs. 560 B allocs) 35 times less (40 ns vs. 1 μs) 2 times less (98 ms vs. 205 ms) similar (12 MB vs. 21 MB)
unrolled_partition(itr, Val(3)) Tuple(Iterators.map(Tuple, Iterators.partition(itr, 3))) Tuple 8 distinct empty & nonempty singleton Tuples better (optimized out vs. 752 B allocs) 42 times less (40 ns vs. 2 μs) 2 times less (106 ms vs. 271 ms) 2 times less (12 MB vs. 29 MB)
unrolled_partition(itr, Val(3)) Tuple(Iterators.map(Tuple, Iterators.partition(itr, 3))) Tuple 32 distinct empty & nonempty singleton Tuples better (optimized out vs. 2 kB allocs) 329 times less (50 ns vs. 16 μs) 2 times less (181 ms vs. 447 ms) 2 times less (16 MB vs. 43 MB)
unrolled_partition(itr, Val(3)) Tuple(Iterators.map(Tuple, Iterators.partition(itr, 3))) Tuple 128 distinct empty & nonempty singleton Tuples better (optimized out vs. 5 kB allocs) 1820 times less (50 ns vs. 91 μs) similar (511 ms vs. 451 ms) similar (34 MB vs. 43 MB)
unrolled_partition(itr, Val(3)) Tuple(Iterators.map(Tuple, Iterators.partition(itr, 3))) Tuple 2 distinct nonempty singleton Tuples better (optimized out vs. 368 B allocs) 25 times less (50 ns vs. 1 μs) similar (82 ms vs. 133 ms) similar (11 MB vs. 10 MB)
unrolled_partition(itr, Val(3)) Tuple(Iterators.map(Tuple, Iterators.partition(itr, 3))) Tuple 4 distinct nonempty singleton Tuples better (optimized out vs. 608 B allocs) 36 times less (50 ns vs. 2 μs) 2 times less (98 ms vs. 227 ms) similar (12 MB vs. 21 MB)
unrolled_partition(itr, Val(3)) Tuple(Iterators.map(Tuple, Iterators.partition(itr, 3))) Tuple 8 distinct nonempty singleton Tuples better (optimized out vs. 832 B allocs) 67 times less (40 ns vs. 3 μs) 2 times less (107 ms vs. 301 ms) 2 times less (12 MB vs. 28 MB)
unrolled_partition(itr, Val(3)) Tuple(Iterators.map(Tuple, Iterators.partition(itr, 3))) Tuple 32 distinct nonempty singleton Tuples better (optimized out vs. 2 kB allocs) 425 times less (50 ns vs. 21 μs) 2 times less (183 ms vs. 467 ms) 2 times less (16 MB vs. 43 MB)
unrolled_partition(itr, Val(3)) Tuple(Iterators.map(Tuple, Iterators.partition(itr, 3))) Tuple 128 distinct nonempty singleton Tuples better (optimized out vs. 7 kB allocs) 2273 times less (50 ns vs. 114 μs) similar (517 ms vs. 462 ms) similar (34 MB vs. 43 MB)
unrolled_partition(itr, Val(3)) Tuple(Iterators.map(Tuple, Iterators.partition(itr, 3))) Tuple 2 distinct nonempty non-singleton Tuples better (11 LLVM lines vs. 624 B allocs) 23 times less (60 ns vs. 1 μs) 2 times less (72 ms vs. 144 ms) similar (12 MB vs. 11 MB)
unrolled_partition(itr, Val(3)) Tuple(Iterators.map(Tuple, Iterators.partition(itr, 3))) Tuple 4 distinct nonempty non-singleton Tuples better (17 LLVM lines vs. 2 kB allocs) 34 times less (60 ns vs. 2 μs) 2 times less (85 ms vs. 253 ms) similar (13 MB vs. 21 MB)
unrolled_partition(itr, Val(3)) Tuple(Iterators.map(Tuple, Iterators.partition(itr, 3))) Tuple 8 distinct nonempty non-singleton Tuples better (30 LLVM lines vs. 5 kB allocs) 54 times less (60 ns vs. 3 μs) 3 times less (92 ms vs. 340 ms) 2 times less (14 MB vs. 28 MB)
unrolled_partition(itr, Val(3)) Tuple(Iterators.map(Tuple, Iterators.partition(itr, 3))) Tuple 32 distinct nonempty non-singleton Tuples better (105 LLVM lines vs. 44 kB allocs) 215 times less (80 ns vs. 17 μs) 4 times less (120 ms vs. 526 ms) similar (23 MB vs. 43 MB)
unrolled_partition(itr, Val(3)) Tuple(Iterators.map(Tuple, Iterators.partition(itr, 3))) Tuple 128 distinct nonempty non-singleton Tuples better (625 LLVM lines vs. 569 kB allocs) 1095 times less (341 ns vs. 374 μs) similar (450 ms vs. 878 ms) 2 times more (99 MB vs. 43 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 (50 ns vs. 50 ns) similar (40 ms vs. 47 ms) similar (946 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 (50 ns vs. 50 ns) similar (40 ms vs. 49 ms) similar (988 kB vs. 2 MB)
unrolled_any((x->unrolled_sum(x) > 7), itr3) any((x->sum(x) > 7), itr3) Tuple 4 identical nonempty non-singleton Tuples similar (12 LLVM lines) similar (50 ns vs. 50 ns) similar (61 ms vs. 50 ms) similar (1 MB 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 (50 ns vs. 50 ns) similar (62 ms vs. 50 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 (50 ns vs. 60 ns) similar (67 ms vs. 50 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) 2 times less (60 ns vs. 130 ns) similar (92 ms vs. 50 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 distinct nonempty non-singleton Tuples similar (22 LLVM lines) similar (50 ns vs. 50 ns) similar (42 ms vs. 50 ms) similar (2 MB vs. 2 MB)
unrolled_any((x->unrolled_sum(x) > 7), itr3) any((x->sum(x) > 7), itr3) Tuple 4 distinct nonempty non-singleton Tuples similar (41 LLVM lines) similar (50 ns vs. 50 ns) similar (107 ms vs. 65 ms) similar (6 MB vs. 4 MB)
unrolled_any((x->unrolled_sum(x) > 7), itr3) any((x->sum(x) > 7), itr3) Tuple 8 distinct nonempty non-singleton Tuples similar (86 LLVM lines) similar (50 ns vs. 50 ns) similar (119 ms vs. 75 ms) similar (9 MB vs. 6 MB)
unrolled_any((x->unrolled_sum(x) > 7), itr3) any((x->sum(x) > 7), itr3) Tuple 32 distinct nonempty non-singleton Tuples similar (325 LLVM lines) similar (50 ns vs. 50 ns) similar (139 ms vs. 89 ms) similar (11 MB vs. 8 MB)
unrolled_any((x->unrolled_sum(x) > 7), itr3) any((x->sum(x) > 7), itr3) Tuple 128 distinct nonempty non-singleton Tuples better (1300 LLVM lines vs. 12 kB allocs) 13 times less (50 ns vs. 651 ns) 3 times more (275 ms vs. 74 ms) 2 times more (17 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 (50 ns vs. 50 ns) similar (39 ms vs. 56 ms) 4 times less (2 MB 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 (50 ns vs. 50 ns) similar (39 ms vs. 57 ms) 4 times less (2 MB vs. 7 MB)
unrolled_mapreduce(unrolled_sum, max, itr3) mapreduce(sum, max, itr3) Tuple 4 identical nonempty non-singleton Tuples similar (16 LLVM lines) similar (50 ns vs. 50 ns) similar (84 ms vs. 59 ms) 2 times less (4 MB vs. 7 MB)
unrolled_mapreduce(unrolled_sum, max, itr3) mapreduce(sum, max, itr3) Tuple 8 identical nonempty non-singleton Tuples similar (28 LLVM lines) similar (50 ns vs. 50 ns) similar (84 ms vs. 61 ms) 2 times less (4 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 (50 ns vs. 50 ns) similar (91 ms vs. 73 ms) 2 times less (6 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) similar (70 ns vs. 130 ns) 2 times more (123 ms vs. 61 ms) 2 times more (14 MB vs. 7 MB)
unrolled_mapreduce(unrolled_sum, max, itr3) mapreduce(sum, max, itr3) Tuple 2 distinct nonempty non-singleton Tuples similar (13 LLVM lines) similar (50 ns vs. 50 ns) similar (41 ms vs. 59 ms) 3 times less (2 MB vs. 7 MB)
unrolled_mapreduce(unrolled_sum, max, itr3) mapreduce(sum, max, itr3) Tuple 4 distinct nonempty non-singleton Tuples similar (26 LLVM lines) similar (50 ns vs. 50 ns) similar (89 ms vs. 65 ms) similar (6 MB vs. 10 MB)
unrolled_mapreduce(unrolled_sum, max, itr3) mapreduce(sum, max, itr3) Tuple 8 distinct nonempty non-singleton Tuples similar (59 LLVM lines) similar (50 ns vs. 50 ns) similar (102 ms vs. 82 ms) similar (10 MB vs. 18 MB)
unrolled_mapreduce(unrolled_sum, max, itr3) mapreduce(sum, max, itr3) Tuple 32 distinct nonempty non-singleton Tuples similar (330 LLVM lines) similar (80 ns vs. 90 ns) similar (126 ms vs. 119 ms) similar (13 MB vs. 22 MB)
unrolled_mapreduce(unrolled_sum, max, itr3) mapreduce(sum, max, itr3) Tuple 128 distinct nonempty non-singleton Tuples better (1477 LLVM lines vs. 521 kB allocs) 232 times less (200 ns vs. 46 μs) 3 times more (343 ms vs. 110 ms) similar (27 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 (50 ns vs. 50 ns) similar (64 ms vs. 52 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 (60 ns vs. 50 ns) similar (64 ms vs. 53 ms) similar (3 MB vs. 3 MB)
unrolled_applyat(unrolled_minimum, rand(1:length(itr3)), itr3) minimum(itr3[rand(1:length(itr3))]) Tuple 4 identical nonempty non-singleton Tuples similar (37 LLVM lines w/ switch) similar (50 ns vs. 50 ns) similar (84 ms vs. 53 ms) similar (4 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. 60 ns) similar (85 ms vs. 53 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 (60 ns vs. 50 ns) similar (96 ms vs. 52 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 128 identical nonempty non-singleton Tuples similar (657 LLVM lines w/ switch) similar (60 ns vs. 50 ns) 2 times more (135 ms vs. 52 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 distinct nonempty non-singleton Tuples better (34 LLVM lines w/ switch vs. 48 B allocs) similar (50 ns vs. 90 ns) similar (66 ms vs. 52 ms) similar (4 MB vs. 3 MB)
unrolled_applyat(unrolled_minimum, rand(1:length(itr3)), itr3) minimum(itr3[rand(1:length(itr3))]) Tuple 4 distinct nonempty non-singleton Tuples better (61 LLVM lines w/ switch vs. 128 B allocs) 2 times less (50 ns vs. 100 ns) 2 times more (118 ms vs. 52 ms) 2 times more (8 MB vs. 3 MB)
unrolled_applyat(unrolled_minimum, rand(1:length(itr3)), itr3) minimum(itr3[rand(1:length(itr3))]) Tuple 8 distinct nonempty non-singleton Tuples better (130 LLVM lines w/ switch vs. 288 B allocs) similar (60 ns vs. 100 ns) 2 times more (131 ms vs. 52 ms) 3 times more (11 MB vs. 3 MB)
unrolled_applyat(unrolled_minimum, rand(1:length(itr3)), itr3) minimum(itr3[rand(1:length(itr3))]) Tuple 32 distinct nonempty non-singleton Tuples better (481 LLVM lines w/ switch vs. 1 kB allocs) similar (70 ns vs. 110 ns) 2 times more (153 ms vs. 53 ms) 4 times more (14 MB vs. 3 MB)
unrolled_applyat(unrolled_minimum, rand(1:length(itr3)), itr3) minimum(itr3[rand(1:length(itr3))]) Tuple 128 distinct nonempty non-singleton Tuples better (1924 LLVM lines w/ switch vs. 4 kB allocs) 2 times less (110 ns vs. 300 ns) 4 times more (227 ms vs. 54 ms) 8 times more (29 MB vs. 3 MB)
unrolled_foreach(((x1, x2)->@assert(x1 == unrolled_take(x2, Val(length(x1))))), itr1, itr2) foreach(((x1, x2)->@assert(x1 == x2[1:length(x1)])), itr1, itr2) Tuple 1 singleton Tuple similar (optimized out) similar (50 ns vs. 50 ns) 2 times less (78 ms vs. 169 ms) 11 times less (1 MB vs. 15 MB)
unrolled_foreach(((x1, x2)->@assert(x1 == unrolled_take(x2, Val(length(x1))))), itr1, itr2) foreach(((x1, x2)->@assert(x1 == x2[1:length(x1)])), itr1, itr2) Tuple 2 identical singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) 2 times less (78 ms vs. 169 ms) 12 times less (1 MB vs. 16 MB)
unrolled_foreach(((x1, x2)->@assert(x1 == unrolled_take(x2, Val(length(x1))))), itr1, itr2) foreach(((x1, x2)->@assert(x1 == x2[1:length(x1)])), itr1, itr2) Tuple 4 identical singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (96 ms vs. 168 ms) 11 times less (1 MB vs. 16 MB)
unrolled_foreach(((x1, x2)->@assert(x1 == unrolled_take(x2, Val(length(x1))))), itr1, itr2) foreach(((x1, x2)->@assert(x1 == x2[1:length(x1)])), itr1, itr2) Tuple 8 identical singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (96 ms vs. 169 ms) 11 times less (1 MB vs. 16 MB)
unrolled_foreach(((x1, x2)->@assert(x1 == unrolled_take(x2, Val(length(x1))))), itr1, itr2) foreach(((x1, x2)->@assert(x1 == x2[1:length(x1)])), itr1, itr2) Tuple 32 identical singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (98 ms vs. 169 ms) 9 times less (2 MB vs. 16 MB)
unrolled_foreach(((x1, x2)->@assert(x1 == unrolled_take(x2, Val(length(x1))))), itr1, itr2) foreach(((x1, x2)->@assert(x1 == x2[1:length(x1)])), itr1, itr2) Tuple 128 identical singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (103 ms vs. 168 ms) 6 times less (2 MB vs. 16 MB)
unrolled_foreach(((x1, x2)->@assert(x1 == unrolled_take(x2, Val(length(x1))))), itr1, itr2) foreach(((x1, x2)->@assert(x1 == x2[1:length(x1)])), itr1, itr2) Tuple 2 distinct singleton Tuples better (optimized out vs. 8 LLVM lines w/ Const) similar (50 ns vs. 70 ns) 2 times less (88 ms vs. 242 ms) 23 times less (2 MB vs. 39 MB)
unrolled_foreach(((x1, x2)->@assert(x1 == unrolled_take(x2, Val(length(x1))))), itr1, itr2) foreach(((x1, x2)->@assert(x1 == x2[1:length(x1)])), itr1, itr2) Tuple 4 distinct singleton Tuples better (optimized out vs. type-unstable) 4 times less (50 ns vs. 230 ns) 2 times less (128 ms vs. 361 ms) 26 times less (3 MB vs. 70 MB)
unrolled_foreach(((x1, x2)->@assert(x1 == unrolled_take(x2, Val(length(x1))))), itr1, itr2) foreach(((x1, x2)->@assert(x1 == x2[1:length(x1)])), itr1, itr2) Tuple 8 distinct singleton Tuples better (optimized out vs. type-unstable) 9 times less (50 ns vs. 480 ns) 2 times less (167 ms vs. 422 ms) 19 times less (4 MB vs. 86 MB)
unrolled_foreach(((x1, x2)->@assert(x1 == unrolled_take(x2, Val(length(x1))))), itr1, itr2) foreach(((x1, x2)->@assert(x1 == x2[1:length(x1)])), itr1, itr2) Tuple 32 distinct singleton Tuples better (optimized out vs. type-unstable) 70 times less (50 ns vs. 4 μs) 2 times less (171 ms vs. 417 ms) 18 times less (5 MB vs. 86 MB)
unrolled_foreach(((x1, x2)->@assert(x1 == unrolled_take(x2, Val(length(x1))))), itr1, itr2) foreach(((x1, x2)->@assert(x1 == x2[1:length(x1)])), itr1, itr2) Tuple 128 distinct singleton Tuples better (optimized out vs. type-unstable) 296 times less (50 ns vs. 15 μs) 2 times less (174 ms vs. 419 ms) 15 times less (5 MB vs. 86 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 (130 ns vs. 130 ns) similar (74 ms vs. 124 ms) 5 times less (2 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 (190 ns vs. 200 ns) similar (78 ms vs. 134 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 4 identical nonempty Tuples similar (124 LLVM lines w/ Const) similar (340 ns vs. 340 ns) similar (98 ms vs. 133 ms) 4 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 (640 ns vs. 631 ns) similar (103 ms vs. 135 ms) 4 times less (3 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 (128 ms vs. 134 ms) 2 times less (5 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 (10 μs vs. 10 μs) similar (242 ms vs. 132 ms) similar (12 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 distinct nonempty Tuples better (83 LLVM lines w/ Const vs. 96 B allocs) similar (270 ns vs. 390 ns) similar (86 ms vs. 163 ms) 4 times less (3 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 4 distinct nonempty Tuples better (190 LLVM lines w/ Const vs. 512 B allocs) similar (791 ns vs. 1 μs) similar (136 ms vs. 188 ms) 2 times less (6 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 8 distinct nonempty Tuples better (369 LLVM lines w/ Const vs. 2 kB allocs) similar (2 μs vs. 4 μs) similar (174 ms vs. 238 ms) similar (13 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 32 distinct nonempty Tuples better (1482 LLVM lines w/ Const vs. 33 kB allocs) similar (10 μs vs. 16 μs) similar (238 ms vs. 237 ms) similar (15 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 distinct nonempty Tuples better (5897 LLVM lines w/ Const vs. 527 kB allocs) 2 times less (42 μs vs. 107 μs) 2 times more (499 ms vs. 235 ms) similar (25 MB vs. 24 MB)
unrolled_applyat(((x1, x2)->@assert(x1 == unrolled_take(x2, Val(length(x1))))), rand(1:length(itr1)), itr1, itr2) let n = rand(1:length(itr1)) @assert itr1[n] == (itr2[n])[1:length(itr1[n])] end Tuple 1 singleton Tuple similar (17 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (102 ms vs. 67 ms) similar (4 MB vs. 2 MB)
unrolled_applyat(((x1, x2)->@assert(x1 == unrolled_take(x2, Val(length(x1))))), rand(1:length(itr1)), itr1, itr2) let n = rand(1:length(itr1)) @assert itr1[n] == (itr2[n])[1:length(itr1[n])] end Tuple 2 identical singleton Tuples similar (18 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (104 ms vs. 66 ms) similar (4 MB vs. 2 MB)
unrolled_applyat(((x1, x2)->@assert(x1 == unrolled_take(x2, Val(length(x1))))), rand(1:length(itr1)), itr1, itr2) let n = rand(1:length(itr1)) @assert itr1[n] == (itr2[n])[1:length(itr1[n])] end Tuple 4 identical singleton Tuples similar (18 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (122 ms vs. 67 ms) similar (4 MB vs. 2 MB)
unrolled_applyat(((x1, x2)->@assert(x1 == unrolled_take(x2, Val(length(x1))))), rand(1:length(itr1)), itr1, itr2) let n = rand(1:length(itr1)) @assert itr1[n] == (itr2[n])[1:length(itr1[n])] end Tuple 8 identical singleton Tuples similar (18 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (122 ms vs. 66 ms) 2 times more (4 MB vs. 2 MB)
unrolled_applyat(((x1, x2)->@assert(x1 == unrolled_take(x2, Val(length(x1))))), rand(1:length(itr1)), itr1, itr2) let n = rand(1:length(itr1)) @assert itr1[n] == (itr2[n])[1:length(itr1[n])] end Tuple 32 identical singleton Tuples similar (18 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (128 ms vs. 66 ms) 3 times more (6 MB vs. 2 MB)
unrolled_applyat(((x1, x2)->@assert(x1 == unrolled_take(x2, Val(length(x1))))), rand(1:length(itr1)), itr1, itr2) let n = rand(1:length(itr1)) @assert itr1[n] == (itr2[n])[1:length(itr1[n])] end Tuple 128 identical singleton Tuples similar (18 LLVM lines w/ Const) similar (50 ns vs. 50 ns) 2 times more (150 ms vs. 66 ms) 7 times more (15 MB vs. 2 MB)
unrolled_applyat(((x1, x2)->@assert(x1 == unrolled_take(x2, Val(length(x1))))), rand(1:length(itr1)), itr1, itr2) let n = rand(1:length(itr1)) @assert itr1[n] == (itr2[n])[1:length(itr1[n])] end Tuple 2 distinct singleton Tuples better (18 LLVM lines w/ Const vs. type-unstable) 2 times less (50 ns vs. 100 ns) similar (112 ms vs. 67 ms) 2 times more (4 MB vs. 2 MB)
unrolled_applyat(((x1, x2)->@assert(x1 == unrolled_take(x2, Val(length(x1))))), rand(1:length(itr1)), itr1, itr2) let n = rand(1:length(itr1)) @assert itr1[n] == (itr2[n])[1:length(itr1[n])] end Tuple 4 distinct singleton Tuples better (18 LLVM lines w/ Const vs. 64 B allocs) 4 times less (50 ns vs. 210 ns) 2 times more (152 ms vs. 66 ms) 2 times more (5 MB vs. 2 MB)
unrolled_applyat(((x1, x2)->@assert(x1 == unrolled_take(x2, Val(length(x1))))), rand(1:length(itr1)), itr1, itr2) let n = rand(1:length(itr1)) @assert itr1[n] == (itr2[n])[1:length(itr1[n])] end Tuple 8 distinct singleton Tuples better (18 LLVM lines w/ Const vs. 64 B allocs) 3 times less (60 ns vs. 201 ns) 2 times more (193 ms vs. 81 ms) 3 times more (7 MB vs. 2 MB)
unrolled_applyat(((x1, x2)->@assert(x1 == unrolled_take(x2, Val(length(x1))))), rand(1:length(itr1)), itr1, itr2) let n = rand(1:length(itr1)) @assert itr1[n] == (itr2[n])[1:length(itr1[n])] end Tuple 32 distinct singleton Tuples better (18 LLVM lines w/ Const vs. 64 B allocs) 4 times less (50 ns vs. 210 ns) 2 times more (197 ms vs. 86 ms) 3 times more (9 MB vs. 2 MB)
unrolled_applyat(((x1, x2)->@assert(x1 == unrolled_take(x2, Val(length(x1))))), rand(1:length(itr1)), itr1, itr2) let n = rand(1:length(itr1)) @assert itr1[n] == (itr2[n])[1:length(itr1[n])] end Tuple 128 distinct singleton Tuples better (18 LLVM lines w/ Const vs. 64 B allocs) 4 times less (50 ns vs. 200 ns) 2 times more (219 ms vs. 80 ms) 7 times more (18 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 1 nonempty Tuple similar (59 LLVM lines w/ Const) similar (130 ns vs. 130 ns) similar (96 ms vs. 74 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 2 identical nonempty Tuples similar (89 LLVM lines w/ Const) similar (130 ns vs. 140 ns) similar (98 ms vs. 74 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 4 identical nonempty Tuples similar (147 LLVM lines w/ Const) similar (130 ns vs. 130 ns) similar (121 ms vs. 74 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 identical nonempty Tuples similar (263 LLVM lines w/ Const) similar (140 ns vs. 130 ns) similar (126 ms vs. 74 ms) 2 times more (6 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 (140 ns vs. 140 ns) 2 times more (165 ms vs. 74 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 (150 ns vs. 130 ns) 4 times more (368 ms vs. 74 ms) 16 times more (33 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 distinct nonempty Tuples better (100 LLVM lines w/ Const vs. 64 B allocs) similar (130 ns vs. 180 ns) similar (103 ms vs. 75 ms) 2 times more (6 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 4 distinct nonempty Tuples better (213 LLVM lines w/ Const vs. 128 B allocs) 3 times less (130 ns vs. 400 ns) 2 times more (158 ms vs. 78 ms) 4 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 8 distinct nonempty Tuples better (405 LLVM lines w/ Const vs. 5 kB allocs) 3 times less (130 ns vs. 400 ns) 2 times more (198 ms vs. 92 ms) 5 times more (16 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 32 distinct nonempty Tuples better (1593 LLVM lines w/ Const vs. 1 kB allocs) 2 times less (150 ns vs. 430 ns) 3 times more (265 ms vs. 77 ms) 10 times more (24 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 distinct nonempty Tuples better (6310 LLVM lines w/ Const vs. 4 kB allocs) 3 times less (200 ns vs. 661 ns) 7 times more (579 ms vs. 76 ms) 26 times more (57 MB vs. 2 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 (50 ns vs. 50 ns) similar (40 ms vs. 46 ms) 2 times less (540 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 2 values similar (optimized out) similar (50 ns vs. 50 ns) similar (40 ms vs. 46 ms) 2 times less (546 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. 50 ns) similar (40 ms vs. 46 ms) 2 times less (572 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 (50 ns vs. 50 ns) similar (49 ms vs. 50 ms) 2 times less (1 MB 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 (50 ns vs. 50 ns) similar (40 ms vs. 46 ms) 2 times less (577 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 (50 ns vs. 50 ns) similar (49 ms vs. 50 ms) 2 times less (1 MB 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 (50 ns vs. 50 ns) similar (51 ms vs. 53 ms) 2 times less (2 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 Tuples with 64 values similar (optimized out) similar (40 ns vs. 50 ns) similar (40 ms vs. 46 ms) 2 times less (577 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 (50 ns vs. 50 ns) similar (49 ms vs. 50 ms) 2 times less (1 MB 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 (50 ns vs. 50 ns) similar (51 ms vs. 53 ms) 2 times less (2 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 (50 ns vs. 40 ns) similar (52 ms vs. 57 ms) 2 times less (3 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 (50 ns vs. 50 ns) similar (50 ms vs. 51 ms) similar (2 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 2 values similar (8 LLVM lines) similar (50 ns vs. 50 ns) similar (51 ms vs. 50 ms) similar (2 MB vs. 3 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 (50 ns vs. 50 ns) similar (95 ms vs. 65 ms) 2 times less (4 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 (50 ns vs. 50 ns) similar (56 ms vs. 68 ms) 2 times less (4 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 (50 ns vs. 80 ns) similar (101 ms vs. 68 ms) similar (6 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 (50 ns vs. 50 ns) similar (106 ms vs. 76 ms) similar (7 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 (50 ns vs. 50 ns) similar (72 ms vs. 118 ms) 3 times less (10 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) 2 times less (60 ns vs. 120 ns) 2 times more (123 ms vs. 61 ms) similar (11 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 (60 ns vs. 70 ns) similar (126 ms vs. 82 ms) similar (13 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 (60 ns vs. 60 ns) similar (141 ms vs. 93 ms) similar (17 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 (60 ns vs. 60 ns) similar (139 ms vs. 254 ms) 2 times less (30 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 (70 ns vs. 70 ns) similar (53 ms vs. 63 ms) 2 times less (3 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 2 values similar (24 LLVM lines) similar (70 ns vs. 70 ns) similar (54 ms vs. 61 ms) similar (3 MB vs. 5 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 (70 ns vs. 70 ns) similar (100 ms vs. 84 ms) 2 times less (6 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 (360 ns vs. 440 ns) 2 times less (72 ms vs. 165 ms) 2 times less (7 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 (80 ns vs. 80 ns) similar (113 ms vs. 89 ms) similar (8 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 (420 ns vs. 550 ns) similar (122 ms vs. 190 ms) 2 times less (11 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 (5 μs vs. 7 μs) 3 times less (84 ms vs. 290 ms) 3 times less (10 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 (110 ns vs. 180 ns) similar (154 ms vs. 86 ms) similar (17 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 (550 ns vs. 671 ns) similar (126 ms vs. 193 ms) 2 times less (11 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 (6 μs vs. 9 μs) 2 times less (137 ms vs. 353 ms) 3 times less (14 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 (83 μs vs. 117 μs) 4 times less (99 ms vs. 485 ms) 6 times less (13 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 (50 ns vs. 240 ns) similar (125 ms vs. 130 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 (14 μs vs. 14 μs) similar (144 ms vs. 127 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. 4 μs) similar (142 ms vs. 120 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 (111 μs vs. 114 μs) similar (147 ms vs. 126 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) 92 times less (70 ns vs. 7 μs) 2 times more (488 ms vs. 163 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 (473 μs vs. 491 μs) similar (176 ms vs. 163 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 (861 μs vs. 1 ms) similar (199 ms vs. 163 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 (32 ms vs. 29 ms) similar (205 ms vs. 173 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 (237 μs vs. 207 μs) 47 times more (9 s vs. 193 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 (17 ms vs. 18 ms) similar (191 ms vs. 190 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 (225 ms vs. 283 ms) similar (249 ms vs. 185 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 (50 ns vs. 50 ns) similar (31 ms vs. 26 ms) 23 times more (118 kB vs. 5 kB)
unrolled_any(error, itr) any(error, itr) Tuple 0 nothing similar (optimized out) similar (50 ns vs. 40 ns) similar (26 ms vs. 26 ms) similar (16 kB vs. 30 kB)
unrolled_all(error, itr) all(error, itr) Tuple 0 nothing similar (optimized out) similar (50 ns vs. 50 ns) similar (26 ms vs. 26 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 (26 ms vs. 48 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 (40 ns vs. 50 ns) 2 times less (29 ms vs. 60 ms) 8 times less (186 kB vs. 2 MB)
unrolled_accumulate(error, itr) accumulate(error, itr) Tuple 0 nothing similar (optimized out) similar (50 ns vs. 50 ns) similar (26 ms vs. 36 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 (50 ns vs. 50 ns) similar (27 ms vs. 33 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) 5 times less (160 ns vs. 931 ns) 33 times more (1 s vs. 41 ms) 80 times more (142 MB vs. 2 MB)
unrolled_sum(itr) sum(itr) StaticOneTo 2000 Ints better (optimized out vs. 6 LLVM lines) similar (50 ns vs. 50 ns) 18 times more (1 s vs. 62 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 (50 ns vs. 50 ns) 1488 times more (93 s vs. 62 ms) 246 times more (284 MB vs. 1 MB)
unrolled_sum(log, itr) sum(log, itr) Tuple 2000 Ints similar (10004 LLVM lines) similar (14 μs vs. 15 μs) 19 times more (1 s vs. 54 ms) 45 times more (167 MB vs. 4 MB)
unrolled_sum(log, itr) sum(log, itr) StaticOneTo 2000 Ints better (optimized out vs. 19 LLVM lines) 366 times less (40 ns vs. 15 μs) 7 times more (630 ms vs. 89 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) 1317 times less (50 ns vs. 66 μs) 51 times more (5 s vs. 88 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 (50 ns vs. 50 ns) similar (25 ms vs. 26 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 (25 ms vs. 26 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 (50 ns vs. 50 ns) similar (22 ms vs. 26 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 (50 ns vs. 50 ns) similar (25 ms vs. 26 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 (50 ns vs. 50 ns) similar (25 ms vs. 26 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. 40 ns) similar (26 ms vs. 29 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 (50 ns vs. 40 ns) similar (40 ms vs. 31 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 (50 ns vs. 50 ns) similar (41 ms vs. 29 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 (50 ns vs. 50 ns) similar (41 ms vs. 31 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 (50 ns vs. 50 ns) similar (41 ms vs. 30 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 (50 ns vs. 50 ns) similar (41 ms vs. 32 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 (50 ns vs. 50 ns) similar (42 ms vs. 34 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 (50 ns vs. 50 ns) similar (42 ms vs. 39 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) 5667 times less (80 ns vs. 453 μs) similar (52 ms vs. 44 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) 11556 times less (150 ns vs. 2 ms) similar (60 ms vs. 67 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 (50 ns vs. 50 ns) similar (25 ms vs. 26 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 (50 ns vs. 50 ns) similar (25 ms vs. 26 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 (50 ns vs. 50 ns) similar (25 ms vs. 29 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 (50 ns vs. 50 ns) similar (41 ms vs. 31 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 (50 ns vs. 50 ns) similar (41 ms vs. 30 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 (50 ns vs. 50 ns) similar (41 ms vs. 31 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 (50 ns vs. 50 ns) similar (41 ms vs. 30 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 (50 ns vs. 50 ns) similar (41 ms vs. 32 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 (50 ns vs. 40 ns) similar (41 ms vs. 34 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 (50 ns vs. 50 ns) similar (42 ms vs. 39 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 (69 LLVM lines w/ Const) 6125 times less (70 ns vs. 429 μs) similar (61 ms vs. 62 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 (133 LLVM lines w/ Const) 9929 times less (170 ns vs. 2 ms) similar (80 ms vs. 68 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. 50 ns) similar (22 ms vs. 26 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. 50 ns) similar (22 ms vs. 27 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 (50 ns vs. 50 ns) similar (22 ms vs. 31 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 (50 ns vs. 50 ns) similar (37 ms vs. 32 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 (50 ns vs. 50 ns) similar (37 ms vs. 32 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 (50 ns vs. 50 ns) similar (38 ms vs. 33 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 (50 ns vs. 50 ns) similar (37 ms vs. 33 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 (50 ns vs. 50 ns) similar (38 ms vs. 34 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. 50 ns) similar (38 ms vs. 39 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 (50 ns vs. 50 ns) similar (39 ms vs. 53 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 (69 LLVM lines w/ Const) 7321 times less (80 ns vs. 586 μs) similar (60 ms vs. 48 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 (133 LLVM lines w/ Const) 14220 times less (160 ns vs. 2 ms) similar (80 ms vs. 72 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 (50 ns vs. 50 ns) similar (25 ms vs. 25 ms) similar (55 kB vs. 84 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 2 distinct empty & nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (26 ms vs. 26 ms) similar (92 kB vs. 142 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 3 distinct empty & nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (27 ms vs. 30 ms) 3 times less (100 kB vs. 372 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 4 distinct empty & nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (41 ms vs. 31 ms) 2 times less (158 kB vs. 440 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 5 distinct empty & nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (40 ns vs. 50 ns) similar (41 ms vs. 37 ms) 3 times less (168 kB vs. 652 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 6 distinct empty & nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (41 ms vs. 39 ms) 4 times less (177 kB vs. 724 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 7 distinct empty & nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (41 ms vs. 45 ms) 5 times less (186 kB vs. 940 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 8 distinct empty & nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (42 ms vs. 48 ms) 5 times less (190 kB vs. 1016 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 16 distinct empty & nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (41 ms vs. 57 ms) 7 times less (226 kB vs. 2 MB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 32 distinct empty & nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (42 ms vs. 63 ms) 11 times less (298 kB vs. 3 MB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 128 distinct empty & nonempty singleton Tuples similar (69 LLVM lines w/ Const) 6815 times less (80 ns vs. 545 μs) similar (61 ms vs. 68 ms) 9 times less (919 kB vs. 8 MB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 256 distinct empty & nonempty singleton Tuples similar (133 LLVM lines w/ Const) 12423 times less (170 ns vs. 2 ms) similar (82 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 singleton Tuple similar (optimized out) similar (40 ns vs. 50 ns) similar (25 ms vs. 26 ms) similar (89 kB vs. 84 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 2 distinct nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (26 ms vs. 26 ms) similar (97 kB vs. 142 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 3 distinct nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (27 ms vs. 29 ms) 3 times less (104 kB vs. 377 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 4 distinct nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (41 ms vs. 31 ms) 2 times less (163 kB vs. 440 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 5 distinct nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (40 ms vs. 37 ms) 3 times less (172 kB vs. 656 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 6 distinct nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (41 ms vs. 39 ms) 3 times less (181 kB vs. 724 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 7 distinct nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (40 ms vs. 45 ms) 4 times less (190 kB vs. 944 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 8 distinct nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 40 ns) similar (41 ms vs. 47 ms) 5 times less (195 kB vs. 1020 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 16 distinct nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (41 ms vs. 57 ms) 7 times less (230 kB vs. 2 MB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 32 distinct nonempty singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (42 ms vs. 62 ms) 11 times less (302 kB vs. 3 MB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 128 distinct nonempty singleton Tuples similar (69 LLVM lines w/ Const) 10542 times less (80 ns vs. 843 μs) similar (61 ms vs. 68 ms) 9 times less (924 kB vs. 8 MB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 256 distinct nonempty singleton Tuples similar (133 LLVM lines w/ Const) 15976 times less (170 ns vs. 3 ms) similar (82 ms vs. 97 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 (50 ns vs. 50 ns) similar (23 ms vs. 27 ms) similar (62 kB vs. 85 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 2 distinct nonempty non-singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (22 ms vs. 27 ms) similar (95 kB vs. 148 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 3 distinct nonempty non-singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (22 ms vs. 31 ms) 3 times less (103 kB vs. 370 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 4 distinct nonempty non-singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (38 ms vs. 33 ms) 2 times less (161 kB vs. 442 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 5 distinct nonempty non-singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 40 ns) similar (37 ms vs. 40 ms) 3 times less (175 kB vs. 662 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 6 distinct nonempty non-singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (38 ms vs. 42 ms) 3 times less (188 kB vs. 750 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 7 distinct nonempty non-singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (38 ms vs. 49 ms) 4 times less (202 kB vs. 976 kB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 8 distinct nonempty non-singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (38 ms vs. 51 ms) 5 times less (211 kB vs. 1 MB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 16 distinct nonempty non-singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (38 ms vs. 64 ms) 7 times less (282 kB vs. 2 MB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 32 distinct nonempty non-singleton Tuples similar (7 LLVM lines w/ Const) similar (50 ns vs. 50 ns) similar (39 ms vs. 75 ms) 10 times less (426 kB vs. 4 MB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 128 distinct nonempty non-singleton Tuples similar (69 LLVM lines w/ Const) 15142 times less (70 ns vs. 1 ms) similar (60 ms vs. 73 ms) 6 times less (1 MB vs. 10 MB)
UnrolledUtilities.unrolled_map_into_tuple(length, itr) rec_unrolled_map(length, itr) Tuple 256 distinct nonempty non-singleton Tuples similar (133 LLVM lines w/ Const) 20504 times less (170 ns vs. 3 ms) similar (81 ms vs. 100 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 (50 ns vs. 40 ns) similar (26 ms vs. 26 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 (50 ns vs. 50 ns) similar (25 ms vs. 26 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 (50 ns vs. 50 ns) similar (22 ms vs. 27 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 (50 ns vs. 50 ns) similar (26 ms vs. 27 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 (50 ns vs. 50 ns) similar (26 ms vs. 28 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 (50 ns vs. 50 ns) similar (26 ms vs. 25 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 (50 ns vs. 50 ns) similar (42 ms vs. 27 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 (40 ns vs. 50 ns) similar (43 ms vs. 26 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 (50 ns vs. 50 ns) similar (42 ms vs. 27 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 (50 ns vs. 50 ns) similar (43 ms vs. 26 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 (50 ns vs. 50 ns) similar (43 ms vs. 28 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 (50 ns vs. 50 ns) similar (43 ms vs. 29 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 (50 ns vs. 50 ns) similar (44 ms vs. 30 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 (40 ns vs. 50 ns) similar (51 ms vs. 36 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 (50 ns vs. 50 ns) similar (61 ms vs. 52 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 (50 ns vs. 50 ns) similar (25 ms vs. 27 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 (50 ns vs. 50 ns) similar (25 ms vs. 27 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 (50 ns vs. 40 ns) similar (25 ms vs. 29 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 (40 ns vs. 40 ns) similar (42 ms vs. 31 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 (50 ns vs. 50 ns) similar (43 ms vs. 29 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 (50 ns vs. 50 ns) similar (43 ms vs. 31 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 (50 ns vs. 50 ns) similar (43 ms vs. 29 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 (50 ns vs. 50 ns) similar (43 ms vs. 31 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 (50 ns vs. 50 ns) similar (43 ms vs. 32 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 (50 ns vs. 50 ns) similar (44 ms vs. 34 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 (50 ns vs. 50 ns) similar (52 ms vs. 40 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 (50 ns vs. 50 ns) similar (61 ms vs. 56 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 (50 ns vs. 40 ns) similar (22 ms vs. 27 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 (50 ns vs. 50 ns) similar (22 ms vs. 29 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. 50 ns) similar (22 ms vs. 31 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 (50 ns vs. 50 ns) similar (39 ms vs. 33 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 (50 ns vs. 50 ns) similar (39 ms vs. 32 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 (50 ns vs. 50 ns) similar (40 ms vs. 33 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 (50 ns vs. 50 ns) similar (39 ms vs. 32 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 (40 ns vs. 50 ns) similar (40 ms vs. 34 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 (50 ns vs. 50 ns) similar (40 ms vs. 38 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 (50 ns vs. 50 ns) similar (42 ms vs. 47 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 (50 ns vs. 40 ns) similar (50 ms vs. 49 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 (50 ns vs. 50 ns) similar (60 ms vs. 61 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 (40 ns vs. 50 ns) similar (25 ms vs. 26 ms) similar (55 kB vs. 89 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 2 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (26 ms vs. 28 ms) similar (86 kB vs. 152 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 3 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (26 ms vs. 26 ms) 2 times less (88 kB vs. 208 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 4 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (42 ms vs. 27 ms) similar (144 kB vs. 256 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 5 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (42 ms vs. 26 ms) 2 times less (147 kB vs. 308 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 6 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (43 ms vs. 28 ms) 2 times less (151 kB vs. 357 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 7 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (42 ms vs. 30 ms) 2 times less (155 kB vs. 410 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 8 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (43 ms vs. 28 ms) 2 times less (158 kB vs. 460 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 16 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (43 ms vs. 29 ms) 4 times less (188 kB vs. 889 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 32 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (44 ms vs. 31 ms) 7 times less (246 kB vs. 2 MB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 128 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (51 ms vs. 37 ms) 10 times less (595 kB vs. 6 MB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 256 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (60 ms vs. 57 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 (50 ns vs. 50 ns) similar (25 ms vs. 26 ms) similar (89 kB vs. 89 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 2 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (26 ms vs. 27 ms) similar (97 kB vs. 152 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 3 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (26 ms vs. 29 ms) 3 times less (105 kB vs. 351 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 4 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (42 ms vs. 41 ms) 2 times less (167 kB vs. 409 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 5 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (42 ms vs. 36 ms) 3 times less (177 kB vs. 608 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 6 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (42 ms vs. 38 ms) 3 times less (187 kB vs. 666 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 7 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (43 ms vs. 43 ms) 4 times less (199 kB vs. 868 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 8 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (42 ms vs. 45 ms) 4 times less (205 kB vs. 927 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 16 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (43 ms vs. 53 ms) 5 times less (253 kB vs. 1 MB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 32 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (44 ms vs. 55 ms) 6 times less (349 kB vs. 2 MB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 128 distinct nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) similar (52 ms vs. 62 ms) 7 times less (923 kB vs. 7 MB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 256 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (61 ms vs. 82 ms) 8 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 (50 ns vs. 40 ns) similar (23 ms vs. 28 ms) similar (62 kB vs. 90 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 2 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (23 ms vs. 28 ms) similar (100 kB vs. 160 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 3 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (22 ms vs. 31 ms) 3 times less (113 kB vs. 354 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 4 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (39 ms vs. 33 ms) 2 times less (179 kB vs. 425 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 5 distinct nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (40 ms vs. 39 ms) 3 times less (194 kB vs. 625 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 6 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (40 ms vs. 42 ms) 3 times less (209 kB vs. 701 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 7 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (40 ms vs. 47 ms) 4 times less (224 kB vs. 905 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 8 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (40 ms vs. 49 ms) 4 times less (234 kB vs. 984 kB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 16 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (42 ms vs. 61 ms) 5 times less (318 kB vs. 2 MB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 32 distinct nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) similar (42 ms vs. 72 ms) 6 times less (486 kB vs. 3 MB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 128 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (50 ms vs. 66 ms) 5 times less (1 MB vs. 8 MB)
unrolled_any(isempty, itr) rec_unrolled_any(isempty, itr) Tuple 256 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (61 ms vs. 86 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 (50 ns vs. 50 ns) similar (25 ms vs. 26 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 (50 ns vs. 50 ns) similar (25 ms vs. 26 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 (50 ns vs. 50 ns) similar (22 ms vs. 27 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 (50 ns vs. 50 ns) similar (26 ms vs. 27 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 (50 ns vs. 40 ns) similar (26 ms vs. 28 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 (50 ns vs. 50 ns) similar (25 ms vs. 29 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 (50 ns vs. 40 ns) similar (42 ms vs. 31 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. 40 ns) similar (43 ms vs. 29 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 (50 ns vs. 50 ns) similar (43 ms vs. 33 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 (50 ns vs. 50 ns) similar (43 ms vs. 30 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 (50 ns vs. 50 ns) similar (43 ms vs. 31 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 (50 ns vs. 50 ns) similar (43 ms vs. 33 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. 50 ns) similar (44 ms vs. 35 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 (50 ns vs. 50 ns) similar (50 ms vs. 39 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 (50 ns vs. 50 ns) similar (58 ms vs. 56 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 (50 ns vs. 40 ns) similar (25 ms vs. 27 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 (40 ns vs. 50 ns) similar (26 ms vs. 28 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 (50 ns vs. 50 ns) similar (26 ms vs. 26 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 (50 ns vs. 50 ns) similar (42 ms vs. 27 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 (50 ns vs. 50 ns) similar (42 ms vs. 26 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 (50 ns vs. 50 ns) similar (43 ms vs. 28 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 (50 ns vs. 50 ns) similar (43 ms vs. 26 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 (50 ns vs. 50 ns) similar (43 ms vs. 28 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 (50 ns vs. 50 ns) similar (43 ms vs. 29 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 (50 ns vs. 40 ns) similar (44 ms vs. 31 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 (50 ns vs. 50 ns) similar (50 ms vs. 37 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 (50 ns vs. 50 ns) similar (57 ms vs. 54 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 (50 ns vs. 50 ns) similar (22 ms vs. 27 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 (50 ns vs. 50 ns) similar (22 ms vs. 29 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 (50 ns vs. 40 ns) similar (22 ms vs. 28 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 (50 ns vs. 50 ns) similar (39 ms vs. 29 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 (50 ns vs. 50 ns) similar (40 ms vs. 28 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 (40 ns vs. 50 ns) similar (39 ms vs. 30 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 (50 ns vs. 50 ns) similar (40 ms vs. 29 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. 50 ns) similar (39 ms vs. 31 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 (50 ns vs. 40 ns) similar (40 ms vs. 34 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 (50 ns vs. 50 ns) similar (41 ms vs. 43 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 (50 ns vs. 50 ns) similar (47 ms vs. 40 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. 50 ns) similar (54 ms vs. 59 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 (50 ns vs. 50 ns) similar (26 ms vs. 27 ms) similar (55 kB vs. 89 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 2 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (26 ms vs. 28 ms) similar (92 kB vs. 152 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 3 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (27 ms vs. 26 ms) 2 times less (95 kB vs. 226 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 4 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (42 ms vs. 28 ms) similar (150 kB vs. 272 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 5 distinct empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) similar (42 ms vs. 26 ms) 2 times less (154 kB vs. 327 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 6 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (43 ms vs. 28 ms) 2 times less (158 kB vs. 374 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 7 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (42 ms vs. 26 ms) 2 times less (161 kB vs. 429 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 8 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (42 ms vs. 28 ms) 2 times less (165 kB vs. 477 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 16 distinct empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) similar (43 ms vs. 29 ms) 4 times less (194 kB vs. 908 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 32 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (45 ms vs. 31 ms) 7 times less (252 kB vs. 2 MB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 128 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (49 ms vs. 38 ms) 10 times less (603 kB vs. 6 MB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 256 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (58 ms vs. 56 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 (50 ns vs. 40 ns) similar (25 ms vs. 27 ms) similar (89 kB vs. 90 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 2 distinct nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) similar (26 ms vs. 28 ms) similar (90 kB vs. 152 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 3 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (26 ms vs. 26 ms) 2 times less (92 kB vs. 215 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 4 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (43 ms vs. 28 ms) similar (148 kB vs. 259 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 5 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (42 ms vs. 26 ms) 2 times less (151 kB vs. 315 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 6 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (42 ms vs. 28 ms) 2 times less (155 kB vs. 360 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 7 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (43 ms vs. 26 ms) 2 times less (159 kB vs. 418 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 8 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (42 ms vs. 28 ms) 2 times less (162 kB vs. 463 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 16 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (43 ms vs. 29 ms) 4 times less (192 kB vs. 894 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 32 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (44 ms vs. 31 ms) 7 times less (250 kB vs. 2 MB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 128 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (50 ms vs. 39 ms) 10 times less (601 kB vs. 6 MB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 256 distinct nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (57 ms vs. 57 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 (50 ns vs. 50 ns) similar (24 ms vs. 28 ms) similar (62 kB vs. 90 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 2 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (22 ms vs. 29 ms) similar (89 kB vs. 160 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 3 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (22 ms vs. 28 ms) 2 times less (91 kB vs. 218 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 4 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (39 ms vs. 30 ms) similar (147 kB vs. 276 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 5 distinct nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) similar (39 ms vs. 29 ms) 2 times less (150 kB vs. 333 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 6 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (40 ms vs. 31 ms) 2 times less (154 kB vs. 395 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 7 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (39 ms vs. 29 ms) 2 times less (158 kB vs. 456 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 8 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (40 ms vs. 32 ms) 3 times less (161 kB vs. 526 kB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 16 distinct nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (41 ms vs. 37 ms) 5 times less (191 kB vs. 1 MB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 32 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (41 ms vs. 47 ms) 10 times less (249 kB vs. 3 MB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 128 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (47 ms vs. 43 ms) 11 times less (600 kB vs. 7 MB)
unrolled_all(isempty, itr) rec_unrolled_all(isempty, itr) Tuple 256 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (54 ms vs. 61 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 (50 ns vs. 50 ns) similar (49 ms vs. 49 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 (50 ns vs. 40 ns) similar (49 ms vs. 48 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 (50 ns vs. 50 ns) similar (46 ms vs. 49 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. 50 ns) similar (48 ms vs. 48 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 (50 ns vs. 50 ns) similar (49 ms vs. 49 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. 40 ns) similar (49 ms vs. 53 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 (40 ns vs. 50 ns) similar (67 ms vs. 53 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. 50 ns) similar (68 ms vs. 53 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 (50 ns vs. 50 ns) similar (66 ms vs. 53 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 (50 ns vs. 40 ns) similar (67 ms vs. 53 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 (50 ns vs. 50 ns) similar (67 ms vs. 54 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. 50 ns) similar (67 ms vs. 54 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 (50 ns vs. 50 ns) similar (68 ms vs. 56 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 (50 ns vs. 50 ns) similar (71 ms vs. 77 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. 50 ns) similar (77 ms vs. 77 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 (40 ns vs. 50 ns) similar (49 ms vs. 48 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 (40 ns vs. 50 ns) similar (49 ms vs. 48 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. 41 ns) similar (49 ms vs. 52 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. 50 ns) similar (67 ms vs. 53 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 (50 ns vs. 50 ns) similar (67 ms vs. 52 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 (50 ns vs. 50 ns) similar (68 ms vs. 53 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 (50 ns vs. 50 ns) similar (67 ms vs. 54 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 (50 ns vs. 50 ns) similar (67 ms vs. 53 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 (50 ns vs. 50 ns) similar (67 ms vs. 53 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 (50 ns vs. 50 ns) similar (67 ms vs. 56 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 (50 ns vs. 50 ns) similar (70 ms vs. 62 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 (74 ms vs. 78 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 (40 ns vs. 50 ns) similar (46 ms vs. 49 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 (50 ns vs. 50 ns) similar (45 ms vs. 51 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 (40 ns vs. 50 ns) similar (45 ms vs. 54 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 (50 ns vs. 50 ns) similar (64 ms vs. 55 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 (50 ns vs. 40 ns) similar (64 ms vs. 55 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 (50 ns vs. 50 ns) similar (64 ms vs. 55 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 (50 ns vs. 50 ns) similar (64 ms vs. 55 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 (50 ns vs. 50 ns) similar (64 ms vs. 56 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. 50 ns) similar (64 ms vs. 59 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. 50 ns) similar (65 ms vs. 68 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 (69 ms vs. 66 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. 50 ns) similar (73 ms vs. 83 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 (50 ns vs. 50 ns) similar (49 ms vs. 49 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 distinct empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) similar (50 ms vs. 49 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 distinct empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) similar (50 ms vs. 53 ms) 2 times less (129 kB vs. 369 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 4 distinct empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (67 ms vs. 53 ms) 2 times less (197 kB vs. 431 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 5 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (67 ms vs. 60 ms) 2 times less (215 kB vs. 616 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 6 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (67 ms vs. 60 ms) 2 times less (233 kB vs. 678 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 7 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (67 ms vs. 67 ms) 3 times less (251 kB vs. 865 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 8 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (67 ms vs. 68 ms) 3 times less (254 kB vs. 914 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 16 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (67 ms vs. 76 ms) 4 times less (283 kB vs. 1 MB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 32 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (69 ms vs. 78 ms) 6 times less (341 kB vs. 2 MB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 128 distinct empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) similar (71 ms vs. 85 ms) 9 times less (690 kB vs. 6 MB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 256 distinct empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) similar (75 ms vs. 102 ms) 11 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 (40 ns vs. 40 ns) similar (48 ms vs. 48 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 distinct nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) similar (49 ms vs. 49 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 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (49 ms vs. 53 ms) 2 times less (134 kB vs. 374 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 4 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (67 ms vs. 53 ms) 2 times less (202 kB vs. 436 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 5 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (66 ms vs. 60 ms) 2 times less (220 kB vs. 621 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 6 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (67 ms vs. 60 ms) 2 times less (237 kB vs. 683 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 7 distinct nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (67 ms vs. 68 ms) 3 times less (255 kB vs. 869 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 8 distinct nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) similar (66 ms vs. 67 ms) 3 times less (259 kB vs. 919 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 16 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (67 ms vs. 75 ms) 4 times less (287 kB vs. 1 MB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 32 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (68 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 distinct nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (72 ms vs. 86 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 distinct nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) similar (75 ms vs. 103 ms) 11 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 (40 ns vs. 50 ns) similar (46 ms vs. 50 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 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (46 ms vs. 50 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 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (46 ms vs. 55 ms) 2 times less (132 kB vs. 369 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 4 distinct nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (65 ms vs. 57 ms) 2 times less (200 kB vs. 436 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 5 distinct nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) similar (65 ms vs. 63 ms) 2 times less (222 kB vs. 626 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 6 distinct nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) similar (65 ms vs. 64 ms) 2 times less (244 kB vs. 702 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 7 distinct nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) similar (64 ms vs. 71 ms) 3 times less (266 kB vs. 895 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 8 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (64 ms vs. 71 ms) 3 times less (275 kB vs. 965 kB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 16 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (66 ms vs. 83 ms) 4 times less (339 kB vs. 2 MB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 32 distinct nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) similar (65 ms vs. 91 ms) 6 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 distinct nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) similar (70 ms vs. 90 ms) 6 times less (1 MB vs. 7 MB)
unrolled_foreach((x->@assert(length(x) <= 7)), itr) rec_unrolled_foreach((x->@assert(length(x) <= 7)), itr) Tuple 256 distinct nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) similar (74 ms vs. 108 ms) 6 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 (50 ns vs. 50 ns) similar (26 ms vs. 25 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 (50 ns vs. 40 ns) similar (25 ms vs. 25 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 (50 ns vs. 50 ns) similar (25 ms vs. 26 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 (50 ns vs. 50 ns) similar (25 ms vs. 25 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 (50 ns vs. 50 ns) similar (26 ms vs. 26 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 (50 ns vs. 50 ns) similar (26 ms vs. 29 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 (50 ns vs. 50 ns) similar (51 ms vs. 30 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 (50 ns vs. 50 ns) similar (52 ms vs. 36 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 (50 ns vs. 50 ns) similar (52 ms vs. 37 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 (50 ns vs. 40 ns) similar (52 ms vs. 43 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 (50 ns vs. 50 ns) similar (52 ms vs. 45 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 (50 ns vs. 50 ns) similar (52 ms vs. 73 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 (50 ns vs. 50 ns) 2 times less (53 ms vs. 135 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 (50 ns vs. 50 ns) similar (25 ms vs. 25 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 (50 ns vs. 50 ns) similar (26 ms vs. 26 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 (50 ns vs. 50 ns) similar (26 ms vs. 29 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 (50 ns vs. 50 ns) similar (51 ms vs. 30 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 (40 ns vs. 50 ns) similar (51 ms vs. 36 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 (50 ns vs. 50 ns) similar (52 ms vs. 37 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 (50 ns vs. 50 ns) similar (52 ms vs. 43 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 (50 ns vs. 50 ns) similar (51 ms vs. 44 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 (50 ns vs. 50 ns) similar (52 ms vs. 74 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 (50 ns vs. 50 ns) 2 times less (53 ms vs. 137 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 (50 ns vs. 60 ns) similar (25 ms vs. 26 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 (60 ns vs. 50 ns) similar (27 ms vs. 27 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 (60 ns vs. 50 ns) similar (26 ms vs. 35 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 (60 ns vs. 60 ns) similar (52 ms vs. 36 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. 60 ns) similar (53 ms vs. 45 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 (60 ns vs. 60 ns) similar (53 ms vs. 46 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 (60 ns vs. 60 ns) similar (53 ms vs. 55 ms) similar (2 MB vs. 1 MB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 8 identical nonempty non-singleton Tuples similar (12 LLVM lines) similar (60 ns vs. 60 ns) similar (53 ms vs. 56 ms) similar (2 MB vs. 1 MB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 16 identical nonempty non-singleton Tuples similar (20 LLVM lines) similar (60 ns vs. 60 ns) similar (54 ms vs. 97 ms) similar (2 MB vs. 3 MB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 32 identical nonempty non-singleton Tuples similar (36 LLVM lines) similar (60 ns vs. 60 ns) 3 times less (58 ms vs. 189 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 (40 ns vs. 50 ns) similar (27 ms vs. 25 ms) similar (60 kB vs. 116 kB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 2 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (26 ms vs. 25 ms) similar (92 kB vs. 167 kB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 3 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (27 ms vs. 29 ms) 3 times less (94 kB vs. 321 kB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 4 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (51 ms vs. 30 ms) 4 times more (2 MB vs. 407 kB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 5 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (51 ms vs. 37 ms) 2 times more (2 MB vs. 694 kB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 6 distinct empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) similar (51 ms vs. 37 ms) 2 times more (2 MB vs. 852 kB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 7 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (52 ms vs. 44 ms) similar (2 MB vs. 1 MB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 8 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (51 ms vs. 45 ms) similar (2 MB vs. 1 MB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 16 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (52 ms vs. 84 ms) 2 times less (2 MB vs. 5 MB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 32 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) 4 times less (53 ms vs. 259 ms) 9 times less (2 MB vs. 19 MB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 1 nonempty singleton Tuple similar (optimized out) similar (40 ns vs. 50 ns) similar (25 ms vs. 25 ms) similar (90 kB vs. 117 kB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 2 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (26 ms vs. 26 ms) similar (92 kB vs. 167 kB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 3 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (26 ms vs. 29 ms) 3 times less (95 kB vs. 355 kB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 4 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (51 ms vs. 30 ms) 4 times more (2 MB vs. 441 kB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 5 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (51 ms vs. 37 ms) 2 times more (2 MB vs. 797 kB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 6 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (52 ms vs. 37 ms) 2 times more (2 MB vs. 956 kB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 7 distinct nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) similar (53 ms vs. 44 ms) similar (2 MB vs. 1 MB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 8 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (51 ms vs. 45 ms) similar (2 MB vs. 2 MB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 16 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (52 ms vs. 86 ms) 2 times less (2 MB vs. 6 MB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 32 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) 5 times less (53 ms vs. 296 ms) 10 times less (2 MB vs. 22 MB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 1 nonempty non-singleton Tuple similar (8 LLVM lines) similar (50 ns vs. 60 ns) similar (26 ms vs. 27 ms) similar (153 kB vs. 118 kB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 2 distinct nonempty non-singleton Tuples similar (11 LLVM lines) similar (50 ns vs. 60 ns) similar (26 ms vs. 27 ms) similar (193 kB vs. 174 kB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 3 distinct nonempty non-singleton Tuples similar (14 LLVM lines) similar (60 ns vs. 60 ns) similar (27 ms vs. 36 ms) 2 times less (209 kB vs. 469 kB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 4 distinct nonempty non-singleton Tuples similar (17 LLVM lines) similar (60 ns vs. 60 ns) similar (57 ms vs. 38 ms) 3 times more (2 MB vs. 565 kB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 5 distinct nonempty non-singleton Tuples similar (20 LLVM lines) similar (60 ns vs. 60 ns) similar (53 ms vs. 48 ms) 2 times more (2 MB vs. 962 kB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 6 distinct nonempty non-singleton Tuples similar (23 LLVM lines) similar (70 ns vs. 60 ns) similar (54 ms vs. 49 ms) similar (2 MB vs. 1 MB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 7 distinct nonempty non-singleton Tuples similar (26 LLVM lines) similar (70 ns vs. 60 ns) similar (54 ms vs. 58 ms) similar (2 MB vs. 2 MB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 8 distinct nonempty non-singleton Tuples similar (30 LLVM lines) similar (70 ns vs. 60 ns) similar (55 ms vs. 61 ms) similar (2 MB vs. 2 MB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 16 distinct nonempty non-singleton Tuples similar (55 LLVM lines) similar (80 ns vs. 70 ns) similar (59 ms vs. 112 ms) 2 times less (2 MB vs. 6 MB)
unrolled_reduce(tuple, itr, ()) rec_unrolled_reduce(tuple, itr, ()) Tuple 32 distinct nonempty non-singleton Tuples similar (105 LLVM lines) similar (90 ns vs. 80 ns) 5 times less (62 ms vs. 347 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 (50 ns vs. 50 ns) similar (25 ms vs. 33 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 (50 ns vs. 50 ns) similar (25 ms vs. 33 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 (50 ns vs. 50 ns) similar (26 ms vs. 29 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 (50 ns vs. 50 ns) similar (25 ms vs. 33 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 (50 ns vs. 50 ns) similar (26 ms vs. 36 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 (50 ns vs. 50 ns) similar (26 ms vs. 37 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 (50 ns vs. 50 ns) similar (59 ms vs. 38 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 (50 ns vs. 50 ns) similar (58 ms vs. 49 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 (50 ns vs. 40 ns) similar (58 ms vs. 49 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 (50 ns vs. 40 ns) similar (59 ms vs. 50 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 (50 ns vs. 50 ns) similar (59 ms vs. 50 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. 50 ns) similar (59 ms vs. 52 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 (50 ns vs. 50 ns) similar (60 ms vs. 57 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 (50 ns vs. 50 ns) similar (25 ms vs. 33 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 (50 ns vs. 40 ns) similar (25 ms vs. 37 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. 50 ns) similar (34 ms vs. 37 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. 50 ns) similar (58 ms vs. 37 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. 50 ns) similar (58 ms vs. 49 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 (50 ns vs. 50 ns) similar (60 ms vs. 50 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 (50 ns vs. 40 ns) similar (59 ms vs. 49 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 (50 ns vs. 50 ns) similar (59 ms vs. 50 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 (50 ns vs. 50 ns) similar (59 ms vs. 52 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 (50 ns vs. 50 ns) similar (60 ms vs. 58 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 (50 ns vs. 50 ns) similar (26 ms vs. 30 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 (50 ns vs. 50 ns) similar (26 ms vs. 31 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 (60 ns vs. 60 ns) similar (27 ms vs. 31 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 (21 LLVM lines) similar (60 ns vs. 60 ns) similar (60 ms vs. 32 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 (31 LLVM lines) similar (60 ns vs. 60 ns) similar (60 ms vs. 44 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 (35 LLVM lines) similar (60 ns vs. 60 ns) similar (60 ms vs. 45 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 (49 LLVM lines) similar (60 ns vs. 60 ns) similar (62 ms vs. 45 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 (65 LLVM lines) similar (60 ns vs. 70 ns) similar (62 ms vs. 47 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 (265 LLVM lines) similar (90 ns vs. 100 ns) similar (85 ms vs. 73 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 (857 LLVM lines) similar (270 ns vs. 360 ns) similar (276 ms vs. 274 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 (50 ns vs. 40 ns) similar (26 ms vs. 33 ms) 3 times less (61 kB vs. 233 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 2 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (26 ms vs. 38 ms) 5 times less (94 kB vs. 495 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 3 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (26 ms vs. 38 ms) 5 times less (97 kB vs. 525 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 4 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (58 ms vs. 37 ms) 2 times less (199 kB vs. 554 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 5 distinct empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 40 ns) similar (59 ms vs. 50 ms) 2 times less (205 kB vs. 611 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 6 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (58 ms vs. 49 ms) 3 times less (210 kB vs. 641 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 7 distinct empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) similar (59 ms vs. 64 ms) 3 times less (216 kB vs. 672 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 8 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (58 ms vs. 51 ms) 3 times less (222 kB vs. 702 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 16 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (59 ms vs. 53 ms) 3 times less (270 kB vs. 970 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 32 distinct empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) similar (60 ms vs. 57 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. 50 ns) similar (26 ms vs. 33 ms) 2 times less (91 kB vs. 262 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 2 distinct nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) similar (26 ms vs. 37 ms) 5 times less (94 kB vs. 495 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 3 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (26 ms vs. 39 ms) 5 times less (97 kB vs. 525 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 4 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (58 ms vs. 37 ms) 2 times less (198 kB vs. 554 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 5 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (58 ms vs. 49 ms) 2 times less (204 kB vs. 611 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 6 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (58 ms vs. 49 ms) 3 times less (210 kB vs. 640 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 7 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (59 ms vs. 50 ms) 3 times less (216 kB vs. 672 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 8 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (58 ms vs. 50 ms) 3 times less (222 kB vs. 702 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 16 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (59 ms vs. 52 ms) 3 times less (270 kB vs. 970 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 32 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (61 ms vs. 56 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 (50 ns vs. 60 ns) similar (26 ms vs. 30 ms) 2 times less (157 kB vs. 345 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 2 distinct nonempty non-singleton Tuples similar (13 LLVM lines) similar (60 ns vs. 50 ns) similar (26 ms vs. 31 ms) 3 times less (200 kB vs. 774 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 3 distinct nonempty non-singleton Tuples similar (20 LLVM lines) similar (60 ns vs. 60 ns) similar (27 ms vs. 32 ms) 3 times less (218 kB vs. 868 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 4 distinct nonempty non-singleton Tuples similar (29 LLVM lines) similar (60 ns vs. 60 ns) similar (63 ms vs. 33 ms) 2 times less (330 kB vs. 965 kB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 5 distinct nonempty non-singleton Tuples similar (40 LLVM lines) similar (70 ns vs. 70 ns) similar (63 ms vs. 48 ms) 3 times less (349 kB vs. 1 MB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 6 distinct nonempty non-singleton Tuples similar (53 LLVM lines) similar (70 ns vs. 70 ns) similar (64 ms vs. 48 ms) 3 times less (368 kB vs. 1 MB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 7 distinct nonempty non-singleton Tuples similar (68 LLVM lines) similar (70 ns vs. 70 ns) similar (67 ms vs. 51 ms) 3 times less (387 kB vs. 1 MB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 8 distinct nonempty non-singleton Tuples similar (86 LLVM lines) similar (80 ns vs. 80 ns) similar (69 ms vs. 53 ms) 3 times less (407 kB vs. 1 MB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 16 distinct nonempty non-singleton Tuples similar (513 LLVM lines) similar (330 ns vs. 420 ns) similar (192 ms vs. 182 ms) 4 times less (562 kB vs. 3 MB)
UnrolledUtilities.unrolled_accumulate_into_tuple(tuple, itr, ()) rec_unrolled_accumulate(tuple, itr, ()) Tuple 32 distinct nonempty non-singleton Tuples similar (2795 LLVM lines) similar (2 μs vs. 2 μs) similar (1 s vs. 1 s) 6 times less (880 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 (50 ns vs. 40 ns) similar (44 ms vs. 43 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 (50 ns vs. 50 ns) similar (45 ms vs. 43 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 (60 ns vs. 60 ns) similar (41 ms vs. 45 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 (50 ns vs. 50 ns) similar (43 ms vs. 44 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 (50 ns vs. 40 ns) similar (45 ms vs. 44 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. 50 ns) similar (45 ms vs. 44 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 (50 ns vs. 50 ns) similar (64 ms vs. 45 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 (50 ns vs. 50 ns) similar (64 ms vs. 45 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 (50 ns vs. 40 ns) similar (66 ms vs. 45 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 (50 ns vs. 50 ns) similar (66 ms vs. 45 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 (50 ns vs. 50 ns) similar (67 ms vs. 45 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 (50 ns vs. 50 ns) similar (72 ms vs. 45 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 (50 ns vs. 50 ns) similar (83 ms vs. 47 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 (50 ns vs. 50 ns) 3 times more (174 ms vs. 55 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 (50 ns vs. 40 ns) 4 times more (309 ms vs. 71 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 (50 ns vs. 50 ns) similar (44 ms vs. 43 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 (50 ns vs. 50 ns) similar (45 ms vs. 45 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 (50 ns vs. 50 ns) similar (45 ms vs. 45 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 (50 ns vs. 50 ns) similar (65 ms vs. 45 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 (50 ns vs. 40 ns) similar (65 ms vs. 45 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 (50 ns vs. 50 ns) similar (66 ms vs. 45 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. 50 ns) similar (67 ms vs. 45 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 (50 ns vs. 50 ns) similar (67 ms vs. 45 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 (50 ns vs. 50 ns) similar (73 ms vs. 46 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 (50 ns vs. 40 ns) similar (84 ms vs. 47 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 (50 ns vs. 50 ns) 3 times more (174 ms vs. 56 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 (50 ns vs. 50 ns) 4 times more (311 ms vs. 73 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 (50 ns vs. 50 ns) similar (42 ms vs. 46 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 (50 ns vs. 60 ns) similar (43 ms vs. 48 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 (51 ns vs. 60 ns) similar (44 ms vs. 47 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 (60 ns vs. 50 ns) similar (63 ms vs. 47 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 (50 ns vs. 50 ns) similar (65 ms vs. 47 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 (50 ns vs. 50 ns) similar (65 ms vs. 47 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 (50 ns vs. 50 ns) similar (66 ms vs. 48 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 (50 ns vs. 60 ns) similar (66 ms vs. 48 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. 50 ns) similar (73 ms vs. 52 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 (60 ns vs. 50 ns) similar (88 ms vs. 60 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) 126 times less (50 ns vs. 6 μs) 3 times more (199 ms vs. 59 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) 247 times less (50 ns vs. 12 μs) 4 times more (369 ms vs. 76 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 (50 ns vs. 50 ns) similar (44 ms vs. 43 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 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (50 ms vs. 50 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 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (55 ms vs. 60 ms) 2 times less (360 kB vs. 1007 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 distinct empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) similar (79 ms vs. 71 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 5 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (84 ms vs. 80 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 6 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (89 ms vs. 90 ms) 2 times less (622 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 7 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (95 ms vs. 99 ms) 2 times less (689 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 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) 2 times more (95 ms vs. 46 ms) similar (714 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 16 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (109 ms vs. 58 ms) similar (886 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 distinct empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) similar (117 ms vs. 78 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 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) 3 times more (221 ms vs. 68 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 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) 3 times more (377 ms vs. 105 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 (50 ns vs. 50 ns) similar (44 ms vs. 45 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 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (50 ms vs. 49 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 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (57 ms vs. 60 ms) 2 times less (365 kB vs. 1012 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 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (78 ms vs. 71 ms) 2 times less (492 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 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (84 ms vs. 80 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 6 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (89 ms vs. 89 ms) 2 times less (626 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 7 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (95 ms vs. 99 ms) 2 times less (693 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 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) 2 times more (95 ms vs. 46 ms) similar (718 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 16 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (101 ms vs. 56 ms) similar (890 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 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (113 ms vs. 78 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 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) 3 times more (214 ms vs. 67 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 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) 3 times more (362 ms vs. 107 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 non-singleton Tuple similar (8 LLVM lines) similar (60 ns vs. 50 ns) similar (42 ms vs. 46 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 distinct nonempty non-singleton Tuples similar (8 LLVM lines) similar (50 ns vs. 50 ns) similar (48 ms vs. 54 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 distinct nonempty non-singleton Tuples similar (8 LLVM lines) similar (50 ns vs. 60 ns) similar (54 ms vs. 64 ms) 2 times less (450 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 4 distinct nonempty non-singleton Tuples similar (8 LLVM lines) similar (50 ns vs. 60 ns) similar (78 ms vs. 74 ms) 2 times less (602 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 distinct nonempty non-singleton Tuples similar (8 LLVM lines) similar (60 ns vs. 50 ns) similar (84 ms vs. 85 ms) 2 times less (700 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 distinct nonempty non-singleton Tuples similar (8 LLVM lines) similar (60 ns vs. 60 ns) similar (90 ms vs. 95 ms) 2 times less (803 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 7 distinct nonempty non-singleton Tuples similar (8 LLVM lines) similar (60 ns vs. 60 ns) similar (97 ms vs. 106 ms) 2 times less (901 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 distinct nonempty non-singleton Tuples similar (8 LLVM lines) similar (50 ns vs. 60 ns) similar (98 ms vs. 50 ms) similar (940 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 16 distinct nonempty non-singleton Tuples similar (8 LLVM lines) similar (50 ns vs. 50 ns) similar (105 ms vs. 65 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 32 distinct nonempty non-singleton Tuples similar (8 LLVM lines) similar (60 ns vs. 60 ns) similar (127 ms vs. 92 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 distinct nonempty non-singleton Tuples similar (8 LLVM lines) 235 times less (60 ns vs. 14 μs) 3 times more (279 ms vs. 72 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 distinct nonempty non-singleton Tuples similar (8 LLVM lines) 1173 times less (50 ns vs. 59 μs) 4 times more (504 ms vs. 113 ms) similar (10 MB vs. 16 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 (50 ns vs. 40 ns) 2 times less (31 ms vs. 66 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 (50 ns vs. 40 ns) similar (33 ms vs. 65 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 (50 ns vs. 50 ns) similar (30 ms vs. 46 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 (50 ns vs. 40 ns) 2 times less (30 ms vs. 65 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 (50 ns vs. 40 ns) 2 times less (30 ms vs. 66 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. 40 ns) 2 times less (31 ms vs. 70 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 (50 ns vs. 40 ns) similar (49 ms vs. 69 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 (50 ns vs. 50 ns) similar (49 ms vs. 70 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 (50 ns vs. 50 ns) similar (49 ms vs. 70 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 (50 ns vs. 50 ns) similar (49 ms vs. 71 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 (50 ns vs. 50 ns) similar (49 ms vs. 71 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 (50 ns vs. 50 ns) similar (50 ms vs. 73 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 (50 ns vs. 50 ns) similar (51 ms vs. 78 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) 11571 times less (50 ns vs. 579 μs) similar (60 ms vs. 75 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) 55344 times less (40 ns vs. 2 ms) similar (73 ms vs. 75 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 (50 ns vs. 50 ns) similar (33 ms vs. 65 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 (50 ns vs. 50 ns) similar (33 ms vs. 65 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 (50 ns vs. 50 ns) similar (33 ms vs. 65 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 (50 ns vs. 50 ns) similar (52 ms vs. 65 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. 50 ns) similar (52 ms vs. 66 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 (50 ns vs. 40 ns) similar (52 ms vs. 66 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 (50 ns vs. 50 ns) similar (52 ms vs. 66 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 (50 ns vs. 50 ns) similar (52 ms vs. 67 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 (50 ns vs. 50 ns) similar (53 ms vs. 69 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 (50 ns vs. 50 ns) similar (54 ms vs. 74 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 (50 ns vs. 40 ns) similar (63 ms vs. 71 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 (50 ns vs. 50 ns) similar (74 ms vs. 71 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 (50 ns vs. 50 ns) similar (30 ms vs. 46 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 (50 ns vs. 50 ns) similar (30 ms vs. 47 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. 50 ns) similar (30 ms vs. 48 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 (50 ns vs. 50 ns) similar (48 ms vs. 48 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 (50 ns vs. 50 ns) similar (49 ms vs. 50 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 (50 ns vs. 50 ns) similar (49 ms vs. 50 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 (50 ns vs. 50 ns) similar (49 ms vs. 51 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 (40 ns vs. 50 ns) similar (49 ms vs. 51 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 (50 ns vs. 50 ns) similar (51 ms vs. 57 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 (50 ns vs. 40 ns) similar (51 ms vs. 74 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) 243 times less (50 ns vs. 12 μs) similar (60 ms vs. 63 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) 471 times less (50 ns vs. 24 μs) similar (71 ms vs. 63 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 (50 ns vs. 50 ns) 2 times less (30 ms vs. 65 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 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) 2 times less (34 ms vs. 76 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 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) 2 times less (34 ms vs. 90 ms) 10 times less (273 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 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (52 ms vs. 100 ms) 9 times less (336 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 distinct empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) 2 times less (53 ms vs. 106 ms) 9 times less (341 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 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) 2 times less (52 ms vs. 114 ms) 10 times less (346 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 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) 2 times less (52 ms vs. 124 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 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) 2 times less (52 ms vs. 124 ms) 11 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 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) 2 times less (54 ms vs. 131 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 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) 2 times less (54 ms vs. 135 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 distinct empty & nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) 2 times less (64 ms vs. 130 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 distinct empty & nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (74 ms vs. 130 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 (50 ns vs. 50 ns) similar (33 ms vs. 65 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 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) 2 times less (34 ms vs. 76 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 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) 2 times less (34 ms vs. 85 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 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (51 ms vs. 92 ms) 10 times less (290 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 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (52 ms vs. 102 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 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) 2 times less (52 ms vs. 111 ms) 11 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 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) 2 times less (52 ms vs. 119 ms) 11 times less (306 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 distinct nonempty singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) 2 times less (52 ms vs. 120 ms) 12 times less (311 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 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) 2 times less (52 ms vs. 122 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 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) 2 times less (54 ms vs. 130 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 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) 2 times less (63 ms vs. 126 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 distinct nonempty singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (73 ms vs. 127 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 (40 ns vs. 50 ns) similar (30 ms vs. 47 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 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (30 ms vs. 48 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 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (30 ms vs. 51 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 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (49 ms vs. 50 ms) 12 times less (289 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 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (49 ms vs. 51 ms) 13 times less (294 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 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 40 ns) similar (49 ms vs. 52 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 distinct nonempty non-singleton Tuples similar (optimized out) similar (40 ns vs. 50 ns) similar (49 ms vs. 54 ms) 15 times less (305 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 8 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (49 ms vs. 57 ms) 16 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 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (51 ms vs. 64 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 distinct nonempty non-singleton Tuples similar (optimized out) similar (50 ns vs. 50 ns) similar (51 ms vs. 85 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 distinct nonempty non-singleton Tuples better (optimized out vs. 557 kB allocs) 1430 times less (50 ns vs. 72 μs) similar (60 ms vs. 67 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 distinct nonempty non-singleton Tuples better (optimized out vs. 2 MB allocs) 5067 times less (40 ns vs. 203 μs) similar (72 ms vs. 68 ms) 7 times less (2 MB vs. 11 MB)