LLVMFuzzerTestOneInput:
   26|  8.01k|{
   27|  8.01k|    auto guard = immer::gc_disable_guard{};
   28|       |
   29|  8.01k|    constexpr auto var_count = 4;
   30|  8.01k|    constexpr auto bits      = 2;
   31|       |
   32|  8.01k|    using vector_t    = immer::flex_vector<int, gc_memory, bits, bits>;
   33|  8.01k|    using transient_t = typename vector_t::transient_type;
   34|  8.01k|    using size_t      = std::uint8_t;
   35|       |
   36|  8.01k|    auto vs = std::array<vector_t, var_count>{};
   37|  8.01k|    auto ts = std::array<transient_t, var_count>{};
   38|       |
   39|  8.01k|    auto is_valid_var = [&](auto idx) { return idx >= 0 && idx < var_count; };
   40|  8.01k|    auto is_valid_var_neq = [](auto other) {
   41|  8.01k|        return [=](auto idx) {
   42|  8.01k|            return idx >= 0 && idx < var_count && idx != other;
   43|  8.01k|        };
   44|  8.01k|    };
   45|  8.01k|    auto is_valid_index = [](auto& v) {
   46|  8.01k|        return [&](auto idx) { return idx >= 0 && idx < v.size(); };
   47|  8.01k|    };
   48|  8.01k|    auto is_valid_size = [](auto& v) {
   49|  8.01k|        return [&](auto idx) { return idx >= 0 && idx <= v.size(); };
   50|  8.01k|    };
   51|  8.01k|    auto can_concat = [](auto&& v1, auto&& v2) {
   52|  8.01k|        return v1.size() + v2.size() < vector_t::max_size();
   53|  8.01k|    };
   54|       |
   55|  8.01k|    return fuzzer_input{data, size}.run([&](auto& in) {
   56|  8.01k|        enum ops
   57|  8.01k|        {
   58|  8.01k|            op_transient,
   59|  8.01k|            op_persistent,
   60|  8.01k|            op_push_back,
   61|  8.01k|            op_update,
   62|  8.01k|            op_take,
   63|  8.01k|            op_drop,
   64|  8.01k|            op_concat,
   65|  8.01k|            op_push_back_mut,
   66|  8.01k|            op_update_mut,
   67|  8.01k|            op_take_mut,
   68|  8.01k|            op_drop_mut,
   69|  8.01k|            op_prepend_mut,
   70|  8.01k|            op_prepend_mut_move,
   71|  8.01k|            op_append_mut,
   72|  8.01k|            op_append_mut_move,
   73|  8.01k|        };
   74|  8.01k|        auto dst = read<char>(in, is_valid_var);
   75|  8.01k|        switch (read<char>(in)) {
   76|  8.01k|        case op_transient: {
   77|  8.01k|            auto src = read<char>(in, is_valid_var);
   78|  8.01k|            ts[dst]  = vs[src].transient();
   79|  8.01k|            break;
   80|  8.01k|        }
   81|  8.01k|        case op_persistent: {
   82|  8.01k|            auto src = read<char>(in, is_valid_var);
   83|  8.01k|            vs[dst]  = ts[src].persistent();
   84|  8.01k|            break;
   85|  8.01k|        }
   86|  8.01k|        case op_push_back: {
   87|  8.01k|            auto src = read<char>(in, is_valid_var);
   88|  8.01k|            vs[dst]  = vs[src].push_back(42);
   89|  8.01k|            break;
   90|  8.01k|        }
   91|  8.01k|        case op_update: {
   92|  8.01k|            auto src = read<char>(in, is_valid_var);
   93|  8.01k|            auto idx = read<size_t>(in, is_valid_index(vs[src]));
   94|  8.01k|            vs[dst]  = vs[src].update(idx, [](auto x) { return x + 1; });
   95|  8.01k|            break;
   96|  8.01k|        }
   97|  8.01k|        case op_take: {
   98|  8.01k|            auto src = read<char>(in, is_valid_var);
   99|  8.01k|            auto idx = read<size_t>(in, is_valid_size(vs[src]));
  100|  8.01k|            vs[dst]  = vs[src].take(idx);
  101|  8.01k|            break;
  102|  8.01k|        }
  103|  8.01k|        case op_drop: {
  104|  8.01k|            auto src = read<char>(in, is_valid_var);
  105|  8.01k|            auto idx = read<size_t>(in, is_valid_size(vs[src]));
  106|  8.01k|            vs[dst]  = vs[src].drop(idx);
  107|  8.01k|            break;
  108|  8.01k|        }
  109|  8.01k|        case op_concat: {
  110|  8.01k|            auto src  = read<char>(in, is_valid_var);
  111|  8.01k|            auto src2 = read<char>(in, is_valid_var);
  112|  8.01k|            if (can_concat(vs[src], vs[src2]))
  113|  8.01k|                vs[dst] = vs[src] + vs[src2];
  114|  8.01k|            break;
  115|  8.01k|        }
  116|  8.01k|        case op_push_back_mut: {
  117|  8.01k|            ts[dst].push_back(13);
  118|  8.01k|            break;
  119|  8.01k|        }
  120|  8.01k|        case op_update_mut: {
  121|  8.01k|            auto idx = read<size_t>(in, is_valid_index(ts[dst]));
  122|  8.01k|            ts[dst].update(idx, [](auto x) { return x + 1; });
  123|  8.01k|            break;
  124|  8.01k|        }
  125|  8.01k|        case op_take_mut: {
  126|  8.01k|            auto idx = read<size_t>(in, is_valid_size(ts[dst]));
  127|  8.01k|            ts[dst].take(idx);
  128|  8.01k|            break;
  129|  8.01k|        }
  130|  8.01k|        case op_prepend_mut: {
  131|  8.01k|            auto src = read<char>(in, is_valid_var_neq(dst));
  132|  8.01k|            if (can_concat(ts[dst], ts[src]))
  133|  8.01k|                ts[dst].prepend(ts[src]);
  134|  8.01k|            break;
  135|  8.01k|        }
  136|  8.01k|        case op_prepend_mut_move: {
  137|  8.01k|            auto src = read<char>(in, is_valid_var_neq(dst));
  138|  8.01k|            if (can_concat(ts[dst], ts[src])) {
  139|  8.01k|                ts[dst].prepend(std::move(ts[src]));
  140|  8.01k|                ts[src] = {};
  141|  8.01k|            }
  142|  8.01k|            break;
  143|  8.01k|        }
  144|  8.01k|        case op_append_mut: {
  145|  8.01k|            auto src = read<char>(in, is_valid_var_neq(dst));
  146|  8.01k|            if (can_concat(ts[dst], ts[src]))
  147|  8.01k|                ts[dst].append(ts[src]);
  148|  8.01k|            break;
  149|  8.01k|        }
  150|  8.01k|        case op_append_mut_move: {
  151|  8.01k|            auto src = read<char>(in, is_valid_var_neq(dst));
  152|  8.01k|            if (can_concat(ts[dst], ts[src])) {
  153|  8.01k|                ts[dst].append(std::move(ts[src]));
  154|  8.01k|                ts[src] = {};
  155|  8.01k|            }
  156|  8.01k|            break;
  157|  8.01k|        }
  158|  8.01k|        default:
  159|  8.01k|            break;
  160|  8.01k|        };
  161|  8.01k|        return true;
  162|  8.01k|    });
  163|  8.01k|}
flex-vector-gc.cpp:_ZZ22LLVMFuzzerTestOneInputENK3$_5clI12fuzzer_inputEEDaRT_:
   55|  2.33M|    return fuzzer_input{data, size}.run([&](auto& in) {
   56|  2.33M|        enum ops
   57|  2.33M|        {
   58|  2.33M|            op_transient,
   59|  2.33M|            op_persistent,
   60|  2.33M|            op_push_back,
   61|  2.33M|            op_update,
   62|  2.33M|            op_take,
   63|  2.33M|            op_drop,
   64|  2.33M|            op_concat,
   65|  2.33M|            op_push_back_mut,
   66|  2.33M|            op_update_mut,
   67|  2.33M|            op_take_mut,
   68|  2.33M|            op_drop_mut,
   69|  2.33M|            op_prepend_mut,
   70|  2.33M|            op_prepend_mut_move,
   71|  2.33M|            op_append_mut,
   72|  2.33M|            op_append_mut_move,
   73|  2.33M|        };
   74|  2.33M|        auto dst = read<char>(in, is_valid_var);
   75|  2.33M|        switch (read<char>(in)) {
   76|   110k|        case op_transient: {
  ------------------
  |  Branch (76:9): [True: 110k, False: 2.22M]
  ------------------
   77|   110k|            auto src = read<char>(in, is_valid_var);
   78|   110k|            ts[dst]  = vs[src].transient();
   79|   110k|            break;
   80|      0|        }
   81|  19.5k|        case op_persistent: {
  ------------------
  |  Branch (81:9): [True: 19.5k, False: 2.31M]
  ------------------
   82|  19.5k|            auto src = read<char>(in, is_valid_var);
   83|  19.5k|            vs[dst]  = ts[src].persistent();
   84|  19.5k|            break;
   85|      0|        }
   86|  55.1k|        case op_push_back: {
  ------------------
  |  Branch (86:9): [True: 55.1k, False: 2.28M]
  ------------------
   87|  55.1k|            auto src = read<char>(in, is_valid_var);
   88|  55.1k|            vs[dst]  = vs[src].push_back(42);
   89|  55.1k|            break;
   90|      0|        }
   91|  6.02k|        case op_update: {
  ------------------
  |  Branch (91:9): [True: 6.02k, False: 2.33M]
  ------------------
   92|  6.02k|            auto src = read<char>(in, is_valid_var);
   93|  6.02k|            auto idx = read<size_t>(in, is_valid_index(vs[src]));
   94|  6.02k|            vs[dst]  = vs[src].update(idx, [](auto x) { return x + 1; });
   95|  6.02k|            break;
   96|      0|        }
   97|  12.8k|        case op_take: {
  ------------------
  |  Branch (97:9): [True: 12.8k, False: 2.32M]
  ------------------
   98|  12.8k|            auto src = read<char>(in, is_valid_var);
   99|  12.8k|            auto idx = read<size_t>(in, is_valid_size(vs[src]));
  100|  12.8k|            vs[dst]  = vs[src].take(idx);
  101|  12.8k|            break;
  102|      0|        }
  103|  17.5k|        case op_drop: {
  ------------------
  |  Branch (103:9): [True: 17.5k, False: 2.31M]
  ------------------
  104|  17.5k|            auto src = read<char>(in, is_valid_var);
  105|  17.5k|            auto idx = read<size_t>(in, is_valid_size(vs[src]));
  106|  17.5k|            vs[dst]  = vs[src].drop(idx);
  107|  17.5k|            break;
  108|      0|        }
  109|  59.4k|        case op_concat: {
  ------------------
  |  Branch (109:9): [True: 59.4k, False: 2.27M]
  ------------------
  110|  59.4k|            auto src  = read<char>(in, is_valid_var);
  111|  59.4k|            auto src2 = read<char>(in, is_valid_var);
  112|  59.4k|            if (can_concat(vs[src], vs[src2]))
  ------------------
  |  Branch (112:17): [True: 58.2k, False: 1.25k]
  ------------------
  113|  58.2k|                vs[dst] = vs[src] + vs[src2];
  114|  59.4k|            break;
  115|      0|        }
  116|  49.4k|        case op_push_back_mut: {
  ------------------
  |  Branch (116:9): [True: 49.4k, False: 2.28M]
  ------------------
  117|  49.4k|            ts[dst].push_back(13);
  118|  49.4k|            break;
  119|      0|        }
  120|  10.4k|        case op_update_mut: {
  ------------------
  |  Branch (120:9): [True: 10.4k, False: 2.32M]
  ------------------
  121|  10.4k|            auto idx = read<size_t>(in, is_valid_index(ts[dst]));
  122|  10.4k|            ts[dst].update(idx, [](auto x) { return x + 1; });
  123|  10.4k|            break;
  124|      0|        }
  125|  37.5k|        case op_take_mut: {
  ------------------
  |  Branch (125:9): [True: 37.5k, False: 2.29M]
  ------------------
  126|  37.5k|            auto idx = read<size_t>(in, is_valid_size(ts[dst]));
  127|  37.5k|            ts[dst].take(idx);
  128|  37.5k|            break;
  129|      0|        }
  130|  35.5k|        case op_prepend_mut: {
  ------------------
  |  Branch (130:9): [True: 35.5k, False: 2.30M]
  ------------------
  131|  35.5k|            auto src = read<char>(in, is_valid_var_neq(dst));
  132|  35.5k|            if (can_concat(ts[dst], ts[src]))
  ------------------
  |  Branch (132:17): [True: 33.0k, False: 2.50k]
  ------------------
  133|  33.0k|                ts[dst].prepend(ts[src]);
  134|  35.5k|            break;
  135|      0|        }
  136|  4.25k|        case op_prepend_mut_move: {
  ------------------
  |  Branch (136:9): [True: 4.25k, False: 2.33M]
  ------------------
  137|  4.25k|            auto src = read<char>(in, is_valid_var_neq(dst));
  138|  4.25k|            if (can_concat(ts[dst], ts[src])) {
  ------------------
  |  Branch (138:17): [True: 3.71k, False: 539]
  ------------------
  139|  3.71k|                ts[dst].prepend(std::move(ts[src]));
  140|  3.71k|                ts[src] = {};
  141|  3.71k|            }
  142|  4.25k|            break;
  143|      0|        }
  144|  1.87M|        case op_append_mut: {
  ------------------
  |  Branch (144:9): [True: 1.87M, False: 459k]
  ------------------
  145|  1.87M|            auto src = read<char>(in, is_valid_var_neq(dst));
  146|  1.87M|            if (can_concat(ts[dst], ts[src]))
  ------------------
  |  Branch (146:17): [True: 1.85M, False: 18.0k]
  ------------------
  147|  1.85M|                ts[dst].append(ts[src]);
  148|  1.87M|            break;
  149|      0|        }
  150|  6.98k|        case op_append_mut_move: {
  ------------------
  |  Branch (150:9): [True: 6.98k, False: 2.32M]
  ------------------
  151|  6.98k|            auto src = read<char>(in, is_valid_var_neq(dst));
  152|  6.98k|            if (can_concat(ts[dst], ts[src])) {
  ------------------
  |  Branch (152:17): [True: 6.55k, False: 435]
  ------------------
  153|  6.55k|                ts[dst].append(std::move(ts[src]));
  154|  6.55k|                ts[src] = {};
  155|  6.55k|            }
  156|  6.98k|            break;
  157|      0|        }
  158|  26.8k|        default:
  ------------------
  |  Branch (158:9): [True: 26.8k, False: 2.31M]
  ------------------
  159|  26.8k|            break;
  160|  2.33M|        };
  161|  2.32M|        return true;
  162|  2.33M|    });
flex-vector-gc.cpp:_ZZ22LLVMFuzzerTestOneInputENK3$_0clIcEEDaT_:
   39|  2.89M|    auto is_valid_var = [&](auto idx) { return idx >= 0 && idx < var_count; };
  ------------------
  |  Branch (39:48): [True: 2.81M, False: 82.7k]
  |  Branch (39:60): [True: 2.67M, False: 140k]
  ------------------
flex-vector-gc.cpp:_ZZZ22LLVMFuzzerTestOneInputENK3$_2clIN5immer11flex_vectorIiNS1_13memory_policyINS1_11heap_policyINS1_7gc_heapEEENS1_18no_refcount_policyENS1_15spinlock_policyENS1_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEDaRT_ENKUlSC_E_clIhEEDaSC_:
   46|  9.09k|        return [&](auto idx) { return idx >= 0 && idx < v.size(); };
  ------------------
  |  Branch (46:39): [True: 9.09k, False: 0]
  |  Branch (46:51): [True: 5.94k, False: 3.14k]
  ------------------
flex-vector-gc.cpp:_ZZ22LLVMFuzzerTestOneInputENK3$_2clIN5immer11flex_vectorIiNS1_13memory_policyINS1_11heap_policyINS1_7gc_heapEEENS1_18no_refcount_policyENS1_15spinlock_policyENS1_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEDaRT_:
   45|  5.98k|    auto is_valid_index = [](auto& v) {
   46|  5.98k|        return [&](auto idx) { return idx >= 0 && idx < v.size(); };
   47|  5.98k|    };
flex-vector-gc.cpp:_ZZZ22LLVMFuzzerTestOneInputENK3$_5clI12fuzzer_inputEEDaRT_ENKUlS2_E_clIiEEDaS2_:
   94|  5.94k|            vs[dst]  = vs[src].update(idx, [](auto x) { return x + 1; });
flex-vector-gc.cpp:_ZZZ22LLVMFuzzerTestOneInputENK3$_3clIN5immer11flex_vectorIiNS1_13memory_policyINS1_11heap_policyINS1_7gc_heapEEENS1_18no_refcount_policyENS1_15spinlock_policyENS1_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEDaRT_ENKUlSC_E_clIhEEDaSC_:
   49|  42.4k|        return [&](auto idx) { return idx >= 0 && idx <= v.size(); };
  ------------------
  |  Branch (49:39): [True: 42.4k, False: 0]
  |  Branch (49:51): [True: 30.2k, False: 12.1k]
  ------------------
flex-vector-gc.cpp:_ZZ22LLVMFuzzerTestOneInputENK3$_3clIN5immer11flex_vectorIiNS1_13memory_policyINS1_11heap_policyINS1_7gc_heapEEENS1_18no_refcount_policyENS1_15spinlock_policyENS1_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEDaRT_:
   48|  30.3k|    auto is_valid_size = [](auto& v) {
   49|  30.3k|        return [&](auto idx) { return idx >= 0 && idx <= v.size(); };
   50|  30.3k|    };
flex-vector-gc.cpp:_ZZ22LLVMFuzzerTestOneInputENK3$_4clIRN5immer11flex_vectorIiNS1_13memory_policyINS1_11heap_policyINS1_7gc_heapEEENS1_18no_refcount_policyENS1_15spinlock_policyENS1_20gc_transience_policyELb0ELb0EEELj2ELj2EEESC_EEDaOT_OT0_:
   51|  59.3k|    auto can_concat = [](auto&& v1, auto&& v2) {
   52|  59.3k|        return v1.size() + v2.size() < vector_t::max_size();
   53|  59.3k|    };
flex-vector-gc.cpp:_ZZZ22LLVMFuzzerTestOneInputENK3$_2clIN5immer21flex_vector_transientIiNS1_13memory_policyINS1_11heap_policyINS1_7gc_heapEEENS1_18no_refcount_policyENS1_15spinlock_policyENS1_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEDaRT_ENKUlSC_E_clIhEEDaSC_:
   46|  11.5k|        return [&](auto idx) { return idx >= 0 && idx < v.size(); };
  ------------------
  |  Branch (46:39): [True: 11.5k, False: 0]
  |  Branch (46:51): [True: 10.4k, False: 1.07k]
  ------------------
flex-vector-gc.cpp:_ZZ22LLVMFuzzerTestOneInputENK3$_2clIN5immer21flex_vector_transientIiNS1_13memory_policyINS1_11heap_policyINS1_7gc_heapEEENS1_18no_refcount_policyENS1_15spinlock_policyENS1_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEDaRT_:
   45|  10.4k|    auto is_valid_index = [](auto& v) {
   46|  10.4k|        return [&](auto idx) { return idx >= 0 && idx < v.size(); };
   47|  10.4k|    };
flex-vector-gc.cpp:_ZZZ22LLVMFuzzerTestOneInputENK3$_5clI12fuzzer_inputEEDaRT_ENKUlS2_E0_clIiEEDaS2_:
  122|  10.4k|            ts[dst].update(idx, [](auto x) { return x + 1; });
flex-vector-gc.cpp:_ZZZ22LLVMFuzzerTestOneInputENK3$_3clIN5immer21flex_vector_transientIiNS1_13memory_policyINS1_11heap_policyINS1_7gc_heapEEENS1_18no_refcount_policyENS1_15spinlock_policyENS1_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEDaRT_ENKUlSC_E_clIhEEDaSC_:
   49|  38.9k|        return [&](auto idx) { return idx >= 0 && idx <= v.size(); };
  ------------------
  |  Branch (49:39): [True: 38.9k, False: 0]
  |  Branch (49:51): [True: 37.4k, False: 1.47k]
  ------------------
flex-vector-gc.cpp:_ZZ22LLVMFuzzerTestOneInputENK3$_3clIN5immer21flex_vector_transientIiNS1_13memory_policyINS1_11heap_policyINS1_7gc_heapEEENS1_18no_refcount_policyENS1_15spinlock_policyENS1_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEDaRT_:
   48|  37.5k|    auto is_valid_size = [](auto& v) {
   49|  37.5k|        return [&](auto idx) { return idx >= 0 && idx <= v.size(); };
   50|  37.5k|    };
flex-vector-gc.cpp:_ZZZ22LLVMFuzzerTestOneInputENK3$_1clIcEEDaT_ENKUlS1_E_clIcEEDaS1_:
   41|  1.97M|        return [=](auto idx) {
   42|  1.97M|            return idx >= 0 && idx < var_count && idx != other;
  ------------------
  |  Branch (42:20): [True: 1.96M, False: 11.8k]
  |  Branch (42:32): [True: 1.93M, False: 25.0k]
  |  Branch (42:51): [True: 1.92M, False: 12.5k]
  ------------------
   43|  1.97M|        };
flex-vector-gc.cpp:_ZZ22LLVMFuzzerTestOneInputENK3$_1clIcEEDaT_:
   40|  1.92M|    auto is_valid_var_neq = [](auto other) {
   41|  1.92M|        return [=](auto idx) {
   42|  1.92M|            return idx >= 0 && idx < var_count && idx != other;
   43|  1.92M|        };
   44|  1.92M|    };
flex-vector-gc.cpp:_ZZ22LLVMFuzzerTestOneInputENK3$_4clIRN5immer21flex_vector_transientIiNS1_13memory_policyINS1_11heap_policyINS1_7gc_heapEEENS1_18no_refcount_policyENS1_15spinlock_policyENS1_20gc_transience_policyELb0ELb0EEELj2ELj2EEESC_EEDaOT_OT0_:
   51|  1.92M|    auto can_concat = [](auto&& v1, auto&& v2) {
   52|  1.92M|        return v1.size() + v2.size() < vector_t::max_size();
   53|  1.92M|    };

flex-vector-gc.cpp:_ZN12fuzzer_input3runIZ22LLVMFuzzerTestOneInputE3$_5EEiT_:
   50|  8.01k|    {
   51|  8.01k|        if (size_ > fuzzer_input_max_size)
  ------------------
  |  Branch (51:13): [True: 12, False: 8.00k]
  ------------------
   52|     12|            return 0;
   53|  8.00k|        try {
   54|  2.33M|            while (step(*this))
  ------------------
  |  Branch (54:20): [True: 2.32M, False: 8.00k]
  ------------------
   55|  2.32M|                continue;
   56|  8.00k|        } catch (const no_more_input&) {
   57|  8.00k|        };
   58|  8.00k|        return 0;
   59|  8.00k|    }
flex-vector-gc.cpp:_Z4readIcZ22LLVMFuzzerTestOneInputE3$_0ET_R12fuzzer_inputT0_:
   70|  2.67M|{
   71|  2.67M|    auto x = read<T>(fz);
   72|  2.90M|    while (!cond(x))
  ------------------
  |  Branch (72:12): [True: 223k, False: 2.67M]
  ------------------
   73|   223k|        x = read<T>(fz);
   74|  2.67M|    return x;
   75|  2.67M|}
_Z4readIcERKT_R12fuzzer_input:
   64|  7.20M|{
   65|  7.20M|    return *reinterpret_cast<const T*>(fz.next(sizeof(T), alignof(T)));
   66|  7.20M|}
_ZN12fuzzer_input4nextEmm:
   40|  7.30M|    {
   41|  7.30M|        auto& p = const_cast<void*&>(reinterpret_cast<const void*&>(data_));
   42|  7.30M|        auto r  = std::align(align, size, p, size_);
   43|  7.30M|        if (r == nullptr)
  ------------------
  |  Branch (43:13): [True: 8.00k, False: 7.29M]
  ------------------
   44|  8.00k|            throw no_more_input{};
   45|  7.29M|        return next(size);
   46|  7.30M|    }
_ZN12fuzzer_input4nextEm:
   30|  7.29M|    {
   31|  7.29M|        if (size_ < size)
  ------------------
  |  Branch (31:13): [True: 0, False: 7.29M]
  ------------------
   32|      0|            throw no_more_input{};
   33|  7.29M|        auto r = data_;
   34|  7.29M|        data_ += size;
   35|  7.29M|        size_ -= size;
   36|  7.29M|        return r;
   37|  7.29M|    }
flex-vector-gc.cpp:_Z4readIhZZ22LLVMFuzzerTestOneInputENK3$_2clIN5immer11flex_vectorIiNS2_13memory_policyINS2_11heap_policyINS2_7gc_heapEEENS2_18no_refcount_policyENS2_15spinlock_policyENS2_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEDaRT_EUlSD_E_ESD_R12fuzzer_inputT0_:
   70|  5.98k|{
   71|  5.98k|    auto x = read<T>(fz);
   72|  9.13k|    while (!cond(x))
  ------------------
  |  Branch (72:12): [True: 3.14k, False: 5.98k]
  ------------------
   73|  3.14k|        x = read<T>(fz);
   74|  5.98k|    return x;
   75|  5.98k|}
_Z4readIhERKT_R12fuzzer_input:
   64|   102k|{
   65|   102k|    return *reinterpret_cast<const T*>(fz.next(sizeof(T), alignof(T)));
   66|   102k|}
flex-vector-gc.cpp:_Z4readIhZZ22LLVMFuzzerTestOneInputENK3$_3clIN5immer11flex_vectorIiNS2_13memory_policyINS2_11heap_policyINS2_7gc_heapEEENS2_18no_refcount_policyENS2_15spinlock_policyENS2_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEDaRT_EUlSD_E_ESD_R12fuzzer_inputT0_:
   70|  30.3k|{
   71|  30.3k|    auto x = read<T>(fz);
   72|  42.5k|    while (!cond(x))
  ------------------
  |  Branch (72:12): [True: 12.1k, False: 30.3k]
  ------------------
   73|  12.1k|        x = read<T>(fz);
   74|  30.3k|    return x;
   75|  30.3k|}
flex-vector-gc.cpp:_Z4readIhZZ22LLVMFuzzerTestOneInputENK3$_2clIN5immer21flex_vector_transientIiNS2_13memory_policyINS2_11heap_policyINS2_7gc_heapEEENS2_18no_refcount_policyENS2_15spinlock_policyENS2_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEDaRT_EUlSD_E_ESD_R12fuzzer_inputT0_:
   70|  10.4k|{
   71|  10.4k|    auto x = read<T>(fz);
   72|  11.5k|    while (!cond(x))
  ------------------
  |  Branch (72:12): [True: 1.07k, False: 10.4k]
  ------------------
   73|  1.07k|        x = read<T>(fz);
   74|  10.4k|    return x;
   75|  10.4k|}
flex-vector-gc.cpp:_Z4readIhZZ22LLVMFuzzerTestOneInputENK3$_3clIN5immer21flex_vector_transientIiNS2_13memory_policyINS2_11heap_policyINS2_7gc_heapEEENS2_18no_refcount_policyENS2_15spinlock_policyENS2_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEDaRT_EUlSD_E_ESD_R12fuzzer_inputT0_:
   70|  37.5k|{
   71|  37.5k|    auto x = read<T>(fz);
   72|  38.9k|    while (!cond(x))
  ------------------
  |  Branch (72:12): [True: 1.47k, False: 37.5k]
  ------------------
   73|  1.47k|        x = read<T>(fz);
   74|  37.5k|    return x;
   75|  37.5k|}
flex-vector-gc.cpp:_Z4readIcZZ22LLVMFuzzerTestOneInputENK3$_1clIcEEDaT_EUlS2_E_ES2_R12fuzzer_inputT0_:
   70|  1.92M|{
   71|  1.92M|    auto x = read<T>(fz);
   72|  1.97M|    while (!cond(x))
  ------------------
  |  Branch (72:12): [True: 49.3k, False: 1.92M]
  ------------------
   73|  49.3k|        x = read<T>(fz);
   74|  1.92M|    return x;
   75|  1.92M|}

_ZN5immer6detail3csl3getINS_18no_refcount_policyEEEDcRKNS1_10member_twoINS0_4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEES3_NS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE11impl_data_tENS1_7inheritIS3_NS1_6memberINSC_5applyISA_E4type5owneeEvE4typeEE4typeEE4typeE:
  170|  21.0M|        {
  171|  21.0M|            return x.get_(type_t<U>{});
  172|  21.0M|        }
_ZNK5immer6detail3csl10member_twoINS0_4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE11impl_data_tENS1_7inheritIS9_NS1_6memberINSB_5applyIS8_E4type5owneeEvE4typeEE4typeEE4type4get_IS9_EEDcNS1_6type_tIT_EE:
  184|  21.0M|        {
  185|  21.0M|            return n.get_(t);
  186|  21.0M|        }
_ZNK5immer6detail3csl7inheritINS_18no_refcount_policyENS1_6memberINS_20gc_transience_policy5applyINS_11heap_policyINS_7gc_heapEEEE4type5owneeEvE4typeEE4type4get_ENS1_6type_tIS3_EE:
   82|  22.6M|        const T& get_(type_t<T>) const { return *this; }
_ZN5immer6detail3csl3getINS_18no_refcount_policyEEEDcRKNS1_10member_twoINS0_4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEES3_NS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE14relaxed_data_tENS1_7inheritIS3_NS1_6memberINSC_5applyISA_E4type5owneeEvE4typeEE4typeEE4typeE:
  170|  1.61M|        {
  171|  1.61M|            return x.get_(type_t<U>{});
  172|  1.61M|        }
_ZNK5immer6detail3csl10member_twoINS0_4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE14relaxed_data_tENS1_7inheritIS9_NS1_6memberINSB_5applyIS8_E4type5owneeEvE4typeEE4typeEE4type4get_IS9_EEDcNS1_6type_tIT_EE:
  184|  1.61M|        {
  185|  1.61M|            return n.get_(t);
  186|  1.61M|        }
_ZN5immer6detail3csl3getINS_20gc_transience_policy5applyINS_11heap_policyINS_7gc_heapEEEE4type5owneeEEEDcRNS1_10member_twoINS0_4rbts4nodeIiNS_13memory_policyIS7_NS_18no_refcount_policyENS_15spinlock_policyES3_Lb0ELb0EEELj2ELj2EE14relaxed_data_tENS1_7inheritISF_NS1_6memberISA_vE4typeEE4typeEE4typeE:
  165|  3.01M|        {
  166|  3.01M|            return x.get_(type_t<U>{});
  167|  3.01M|        }
_ZN5immer6detail3csl10member_twoINS0_4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE14relaxed_data_tENS1_7inheritIS9_NS1_6memberINSB_5applyIS8_E4type5owneeEvE4typeEE4typeEE4type4get_ISK_EEDcNS1_6type_tIT_EE:
  179|  3.01M|        {
  180|  3.01M|            return n.get_(t);
  181|  3.01M|        }
_ZN5immer6detail3csl6memberINS_20gc_transience_policy5applyINS_11heap_policyINS_7gc_heapEEEE4type5owneeEvE4type4get_ENS1_6type_tISA_EE:
  150|  5.89M|        T& get_(type_t<T>) { return d; }
_ZN5immer6detail3csl3getINS_20gc_transience_policy5applyINS_11heap_policyINS_7gc_heapEEEE4type5owneeEEEDcRNS1_10member_twoINS0_4rbts4nodeIiNS_13memory_policyIS7_NS_18no_refcount_policyENS_15spinlock_policyES3_Lb0ELb0EEELj2ELj2EE11impl_data_tENS1_7inheritISF_NS1_6memberISA_vE4typeEE4typeEE4typeE:
  165|  2.87M|        {
  166|  2.87M|            return x.get_(type_t<U>{});
  167|  2.87M|        }
_ZN5immer6detail3csl10member_twoINS0_4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE11impl_data_tENS1_7inheritIS9_NS1_6memberINSB_5applyIS8_E4type5owneeEvE4typeEE4typeEE4type4get_ISK_EEDcNS1_6type_tIT_EE:
  179|  2.87M|        {
  180|  2.87M|            return n.get_(t);
  181|  2.87M|        }
_ZN5immer6detail3csl3getINS_20gc_transience_policy5applyINS_11heap_policyINS_7gc_heapEEEE4type5owneeEEEDcRKNS1_10member_twoINS0_4rbts4nodeIiNS_13memory_policyIS7_NS_18no_refcount_policyENS_15spinlock_policyES3_Lb0ELb0EEELj2ELj2EE11impl_data_tENS1_7inheritISF_NS1_6memberISA_vE4typeEE4typeEE4typeE:
  170|  14.9M|        {
  171|  14.9M|            return x.get_(type_t<U>{});
  172|  14.9M|        }
_ZNK5immer6detail3csl10member_twoINS0_4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE11impl_data_tENS1_7inheritIS9_NS1_6memberINSB_5applyIS8_E4type5owneeEvE4typeEE4typeEE4type4get_ISK_EEDcNS1_6type_tIT_EE:
  184|  14.9M|        {
  185|  14.9M|            return n.get_(t);
  186|  14.9M|        }
_ZNK5immer6detail3csl6memberINS_20gc_transience_policy5applyINS_11heap_policyINS_7gc_heapEEEE4type5owneeEvE4type4get_ENS1_6type_tISA_EE:
  151|  14.9M|        const T& get_(type_t<T>) const { return d; }

_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE17make_inner_n_intoEPvmj:
  213|  63.4k|    {
  214|  63.4k|        assert(n <= branches<B>);
  ------------------
  |  Branch (214:9): [True: 63.4k, False: 0]
  ------------------
  215|  63.4k|        assert(size >= sizeof_inner_n(n));
  ------------------
  |  Branch (215:9): [True: 63.4k, False: 0]
  ------------------
  216|  63.4k|        auto p                       = new (buffer) node_t;
  217|  63.4k|        p->impl.d.data.inner.relaxed = nullptr;
  218|  63.4k|#if IMMER_TAGGED_NODE
  219|  63.4k|        p->impl.d.kind = node_t::kind_t::inner;
  220|  63.4k|#endif
  221|  63.4k|        return p;
  222|  63.4k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE14sizeof_inner_nEj:
  145|   190k|    {
  146|   190k|        return keep_headroom ? max_sizeof_inner : sizeof_packed_inner_n(n);
  ------------------
  |  Branch (146:16): [Folded, False: 190k]
  ------------------
  147|   190k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE21sizeof_packed_inner_nEj:
  114|   868k|    {
  115|       |        return immer_offsetof(impl_t, d.data.inner) +
  ------------------
  |  |   19|   868k|#define immer_offsetof offsetof
  ------------------
  116|   868k|               inner_t::get_storage_offset() +
  117|   868k|               sizeof(typename inner_t::storage_type) * count;
  118|   868k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE3incEv:
  956|  3.43M|    {
  957|  3.43M|        refs(this).inc();
  958|  3.43M|        return this;
  959|  3.43M|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE4refsEPKSB_:
  203|  21.0M|    {
  204|  21.0M|        return auto_const_cast(get<refs_t>(x->impl));
  205|  21.0M|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE16make_leaf_n_intoEPvmj:
  330|   109k|    {
  331|   109k|        assert(n <= branches<BL>);
  ------------------
  |  Branch (331:9): [True: 109k, False: 0]
  ------------------
  332|   109k|        assert(size >= sizeof_leaf_n(n));
  ------------------
  |  Branch (332:9): [True: 109k, False: 0]
  ------------------
  333|   109k|        auto p = new (buffer) node_t;
  334|   109k|#if IMMER_TAGGED_NODE
  335|   109k|        p->impl.d.kind = node_t::kind_t::leaf;
  336|   109k|#endif
  337|   109k|        return p;
  338|   109k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE13sizeof_leaf_nEj:
  160|   328k|    {
  161|   328k|        return keep_headroom ? max_sizeof_leaf : sizeof_packed_leaf_n(n);
  ------------------
  |  Branch (161:16): [Folded, False: 328k]
  ------------------
  162|   328k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE20sizeof_packed_leaf_nEj:
  107|   328k|    {
  108|       |        return immer_offsetof(impl_t, d.data.leaf) +
  ------------------
  |  |   19|   328k|#define immer_offsetof offsetof
  ------------------
  109|   328k|               leaf_t::get_storage_offset() +
  110|   328k|               sizeof(typename leaf_t::storage_type) * count;
  111|   328k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE7relaxedEv:
  172|  30.4M|    {
  173|  30.4M|        IMMER_ASSERT_TAGGED(kind() == kind_t::inner);
  ------------------
  |  |   68|  30.4M|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (173:9): [True: 30.4M, False: 0]
  ------------------
  174|  30.4M|        return impl.d.data.inner.relaxed;
  175|  30.4M|    }
_ZNK5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE4kindEv:
  168|  82.0M|    kind_t kind() const { return impl.d.kind; }
_ZNK5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE3decEv:
  967|  2.03M|    bool dec() const { return refs(this).dec(); }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE5innerEv:
  184|  37.0M|    {
  185|  37.0M|        IMMER_ASSERT_TAGGED(kind() == kind_t::inner);
  ------------------
  |  |   68|  37.0M|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (185:9): [True: 37.0M, False: 0]
  ------------------
  186|  37.0M|        return impl.d.data.inner.get_storage_ptr();
  187|  37.0M|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE4refsEPKNS0_3csl10member_twoINSB_14relaxed_data_tENSC_7inheritIS7_NSC_6memberINS9_5applyIS6_E4type5owneeEvE4typeEE4typeEE4typeE:
  196|  1.61M|    {
  197|  1.61M|        return auto_const_cast(get<refs_t>(*x));
  198|  1.61M|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE5owneeEPNS0_3csl10member_twoINSB_14relaxed_data_tENSC_7inheritIS7_NSC_6memberINS9_5applyIS6_E4type5owneeEvE4typeEE4typeEE4typeE:
  200|  3.01M|    static ownee_t& ownee(relaxed_t* x) { return get<ownee_t>(*x); }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE16sizeof_relaxed_nEj:
  155|   649k|    {
  156|   649k|        return keep_headroom ? max_sizeof_relaxed : sizeof_packed_relaxed_n(n);
  ------------------
  |  Branch (156:16): [Folded, False: 649k]
  ------------------
  157|   649k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE23sizeof_packed_relaxed_nEj:
  121|   649k|    {
  122|       |        return immer_offsetof(relaxed_t, d.sizes) + sizeof(size_t) * count;
  ------------------
  |  |   19|   649k|#define immer_offsetof offsetof
  ------------------
  123|   649k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE5owneeEPSB_:
  210|  2.87M|    static ownee_t& ownee(node_t* x) { return get<ownee_t>(x->impl); }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE16sizeof_inner_r_nEj:
  150|   677k|    {
  151|   677k|        return keep_headroom ? max_sizeof_inner_r : sizeof_packed_inner_r_n(n);
  ------------------
  |  Branch (151:16): [Folded, False: 677k]
  ------------------
  152|   677k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE23sizeof_packed_inner_r_nEj:
  126|   677k|    {
  127|   677k|        return embed_relaxed ? sizeof_packed_inner_n(count) +
  ------------------
  |  Branch (127:16): [Folded, False: 677k]
  ------------------
  128|      0|                                   sizeof_packed_relaxed_n(count)
  129|   677k|                             : sizeof_packed_inner_n(count);
  130|   677k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE4leafEv:
  190|  8.67M|    {
  191|  8.67M|        IMMER_ASSERT_TAGGED(kind() == kind_t::leaf);
  ------------------
  |  |   68|  8.67M|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (191:9): [True: 8.67M, False: 0]
  ------------------
  192|  8.67M|        return impl.d.data.leaf.get_storage_ptr();
  193|  8.67M|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE17copy_leaf_emplaceIiEEPSB_SD_jOT_:
  794|  41.0k|    {
  795|  41.0k|        auto dst = copy_leaf_n(n + 1, src, n);
  796|  41.0k|        IMMER_TRY {
  ------------------
  |  |   49|  41.0k|#define IMMER_TRY try
  ------------------
  797|  41.0k|            new (dst->leaf() + n) T(std::forward<U>(x));
  798|  41.0k|        }
  799|  41.0k|        IMMER_CATCH (...) {
  800|      0|            detail::destroy_n(dst->leaf(), n);
  801|      0|            heap::deallocate(node_t::sizeof_leaf_n(n + 1), dst);
  802|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  803|      0|        }
  804|  41.0k|        return dst;
  805|  41.0k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE11copy_leaf_nEjPSB_j:
  696|  41.0k|    {
  697|  41.0k|        assert(allocn >= n);
  ------------------
  |  Branch (697:9): [True: 41.0k, False: 0]
  ------------------
  698|  41.0k|        IMMER_ASSERT_TAGGED(src->kind() == kind_t::leaf);
  ------------------
  |  |   68|  41.0k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (698:9): [True: 41.0k, False: 0]
  ------------------
  699|  41.0k|        auto dst = make_leaf_n(allocn);
  700|  41.0k|        IMMER_TRY {
  ------------------
  |  |   49|  41.0k|#define IMMER_TRY try
  ------------------
  701|  41.0k|            detail::uninitialized_copy(
  702|  41.0k|                src->leaf(), src->leaf() + n, dst->leaf());
  703|  41.0k|        }
  704|  41.0k|        IMMER_CATCH (...) {
  705|      0|            heap::deallocate(node_t::sizeof_leaf_n(allocn), dst);
  706|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  707|      0|        }
  708|  41.0k|        return dst;
  709|  41.0k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE11make_leaf_nEj:
  341|   109k|    {
  342|   109k|        assert(n <= branches<BL>);
  ------------------
  |  Branch (342:9): [True: 109k, False: 0]
  ------------------
  343|   109k|        auto m = heap::allocate(sizeof_leaf_n(n));
  344|   109k|        return make_leaf_n_into(m, sizeof_leaf_n(n), n);
  345|   109k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE11make_leaf_nIiEEPSB_jOT_:
  470|  14.1k|    {
  471|  14.1k|        assert(n >= 1);
  ------------------
  |  Branch (471:9): [True: 14.1k, False: 0]
  ------------------
  472|  14.1k|        auto p = make_leaf_n(n);
  473|  14.1k|        IMMER_TRY {
  ------------------
  |  |   49|  14.1k|#define IMMER_TRY try
  ------------------
  474|  14.1k|            new (p->leaf()) T(std::forward<U>(x));
  475|  14.1k|        }
  476|  14.1k|        IMMER_CATCH (...) {
  477|      0|            heap::deallocate(node_t::sizeof_leaf_n(n), p);
  478|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  479|      0|        }
  480|  14.1k|        return p;
  481|  14.1k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE13do_copy_innerEPSB_SC_j:
  558|  82.2k|    {
  559|  82.2k|        IMMER_ASSERT_TAGGED(dst->kind() == kind_t::inner);
  ------------------
  |  |   68|  82.2k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (559:9): [True: 82.2k, False: 0]
  ------------------
  560|  82.2k|        IMMER_ASSERT_TAGGED(src->kind() == kind_t::inner);
  ------------------
  |  |   68|  82.2k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (560:9): [True: 82.2k, False: 0]
  ------------------
  561|  82.2k|        auto p = src->inner();
  562|  82.2k|        inc_nodes(p, n);
  563|  82.2k|        std::copy(p, p + n, dst->inner());
  564|  82.2k|        return dst;
  565|  82.2k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE9inc_nodesEPPSB_j:
  970|   368k|    {
  971|   960k|        for (auto i = p, e = i + n; i != e; ++i)
  ------------------
  |  Branch (971:37): [True: 592k, False: 368k]
  ------------------
  972|   592k|            refs(*i).inc();
  973|   368k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE14copy_inner_r_nEjPSB_j:
  588|  39.7k|    {
  589|  39.7k|        assert(allocn >= n);
  ------------------
  |  Branch (589:9): [True: 39.7k, False: 0]
  ------------------
  590|  39.7k|        IMMER_ASSERT_TAGGED(src->kind() == kind_t::inner);
  ------------------
  |  |   68|  39.7k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (590:9): [True: 39.7k, False: 0]
  ------------------
  591|  39.7k|        auto dst = make_inner_r_n(allocn);
  592|  39.7k|        return do_copy_inner_r(dst, src, n);
  593|  39.7k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE15do_copy_inner_rEPSB_SC_j:
  610|  74.8k|    {
  611|  74.8k|        IMMER_ASSERT_TAGGED(dst->kind() == kind_t::inner);
  ------------------
  |  |   68|  74.8k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (611:9): [True: 74.8k, False: 0]
  ------------------
  612|  74.8k|        IMMER_ASSERT_TAGGED(src->kind() == kind_t::inner);
  ------------------
  |  |   68|  74.8k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (612:9): [True: 74.8k, False: 0]
  ------------------
  613|  74.8k|        auto src_r = src->relaxed();
  614|  74.8k|        auto dst_r = dst->relaxed();
  615|  74.8k|        inc_nodes(src->inner(), n);
  616|  74.8k|        std::copy(src->inner(), src->inner() + n, dst->inner());
  617|  74.8k|        std::copy(src_r->d.sizes, src_r->d.sizes + n, dst_r->d.sizes);
  618|  74.8k|        dst_r->d.count = n;
  619|  74.8k|        return dst;
  620|  74.8k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE14make_inner_r_nEj:
  243|   649k|    {
  244|   649k|        assert(n <= branches<B>);
  ------------------
  |  Branch (244:9): [True: 649k, False: 0]
  ------------------
  245|   649k|        auto mp = heap::allocate(sizeof_inner_r_n(n));
  246|   649k|        auto mr = static_cast<void*>(nullptr);
  247|   649k|        if (embed_relaxed) {
  ------------------
  |  Branch (247:13): [Folded, False: 649k]
  ------------------
  248|      0|            mr = reinterpret_cast<unsigned char*>(mp) + sizeof_inner_n(n);
  249|   649k|        } else {
  250|   649k|            IMMER_TRY {
  ------------------
  |  |   49|   649k|#define IMMER_TRY try
  ------------------
  251|   649k|                mr = heap::allocate(sizeof_relaxed_n(n), norefs_tag{});
  252|   649k|            }
  253|   649k|            IMMER_CATCH (...) {
  254|      0|                heap::deallocate(sizeof_inner_r_n(n), mp);
  255|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  256|      0|            }
  257|   649k|        }
  258|   649k|        auto p                       = new (mp) node_t;
  259|   649k|        auto r                       = new (mr) relaxed_t;
  260|   649k|        r->d.count                   = 0;
  261|   649k|        p->impl.d.data.inner.relaxed = r;
  262|   649k|#if IMMER_TAGGED_NODE
  263|   649k|        p->impl.d.kind = node_t::kind_t::inner;
  264|   649k|#endif
  265|   649k|        return p;
  266|   649k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE9make_pathEjPSB_:
  498|  35.1k|    {
  499|  35.1k|        IMMER_ASSERT_TAGGED(node->kind() == kind_t::leaf);
  ------------------
  |  |   68|  35.1k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (499:9): [True: 35.1k, False: 0]
  ------------------
  500|  35.1k|        if (shift == endshift<B, BL>)
  ------------------
  |  Branch (500:13): [True: 22.0k, False: 13.0k]
  ------------------
  501|  22.0k|            return node;
  502|  13.0k|        else {
  503|  13.0k|            auto n = node_t::make_inner_n(1);
  504|  13.0k|            IMMER_TRY {
  ------------------
  |  |   49|  13.0k|#define IMMER_TRY try
  ------------------
  505|  13.0k|                n->inner()[0] = make_path(shift - B, node);
  506|  13.0k|            }
  507|  13.0k|            IMMER_CATCH (...) {
  508|      0|                heap::deallocate(node_t::sizeof_inner_n(1), n);
  509|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  510|      0|            }
  511|  13.0k|            return n;
  512|  13.0k|        }
  513|  35.1k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE12make_inner_nEj:
  224|  63.4k|    {
  225|  63.4k|        assert(n <= branches<B>);
  ------------------
  |  Branch (225:9): [True: 63.4k, False: 0]
  ------------------
  226|  63.4k|        auto m = heap::allocate(sizeof_inner_n(n));
  227|  63.4k|        return make_inner_n_into(m, sizeof_inner_n(n), n);
  228|  63.4k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE9copy_leafEPSB_j:
  666|  12.3k|    {
  667|  12.3k|        IMMER_ASSERT_TAGGED(src->kind() == kind_t::leaf);
  ------------------
  |  |   68|  12.3k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (667:9): [True: 12.3k, False: 0]
  ------------------
  668|  12.3k|        auto dst = make_leaf_n(n);
  669|  12.3k|        IMMER_TRY {
  ------------------
  |  |   49|  12.3k|#define IMMER_TRY try
  ------------------
  670|  12.3k|            detail::uninitialized_copy(
  671|  12.3k|                src->leaf(), src->leaf() + n, dst->leaf());
  672|  12.3k|        }
  673|  12.3k|        IMMER_CATCH (...) {
  674|      0|            heap::deallocate(node_t::sizeof_leaf_n(n), dst);
  675|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  676|      0|        }
  677|  12.3k|        return dst;
  678|  12.3k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE15make_inner_sr_nEjPNS0_3csl10member_twoINSB_14relaxed_data_tENSC_7inheritIS7_NSC_6memberINS9_5applyIS6_E4type5owneeEvE4typeEE4typeEE4typeE:
  269|  28.0k|    {
  270|  28.0k|        return static_if<embed_relaxed, node_t*>(
  271|  28.0k|            [&](auto) { return node_t::make_inner_r_n(n); },
  272|  28.0k|            [&](auto) {
  273|  28.0k|                auto p =
  274|  28.0k|                    new (heap::allocate(node_t::sizeof_inner_r_n(n))) node_t;
  275|  28.0k|                assert(r->d.count >= n);
  276|  28.0k|                node_t::refs(r).inc();
  277|  28.0k|                p->impl.d.data.inner.relaxed = r;
  278|  28.0k|#if IMMER_TAGGED_NODE
  279|  28.0k|                p->impl.d.kind = node_t::kind_t::inner;
  280|  28.0k|#endif
  281|  28.0k|                return p;
  282|  28.0k|            });
  283|  28.0k|    }
_ZZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE15make_inner_sr_nEjPNS0_3csl10member_twoINSB_14relaxed_data_tENSC_7inheritIS7_NSC_6memberINS9_5applyIS6_E4type5owneeEvE4typeEE4typeEE4typeEENKUlT_E0_clINS0_7empty_tEEEDaSS_:
  272|  28.0k|            [&](auto) {
  273|  28.0k|                auto p =
  274|  28.0k|                    new (heap::allocate(node_t::sizeof_inner_r_n(n))) node_t;
  275|  28.0k|                assert(r->d.count >= n);
  ------------------
  |  Branch (275:17): [True: 28.0k, False: 0]
  ------------------
  276|  28.0k|                node_t::refs(r).inc();
  277|  28.0k|                p->impl.d.data.inner.relaxed = r;
  278|  28.0k|#if IMMER_TAGGED_NODE
  279|  28.0k|                p->impl.d.kind = node_t::kind_t::inner;
  280|  28.0k|#endif
  281|  28.0k|                return p;
  282|  28.0k|            });
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE24do_copy_inner_replace_srEPSB_SC_jjSC_:
  652|  28.0k|    {
  653|  28.0k|        if (embed_relaxed)
  ------------------
  |  Branch (653:13): [Folded, False: 28.0k]
  ------------------
  654|      0|            return do_copy_inner_replace_r(dst, src, n, offset, child);
  655|  28.0k|        else {
  656|  28.0k|            auto p = src->inner();
  657|  28.0k|            inc_nodes(p, offset);
  658|  28.0k|            inc_nodes(p + offset + 1, n - offset - 1);
  659|  28.0k|            std::copy(p, p + n, dst->inner());
  660|  28.0k|            dst->inner()[offset] = child;
  661|  28.0k|            return dst;
  662|  28.0k|        }
  663|  28.0k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE21do_copy_inner_replaceEPSB_SC_jjSC_:
  569|  4.72k|    {
  570|  4.72k|        IMMER_ASSERT_TAGGED(dst->kind() == kind_t::inner);
  ------------------
  |  |   68|  4.72k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (570:9): [True: 4.72k, False: 0]
  ------------------
  571|  4.72k|        IMMER_ASSERT_TAGGED(src->kind() == kind_t::inner);
  ------------------
  |  |   68|  4.72k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (571:9): [True: 4.72k, False: 0]
  ------------------
  572|  4.72k|        auto p = src->inner();
  573|  4.72k|        inc_nodes(p, offset);
  574|  4.72k|        inc_nodes(p + offset + 1, n - offset - 1);
  575|  4.72k|        std::copy(p, p + n, dst->inner());
  576|  4.72k|        dst->inner()[offset] = child;
  577|  4.72k|        return dst;
  578|  4.72k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE12copy_inner_nEjPSB_j:
  543|  5.66k|    {
  544|  5.66k|        assert(allocn >= n);
  ------------------
  |  Branch (544:9): [True: 5.66k, False: 0]
  ------------------
  545|  5.66k|        IMMER_ASSERT_TAGGED(src->kind() == kind_t::inner);
  ------------------
  |  |   68|  5.66k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (545:9): [True: 5.66k, False: 0]
  ------------------
  546|  5.66k|        auto dst = make_inner_n(allocn);
  547|  5.66k|        return do_copy_inner(dst, src, n);
  548|  5.66k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE12copy_inner_rEPSB_j:
  581|  1.83k|    {
  582|  1.83k|        IMMER_ASSERT_TAGGED(src->kind() == kind_t::inner);
  ------------------
  |  |   68|  1.83k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (582:9): [True: 1.83k, False: 0]
  ------------------
  583|  1.83k|        auto dst = make_inner_r_n(n);
  584|  1.83k|        return do_copy_inner_r(dst, src, n);
  585|  1.83k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE13compute_shiftEv:
  977|  1.48M|    {
  978|  1.48M|        if (kind() == kind_t::leaf)
  ------------------
  |  Branch (978:13): [True: 175k, False: 1.30M]
  ------------------
  979|   175k|            return endshift<B, BL>;
  980|  1.30M|        else
  981|  1.30M|            return B + inner()[0]->compute_shift();
  982|  1.48M|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE5checkEjm:
  986|  60.0k|    {
  987|       |#if IMMER_DEBUG_DEEP_CHECK
  988|       |        assert(size > 0);
  989|       |        if (shift == endshift<B, BL>) {
  990|       |            IMMER_ASSERT_TAGGED(kind() == kind_t::leaf);
  991|       |            assert(size <= branches<BL>);
  992|       |        } else if (auto r = relaxed()) {
  993|       |            auto count = r->d.count;
  994|       |            assert(count > 0);
  995|       |            assert(count <= branches<B>);
  996|       |            if (r->d.sizes[count - 1] != size) {
  997|       |                IMMER_TRACE_F("check");
  998|       |                IMMER_TRACE_E(r->d.sizes[count - 1]);
  999|       |                IMMER_TRACE_E(size);
 1000|       |            }
 1001|       |            assert(r->d.sizes[count - 1] == size);
 1002|       |            for (auto i = 1u; i < count; ++i)
 1003|       |                assert(r->d.sizes[i - 1] < r->d.sizes[i]);
 1004|       |            auto last_size = size_t{};
 1005|       |            for (auto i = 0u; i < count; ++i) {
 1006|       |                assert(inner()[i]->check(shift - B, r->d.sizes[i] - last_size));
 1007|       |                last_size = r->d.sizes[i];
 1008|       |            }
 1009|       |        } else {
 1010|       |            assert(size <= branches<B> << shift);
 1011|       |            auto count =
 1012|       |                (size >> shift) + (size - ((size >> shift) << shift) > 0);
 1013|       |            assert(count <= branches<B>);
 1014|       |            if (count) {
 1015|       |                for (auto i = 1u; i < count - 1; ++i)
 1016|       |                    assert(inner()[i]->check(shift - B, 1 << shift));
 1017|       |                assert(inner()[count - 1]->check(
 1018|       |                    shift - B, size - ((count - 1) << shift)));
 1019|       |            }
 1020|       |        }
 1021|       |#endif // IMMER_DEBUG_DEEP_CHECK
 1022|  60.0k|        return true;
 1023|  60.0k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE9copy_leafEPSB_jj:
  778|  17.4k|    {
  779|  17.4k|        IMMER_ASSERT_TAGGED(src->kind() == kind_t::leaf);
  ------------------
  |  |   68|  17.4k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (779:9): [True: 17.4k, False: 0]
  ------------------
  780|  17.4k|        auto dst = make_leaf_n(last - idx);
  781|  17.4k|        IMMER_TRY {
  ------------------
  |  |   49|  17.4k|#define IMMER_TRY try
  ------------------
  782|  17.4k|            detail::uninitialized_copy(
  783|  17.4k|                src->leaf() + idx, src->leaf() + last, dst->leaf());
  784|  17.4k|        }
  785|  17.4k|        IMMER_CATCH (...) {
  786|      0|            heap::deallocate(node_t::sizeof_leaf_n(last - idx), dst);
  787|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  788|      0|        }
  789|  17.4k|        return dst;
  790|  17.4k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE9copy_leafEPSB_jSC_j:
  712|  7.48k|    {
  713|  7.48k|        IMMER_ASSERT_TAGGED(src1->kind() == kind_t::leaf);
  ------------------
  |  |   68|  7.48k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (713:9): [True: 7.48k, False: 0]
  ------------------
  714|  7.48k|        IMMER_ASSERT_TAGGED(src2->kind() == kind_t::leaf);
  ------------------
  |  |   68|  7.48k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (714:9): [True: 7.48k, False: 0]
  ------------------
  715|  7.48k|        auto dst = make_leaf_n(n1 + n2);
  716|  7.48k|        IMMER_TRY {
  ------------------
  |  |   49|  7.48k|#define IMMER_TRY try
  ------------------
  717|  7.48k|            detail::uninitialized_copy(
  718|  7.48k|                src1->leaf(), src1->leaf() + n1, dst->leaf());
  719|  7.48k|        }
  720|  7.48k|        IMMER_CATCH (...) {
  721|      0|            heap::deallocate(node_t::sizeof_leaf_n(n1 + n2), dst);
  722|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  723|      0|        }
  724|  7.48k|        IMMER_TRY {
  ------------------
  |  |   49|  7.48k|#define IMMER_TRY try
  ------------------
  725|  7.48k|            detail::uninitialized_copy(
  726|  7.48k|                src2->leaf(), src2->leaf() + n2, dst->leaf() + n1);
  727|  7.48k|        }
  728|  7.48k|        IMMER_CATCH (...) {
  729|      0|            detail::destroy_n(dst->leaf(), n1);
  730|      0|            heap::deallocate(node_t::sizeof_leaf_n(n1 + n2), dst);
  731|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  732|      0|        }
  733|  7.48k|        return dst;
  734|  7.48k|    }
_ZNK5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE10can_mutateENS9_5applyIS6_E4type4editE:
  870|  14.9M|    {
  871|  14.9M|        return refs(this).unique() || ownee(this).can_mutate(e);
  ------------------
  |  Branch (871:16): [True: 0, False: 14.9M]
  |  Branch (871:39): [True: 14.0M, False: 902k]
  ------------------
  872|  14.9M|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE5owneeEPKSB_:
  207|  14.9M|    {
  208|  14.9M|        return get<ownee_t>(x->impl);
  209|  14.9M|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE11copy_leaf_eENS9_5applyIS6_E4type4editEPSB_j:
  681|  46.3k|    {
  682|  46.3k|        IMMER_ASSERT_TAGGED(src->kind() == kind_t::leaf);
  ------------------
  |  |   68|  46.3k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (682:9): [True: 46.3k, False: 0]
  ------------------
  683|  46.3k|        auto dst = make_leaf_e(e);
  684|  46.3k|        IMMER_TRY {
  ------------------
  |  |   49|  46.3k|#define IMMER_TRY try
  ------------------
  685|  46.3k|            detail::uninitialized_copy(
  686|  46.3k|                src->leaf(), src->leaf() + n, dst->leaf());
  687|  46.3k|        }
  688|  46.3k|        IMMER_CATCH (...) {
  689|      0|            heap::deallocate(node_t::max_sizeof_leaf, dst);
  690|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  691|      0|        }
  692|  46.3k|        return dst;
  693|  46.3k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE11make_leaf_eENS9_5applyIS6_E4type4editE:
  348|  1.41M|    {
  349|  1.41M|        auto p   = new (heap::allocate(max_sizeof_leaf)) node_t;
  350|  1.41M|        ownee(p) = e;
  351|  1.41M|#if IMMER_TAGGED_NODE
  352|  1.41M|        p->impl.d.kind = node_t::kind_t::leaf;
  353|  1.41M|#endif
  354|  1.41M|        return p;
  355|  1.41M|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE11make_leaf_eIiEEPSB_NS9_5applyIS6_E4type4editEOT_:
  485|  17.6k|    {
  486|  17.6k|        auto p = make_leaf_e(e);
  487|  17.6k|        IMMER_TRY {
  ------------------
  |  |   49|  17.6k|#define IMMER_TRY try
  ------------------
  488|  17.6k|            new (p->leaf()) T(std::forward<U>(x));
  489|  17.6k|        }
  490|  17.6k|        IMMER_CATCH (...) {
  491|      0|            heap::deallocate(node_t::max_sizeof_leaf, p);
  492|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  493|      0|        }
  494|  17.6k|        return p;
  495|  17.6k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE24ensure_mutable_relaxed_nENS9_5applyIS6_E4type4editEj:
  930|   907k|    {
  931|   907k|        auto src_r = relaxed();
  932|   907k|        return static_if<embed_relaxed, relaxed_t*>(
  933|   907k|            [&](auto) { return src_r; },
  934|   907k|            [&](auto) {
  935|   907k|                if (node_t::refs(src_r).unique() ||
  936|   907k|                    node_t::ownee(src_r).can_mutate(e))
  937|   907k|                    return src_r;
  938|   907k|                else {
  939|   907k|                    auto dst_r =
  940|   907k|                        new (heap::allocate(max_sizeof_relaxed)) relaxed_t;
  941|   907k|                    if (src_r) {
  942|   907k|                        std::copy(
  943|   907k|                            src_r->d.sizes, src_r->d.sizes + n, dst_r->d.sizes);
  944|   907k|                        if (node_t::refs(src_r).dec())
  945|   907k|                            heap::deallocate(node_t::sizeof_inner_r_n(n),
  946|   907k|                                             src_r);
  947|   907k|                    }
  948|   907k|                    dst_r->d.count                   = n;
  949|   907k|                    node_t::ownee(dst_r)             = e;
  950|   907k|                    return impl.d.data.inner.relaxed = dst_r;
  951|   907k|                }
  952|   907k|            });
  953|   907k|    }
_ZZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE24ensure_mutable_relaxed_nENS9_5applyIS6_E4type4editEjENKUlT_E0_clINS0_7empty_tEEEDaSG_:
  934|   907k|            [&](auto) {
  935|   907k|                if (node_t::refs(src_r).unique() ||
  ------------------
  |  Branch (935:21): [True: 0, False: 907k]
  ------------------
  936|   907k|                    node_t::ownee(src_r).can_mutate(e))
  ------------------
  |  Branch (936:21): [True: 904k, False: 2.24k]
  ------------------
  937|   904k|                    return src_r;
  938|  2.24k|                else {
  939|  2.24k|                    auto dst_r =
  940|  2.24k|                        new (heap::allocate(max_sizeof_relaxed)) relaxed_t;
  941|  2.24k|                    if (src_r) {
  ------------------
  |  Branch (941:25): [True: 2.24k, False: 0]
  ------------------
  942|  2.24k|                        std::copy(
  943|  2.24k|                            src_r->d.sizes, src_r->d.sizes + n, dst_r->d.sizes);
  944|  2.24k|                        if (node_t::refs(src_r).dec())
  ------------------
  |  Branch (944:29): [True: 0, False: 2.24k]
  ------------------
  945|      0|                            heap::deallocate(node_t::sizeof_inner_r_n(n),
  946|      0|                                             src_r);
  947|  2.24k|                    }
  948|  2.24k|                    dst_r->d.count                   = n;
  949|  2.24k|                    node_t::ownee(dst_r)             = e;
  950|  2.24k|                    return impl.d.data.inner.relaxed = dst_r;
  951|  2.24k|                }
  952|   907k|            });
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE14copy_inner_r_eENS9_5applyIS6_E4type4editEPSB_j:
  596|  33.2k|    {
  597|  33.2k|        IMMER_ASSERT_TAGGED(src->kind() == kind_t::inner);
  ------------------
  |  |   68|  33.2k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (597:9): [True: 33.2k, False: 0]
  ------------------
  598|  33.2k|        auto dst = make_inner_r_e(e);
  599|  33.2k|        return do_copy_inner_r(dst, src, n);
  600|  33.2k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE14make_inner_r_eENS9_5applyIS6_E4type4editE:
  286|   769k|    {
  287|   769k|        auto mp = heap::allocate(max_sizeof_inner_r);
  288|   769k|        auto mr = static_cast<void*>(nullptr);
  289|   769k|        if (embed_relaxed) {
  ------------------
  |  Branch (289:13): [Folded, False: 769k]
  ------------------
  290|      0|            mr = reinterpret_cast<unsigned char*>(mp) + max_sizeof_inner;
  291|   769k|        } else {
  292|   769k|            IMMER_TRY {
  ------------------
  |  |   49|   769k|#define IMMER_TRY try
  ------------------
  293|   769k|                mr = heap::allocate(max_sizeof_relaxed, norefs_tag{});
  294|   769k|            }
  295|   769k|            IMMER_CATCH (...) {
  296|      0|                heap::deallocate(max_sizeof_inner_r, mp);
  297|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  298|      0|            }
  299|   769k|        }
  300|   769k|        auto p   = new (mp) node_t;
  301|   769k|        auto r   = new (mr) relaxed_t;
  302|   769k|        ownee(p) = e;
  303|   769k|        static_if<!embed_relaxed>([&](auto) { node_t::ownee(r) = e; });
  304|   769k|        r->d.count                   = 0;
  305|   769k|        p->impl.d.data.inner.relaxed = r;
  306|   769k|#if IMMER_TAGGED_NODE
  307|   769k|        p->impl.d.kind = node_t::kind_t::inner;
  308|   769k|#endif
  309|   769k|        return p;
  310|   769k|    }
_ZZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE14make_inner_r_eENS9_5applyIS6_E4type4editEENKUlT_E_clINS0_7empty_tEEEDaSG_:
  303|   769k|        static_if<!embed_relaxed>([&](auto) { node_t::ownee(r) = e; });
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE11make_path_eENS9_5applyIS6_E4type4editEjPSB_:
  516|  2.35M|    {
  517|  2.35M|        IMMER_ASSERT_TAGGED(node->kind() == kind_t::leaf);
  ------------------
  |  |   68|  2.35M|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (517:9): [True: 2.35M, False: 0]
  ------------------
  518|  2.35M|        if (shift == endshift<B, BL>)
  ------------------
  |  Branch (518:13): [True: 1.76M, False: 593k]
  ------------------
  519|  1.76M|            return node;
  520|   593k|        else {
  521|   593k|            auto n = node_t::make_inner_e(e);
  522|   593k|            IMMER_TRY {
  ------------------
  |  |   49|   593k|#define IMMER_TRY try
  ------------------
  523|   593k|                n->inner()[0] = make_path_e(e, shift - B, node);
  524|   593k|            }
  525|   593k|            IMMER_CATCH (...) {
  526|      0|                heap::deallocate(node_t::max_sizeof_inner, n);
  527|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  528|      0|            }
  529|   593k|            return n;
  530|   593k|        }
  531|  2.35M|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE12make_inner_eENS9_5applyIS6_E4type4editE:
  231|   636k|    {
  232|   636k|        auto m                       = heap::allocate(max_sizeof_inner);
  233|   636k|        auto p                       = new (m) node_t;
  234|   636k|        ownee(p)                     = e;
  235|   636k|        p->impl.d.data.inner.relaxed = nullptr;
  236|   636k|#if IMMER_TAGGED_NODE
  237|   636k|        p->impl.d.kind = node_t::kind_t::inner;
  238|   636k|#endif
  239|   636k|        return p;
  240|   636k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE12copy_inner_eENS9_5applyIS6_E4type4editEPSB_j:
  551|  22.0k|    {
  552|  22.0k|        IMMER_ASSERT_TAGGED(src->kind() == kind_t::inner);
  ------------------
  |  |   68|  22.0k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (552:9): [True: 22.0k, False: 0]
  ------------------
  553|  22.0k|        auto dst = make_inner_e(e);
  554|  22.0k|        return do_copy_inner(dst, src, n);
  555|  22.0k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE15copy_inner_sr_eENS9_5applyIS6_E4type4editEPSB_j:
  603|  17.5k|    {
  604|  17.5k|        IMMER_ASSERT_TAGGED(src->kind() == kind_t::inner);
  ------------------
  |  |   68|  17.5k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (604:9): [True: 17.5k, False: 0]
  ------------------
  605|  17.5k|        auto dst = make_inner_sr_e(e, src->relaxed());
  606|  17.5k|        return do_copy_inner_sr(dst, src, n);
  607|  17.5k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE15make_inner_sr_eENS9_5applyIS6_E4type4editEPNS0_3csl10member_twoINSB_14relaxed_data_tENSG_7inheritIS7_NSG_6memberINSE_5owneeEvE4typeEE4typeEE4typeE:
  313|  17.5k|    {
  314|  17.5k|        return static_if<embed_relaxed, node_t*>(
  315|  17.5k|            [&](auto) { return node_t::make_inner_r_e(e); },
  316|  17.5k|            [&](auto) {
  317|  17.5k|                auto p =
  318|  17.5k|                    new (heap::allocate(node_t::max_sizeof_inner_r)) node_t;
  319|  17.5k|                node_t::refs(r).inc();
  320|  17.5k|                p->impl.d.data.inner.relaxed = r;
  321|  17.5k|                node_t::ownee(p)             = e;
  322|  17.5k|#if IMMER_TAGGED_NODE
  323|  17.5k|                p->impl.d.kind = node_t::kind_t::inner;
  324|  17.5k|#endif
  325|  17.5k|                return p;
  326|  17.5k|            });
  327|  17.5k|    }
_ZZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE15make_inner_sr_eENS9_5applyIS6_E4type4editEPNS0_3csl10member_twoINSB_14relaxed_data_tENSG_7inheritIS7_NSG_6memberINSE_5owneeEvE4typeEE4typeEE4typeEENKUlT_E0_clINS0_7empty_tEEEDaST_:
  316|  17.5k|            [&](auto) {
  317|  17.5k|                auto p =
  318|  17.5k|                    new (heap::allocate(node_t::max_sizeof_inner_r)) node_t;
  319|  17.5k|                node_t::refs(r).inc();
  320|  17.5k|                p->impl.d.data.inner.relaxed = r;
  321|  17.5k|                node_t::ownee(p)             = e;
  322|  17.5k|#if IMMER_TAGGED_NODE
  323|  17.5k|                p->impl.d.kind = node_t::kind_t::inner;
  324|  17.5k|#endif
  325|  17.5k|                return p;
  326|  17.5k|            });
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE16do_copy_inner_srEPSB_SC_j:
  640|  17.5k|    {
  641|  17.5k|        if (embed_relaxed)
  ------------------
  |  Branch (641:13): [Folded, False: 17.5k]
  ------------------
  642|      0|            return do_copy_inner_r(dst, src, n);
  643|  17.5k|        else {
  644|  17.5k|            inc_nodes(src->inner(), n);
  645|  17.5k|            std::copy(src->inner(), src->inner() + n, dst->inner());
  646|  17.5k|            return dst;
  647|  17.5k|        }
  648|  17.5k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE11copy_leaf_eENS9_5applyIS6_E4type4editEPSB_jSG_j:
  738|  2.50k|    {
  739|  2.50k|        IMMER_ASSERT_TAGGED(src1->kind() == kind_t::leaf);
  ------------------
  |  |   68|  2.50k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (739:9): [True: 2.50k, False: 0]
  ------------------
  740|  2.50k|        IMMER_ASSERT_TAGGED(src2->kind() == kind_t::leaf);
  ------------------
  |  |   68|  2.50k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (740:9): [True: 2.50k, False: 0]
  ------------------
  741|  2.50k|        auto dst = make_leaf_e(e);
  742|  2.50k|        IMMER_TRY {
  ------------------
  |  |   49|  2.50k|#define IMMER_TRY try
  ------------------
  743|  2.50k|            detail::uninitialized_copy(
  744|  2.50k|                src1->leaf(), src1->leaf() + n1, dst->leaf());
  745|  2.50k|        }
  746|  2.50k|        IMMER_CATCH (...) {
  747|      0|            heap::deallocate(max_sizeof_leaf, dst);
  748|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  749|      0|        }
  750|  2.50k|        IMMER_TRY {
  ------------------
  |  |   49|  2.50k|#define IMMER_TRY try
  ------------------
  751|  2.50k|            detail::uninitialized_copy(
  752|  2.50k|                src2->leaf(), src2->leaf() + n2, dst->leaf() + n1);
  753|  2.50k|        }
  754|  2.50k|        IMMER_CATCH (...) {
  755|      0|            detail::destroy_n(dst->leaf(), n1);
  756|      0|            heap::deallocate(max_sizeof_leaf, dst);
  757|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  758|      0|        }
  759|  2.50k|        return dst;
  760|  2.50k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE11copy_leaf_eENS9_5applyIS6_E4type4editEPSB_jj:
  763|  1.32M|    {
  764|  1.32M|        IMMER_ASSERT_TAGGED(src->kind() == kind_t::leaf);
  ------------------
  |  |   68|  1.32M|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (764:9): [True: 1.32M, False: 0]
  ------------------
  765|  1.32M|        auto dst = make_leaf_e(e);
  766|  1.32M|        IMMER_TRY {
  ------------------
  |  |   49|  1.32M|#define IMMER_TRY try
  ------------------
  767|  1.32M|            detail::uninitialized_copy(
  768|  1.32M|                src->leaf() + idx, src->leaf() + last, dst->leaf());
  769|  1.32M|        }
  770|  1.32M|        IMMER_CATCH (...) {
  771|      0|            heap::deallocate(max_sizeof_leaf, dst);
  772|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  773|      0|        }
  774|  1.32M|        return dst;
  775|  1.32M|    }
_ZNK5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE9can_relaxEv:
  874|  1.48M|    bool can_relax() const { return !embed_relaxed || relaxed(); }
  ------------------
  |  Branch (874:37): [True: 1.48M, Folded]
  |  Branch (874:55): [True: 0, False: 0]
  ------------------
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE24ensure_mutable_relaxed_eENS9_5applyIS6_E4type4editESF_:
  903|   671k|    {
  904|   671k|        auto src_r = relaxed();
  905|   671k|        return static_if<embed_relaxed, relaxed_t*>(
  906|   671k|            [&](auto) { return src_r; },
  907|   671k|            [&](auto) {
  908|   671k|                if (src_r && (node_t::refs(src_r).unique() ||
  909|   671k|                              node_t::ownee(src_r).can_mutate(e))) {
  910|   671k|                    node_t::ownee(src_r) = ec;
  911|   671k|                    return src_r;
  912|   671k|                } else {
  913|   671k|                    auto dst_r = impl.d.data.inner.relaxed =
  914|   671k|                        new (heap::allocate(max_sizeof_relaxed)) relaxed_t;
  915|   671k|                    if (src_r) {
  916|   671k|                        auto n = dst_r->d.count = src_r->d.count;
  917|   671k|                        std::copy(
  918|   671k|                            src_r->d.sizes, src_r->d.sizes + n, dst_r->d.sizes);
  919|   671k|                        if (node_t::refs(src_r).dec())
  920|   671k|                            heap::deallocate(node_t::sizeof_inner_r_n(n),
  921|   671k|                                             src_r);
  922|   671k|                    }
  923|   671k|                    node_t::ownee(dst_r) = ec;
  924|   671k|                    return dst_r;
  925|   671k|                }
  926|   671k|            });
  927|   671k|    }
_ZZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE24ensure_mutable_relaxed_eENS9_5applyIS6_E4type4editESF_ENKUlT_E0_clINS0_7empty_tEEEDaSG_:
  907|   671k|            [&](auto) {
  908|   671k|                if (src_r && (node_t::refs(src_r).unique() ||
  ------------------
  |  Branch (908:21): [True: 663k, False: 7.51k]
  |  Branch (908:31): [True: 0, False: 663k]
  ------------------
  909|   663k|                              node_t::ownee(src_r).can_mutate(e))) {
  ------------------
  |  Branch (909:31): [True: 663k, False: 692]
  ------------------
  910|   663k|                    node_t::ownee(src_r) = ec;
  911|   663k|                    return src_r;
  912|   663k|                } else {
  913|  8.20k|                    auto dst_r = impl.d.data.inner.relaxed =
  914|  8.20k|                        new (heap::allocate(max_sizeof_relaxed)) relaxed_t;
  915|  8.20k|                    if (src_r) {
  ------------------
  |  Branch (915:25): [True: 692, False: 7.51k]
  ------------------
  916|    692|                        auto n = dst_r->d.count = src_r->d.count;
  917|    692|                        std::copy(
  918|    692|                            src_r->d.sizes, src_r->d.sizes + n, dst_r->d.sizes);
  919|    692|                        if (node_t::refs(src_r).dec())
  ------------------
  |  Branch (919:29): [True: 0, False: 692]
  ------------------
  920|      0|                            heap::deallocate(node_t::sizeof_inner_r_n(n),
  921|      0|                                             src_r);
  922|    692|                    }
  923|  8.20k|                    node_t::ownee(dst_r) = ec;
  924|  8.20k|                    return dst_r;
  925|  8.20k|                }
  926|   671k|            });

_ZN5immer6detail4rbts11dec_visitor13visit_relaxedIRNS1_11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEEEvOT_:
  523|   616k|    {
  524|   616k|        using node_t = node_type<Pos>;
  525|   616k|        auto node    = p.node();
  526|   616k|        if (node->dec()) {
  ------------------
  |  Branch (526:13): [True: 0, False: 616k]
  ------------------
  527|      0|            p.each(this_t{});
  528|      0|            node_t::delete_inner_r(node, p.count());
  529|      0|        }
  530|   616k|    }
_ZN5immer6detail4rbts11dec_visitor13visit_regularIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEEEvOT_:
  534|  59.5k|    {
  535|  59.5k|        using node_t = node_type<Pos>;
  536|  59.5k|        auto node    = p.node();
  537|  59.5k|        if (node->dec()) {
  ------------------
  |  Branch (537:13): [True: 0, False: 59.5k]
  ------------------
  538|      0|            p.each(this_t{});
  539|      0|            node_t::delete_inner(node, p.count());
  540|      0|        }
  541|  59.5k|    }
_ZN5immer6detail4rbts11dec_visitor10visit_leafIRNS1_13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEEEvOT_:
  545|  5.84k|    {
  546|  5.84k|        using node_t = node_type<Pos>;
  547|  5.84k|        auto node    = p.node();
  548|  5.84k|        if (node->dec()) {
  ------------------
  |  Branch (548:13): [True: 0, False: 5.84k]
  ------------------
  549|      0|            node_t::delete_leaf(node, p.count());
  550|      0|        }
  551|  5.84k|    }
_ZN5immer6detail4rbts11dec_visitor10visit_leafIRNS1_8leaf_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEEEvOT_:
  545|  2.41k|    {
  546|  2.41k|        using node_t = node_type<Pos>;
  547|  2.41k|        auto node    = p.node();
  548|  2.41k|        if (node->dec()) {
  ------------------
  |  Branch (548:13): [True: 0, False: 2.41k]
  ------------------
  549|      0|            node_t::delete_leaf(node, p.count());
  550|      0|        }
  551|  2.41k|    }
_ZN5immer6detail4rbts11dec_visitor13visit_regularIRNS1_8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEEEvOT_:
  534|  8.77k|    {
  535|  8.77k|        using node_t = node_type<Pos>;
  536|  8.77k|        auto node    = p.node();
  537|  8.77k|        if (node->dec()) {
  ------------------
  |  Branch (537:13): [True: 0, False: 8.77k]
  ------------------
  538|      0|            p.each(this_t{});
  539|      0|            node_t::delete_inner(node, p.count());
  540|      0|        }
  541|  8.77k|    }
_ZN5immer6detail4rbts11dec_visitor13visit_regularIRNS1_11regular_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEEEvOT_:
  534|  3.26k|    {
  535|  3.26k|        using node_t = node_type<Pos>;
  536|  3.26k|        auto node    = p.node();
  537|  3.26k|        if (node->dec()) {
  ------------------
  |  Branch (537:13): [True: 0, False: 3.26k]
  ------------------
  538|      0|            p.each(this_t{});
  539|      0|            node_t::delete_inner(node, p.count());
  540|      0|        }
  541|  3.26k|    }
_ZN5immer6detail4rbts11dec_visitor13visit_regularIRNS1_17empty_regular_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEEEvOT_:
  534|   423k|    {
  535|   423k|        using node_t = node_type<Pos>;
  536|   423k|        auto node    = p.node();
  537|   423k|        if (node->dec()) {
  ------------------
  |  Branch (537:13): [True: 0, False: 423k]
  ------------------
  538|      0|            p.each(this_t{});
  539|      0|            node_t::delete_inner(node, p.count());
  540|      0|        }
  541|   423k|    }
_ZN5immer6detail4rbts11dec_visitor10visit_leafIRNS1_12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEEEvOT_:
  545|   494k|    {
  546|   494k|        using node_t = node_type<Pos>;
  547|   494k|        auto node    = p.node();
  548|   494k|        if (node->dec()) {
  ------------------
  |  Branch (548:13): [True: 0, False: 494k]
  ------------------
  549|      0|            node_t::delete_leaf(node, p.count());
  550|      0|        }
  551|   494k|    }
_ZN5immer6detail4rbts11dec_visitor10visit_leafIRNS1_14empty_leaf_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEEEvOT_:
  545|   368k|    {
  546|   368k|        using node_t = node_type<Pos>;
  547|   368k|        auto node    = p.node();
  548|   368k|        if (node->dec()) {
  ------------------
  |  Branch (548:13): [True: 0, False: 368k]
  ------------------
  549|      0|            node_t::delete_leaf(node, p.count());
  550|      0|        }
  551|   368k|    }
_ZN5immer6detail4rbts17push_tail_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE13visit_relaxedIRNS1_11relaxed_posISC_EEEEPSC_OT_SI_j:
  791|  37.2k|    {
  792|  37.2k|        auto level    = pos.shift();
  793|  37.2k|        auto idx      = pos.count() - 1;
  794|  37.2k|        auto children = pos.size(idx);
  795|  37.2k|        auto new_idx =
  796|  37.2k|            children == size_t{1} << level || level == BL ? idx + 1 : idx;
  ------------------
  |  Branch (796:13): [True: 2.80k, False: 34.4k]
  |  Branch (796:47): [True: 487, False: 33.9k]
  ------------------
  797|  37.2k|        auto new_child = static_cast<node_t*>(nullptr);
  798|  37.2k|        if (new_idx >= branches<B>)
  ------------------
  |  Branch (798:13): [True: 971, False: 36.2k]
  ------------------
  799|    971|            return nullptr;
  800|  36.2k|        else if (idx == new_idx) {
  ------------------
  |  Branch (800:18): [True: 33.9k, False: 2.32k]
  ------------------
  801|  33.9k|            new_child = pos.last_oh_csh(this_t{}, idx, children, tail, ts);
  802|  33.9k|            if (!new_child) {
  ------------------
  |  Branch (802:17): [True: 1.04k, False: 32.9k]
  ------------------
  803|  1.04k|                if (++new_idx < branches<B>)
  ------------------
  |  Branch (803:21): [True: 390, False: 657]
  ------------------
  804|    390|                    new_child = node_t::make_path(level - B, tail);
  805|    657|                else
  806|    657|                    return nullptr;
  807|  1.04k|            }
  808|  33.9k|        } else
  809|  2.32k|            new_child = node_t::make_path(level - B, tail);
  810|  35.6k|        IMMER_TRY {
  ------------------
  |  |   49|  35.6k|#define IMMER_TRY try
  ------------------
  811|  35.6k|            auto count = new_idx + 1;
  812|  35.6k|            auto new_parent =
  813|  35.6k|                node_t::copy_inner_r_n(count, pos.node(), new_idx);
  814|  35.6k|            auto new_relaxed              = new_parent->relaxed();
  815|  35.6k|            new_parent->inner()[new_idx]  = new_child;
  816|  35.6k|            new_relaxed->d.sizes[new_idx] = pos.size() + ts;
  817|  35.6k|            new_relaxed->d.count          = count;
  818|  35.6k|            assert(new_relaxed->d.sizes[new_idx]);
  ------------------
  |  Branch (818:13): [True: 35.6k, False: 0]
  ------------------
  819|  35.6k|            return new_parent;
  820|  35.6k|        }
  821|  35.6k|        IMMER_CATCH (...) {
  822|      0|            auto shift = pos.shift();
  823|      0|            auto size  = new_idx == idx ? children + ts : ts;
  ------------------
  |  Branch (823:26): [True: 0, False: 0]
  ------------------
  824|      0|            if (shift > BL) {
  ------------------
  |  Branch (824:17): [True: 0, False: 0]
  ------------------
  825|      0|                tail->inc();
  826|      0|                dec_inner(new_child, shift - B, size);
  827|      0|            }
  828|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  829|      0|        }
  830|  35.6k|    }
_ZN5immer6detail4rbts17push_tail_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE13visit_regularIRNS1_15regular_sub_posISC_EEJRjEEEPSC_OT_SJ_DpOT0_:
  834|  6.99k|    {
  835|  6.99k|        assert((pos.size() & mask<BL>) == 0);
  ------------------
  |  Branch (835:9): [True: 6.99k, False: 0]
  ------------------
  836|  6.99k|        auto idx        = pos.index(pos.size() - 1);
  837|  6.99k|        auto new_idx    = pos.index(pos.size() + branches<BL> - 1);
  838|  6.99k|        auto count      = new_idx + 1;
  839|  6.99k|        auto new_parent = node_t::make_inner_n(count);
  840|  6.99k|        IMMER_TRY {
  ------------------
  |  |   49|  6.99k|#define IMMER_TRY try
  ------------------
  841|  6.99k|            new_parent->inner()[new_idx] =
  842|  6.99k|                idx == new_idx ? pos.last_oh(this_t{}, idx, tail)
  ------------------
  |  Branch (842:17): [True: 5.76k, False: 1.23k]
  ------------------
  843|       |                               /* otherwise */
  844|  6.99k|                               : node_t::make_path(pos.shift() - B, tail);
  845|  6.99k|        }
  846|  6.99k|        IMMER_CATCH (...) {
  847|      0|            node_t::delete_inner(new_parent, count);
  848|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  849|      0|        }
  850|  6.99k|        return node_t::do_copy_inner(new_parent, pos.node(), new_idx);
  851|  6.99k|    }
_ZN5immer6detail4rbts17push_tail_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE13visit_regularIRNS1_11regular_posISC_EEJEEEPSC_OT_SI_DpOT0_:
  834|  27.7k|    {
  835|  27.7k|        assert((pos.size() & mask<BL>) == 0);
  ------------------
  |  Branch (835:9): [True: 27.7k, False: 0]
  ------------------
  836|  27.7k|        auto idx        = pos.index(pos.size() - 1);
  837|  27.7k|        auto new_idx    = pos.index(pos.size() + branches<BL> - 1);
  838|  27.7k|        auto count      = new_idx + 1;
  839|  27.7k|        auto new_parent = node_t::make_inner_n(count);
  840|  27.7k|        IMMER_TRY {
  ------------------
  |  |   49|  27.7k|#define IMMER_TRY try
  ------------------
  841|  27.7k|            new_parent->inner()[new_idx] =
  842|  27.7k|                idx == new_idx ? pos.last_oh(this_t{}, idx, tail)
  ------------------
  |  Branch (842:17): [True: 19.9k, False: 7.86k]
  ------------------
  843|       |                               /* otherwise */
  844|  27.7k|                               : node_t::make_path(pos.shift() - B, tail);
  845|  27.7k|        }
  846|  27.7k|        IMMER_CATCH (...) {
  847|      0|            node_t::delete_inner(new_parent, count);
  848|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  849|      0|        }
  850|  27.7k|        return node_t::do_copy_inner(new_parent, pos.node(), new_idx);
  851|  27.7k|    }
_ZN5immer6detail4rbts17push_tail_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE13visit_regularIRNS1_15regular_sub_posISC_EEJEEEPSC_OT_SI_DpOT0_:
  834|  4.11k|    {
  835|  4.11k|        assert((pos.size() & mask<BL>) == 0);
  ------------------
  |  Branch (835:9): [True: 4.11k, False: 0]
  ------------------
  836|  4.11k|        auto idx        = pos.index(pos.size() - 1);
  837|  4.11k|        auto new_idx    = pos.index(pos.size() + branches<BL> - 1);
  838|  4.11k|        auto count      = new_idx + 1;
  839|  4.11k|        auto new_parent = node_t::make_inner_n(count);
  840|  4.11k|        IMMER_TRY {
  ------------------
  |  |   49|  4.11k|#define IMMER_TRY try
  ------------------
  841|  4.11k|            new_parent->inner()[new_idx] =
  842|  4.11k|                idx == new_idx ? pos.last_oh(this_t{}, idx, tail)
  ------------------
  |  Branch (842:17): [True: 2.09k, False: 2.01k]
  ------------------
  843|       |                               /* otherwise */
  844|  4.11k|                               : node_t::make_path(pos.shift() - B, tail);
  845|  4.11k|        }
  846|  4.11k|        IMMER_CATCH (...) {
  847|      0|            node_t::delete_inner(new_parent, count);
  848|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  849|      0|        }
  850|  4.11k|        return node_t::do_copy_inner(new_parent, pos.node(), new_idx);
  851|  4.11k|    }
flex-vector-gc.cpp:_ZN5immer6detail4rbts14update_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10visit_leafIRNS1_12leaf_sub_posISC_EERZZ22LLVMFuzzerTestOneInputENK3$_5clI12fuzzer_inputEEDaRT_EUlSL_E_EEPSC_OSL_mOT0_:
  502|  3.76k|    {
  503|  3.76k|        auto offset = pos.index(idx);
  504|  3.76k|        auto node   = node_t::copy_leaf(pos.node(), pos.count());
  505|  3.76k|        IMMER_TRY {
  ------------------
  |  |   49|  3.76k|#define IMMER_TRY try
  ------------------
  506|  3.76k|            node->leaf()[offset] =
  507|  3.76k|                std::forward<Fn>(fn)(std::move(node->leaf()[offset]));
  508|  3.76k|            return node;
  509|  3.76k|        }
  510|  3.76k|        IMMER_CATCH (...) {
  511|      0|            node_t::delete_leaf(node, pos.count());
  512|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  513|      0|        }
  514|  3.76k|    }
flex-vector-gc.cpp:_ZN5immer6detail4rbts14update_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE13visit_relaxedIRNS1_11relaxed_posISC_EERZZ22LLVMFuzzerTestOneInputENK3$_5clI12fuzzer_inputEEDaRT_EUlSL_E_EEPSC_OSL_mOT0_:
  466|  28.0k|    {
  467|  28.0k|        auto offset = pos.index(idx);
  468|  28.0k|        auto count  = pos.count();
  469|  28.0k|        auto node   = node_t::make_inner_sr_n(count, pos.relaxed());
  470|  28.0k|        IMMER_TRY {
  ------------------
  |  |   49|  28.0k|#define IMMER_TRY try
  ------------------
  471|  28.0k|            auto child = pos.towards_oh(this_t{}, idx, offset, fn);
  472|  28.0k|            node_t::do_copy_inner_replace_sr(
  473|  28.0k|                node, pos.node(), count, offset, child);
  474|  28.0k|            return node;
  475|  28.0k|        }
  476|  28.0k|        IMMER_CATCH (...) {
  477|      0|            node_t::delete_inner_r(node, count);
  478|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  479|      0|        }
  480|  28.0k|    }
flex-vector-gc.cpp:_ZN5immer6detail4rbts14update_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE13visit_regularIRNS1_15regular_sub_posISC_EERZZ22LLVMFuzzerTestOneInputENK3$_5clI12fuzzer_inputEEDaRT_EUlSL_E_EEPSC_OSL_mOT0_:
  484|  2.17k|    {
  485|  2.17k|        auto offset = pos.index(idx);
  486|  2.17k|        auto count  = pos.count();
  487|  2.17k|        auto node   = node_t::make_inner_n(count);
  488|  2.17k|        IMMER_TRY {
  ------------------
  |  |   49|  2.17k|#define IMMER_TRY try
  ------------------
  489|  2.17k|            auto child = pos.towards_oh_ch(this_t{}, idx, offset, count, fn);
  490|  2.17k|            node_t::do_copy_inner_replace(
  491|  2.17k|                node, pos.node(), count, offset, child);
  492|  2.17k|            return node;
  493|  2.17k|        }
  494|  2.17k|        IMMER_CATCH (...) {
  495|      0|            node_t::delete_inner(node, count);
  496|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  497|      0|        }
  498|  2.17k|    }
flex-vector-gc.cpp:_ZN5immer6detail4rbts14update_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10visit_leafIRNS1_13full_leaf_posISC_EERZZ22LLVMFuzzerTestOneInputENK3$_5clI12fuzzer_inputEEDaRT_EUlSL_E_EEPSC_OSL_mOT0_:
  502|  1.33k|    {
  503|  1.33k|        auto offset = pos.index(idx);
  504|  1.33k|        auto node   = node_t::copy_leaf(pos.node(), pos.count());
  505|  1.33k|        IMMER_TRY {
  ------------------
  |  |   49|  1.33k|#define IMMER_TRY try
  ------------------
  506|  1.33k|            node->leaf()[offset] =
  507|  1.33k|                std::forward<Fn>(fn)(std::move(node->leaf()[offset]));
  508|  1.33k|            return node;
  509|  1.33k|        }
  510|  1.33k|        IMMER_CATCH (...) {
  511|      0|            node_t::delete_leaf(node, pos.count());
  512|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  513|      0|        }
  514|  1.33k|    }
flex-vector-gc.cpp:_ZN5immer6detail4rbts14update_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE13visit_regularIRNS1_8full_posISC_EERZZ22LLVMFuzzerTestOneInputENK3$_5clI12fuzzer_inputEEDaRT_EUlSL_E_EEPSC_OSL_mOT0_:
  484|  1.34k|    {
  485|  1.34k|        auto offset = pos.index(idx);
  486|  1.34k|        auto count  = pos.count();
  487|  1.34k|        auto node   = node_t::make_inner_n(count);
  488|  1.34k|        IMMER_TRY {
  ------------------
  |  |   49|  1.34k|#define IMMER_TRY try
  ------------------
  489|  1.34k|            auto child = pos.towards_oh_ch(this_t{}, idx, offset, count, fn);
  490|  1.34k|            node_t::do_copy_inner_replace(
  491|  1.34k|                node, pos.node(), count, offset, child);
  492|  1.34k|            return node;
  493|  1.34k|        }
  494|  1.34k|        IMMER_CATCH (...) {
  495|      0|            node_t::delete_inner(node, count);
  496|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  497|      0|        }
  498|  1.34k|    }
flex-vector-gc.cpp:_ZN5immer6detail4rbts14update_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10visit_leafIRNS1_8leaf_posISC_EERZZ22LLVMFuzzerTestOneInputENK3$_5clI12fuzzer_inputEEDaRT_EUlSL_E_EEPSC_OSL_mOT0_:
  502|    846|    {
  503|    846|        auto offset = pos.index(idx);
  504|    846|        auto node   = node_t::copy_leaf(pos.node(), pos.count());
  505|    846|        IMMER_TRY {
  ------------------
  |  |   49|    846|#define IMMER_TRY try
  ------------------
  506|    846|            node->leaf()[offset] =
  507|    846|                std::forward<Fn>(fn)(std::move(node->leaf()[offset]));
  508|    846|            return node;
  509|    846|        }
  510|    846|        IMMER_CATCH (...) {
  511|      0|            node_t::delete_leaf(node, pos.count());
  512|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  513|      0|        }
  514|    846|    }
flex-vector-gc.cpp:_ZN5immer6detail4rbts14update_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE13visit_regularIRNS1_11regular_posISC_EERZZ22LLVMFuzzerTestOneInputENK3$_5clI12fuzzer_inputEEDaRT_EUlSL_E_EEPSC_OSL_mOT0_:
  484|  1.20k|    {
  485|  1.20k|        auto offset = pos.index(idx);
  486|  1.20k|        auto count  = pos.count();
  487|  1.20k|        auto node   = node_t::make_inner_n(count);
  488|  1.20k|        IMMER_TRY {
  ------------------
  |  |   49|  1.20k|#define IMMER_TRY try
  ------------------
  489|  1.20k|            auto child = pos.towards_oh_ch(this_t{}, idx, offset, count, fn);
  490|  1.20k|            node_t::do_copy_inner_replace(
  491|  1.20k|                node, pos.node(), count, offset, child);
  492|  1.20k|            return node;
  493|  1.20k|        }
  494|  1.20k|        IMMER_CATCH (...) {
  495|      0|            node_t::delete_inner(node, count);
  496|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  497|      0|        }
  498|  1.20k|    }
_ZN5immer6detail4rbts19slice_right_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEELb1EE13visit_relaxedIRNS1_11relaxed_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_m:
 1096|  16.7k|    {
 1097|  16.7k|        auto idx = pos.index(last);
 1098|  16.7k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (1098:13): [True: 16.7k, Folded]
  |  Branch (1098:25): [True: 13.0k, False: 3.68k]
  ------------------
 1099|  13.0k|            return pos.towards_oh(this_t{}, last, idx);
 1100|  13.0k|        } else {
 1101|  3.68k|            using std::get;
 1102|  3.68k|            auto subs = pos.towards_oh(no_collapse_t{}, last, idx);
 1103|  3.68k|            auto next = get<1>(subs);
 1104|  3.68k|            auto ts   = get<2>(subs);
 1105|  3.68k|            auto tail = get<3>(subs);
 1106|  3.68k|            IMMER_TRY {
  ------------------
  |  |   49|  3.68k|#define IMMER_TRY try
  ------------------
 1107|  3.68k|                if (next) {
  ------------------
  |  Branch (1107:21): [True: 2.06k, False: 1.62k]
  ------------------
 1108|  2.06k|                    auto count = idx + 1;
 1109|  2.06k|                    auto newn  = node_t::copy_inner_r_n(count, pos.node(), idx);
 1110|  2.06k|                    auto newr  = newn->relaxed();
 1111|  2.06k|                    newn->inner()[idx] = next;
 1112|  2.06k|                    newr->d.sizes[idx] = last + 1 - ts;
 1113|  2.06k|                    newr->d.count      = count;
 1114|  2.06k|                    assert(newr->d.sizes[idx]);
  ------------------
  |  Branch (1114:21): [True: 2.06k, False: 0]
  ------------------
 1115|  2.06k|                    return std::make_tuple(pos.shift(), newn, ts, tail);
 1116|  2.06k|                } else if (idx == 0) {
  ------------------
  |  Branch (1116:28): [True: 0, False: 1.62k]
  ------------------
 1117|      0|                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
 1118|  1.62k|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (1118:28): [True: 1.62k, Folded]
  |  Branch (1118:40): [True: 1.24k, False: 381]
  |  Branch (1118:52): [True: 984, False: 261]
  ------------------
 1119|    984|                    auto newn = pos.node()->inner()[0];
 1120|    984|                    return std::make_tuple(
 1121|    984|                        pos.shift() - B, newn->inc(), ts, tail);
 1122|    984|                } else {
 1123|    642|                    auto newn = node_t::copy_inner_r(pos.node(), idx);
 1124|    642|                    return std::make_tuple(pos.shift(), newn, ts, tail);
 1125|    642|                }
 1126|  3.68k|            }
 1127|  3.68k|            IMMER_CATCH (...) {
 1128|      0|                assert(!next || pos.shift() > BL);
  ------------------
  |  Branch (1128:17): [True: 0, False: 0]
  |  Branch (1128:17): [True: 0, False: 0]
  |  Branch (1128:17): [True: 0, False: 0]
  ------------------
 1129|      0|                if (next)
  ------------------
  |  Branch (1129:21): [True: 0, False: 0]
  ------------------
 1130|      0|                    dec_inner(next,
 1131|      0|                              pos.shift() - B,
 1132|      0|                              last + 1 - ts - pos.size_before(idx));
 1133|      0|                if (tail)
  ------------------
  |  Branch (1133:21): [True: 0, False: 0]
  ------------------
 1134|      0|                    dec_leaf(tail, ts);
 1135|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1136|      0|            }
 1137|  3.68k|        }
 1138|  16.7k|    }
_ZN5immer6detail4rbts19slice_right_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEELb1EE10visit_leafIRNS1_12leaf_sub_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_m:
 1181|    906|    {
 1182|    906|        auto old_tail_size = pos.count();
 1183|    906|        auto new_tail_size = pos.index(last) + 1;
 1184|    906|        auto new_tail      = new_tail_size == old_tail_size
  ------------------
  |  Branch (1184:30): [True: 431, False: 475]
  ------------------
 1185|    906|                                 ? pos.node()->inc()
 1186|    906|                                 : node_t::copy_leaf(pos.node(), new_tail_size);
 1187|    906|        return std::make_tuple(0, nullptr, new_tail_size, new_tail);
 1188|    906|    }
_ZN5immer6detail4rbts19slice_right_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEELb0EE10visit_leafIRNS1_12leaf_sub_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_m:
 1181|  2.34k|    {
 1182|  2.34k|        auto old_tail_size = pos.count();
 1183|  2.34k|        auto new_tail_size = pos.index(last) + 1;
 1184|  2.34k|        auto new_tail      = new_tail_size == old_tail_size
  ------------------
  |  Branch (1184:30): [True: 867, False: 1.48k]
  ------------------
 1185|  2.34k|                                 ? pos.node()->inc()
 1186|  2.34k|                                 : node_t::copy_leaf(pos.node(), new_tail_size);
 1187|  2.34k|        return std::make_tuple(0, nullptr, new_tail_size, new_tail);
 1188|  2.34k|    }
_ZN5immer6detail4rbts19slice_right_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEELb0EE13visit_relaxedIRNS1_11relaxed_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_m:
 1096|  4.23k|    {
 1097|  4.23k|        auto idx = pos.index(last);
 1098|  4.23k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (1098:13): [Folded, False: 4.23k]
  |  Branch (1098:25): [True: 0, False: 0]
  ------------------
 1099|      0|            return pos.towards_oh(this_t{}, last, idx);
 1100|  4.23k|        } else {
 1101|  4.23k|            using std::get;
 1102|  4.23k|            auto subs = pos.towards_oh(no_collapse_t{}, last, idx);
 1103|  4.23k|            auto next = get<1>(subs);
 1104|  4.23k|            auto ts   = get<2>(subs);
 1105|  4.23k|            auto tail = get<3>(subs);
 1106|  4.23k|            IMMER_TRY {
  ------------------
  |  |   49|  4.23k|#define IMMER_TRY try
  ------------------
 1107|  4.23k|                if (next) {
  ------------------
  |  Branch (1107:21): [True: 2.10k, False: 2.12k]
  ------------------
 1108|  2.10k|                    auto count = idx + 1;
 1109|  2.10k|                    auto newn  = node_t::copy_inner_r_n(count, pos.node(), idx);
 1110|  2.10k|                    auto newr  = newn->relaxed();
 1111|  2.10k|                    newn->inner()[idx] = next;
 1112|  2.10k|                    newr->d.sizes[idx] = last + 1 - ts;
 1113|  2.10k|                    newr->d.count      = count;
 1114|  2.10k|                    assert(newr->d.sizes[idx]);
  ------------------
  |  Branch (1114:21): [True: 2.10k, False: 0]
  ------------------
 1115|  2.10k|                    return std::make_tuple(pos.shift(), newn, ts, tail);
 1116|  2.12k|                } else if (idx == 0) {
  ------------------
  |  Branch (1116:28): [True: 930, False: 1.19k]
  ------------------
 1117|    930|                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
 1118|  1.19k|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (1118:28): [Folded, False: 1.19k]
  |  Branch (1118:40): [True: 0, False: 0]
  |  Branch (1118:52): [True: 0, False: 0]
  ------------------
 1119|      0|                    auto newn = pos.node()->inner()[0];
 1120|      0|                    return std::make_tuple(
 1121|      0|                        pos.shift() - B, newn->inc(), ts, tail);
 1122|  1.19k|                } else {
 1123|  1.19k|                    auto newn = node_t::copy_inner_r(pos.node(), idx);
 1124|  1.19k|                    return std::make_tuple(pos.shift(), newn, ts, tail);
 1125|  1.19k|                }
 1126|  4.23k|            }
 1127|  4.23k|            IMMER_CATCH (...) {
 1128|      0|                assert(!next || pos.shift() > BL);
  ------------------
  |  Branch (1128:17): [True: 0, False: 0]
  |  Branch (1128:17): [True: 0, False: 0]
  |  Branch (1128:17): [True: 0, False: 0]
  ------------------
 1129|      0|                if (next)
  ------------------
  |  Branch (1129:21): [True: 0, False: 0]
  ------------------
 1130|      0|                    dec_inner(next,
 1131|      0|                              pos.shift() - B,
 1132|      0|                              last + 1 - ts - pos.size_before(idx));
 1133|      0|                if (tail)
  ------------------
  |  Branch (1133:21): [True: 0, False: 0]
  ------------------
 1134|      0|                    dec_leaf(tail, ts);
 1135|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1136|      0|            }
 1137|  4.23k|        }
 1138|  4.23k|    }
_ZN5immer6detail4rbts19slice_right_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEELb0EE13visit_regularIRNS1_15regular_sub_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_m:
 1142|  1.34k|    {
 1143|  1.34k|        auto idx = pos.index(last);
 1144|  1.34k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (1144:13): [Folded, False: 1.34k]
  |  Branch (1144:25): [True: 0, False: 0]
  ------------------
 1145|      0|            return pos.towards_oh(this_t{}, last, idx);
 1146|  1.34k|        } else {
 1147|  1.34k|            using std::get;
 1148|  1.34k|            auto subs = pos.towards_oh(no_collapse_t{}, last, idx);
 1149|  1.34k|            auto next = get<1>(subs);
 1150|  1.34k|            auto ts   = get<2>(subs);
 1151|  1.34k|            auto tail = get<3>(subs);
 1152|  1.34k|            IMMER_TRY {
  ------------------
  |  |   49|  1.34k|#define IMMER_TRY try
  ------------------
 1153|  1.34k|                if (next) {
  ------------------
  |  Branch (1153:21): [True: 406, False: 934]
  ------------------
 1154|    406|                    auto newn = node_t::copy_inner_n(idx + 1, pos.node(), idx);
 1155|    406|                    newn->inner()[idx] = next;
 1156|    406|                    return std::make_tuple(pos.shift(), newn, ts, tail);
 1157|    934|                } else if (idx == 0) {
  ------------------
  |  Branch (1157:28): [True: 474, False: 460]
  ------------------
 1158|    474|                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
 1159|    474|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (1159:28): [Folded, False: 460]
  |  Branch (1159:40): [True: 0, False: 0]
  |  Branch (1159:52): [True: 0, False: 0]
  ------------------
 1160|      0|                    auto newn = pos.node()->inner()[0];
 1161|      0|                    return std::make_tuple(
 1162|      0|                        pos.shift() - B, newn->inc(), ts, tail);
 1163|    460|                } else {
 1164|    460|                    auto newn = node_t::copy_inner_n(idx, pos.node(), idx);
 1165|    460|                    return std::make_tuple(pos.shift(), newn, ts, tail);
 1166|    460|                }
 1167|  1.34k|            }
 1168|  1.34k|            IMMER_CATCH (...) {
 1169|      0|                assert(!next || pos.shift() > BL);
  ------------------
  |  Branch (1169:17): [True: 0, False: 0]
  |  Branch (1169:17): [True: 0, False: 0]
  |  Branch (1169:17): [True: 0, False: 0]
  ------------------
 1170|      0|                assert(tail);
  ------------------
  |  Branch (1170:17): [True: 0, False: 0]
  ------------------
 1171|      0|                if (next)
  ------------------
  |  Branch (1171:21): [True: 0, False: 0]
  ------------------
 1172|      0|                    dec_regular(next, pos.shift() - B, last + 1 - ts);
 1173|      0|                dec_leaf(tail, ts);
 1174|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1175|      0|            }
 1176|  1.34k|        }
 1177|  1.34k|    }
_ZN5immer6detail4rbts19slice_right_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEELb0EE10visit_leafIRNS1_13full_leaf_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_m:
 1181|  3.22k|    {
 1182|  3.22k|        auto old_tail_size = pos.count();
 1183|  3.22k|        auto new_tail_size = pos.index(last) + 1;
 1184|  3.22k|        auto new_tail      = new_tail_size == old_tail_size
  ------------------
  |  Branch (1184:30): [True: 1.33k, False: 1.89k]
  ------------------
 1185|  3.22k|                                 ? pos.node()->inc()
 1186|  3.22k|                                 : node_t::copy_leaf(pos.node(), new_tail_size);
 1187|  3.22k|        return std::make_tuple(0, nullptr, new_tail_size, new_tail);
 1188|  3.22k|    }
_ZN5immer6detail4rbts19slice_right_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEELb0EE13visit_regularIRNS1_8full_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_m:
 1142|  2.31k|    {
 1143|  2.31k|        auto idx = pos.index(last);
 1144|  2.31k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (1144:13): [Folded, False: 2.31k]
  |  Branch (1144:25): [True: 0, False: 0]
  ------------------
 1145|      0|            return pos.towards_oh(this_t{}, last, idx);
 1146|  2.31k|        } else {
 1147|  2.31k|            using std::get;
 1148|  2.31k|            auto subs = pos.towards_oh(no_collapse_t{}, last, idx);
 1149|  2.31k|            auto next = get<1>(subs);
 1150|  2.31k|            auto ts   = get<2>(subs);
 1151|  2.31k|            auto tail = get<3>(subs);
 1152|  2.31k|            IMMER_TRY {
  ------------------
  |  |   49|  2.31k|#define IMMER_TRY try
  ------------------
 1153|  2.31k|                if (next) {
  ------------------
  |  Branch (1153:21): [True: 482, False: 1.83k]
  ------------------
 1154|    482|                    auto newn = node_t::copy_inner_n(idx + 1, pos.node(), idx);
 1155|    482|                    newn->inner()[idx] = next;
 1156|    482|                    return std::make_tuple(pos.shift(), newn, ts, tail);
 1157|  1.83k|                } else if (idx == 0) {
  ------------------
  |  Branch (1157:28): [True: 916, False: 920]
  ------------------
 1158|    916|                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
 1159|    920|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (1159:28): [Folded, False: 920]
  |  Branch (1159:40): [True: 0, False: 0]
  |  Branch (1159:52): [True: 0, False: 0]
  ------------------
 1160|      0|                    auto newn = pos.node()->inner()[0];
 1161|      0|                    return std::make_tuple(
 1162|      0|                        pos.shift() - B, newn->inc(), ts, tail);
 1163|    920|                } else {
 1164|    920|                    auto newn = node_t::copy_inner_n(idx, pos.node(), idx);
 1165|    920|                    return std::make_tuple(pos.shift(), newn, ts, tail);
 1166|    920|                }
 1167|  2.31k|            }
 1168|  2.31k|            IMMER_CATCH (...) {
 1169|      0|                assert(!next || pos.shift() > BL);
  ------------------
  |  Branch (1169:17): [True: 0, False: 0]
  |  Branch (1169:17): [True: 0, False: 0]
  |  Branch (1169:17): [True: 0, False: 0]
  ------------------
 1170|      0|                assert(tail);
  ------------------
  |  Branch (1170:17): [True: 0, False: 0]
  ------------------
 1171|      0|                if (next)
  ------------------
  |  Branch (1171:21): [True: 0, False: 0]
  ------------------
 1172|      0|                    dec_regular(next, pos.shift() - B, last + 1 - ts);
 1173|      0|                dec_leaf(tail, ts);
 1174|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1175|      0|            }
 1176|  2.31k|        }
 1177|  2.31k|    }
_ZN5immer6detail4rbts19slice_right_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEELb0EE10visit_leafIRNS1_8leaf_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_m:
 1181|  1.97k|    {
 1182|  1.97k|        auto old_tail_size = pos.count();
 1183|  1.97k|        auto new_tail_size = pos.index(last) + 1;
 1184|  1.97k|        auto new_tail      = new_tail_size == old_tail_size
  ------------------
  |  Branch (1184:30): [True: 771, False: 1.20k]
  ------------------
 1185|  1.97k|                                 ? pos.node()->inc()
 1186|  1.97k|                                 : node_t::copy_leaf(pos.node(), new_tail_size);
 1187|  1.97k|        return std::make_tuple(0, nullptr, new_tail_size, new_tail);
 1188|  1.97k|    }
_ZN5immer6detail4rbts19slice_right_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEELb0EE13visit_regularIRNS1_11regular_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_m:
 1142|  2.59k|    {
 1143|  2.59k|        auto idx = pos.index(last);
 1144|  2.59k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (1144:13): [Folded, False: 2.59k]
  |  Branch (1144:25): [True: 0, False: 0]
  ------------------
 1145|      0|            return pos.towards_oh(this_t{}, last, idx);
 1146|  2.59k|        } else {
 1147|  2.59k|            using std::get;
 1148|  2.59k|            auto subs = pos.towards_oh(no_collapse_t{}, last, idx);
 1149|  2.59k|            auto next = get<1>(subs);
 1150|  2.59k|            auto ts   = get<2>(subs);
 1151|  2.59k|            auto tail = get<3>(subs);
 1152|  2.59k|            IMMER_TRY {
  ------------------
  |  |   49|  2.59k|#define IMMER_TRY try
  ------------------
 1153|  2.59k|                if (next) {
  ------------------
  |  Branch (1153:21): [True: 384, False: 2.21k]
  ------------------
 1154|    384|                    auto newn = node_t::copy_inner_n(idx + 1, pos.node(), idx);
 1155|    384|                    newn->inner()[idx] = next;
 1156|    384|                    return std::make_tuple(pos.shift(), newn, ts, tail);
 1157|  2.21k|                } else if (idx == 0) {
  ------------------
  |  Branch (1157:28): [True: 1.60k, False: 605]
  ------------------
 1158|  1.60k|                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
 1159|  1.60k|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (1159:28): [Folded, False: 605]
  |  Branch (1159:40): [True: 0, False: 0]
  |  Branch (1159:52): [True: 0, False: 0]
  ------------------
 1160|      0|                    auto newn = pos.node()->inner()[0];
 1161|      0|                    return std::make_tuple(
 1162|      0|                        pos.shift() - B, newn->inc(), ts, tail);
 1163|    605|                } else {
 1164|    605|                    auto newn = node_t::copy_inner_n(idx, pos.node(), idx);
 1165|    605|                    return std::make_tuple(pos.shift(), newn, ts, tail);
 1166|    605|                }
 1167|  2.59k|            }
 1168|  2.59k|            IMMER_CATCH (...) {
 1169|      0|                assert(!next || pos.shift() > BL);
  ------------------
  |  Branch (1169:17): [True: 0, False: 0]
  |  Branch (1169:17): [True: 0, False: 0]
  |  Branch (1169:17): [True: 0, False: 0]
  ------------------
 1170|      0|                assert(tail);
  ------------------
  |  Branch (1170:17): [True: 0, False: 0]
  ------------------
 1171|      0|                if (next)
  ------------------
  |  Branch (1171:21): [True: 0, False: 0]
  ------------------
 1172|      0|                    dec_regular(next, pos.shift() - B, last + 1 - ts);
 1173|      0|                dec_leaf(tail, ts);
 1174|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1175|      0|            }
 1176|  2.59k|        }
 1177|  2.59k|    }
_ZN5immer6detail4rbts8dec_leafINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEvPT_j:
  556|  57.7k|{
  557|  57.7k|    make_leaf_sub_pos(node, n).visit(dec_visitor{});
  558|  57.7k|}
_ZN5immer6detail4rbts19slice_right_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEELb1EE13visit_regularIRNS1_15regular_sub_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_m:
 1142|  5.66k|    {
 1143|  5.66k|        auto idx = pos.index(last);
 1144|  5.66k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (1144:13): [True: 5.66k, Folded]
  |  Branch (1144:25): [True: 3.11k, False: 2.54k]
  ------------------
 1145|  3.11k|            return pos.towards_oh(this_t{}, last, idx);
 1146|  3.11k|        } else {
 1147|  2.54k|            using std::get;
 1148|  2.54k|            auto subs = pos.towards_oh(no_collapse_t{}, last, idx);
 1149|  2.54k|            auto next = get<1>(subs);
 1150|  2.54k|            auto ts   = get<2>(subs);
 1151|  2.54k|            auto tail = get<3>(subs);
 1152|  2.54k|            IMMER_TRY {
  ------------------
  |  |   49|  2.54k|#define IMMER_TRY try
  ------------------
 1153|  2.54k|                if (next) {
  ------------------
  |  Branch (1153:21): [True: 832, False: 1.71k]
  ------------------
 1154|    832|                    auto newn = node_t::copy_inner_n(idx + 1, pos.node(), idx);
 1155|    832|                    newn->inner()[idx] = next;
 1156|    832|                    return std::make_tuple(pos.shift(), newn, ts, tail);
 1157|  1.71k|                } else if (idx == 0) {
  ------------------
  |  Branch (1157:28): [True: 0, False: 1.71k]
  ------------------
 1158|      0|                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
 1159|  1.71k|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (1159:28): [True: 1.71k, Folded]
  |  Branch (1159:40): [True: 1.39k, False: 325]
  |  Branch (1159:52): [True: 1.02k, False: 364]
  ------------------
 1160|  1.02k|                    auto newn = pos.node()->inner()[0];
 1161|  1.02k|                    return std::make_tuple(
 1162|  1.02k|                        pos.shift() - B, newn->inc(), ts, tail);
 1163|  1.02k|                } else {
 1164|    689|                    auto newn = node_t::copy_inner_n(idx, pos.node(), idx);
 1165|    689|                    return std::make_tuple(pos.shift(), newn, ts, tail);
 1166|    689|                }
 1167|  2.54k|            }
 1168|  2.54k|            IMMER_CATCH (...) {
 1169|      0|                assert(!next || pos.shift() > BL);
  ------------------
  |  Branch (1169:17): [True: 0, False: 0]
  |  Branch (1169:17): [True: 0, False: 0]
  |  Branch (1169:17): [True: 0, False: 0]
  ------------------
 1170|      0|                assert(tail);
  ------------------
  |  Branch (1170:17): [True: 0, False: 0]
  ------------------
 1171|      0|                if (next)
  ------------------
  |  Branch (1171:21): [True: 0, False: 0]
  ------------------
 1172|      0|                    dec_regular(next, pos.shift() - B, last + 1 - ts);
 1173|      0|                dec_leaf(tail, ts);
 1174|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1175|      0|            }
 1176|  2.54k|        }
 1177|  5.66k|    }
_ZN5immer6detail4rbts19slice_right_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEELb1EE10visit_leafIRNS1_13full_leaf_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_m:
 1181|  1.28k|    {
 1182|  1.28k|        auto old_tail_size = pos.count();
 1183|  1.28k|        auto new_tail_size = pos.index(last) + 1;
 1184|  1.28k|        auto new_tail      = new_tail_size == old_tail_size
  ------------------
  |  Branch (1184:30): [True: 481, False: 801]
  ------------------
 1185|  1.28k|                                 ? pos.node()->inc()
 1186|  1.28k|                                 : node_t::copy_leaf(pos.node(), new_tail_size);
 1187|  1.28k|        return std::make_tuple(0, nullptr, new_tail_size, new_tail);
 1188|  1.28k|    }
_ZN5immer6detail4rbts19slice_right_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEELb1EE13visit_regularIRNS1_8full_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_m:
 1142|  2.39k|    {
 1143|  2.39k|        auto idx = pos.index(last);
 1144|  2.39k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (1144:13): [True: 2.39k, Folded]
  |  Branch (1144:25): [True: 1.08k, False: 1.31k]
  ------------------
 1145|  1.08k|            return pos.towards_oh(this_t{}, last, idx);
 1146|  1.31k|        } else {
 1147|  1.31k|            using std::get;
 1148|  1.31k|            auto subs = pos.towards_oh(no_collapse_t{}, last, idx);
 1149|  1.31k|            auto next = get<1>(subs);
 1150|  1.31k|            auto ts   = get<2>(subs);
 1151|  1.31k|            auto tail = get<3>(subs);
 1152|  1.31k|            IMMER_TRY {
  ------------------
  |  |   49|  1.31k|#define IMMER_TRY try
  ------------------
 1153|  1.31k|                if (next) {
  ------------------
  |  Branch (1153:21): [True: 287, False: 1.02k]
  ------------------
 1154|    287|                    auto newn = node_t::copy_inner_n(idx + 1, pos.node(), idx);
 1155|    287|                    newn->inner()[idx] = next;
 1156|    287|                    return std::make_tuple(pos.shift(), newn, ts, tail);
 1157|  1.02k|                } else if (idx == 0) {
  ------------------
  |  Branch (1157:28): [True: 0, False: 1.02k]
  ------------------
 1158|      0|                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
 1159|  1.02k|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (1159:28): [True: 1.02k, Folded]
  |  Branch (1159:40): [True: 827, False: 199]
  |  Branch (1159:52): [True: 426, False: 401]
  ------------------
 1160|    426|                    auto newn = pos.node()->inner()[0];
 1161|    426|                    return std::make_tuple(
 1162|    426|                        pos.shift() - B, newn->inc(), ts, tail);
 1163|    600|                } else {
 1164|    600|                    auto newn = node_t::copy_inner_n(idx, pos.node(), idx);
 1165|    600|                    return std::make_tuple(pos.shift(), newn, ts, tail);
 1166|    600|                }
 1167|  1.31k|            }
 1168|  1.31k|            IMMER_CATCH (...) {
 1169|      0|                assert(!next || pos.shift() > BL);
  ------------------
  |  Branch (1169:17): [True: 0, False: 0]
  |  Branch (1169:17): [True: 0, False: 0]
  |  Branch (1169:17): [True: 0, False: 0]
  ------------------
 1170|      0|                assert(tail);
  ------------------
  |  Branch (1170:17): [True: 0, False: 0]
  ------------------
 1171|      0|                if (next)
  ------------------
  |  Branch (1171:21): [True: 0, False: 0]
  ------------------
 1172|      0|                    dec_regular(next, pos.shift() - B, last + 1 - ts);
 1173|      0|                dec_leaf(tail, ts);
 1174|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1175|      0|            }
 1176|  1.31k|        }
 1177|  2.39k|    }
_ZN5immer6detail4rbts19slice_right_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEELb1EE10visit_leafIRNS1_8leaf_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_m:
 1181|    522|    {
 1182|    522|        auto old_tail_size = pos.count();
 1183|    522|        auto new_tail_size = pos.index(last) + 1;
 1184|    522|        auto new_tail      = new_tail_size == old_tail_size
  ------------------
  |  Branch (1184:30): [True: 237, False: 285]
  ------------------
 1185|    522|                                 ? pos.node()->inc()
 1186|    522|                                 : node_t::copy_leaf(pos.node(), new_tail_size);
 1187|    522|        return std::make_tuple(0, nullptr, new_tail_size, new_tail);
 1188|    522|    }
_ZN5immer6detail4rbts18slice_left_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEELb1EE11visit_innerIRNS1_11relaxed_posISC_EEEENSt3__15tupleIJjPSC_EEEOT_m:
 1414|  14.1k|    {
 1415|  14.1k|        auto idx                = pos.subindex(first);
 1416|  14.1k|        auto count              = pos.count();
 1417|  14.1k|        auto left_size          = pos.size_before(idx);
 1418|  14.1k|        auto child_size         = pos.size_sbh(idx, left_size);
 1419|  14.1k|        auto dropped_size       = first;
 1420|  14.1k|        auto child_dropped_size = dropped_size - left_size;
 1421|  14.1k|        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
  ------------------
  |  Branch (1421:13): [True: 14.1k, Folded]
  |  Branch (1421:25): [True: 13.0k, False: 1.05k]
  |  Branch (1421:45): [True: 1.37k, False: 11.6k]
  ------------------
 1422|  1.37k|            return pos.towards_sub_oh(this_t{}, first, idx);
 1423|  12.7k|        } else {
 1424|  12.7k|            using std::get;
 1425|  12.7k|            auto n    = pos.node();
 1426|  12.7k|            auto newc = count - idx;
 1427|  12.7k|            auto newn = node_t::make_inner_r_n(newc);
 1428|  12.7k|            IMMER_TRY {
  ------------------
  |  |   49|  12.7k|#define IMMER_TRY try
  ------------------
 1429|  12.7k|                auto subs     = pos.towards_sub_oh(no_collapse_t{}, first, idx);
 1430|  12.7k|                auto newr     = newn->relaxed();
 1431|  12.7k|                newr->d.count = count - idx;
 1432|  12.7k|                newr->d.sizes[0] = child_size - child_dropped_size;
 1433|  12.7k|                assert(newr->d.sizes[0]);
  ------------------
  |  Branch (1433:17): [True: 12.7k, False: 0]
  ------------------
 1434|  12.7k|                pos.copy_sizes(idx + 1,
 1435|  12.7k|                               newr->d.count - 1,
 1436|  12.7k|                               newr->d.sizes[0],
 1437|  12.7k|                               newr->d.sizes + 1);
 1438|  12.7k|                assert(newr->d.sizes[newr->d.count - 1] ==
  ------------------
  |  Branch (1438:17): [True: 12.7k, False: 0]
  ------------------
 1439|  12.7k|                       pos.size() - dropped_size);
 1440|  12.7k|                newn->inner()[0] = get<1>(subs);
 1441|  12.7k|                std::copy(n->inner() + idx + 1,
 1442|  12.7k|                          n->inner() + count,
 1443|  12.7k|                          newn->inner() + 1);
 1444|  12.7k|                node_t::inc_nodes(newn->inner() + 1, newr->d.count - 1);
 1445|  12.7k|                return std::make_tuple(pos.shift(), newn);
 1446|  12.7k|            }
 1447|  12.7k|            IMMER_CATCH (...) {
 1448|      0|                node_t::delete_inner_r(newn, newc);
 1449|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1450|      0|            }
 1451|  12.7k|        }
 1452|  14.1k|    }
_ZN5immer6detail4rbts18slice_left_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEELb0EE10visit_leafIRNS1_12leaf_sub_posISC_EEEENSt3__15tupleIJjPSC_EEEOT_m:
 1456|  11.3k|    {
 1457|  11.3k|        auto n = node_t::copy_leaf(pos.node(), pos.index(first), pos.count());
 1458|  11.3k|        return std::make_tuple(0, n);
 1459|  11.3k|    }
_ZN5immer6detail4rbts18slice_left_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEELb0EE11visit_innerIRNS1_11relaxed_posISC_EEEENSt3__15tupleIJjPSC_EEEOT_m:
 1414|  92.1k|    {
 1415|  92.1k|        auto idx                = pos.subindex(first);
 1416|  92.1k|        auto count              = pos.count();
 1417|  92.1k|        auto left_size          = pos.size_before(idx);
 1418|  92.1k|        auto child_size         = pos.size_sbh(idx, left_size);
 1419|  92.1k|        auto dropped_size       = first;
 1420|  92.1k|        auto child_dropped_size = dropped_size - left_size;
 1421|  92.1k|        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
  ------------------
  |  Branch (1421:13): [Folded, False: 92.1k]
  |  Branch (1421:25): [True: 0, False: 0]
  |  Branch (1421:45): [True: 0, False: 0]
  ------------------
 1422|      0|            return pos.towards_sub_oh(this_t{}, first, idx);
 1423|  92.1k|        } else {
 1424|  92.1k|            using std::get;
 1425|  92.1k|            auto n    = pos.node();
 1426|  92.1k|            auto newc = count - idx;
 1427|  92.1k|            auto newn = node_t::make_inner_r_n(newc);
 1428|  92.1k|            IMMER_TRY {
  ------------------
  |  |   49|  92.1k|#define IMMER_TRY try
  ------------------
 1429|  92.1k|                auto subs     = pos.towards_sub_oh(no_collapse_t{}, first, idx);
 1430|  92.1k|                auto newr     = newn->relaxed();
 1431|  92.1k|                newr->d.count = count - idx;
 1432|  92.1k|                newr->d.sizes[0] = child_size - child_dropped_size;
 1433|  92.1k|                assert(newr->d.sizes[0]);
  ------------------
  |  Branch (1433:17): [True: 92.1k, False: 0]
  ------------------
 1434|  92.1k|                pos.copy_sizes(idx + 1,
 1435|  92.1k|                               newr->d.count - 1,
 1436|  92.1k|                               newr->d.sizes[0],
 1437|  92.1k|                               newr->d.sizes + 1);
 1438|  92.1k|                assert(newr->d.sizes[newr->d.count - 1] ==
  ------------------
  |  Branch (1438:17): [True: 92.1k, False: 0]
  ------------------
 1439|  92.1k|                       pos.size() - dropped_size);
 1440|  92.1k|                newn->inner()[0] = get<1>(subs);
 1441|  92.1k|                std::copy(n->inner() + idx + 1,
 1442|  92.1k|                          n->inner() + count,
 1443|  92.1k|                          newn->inner() + 1);
 1444|  92.1k|                node_t::inc_nodes(newn->inner() + 1, newr->d.count - 1);
 1445|  92.1k|                return std::make_tuple(pos.shift(), newn);
 1446|  92.1k|            }
 1447|  92.1k|            IMMER_CATCH (...) {
 1448|      0|                node_t::delete_inner_r(newn, newc);
 1449|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1450|      0|            }
 1451|  92.1k|        }
 1452|  92.1k|    }
_ZN5immer6detail4rbts18slice_left_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEELb0EE11visit_innerIRNS1_15regular_sub_posISC_EEEENSt3__15tupleIJjPSC_EEEOT_m:
 1414|  1.40k|    {
 1415|  1.40k|        auto idx                = pos.subindex(first);
 1416|  1.40k|        auto count              = pos.count();
 1417|  1.40k|        auto left_size          = pos.size_before(idx);
 1418|  1.40k|        auto child_size         = pos.size_sbh(idx, left_size);
 1419|  1.40k|        auto dropped_size       = first;
 1420|  1.40k|        auto child_dropped_size = dropped_size - left_size;
 1421|  1.40k|        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
  ------------------
  |  Branch (1421:13): [Folded, False: 1.40k]
  |  Branch (1421:25): [True: 0, False: 0]
  |  Branch (1421:45): [True: 0, False: 0]
  ------------------
 1422|      0|            return pos.towards_sub_oh(this_t{}, first, idx);
 1423|  1.40k|        } else {
 1424|  1.40k|            using std::get;
 1425|  1.40k|            auto n    = pos.node();
 1426|  1.40k|            auto newc = count - idx;
 1427|  1.40k|            auto newn = node_t::make_inner_r_n(newc);
 1428|  1.40k|            IMMER_TRY {
  ------------------
  |  |   49|  1.40k|#define IMMER_TRY try
  ------------------
 1429|  1.40k|                auto subs     = pos.towards_sub_oh(no_collapse_t{}, first, idx);
 1430|  1.40k|                auto newr     = newn->relaxed();
 1431|  1.40k|                newr->d.count = count - idx;
 1432|  1.40k|                newr->d.sizes[0] = child_size - child_dropped_size;
 1433|  1.40k|                assert(newr->d.sizes[0]);
  ------------------
  |  Branch (1433:17): [True: 1.40k, False: 0]
  ------------------
 1434|  1.40k|                pos.copy_sizes(idx + 1,
 1435|  1.40k|                               newr->d.count - 1,
 1436|  1.40k|                               newr->d.sizes[0],
 1437|  1.40k|                               newr->d.sizes + 1);
 1438|  1.40k|                assert(newr->d.sizes[newr->d.count - 1] ==
  ------------------
  |  Branch (1438:17): [True: 1.40k, False: 0]
  ------------------
 1439|  1.40k|                       pos.size() - dropped_size);
 1440|  1.40k|                newn->inner()[0] = get<1>(subs);
 1441|  1.40k|                std::copy(n->inner() + idx + 1,
 1442|  1.40k|                          n->inner() + count,
 1443|  1.40k|                          newn->inner() + 1);
 1444|  1.40k|                node_t::inc_nodes(newn->inner() + 1, newr->d.count - 1);
 1445|  1.40k|                return std::make_tuple(pos.shift(), newn);
 1446|  1.40k|            }
 1447|  1.40k|            IMMER_CATCH (...) {
 1448|      0|                node_t::delete_inner_r(newn, newc);
 1449|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1450|      0|            }
 1451|  1.40k|        }
 1452|  1.40k|    }
_ZN5immer6detail4rbts18slice_left_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEELb0EE10visit_leafIRNS1_13full_leaf_posISC_EEEENSt3__15tupleIJjPSC_EEEOT_m:
 1456|  3.95k|    {
 1457|  3.95k|        auto n = node_t::copy_leaf(pos.node(), pos.index(first), pos.count());
 1458|  3.95k|        return std::make_tuple(0, n);
 1459|  3.95k|    }
_ZN5immer6detail4rbts18slice_left_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEELb0EE11visit_innerIRNS1_8full_posISC_EEEENSt3__15tupleIJjPSC_EEEOT_m:
 1414|  2.39k|    {
 1415|  2.39k|        auto idx                = pos.subindex(first);
 1416|  2.39k|        auto count              = pos.count();
 1417|  2.39k|        auto left_size          = pos.size_before(idx);
 1418|  2.39k|        auto child_size         = pos.size_sbh(idx, left_size);
 1419|  2.39k|        auto dropped_size       = first;
 1420|  2.39k|        auto child_dropped_size = dropped_size - left_size;
 1421|  2.39k|        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
  ------------------
  |  Branch (1421:13): [Folded, False: 2.39k]
  |  Branch (1421:25): [True: 0, False: 0]
  |  Branch (1421:45): [True: 0, False: 0]
  ------------------
 1422|      0|            return pos.towards_sub_oh(this_t{}, first, idx);
 1423|  2.39k|        } else {
 1424|  2.39k|            using std::get;
 1425|  2.39k|            auto n    = pos.node();
 1426|  2.39k|            auto newc = count - idx;
 1427|  2.39k|            auto newn = node_t::make_inner_r_n(newc);
 1428|  2.39k|            IMMER_TRY {
  ------------------
  |  |   49|  2.39k|#define IMMER_TRY try
  ------------------
 1429|  2.39k|                auto subs     = pos.towards_sub_oh(no_collapse_t{}, first, idx);
 1430|  2.39k|                auto newr     = newn->relaxed();
 1431|  2.39k|                newr->d.count = count - idx;
 1432|  2.39k|                newr->d.sizes[0] = child_size - child_dropped_size;
 1433|  2.39k|                assert(newr->d.sizes[0]);
  ------------------
  |  Branch (1433:17): [True: 2.39k, False: 0]
  ------------------
 1434|  2.39k|                pos.copy_sizes(idx + 1,
 1435|  2.39k|                               newr->d.count - 1,
 1436|  2.39k|                               newr->d.sizes[0],
 1437|  2.39k|                               newr->d.sizes + 1);
 1438|  2.39k|                assert(newr->d.sizes[newr->d.count - 1] ==
  ------------------
  |  Branch (1438:17): [True: 2.39k, False: 0]
  ------------------
 1439|  2.39k|                       pos.size() - dropped_size);
 1440|  2.39k|                newn->inner()[0] = get<1>(subs);
 1441|  2.39k|                std::copy(n->inner() + idx + 1,
 1442|  2.39k|                          n->inner() + count,
 1443|  2.39k|                          newn->inner() + 1);
 1444|  2.39k|                node_t::inc_nodes(newn->inner() + 1, newr->d.count - 1);
 1445|  2.39k|                return std::make_tuple(pos.shift(), newn);
 1446|  2.39k|            }
 1447|  2.39k|            IMMER_CATCH (...) {
 1448|      0|                node_t::delete_inner_r(newn, newc);
 1449|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1450|      0|            }
 1451|  2.39k|        }
 1452|  2.39k|    }
_ZN5immer6detail4rbts18slice_left_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEELb1EE11visit_innerIRNS1_15regular_sub_posISC_EEEENSt3__15tupleIJjPSC_EEEOT_m:
 1414|  2.91k|    {
 1415|  2.91k|        auto idx                = pos.subindex(first);
 1416|  2.91k|        auto count              = pos.count();
 1417|  2.91k|        auto left_size          = pos.size_before(idx);
 1418|  2.91k|        auto child_size         = pos.size_sbh(idx, left_size);
 1419|  2.91k|        auto dropped_size       = first;
 1420|  2.91k|        auto child_dropped_size = dropped_size - left_size;
 1421|  2.91k|        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
  ------------------
  |  Branch (1421:13): [True: 2.91k, Folded]
  |  Branch (1421:25): [True: 1.97k, False: 944]
  |  Branch (1421:45): [True: 1.32k, False: 652]
  ------------------
 1422|  1.32k|            return pos.towards_sub_oh(this_t{}, first, idx);
 1423|  1.59k|        } else {
 1424|  1.59k|            using std::get;
 1425|  1.59k|            auto n    = pos.node();
 1426|  1.59k|            auto newc = count - idx;
 1427|  1.59k|            auto newn = node_t::make_inner_r_n(newc);
 1428|  1.59k|            IMMER_TRY {
  ------------------
  |  |   49|  1.59k|#define IMMER_TRY try
  ------------------
 1429|  1.59k|                auto subs     = pos.towards_sub_oh(no_collapse_t{}, first, idx);
 1430|  1.59k|                auto newr     = newn->relaxed();
 1431|  1.59k|                newr->d.count = count - idx;
 1432|  1.59k|                newr->d.sizes[0] = child_size - child_dropped_size;
 1433|  1.59k|                assert(newr->d.sizes[0]);
  ------------------
  |  Branch (1433:17): [True: 1.59k, False: 0]
  ------------------
 1434|  1.59k|                pos.copy_sizes(idx + 1,
 1435|  1.59k|                               newr->d.count - 1,
 1436|  1.59k|                               newr->d.sizes[0],
 1437|  1.59k|                               newr->d.sizes + 1);
 1438|  1.59k|                assert(newr->d.sizes[newr->d.count - 1] ==
  ------------------
  |  Branch (1438:17): [True: 1.59k, False: 0]
  ------------------
 1439|  1.59k|                       pos.size() - dropped_size);
 1440|  1.59k|                newn->inner()[0] = get<1>(subs);
 1441|  1.59k|                std::copy(n->inner() + idx + 1,
 1442|  1.59k|                          n->inner() + count,
 1443|  1.59k|                          newn->inner() + 1);
 1444|  1.59k|                node_t::inc_nodes(newn->inner() + 1, newr->d.count - 1);
 1445|  1.59k|                return std::make_tuple(pos.shift(), newn);
 1446|  1.59k|            }
 1447|  1.59k|            IMMER_CATCH (...) {
 1448|      0|                node_t::delete_inner_r(newn, newc);
 1449|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1450|      0|            }
 1451|  1.59k|        }
 1452|  2.91k|    }
_ZN5immer6detail4rbts18slice_left_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEELb1EE11visit_innerIRNS1_8full_posISC_EEEENSt3__15tupleIJjPSC_EEEOT_m:
 1414|  1.22k|    {
 1415|  1.22k|        auto idx                = pos.subindex(first);
 1416|  1.22k|        auto count              = pos.count();
 1417|  1.22k|        auto left_size          = pos.size_before(idx);
 1418|  1.22k|        auto child_size         = pos.size_sbh(idx, left_size);
 1419|  1.22k|        auto dropped_size       = first;
 1420|  1.22k|        auto child_dropped_size = dropped_size - left_size;
 1421|  1.22k|        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
  ------------------
  |  Branch (1421:13): [True: 1.22k, Folded]
  |  Branch (1421:25): [True: 475, False: 750]
  |  Branch (1421:45): [True: 262, False: 213]
  ------------------
 1422|    262|            return pos.towards_sub_oh(this_t{}, first, idx);
 1423|    963|        } else {
 1424|    963|            using std::get;
 1425|    963|            auto n    = pos.node();
 1426|    963|            auto newc = count - idx;
 1427|    963|            auto newn = node_t::make_inner_r_n(newc);
 1428|    963|            IMMER_TRY {
  ------------------
  |  |   49|    963|#define IMMER_TRY try
  ------------------
 1429|    963|                auto subs     = pos.towards_sub_oh(no_collapse_t{}, first, idx);
 1430|    963|                auto newr     = newn->relaxed();
 1431|    963|                newr->d.count = count - idx;
 1432|    963|                newr->d.sizes[0] = child_size - child_dropped_size;
 1433|    963|                assert(newr->d.sizes[0]);
  ------------------
  |  Branch (1433:17): [True: 963, False: 0]
  ------------------
 1434|    963|                pos.copy_sizes(idx + 1,
 1435|    963|                               newr->d.count - 1,
 1436|    963|                               newr->d.sizes[0],
 1437|    963|                               newr->d.sizes + 1);
 1438|    963|                assert(newr->d.sizes[newr->d.count - 1] ==
  ------------------
  |  Branch (1438:17): [True: 963, False: 0]
  ------------------
 1439|    963|                       pos.size() - dropped_size);
 1440|    963|                newn->inner()[0] = get<1>(subs);
 1441|    963|                std::copy(n->inner() + idx + 1,
 1442|    963|                          n->inner() + count,
 1443|    963|                          newn->inner() + 1);
 1444|    963|                node_t::inc_nodes(newn->inner() + 1, newr->d.count - 1);
 1445|    963|                return std::make_tuple(pos.shift(), newn);
 1446|    963|            }
 1447|    963|            IMMER_CATCH (...) {
 1448|      0|                node_t::delete_inner_r(newn, newc);
 1449|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1450|      0|            }
 1451|    963|        }
 1452|  1.22k|    }
_ZN5immer6detail4rbts12concat_treesINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEENS1_11relaxed_posIT_EEPSE_jSG_jm:
 2001|  3.05k|{
 2002|  3.05k|    return make_singleton_regular_sub_pos(ltail, ltcount)
 2003|  3.05k|        .visit(concat_trees_left_visitor<Node>{},
 2004|  3.05k|               empty_leaf_pos<Node>{},
 2005|  3.05k|               rroot,
 2006|  3.05k|               rshift,
 2007|  3.05k|               rsize)
 2008|  3.05k|        .realize();
 2009|  3.05k|}
_ZN5immer6detail4rbts25concat_trees_left_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10visit_nodeIRNS1_25singleton_regular_sub_posISC_EENS1_14empty_leaf_posISC_EEJRPSC_RjRmEEENS1_17concat_center_posISC_EEOT_OT0_DpOT1_:
 1971|  3.05k|    {
 1972|  3.05k|        return visit_maybe_relaxed_sub(
 1973|  3.05k|            args..., concat_trees_right_visitor<Node>{}, lpos, tpos);
 1974|  3.05k|    }
_ZN5immer6detail4rbts26concat_trees_right_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10visit_nodeIRNS1_11relaxed_posISC_EERNS1_25singleton_regular_sub_posISC_EERNS1_14empty_leaf_posISC_EEEENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1958|  1.73k|    {
 1959|  1.73k|        return concat_inners<Node>(lpos, tpos, rpos);
 1960|  1.73k|    }
_ZN5immer6detail4rbts13concat_innersINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEERNS1_25singleton_regular_sub_posISC_EERNS1_14empty_leaf_posISC_EERNS1_11relaxed_posISC_EEEENS1_17concat_center_posIT_EEOT0_OT1_OT2_:
 1872|  6.87k|{
 1873|  6.87k|    auto lshift = lpos.shift();
 1874|  6.87k|    auto rshift = rpos.shift();
 1875|  6.87k|    if (lshift > rshift) {
  ------------------
  |  Branch (1875:9): [True: 0, False: 6.87k]
  ------------------
 1876|      0|        auto cpos = lpos.last_sub(concat_left_visitor<Node>{}, tpos, rpos);
 1877|      0|        return concat_rebalance<Node>(lpos, cpos, null_sub_pos{});
 1878|  6.87k|    } else if (lshift < rshift) {
  ------------------
  |  Branch (1878:16): [True: 5.34k, False: 1.53k]
  ------------------
 1879|  5.34k|        auto cpos = rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
 1880|  5.34k|        return concat_rebalance<Node>(null_sub_pos{}, cpos, rpos);
 1881|  5.34k|    } else {
 1882|  1.53k|        assert(lshift == rshift);
  ------------------
  |  Branch (1882:9): [True: 1.53k, False: 0]
  ------------------
 1883|  1.53k|        assert(Node::bits_leaf == 0u || lshift > 0);
  ------------------
  |  Branch (1883:9): [Folded, False: 1.53k]
  |  Branch (1883:9): [True: 1.53k, False: 0]
  |  Branch (1883:9): [True: 1.53k, False: 0]
  ------------------
 1884|  1.53k|        auto cpos = lpos.last_sub(concat_both_visitor<Node>{}, tpos, rpos);
 1885|  1.53k|        return concat_rebalance<Node>(lpos, cpos, rpos);
 1886|  1.53k|    }
 1887|  6.87k|}
_ZN5immer6detail4rbts17concat_center_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE8each_subINS1_34concat_rebalance_plan_fill_visitorEJRNS1_21concat_rebalance_planILj2ELj2EEEEEEvT_DpOT0_:
 1512|  1.25M|    {
 1513|  1.25M|        if (shift_ == BL) {
  ------------------
  |  Branch (1513:13): [True: 168k, False: 1.09M]
  ------------------
 1514|   168k|            auto s = size_t{};
 1515|   663k|            for (auto i = count_t{0}; i < count_; ++i) {
  ------------------
  |  Branch (1515:39): [True: 494k, False: 168k]
  ------------------
 1516|   494k|                make_leaf_sub_pos(nodes_[i], sizes_[i] - s).visit(v, args...);
 1517|   494k|                s = sizes_[i];
 1518|   494k|            }
 1519|  1.09M|        } else {
 1520|  2.69M|            for (auto i = count_t{0}; i < count_; ++i)
  ------------------
  |  Branch (1520:39): [True: 1.60M, False: 1.09M]
  ------------------
 1521|  1.60M|                make_relaxed_pos(nodes_[i], shift_ - B, nodes_[i]->relaxed())
 1522|  1.60M|                    .visit(v, args...);
 1523|  1.09M|        }
 1524|  1.25M|    }
_ZN5immer6detail4rbts34concat_rebalance_plan_fill_visitor10visit_nodeIRNS1_12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEENS1_21concat_rebalance_planILj2ELj2EEEEEvOT_RT0_:
 1733|   952k|    {
 1734|   952k|        auto count = p.count();
 1735|   952k|        assert(plan.n < Plan::max_children);
  ------------------
  |  Branch (1735:9): [True: 952k, False: 0]
  ------------------
 1736|   952k|        plan.counts[plan.n++] = count;
 1737|   952k|        plan.total += count;
 1738|   952k|    }
_ZN5immer6detail4rbts34concat_rebalance_plan_fill_visitor10visit_nodeIRNS1_11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEENS1_21concat_rebalance_planILj2ELj2EEEEEvOT_RT0_:
 1733|  4.14M|    {
 1734|  4.14M|        auto count = p.count();
 1735|  4.14M|        assert(plan.n < Plan::max_children);
  ------------------
  |  Branch (1735:9): [True: 4.14M, False: 0]
  ------------------
 1736|  4.14M|        plan.counts[plan.n++] = count;
 1737|  4.14M|        plan.total += count;
 1738|  4.14M|    }
_ZN5immer6detail4rbts21concat_rebalance_planILj2ELj2EE7shuffleEj:
 1762|  1.25M|    {
 1763|       |        // gcc seems to not really understand this code... :(
 1764|  1.25M|#if !defined(_MSC_VER)
 1765|  1.25M|#pragma GCC diagnostic push
 1766|  1.25M|#pragma GCC diagnostic ignored "-Warray-bounds"
 1767|  1.25M|#endif
 1768|  1.25M|        constexpr count_t rrb_extras    = 2;
 1769|  1.25M|        constexpr count_t rrb_invariant = 1;
 1770|  1.25M|        const auto bits                 = shift == BL ? BL : B;
  ------------------
  |  Branch (1770:43): [True: 168k, False: 1.09M]
  ------------------
 1771|  1.25M|        const auto branches             = count_t{1} << bits;
 1772|  1.25M|        const auto optimal              = ((total - 1) >> bits) + 1;
 1773|  1.25M|        count_t i                       = 0;
 1774|  1.32M|        while (n >= optimal + rrb_extras) {
  ------------------
  |  Branch (1774:16): [True: 65.4k, False: 1.25M]
  ------------------
 1775|       |            // skip ok nodes
 1776|   124k|            while (counts[i] > branches - rrb_invariant)
  ------------------
  |  Branch (1776:20): [True: 58.9k, False: 65.4k]
  ------------------
 1777|  58.9k|                i++;
 1778|  65.4k|            assert(i < n);
  ------------------
  |  Branch (1778:13): [True: 65.4k, False: 0]
  ------------------
 1779|       |            // short node, redistribute
 1780|  65.4k|            auto remaining = counts[i];
 1781|   112k|            do {
 1782|   112k|                auto next  = counts[i + 1];
 1783|   112k|                auto count = std::min(remaining + next, branches);
 1784|   112k|                counts[i]  = count;
 1785|   112k|                assert(counts[i]);
  ------------------
  |  Branch (1785:17): [True: 112k, False: 0]
  ------------------
 1786|   112k|                remaining += next - count;
 1787|   112k|                ++i;
 1788|   112k|            } while (remaining > 0);
  ------------------
  |  Branch (1788:22): [True: 47.1k, False: 65.4k]
  ------------------
 1789|       |            // remove node
 1790|  65.4k|            std::move(counts + i + 1, counts + n, counts + i);
 1791|  65.4k|            --n;
 1792|  65.4k|            --i;
 1793|  65.4k|        }
 1794|  1.25M|#if !defined(_MSC_VER)
 1795|  1.25M|#pragma GCC diagnostic pop
 1796|  1.25M|#endif
 1797|  1.25M|    }
_ZNK5immer6detail4rbts17concat_center_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5shiftEv:
 1478|  2.51M|    auto shift() const { return shift_; }
_ZN5immer6detail4rbts13concat_mergerINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEC2EjPjj:
 1577|   249k|        : curr_{counts}
 1578|   249k|        , n_{n}
 1579|   249k|        , result_{
 1580|   249k|              shift + B, node_t::make_inner_r_n(std::min(n_, branches<B>)), 0}
 1581|   249k|    {
 1582|   249k|    }
_ZN5immer6detail4rbts17concat_center_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEC2EjPSC_m:
 1481|  1.25M|        : shift_{s}
 1482|  1.25M|        , count_{1}
 1483|  1.25M|        , nodes_{n0}
 1484|  1.25M|        , sizes_{s0}
 1485|  1.25M|    {
 1486|  1.25M|    }
_ZN5immer6detail4rbts17concat_center_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE8each_subINS1_21concat_merger_visitorEJRNS1_13concat_mergerISC_EEEEEvT_DpOT0_:
 1512|   249k|    {
 1513|   249k|        if (shift_ == BL) {
  ------------------
  |  Branch (1513:13): [True: 50.5k, False: 198k]
  ------------------
 1514|  50.5k|            auto s = size_t{};
 1515|   199k|            for (auto i = count_t{0}; i < count_; ++i) {
  ------------------
  |  Branch (1515:39): [True: 148k, False: 50.5k]
  ------------------
 1516|   148k|                make_leaf_sub_pos(nodes_[i], sizes_[i] - s).visit(v, args...);
 1517|   148k|                s = sizes_[i];
 1518|   148k|            }
 1519|   198k|        } else {
 1520|   592k|            for (auto i = count_t{0}; i < count_; ++i)
  ------------------
  |  Branch (1520:39): [True: 394k, False: 198k]
  ------------------
 1521|   394k|                make_relaxed_pos(nodes_[i], shift_ - B, nodes_[i]->relaxed())
 1522|   394k|                    .visit(v, args...);
 1523|   198k|        }
 1524|   249k|    }
_ZN5immer6detail4rbts21concat_merger_visitor10visit_leafIRNS1_12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEENS1_13concat_mergerISE_EEEEvOT_RT0_:
 1721|   333k|    {
 1722|   333k|        merger.merge_leaf(p);
 1723|   333k|    }
_ZN5immer6detail4rbts13concat_mergerINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10merge_leafIRNS1_12leaf_sub_posISC_EEEEvOT_:
 1614|   333k|    {
 1615|   333k|        auto from       = p.node();
 1616|   333k|        auto from_size  = p.size();
 1617|   333k|        auto from_count = p.count();
 1618|   333k|        assert(from_size);
  ------------------
  |  Branch (1618:9): [True: 333k, False: 0]
  ------------------
 1619|   333k|        if (!to_ && *curr_ == from_count) {
  ------------------
  |  Branch (1619:13): [True: 316k, False: 17.1k]
  |  Branch (1619:21): [True: 307k, False: 8.37k]
  ------------------
 1620|   307k|            add_child(from, from_size);
 1621|   307k|            from->inc();
 1622|   307k|        } else {
 1623|  25.5k|            auto from_offset = count_t{};
 1624|  25.5k|            auto from_data   = from->leaf();
 1625|  34.1k|            do {
 1626|  34.1k|                if (!to_) {
  ------------------
  |  Branch (1626:21): [True: 16.9k, False: 17.1k]
  ------------------
 1627|  16.9k|                    to_        = node_t::make_leaf_n(*curr_);
 1628|  16.9k|                    to_offset_ = 0;
 1629|  16.9k|                }
 1630|  34.1k|                auto data = to_->leaf();
 1631|  34.1k|                auto to_copy =
 1632|  34.1k|                    std::min(from_count - from_offset, *curr_ - to_offset_);
 1633|  34.1k|                detail::uninitialized_copy(from_data + from_offset,
 1634|  34.1k|                                           from_data + from_offset + to_copy,
 1635|  34.1k|                                           data + to_offset_);
 1636|  34.1k|                to_offset_ += to_copy;
 1637|  34.1k|                from_offset += to_copy;
 1638|  34.1k|                if (*curr_ == to_offset_) {
  ------------------
  |  Branch (1638:21): [True: 16.9k, False: 17.1k]
  ------------------
 1639|  16.9k|                    add_child(to_, to_offset_);
 1640|  16.9k|                    to_ = nullptr;
 1641|  16.9k|                }
 1642|  34.1k|            } while (from_offset != from_count);
  ------------------
  |  Branch (1642:22): [True: 8.60k, False: 25.5k]
  ------------------
 1643|  25.5k|        }
 1644|   333k|    }
_ZN5immer6detail4rbts13concat_mergerINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE9add_childEPSC_m:
 1589|  1.71M|    {
 1590|  1.71M|        assert(size);
  ------------------
  |  Branch (1590:9): [True: 1.71M, False: 0]
  ------------------
 1591|  1.71M|        ++curr_;
 1592|  1.71M|        auto parent  = result_.nodes_[result_.count_ - 1];
 1593|  1.71M|        auto relaxed = parent->relaxed();
 1594|  1.71M|        if (relaxed->d.count == branches<B>) {
  ------------------
  |  Branch (1594:13): [True: 217k, False: 1.49M]
  ------------------
 1595|   217k|            assert(result_.count_ < result_t::max_children);
  ------------------
  |  Branch (1595:13): [True: 217k, False: 0]
  ------------------
 1596|   217k|            n_ -= branches<B>;
 1597|   217k|            parent  = node_t::make_inner_r_n(std::min(n_, branches<B>));
 1598|   217k|            relaxed = parent->relaxed();
 1599|   217k|            result_.nodes_[result_.count_] = parent;
 1600|   217k|            result_.sizes_[result_.count_] = result_.sizes_[result_.count_ - 1];
 1601|   217k|            assert(result_.sizes_[result_.count_]);
  ------------------
  |  Branch (1601:13): [True: 217k, False: 0]
  ------------------
 1602|   217k|            ++result_.count_;
 1603|   217k|        }
 1604|  1.71M|        auto idx = relaxed->d.count++;
 1605|  1.71M|        result_.sizes_[result_.count_ - 1] += size;
 1606|  1.71M|        assert(result_.sizes_[result_.count_ - 1]);
  ------------------
  |  Branch (1606:9): [True: 1.71M, False: 0]
  ------------------
 1607|  1.71M|        relaxed->d.sizes[idx] = size + (idx ? relaxed->d.sizes[idx - 1] : 0);
  ------------------
  |  Branch (1607:41): [True: 1.24M, False: 466k]
  ------------------
 1608|  1.71M|        assert(relaxed->d.sizes[idx]);
  ------------------
  |  Branch (1608:9): [True: 1.71M, False: 0]
  ------------------
 1609|  1.71M|        parent->inner()[idx] = p;
 1610|  1.71M|    };
_ZN5immer6detail4rbts21concat_merger_visitor11visit_innerIRNS1_11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEENS1_13concat_mergerISE_EEEEvOT_RT0_:
 1715|  1.33M|    {
 1716|  1.33M|        merger.merge_inner(p);
 1717|  1.33M|    }
_ZN5immer6detail4rbts13concat_mergerINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE11merge_innerIRNS1_11relaxed_posISC_EEEEvOT_:
 1648|  1.33M|    {
 1649|  1.33M|        auto from       = p.node();
 1650|  1.33M|        auto from_size  = p.size();
 1651|  1.33M|        auto from_count = p.count();
 1652|  1.33M|        assert(from_size);
  ------------------
  |  Branch (1652:9): [True: 1.33M, False: 0]
  ------------------
 1653|  1.33M|        if (!to_ && *curr_ == from_count) {
  ------------------
  |  Branch (1653:13): [True: 1.32M, False: 7.90k]
  |  Branch (1653:21): [True: 1.31M, False: 4.09k]
  ------------------
 1654|  1.31M|            add_child(from, from_size);
 1655|  1.31M|            from->inc();
 1656|  1.31M|        } else {
 1657|  12.0k|            auto from_offset = count_t{};
 1658|  12.0k|            auto from_data   = from->inner();
 1659|  15.5k|            do {
 1660|  15.5k|                if (!to_) {
  ------------------
  |  Branch (1660:21): [True: 7.68k, False: 7.90k]
  ------------------
 1661|  7.68k|                    to_        = node_t::make_inner_r_n(*curr_);
 1662|  7.68k|                    to_offset_ = 0;
 1663|  7.68k|                    to_size_   = 0;
 1664|  7.68k|                }
 1665|  15.5k|                auto data = to_->inner();
 1666|  15.5k|                auto to_copy =
 1667|  15.5k|                    std::min(from_count - from_offset, *curr_ - to_offset_);
 1668|  15.5k|                std::copy(from_data + from_offset,
 1669|  15.5k|                          from_data + from_offset + to_copy,
 1670|  15.5k|                          data + to_offset_);
 1671|  15.5k|                node_t::inc_nodes(from_data + from_offset, to_copy);
 1672|  15.5k|                auto sizes = to_->relaxed()->d.sizes;
 1673|  15.5k|                p.copy_sizes(
 1674|  15.5k|                    from_offset, to_copy, to_size_, sizes + to_offset_);
 1675|  15.5k|                to_offset_ += to_copy;
 1676|  15.5k|                from_offset += to_copy;
 1677|  15.5k|                to_size_ = sizes[to_offset_ - 1];
 1678|  15.5k|                assert(to_size_);
  ------------------
  |  Branch (1678:17): [True: 15.5k, False: 0]
  ------------------
 1679|  15.5k|                if (*curr_ == to_offset_) {
  ------------------
  |  Branch (1679:21): [True: 7.68k, False: 7.90k]
  ------------------
 1680|  7.68k|                    to_->relaxed()->d.count = to_offset_;
 1681|  7.68k|                    add_child(to_, to_size_);
 1682|  7.68k|                    to_ = nullptr;
 1683|  7.68k|                }
 1684|  15.5k|            } while (from_offset != from_count);
  ------------------
  |  Branch (1684:22): [True: 3.58k, False: 12.0k]
  ------------------
 1685|  12.0k|        }
 1686|  1.33M|    }
_ZNK5immer6detail4rbts13concat_mergerINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE6finishEv:
 1689|   249k|    {
 1690|   249k|        assert(!to_);
  ------------------
  |  Branch (1690:9): [True: 249k, False: 0]
  ------------------
 1691|   249k|        return result_;
 1692|   249k|    }
_ZN5immer6detail4rbts17concat_center_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE8each_subINS1_11dec_visitorEJEEEvT_DpOT0_:
 1512|   249k|    {
 1513|   249k|        if (shift_ == BL) {
  ------------------
  |  Branch (1513:13): [True: 50.5k, False: 198k]
  ------------------
 1514|  50.5k|            auto s = size_t{};
 1515|   199k|            for (auto i = count_t{0}; i < count_; ++i) {
  ------------------
  |  Branch (1515:39): [True: 148k, False: 50.5k]
  ------------------
 1516|   148k|                make_leaf_sub_pos(nodes_[i], sizes_[i] - s).visit(v, args...);
 1517|   148k|                s = sizes_[i];
 1518|   148k|            }
 1519|   198k|        } else {
 1520|   592k|            for (auto i = count_t{0}; i < count_; ++i)
  ------------------
  |  Branch (1520:39): [True: 394k, False: 198k]
  ------------------
 1521|   394k|                make_relaxed_pos(nodes_[i], shift_ - B, nodes_[i]->relaxed())
 1522|   394k|                    .visit(v, args...);
 1523|   198k|        }
 1524|   249k|    }
_ZN5immer6detail4rbts17concat_center_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEC2EjPSC_mSE_mSE_m:
 1503|   158k|        : shift_{s}
 1504|   158k|        , count_{3}
 1505|   158k|        , nodes_{n0, n1, n2}
 1506|   158k|        , sizes_{s0, s0 + s1, s0 + s1 + s2}
 1507|   158k|    {
 1508|   158k|    }
_ZN5immer6detail4rbts17concat_center_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEC2EjPSC_mSE_m:
 1489|  10.2k|        : shift_{s}
 1490|  10.2k|        , count_{2}
 1491|  10.2k|        , nodes_{n0, n1}
 1492|  10.2k|        , sizes_{s0, s0 + s1}
 1493|  10.2k|    {
 1494|  10.2k|    }
_ZN5immer6detail4rbts20concat_right_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE11visit_innerIRNS1_11relaxed_posISC_EERNS1_25singleton_regular_sub_posISC_EERNS1_14empty_leaf_posISC_EEEENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1917|  5.14k|    {
 1918|  5.14k|        return concat_inners<Node>(lpos, tpos, rpos);
 1919|  5.14k|    }
_ZN5immer6detail4rbts20concat_right_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE11visit_innerIRNS1_15regular_sub_posISC_EERNS1_25singleton_regular_sub_posISC_EERNS1_14empty_leaf_posISC_EEEENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1917|    202|    {
 1918|    202|        return concat_inners<Node>(lpos, tpos, rpos);
 1919|    202|    }
_ZN5immer6detail4rbts13concat_innersINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEERNS1_25singleton_regular_sub_posISC_EERNS1_14empty_leaf_posISC_EERNS1_15regular_sub_posISC_EEEENS1_17concat_center_posIT_EEOT0_OT1_OT2_:
 1872|  1.52k|{
 1873|  1.52k|    auto lshift = lpos.shift();
 1874|  1.52k|    auto rshift = rpos.shift();
 1875|  1.52k|    if (lshift > rshift) {
  ------------------
  |  Branch (1875:9): [True: 0, False: 1.52k]
  ------------------
 1876|      0|        auto cpos = lpos.last_sub(concat_left_visitor<Node>{}, tpos, rpos);
 1877|      0|        return concat_rebalance<Node>(lpos, cpos, null_sub_pos{});
 1878|  1.52k|    } else if (lshift < rshift) {
  ------------------
  |  Branch (1878:16): [True: 611, False: 909]
  ------------------
 1879|    611|        auto cpos = rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
 1880|    611|        return concat_rebalance<Node>(null_sub_pos{}, cpos, rpos);
 1881|    909|    } else {
 1882|    909|        assert(lshift == rshift);
  ------------------
  |  Branch (1882:9): [True: 909, False: 0]
  ------------------
 1883|    909|        assert(Node::bits_leaf == 0u || lshift > 0);
  ------------------
  |  Branch (1883:9): [Folded, False: 909]
  |  Branch (1883:9): [True: 909, False: 0]
  |  Branch (1883:9): [True: 909, False: 0]
  ------------------
 1884|    909|        auto cpos = lpos.last_sub(concat_both_visitor<Node>{}, tpos, rpos);
 1885|    909|        return concat_rebalance<Node>(lpos, cpos, rpos);
 1886|    909|    }
 1887|  1.52k|}
_ZN5immer6detail4rbts20concat_right_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE11visit_innerIRNS1_8full_posISC_EERNS1_25singleton_regular_sub_posISC_EERNS1_14empty_leaf_posISC_EEEENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1917|  1.11k|    {
 1918|  1.11k|        return concat_inners<Node>(lpos, tpos, rpos);
 1919|  1.11k|    }
_ZN5immer6detail4rbts13concat_innersINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEERNS1_25singleton_regular_sub_posISC_EERNS1_14empty_leaf_posISC_EERNS1_8full_posISC_EEEENS1_17concat_center_posIT_EEOT0_OT1_OT2_:
 1872|  1.11k|{
 1873|  1.11k|    auto lshift = lpos.shift();
 1874|  1.11k|    auto rshift = rpos.shift();
 1875|  1.11k|    if (lshift > rshift) {
  ------------------
  |  Branch (1875:9): [True: 0, False: 1.11k]
  ------------------
 1876|      0|        auto cpos = lpos.last_sub(concat_left_visitor<Node>{}, tpos, rpos);
 1877|      0|        return concat_rebalance<Node>(lpos, cpos, null_sub_pos{});
 1878|  1.11k|    } else if (lshift < rshift) {
  ------------------
  |  Branch (1878:16): [True: 502, False: 611]
  ------------------
 1879|    502|        auto cpos = rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
 1880|    502|        return concat_rebalance<Node>(null_sub_pos{}, cpos, rpos);
 1881|    611|    } else {
 1882|    611|        assert(lshift == rshift);
  ------------------
  |  Branch (1882:9): [True: 611, False: 0]
  ------------------
 1883|    611|        assert(Node::bits_leaf == 0u || lshift > 0);
  ------------------
  |  Branch (1883:9): [Folded, False: 611]
  |  Branch (1883:9): [True: 611, False: 0]
  |  Branch (1883:9): [True: 611, False: 0]
  ------------------
 1884|    611|        auto cpos = lpos.last_sub(concat_both_visitor<Node>{}, tpos, rpos);
 1885|    611|        return concat_rebalance<Node>(lpos, cpos, rpos);
 1886|    611|    }
 1887|  1.11k|}
_ZN5immer6detail4rbts16concat_rebalanceINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEENS1_12null_sub_posERNS1_17concat_center_posISC_EERNS1_8full_posISC_EEEENSE_IT_EEOT0_OT1_OT2_:
 1823|  1.03k|{
 1824|  1.03k|    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
 1825|  1.03k|    plan.fill(lpos, cpos, rpos);
 1826|  1.03k|    plan.shuffle(cpos.shift());
 1827|  1.03k|    IMMER_TRY {
  ------------------
  |  |   49|  1.03k|#define IMMER_TRY try
  ------------------
 1828|  1.03k|        return plan.merge(lpos, cpos, rpos);
 1829|  1.03k|    }
 1830|  1.03k|    IMMER_CATCH (...) {
 1831|      0|        cpos.each_sub(dec_visitor{});
 1832|      0|        IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1833|      0|    }
 1834|  1.03k|}
_ZN5immer6detail4rbts21concat_rebalance_planILj2ELj2EE4fillIRNS1_12null_sub_posERNS1_17concat_center_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEERNS1_8full_posISH_EEEEvOT_OT0_OT1_:
 1752|  2.30k|    {
 1753|  2.30k|        assert(n == 0u);
  ------------------
  |  Branch (1753:9): [True: 2.30k, False: 0]
  ------------------
 1754|  2.30k|        assert(total == 0u);
  ------------------
  |  Branch (1754:9): [True: 2.30k, False: 0]
  ------------------
 1755|  2.30k|        using visitor_t = concat_rebalance_plan_fill_visitor;
 1756|  2.30k|        lpos.each_left_sub(visitor_t{}, *this);
 1757|  2.30k|        cpos.each_sub(visitor_t{}, *this);
 1758|  2.30k|        rpos.each_right_sub(visitor_t{}, *this);
 1759|  2.30k|    }
_ZN5immer6detail4rbts34concat_rebalance_plan_fill_visitor10visit_nodeIRNS1_13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEENS1_21concat_rebalance_planILj2ELj2EEEEEvOT_RT0_:
 1733|  98.3k|    {
 1734|  98.3k|        auto count = p.count();
 1735|  98.3k|        assert(plan.n < Plan::max_children);
  ------------------
  |  Branch (1735:9): [True: 98.3k, False: 0]
  ------------------
 1736|  98.3k|        plan.counts[plan.n++] = count;
 1737|  98.3k|        plan.total += count;
 1738|  98.3k|    }
_ZN5immer6detail4rbts34concat_rebalance_plan_fill_visitor10visit_nodeIRNS1_8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEENS1_21concat_rebalance_planILj2ELj2EEEEEvOT_RT0_:
 1733|   150k|    {
 1734|   150k|        auto count = p.count();
 1735|   150k|        assert(plan.n < Plan::max_children);
  ------------------
  |  Branch (1735:9): [True: 150k, False: 0]
  ------------------
 1736|   150k|        plan.counts[plan.n++] = count;
 1737|   150k|        plan.total += count;
 1738|   150k|    }
_ZN5immer6detail4rbts21concat_rebalance_planILj2ELj2EE5mergeIRNS1_12null_sub_posERNS1_17concat_center_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEERNS1_8full_posISH_EEEENS7_INSt3__15decayIT0_E4type6node_tEEEOT_OSP_OT1_:
 1802|  1.03k|    {
 1803|  1.03k|        using node_t    = node_type<CPos>;
 1804|  1.03k|        using merger_t  = concat_merger<node_t>;
 1805|  1.03k|        using visitor_t = concat_merger_visitor;
 1806|  1.03k|        auto merger     = merger_t{cpos.shift(), counts, n};
 1807|  1.03k|        IMMER_TRY {
  ------------------
  |  |   49|  1.03k|#define IMMER_TRY try
  ------------------
 1808|  1.03k|            lpos.each_left_sub(visitor_t{}, merger);
 1809|  1.03k|            cpos.each_sub(visitor_t{}, merger);
 1810|  1.03k|            rpos.each_right_sub(visitor_t{}, merger);
 1811|  1.03k|            cpos.each_sub(dec_visitor{});
 1812|  1.03k|            return merger.finish();
 1813|  1.03k|        }
 1814|  1.03k|        IMMER_CATCH (...) {
 1815|      0|            merger.abort();
 1816|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1817|      0|        }
 1818|  1.03k|    }
_ZN5immer6detail4rbts21concat_merger_visitor10visit_leafIRNS1_13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEENS1_13concat_mergerISE_EEEEvOT_RT0_:
 1721|  22.0k|    {
 1722|  22.0k|        merger.merge_leaf(p);
 1723|  22.0k|    }
_ZN5immer6detail4rbts13concat_mergerINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10merge_leafIRNS1_13full_leaf_posISC_EEEEvOT_:
 1614|  22.0k|    {
 1615|  22.0k|        auto from       = p.node();
 1616|  22.0k|        auto from_size  = p.size();
 1617|  22.0k|        auto from_count = p.count();
 1618|  22.0k|        assert(from_size);
  ------------------
  |  Branch (1618:9): [True: 22.0k, False: 0]
  ------------------
 1619|  22.0k|        if (!to_ && *curr_ == from_count) {
  ------------------
  |  Branch (1619:13): [True: 22.0k, False: 0]
  |  Branch (1619:21): [True: 22.0k, False: 0]
  ------------------
 1620|  22.0k|            add_child(from, from_size);
 1621|  22.0k|            from->inc();
 1622|  22.0k|        } else {
 1623|      0|            auto from_offset = count_t{};
 1624|      0|            auto from_data   = from->leaf();
 1625|      0|            do {
 1626|      0|                if (!to_) {
  ------------------
  |  Branch (1626:21): [True: 0, False: 0]
  ------------------
 1627|      0|                    to_        = node_t::make_leaf_n(*curr_);
 1628|      0|                    to_offset_ = 0;
 1629|      0|                }
 1630|      0|                auto data = to_->leaf();
 1631|      0|                auto to_copy =
 1632|      0|                    std::min(from_count - from_offset, *curr_ - to_offset_);
 1633|      0|                detail::uninitialized_copy(from_data + from_offset,
 1634|      0|                                           from_data + from_offset + to_copy,
 1635|      0|                                           data + to_offset_);
 1636|      0|                to_offset_ += to_copy;
 1637|      0|                from_offset += to_copy;
 1638|      0|                if (*curr_ == to_offset_) {
  ------------------
  |  Branch (1638:21): [True: 0, False: 0]
  ------------------
 1639|      0|                    add_child(to_, to_offset_);
 1640|      0|                    to_ = nullptr;
 1641|      0|                }
 1642|      0|            } while (from_offset != from_count);
  ------------------
  |  Branch (1642:22): [True: 0, False: 0]
  ------------------
 1643|      0|        }
 1644|  22.0k|    }
_ZN5immer6detail4rbts21concat_merger_visitor11visit_innerIRNS1_8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEENS1_13concat_mergerISE_EEEEvOT_RT0_:
 1715|  26.4k|    {
 1716|  26.4k|        merger.merge_inner(p);
 1717|  26.4k|    }
_ZN5immer6detail4rbts13concat_mergerINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE11merge_innerIRNS1_8full_posISC_EEEEvOT_:
 1648|  26.4k|    {
 1649|  26.4k|        auto from       = p.node();
 1650|  26.4k|        auto from_size  = p.size();
 1651|  26.4k|        auto from_count = p.count();
 1652|  26.4k|        assert(from_size);
  ------------------
  |  Branch (1652:9): [True: 26.4k, False: 0]
  ------------------
 1653|  26.4k|        if (!to_ && *curr_ == from_count) {
  ------------------
  |  Branch (1653:13): [True: 26.4k, False: 0]
  |  Branch (1653:21): [True: 26.4k, False: 0]
  ------------------
 1654|  26.4k|            add_child(from, from_size);
 1655|  26.4k|            from->inc();
 1656|  26.4k|        } else {
 1657|      0|            auto from_offset = count_t{};
 1658|      0|            auto from_data   = from->inner();
 1659|      0|            do {
 1660|      0|                if (!to_) {
  ------------------
  |  Branch (1660:21): [True: 0, False: 0]
  ------------------
 1661|      0|                    to_        = node_t::make_inner_r_n(*curr_);
 1662|      0|                    to_offset_ = 0;
 1663|      0|                    to_size_   = 0;
 1664|      0|                }
 1665|      0|                auto data = to_->inner();
 1666|      0|                auto to_copy =
 1667|      0|                    std::min(from_count - from_offset, *curr_ - to_offset_);
 1668|      0|                std::copy(from_data + from_offset,
 1669|      0|                          from_data + from_offset + to_copy,
 1670|      0|                          data + to_offset_);
 1671|      0|                node_t::inc_nodes(from_data + from_offset, to_copy);
 1672|      0|                auto sizes = to_->relaxed()->d.sizes;
 1673|      0|                p.copy_sizes(
 1674|      0|                    from_offset, to_copy, to_size_, sizes + to_offset_);
 1675|      0|                to_offset_ += to_copy;
 1676|      0|                from_offset += to_copy;
 1677|      0|                to_size_ = sizes[to_offset_ - 1];
 1678|      0|                assert(to_size_);
  ------------------
  |  Branch (1678:17): [True: 0, False: 0]
  ------------------
 1679|      0|                if (*curr_ == to_offset_) {
  ------------------
  |  Branch (1679:21): [True: 0, False: 0]
  ------------------
 1680|      0|                    to_->relaxed()->d.count = to_offset_;
 1681|      0|                    add_child(to_, to_size_);
 1682|      0|                    to_ = nullptr;
 1683|      0|                }
 1684|      0|            } while (from_offset != from_count);
  ------------------
  |  Branch (1684:22): [True: 0, False: 0]
  ------------------
 1685|      0|        }
 1686|  26.4k|    }
_ZN5immer6detail4rbts19concat_both_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10visit_leafIRNS1_12leaf_sub_posISC_EERNS1_14empty_leaf_posISC_EERNS1_8full_posISC_EEEENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1944|    611|    {
 1945|    611|        return rpos.first_sub_leaf(concat_right_visitor<Node>{}, lpos, tpos);
 1946|    611|    }
_ZN5immer6detail4rbts20concat_right_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10visit_leafIRNS1_13full_leaf_posISC_EERNS1_12leaf_sub_posISC_EERNS1_14empty_leaf_posISC_EEEENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1924|  1.52k|    {
 1925|  1.52k|        return concat_leafs<Node>(lpos, tpos, rpos);
 1926|  1.52k|    }
_ZN5immer6detail4rbts12concat_leafsINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEERNS1_12leaf_sub_posISC_EERNS1_14empty_leaf_posISC_EERNS1_13full_leaf_posISC_EEEENS1_17concat_center_posIT_EEOT0_OT1_OT2_:
 1838|  1.52k|{
 1839|  1.52k|    static_assert(Node::bits >= 2, "");
 1840|  1.52k|    assert(lpos.shift() == tpos.shift());
  ------------------
  |  Branch (1840:5): [True: 1.52k, False: 0]
  ------------------
 1841|  1.52k|    assert(lpos.shift() == rpos.shift());
  ------------------
  |  Branch (1841:5): [True: 1.52k, False: 0]
  ------------------
 1842|  1.52k|    assert(lpos.shift() == 0);
  ------------------
  |  Branch (1842:5): [True: 1.52k, False: 0]
  ------------------
 1843|  1.52k|    if (tpos.count() > 0)
  ------------------
  |  Branch (1843:9): [True: 0, False: 1.52k]
  ------------------
 1844|      0|        return {
 1845|      0|            Node::bits_leaf,
 1846|      0|            lpos.node()->inc(),
 1847|      0|            lpos.count(),
 1848|      0|            tpos.node()->inc(),
 1849|      0|            tpos.count(),
 1850|      0|            rpos.node()->inc(),
 1851|      0|            rpos.count(),
 1852|      0|        };
 1853|  1.52k|    else
 1854|  1.52k|        return {
 1855|  1.52k|            Node::bits_leaf,
 1856|  1.52k|            lpos.node()->inc(),
 1857|  1.52k|            lpos.count(),
 1858|  1.52k|            rpos.node()->inc(),
 1859|  1.52k|            rpos.count(),
 1860|  1.52k|        };
 1861|  1.52k|}
_ZN5immer6detail4rbts16concat_rebalanceINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEERNS1_25singleton_regular_sub_posISC_EERNS1_17concat_center_posISC_EERNS1_8full_posISC_EEEENSG_IT_EEOT0_OT1_OT2_:
 1823|    611|{
 1824|    611|    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
 1825|    611|    plan.fill(lpos, cpos, rpos);
 1826|    611|    plan.shuffle(cpos.shift());
 1827|    611|    IMMER_TRY {
  ------------------
  |  |   49|    611|#define IMMER_TRY try
  ------------------
 1828|    611|        return plan.merge(lpos, cpos, rpos);
 1829|    611|    }
 1830|    611|    IMMER_CATCH (...) {
 1831|      0|        cpos.each_sub(dec_visitor{});
 1832|      0|        IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1833|      0|    }
 1834|    611|}
_ZN5immer6detail4rbts21concat_rebalance_planILj2ELj2EE4fillIRNS1_25singleton_regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEERNS1_17concat_center_posISF_EERNS1_8full_posISF_EEEEvOT_OT0_OT1_:
 1752|  1.62k|    {
 1753|  1.62k|        assert(n == 0u);
  ------------------
  |  Branch (1753:9): [True: 1.62k, False: 0]
  ------------------
 1754|  1.62k|        assert(total == 0u);
  ------------------
  |  Branch (1754:9): [True: 1.62k, False: 0]
  ------------------
 1755|  1.62k|        using visitor_t = concat_rebalance_plan_fill_visitor;
 1756|  1.62k|        lpos.each_left_sub(visitor_t{}, *this);
 1757|  1.62k|        cpos.each_sub(visitor_t{}, *this);
 1758|  1.62k|        rpos.each_right_sub(visitor_t{}, *this);
 1759|  1.62k|    }
_ZN5immer6detail4rbts21concat_rebalance_planILj2ELj2EE5mergeIRNS1_25singleton_regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEERNS1_17concat_center_posISF_EERNS1_8full_posISF_EEEENSI_INSt3__15decayIT0_E4type6node_tEEEOT_OSQ_OT1_:
 1802|    611|    {
 1803|    611|        using node_t    = node_type<CPos>;
 1804|    611|        using merger_t  = concat_merger<node_t>;
 1805|    611|        using visitor_t = concat_merger_visitor;
 1806|    611|        auto merger     = merger_t{cpos.shift(), counts, n};
 1807|    611|        IMMER_TRY {
  ------------------
  |  |   49|    611|#define IMMER_TRY try
  ------------------
 1808|    611|            lpos.each_left_sub(visitor_t{}, merger);
 1809|    611|            cpos.each_sub(visitor_t{}, merger);
 1810|    611|            rpos.each_right_sub(visitor_t{}, merger);
 1811|    611|            cpos.each_sub(dec_visitor{});
 1812|    611|            return merger.finish();
 1813|    611|        }
 1814|    611|        IMMER_CATCH (...) {
 1815|      0|            merger.abort();
 1816|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1817|      0|        }
 1818|    611|    }
_ZN5immer6detail4rbts16concat_rebalanceINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEENS1_12null_sub_posERNS1_17concat_center_posISC_EERNS1_15regular_sub_posISC_EEEENSE_IT_EEOT0_OT1_OT2_:
 1823|  1.83k|{
 1824|  1.83k|    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
 1825|  1.83k|    plan.fill(lpos, cpos, rpos);
 1826|  1.83k|    plan.shuffle(cpos.shift());
 1827|  1.83k|    IMMER_TRY {
  ------------------
  |  |   49|  1.83k|#define IMMER_TRY try
  ------------------
 1828|  1.83k|        return plan.merge(lpos, cpos, rpos);
 1829|  1.83k|    }
 1830|  1.83k|    IMMER_CATCH (...) {
 1831|      0|        cpos.each_sub(dec_visitor{});
 1832|      0|        IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1833|      0|    }
 1834|  1.83k|}
_ZN5immer6detail4rbts21concat_rebalance_planILj2ELj2EE4fillIRNS1_12null_sub_posERNS1_17concat_center_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEERNS1_15regular_sub_posISH_EEEEvOT_OT0_OT1_:
 1752|  4.16k|    {
 1753|  4.16k|        assert(n == 0u);
  ------------------
  |  Branch (1753:9): [True: 4.16k, False: 0]
  ------------------
 1754|  4.16k|        assert(total == 0u);
  ------------------
  |  Branch (1754:9): [True: 4.16k, False: 0]
  ------------------
 1755|  4.16k|        using visitor_t = concat_rebalance_plan_fill_visitor;
 1756|  4.16k|        lpos.each_left_sub(visitor_t{}, *this);
 1757|  4.16k|        cpos.each_sub(visitor_t{}, *this);
 1758|  4.16k|        rpos.each_right_sub(visitor_t{}, *this);
 1759|  4.16k|    }
_ZN5immer6detail4rbts34concat_rebalance_plan_fill_visitor10visit_nodeIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEENS1_21concat_rebalance_planILj2ELj2EEEEEvOT_RT0_:
 1733|  96.8k|    {
 1734|  96.8k|        auto count = p.count();
 1735|  96.8k|        assert(plan.n < Plan::max_children);
  ------------------
  |  Branch (1735:9): [True: 96.8k, False: 0]
  ------------------
 1736|  96.8k|        plan.counts[plan.n++] = count;
 1737|  96.8k|        plan.total += count;
 1738|  96.8k|    }
_ZN5immer6detail4rbts21concat_rebalance_planILj2ELj2EE5mergeIRNS1_12null_sub_posERNS1_17concat_center_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEERNS1_15regular_sub_posISH_EEEENS7_INSt3__15decayIT0_E4type6node_tEEEOT_OSP_OT1_:
 1802|  1.83k|    {
 1803|  1.83k|        using node_t    = node_type<CPos>;
 1804|  1.83k|        using merger_t  = concat_merger<node_t>;
 1805|  1.83k|        using visitor_t = concat_merger_visitor;
 1806|  1.83k|        auto merger     = merger_t{cpos.shift(), counts, n};
 1807|  1.83k|        IMMER_TRY {
  ------------------
  |  |   49|  1.83k|#define IMMER_TRY try
  ------------------
 1808|  1.83k|            lpos.each_left_sub(visitor_t{}, merger);
 1809|  1.83k|            cpos.each_sub(visitor_t{}, merger);
 1810|  1.83k|            rpos.each_right_sub(visitor_t{}, merger);
 1811|  1.83k|            cpos.each_sub(dec_visitor{});
 1812|  1.83k|            return merger.finish();
 1813|  1.83k|        }
 1814|  1.83k|        IMMER_CATCH (...) {
 1815|      0|            merger.abort();
 1816|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1817|      0|        }
 1818|  1.83k|    }
_ZN5immer6detail4rbts21concat_merger_visitor11visit_innerIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEENS1_13concat_mergerISE_EEEEvOT_RT0_:
 1715|  15.2k|    {
 1716|  15.2k|        merger.merge_inner(p);
 1717|  15.2k|    }
_ZN5immer6detail4rbts13concat_mergerINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE11merge_innerIRNS1_15regular_sub_posISC_EEEEvOT_:
 1648|  15.2k|    {
 1649|  15.2k|        auto from       = p.node();
 1650|  15.2k|        auto from_size  = p.size();
 1651|  15.2k|        auto from_count = p.count();
 1652|  15.2k|        assert(from_size);
  ------------------
  |  Branch (1652:9): [True: 15.2k, False: 0]
  ------------------
 1653|  15.2k|        if (!to_ && *curr_ == from_count) {
  ------------------
  |  Branch (1653:13): [True: 14.7k, False: 516]
  |  Branch (1653:21): [True: 14.7k, False: 0]
  ------------------
 1654|  14.7k|            add_child(from, from_size);
 1655|  14.7k|            from->inc();
 1656|  14.7k|        } else {
 1657|    516|            auto from_offset = count_t{};
 1658|    516|            auto from_data   = from->inner();
 1659|  1.03k|            do {
 1660|  1.03k|                if (!to_) {
  ------------------
  |  Branch (1660:21): [True: 516, False: 516]
  ------------------
 1661|    516|                    to_        = node_t::make_inner_r_n(*curr_);
 1662|    516|                    to_offset_ = 0;
 1663|    516|                    to_size_   = 0;
 1664|    516|                }
 1665|  1.03k|                auto data = to_->inner();
 1666|  1.03k|                auto to_copy =
 1667|  1.03k|                    std::min(from_count - from_offset, *curr_ - to_offset_);
 1668|  1.03k|                std::copy(from_data + from_offset,
 1669|  1.03k|                          from_data + from_offset + to_copy,
 1670|  1.03k|                          data + to_offset_);
 1671|  1.03k|                node_t::inc_nodes(from_data + from_offset, to_copy);
 1672|  1.03k|                auto sizes = to_->relaxed()->d.sizes;
 1673|  1.03k|                p.copy_sizes(
 1674|  1.03k|                    from_offset, to_copy, to_size_, sizes + to_offset_);
 1675|  1.03k|                to_offset_ += to_copy;
 1676|  1.03k|                from_offset += to_copy;
 1677|  1.03k|                to_size_ = sizes[to_offset_ - 1];
 1678|  1.03k|                assert(to_size_);
  ------------------
  |  Branch (1678:17): [True: 1.03k, False: 0]
  ------------------
 1679|  1.03k|                if (*curr_ == to_offset_) {
  ------------------
  |  Branch (1679:21): [True: 516, False: 516]
  ------------------
 1680|    516|                    to_->relaxed()->d.count = to_offset_;
 1681|    516|                    add_child(to_, to_size_);
 1682|    516|                    to_ = nullptr;
 1683|    516|                }
 1684|  1.03k|            } while (from_offset != from_count);
  ------------------
  |  Branch (1684:22): [True: 516, False: 516]
  ------------------
 1685|    516|        }
 1686|  15.2k|    }
_ZN5immer6detail4rbts19concat_both_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10visit_leafIRNS1_12leaf_sub_posISC_EERNS1_14empty_leaf_posISC_EERNS1_15regular_sub_posISC_EEEENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1944|    909|    {
 1945|    909|        return rpos.first_sub_leaf(concat_right_visitor<Node>{}, lpos, tpos);
 1946|    909|    }
_ZN5immer6detail4rbts20concat_right_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10visit_leafIRNS1_12leaf_sub_posISC_EESH_RNS1_14empty_leaf_posISC_EEEENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1924|  1.53k|    {
 1925|  1.53k|        return concat_leafs<Node>(lpos, tpos, rpos);
 1926|  1.53k|    }
_ZN5immer6detail4rbts12concat_leafsINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEERNS1_12leaf_sub_posISC_EERNS1_14empty_leaf_posISC_EESF_EENS1_17concat_center_posIT_EEOT0_OT1_OT2_:
 1838|  1.53k|{
 1839|  1.53k|    static_assert(Node::bits >= 2, "");
 1840|  1.53k|    assert(lpos.shift() == tpos.shift());
  ------------------
  |  Branch (1840:5): [True: 1.53k, False: 0]
  ------------------
 1841|  1.53k|    assert(lpos.shift() == rpos.shift());
  ------------------
  |  Branch (1841:5): [True: 1.53k, False: 0]
  ------------------
 1842|  1.53k|    assert(lpos.shift() == 0);
  ------------------
  |  Branch (1842:5): [True: 1.53k, False: 0]
  ------------------
 1843|  1.53k|    if (tpos.count() > 0)
  ------------------
  |  Branch (1843:9): [True: 0, False: 1.53k]
  ------------------
 1844|      0|        return {
 1845|      0|            Node::bits_leaf,
 1846|      0|            lpos.node()->inc(),
 1847|      0|            lpos.count(),
 1848|      0|            tpos.node()->inc(),
 1849|      0|            tpos.count(),
 1850|      0|            rpos.node()->inc(),
 1851|      0|            rpos.count(),
 1852|      0|        };
 1853|  1.53k|    else
 1854|  1.53k|        return {
 1855|  1.53k|            Node::bits_leaf,
 1856|  1.53k|            lpos.node()->inc(),
 1857|  1.53k|            lpos.count(),
 1858|  1.53k|            rpos.node()->inc(),
 1859|  1.53k|            rpos.count(),
 1860|  1.53k|        };
 1861|  1.53k|}
_ZN5immer6detail4rbts16concat_rebalanceINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEERNS1_25singleton_regular_sub_posISC_EERNS1_17concat_center_posISC_EERNS1_15regular_sub_posISC_EEEENSG_IT_EEOT0_OT1_OT2_:
 1823|    909|{
 1824|    909|    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
 1825|    909|    plan.fill(lpos, cpos, rpos);
 1826|    909|    plan.shuffle(cpos.shift());
 1827|    909|    IMMER_TRY {
  ------------------
  |  |   49|    909|#define IMMER_TRY try
  ------------------
 1828|    909|        return plan.merge(lpos, cpos, rpos);
 1829|    909|    }
 1830|    909|    IMMER_CATCH (...) {
 1831|      0|        cpos.each_sub(dec_visitor{});
 1832|      0|        IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1833|      0|    }
 1834|    909|}
_ZN5immer6detail4rbts21concat_rebalance_planILj2ELj2EE4fillIRNS1_25singleton_regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEERNS1_17concat_center_posISF_EERNS1_15regular_sub_posISF_EEEEvOT_OT0_OT1_:
 1752|  3.56k|    {
 1753|  3.56k|        assert(n == 0u);
  ------------------
  |  Branch (1753:9): [True: 3.56k, False: 0]
  ------------------
 1754|  3.56k|        assert(total == 0u);
  ------------------
  |  Branch (1754:9): [True: 3.56k, False: 0]
  ------------------
 1755|  3.56k|        using visitor_t = concat_rebalance_plan_fill_visitor;
 1756|  3.56k|        lpos.each_left_sub(visitor_t{}, *this);
 1757|  3.56k|        cpos.each_sub(visitor_t{}, *this);
 1758|  3.56k|        rpos.each_right_sub(visitor_t{}, *this);
 1759|  3.56k|    }
_ZN5immer6detail4rbts21concat_rebalance_planILj2ELj2EE5mergeIRNS1_25singleton_regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEERNS1_17concat_center_posISF_EERNS1_15regular_sub_posISF_EEEENSI_INSt3__15decayIT0_E4type6node_tEEEOT_OSQ_OT1_:
 1802|    909|    {
 1803|    909|        using node_t    = node_type<CPos>;
 1804|    909|        using merger_t  = concat_merger<node_t>;
 1805|    909|        using visitor_t = concat_merger_visitor;
 1806|    909|        auto merger     = merger_t{cpos.shift(), counts, n};
 1807|    909|        IMMER_TRY {
  ------------------
  |  |   49|    909|#define IMMER_TRY try
  ------------------
 1808|    909|            lpos.each_left_sub(visitor_t{}, merger);
 1809|    909|            cpos.each_sub(visitor_t{}, merger);
 1810|    909|            rpos.each_right_sub(visitor_t{}, merger);
 1811|    909|            cpos.each_sub(dec_visitor{});
 1812|    909|            return merger.finish();
 1813|    909|        }
 1814|    909|        IMMER_CATCH (...) {
 1815|      0|            merger.abort();
 1816|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1817|      0|        }
 1818|    909|    }
_ZN5immer6detail4rbts16concat_rebalanceINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEENS1_12null_sub_posERNS1_17concat_center_posISC_EERNS1_11relaxed_posISC_EEEENSE_IT_EEOT0_OT1_OT2_:
 1823|  9.51k|{
 1824|  9.51k|    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
 1825|  9.51k|    plan.fill(lpos, cpos, rpos);
 1826|  9.51k|    plan.shuffle(cpos.shift());
 1827|  9.51k|    IMMER_TRY {
  ------------------
  |  |   49|  9.51k|#define IMMER_TRY try
  ------------------
 1828|  9.51k|        return plan.merge(lpos, cpos, rpos);
 1829|  9.51k|    }
 1830|  9.51k|    IMMER_CATCH (...) {
 1831|      0|        cpos.each_sub(dec_visitor{});
 1832|      0|        IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1833|      0|    }
 1834|  9.51k|}
_ZN5immer6detail4rbts21concat_rebalance_planILj2ELj2EE4fillIRNS1_12null_sub_posERNS1_17concat_center_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEERNS1_11relaxed_posISH_EEEEvOT_OT0_OT1_:
 1752|  79.5k|    {
 1753|  79.5k|        assert(n == 0u);
  ------------------
  |  Branch (1753:9): [True: 79.5k, False: 0]
  ------------------
 1754|  79.5k|        assert(total == 0u);
  ------------------
  |  Branch (1754:9): [True: 79.5k, False: 0]
  ------------------
 1755|  79.5k|        using visitor_t = concat_rebalance_plan_fill_visitor;
 1756|  79.5k|        lpos.each_left_sub(visitor_t{}, *this);
 1757|  79.5k|        cpos.each_sub(visitor_t{}, *this);
 1758|  79.5k|        rpos.each_right_sub(visitor_t{}, *this);
 1759|  79.5k|    }
_ZN5immer6detail4rbts21concat_rebalance_planILj2ELj2EE5mergeIRNS1_12null_sub_posERNS1_17concat_center_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEERNS1_11relaxed_posISH_EEEENS7_INSt3__15decayIT0_E4type6node_tEEEOT_OSP_OT1_:
 1802|  9.51k|    {
 1803|  9.51k|        using node_t    = node_type<CPos>;
 1804|  9.51k|        using merger_t  = concat_merger<node_t>;
 1805|  9.51k|        using visitor_t = concat_merger_visitor;
 1806|  9.51k|        auto merger     = merger_t{cpos.shift(), counts, n};
 1807|  9.51k|        IMMER_TRY {
  ------------------
  |  |   49|  9.51k|#define IMMER_TRY try
  ------------------
 1808|  9.51k|            lpos.each_left_sub(visitor_t{}, merger);
 1809|  9.51k|            cpos.each_sub(visitor_t{}, merger);
 1810|  9.51k|            rpos.each_right_sub(visitor_t{}, merger);
 1811|  9.51k|            cpos.each_sub(dec_visitor{});
 1812|  9.51k|            return merger.finish();
 1813|  9.51k|        }
 1814|  9.51k|        IMMER_CATCH (...) {
 1815|      0|            merger.abort();
 1816|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1817|      0|        }
 1818|  9.51k|    }
_ZN5immer6detail4rbts19concat_both_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10visit_leafIRNS1_12leaf_sub_posISC_EERNS1_14empty_leaf_posISC_EERNS1_11relaxed_posISC_EEEENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1944|  1.53k|    {
 1945|  1.53k|        return rpos.first_sub_leaf(concat_right_visitor<Node>{}, lpos, tpos);
 1946|  1.53k|    }
_ZN5immer6detail4rbts16concat_rebalanceINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEERNS1_25singleton_regular_sub_posISC_EERNS1_17concat_center_posISC_EERNS1_11relaxed_posISC_EEEENSG_IT_EEOT0_OT1_OT2_:
 1823|  1.53k|{
 1824|  1.53k|    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
 1825|  1.53k|    plan.fill(lpos, cpos, rpos);
 1826|  1.53k|    plan.shuffle(cpos.shift());
 1827|  1.53k|    IMMER_TRY {
  ------------------
  |  |   49|  1.53k|#define IMMER_TRY try
  ------------------
 1828|  1.53k|        return plan.merge(lpos, cpos, rpos);
 1829|  1.53k|    }
 1830|  1.53k|    IMMER_CATCH (...) {
 1831|      0|        cpos.each_sub(dec_visitor{});
 1832|      0|        IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1833|      0|    }
 1834|  1.53k|}
_ZN5immer6detail4rbts21concat_rebalance_planILj2ELj2EE4fillIRNS1_25singleton_regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEERNS1_17concat_center_posISF_EERNS1_11relaxed_posISF_EEEEvOT_OT0_OT1_:
 1752|  5.03k|    {
 1753|  5.03k|        assert(n == 0u);
  ------------------
  |  Branch (1753:9): [True: 5.03k, False: 0]
  ------------------
 1754|  5.03k|        assert(total == 0u);
  ------------------
  |  Branch (1754:9): [True: 5.03k, False: 0]
  ------------------
 1755|  5.03k|        using visitor_t = concat_rebalance_plan_fill_visitor;
 1756|  5.03k|        lpos.each_left_sub(visitor_t{}, *this);
 1757|  5.03k|        cpos.each_sub(visitor_t{}, *this);
 1758|  5.03k|        rpos.each_right_sub(visitor_t{}, *this);
 1759|  5.03k|    }
_ZN5immer6detail4rbts21concat_rebalance_planILj2ELj2EE5mergeIRNS1_25singleton_regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEERNS1_17concat_center_posISF_EERNS1_11relaxed_posISF_EEEENSI_INSt3__15decayIT0_E4type6node_tEEEOT_OSQ_OT1_:
 1802|  1.53k|    {
 1803|  1.53k|        using node_t    = node_type<CPos>;
 1804|  1.53k|        using merger_t  = concat_merger<node_t>;
 1805|  1.53k|        using visitor_t = concat_merger_visitor;
 1806|  1.53k|        auto merger     = merger_t{cpos.shift(), counts, n};
 1807|  1.53k|        IMMER_TRY {
  ------------------
  |  |   49|  1.53k|#define IMMER_TRY try
  ------------------
 1808|  1.53k|            lpos.each_left_sub(visitor_t{}, merger);
 1809|  1.53k|            cpos.each_sub(visitor_t{}, merger);
 1810|  1.53k|            rpos.each_right_sub(visitor_t{}, merger);
 1811|  1.53k|            cpos.each_sub(dec_visitor{});
 1812|  1.53k|            return merger.finish();
 1813|  1.53k|        }
 1814|  1.53k|        IMMER_CATCH (...) {
 1815|      0|            merger.abort();
 1816|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1817|      0|        }
 1818|  1.53k|    }
_ZN5immer6detail4rbts26concat_trees_right_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10visit_nodeIRNS1_15regular_sub_posISC_EERNS1_25singleton_regular_sub_posISC_EERNS1_14empty_leaf_posISC_EEEENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1958|  1.31k|    {
 1959|  1.31k|        return concat_inners<Node>(lpos, tpos, rpos);
 1960|  1.31k|    }
_ZNO5immer6detail4rbts17concat_center_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE7realizeEv:
 1527|  50.5k|    {
 1528|  50.5k|        if (count_ > 1) {
  ------------------
  |  Branch (1528:13): [True: 21.6k, False: 28.9k]
  ------------------
 1529|  21.6k|            IMMER_TRY {
  ------------------
  |  |   49|  21.6k|#define IMMER_TRY try
  ------------------
 1530|  21.6k|                auto result = node_t::make_inner_r_n(count_);
 1531|  21.6k|                auto r      = result->relaxed();
 1532|  21.6k|                r->d.count  = count_;
 1533|  21.6k|                std::copy(nodes_, nodes_ + count_, result->inner());
 1534|  21.6k|                std::copy(sizes_, sizes_ + count_, r->d.sizes);
 1535|  21.6k|                return {result, shift_, r};
 1536|  21.6k|            }
 1537|  21.6k|            IMMER_CATCH (...) {
 1538|      0|                each_sub(dec_visitor{});
 1539|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1540|      0|            }
 1541|  28.9k|        } else {
 1542|  28.9k|            assert(shift_ >= B + BL);
  ------------------
  |  Branch (1542:13): [True: 28.9k, False: 0]
  ------------------
 1543|  28.9k|            return {nodes_[0], shift_ - B, nodes_[0]->relaxed()};
 1544|  28.9k|        }
 1545|  50.5k|    }
_ZN5immer6detail4rbts12concat_treesINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEENS1_11relaxed_posIT_EEPSE_jmSG_jSG_jm:
 1986|  47.5k|{
 1987|  47.5k|    return visit_maybe_relaxed_sub(lroot,
 1988|  47.5k|                                   lshift,
 1989|  47.5k|                                   lsize,
 1990|  47.5k|                                   concat_trees_left_visitor<Node>{},
 1991|  47.5k|                                   make_leaf_pos(ltail, ltcount),
 1992|  47.5k|                                   rroot,
 1993|  47.5k|                                   rshift,
 1994|  47.5k|                                   rsize)
 1995|  47.5k|        .realize();
 1996|  47.5k|}
_ZN5immer6detail4rbts25concat_trees_left_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10visit_nodeIRNS1_11relaxed_posISC_EENS1_8leaf_posISC_EEJRPSC_RjRmEEENS1_17concat_center_posISC_EEOT_OT0_DpOT1_:
 1971|  41.5k|    {
 1972|  41.5k|        return visit_maybe_relaxed_sub(
 1973|  41.5k|            args..., concat_trees_right_visitor<Node>{}, lpos, tpos);
 1974|  41.5k|    }
_ZN5immer6detail4rbts26concat_trees_right_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10visit_nodeIRNS1_11relaxed_posISC_EESH_RNS1_8leaf_posISC_EEEENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1958|  38.6k|    {
 1959|  38.6k|        return concat_inners<Node>(lpos, tpos, rpos);
 1960|  38.6k|    }
_ZN5immer6detail4rbts13concat_innersINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEERNS1_11relaxed_posISC_EERNS1_8leaf_posISC_EESF_EENS1_17concat_center_posIT_EEOT0_OT1_OT2_:
 1872|   209k|{
 1873|   209k|    auto lshift = lpos.shift();
 1874|   209k|    auto rshift = rpos.shift();
 1875|   209k|    if (lshift > rshift) {
  ------------------
  |  Branch (1875:9): [True: 3.07k, False: 206k]
  ------------------
 1876|  3.07k|        auto cpos = lpos.last_sub(concat_left_visitor<Node>{}, tpos, rpos);
 1877|  3.07k|        return concat_rebalance<Node>(lpos, cpos, null_sub_pos{});
 1878|   206k|    } else if (lshift < rshift) {
  ------------------
  |  Branch (1878:16): [True: 3.18k, False: 202k]
  ------------------
 1879|  3.18k|        auto cpos = rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
 1880|  3.18k|        return concat_rebalance<Node>(null_sub_pos{}, cpos, rpos);
 1881|   202k|    } else {
 1882|   202k|        assert(lshift == rshift);
  ------------------
  |  Branch (1882:9): [True: 202k, False: 0]
  ------------------
 1883|   202k|        assert(Node::bits_leaf == 0u || lshift > 0);
  ------------------
  |  Branch (1883:9): [Folded, False: 202k]
  |  Branch (1883:9): [True: 202k, False: 0]
  |  Branch (1883:9): [True: 202k, False: 0]
  ------------------
 1884|   202k|        auto cpos = lpos.last_sub(concat_both_visitor<Node>{}, tpos, rpos);
 1885|   202k|        return concat_rebalance<Node>(lpos, cpos, rpos);
 1886|   202k|    }
 1887|   209k|}
_ZN5immer6detail4rbts19concat_left_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE11visit_innerIRNS1_11relaxed_posISC_EERNS1_8leaf_posISC_EESH_EENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1897|  2.74k|    {
 1898|  2.74k|        return concat_inners<Node>(lpos, tpos, rpos);
 1899|  2.74k|    }
_ZN5immer6detail4rbts19concat_left_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE11visit_innerIRNS1_15regular_sub_posISC_EERNS1_8leaf_posISC_EERNS1_11relaxed_posISC_EEEENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1897|    795|    {
 1898|    795|        return concat_inners<Node>(lpos, tpos, rpos);
 1899|    795|    }
_ZN5immer6detail4rbts13concat_innersINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEERNS1_15regular_sub_posISC_EERNS1_8leaf_posISC_EERNS1_11relaxed_posISC_EEEENS1_17concat_center_posIT_EEOT0_OT1_OT2_:
 1872|  11.0k|{
 1873|  11.0k|    auto lshift = lpos.shift();
 1874|  11.0k|    auto rshift = rpos.shift();
 1875|  11.0k|    if (lshift > rshift) {
  ------------------
  |  Branch (1875:9): [True: 470, False: 10.5k]
  ------------------
 1876|    470|        auto cpos = lpos.last_sub(concat_left_visitor<Node>{}, tpos, rpos);
 1877|    470|        return concat_rebalance<Node>(lpos, cpos, null_sub_pos{});
 1878|  10.5k|    } else if (lshift < rshift) {
  ------------------
  |  Branch (1878:16): [True: 983, False: 9.60k]
  ------------------
 1879|    983|        auto cpos = rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
 1880|    983|        return concat_rebalance<Node>(null_sub_pos{}, cpos, rpos);
 1881|  9.60k|    } else {
 1882|  9.60k|        assert(lshift == rshift);
  ------------------
  |  Branch (1882:9): [True: 9.60k, False: 0]
  ------------------
 1883|  9.60k|        assert(Node::bits_leaf == 0u || lshift > 0);
  ------------------
  |  Branch (1883:9): [Folded, False: 9.60k]
  |  Branch (1883:9): [True: 9.60k, False: 0]
  |  Branch (1883:9): [True: 9.60k, False: 0]
  ------------------
 1884|  9.60k|        auto cpos = lpos.last_sub(concat_both_visitor<Node>{}, tpos, rpos);
 1885|  9.60k|        return concat_rebalance<Node>(lpos, cpos, rpos);
 1886|  9.60k|    }
 1887|  11.0k|}
_ZN5immer6detail4rbts16concat_rebalanceINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEERNS1_15regular_sub_posISC_EERNS1_17concat_center_posISC_EENS1_12null_sub_posEEENSG_IT_EEOT0_OT1_OT2_:
 1823|  1.37k|{
 1824|  1.37k|    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
 1825|  1.37k|    plan.fill(lpos, cpos, rpos);
 1826|  1.37k|    plan.shuffle(cpos.shift());
 1827|  1.37k|    IMMER_TRY {
  ------------------
  |  |   49|  1.37k|#define IMMER_TRY try
  ------------------
 1828|  1.37k|        return plan.merge(lpos, cpos, rpos);
 1829|  1.37k|    }
 1830|  1.37k|    IMMER_CATCH (...) {
 1831|      0|        cpos.each_sub(dec_visitor{});
 1832|      0|        IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1833|      0|    }
 1834|  1.37k|}
_ZN5immer6detail4rbts21concat_rebalance_planILj2ELj2EE4fillIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEERNS1_17concat_center_posISF_EERNS1_12null_sub_posEEEvOT_OT0_OT1_:
 1752|  5.26k|    {
 1753|  5.26k|        assert(n == 0u);
  ------------------
  |  Branch (1753:9): [True: 5.26k, False: 0]
  ------------------
 1754|  5.26k|        assert(total == 0u);
  ------------------
  |  Branch (1754:9): [True: 5.26k, False: 0]
  ------------------
 1755|  5.26k|        using visitor_t = concat_rebalance_plan_fill_visitor;
 1756|  5.26k|        lpos.each_left_sub(visitor_t{}, *this);
 1757|  5.26k|        cpos.each_sub(visitor_t{}, *this);
 1758|  5.26k|        rpos.each_right_sub(visitor_t{}, *this);
 1759|  5.26k|    }
_ZN5immer6detail4rbts21concat_rebalance_planILj2ELj2EE5mergeIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEERNS1_17concat_center_posISF_EERNS1_12null_sub_posEEENSI_INSt3__15decayIT0_E4type6node_tEEEOT_OSP_OT1_:
 1802|  1.37k|    {
 1803|  1.37k|        using node_t    = node_type<CPos>;
 1804|  1.37k|        using merger_t  = concat_merger<node_t>;
 1805|  1.37k|        using visitor_t = concat_merger_visitor;
 1806|  1.37k|        auto merger     = merger_t{cpos.shift(), counts, n};
 1807|  1.37k|        IMMER_TRY {
  ------------------
  |  |   49|  1.37k|#define IMMER_TRY try
  ------------------
 1808|  1.37k|            lpos.each_left_sub(visitor_t{}, merger);
 1809|  1.37k|            cpos.each_sub(visitor_t{}, merger);
 1810|  1.37k|            rpos.each_right_sub(visitor_t{}, merger);
 1811|  1.37k|            cpos.each_sub(dec_visitor{});
 1812|  1.37k|            return merger.finish();
 1813|  1.37k|        }
 1814|  1.37k|        IMMER_CATCH (...) {
 1815|      0|            merger.abort();
 1816|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1817|      0|        }
 1818|  1.37k|    }
_ZN5immer6detail4rbts20concat_right_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE11visit_innerIRNS1_11relaxed_posISC_EERNS1_15regular_sub_posISC_EERNS1_8leaf_posISC_EEEENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1917|  9.36k|    {
 1918|  9.36k|        return concat_inners<Node>(lpos, tpos, rpos);
 1919|  9.36k|    }
_ZN5immer6detail4rbts20concat_right_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE11visit_innerIRNS1_15regular_sub_posISC_EESH_RNS1_8leaf_posISC_EEEENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1917|  1.00k|    {
 1918|  1.00k|        return concat_inners<Node>(lpos, tpos, rpos);
 1919|  1.00k|    }
_ZN5immer6detail4rbts13concat_innersINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEERNS1_15regular_sub_posISC_EERNS1_8leaf_posISC_EESF_EENS1_17concat_center_posIT_EEOT0_OT1_OT2_:
 1872|  7.34k|{
 1873|  7.34k|    auto lshift = lpos.shift();
 1874|  7.34k|    auto rshift = rpos.shift();
 1875|  7.34k|    if (lshift > rshift) {
  ------------------
  |  Branch (1875:9): [True: 901, False: 6.44k]
  ------------------
 1876|    901|        auto cpos = lpos.last_sub(concat_left_visitor<Node>{}, tpos, rpos);
 1877|    901|        return concat_rebalance<Node>(lpos, cpos, null_sub_pos{});
 1878|  6.44k|    } else if (lshift < rshift) {
  ------------------
  |  Branch (1878:16): [True: 649, False: 5.79k]
  ------------------
 1879|    649|        auto cpos = rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
 1880|    649|        return concat_rebalance<Node>(null_sub_pos{}, cpos, rpos);
 1881|  5.79k|    } else {
 1882|  5.79k|        assert(lshift == rshift);
  ------------------
  |  Branch (1882:9): [True: 5.79k, False: 0]
  ------------------
 1883|  5.79k|        assert(Node::bits_leaf == 0u || lshift > 0);
  ------------------
  |  Branch (1883:9): [Folded, False: 5.79k]
  |  Branch (1883:9): [True: 5.79k, False: 0]
  |  Branch (1883:9): [True: 5.79k, False: 0]
  ------------------
 1884|  5.79k|        auto cpos = lpos.last_sub(concat_both_visitor<Node>{}, tpos, rpos);
 1885|  5.79k|        return concat_rebalance<Node>(lpos, cpos, rpos);
 1886|  5.79k|    }
 1887|  7.34k|}
_ZN5immer6detail4rbts19concat_left_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE11visit_innerIRNS1_15regular_sub_posISC_EERNS1_8leaf_posISC_EESH_EENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1897|  1.25k|    {
 1898|  1.25k|        return concat_inners<Node>(lpos, tpos, rpos);
 1899|  1.25k|    }
_ZN5immer6detail4rbts20concat_right_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE11visit_innerIRNS1_8full_posISC_EERNS1_15regular_sub_posISC_EERNS1_8leaf_posISC_EEEENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1917|  4.73k|    {
 1918|  4.73k|        return concat_inners<Node>(lpos, tpos, rpos);
 1919|  4.73k|    }
_ZN5immer6detail4rbts13concat_innersINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEERNS1_15regular_sub_posISC_EERNS1_8leaf_posISC_EERNS1_8full_posISC_EEEENS1_17concat_center_posIT_EEOT0_OT1_OT2_:
 1872|  4.73k|{
 1873|  4.73k|    auto lshift = lpos.shift();
 1874|  4.73k|    auto rshift = rpos.shift();
 1875|  4.73k|    if (lshift > rshift) {
  ------------------
  |  Branch (1875:9): [True: 0, False: 4.73k]
  ------------------
 1876|      0|        auto cpos = lpos.last_sub(concat_left_visitor<Node>{}, tpos, rpos);
 1877|      0|        return concat_rebalance<Node>(lpos, cpos, null_sub_pos{});
 1878|  4.73k|    } else if (lshift < rshift) {
  ------------------
  |  Branch (1878:16): [True: 213, False: 4.52k]
  ------------------
 1879|    213|        auto cpos = rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
 1880|    213|        return concat_rebalance<Node>(null_sub_pos{}, cpos, rpos);
 1881|  4.52k|    } else {
 1882|  4.52k|        assert(lshift == rshift);
  ------------------
  |  Branch (1882:9): [True: 4.52k, False: 0]
  ------------------
 1883|  4.52k|        assert(Node::bits_leaf == 0u || lshift > 0);
  ------------------
  |  Branch (1883:9): [Folded, False: 4.52k]
  |  Branch (1883:9): [True: 4.52k, False: 0]
  |  Branch (1883:9): [True: 4.52k, False: 0]
  ------------------
 1884|  4.52k|        auto cpos = lpos.last_sub(concat_both_visitor<Node>{}, tpos, rpos);
 1885|  4.52k|        return concat_rebalance<Node>(lpos, cpos, rpos);
 1886|  4.52k|    }
 1887|  4.73k|}
_ZN5immer6detail4rbts19concat_both_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10visit_leafIRNS1_12leaf_sub_posISC_EERNS1_8leaf_posISC_EERNS1_8full_posISC_EEEENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1944|  3.70k|    {
 1945|  3.70k|        return rpos.first_sub_leaf(concat_right_visitor<Node>{}, lpos, tpos);
 1946|  3.70k|    }
_ZN5immer6detail4rbts20concat_right_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10visit_leafIRNS1_13full_leaf_posISC_EERNS1_12leaf_sub_posISC_EERNS1_8leaf_posISC_EEEENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1924|  9.17k|    {
 1925|  9.17k|        return concat_leafs<Node>(lpos, tpos, rpos);
 1926|  9.17k|    }
_ZN5immer6detail4rbts12concat_leafsINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEERNS1_12leaf_sub_posISC_EERNS1_8leaf_posISC_EERNS1_13full_leaf_posISC_EEEENS1_17concat_center_posIT_EEOT0_OT1_OT2_:
 1838|  9.17k|{
 1839|  9.17k|    static_assert(Node::bits >= 2, "");
 1840|  9.17k|    assert(lpos.shift() == tpos.shift());
  ------------------
  |  Branch (1840:5): [True: 9.17k, False: 0]
  ------------------
 1841|  9.17k|    assert(lpos.shift() == rpos.shift());
  ------------------
  |  Branch (1841:5): [True: 9.17k, False: 0]
  ------------------
 1842|  9.17k|    assert(lpos.shift() == 0);
  ------------------
  |  Branch (1842:5): [True: 9.17k, False: 0]
  ------------------
 1843|  9.17k|    if (tpos.count() > 0)
  ------------------
  |  Branch (1843:9): [True: 9.17k, False: 0]
  ------------------
 1844|  9.17k|        return {
 1845|  9.17k|            Node::bits_leaf,
 1846|  9.17k|            lpos.node()->inc(),
 1847|  9.17k|            lpos.count(),
 1848|  9.17k|            tpos.node()->inc(),
 1849|  9.17k|            tpos.count(),
 1850|  9.17k|            rpos.node()->inc(),
 1851|  9.17k|            rpos.count(),
 1852|  9.17k|        };
 1853|      0|    else
 1854|      0|        return {
 1855|      0|            Node::bits_leaf,
 1856|      0|            lpos.node()->inc(),
 1857|      0|            lpos.count(),
 1858|      0|            rpos.node()->inc(),
 1859|      0|            rpos.count(),
 1860|      0|        };
 1861|  9.17k|}
_ZN5immer6detail4rbts19concat_both_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE11visit_innerIRNS1_15regular_sub_posISC_EERNS1_8leaf_posISC_EERNS1_8full_posISC_EEEENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1937|  2.04k|    {
 1938|  2.04k|        return rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
 1939|  2.04k|    }
_ZN5immer6detail4rbts16concat_rebalanceINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEERNS1_15regular_sub_posISC_EERNS1_17concat_center_posISC_EERNS1_8full_posISC_EEEENSG_IT_EEOT0_OT1_OT2_:
 1823|  4.52k|{
 1824|  4.52k|    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
 1825|  4.52k|    plan.fill(lpos, cpos, rpos);
 1826|  4.52k|    plan.shuffle(cpos.shift());
 1827|  4.52k|    IMMER_TRY {
  ------------------
  |  |   49|  4.52k|#define IMMER_TRY try
  ------------------
 1828|  4.52k|        return plan.merge(lpos, cpos, rpos);
 1829|  4.52k|    }
 1830|  4.52k|    IMMER_CATCH (...) {
 1831|      0|        cpos.each_sub(dec_visitor{});
 1832|      0|        IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1833|      0|    }
 1834|  4.52k|}
_ZN5immer6detail4rbts21concat_rebalance_planILj2ELj2EE4fillIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEERNS1_17concat_center_posISF_EERNS1_8full_posISF_EEEEvOT_OT0_OT1_:
 1752|  13.6k|    {
 1753|  13.6k|        assert(n == 0u);
  ------------------
  |  Branch (1753:9): [True: 13.6k, False: 0]
  ------------------
 1754|  13.6k|        assert(total == 0u);
  ------------------
  |  Branch (1754:9): [True: 13.6k, False: 0]
  ------------------
 1755|  13.6k|        using visitor_t = concat_rebalance_plan_fill_visitor;
 1756|  13.6k|        lpos.each_left_sub(visitor_t{}, *this);
 1757|  13.6k|        cpos.each_sub(visitor_t{}, *this);
 1758|  13.6k|        rpos.each_right_sub(visitor_t{}, *this);
 1759|  13.6k|    }
_ZN5immer6detail4rbts21concat_rebalance_planILj2ELj2EE5mergeIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEERNS1_17concat_center_posISF_EERNS1_8full_posISF_EEEENSI_INSt3__15decayIT0_E4type6node_tEEEOT_OSQ_OT1_:
 1802|  4.52k|    {
 1803|  4.52k|        using node_t    = node_type<CPos>;
 1804|  4.52k|        using merger_t  = concat_merger<node_t>;
 1805|  4.52k|        using visitor_t = concat_merger_visitor;
 1806|  4.52k|        auto merger     = merger_t{cpos.shift(), counts, n};
 1807|  4.52k|        IMMER_TRY {
  ------------------
  |  |   49|  4.52k|#define IMMER_TRY try
  ------------------
 1808|  4.52k|            lpos.each_left_sub(visitor_t{}, merger);
 1809|  4.52k|            cpos.each_sub(visitor_t{}, merger);
 1810|  4.52k|            rpos.each_right_sub(visitor_t{}, merger);
 1811|  4.52k|            cpos.each_sub(dec_visitor{});
 1812|  4.52k|            return merger.finish();
 1813|  4.52k|        }
 1814|  4.52k|        IMMER_CATCH (...) {
 1815|      0|            merger.abort();
 1816|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1817|      0|        }
 1818|  4.52k|    }
_ZN5immer6detail4rbts19concat_both_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10visit_leafIRNS1_12leaf_sub_posISC_EERNS1_8leaf_posISC_EERNS1_15regular_sub_posISC_EEEENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1944|  5.46k|    {
 1945|  5.46k|        return rpos.first_sub_leaf(concat_right_visitor<Node>{}, lpos, tpos);
 1946|  5.46k|    }
_ZN5immer6detail4rbts20concat_right_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10visit_leafIRNS1_12leaf_sub_posISC_EESH_RNS1_8leaf_posISC_EEEENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1924|  38.3k|    {
 1925|  38.3k|        return concat_leafs<Node>(lpos, tpos, rpos);
 1926|  38.3k|    }
_ZN5immer6detail4rbts12concat_leafsINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEERNS1_12leaf_sub_posISC_EERNS1_8leaf_posISC_EESF_EENS1_17concat_center_posIT_EEOT0_OT1_OT2_:
 1838|  38.3k|{
 1839|  38.3k|    static_assert(Node::bits >= 2, "");
 1840|  38.3k|    assert(lpos.shift() == tpos.shift());
  ------------------
  |  Branch (1840:5): [True: 38.3k, False: 0]
  ------------------
 1841|  38.3k|    assert(lpos.shift() == rpos.shift());
  ------------------
  |  Branch (1841:5): [True: 38.3k, False: 0]
  ------------------
 1842|  38.3k|    assert(lpos.shift() == 0);
  ------------------
  |  Branch (1842:5): [True: 38.3k, False: 0]
  ------------------
 1843|  38.3k|    if (tpos.count() > 0)
  ------------------
  |  Branch (1843:9): [True: 38.3k, False: 0]
  ------------------
 1844|  38.3k|        return {
 1845|  38.3k|            Node::bits_leaf,
 1846|  38.3k|            lpos.node()->inc(),
 1847|  38.3k|            lpos.count(),
 1848|  38.3k|            tpos.node()->inc(),
 1849|  38.3k|            tpos.count(),
 1850|  38.3k|            rpos.node()->inc(),
 1851|  38.3k|            rpos.count(),
 1852|  38.3k|        };
 1853|      0|    else
 1854|      0|        return {
 1855|      0|            Node::bits_leaf,
 1856|      0|            lpos.node()->inc(),
 1857|      0|            lpos.count(),
 1858|      0|            rpos.node()->inc(),
 1859|      0|            rpos.count(),
 1860|      0|        };
 1861|  38.3k|}
_ZN5immer6detail4rbts19concat_both_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE11visit_innerIRNS1_15regular_sub_posISC_EERNS1_8leaf_posISC_EESH_EENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1937|  1.82k|    {
 1938|  1.82k|        return rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
 1939|  1.82k|    }
_ZN5immer6detail4rbts16concat_rebalanceINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEERNS1_15regular_sub_posISC_EERNS1_17concat_center_posISC_EESF_EENSG_IT_EEOT0_OT1_OT2_:
 1823|  5.79k|{
 1824|  5.79k|    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
 1825|  5.79k|    plan.fill(lpos, cpos, rpos);
 1826|  5.79k|    plan.shuffle(cpos.shift());
 1827|  5.79k|    IMMER_TRY {
  ------------------
  |  |   49|  5.79k|#define IMMER_TRY try
  ------------------
 1828|  5.79k|        return plan.merge(lpos, cpos, rpos);
 1829|  5.79k|    }
 1830|  5.79k|    IMMER_CATCH (...) {
 1831|      0|        cpos.each_sub(dec_visitor{});
 1832|      0|        IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1833|      0|    }
 1834|  5.79k|}
_ZN5immer6detail4rbts21concat_rebalance_planILj2ELj2EE4fillIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEERNS1_17concat_center_posISF_EESH_EEvOT_OT0_OT1_:
 1752|  11.3k|    {
 1753|  11.3k|        assert(n == 0u);
  ------------------
  |  Branch (1753:9): [True: 11.3k, False: 0]
  ------------------
 1754|  11.3k|        assert(total == 0u);
  ------------------
  |  Branch (1754:9): [True: 11.3k, False: 0]
  ------------------
 1755|  11.3k|        using visitor_t = concat_rebalance_plan_fill_visitor;
 1756|  11.3k|        lpos.each_left_sub(visitor_t{}, *this);
 1757|  11.3k|        cpos.each_sub(visitor_t{}, *this);
 1758|  11.3k|        rpos.each_right_sub(visitor_t{}, *this);
 1759|  11.3k|    }
_ZN5immer6detail4rbts21concat_rebalance_planILj2ELj2EE5mergeIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEERNS1_17concat_center_posISF_EESH_EENSI_INSt3__15decayIT0_E4type6node_tEEEOT_OSN_OT1_:
 1802|  5.79k|    {
 1803|  5.79k|        using node_t    = node_type<CPos>;
 1804|  5.79k|        using merger_t  = concat_merger<node_t>;
 1805|  5.79k|        using visitor_t = concat_merger_visitor;
 1806|  5.79k|        auto merger     = merger_t{cpos.shift(), counts, n};
 1807|  5.79k|        IMMER_TRY {
  ------------------
  |  |   49|  5.79k|#define IMMER_TRY try
  ------------------
 1808|  5.79k|            lpos.each_left_sub(visitor_t{}, merger);
 1809|  5.79k|            cpos.each_sub(visitor_t{}, merger);
 1810|  5.79k|            rpos.each_right_sub(visitor_t{}, merger);
 1811|  5.79k|            cpos.each_sub(dec_visitor{});
 1812|  5.79k|            return merger.finish();
 1813|  5.79k|        }
 1814|  5.79k|        IMMER_CATCH (...) {
 1815|      0|            merger.abort();
 1816|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1817|      0|        }
 1818|  5.79k|    }
_ZN5immer6detail4rbts19concat_both_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10visit_leafIRNS1_12leaf_sub_posISC_EERNS1_8leaf_posISC_EERNS1_11relaxed_posISC_EEEENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1944|  38.3k|    {
 1945|  38.3k|        return rpos.first_sub_leaf(concat_right_visitor<Node>{}, lpos, tpos);
 1946|  38.3k|    }
_ZN5immer6detail4rbts19concat_both_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE11visit_innerIRNS1_15regular_sub_posISC_EERNS1_8leaf_posISC_EERNS1_11relaxed_posISC_EEEENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1937|  9.38k|    {
 1938|  9.38k|        return rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
 1939|  9.38k|    }
_ZN5immer6detail4rbts16concat_rebalanceINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEERNS1_15regular_sub_posISC_EERNS1_17concat_center_posISC_EERNS1_11relaxed_posISC_EEEENSG_IT_EEOT0_OT1_OT2_:
 1823|  9.60k|{
 1824|  9.60k|    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
 1825|  9.60k|    plan.fill(lpos, cpos, rpos);
 1826|  9.60k|    plan.shuffle(cpos.shift());
 1827|  9.60k|    IMMER_TRY {
  ------------------
  |  |   49|  9.60k|#define IMMER_TRY try
  ------------------
 1828|  9.60k|        return plan.merge(lpos, cpos, rpos);
 1829|  9.60k|    }
 1830|  9.60k|    IMMER_CATCH (...) {
 1831|      0|        cpos.each_sub(dec_visitor{});
 1832|      0|        IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1833|      0|    }
 1834|  9.60k|}
_ZN5immer6detail4rbts21concat_rebalance_planILj2ELj2EE4fillIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEERNS1_17concat_center_posISF_EERNS1_11relaxed_posISF_EEEEvOT_OT0_OT1_:
 1752|   107k|    {
 1753|   107k|        assert(n == 0u);
  ------------------
  |  Branch (1753:9): [True: 107k, False: 0]
  ------------------
 1754|   107k|        assert(total == 0u);
  ------------------
  |  Branch (1754:9): [True: 107k, False: 0]
  ------------------
 1755|   107k|        using visitor_t = concat_rebalance_plan_fill_visitor;
 1756|   107k|        lpos.each_left_sub(visitor_t{}, *this);
 1757|   107k|        cpos.each_sub(visitor_t{}, *this);
 1758|   107k|        rpos.each_right_sub(visitor_t{}, *this);
 1759|   107k|    }
_ZN5immer6detail4rbts21concat_rebalance_planILj2ELj2EE5mergeIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEERNS1_17concat_center_posISF_EERNS1_11relaxed_posISF_EEEENSI_INSt3__15decayIT0_E4type6node_tEEEOT_OSQ_OT1_:
 1802|  9.60k|    {
 1803|  9.60k|        using node_t    = node_type<CPos>;
 1804|  9.60k|        using merger_t  = concat_merger<node_t>;
 1805|  9.60k|        using visitor_t = concat_merger_visitor;
 1806|  9.60k|        auto merger     = merger_t{cpos.shift(), counts, n};
 1807|  9.60k|        IMMER_TRY {
  ------------------
  |  |   49|  9.60k|#define IMMER_TRY try
  ------------------
 1808|  9.60k|            lpos.each_left_sub(visitor_t{}, merger);
 1809|  9.60k|            cpos.each_sub(visitor_t{}, merger);
 1810|  9.60k|            rpos.each_right_sub(visitor_t{}, merger);
 1811|  9.60k|            cpos.each_sub(dec_visitor{});
 1812|  9.60k|            return merger.finish();
 1813|  9.60k|        }
 1814|  9.60k|        IMMER_CATCH (...) {
 1815|      0|            merger.abort();
 1816|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1817|      0|        }
 1818|  9.60k|    }
_ZN5immer6detail4rbts16concat_rebalanceINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEERNS1_11relaxed_posISC_EERNS1_17concat_center_posISC_EENS1_12null_sub_posEEENSG_IT_EEOT0_OT1_OT2_:
 1823|  5.73k|{
 1824|  5.73k|    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
 1825|  5.73k|    plan.fill(lpos, cpos, rpos);
 1826|  5.73k|    plan.shuffle(cpos.shift());
 1827|  5.73k|    IMMER_TRY {
  ------------------
  |  |   49|  5.73k|#define IMMER_TRY try
  ------------------
 1828|  5.73k|        return plan.merge(lpos, cpos, rpos);
 1829|  5.73k|    }
 1830|  5.73k|    IMMER_CATCH (...) {
 1831|      0|        cpos.each_sub(dec_visitor{});
 1832|      0|        IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1833|      0|    }
 1834|  5.73k|}
_ZN5immer6detail4rbts21concat_rebalance_planILj2ELj2EE4fillIRNS1_11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEERNS1_17concat_center_posISF_EERNS1_12null_sub_posEEEvOT_OT0_OT1_:
 1752|   548k|    {
 1753|   548k|        assert(n == 0u);
  ------------------
  |  Branch (1753:9): [True: 548k, False: 0]
  ------------------
 1754|   548k|        assert(total == 0u);
  ------------------
  |  Branch (1754:9): [True: 548k, False: 0]
  ------------------
 1755|   548k|        using visitor_t = concat_rebalance_plan_fill_visitor;
 1756|   548k|        lpos.each_left_sub(visitor_t{}, *this);
 1757|   548k|        cpos.each_sub(visitor_t{}, *this);
 1758|   548k|        rpos.each_right_sub(visitor_t{}, *this);
 1759|   548k|    }
_ZN5immer6detail4rbts21concat_rebalance_planILj2ELj2EE5mergeIRNS1_11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEERNS1_17concat_center_posISF_EERNS1_12null_sub_posEEENSI_INSt3__15decayIT0_E4type6node_tEEEOT_OSP_OT1_:
 1802|  5.73k|    {
 1803|  5.73k|        using node_t    = node_type<CPos>;
 1804|  5.73k|        using merger_t  = concat_merger<node_t>;
 1805|  5.73k|        using visitor_t = concat_merger_visitor;
 1806|  5.73k|        auto merger     = merger_t{cpos.shift(), counts, n};
 1807|  5.73k|        IMMER_TRY {
  ------------------
  |  |   49|  5.73k|#define IMMER_TRY try
  ------------------
 1808|  5.73k|            lpos.each_left_sub(visitor_t{}, merger);
 1809|  5.73k|            cpos.each_sub(visitor_t{}, merger);
 1810|  5.73k|            rpos.each_right_sub(visitor_t{}, merger);
 1811|  5.73k|            cpos.each_sub(dec_visitor{});
 1812|  5.73k|            return merger.finish();
 1813|  5.73k|        }
 1814|  5.73k|        IMMER_CATCH (...) {
 1815|      0|            merger.abort();
 1816|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1817|      0|        }
 1818|  5.73k|    }
_ZN5immer6detail4rbts20concat_right_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE11visit_innerIRNS1_11relaxed_posISC_EESH_RNS1_8leaf_posISC_EEEENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1917|   167k|    {
 1918|   167k|        return concat_inners<Node>(lpos, tpos, rpos);
 1919|   167k|    }
_ZN5immer6detail4rbts20concat_right_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE11visit_innerIRNS1_15regular_sub_posISC_EERNS1_11relaxed_posISC_EERNS1_8leaf_posISC_EEEENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1917|    248|    {
 1918|    248|        return concat_inners<Node>(lpos, tpos, rpos);
 1919|    248|    }
_ZN5immer6detail4rbts13concat_innersINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEERNS1_11relaxed_posISC_EERNS1_8leaf_posISC_EERNS1_15regular_sub_posISC_EEEENS1_17concat_center_posIT_EEOT0_OT1_OT2_:
 1872|  5.38k|{
 1873|  5.38k|    auto lshift = lpos.shift();
 1874|  5.38k|    auto rshift = rpos.shift();
 1875|  5.38k|    if (lshift > rshift) {
  ------------------
  |  Branch (1875:9): [True: 2.66k, False: 2.72k]
  ------------------
 1876|  2.66k|        auto cpos = lpos.last_sub(concat_left_visitor<Node>{}, tpos, rpos);
 1877|  2.66k|        return concat_rebalance<Node>(lpos, cpos, null_sub_pos{});
 1878|  2.72k|    } else if (lshift < rshift) {
  ------------------
  |  Branch (1878:16): [True: 571, False: 2.15k]
  ------------------
 1879|    571|        auto cpos = rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
 1880|    571|        return concat_rebalance<Node>(null_sub_pos{}, cpos, rpos);
 1881|  2.15k|    } else {
 1882|  2.15k|        assert(lshift == rshift);
  ------------------
  |  Branch (1882:9): [True: 2.15k, False: 0]
  ------------------
 1883|  2.15k|        assert(Node::bits_leaf == 0u || lshift > 0);
  ------------------
  |  Branch (1883:9): [Folded, False: 2.15k]
  |  Branch (1883:9): [True: 2.15k, False: 0]
  |  Branch (1883:9): [True: 2.15k, False: 0]
  ------------------
 1884|  2.15k|        auto cpos = lpos.last_sub(concat_both_visitor<Node>{}, tpos, rpos);
 1885|  2.15k|        return concat_rebalance<Node>(lpos, cpos, rpos);
 1886|  2.15k|    }
 1887|  5.38k|}
_ZN5immer6detail4rbts19concat_left_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE11visit_innerIRNS1_11relaxed_posISC_EERNS1_8leaf_posISC_EERNS1_15regular_sub_posISC_EEEENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1897|  2.31k|    {
 1898|  2.31k|        return concat_inners<Node>(lpos, tpos, rpos);
 1899|  2.31k|    }
_ZN5immer6detail4rbts20concat_right_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE11visit_innerIRNS1_8full_posISC_EERNS1_11relaxed_posISC_EERNS1_8leaf_posISC_EEEENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1917|  1.95k|    {
 1918|  1.95k|        return concat_inners<Node>(lpos, tpos, rpos);
 1919|  1.95k|    }
_ZN5immer6detail4rbts13concat_innersINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEERNS1_11relaxed_posISC_EERNS1_8leaf_posISC_EERNS1_8full_posISC_EEEENS1_17concat_center_posIT_EEOT0_OT1_OT2_:
 1872|  1.95k|{
 1873|  1.95k|    auto lshift = lpos.shift();
 1874|  1.95k|    auto rshift = rpos.shift();
 1875|  1.95k|    if (lshift > rshift) {
  ------------------
  |  Branch (1875:9): [True: 0, False: 1.95k]
  ------------------
 1876|      0|        auto cpos = lpos.last_sub(concat_left_visitor<Node>{}, tpos, rpos);
 1877|      0|        return concat_rebalance<Node>(lpos, cpos, null_sub_pos{});
 1878|  1.95k|    } else if (lshift < rshift) {
  ------------------
  |  Branch (1878:16): [True: 321, False: 1.63k]
  ------------------
 1879|    321|        auto cpos = rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
 1880|    321|        return concat_rebalance<Node>(null_sub_pos{}, cpos, rpos);
 1881|  1.63k|    } else {
 1882|  1.63k|        assert(lshift == rshift);
  ------------------
  |  Branch (1882:9): [True: 1.63k, False: 0]
  ------------------
 1883|  1.63k|        assert(Node::bits_leaf == 0u || lshift > 0);
  ------------------
  |  Branch (1883:9): [Folded, False: 1.63k]
  |  Branch (1883:9): [True: 1.63k, False: 0]
  |  Branch (1883:9): [True: 1.63k, False: 0]
  ------------------
 1884|  1.63k|        auto cpos = lpos.last_sub(concat_both_visitor<Node>{}, tpos, rpos);
 1885|  1.63k|        return concat_rebalance<Node>(lpos, cpos, rpos);
 1886|  1.63k|    }
 1887|  1.95k|}
_ZN5immer6detail4rbts19concat_both_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE11visit_innerIRNS1_11relaxed_posISC_EERNS1_8leaf_posISC_EERNS1_8full_posISC_EEEENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1937|    405|    {
 1938|    405|        return rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
 1939|    405|    }
_ZN5immer6detail4rbts16concat_rebalanceINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEERNS1_11relaxed_posISC_EERNS1_17concat_center_posISC_EERNS1_8full_posISC_EEEENSG_IT_EEOT0_OT1_OT2_:
 1823|  1.63k|{
 1824|  1.63k|    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
 1825|  1.63k|    plan.fill(lpos, cpos, rpos);
 1826|  1.63k|    plan.shuffle(cpos.shift());
 1827|  1.63k|    IMMER_TRY {
  ------------------
  |  |   49|  1.63k|#define IMMER_TRY try
  ------------------
 1828|  1.63k|        return plan.merge(lpos, cpos, rpos);
 1829|  1.63k|    }
 1830|  1.63k|    IMMER_CATCH (...) {
 1831|      0|        cpos.each_sub(dec_visitor{});
 1832|      0|        IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1833|      0|    }
 1834|  1.63k|}
_ZN5immer6detail4rbts21concat_rebalance_planILj2ELj2EE4fillIRNS1_11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEERNS1_17concat_center_posISF_EERNS1_8full_posISF_EEEEvOT_OT0_OT1_:
 1752|  4.01k|    {
 1753|  4.01k|        assert(n == 0u);
  ------------------
  |  Branch (1753:9): [True: 4.01k, False: 0]
  ------------------
 1754|  4.01k|        assert(total == 0u);
  ------------------
  |  Branch (1754:9): [True: 4.01k, False: 0]
  ------------------
 1755|  4.01k|        using visitor_t = concat_rebalance_plan_fill_visitor;
 1756|  4.01k|        lpos.each_left_sub(visitor_t{}, *this);
 1757|  4.01k|        cpos.each_sub(visitor_t{}, *this);
 1758|  4.01k|        rpos.each_right_sub(visitor_t{}, *this);
 1759|  4.01k|    }
_ZN5immer6detail4rbts21concat_rebalance_planILj2ELj2EE5mergeIRNS1_11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEERNS1_17concat_center_posISF_EERNS1_8full_posISF_EEEENSI_INSt3__15decayIT0_E4type6node_tEEEOT_OSQ_OT1_:
 1802|  1.63k|    {
 1803|  1.63k|        using node_t    = node_type<CPos>;
 1804|  1.63k|        using merger_t  = concat_merger<node_t>;
 1805|  1.63k|        using visitor_t = concat_merger_visitor;
 1806|  1.63k|        auto merger     = merger_t{cpos.shift(), counts, n};
 1807|  1.63k|        IMMER_TRY {
  ------------------
  |  |   49|  1.63k|#define IMMER_TRY try
  ------------------
 1808|  1.63k|            lpos.each_left_sub(visitor_t{}, merger);
 1809|  1.63k|            cpos.each_sub(visitor_t{}, merger);
 1810|  1.63k|            rpos.each_right_sub(visitor_t{}, merger);
 1811|  1.63k|            cpos.each_sub(dec_visitor{});
 1812|  1.63k|            return merger.finish();
 1813|  1.63k|        }
 1814|  1.63k|        IMMER_CATCH (...) {
 1815|      0|            merger.abort();
 1816|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1817|      0|        }
 1818|  1.63k|    }
_ZN5immer6detail4rbts19concat_both_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE11visit_innerIRNS1_11relaxed_posISC_EERNS1_8leaf_posISC_EERNS1_15regular_sub_posISC_EEEENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1937|    656|    {
 1938|    656|        return rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
 1939|    656|    }
_ZN5immer6detail4rbts16concat_rebalanceINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEERNS1_11relaxed_posISC_EERNS1_17concat_center_posISC_EERNS1_15regular_sub_posISC_EEEENSG_IT_EEOT0_OT1_OT2_:
 1823|  2.15k|{
 1824|  2.15k|    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
 1825|  2.15k|    plan.fill(lpos, cpos, rpos);
 1826|  2.15k|    plan.shuffle(cpos.shift());
 1827|  2.15k|    IMMER_TRY {
  ------------------
  |  |   49|  2.15k|#define IMMER_TRY try
  ------------------
 1828|  2.15k|        return plan.merge(lpos, cpos, rpos);
 1829|  2.15k|    }
 1830|  2.15k|    IMMER_CATCH (...) {
 1831|      0|        cpos.each_sub(dec_visitor{});
 1832|      0|        IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1833|      0|    }
 1834|  2.15k|}
_ZN5immer6detail4rbts21concat_rebalance_planILj2ELj2EE4fillIRNS1_11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEERNS1_17concat_center_posISF_EERNS1_15regular_sub_posISF_EEEEvOT_OT0_OT1_:
 1752|  37.9k|    {
 1753|  37.9k|        assert(n == 0u);
  ------------------
  |  Branch (1753:9): [True: 37.9k, False: 0]
  ------------------
 1754|  37.9k|        assert(total == 0u);
  ------------------
  |  Branch (1754:9): [True: 37.9k, False: 0]
  ------------------
 1755|  37.9k|        using visitor_t = concat_rebalance_plan_fill_visitor;
 1756|  37.9k|        lpos.each_left_sub(visitor_t{}, *this);
 1757|  37.9k|        cpos.each_sub(visitor_t{}, *this);
 1758|  37.9k|        rpos.each_right_sub(visitor_t{}, *this);
 1759|  37.9k|    }
_ZN5immer6detail4rbts21concat_rebalance_planILj2ELj2EE5mergeIRNS1_11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEERNS1_17concat_center_posISF_EERNS1_15regular_sub_posISF_EEEENSI_INSt3__15decayIT0_E4type6node_tEEEOT_OSQ_OT1_:
 1802|  2.15k|    {
 1803|  2.15k|        using node_t    = node_type<CPos>;
 1804|  2.15k|        using merger_t  = concat_merger<node_t>;
 1805|  2.15k|        using visitor_t = concat_merger_visitor;
 1806|  2.15k|        auto merger     = merger_t{cpos.shift(), counts, n};
 1807|  2.15k|        IMMER_TRY {
  ------------------
  |  |   49|  2.15k|#define IMMER_TRY try
  ------------------
 1808|  2.15k|            lpos.each_left_sub(visitor_t{}, merger);
 1809|  2.15k|            cpos.each_sub(visitor_t{}, merger);
 1810|  2.15k|            rpos.each_right_sub(visitor_t{}, merger);
 1811|  2.15k|            cpos.each_sub(dec_visitor{});
 1812|  2.15k|            return merger.finish();
 1813|  2.15k|        }
 1814|  2.15k|        IMMER_CATCH (...) {
 1815|      0|            merger.abort();
 1816|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1817|      0|        }
 1818|  2.15k|    }
_ZN5immer6detail4rbts19concat_both_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE11visit_innerIRNS1_11relaxed_posISC_EERNS1_8leaf_posISC_EESH_EENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1937|   164k|    {
 1938|   164k|        return rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
 1939|   164k|    }
_ZN5immer6detail4rbts16concat_rebalanceINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEERNS1_11relaxed_posISC_EERNS1_17concat_center_posISC_EESF_EENSG_IT_EEOT0_OT1_OT2_:
 1823|   202k|{
 1824|   202k|    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
 1825|   202k|    plan.fill(lpos, cpos, rpos);
 1826|   202k|    plan.shuffle(cpos.shift());
 1827|   202k|    IMMER_TRY {
  ------------------
  |  |   49|   202k|#define IMMER_TRY try
  ------------------
 1828|   202k|        return plan.merge(lpos, cpos, rpos);
 1829|   202k|    }
 1830|   202k|    IMMER_CATCH (...) {
 1831|      0|        cpos.each_sub(dec_visitor{});
 1832|      0|        IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1833|      0|    }
 1834|   202k|}
_ZN5immer6detail4rbts21concat_rebalance_planILj2ELj2EE4fillIRNS1_11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEERNS1_17concat_center_posISF_EESH_EEvOT_OT0_OT1_:
 1752|   433k|    {
 1753|   433k|        assert(n == 0u);
  ------------------
  |  Branch (1753:9): [True: 433k, False: 0]
  ------------------
 1754|   433k|        assert(total == 0u);
  ------------------
  |  Branch (1754:9): [True: 433k, False: 0]
  ------------------
 1755|   433k|        using visitor_t = concat_rebalance_plan_fill_visitor;
 1756|   433k|        lpos.each_left_sub(visitor_t{}, *this);
 1757|   433k|        cpos.each_sub(visitor_t{}, *this);
 1758|   433k|        rpos.each_right_sub(visitor_t{}, *this);
 1759|   433k|    }
_ZN5immer6detail4rbts21concat_rebalance_planILj2ELj2EE5mergeIRNS1_11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEERNS1_17concat_center_posISF_EESH_EENSI_INSt3__15decayIT0_E4type6node_tEEEOT_OSN_OT1_:
 1802|   202k|    {
 1803|   202k|        using node_t    = node_type<CPos>;
 1804|   202k|        using merger_t  = concat_merger<node_t>;
 1805|   202k|        using visitor_t = concat_merger_visitor;
 1806|   202k|        auto merger     = merger_t{cpos.shift(), counts, n};
 1807|   202k|        IMMER_TRY {
  ------------------
  |  |   49|   202k|#define IMMER_TRY try
  ------------------
 1808|   202k|            lpos.each_left_sub(visitor_t{}, merger);
 1809|   202k|            cpos.each_sub(visitor_t{}, merger);
 1810|   202k|            rpos.each_right_sub(visitor_t{}, merger);
 1811|   202k|            cpos.each_sub(dec_visitor{});
 1812|   202k|            return merger.finish();
 1813|   202k|        }
 1814|   202k|        IMMER_CATCH (...) {
 1815|      0|            merger.abort();
 1816|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1817|      0|        }
 1818|   202k|    }
_ZN5immer6detail4rbts26concat_trees_right_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10visit_nodeIRNS1_15regular_sub_posISC_EERNS1_11relaxed_posISC_EERNS1_8leaf_posISC_EEEENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1958|  2.82k|    {
 1959|  2.82k|        return concat_inners<Node>(lpos, tpos, rpos);
 1960|  2.82k|    }
_ZN5immer6detail4rbts25concat_trees_left_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10visit_nodeIRNS1_15regular_sub_posISC_EENS1_8leaf_posISC_EEJRPSC_RjRmEEENS1_17concat_center_posISC_EEOT_OT0_DpOT1_:
 1971|  6.00k|    {
 1972|  6.00k|        return visit_maybe_relaxed_sub(
 1973|  6.00k|            args..., concat_trees_right_visitor<Node>{}, lpos, tpos);
 1974|  6.00k|    }
_ZN5immer6detail4rbts26concat_trees_right_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10visit_nodeIRNS1_11relaxed_posISC_EERNS1_15regular_sub_posISC_EERNS1_8leaf_posISC_EEEENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1958|    904|    {
 1959|    904|        return concat_inners<Node>(lpos, tpos, rpos);
 1960|    904|    }
_ZN5immer6detail4rbts26concat_trees_right_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10visit_nodeIRNS1_15regular_sub_posISC_EESH_RNS1_8leaf_posISC_EEEENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1958|  5.09k|    {
 1959|  5.09k|        return concat_inners<Node>(lpos, tpos, rpos);
 1960|  5.09k|    }
_ZN5immer6detail4rbts21push_tail_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEELb1EE13visit_relaxedIRNS1_11relaxed_posISC_EEEEPSC_OT_NSA_5applyIS7_E4type4editESI_j:
  680|   901k|    {
  681|   901k|        auto node     = pos.node();
  682|   901k|        auto level    = pos.shift();
  683|   901k|        auto idx      = pos.count() - 1;
  684|   901k|        auto children = pos.size(idx);
  685|   901k|        auto new_idx =
  686|   901k|            children == size_t{1} << level || level == BL ? idx + 1 : idx;
  ------------------
  |  Branch (686:13): [True: 5.48k, False: 896k]
  |  Branch (686:47): [True: 1.52k, False: 894k]
  ------------------
  687|   901k|        auto new_child = static_cast<node_t*>(nullptr);
  688|   901k|        auto mutate    = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (688:26): [True: 901k, Folded]
  |  Branch (688:38): [True: 895k, False: 6.02k]
  ------------------
  689|       |
  690|   901k|        if (new_idx >= branches<B>)
  ------------------
  |  Branch (690:13): [True: 3.36k, False: 898k]
  ------------------
  691|  3.36k|            return nullptr;
  692|   898k|        else if (idx == new_idx) {
  ------------------
  |  Branch (692:18): [True: 894k, False: 3.64k]
  ------------------
  693|   894k|            new_child =
  694|   894k|                mutate ? pos.last_oh_csh(this_t{}, idx, children, e, tail, ts)
  ------------------
  |  Branch (694:17): [True: 889k, False: 5.24k]
  ------------------
  695|   894k|                       : pos.last_oh_csh(
  696|  5.24k|                             this_no_mut_t{}, idx, children, e, tail, ts);
  697|   894k|            if (!new_child) {
  ------------------
  |  Branch (697:17): [True: 4.27k, False: 890k]
  ------------------
  698|  4.27k|                if (++new_idx < branches<B>)
  ------------------
  |  Branch (698:21): [True: 2.31k, False: 1.95k]
  ------------------
  699|  2.31k|                    new_child = node_t::make_path_e(e, level - B, tail);
  700|  1.95k|                else
  701|  1.95k|                    return nullptr;
  702|  4.27k|            }
  703|   894k|        } else
  704|  3.64k|            new_child = node_t::make_path_e(e, level - B, tail);
  705|       |
  706|   896k|        if (mutate) {
  ------------------
  |  Branch (706:13): [True: 891k, False: 5.29k]
  ------------------
  707|   891k|            auto count             = new_idx + 1;
  708|   891k|            auto relaxed           = node->ensure_mutable_relaxed_n(e, new_idx);
  709|   891k|            node->inner()[new_idx] = new_child;
  710|   891k|            relaxed->d.sizes[new_idx] = pos.size() + ts;
  711|   891k|            relaxed->d.count          = count;
  712|   891k|            assert(relaxed->d.sizes[new_idx]);
  ------------------
  |  Branch (712:13): [True: 891k, False: 0]
  ------------------
  713|   891k|            return node;
  714|   891k|        } else {
  715|  5.29k|            IMMER_TRY {
  ------------------
  |  |   49|  5.29k|#define IMMER_TRY try
  ------------------
  716|  5.29k|                auto count    = new_idx + 1;
  717|  5.29k|                auto new_node = node_t::copy_inner_r_e(e, pos.node(), new_idx);
  718|  5.29k|                auto relaxed  = new_node->relaxed();
  719|  5.29k|                new_node->inner()[new_idx] = new_child;
  720|  5.29k|                relaxed->d.sizes[new_idx]  = pos.size() + ts;
  721|  5.29k|                relaxed->d.count           = count;
  722|  5.29k|                assert(relaxed->d.sizes[new_idx]);
  ------------------
  |  Branch (722:17): [True: 5.29k, False: 0]
  ------------------
  723|  5.29k|                if (Mutating)
  ------------------
  |  Branch (723:21): [True: 5.29k, Folded]
  ------------------
  724|  5.29k|                    pos.visit(dec_visitor{});
  725|  5.29k|                return new_node;
  726|  5.29k|            }
  727|  5.29k|            IMMER_CATCH (...) {
  728|      0|                auto shift = pos.shift();
  729|      0|                auto size  = new_idx == idx ? children + ts : ts;
  ------------------
  |  Branch (729:30): [True: 0, False: 0]
  ------------------
  730|      0|                if (shift > BL) {
  ------------------
  |  Branch (730:21): [True: 0, False: 0]
  ------------------
  731|      0|                    tail->inc();
  732|      0|                    dec_inner(new_child, shift - B, size);
  733|      0|                }
  734|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  735|      0|            }
  736|  5.29k|        }
  737|   896k|    }
_ZN5immer6detail4rbts21push_tail_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEELb1EE13visit_regularIRNS1_15regular_sub_posISC_EEJRjEEEPSC_OT_NSA_5applyIS7_E4type4editESJ_DpOT0_:
  741|   656k|    {
  742|   656k|        assert((pos.size() & mask<BL>) == 0);
  ------------------
  |  Branch (742:9): [True: 656k, False: 0]
  ------------------
  743|   656k|        auto node    = pos.node();
  744|   656k|        auto idx     = pos.index(pos.size() - 1);
  745|   656k|        auto new_idx = pos.index(pos.size() + branches<BL> - 1);
  746|   656k|        auto mutate  = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (746:24): [True: 656k, Folded]
  |  Branch (746:36): [True: 655k, False: 707]
  ------------------
  747|   656k|        if (mutate) {
  ------------------
  |  Branch (747:13): [True: 655k, False: 707]
  ------------------
  748|   655k|            node->inner()[new_idx] =
  749|   655k|                idx == new_idx ? pos.last_oh(this_t{}, idx, e, tail)
  ------------------
  |  Branch (749:17): [True: 648k, False: 6.80k]
  ------------------
  750|       |                               /* otherwise */
  751|   655k|                               : node_t::make_path_e(e, pos.shift() - B, tail);
  752|   655k|            return node;
  753|   655k|        } else {
  754|    707|            auto new_parent = node_t::make_inner_e(e);
  755|    707|            IMMER_TRY {
  ------------------
  |  |   49|    707|#define IMMER_TRY try
  ------------------
  756|    707|                new_parent->inner()[new_idx] =
  757|    707|                    idx == new_idx
  ------------------
  |  Branch (757:21): [True: 332, False: 375]
  ------------------
  758|    707|                        ? pos.last_oh(this_no_mut_t{}, idx, e, tail)
  759|       |                        /* otherwise */
  760|    707|                        : node_t::make_path_e(e, pos.shift() - B, tail);
  761|    707|                node_t::do_copy_inner(new_parent, node, new_idx);
  762|    707|                if (Mutating)
  ------------------
  |  Branch (762:21): [True: 707, Folded]
  ------------------
  763|    707|                    pos.visit(dec_visitor{});
  764|    707|                return new_parent;
  765|    707|            }
  766|    707|            IMMER_CATCH (...) {
  767|      0|                node_t::delete_inner_e(new_parent);
  768|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  769|      0|            }
  770|    707|        }
  771|   656k|    }
_ZN5immer6detail4rbts21push_tail_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEELb1EE13visit_regularIRNS1_11regular_posISC_EEJEEEPSC_OT_NSA_5applyIS7_E4type4editESI_DpOT0_:
  741|  9.27M|    {
  742|  9.27M|        assert((pos.size() & mask<BL>) == 0);
  ------------------
  |  Branch (742:9): [True: 9.27M, False: 0]
  ------------------
  743|  9.27M|        auto node    = pos.node();
  744|  9.27M|        auto idx     = pos.index(pos.size() - 1);
  745|  9.27M|        auto new_idx = pos.index(pos.size() + branches<BL> - 1);
  746|  9.27M|        auto mutate  = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (746:24): [True: 9.27M, Folded]
  |  Branch (746:36): [True: 9.27M, False: 394]
  ------------------
  747|  9.27M|        if (mutate) {
  ------------------
  |  Branch (747:13): [True: 9.27M, False: 394]
  ------------------
  748|  9.27M|            node->inner()[new_idx] =
  749|  9.27M|                idx == new_idx ? pos.last_oh(this_t{}, idx, e, tail)
  ------------------
  |  Branch (749:17): [True: 7.55M, False: 1.71M]
  ------------------
  750|       |                               /* otherwise */
  751|  9.27M|                               : node_t::make_path_e(e, pos.shift() - B, tail);
  752|  9.27M|            return node;
  753|  9.27M|        } else {
  754|    394|            auto new_parent = node_t::make_inner_e(e);
  755|    394|            IMMER_TRY {
  ------------------
  |  |   49|    394|#define IMMER_TRY try
  ------------------
  756|    394|                new_parent->inner()[new_idx] =
  757|    394|                    idx == new_idx
  ------------------
  |  Branch (757:21): [True: 197, False: 197]
  ------------------
  758|    394|                        ? pos.last_oh(this_no_mut_t{}, idx, e, tail)
  759|       |                        /* otherwise */
  760|    394|                        : node_t::make_path_e(e, pos.shift() - B, tail);
  761|    394|                node_t::do_copy_inner(new_parent, node, new_idx);
  762|    394|                if (Mutating)
  ------------------
  |  Branch (762:21): [True: 394, Folded]
  ------------------
  763|    394|                    pos.visit(dec_visitor{});
  764|    394|                return new_parent;
  765|    394|            }
  766|    394|            IMMER_CATCH (...) {
  767|      0|                node_t::delete_inner_e(new_parent);
  768|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  769|      0|            }
  770|    394|        }
  771|  9.27M|    }
_ZN5immer6detail4rbts21push_tail_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEELb0EE13visit_regularIRNS1_11regular_posISC_EEJEEEPSC_OT_NSA_5applyIS7_E4type4editESI_DpOT0_:
  741|  7.73k|    {
  742|  7.73k|        assert((pos.size() & mask<BL>) == 0);
  ------------------
  |  Branch (742:9): [True: 7.73k, False: 0]
  ------------------
  743|  7.73k|        auto node    = pos.node();
  744|  7.73k|        auto idx     = pos.index(pos.size() - 1);
  745|  7.73k|        auto new_idx = pos.index(pos.size() + branches<BL> - 1);
  746|  7.73k|        auto mutate  = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (746:24): [Folded, False: 7.73k]
  |  Branch (746:36): [True: 0, False: 0]
  ------------------
  747|  7.73k|        if (mutate) {
  ------------------
  |  Branch (747:13): [True: 0, False: 7.73k]
  ------------------
  748|      0|            node->inner()[new_idx] =
  749|      0|                idx == new_idx ? pos.last_oh(this_t{}, idx, e, tail)
  ------------------
  |  Branch (749:17): [True: 0, False: 0]
  ------------------
  750|       |                               /* otherwise */
  751|      0|                               : node_t::make_path_e(e, pos.shift() - B, tail);
  752|      0|            return node;
  753|  7.73k|        } else {
  754|  7.73k|            auto new_parent = node_t::make_inner_e(e);
  755|  7.73k|            IMMER_TRY {
  ------------------
  |  |   49|  7.73k|#define IMMER_TRY try
  ------------------
  756|  7.73k|                new_parent->inner()[new_idx] =
  757|  7.73k|                    idx == new_idx
  ------------------
  |  Branch (757:21): [True: 3.44k, False: 4.29k]
  ------------------
  758|  7.73k|                        ? pos.last_oh(this_no_mut_t{}, idx, e, tail)
  759|       |                        /* otherwise */
  760|  7.73k|                        : node_t::make_path_e(e, pos.shift() - B, tail);
  761|  7.73k|                node_t::do_copy_inner(new_parent, node, new_idx);
  762|  7.73k|                if (Mutating)
  ------------------
  |  Branch (762:21): [Folded, False: 7.73k]
  ------------------
  763|      0|                    pos.visit(dec_visitor{});
  764|  7.73k|                return new_parent;
  765|  7.73k|            }
  766|  7.73k|            IMMER_CATCH (...) {
  767|      0|                node_t::delete_inner_e(new_parent);
  768|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  769|      0|            }
  770|  7.73k|        }
  771|  7.73k|    }
_ZN5immer6detail4rbts21push_tail_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEELb0EE13visit_relaxedIRNS1_11relaxed_posISC_EEEEPSC_OT_NSA_5applyIS7_E4type4editESI_j:
  680|  18.1k|    {
  681|  18.1k|        auto node     = pos.node();
  682|  18.1k|        auto level    = pos.shift();
  683|  18.1k|        auto idx      = pos.count() - 1;
  684|  18.1k|        auto children = pos.size(idx);
  685|  18.1k|        auto new_idx =
  686|  18.1k|            children == size_t{1} << level || level == BL ? idx + 1 : idx;
  ------------------
  |  Branch (686:13): [True: 2.07k, False: 16.0k]
  |  Branch (686:47): [True: 217, False: 15.8k]
  ------------------
  687|  18.1k|        auto new_child = static_cast<node_t*>(nullptr);
  688|  18.1k|        auto mutate    = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (688:26): [Folded, False: 18.1k]
  |  Branch (688:38): [True: 0, False: 0]
  ------------------
  689|       |
  690|  18.1k|        if (new_idx >= branches<B>)
  ------------------
  |  Branch (690:13): [True: 738, False: 17.3k]
  ------------------
  691|    738|            return nullptr;
  692|  17.3k|        else if (idx == new_idx) {
  ------------------
  |  Branch (692:18): [True: 15.8k, False: 1.55k]
  ------------------
  693|  15.8k|            new_child =
  694|  15.8k|                mutate ? pos.last_oh_csh(this_t{}, idx, children, e, tail, ts)
  ------------------
  |  Branch (694:17): [True: 0, False: 15.8k]
  ------------------
  695|  15.8k|                       : pos.last_oh_csh(
  696|  15.8k|                             this_no_mut_t{}, idx, children, e, tail, ts);
  697|  15.8k|            if (!new_child) {
  ------------------
  |  Branch (697:17): [True: 1.72k, False: 14.0k]
  ------------------
  698|  1.72k|                if (++new_idx < branches<B>)
  ------------------
  |  Branch (698:21): [True: 289, False: 1.43k]
  ------------------
  699|    289|                    new_child = node_t::make_path_e(e, level - B, tail);
  700|  1.43k|                else
  701|  1.43k|                    return nullptr;
  702|  1.72k|            }
  703|  15.8k|        } else
  704|  1.55k|            new_child = node_t::make_path_e(e, level - B, tail);
  705|       |
  706|  15.9k|        if (mutate) {
  ------------------
  |  Branch (706:13): [True: 0, False: 15.9k]
  ------------------
  707|      0|            auto count             = new_idx + 1;
  708|      0|            auto relaxed           = node->ensure_mutable_relaxed_n(e, new_idx);
  709|      0|            node->inner()[new_idx] = new_child;
  710|      0|            relaxed->d.sizes[new_idx] = pos.size() + ts;
  711|      0|            relaxed->d.count          = count;
  712|      0|            assert(relaxed->d.sizes[new_idx]);
  ------------------
  |  Branch (712:13): [True: 0, False: 0]
  ------------------
  713|      0|            return node;
  714|  15.9k|        } else {
  715|  15.9k|            IMMER_TRY {
  ------------------
  |  |   49|  15.9k|#define IMMER_TRY try
  ------------------
  716|  15.9k|                auto count    = new_idx + 1;
  717|  15.9k|                auto new_node = node_t::copy_inner_r_e(e, pos.node(), new_idx);
  718|  15.9k|                auto relaxed  = new_node->relaxed();
  719|  15.9k|                new_node->inner()[new_idx] = new_child;
  720|  15.9k|                relaxed->d.sizes[new_idx]  = pos.size() + ts;
  721|  15.9k|                relaxed->d.count           = count;
  722|  15.9k|                assert(relaxed->d.sizes[new_idx]);
  ------------------
  |  Branch (722:17): [True: 15.9k, False: 0]
  ------------------
  723|  15.9k|                if (Mutating)
  ------------------
  |  Branch (723:21): [Folded, False: 15.9k]
  ------------------
  724|      0|                    pos.visit(dec_visitor{});
  725|  15.9k|                return new_node;
  726|  15.9k|            }
  727|  15.9k|            IMMER_CATCH (...) {
  728|      0|                auto shift = pos.shift();
  729|      0|                auto size  = new_idx == idx ? children + ts : ts;
  ------------------
  |  Branch (729:30): [True: 0, False: 0]
  ------------------
  730|      0|                if (shift > BL) {
  ------------------
  |  Branch (730:21): [True: 0, False: 0]
  ------------------
  731|      0|                    tail->inc();
  732|      0|                    dec_inner(new_child, shift - B, size);
  733|      0|                }
  734|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  735|      0|            }
  736|  15.9k|        }
  737|  15.9k|    }
_ZN5immer6detail4rbts21push_tail_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEELb0EE13visit_regularIRNS1_15regular_sub_posISC_EEJRjEEEPSC_OT_NSA_5applyIS7_E4type4editESJ_DpOT0_:
  741|  2.95k|    {
  742|  2.95k|        assert((pos.size() & mask<BL>) == 0);
  ------------------
  |  Branch (742:9): [True: 2.95k, False: 0]
  ------------------
  743|  2.95k|        auto node    = pos.node();
  744|  2.95k|        auto idx     = pos.index(pos.size() - 1);
  745|  2.95k|        auto new_idx = pos.index(pos.size() + branches<BL> - 1);
  746|  2.95k|        auto mutate  = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (746:24): [Folded, False: 2.95k]
  |  Branch (746:36): [True: 0, False: 0]
  ------------------
  747|  2.95k|        if (mutate) {
  ------------------
  |  Branch (747:13): [True: 0, False: 2.95k]
  ------------------
  748|      0|            node->inner()[new_idx] =
  749|      0|                idx == new_idx ? pos.last_oh(this_t{}, idx, e, tail)
  ------------------
  |  Branch (749:17): [True: 0, False: 0]
  ------------------
  750|       |                               /* otherwise */
  751|      0|                               : node_t::make_path_e(e, pos.shift() - B, tail);
  752|      0|            return node;
  753|  2.95k|        } else {
  754|  2.95k|            auto new_parent = node_t::make_inner_e(e);
  755|  2.95k|            IMMER_TRY {
  ------------------
  |  |   49|  2.95k|#define IMMER_TRY try
  ------------------
  756|  2.95k|                new_parent->inner()[new_idx] =
  757|  2.95k|                    idx == new_idx
  ------------------
  |  Branch (757:21): [True: 1.81k, False: 1.13k]
  ------------------
  758|  2.95k|                        ? pos.last_oh(this_no_mut_t{}, idx, e, tail)
  759|       |                        /* otherwise */
  760|  2.95k|                        : node_t::make_path_e(e, pos.shift() - B, tail);
  761|  2.95k|                node_t::do_copy_inner(new_parent, node, new_idx);
  762|  2.95k|                if (Mutating)
  ------------------
  |  Branch (762:21): [Folded, False: 2.95k]
  ------------------
  763|      0|                    pos.visit(dec_visitor{});
  764|  2.95k|                return new_parent;
  765|  2.95k|            }
  766|  2.95k|            IMMER_CATCH (...) {
  767|      0|                node_t::delete_inner_e(new_parent);
  768|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  769|      0|            }
  770|  2.95k|        }
  771|  2.95k|    }
_ZN5immer6detail4rbts21push_tail_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEELb1EE13visit_regularIRNS1_15regular_sub_posISC_EEJEEEPSC_OT_NSA_5applyIS7_E4type4editESI_DpOT0_:
  741|  1.08M|    {
  742|  1.08M|        assert((pos.size() & mask<BL>) == 0);
  ------------------
  |  Branch (742:9): [True: 1.08M, False: 0]
  ------------------
  743|  1.08M|        auto node    = pos.node();
  744|  1.08M|        auto idx     = pos.index(pos.size() - 1);
  745|  1.08M|        auto new_idx = pos.index(pos.size() + branches<BL> - 1);
  746|  1.08M|        auto mutate  = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (746:24): [True: 1.08M, Folded]
  |  Branch (746:36): [True: 1.07M, False: 3.89k]
  ------------------
  747|  1.08M|        if (mutate) {
  ------------------
  |  Branch (747:13): [True: 1.07M, False: 3.89k]
  ------------------
  748|  1.07M|            node->inner()[new_idx] =
  749|  1.07M|                idx == new_idx ? pos.last_oh(this_t{}, idx, e, tail)
  ------------------
  |  Branch (749:17): [True: 1.06M, False: 11.8k]
  ------------------
  750|       |                               /* otherwise */
  751|  1.07M|                               : node_t::make_path_e(e, pos.shift() - B, tail);
  752|  1.07M|            return node;
  753|  1.07M|        } else {
  754|  3.89k|            auto new_parent = node_t::make_inner_e(e);
  755|  3.89k|            IMMER_TRY {
  ------------------
  |  |   49|  3.89k|#define IMMER_TRY try
  ------------------
  756|  3.89k|                new_parent->inner()[new_idx] =
  757|  3.89k|                    idx == new_idx
  ------------------
  |  Branch (757:21): [True: 1.94k, False: 1.94k]
  ------------------
  758|  3.89k|                        ? pos.last_oh(this_no_mut_t{}, idx, e, tail)
  759|       |                        /* otherwise */
  760|  3.89k|                        : node_t::make_path_e(e, pos.shift() - B, tail);
  761|  3.89k|                node_t::do_copy_inner(new_parent, node, new_idx);
  762|  3.89k|                if (Mutating)
  ------------------
  |  Branch (762:21): [True: 3.89k, Folded]
  ------------------
  763|  3.89k|                    pos.visit(dec_visitor{});
  764|  3.89k|                return new_parent;
  765|  3.89k|            }
  766|  3.89k|            IMMER_CATCH (...) {
  767|      0|                node_t::delete_inner_e(new_parent);
  768|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  769|      0|            }
  770|  3.89k|        }
  771|  1.08M|    }
_ZN5immer6detail4rbts17dec_empty_regularINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEvPT_:
  580|  4.95k|{
  581|  4.95k|    make_empty_regular_pos(node).visit(dec_visitor());
  582|  4.95k|}
_ZN5immer6detail4rbts15get_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE13visit_relaxedIRNS1_11relaxed_posISC_EEEERiOT_mNSA_5applyIS7_E4type4editEPPSC_:
  595|  21.9k|    {
  596|  21.9k|        auto offset = pos.index(idx);
  597|  21.9k|        auto count  = pos.count();
  598|  21.9k|        auto node   = pos.node();
  599|  21.9k|        if (node->can_mutate(e)) {
  ------------------
  |  Branch (599:13): [True: 4.36k, False: 17.5k]
  ------------------
  600|  4.36k|            return pos.towards_oh(
  601|  4.36k|                this_t{}, idx, offset, e, &node->inner()[offset]);
  602|  17.5k|        } else {
  603|  17.5k|            auto new_node = node_t::copy_inner_sr_e(e, node, count);
  604|  17.5k|            IMMER_TRY {
  ------------------
  |  |   49|  17.5k|#define IMMER_TRY try
  ------------------
  605|  17.5k|                auto& res = pos.towards_oh(
  606|  17.5k|                    this_t{}, idx, offset, e, &new_node->inner()[offset]);
  607|  17.5k|                pos.visit(dec_visitor{});
  608|  17.5k|                *location = new_node;
  609|  17.5k|                return res;
  610|  17.5k|            }
  611|  17.5k|            IMMER_CATCH (...) {
  612|      0|                dec_relaxed(new_node, pos.shift());
  613|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  614|      0|            }
  615|  17.5k|        }
  616|  21.9k|    }
_ZN5immer6detail4rbts15get_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10visit_leafIRNS1_12leaf_sub_posISC_EEEERiOT_mNSA_5applyIS7_E4type4editEPPSC_:
  652|  3.32k|    {
  653|  3.32k|        assert(pos.node() == *location);
  ------------------
  |  Branch (653:9): [True: 3.32k, False: 0]
  ------------------
  654|  3.32k|        auto node = pos.node();
  655|  3.32k|        if (node->can_mutate(e)) {
  ------------------
  |  Branch (655:13): [True: 709, False: 2.61k]
  ------------------
  656|    709|            return node->leaf()[pos.index(idx)];
  657|  2.61k|        } else {
  658|  2.61k|            auto new_node = node_t::copy_leaf_e(e, pos.node(), pos.count());
  659|  2.61k|            pos.visit(dec_visitor{});
  660|  2.61k|            *location = new_node;
  661|  2.61k|            return new_node->leaf()[pos.index(idx)];
  662|  2.61k|        }
  663|  3.32k|    }
_ZN5immer6detail4rbts15get_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE13visit_regularIRNS1_15regular_sub_posISC_EEEERiOT_mNSA_5applyIS7_E4type4editEPPSC_:
  621|  6.51k|    {
  622|  6.51k|        assert(pos.node() == *location);
  ------------------
  |  Branch (622:9): [True: 6.51k, False: 0]
  ------------------
  623|  6.51k|        auto offset = pos.index(idx);
  624|  6.51k|        auto count  = pos.count();
  625|  6.51k|        auto node   = pos.node();
  626|  6.51k|        if (node->can_mutate(e)) {
  ------------------
  |  Branch (626:13): [True: 2.46k, False: 4.04k]
  ------------------
  627|  2.46k|            return pos.towards_oh_ch(
  628|  2.46k|                this_t{}, idx, offset, count, e, &node->inner()[offset]);
  629|  4.04k|        } else {
  630|  4.04k|            auto new_node = node_t::copy_inner_e(e, node, count);
  631|  4.04k|            IMMER_TRY {
  ------------------
  |  |   49|  4.04k|#define IMMER_TRY try
  ------------------
  632|  4.04k|                auto& res = pos.towards_oh_ch(this_t{},
  633|  4.04k|                                              idx,
  634|  4.04k|                                              offset,
  635|  4.04k|                                              count,
  636|  4.04k|                                              e,
  637|  4.04k|                                              &new_node->inner()[offset]);
  638|  4.04k|                pos.visit(dec_visitor{});
  639|  4.04k|                *location = new_node;
  640|  4.04k|                return res;
  641|  4.04k|            }
  642|  4.04k|            IMMER_CATCH (...) {
  643|      0|                dec_regular(new_node, pos.shift(), pos.size());
  644|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  645|      0|            }
  646|  4.04k|        }
  647|  6.51k|    }
_ZN5immer6detail4rbts15get_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10visit_leafIRNS1_13full_leaf_posISC_EEEERiOT_mNSA_5applyIS7_E4type4editEPPSC_:
  652|  5.04k|    {
  653|  5.04k|        assert(pos.node() == *location);
  ------------------
  |  Branch (653:9): [True: 5.04k, False: 0]
  ------------------
  654|  5.04k|        auto node = pos.node();
  655|  5.04k|        if (node->can_mutate(e)) {
  ------------------
  |  Branch (655:13): [True: 1.25k, False: 3.78k]
  ------------------
  656|  1.25k|            return node->leaf()[pos.index(idx)];
  657|  3.78k|        } else {
  658|  3.78k|            auto new_node = node_t::copy_leaf_e(e, pos.node(), pos.count());
  659|  3.78k|            pos.visit(dec_visitor{});
  660|  3.78k|            *location = new_node;
  661|  3.78k|            return new_node->leaf()[pos.index(idx)];
  662|  3.78k|        }
  663|  5.04k|    }
_ZN5immer6detail4rbts15get_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE13visit_regularIRNS1_8full_posISC_EEEERiOT_mNSA_5applyIS7_E4type4editEPPSC_:
  621|  5.85k|    {
  622|  5.85k|        assert(pos.node() == *location);
  ------------------
  |  Branch (622:9): [True: 5.85k, False: 0]
  ------------------
  623|  5.85k|        auto offset = pos.index(idx);
  624|  5.85k|        auto count  = pos.count();
  625|  5.85k|        auto node   = pos.node();
  626|  5.85k|        if (node->can_mutate(e)) {
  ------------------
  |  Branch (626:13): [True: 1.15k, False: 4.69k]
  ------------------
  627|  1.15k|            return pos.towards_oh_ch(
  628|  1.15k|                this_t{}, idx, offset, count, e, &node->inner()[offset]);
  629|  4.69k|        } else {
  630|  4.69k|            auto new_node = node_t::copy_inner_e(e, node, count);
  631|  4.69k|            IMMER_TRY {
  ------------------
  |  |   49|  4.69k|#define IMMER_TRY try
  ------------------
  632|  4.69k|                auto& res = pos.towards_oh_ch(this_t{},
  633|  4.69k|                                              idx,
  634|  4.69k|                                              offset,
  635|  4.69k|                                              count,
  636|  4.69k|                                              e,
  637|  4.69k|                                              &new_node->inner()[offset]);
  638|  4.69k|                pos.visit(dec_visitor{});
  639|  4.69k|                *location = new_node;
  640|  4.69k|                return res;
  641|  4.69k|            }
  642|  4.69k|            IMMER_CATCH (...) {
  643|      0|                dec_regular(new_node, pos.shift(), pos.size());
  644|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  645|      0|            }
  646|  4.69k|        }
  647|  5.85k|    }
_ZN5immer6detail4rbts15get_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10visit_leafIRNS1_8leaf_posISC_EEEERiOT_mNSA_5applyIS7_E4type4editEPPSC_:
  652|  1.46k|    {
  653|  1.46k|        assert(pos.node() == *location);
  ------------------
  |  Branch (653:9): [True: 1.46k, False: 0]
  ------------------
  654|  1.46k|        auto node = pos.node();
  655|  1.46k|        if (node->can_mutate(e)) {
  ------------------
  |  Branch (655:13): [True: 911, False: 556]
  ------------------
  656|    911|            return node->leaf()[pos.index(idx)];
  657|    911|        } else {
  658|    556|            auto new_node = node_t::copy_leaf_e(e, pos.node(), pos.count());
  659|    556|            pos.visit(dec_visitor{});
  660|    556|            *location = new_node;
  661|    556|            return new_node->leaf()[pos.index(idx)];
  662|    556|        }
  663|  1.46k|    }
_ZN5immer6detail4rbts15get_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE13visit_regularIRNS1_11regular_posISC_EEEERiOT_mNSA_5applyIS7_E4type4editEPPSC_:
  621|  1.98k|    {
  622|  1.98k|        assert(pos.node() == *location);
  ------------------
  |  Branch (622:9): [True: 1.98k, False: 0]
  ------------------
  623|  1.98k|        auto offset = pos.index(idx);
  624|  1.98k|        auto count  = pos.count();
  625|  1.98k|        auto node   = pos.node();
  626|  1.98k|        if (node->can_mutate(e)) {
  ------------------
  |  Branch (626:13): [True: 1.42k, False: 558]
  ------------------
  627|  1.42k|            return pos.towards_oh_ch(
  628|  1.42k|                this_t{}, idx, offset, count, e, &node->inner()[offset]);
  629|  1.42k|        } else {
  630|    558|            auto new_node = node_t::copy_inner_e(e, node, count);
  631|    558|            IMMER_TRY {
  ------------------
  |  |   49|    558|#define IMMER_TRY try
  ------------------
  632|    558|                auto& res = pos.towards_oh_ch(this_t{},
  633|    558|                                              idx,
  634|    558|                                              offset,
  635|    558|                                              count,
  636|    558|                                              e,
  637|    558|                                              &new_node->inner()[offset]);
  638|    558|                pos.visit(dec_visitor{});
  639|    558|                *location = new_node;
  640|    558|                return res;
  641|    558|            }
  642|    558|            IMMER_CATCH (...) {
  643|      0|                dec_regular(new_node, pos.shift(), pos.size());
  644|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  645|      0|            }
  646|    558|        }
  647|  1.98k|    }
_ZN5immer6detail4rbts23slice_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEELb1ELb1EE13visit_relaxedIRNS1_11relaxed_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_mNSA_5applyIS7_E4type4editE:
  913|  51.9k|    {
  914|  51.9k|        auto idx    = pos.index(last);
  915|  51.9k|        auto node   = pos.node();
  916|  51.9k|        auto mutate = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (916:23): [True: 51.9k, Folded]
  |  Branch (916:35): [True: 44.3k, False: 7.58k]
  ------------------
  917|  51.9k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (917:13): [True: 51.9k, Folded]
  |  Branch (917:25): [True: 40.4k, False: 11.5k]
  ------------------
  918|  40.4k|            auto res = mutate ? pos.towards_oh(this_t{}, last, idx, e)
  ------------------
  |  Branch (918:24): [True: 35.2k, False: 5.20k]
  ------------------
  919|  40.4k|                              : pos.towards_oh(no_mut_t{}, last, idx, e);
  920|  40.4k|            if (Mutating)
  ------------------
  |  Branch (920:17): [True: 40.4k, Folded]
  ------------------
  921|  40.4k|                pos.visit(dec_right_visitor{}, count_t{1});
  922|  40.4k|            return res;
  923|  40.4k|        } else {
  924|  11.5k|            using std::get;
  925|  11.5k|            auto subs =
  926|  11.5k|                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
  ------------------
  |  Branch (926:17): [True: 9.15k, False: 2.37k]
  ------------------
  927|  11.5k|                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
  928|  11.5k|            auto next = get<1>(subs);
  929|  11.5k|            auto ts   = get<2>(subs);
  930|  11.5k|            auto tail = get<3>(subs);
  931|  11.5k|            IMMER_TRY {
  ------------------
  |  |   49|  11.5k|#define IMMER_TRY try
  ------------------
  932|  11.5k|                if (next) {
  ------------------
  |  Branch (932:21): [True: 8.15k, False: 3.37k]
  ------------------
  933|  8.15k|                    if (mutate) {
  ------------------
  |  Branch (933:25): [True: 6.47k, False: 1.67k]
  ------------------
  934|  6.47k|                        auto nodr = node->ensure_mutable_relaxed_n(e, idx);
  935|  6.47k|                        pos.each_right(dec_visitor{}, idx + 1);
  936|  6.47k|                        node->inner()[idx] = next;
  937|  6.47k|                        nodr->d.sizes[idx] = last + 1 - ts;
  938|  6.47k|                        nodr->d.count      = idx + 1;
  939|  6.47k|                        assert(nodr->d.sizes[idx]);
  ------------------
  |  Branch (939:25): [True: 6.47k, False: 0]
  ------------------
  940|  6.47k|                        return std::make_tuple(pos.shift(), node, ts, tail);
  941|  6.47k|                    } else {
  942|  1.67k|                        auto newn = node_t::copy_inner_r_e(e, node, idx);
  943|  1.67k|                        auto newr = newn->relaxed();
  944|  1.67k|                        newn->inner()[idx] = next;
  945|  1.67k|                        newr->d.sizes[idx] = last + 1 - ts;
  946|  1.67k|                        newr->d.count      = idx + 1;
  947|  1.67k|                        assert(newr->d.sizes[idx]);
  ------------------
  |  Branch (947:25): [True: 1.67k, False: 0]
  ------------------
  948|  1.67k|                        if (Mutating)
  ------------------
  |  Branch (948:29): [True: 1.67k, Folded]
  ------------------
  949|  1.67k|                            pos.visit(dec_visitor{});
  950|  1.67k|                        return std::make_tuple(pos.shift(), newn, ts, tail);
  951|  1.67k|                    }
  952|  8.15k|                } else if (idx == 0) {
  ------------------
  |  Branch (952:28): [True: 0, False: 3.37k]
  ------------------
  953|      0|                    if (Mutating)
  ------------------
  |  Branch (953:25): [True: 0, Folded]
  ------------------
  954|      0|                        pos.visit(dec_right_visitor{}, count_t{1});
  955|      0|                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
  956|  3.37k|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (956:28): [True: 3.37k, Folded]
  |  Branch (956:40): [True: 2.28k, False: 1.09k]
  |  Branch (956:52): [True: 1.49k, False: 787]
  ------------------
  957|  1.49k|                    auto newn = pos.node()->inner()[0];
  958|  1.49k|                    if (!mutate)
  ------------------
  |  Branch (958:25): [True: 258, False: 1.23k]
  ------------------
  959|    258|                        newn->inc();
  960|  1.49k|                    if (Mutating)
  ------------------
  |  Branch (960:25): [True: 1.49k, Folded]
  ------------------
  961|  1.49k|                        pos.visit(dec_right_visitor{}, count_t{2});
  962|  1.49k|                    return std::make_tuple(pos.shift() - B, newn, ts, tail);
  963|  1.88k|                } else {
  964|  1.88k|                    if (mutate) {
  ------------------
  |  Branch (964:25): [True: 1.44k, False: 442]
  ------------------
  965|  1.44k|                        pos.each_right(dec_visitor{}, idx + 1);
  966|  1.44k|                        node->ensure_mutable_relaxed_n(e, idx)->d.count = idx;
  967|  1.44k|                        return std::make_tuple(pos.shift(), node, ts, tail);
  968|  1.44k|                    } else {
  969|    442|                        auto newn = node_t::copy_inner_r_e(e, node, idx);
  970|    442|                        if (Mutating)
  ------------------
  |  Branch (970:29): [True: 442, Folded]
  ------------------
  971|    442|                            pos.visit(dec_visitor{});
  972|    442|                        return std::make_tuple(pos.shift(), newn, ts, tail);
  973|    442|                    }
  974|  1.88k|                }
  975|  11.5k|            }
  976|  11.5k|            IMMER_CATCH (...) {
  977|      0|                assert(!mutate);
  ------------------
  |  Branch (977:17): [True: 0, False: 0]
  ------------------
  978|      0|                assert(!next || pos.shift() > BL);
  ------------------
  |  Branch (978:17): [True: 0, False: 0]
  |  Branch (978:17): [True: 0, False: 0]
  |  Branch (978:17): [True: 0, False: 0]
  ------------------
  979|      0|                if (next)
  ------------------
  |  Branch (979:21): [True: 0, False: 0]
  ------------------
  980|      0|                    dec_inner(next,
  981|      0|                              pos.shift() - B,
  982|      0|                              last + 1 - ts - pos.size_before(idx));
  983|      0|                dec_leaf(tail, ts);
  984|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  985|      0|            }
  986|  11.5k|        }
  987|  51.9k|    }
_ZN5immer6detail4rbts23slice_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEELb1ELb1EE10visit_leafIRNS1_12leaf_sub_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_mNSA_5applyIS7_E4type4editE:
 1059|  2.25k|    {
 1060|  2.25k|        auto old_tail_size = pos.count();
 1061|  2.25k|        auto new_tail_size = pos.index(last) + 1;
 1062|  2.25k|        auto node          = pos.node();
 1063|  2.25k|        auto mutate        = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (1063:30): [True: 2.25k, Folded]
  |  Branch (1063:42): [True: 1.75k, False: 503]
  ------------------
 1064|  2.25k|        if (new_tail_size == old_tail_size) {
  ------------------
  |  Branch (1064:13): [True: 1.69k, False: 561]
  ------------------
 1065|  1.69k|            if (!Mutating)
  ------------------
  |  Branch (1065:17): [Folded, False: 1.69k]
  ------------------
 1066|      0|                node->inc();
 1067|  1.69k|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1068|  1.69k|        } else if (mutate) {
  ------------------
  |  Branch (1068:20): [True: 284, False: 277]
  ------------------
 1069|    284|            detail::destroy_n(node->leaf() + new_tail_size,
 1070|    284|                              old_tail_size - new_tail_size);
 1071|    284|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1072|    284|        } else {
 1073|    277|            auto new_tail = node_t::copy_leaf_e(e, node, new_tail_size);
 1074|    277|            if (Mutating)
  ------------------
  |  Branch (1074:17): [True: 277, Folded]
  ------------------
 1075|    277|                pos.visit(dec_visitor{});
 1076|    277|            return std::make_tuple(0, nullptr, new_tail_size, new_tail);
 1077|    277|        }
 1078|  2.25k|    }
_ZN5immer6detail4rbts23slice_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEELb1ELb0EE10visit_leafIRNS1_12leaf_sub_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_mNSA_5applyIS7_E4type4editE:
 1059|  1.01k|    {
 1060|  1.01k|        auto old_tail_size = pos.count();
 1061|  1.01k|        auto new_tail_size = pos.index(last) + 1;
 1062|  1.01k|        auto node          = pos.node();
 1063|  1.01k|        auto mutate        = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (1063:30): [Folded, False: 1.01k]
  |  Branch (1063:42): [True: 0, False: 0]
  ------------------
 1064|  1.01k|        if (new_tail_size == old_tail_size) {
  ------------------
  |  Branch (1064:13): [True: 299, False: 713]
  ------------------
 1065|    299|            if (!Mutating)
  ------------------
  |  Branch (1065:17): [True: 299, Folded]
  ------------------
 1066|    299|                node->inc();
 1067|    299|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1068|    713|        } else if (mutate) {
  ------------------
  |  Branch (1068:20): [True: 0, False: 713]
  ------------------
 1069|      0|            detail::destroy_n(node->leaf() + new_tail_size,
 1070|      0|                              old_tail_size - new_tail_size);
 1071|      0|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1072|    713|        } else {
 1073|    713|            auto new_tail = node_t::copy_leaf_e(e, node, new_tail_size);
 1074|    713|            if (Mutating)
  ------------------
  |  Branch (1074:17): [Folded, False: 713]
  ------------------
 1075|      0|                pos.visit(dec_visitor{});
 1076|    713|            return std::make_tuple(0, nullptr, new_tail_size, new_tail);
 1077|    713|        }
 1078|  1.01k|    }
_ZN5immer6detail4rbts23slice_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEELb1ELb0EE13visit_relaxedIRNS1_11relaxed_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_mNSA_5applyIS7_E4type4editE:
  913|  21.6k|    {
  914|  21.6k|        auto idx    = pos.index(last);
  915|  21.6k|        auto node   = pos.node();
  916|  21.6k|        auto mutate = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (916:23): [Folded, False: 21.6k]
  |  Branch (916:35): [True: 0, False: 0]
  ------------------
  917|  21.6k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (917:13): [True: 21.6k, Folded]
  |  Branch (917:25): [True: 18.5k, False: 3.09k]
  ------------------
  918|  18.5k|            auto res = mutate ? pos.towards_oh(this_t{}, last, idx, e)
  ------------------
  |  Branch (918:24): [True: 0, False: 18.5k]
  ------------------
  919|  18.5k|                              : pos.towards_oh(no_mut_t{}, last, idx, e);
  920|  18.5k|            if (Mutating)
  ------------------
  |  Branch (920:17): [Folded, False: 18.5k]
  ------------------
  921|      0|                pos.visit(dec_right_visitor{}, count_t{1});
  922|  18.5k|            return res;
  923|  18.5k|        } else {
  924|  3.09k|            using std::get;
  925|  3.09k|            auto subs =
  926|  3.09k|                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
  ------------------
  |  Branch (926:17): [True: 0, False: 3.09k]
  ------------------
  927|  3.09k|                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
  928|  3.09k|            auto next = get<1>(subs);
  929|  3.09k|            auto ts   = get<2>(subs);
  930|  3.09k|            auto tail = get<3>(subs);
  931|  3.09k|            IMMER_TRY {
  ------------------
  |  |   49|  3.09k|#define IMMER_TRY try
  ------------------
  932|  3.09k|                if (next) {
  ------------------
  |  Branch (932:21): [True: 1.40k, False: 1.69k]
  ------------------
  933|  1.40k|                    if (mutate) {
  ------------------
  |  Branch (933:25): [True: 0, False: 1.40k]
  ------------------
  934|      0|                        auto nodr = node->ensure_mutable_relaxed_n(e, idx);
  935|      0|                        pos.each_right(dec_visitor{}, idx + 1);
  936|      0|                        node->inner()[idx] = next;
  937|      0|                        nodr->d.sizes[idx] = last + 1 - ts;
  938|      0|                        nodr->d.count      = idx + 1;
  939|      0|                        assert(nodr->d.sizes[idx]);
  ------------------
  |  Branch (939:25): [True: 0, False: 0]
  ------------------
  940|      0|                        return std::make_tuple(pos.shift(), node, ts, tail);
  941|  1.40k|                    } else {
  942|  1.40k|                        auto newn = node_t::copy_inner_r_e(e, node, idx);
  943|  1.40k|                        auto newr = newn->relaxed();
  944|  1.40k|                        newn->inner()[idx] = next;
  945|  1.40k|                        newr->d.sizes[idx] = last + 1 - ts;
  946|  1.40k|                        newr->d.count      = idx + 1;
  947|  1.40k|                        assert(newr->d.sizes[idx]);
  ------------------
  |  Branch (947:25): [True: 1.40k, False: 0]
  ------------------
  948|  1.40k|                        if (Mutating)
  ------------------
  |  Branch (948:29): [Folded, False: 1.40k]
  ------------------
  949|      0|                            pos.visit(dec_visitor{});
  950|  1.40k|                        return std::make_tuple(pos.shift(), newn, ts, tail);
  951|  1.40k|                    }
  952|  1.69k|                } else if (idx == 0) {
  ------------------
  |  Branch (952:28): [True: 0, False: 1.69k]
  ------------------
  953|      0|                    if (Mutating)
  ------------------
  |  Branch (953:25): [Folded, False: 0]
  ------------------
  954|      0|                        pos.visit(dec_right_visitor{}, count_t{1});
  955|      0|                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
  956|  1.69k|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (956:28): [True: 1.69k, Folded]
  |  Branch (956:40): [True: 1.06k, False: 626]
  |  Branch (956:52): [True: 789, False: 279]
  ------------------
  957|    789|                    auto newn = pos.node()->inner()[0];
  958|    789|                    if (!mutate)
  ------------------
  |  Branch (958:25): [True: 789, False: 0]
  ------------------
  959|    789|                        newn->inc();
  960|    789|                    if (Mutating)
  ------------------
  |  Branch (960:25): [Folded, False: 789]
  ------------------
  961|      0|                        pos.visit(dec_right_visitor{}, count_t{2});
  962|    789|                    return std::make_tuple(pos.shift() - B, newn, ts, tail);
  963|    905|                } else {
  964|    905|                    if (mutate) {
  ------------------
  |  Branch (964:25): [True: 0, False: 905]
  ------------------
  965|      0|                        pos.each_right(dec_visitor{}, idx + 1);
  966|      0|                        node->ensure_mutable_relaxed_n(e, idx)->d.count = idx;
  967|      0|                        return std::make_tuple(pos.shift(), node, ts, tail);
  968|    905|                    } else {
  969|    905|                        auto newn = node_t::copy_inner_r_e(e, node, idx);
  970|    905|                        if (Mutating)
  ------------------
  |  Branch (970:29): [Folded, False: 905]
  ------------------
  971|      0|                            pos.visit(dec_visitor{});
  972|    905|                        return std::make_tuple(pos.shift(), newn, ts, tail);
  973|    905|                    }
  974|    905|                }
  975|  3.09k|            }
  976|  3.09k|            IMMER_CATCH (...) {
  977|      0|                assert(!mutate);
  ------------------
  |  Branch (977:17): [True: 0, False: 0]
  ------------------
  978|      0|                assert(!next || pos.shift() > BL);
  ------------------
  |  Branch (978:17): [True: 0, False: 0]
  |  Branch (978:17): [True: 0, False: 0]
  |  Branch (978:17): [True: 0, False: 0]
  ------------------
  979|      0|                if (next)
  ------------------
  |  Branch (979:21): [True: 0, False: 0]
  ------------------
  980|      0|                    dec_inner(next,
  981|      0|                              pos.shift() - B,
  982|      0|                              last + 1 - ts - pos.size_before(idx));
  983|      0|                dec_leaf(tail, ts);
  984|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  985|      0|            }
  986|  3.09k|        }
  987|  21.6k|    }
_ZN5immer6detail4rbts23slice_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEELb1ELb0EE13visit_regularIRNS1_15regular_sub_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_mNSA_5applyIS7_E4type4editE:
  991|  1.09k|    {
  992|  1.09k|        auto idx    = pos.index(last);
  993|  1.09k|        auto node   = pos.node();
  994|  1.09k|        auto mutate = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (994:23): [Folded, False: 1.09k]
  |  Branch (994:35): [True: 0, False: 0]
  ------------------
  995|  1.09k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (995:13): [True: 1.09k, Folded]
  |  Branch (995:25): [True: 283, False: 816]
  ------------------
  996|    283|            auto res = mutate ? pos.towards_oh(this_t{}, last, idx, e)
  ------------------
  |  Branch (996:24): [True: 0, False: 283]
  ------------------
  997|    283|                              : pos.towards_oh(no_mut_t{}, last, idx, e);
  998|    283|            if (Mutating)
  ------------------
  |  Branch (998:17): [Folded, False: 283]
  ------------------
  999|      0|                pos.visit(dec_right_visitor{}, count_t{1});
 1000|    283|            return res;
 1001|    816|        } else {
 1002|    816|            using std::get;
 1003|    816|            auto subs =
 1004|    816|                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
  ------------------
  |  Branch (1004:17): [True: 0, False: 816]
  ------------------
 1005|    816|                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
 1006|    816|            auto next = get<1>(subs);
 1007|    816|            auto ts   = get<2>(subs);
 1008|    816|            auto tail = get<3>(subs);
 1009|    816|            IMMER_TRY {
  ------------------
  |  |   49|    816|#define IMMER_TRY try
  ------------------
 1010|    816|                if (next) {
  ------------------
  |  Branch (1010:21): [True: 216, False: 600]
  ------------------
 1011|    216|                    if (mutate) {
  ------------------
  |  Branch (1011:25): [True: 0, False: 216]
  ------------------
 1012|      0|                        node->inner()[idx] = next;
 1013|      0|                        pos.each_right(dec_visitor{}, idx + 1);
 1014|      0|                        return std::make_tuple(pos.shift(), node, ts, tail);
 1015|    216|                    } else {
 1016|    216|                        auto newn          = node_t::copy_inner_e(e, node, idx);
 1017|    216|                        newn->inner()[idx] = next;
 1018|    216|                        if (Mutating)
  ------------------
  |  Branch (1018:29): [Folded, False: 216]
  ------------------
 1019|      0|                            pos.visit(dec_visitor{});
 1020|    216|                        return std::make_tuple(pos.shift(), newn, ts, tail);
 1021|    216|                    }
 1022|    600|                } else if (idx == 0) {
  ------------------
  |  Branch (1022:28): [True: 0, False: 600]
  ------------------
 1023|      0|                    if (Mutating)
  ------------------
  |  Branch (1023:25): [Folded, False: 0]
  ------------------
 1024|      0|                        pos.visit(dec_right_visitor{}, count_t{1});
 1025|      0|                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
 1026|    600|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (1026:28): [True: 600, Folded]
  |  Branch (1026:40): [True: 398, False: 202]
  |  Branch (1026:52): [True: 195, False: 203]
  ------------------
 1027|    195|                    auto newn = pos.node()->inner()[0];
 1028|    195|                    if (!mutate)
  ------------------
  |  Branch (1028:25): [True: 195, False: 0]
  ------------------
 1029|    195|                        newn->inc();
 1030|    195|                    if (Mutating)
  ------------------
  |  Branch (1030:25): [Folded, False: 195]
  ------------------
 1031|      0|                        pos.visit(dec_right_visitor{}, count_t{2});
 1032|    195|                    return std::make_tuple(pos.shift() - B, newn, ts, tail);
 1033|    405|                } else {
 1034|    405|                    if (mutate) {
  ------------------
  |  Branch (1034:25): [True: 0, False: 405]
  ------------------
 1035|      0|                        pos.each_right(dec_visitor{}, idx + 1);
 1036|      0|                        return std::make_tuple(pos.shift(), node, ts, tail);
 1037|    405|                    } else {
 1038|    405|                        auto newn = node_t::copy_inner_e(e, node, idx);
 1039|    405|                        if (Mutating)
  ------------------
  |  Branch (1039:29): [Folded, False: 405]
  ------------------
 1040|      0|                            pos.visit(dec_visitor{});
 1041|    405|                        return std::make_tuple(pos.shift(), newn, ts, tail);
 1042|    405|                    }
 1043|    405|                }
 1044|    816|            }
 1045|    816|            IMMER_CATCH (...) {
 1046|      0|                assert(!mutate);
  ------------------
  |  Branch (1046:17): [True: 0, False: 0]
  ------------------
 1047|      0|                assert(!next || pos.shift() > BL);
  ------------------
  |  Branch (1047:17): [True: 0, False: 0]
  |  Branch (1047:17): [True: 0, False: 0]
  |  Branch (1047:17): [True: 0, False: 0]
  ------------------
 1048|      0|                assert(tail);
  ------------------
  |  Branch (1048:17): [True: 0, False: 0]
  ------------------
 1049|      0|                if (next)
  ------------------
  |  Branch (1049:21): [True: 0, False: 0]
  ------------------
 1050|      0|                    dec_regular(next, pos.shift() - B, last + 1 - ts);
 1051|      0|                dec_leaf(tail, ts);
 1052|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1053|      0|            }
 1054|    816|        }
 1055|  1.09k|    }
_ZN5immer6detail4rbts23slice_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEELb1ELb0EE10visit_leafIRNS1_13full_leaf_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_mNSA_5applyIS7_E4type4editE:
 1059|  1.47k|    {
 1060|  1.47k|        auto old_tail_size = pos.count();
 1061|  1.47k|        auto new_tail_size = pos.index(last) + 1;
 1062|  1.47k|        auto node          = pos.node();
 1063|  1.47k|        auto mutate        = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (1063:30): [Folded, False: 1.47k]
  |  Branch (1063:42): [True: 0, False: 0]
  ------------------
 1064|  1.47k|        if (new_tail_size == old_tail_size) {
  ------------------
  |  Branch (1064:13): [True: 640, False: 830]
  ------------------
 1065|    640|            if (!Mutating)
  ------------------
  |  Branch (1065:17): [True: 640, Folded]
  ------------------
 1066|    640|                node->inc();
 1067|    640|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1068|    830|        } else if (mutate) {
  ------------------
  |  Branch (1068:20): [True: 0, False: 830]
  ------------------
 1069|      0|            detail::destroy_n(node->leaf() + new_tail_size,
 1070|      0|                              old_tail_size - new_tail_size);
 1071|      0|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1072|    830|        } else {
 1073|    830|            auto new_tail = node_t::copy_leaf_e(e, node, new_tail_size);
 1074|    830|            if (Mutating)
  ------------------
  |  Branch (1074:17): [Folded, False: 830]
  ------------------
 1075|      0|                pos.visit(dec_visitor{});
 1076|    830|            return std::make_tuple(0, nullptr, new_tail_size, new_tail);
 1077|    830|        }
 1078|  1.47k|    }
_ZN5immer6detail4rbts23slice_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEELb1ELb0EE13visit_regularIRNS1_8full_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_mNSA_5applyIS7_E4type4editE:
  991|  2.17k|    {
  992|  2.17k|        auto idx    = pos.index(last);
  993|  2.17k|        auto node   = pos.node();
  994|  2.17k|        auto mutate = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (994:23): [Folded, False: 2.17k]
  |  Branch (994:35): [True: 0, False: 0]
  ------------------
  995|  2.17k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (995:13): [True: 2.17k, Folded]
  |  Branch (995:25): [True: 1.00k, False: 1.17k]
  ------------------
  996|  1.00k|            auto res = mutate ? pos.towards_oh(this_t{}, last, idx, e)
  ------------------
  |  Branch (996:24): [True: 0, False: 1.00k]
  ------------------
  997|  1.00k|                              : pos.towards_oh(no_mut_t{}, last, idx, e);
  998|  1.00k|            if (Mutating)
  ------------------
  |  Branch (998:17): [Folded, False: 1.00k]
  ------------------
  999|      0|                pos.visit(dec_right_visitor{}, count_t{1});
 1000|  1.00k|            return res;
 1001|  1.17k|        } else {
 1002|  1.17k|            using std::get;
 1003|  1.17k|            auto subs =
 1004|  1.17k|                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
  ------------------
  |  Branch (1004:17): [True: 0, False: 1.17k]
  ------------------
 1005|  1.17k|                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
 1006|  1.17k|            auto next = get<1>(subs);
 1007|  1.17k|            auto ts   = get<2>(subs);
 1008|  1.17k|            auto tail = get<3>(subs);
 1009|  1.17k|            IMMER_TRY {
  ------------------
  |  |   49|  1.17k|#define IMMER_TRY try
  ------------------
 1010|  1.17k|                if (next) {
  ------------------
  |  Branch (1010:21): [True: 316, False: 856]
  ------------------
 1011|    316|                    if (mutate) {
  ------------------
  |  Branch (1011:25): [True: 0, False: 316]
  ------------------
 1012|      0|                        node->inner()[idx] = next;
 1013|      0|                        pos.each_right(dec_visitor{}, idx + 1);
 1014|      0|                        return std::make_tuple(pos.shift(), node, ts, tail);
 1015|    316|                    } else {
 1016|    316|                        auto newn          = node_t::copy_inner_e(e, node, idx);
 1017|    316|                        newn->inner()[idx] = next;
 1018|    316|                        if (Mutating)
  ------------------
  |  Branch (1018:29): [Folded, False: 316]
  ------------------
 1019|      0|                            pos.visit(dec_visitor{});
 1020|    316|                        return std::make_tuple(pos.shift(), newn, ts, tail);
 1021|    316|                    }
 1022|    856|                } else if (idx == 0) {
  ------------------
  |  Branch (1022:28): [True: 0, False: 856]
  ------------------
 1023|      0|                    if (Mutating)
  ------------------
  |  Branch (1023:25): [Folded, False: 0]
  ------------------
 1024|      0|                        pos.visit(dec_right_visitor{}, count_t{1});
 1025|      0|                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
 1026|    856|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (1026:28): [True: 856, Folded]
  |  Branch (1026:40): [True: 631, False: 225]
  |  Branch (1026:52): [True: 259, False: 372]
  ------------------
 1027|    259|                    auto newn = pos.node()->inner()[0];
 1028|    259|                    if (!mutate)
  ------------------
  |  Branch (1028:25): [True: 259, False: 0]
  ------------------
 1029|    259|                        newn->inc();
 1030|    259|                    if (Mutating)
  ------------------
  |  Branch (1030:25): [Folded, False: 259]
  ------------------
 1031|      0|                        pos.visit(dec_right_visitor{}, count_t{2});
 1032|    259|                    return std::make_tuple(pos.shift() - B, newn, ts, tail);
 1033|    597|                } else {
 1034|    597|                    if (mutate) {
  ------------------
  |  Branch (1034:25): [True: 0, False: 597]
  ------------------
 1035|      0|                        pos.each_right(dec_visitor{}, idx + 1);
 1036|      0|                        return std::make_tuple(pos.shift(), node, ts, tail);
 1037|    597|                    } else {
 1038|    597|                        auto newn = node_t::copy_inner_e(e, node, idx);
 1039|    597|                        if (Mutating)
  ------------------
  |  Branch (1039:29): [Folded, False: 597]
  ------------------
 1040|      0|                            pos.visit(dec_visitor{});
 1041|    597|                        return std::make_tuple(pos.shift(), newn, ts, tail);
 1042|    597|                    }
 1043|    597|                }
 1044|  1.17k|            }
 1045|  1.17k|            IMMER_CATCH (...) {
 1046|      0|                assert(!mutate);
  ------------------
  |  Branch (1046:17): [True: 0, False: 0]
  ------------------
 1047|      0|                assert(!next || pos.shift() > BL);
  ------------------
  |  Branch (1047:17): [True: 0, False: 0]
  |  Branch (1047:17): [True: 0, False: 0]
  |  Branch (1047:17): [True: 0, False: 0]
  ------------------
 1048|      0|                assert(tail);
  ------------------
  |  Branch (1048:17): [True: 0, False: 0]
  ------------------
 1049|      0|                if (next)
  ------------------
  |  Branch (1049:21): [True: 0, False: 0]
  ------------------
 1050|      0|                    dec_regular(next, pos.shift() - B, last + 1 - ts);
 1051|      0|                dec_leaf(tail, ts);
 1052|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1053|      0|            }
 1054|  1.17k|        }
 1055|  2.17k|    }
_ZN5immer6detail4rbts23slice_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEELb0ELb1EE10visit_leafIRNS1_13full_leaf_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_mNSA_5applyIS7_E4type4editE:
 1059|  2.51k|    {
 1060|  2.51k|        auto old_tail_size = pos.count();
 1061|  2.51k|        auto new_tail_size = pos.index(last) + 1;
 1062|  2.51k|        auto node          = pos.node();
 1063|  2.51k|        auto mutate        = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (1063:30): [True: 2.51k, Folded]
  |  Branch (1063:42): [True: 1.24k, False: 1.26k]
  ------------------
 1064|  2.51k|        if (new_tail_size == old_tail_size) {
  ------------------
  |  Branch (1064:13): [True: 1.07k, False: 1.44k]
  ------------------
 1065|  1.07k|            if (!Mutating)
  ------------------
  |  Branch (1065:17): [Folded, False: 1.07k]
  ------------------
 1066|      0|                node->inc();
 1067|  1.07k|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1068|  1.44k|        } else if (mutate) {
  ------------------
  |  Branch (1068:20): [True: 656, False: 789]
  ------------------
 1069|    656|            detail::destroy_n(node->leaf() + new_tail_size,
 1070|    656|                              old_tail_size - new_tail_size);
 1071|    656|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1072|    789|        } else {
 1073|    789|            auto new_tail = node_t::copy_leaf_e(e, node, new_tail_size);
 1074|    789|            if (Mutating)
  ------------------
  |  Branch (1074:17): [True: 789, Folded]
  ------------------
 1075|    789|                pos.visit(dec_visitor{});
 1076|    789|            return std::make_tuple(0, nullptr, new_tail_size, new_tail);
 1077|    789|        }
 1078|  2.51k|    }
_ZN5immer6detail4rbts23slice_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEELb0ELb1EE13visit_regularIRNS1_8full_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_mNSA_5applyIS7_E4type4editE:
  991|  2.81k|    {
  992|  2.81k|        auto idx    = pos.index(last);
  993|  2.81k|        auto node   = pos.node();
  994|  2.81k|        auto mutate = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (994:23): [True: 2.81k, Folded]
  |  Branch (994:35): [True: 831, False: 1.98k]
  ------------------
  995|  2.81k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (995:13): [Folded, False: 2.81k]
  |  Branch (995:25): [True: 0, False: 0]
  ------------------
  996|      0|            auto res = mutate ? pos.towards_oh(this_t{}, last, idx, e)
  ------------------
  |  Branch (996:24): [True: 0, False: 0]
  ------------------
  997|      0|                              : pos.towards_oh(no_mut_t{}, last, idx, e);
  998|      0|            if (Mutating)
  ------------------
  |  Branch (998:17): [True: 0, Folded]
  ------------------
  999|      0|                pos.visit(dec_right_visitor{}, count_t{1});
 1000|      0|            return res;
 1001|  2.81k|        } else {
 1002|  2.81k|            using std::get;
 1003|  2.81k|            auto subs =
 1004|  2.81k|                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
  ------------------
  |  Branch (1004:17): [True: 831, False: 1.98k]
  ------------------
 1005|  2.81k|                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
 1006|  2.81k|            auto next = get<1>(subs);
 1007|  2.81k|            auto ts   = get<2>(subs);
 1008|  2.81k|            auto tail = get<3>(subs);
 1009|  2.81k|            IMMER_TRY {
  ------------------
  |  |   49|  2.81k|#define IMMER_TRY try
  ------------------
 1010|  2.81k|                if (next) {
  ------------------
  |  Branch (1010:21): [True: 813, False: 1.99k]
  ------------------
 1011|    813|                    if (mutate) {
  ------------------
  |  Branch (1011:25): [True: 324, False: 489]
  ------------------
 1012|    324|                        node->inner()[idx] = next;
 1013|    324|                        pos.each_right(dec_visitor{}, idx + 1);
 1014|    324|                        return std::make_tuple(pos.shift(), node, ts, tail);
 1015|    489|                    } else {
 1016|    489|                        auto newn          = node_t::copy_inner_e(e, node, idx);
 1017|    489|                        newn->inner()[idx] = next;
 1018|    489|                        if (Mutating)
  ------------------
  |  Branch (1018:29): [True: 489, Folded]
  ------------------
 1019|    489|                            pos.visit(dec_visitor{});
 1020|    489|                        return std::make_tuple(pos.shift(), newn, ts, tail);
 1021|    489|                    }
 1022|  1.99k|                } else if (idx == 0) {
  ------------------
  |  Branch (1022:28): [True: 249, False: 1.75k]
  ------------------
 1023|    249|                    if (Mutating)
  ------------------
  |  Branch (1023:25): [True: 249, Folded]
  ------------------
 1024|    249|                        pos.visit(dec_right_visitor{}, count_t{1});
 1025|    249|                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
 1026|  1.75k|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (1026:28): [Folded, False: 1.75k]
  |  Branch (1026:40): [True: 0, False: 0]
  |  Branch (1026:52): [True: 0, False: 0]
  ------------------
 1027|      0|                    auto newn = pos.node()->inner()[0];
 1028|      0|                    if (!mutate)
  ------------------
  |  Branch (1028:25): [True: 0, False: 0]
  ------------------
 1029|      0|                        newn->inc();
 1030|      0|                    if (Mutating)
  ------------------
  |  Branch (1030:25): [True: 0, Folded]
  ------------------
 1031|      0|                        pos.visit(dec_right_visitor{}, count_t{2});
 1032|      0|                    return std::make_tuple(pos.shift() - B, newn, ts, tail);
 1033|  1.75k|                } else {
 1034|  1.75k|                    if (mutate) {
  ------------------
  |  Branch (1034:25): [True: 501, False: 1.24k]
  ------------------
 1035|    501|                        pos.each_right(dec_visitor{}, idx + 1);
 1036|    501|                        return std::make_tuple(pos.shift(), node, ts, tail);
 1037|  1.24k|                    } else {
 1038|  1.24k|                        auto newn = node_t::copy_inner_e(e, node, idx);
 1039|  1.24k|                        if (Mutating)
  ------------------
  |  Branch (1039:29): [True: 1.24k, Folded]
  ------------------
 1040|  1.24k|                            pos.visit(dec_visitor{});
 1041|  1.24k|                        return std::make_tuple(pos.shift(), newn, ts, tail);
 1042|  1.24k|                    }
 1043|  1.75k|                }
 1044|  2.81k|            }
 1045|  2.81k|            IMMER_CATCH (...) {
 1046|      0|                assert(!mutate);
  ------------------
  |  Branch (1046:17): [True: 0, False: 0]
  ------------------
 1047|      0|                assert(!next || pos.shift() > BL);
  ------------------
  |  Branch (1047:17): [True: 0, False: 0]
  |  Branch (1047:17): [True: 0, False: 0]
  |  Branch (1047:17): [True: 0, False: 0]
  ------------------
 1048|      0|                assert(tail);
  ------------------
  |  Branch (1048:17): [True: 0, False: 0]
  ------------------
 1049|      0|                if (next)
  ------------------
  |  Branch (1049:21): [True: 0, False: 0]
  ------------------
 1050|      0|                    dec_regular(next, pos.shift() - B, last + 1 - ts);
 1051|      0|                dec_leaf(tail, ts);
 1052|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1053|      0|            }
 1054|  2.81k|        }
 1055|  2.81k|    }
_ZN5immer6detail4rbts17dec_right_visitor13visit_regularIRNS1_8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEEEvOT_j:
  878|  1.83k|    {
  879|  1.83k|        using node_t = node_type<Pos>;
  880|  1.83k|        auto node    = p.node();
  881|  1.83k|        if (node->dec()) {
  ------------------
  |  Branch (881:13): [True: 0, False: 1.83k]
  ------------------
  882|      0|            p.each_right(dec_t{}, idx);
  883|      0|            node_t::delete_inner(node, p.count());
  884|      0|        }
  885|  1.83k|    }
_ZN5immer6detail4rbts23slice_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEELb0ELb0EE10visit_leafIRNS1_13full_leaf_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_mNSA_5applyIS7_E4type4editE:
 1059|  7.53k|    {
 1060|  7.53k|        auto old_tail_size = pos.count();
 1061|  7.53k|        auto new_tail_size = pos.index(last) + 1;
 1062|  7.53k|        auto node          = pos.node();
 1063|  7.53k|        auto mutate        = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (1063:30): [Folded, False: 7.53k]
  |  Branch (1063:42): [True: 0, False: 0]
  ------------------
 1064|  7.53k|        if (new_tail_size == old_tail_size) {
  ------------------
  |  Branch (1064:13): [True: 3.27k, False: 4.26k]
  ------------------
 1065|  3.27k|            if (!Mutating)
  ------------------
  |  Branch (1065:17): [True: 3.27k, Folded]
  ------------------
 1066|  3.27k|                node->inc();
 1067|  3.27k|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1068|  4.26k|        } else if (mutate) {
  ------------------
  |  Branch (1068:20): [True: 0, False: 4.26k]
  ------------------
 1069|      0|            detail::destroy_n(node->leaf() + new_tail_size,
 1070|      0|                              old_tail_size - new_tail_size);
 1071|      0|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1072|  4.26k|        } else {
 1073|  4.26k|            auto new_tail = node_t::copy_leaf_e(e, node, new_tail_size);
 1074|  4.26k|            if (Mutating)
  ------------------
  |  Branch (1074:17): [Folded, False: 4.26k]
  ------------------
 1075|      0|                pos.visit(dec_visitor{});
 1076|  4.26k|            return std::make_tuple(0, nullptr, new_tail_size, new_tail);
 1077|  4.26k|        }
 1078|  7.53k|    }
_ZN5immer6detail4rbts23slice_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEELb0ELb0EE13visit_regularIRNS1_8full_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_mNSA_5applyIS7_E4type4editE:
  991|  4.37k|    {
  992|  4.37k|        auto idx    = pos.index(last);
  993|  4.37k|        auto node   = pos.node();
  994|  4.37k|        auto mutate = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (994:23): [Folded, False: 4.37k]
  |  Branch (994:35): [True: 0, False: 0]
  ------------------
  995|  4.37k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (995:13): [Folded, False: 4.37k]
  |  Branch (995:25): [True: 0, False: 0]
  ------------------
  996|      0|            auto res = mutate ? pos.towards_oh(this_t{}, last, idx, e)
  ------------------
  |  Branch (996:24): [True: 0, False: 0]
  ------------------
  997|      0|                              : pos.towards_oh(no_mut_t{}, last, idx, e);
  998|      0|            if (Mutating)
  ------------------
  |  Branch (998:17): [Folded, False: 0]
  ------------------
  999|      0|                pos.visit(dec_right_visitor{}, count_t{1});
 1000|      0|            return res;
 1001|  4.37k|        } else {
 1002|  4.37k|            using std::get;
 1003|  4.37k|            auto subs =
 1004|  4.37k|                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
  ------------------
  |  Branch (1004:17): [True: 0, False: 4.37k]
  ------------------
 1005|  4.37k|                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
 1006|  4.37k|            auto next = get<1>(subs);
 1007|  4.37k|            auto ts   = get<2>(subs);
 1008|  4.37k|            auto tail = get<3>(subs);
 1009|  4.37k|            IMMER_TRY {
  ------------------
  |  |   49|  4.37k|#define IMMER_TRY try
  ------------------
 1010|  4.37k|                if (next) {
  ------------------
  |  Branch (1010:21): [True: 837, False: 3.53k]
  ------------------
 1011|    837|                    if (mutate) {
  ------------------
  |  Branch (1011:25): [True: 0, False: 837]
  ------------------
 1012|      0|                        node->inner()[idx] = next;
 1013|      0|                        pos.each_right(dec_visitor{}, idx + 1);
 1014|      0|                        return std::make_tuple(pos.shift(), node, ts, tail);
 1015|    837|                    } else {
 1016|    837|                        auto newn          = node_t::copy_inner_e(e, node, idx);
 1017|    837|                        newn->inner()[idx] = next;
 1018|    837|                        if (Mutating)
  ------------------
  |  Branch (1018:29): [Folded, False: 837]
  ------------------
 1019|      0|                            pos.visit(dec_visitor{});
 1020|    837|                        return std::make_tuple(pos.shift(), newn, ts, tail);
 1021|    837|                    }
 1022|  3.53k|                } else if (idx == 0) {
  ------------------
  |  Branch (1022:28): [True: 1.07k, False: 2.45k]
  ------------------
 1023|  1.07k|                    if (Mutating)
  ------------------
  |  Branch (1023:25): [Folded, False: 1.07k]
  ------------------
 1024|      0|                        pos.visit(dec_right_visitor{}, count_t{1});
 1025|  1.07k|                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
 1026|  2.45k|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (1026:28): [Folded, False: 2.45k]
  |  Branch (1026:40): [True: 0, False: 0]
  |  Branch (1026:52): [True: 0, False: 0]
  ------------------
 1027|      0|                    auto newn = pos.node()->inner()[0];
 1028|      0|                    if (!mutate)
  ------------------
  |  Branch (1028:25): [True: 0, False: 0]
  ------------------
 1029|      0|                        newn->inc();
 1030|      0|                    if (Mutating)
  ------------------
  |  Branch (1030:25): [Folded, False: 0]
  ------------------
 1031|      0|                        pos.visit(dec_right_visitor{}, count_t{2});
 1032|      0|                    return std::make_tuple(pos.shift() - B, newn, ts, tail);
 1033|  2.45k|                } else {
 1034|  2.45k|                    if (mutate) {
  ------------------
  |  Branch (1034:25): [True: 0, False: 2.45k]
  ------------------
 1035|      0|                        pos.each_right(dec_visitor{}, idx + 1);
 1036|      0|                        return std::make_tuple(pos.shift(), node, ts, tail);
 1037|  2.45k|                    } else {
 1038|  2.45k|                        auto newn = node_t::copy_inner_e(e, node, idx);
 1039|  2.45k|                        if (Mutating)
  ------------------
  |  Branch (1039:29): [Folded, False: 2.45k]
  ------------------
 1040|      0|                            pos.visit(dec_visitor{});
 1041|  2.45k|                        return std::make_tuple(pos.shift(), newn, ts, tail);
 1042|  2.45k|                    }
 1043|  2.45k|                }
 1044|  4.37k|            }
 1045|  4.37k|            IMMER_CATCH (...) {
 1046|      0|                assert(!mutate);
  ------------------
  |  Branch (1046:17): [True: 0, False: 0]
  ------------------
 1047|      0|                assert(!next || pos.shift() > BL);
  ------------------
  |  Branch (1047:17): [True: 0, False: 0]
  |  Branch (1047:17): [True: 0, False: 0]
  |  Branch (1047:17): [True: 0, False: 0]
  ------------------
 1048|      0|                assert(tail);
  ------------------
  |  Branch (1048:17): [True: 0, False: 0]
  ------------------
 1049|      0|                if (next)
  ------------------
  |  Branch (1049:21): [True: 0, False: 0]
  ------------------
 1050|      0|                    dec_regular(next, pos.shift() - B, last + 1 - ts);
 1051|      0|                dec_leaf(tail, ts);
 1052|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1053|      0|            }
 1054|  4.37k|        }
 1055|  4.37k|    }
_ZN5immer6detail4rbts23slice_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEELb1ELb0EE10visit_leafIRNS1_8leaf_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_mNSA_5applyIS7_E4type4editE:
 1059|    764|    {
 1060|    764|        auto old_tail_size = pos.count();
 1061|    764|        auto new_tail_size = pos.index(last) + 1;
 1062|    764|        auto node          = pos.node();
 1063|    764|        auto mutate        = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (1063:30): [Folded, False: 764]
  |  Branch (1063:42): [True: 0, False: 0]
  ------------------
 1064|    764|        if (new_tail_size == old_tail_size) {
  ------------------
  |  Branch (1064:13): [True: 322, False: 442]
  ------------------
 1065|    322|            if (!Mutating)
  ------------------
  |  Branch (1065:17): [True: 322, Folded]
  ------------------
 1066|    322|                node->inc();
 1067|    322|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1068|    442|        } else if (mutate) {
  ------------------
  |  Branch (1068:20): [True: 0, False: 442]
  ------------------
 1069|      0|            detail::destroy_n(node->leaf() + new_tail_size,
 1070|      0|                              old_tail_size - new_tail_size);
 1071|      0|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1072|    442|        } else {
 1073|    442|            auto new_tail = node_t::copy_leaf_e(e, node, new_tail_size);
 1074|    442|            if (Mutating)
  ------------------
  |  Branch (1074:17): [Folded, False: 442]
  ------------------
 1075|      0|                pos.visit(dec_visitor{});
 1076|    442|            return std::make_tuple(0, nullptr, new_tail_size, new_tail);
 1077|    442|        }
 1078|    764|    }
_ZN5immer6detail4rbts23slice_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEELb0ELb1EE10visit_leafIRNS1_8leaf_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_mNSA_5applyIS7_E4type4editE:
 1059|  2.66k|    {
 1060|  2.66k|        auto old_tail_size = pos.count();
 1061|  2.66k|        auto new_tail_size = pos.index(last) + 1;
 1062|  2.66k|        auto node          = pos.node();
 1063|  2.66k|        auto mutate        = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (1063:30): [True: 2.66k, Folded]
  |  Branch (1063:42): [True: 965, False: 1.70k]
  ------------------
 1064|  2.66k|        if (new_tail_size == old_tail_size) {
  ------------------
  |  Branch (1064:13): [True: 1.75k, False: 914]
  ------------------
 1065|  1.75k|            if (!Mutating)
  ------------------
  |  Branch (1065:17): [Folded, False: 1.75k]
  ------------------
 1066|      0|                node->inc();
 1067|  1.75k|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1068|  1.75k|        } else if (mutate) {
  ------------------
  |  Branch (1068:20): [True: 441, False: 473]
  ------------------
 1069|    441|            detail::destroy_n(node->leaf() + new_tail_size,
 1070|    441|                              old_tail_size - new_tail_size);
 1071|    441|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1072|    473|        } else {
 1073|    473|            auto new_tail = node_t::copy_leaf_e(e, node, new_tail_size);
 1074|    473|            if (Mutating)
  ------------------
  |  Branch (1074:17): [True: 473, Folded]
  ------------------
 1075|    473|                pos.visit(dec_visitor{});
 1076|    473|            return std::make_tuple(0, nullptr, new_tail_size, new_tail);
 1077|    473|        }
 1078|  2.66k|    }
_ZN5immer6detail4rbts23slice_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEELb0ELb1EE13visit_regularIRNS1_11regular_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_mNSA_5applyIS7_E4type4editE:
  991|  3.99k|    {
  992|  3.99k|        auto idx    = pos.index(last);
  993|  3.99k|        auto node   = pos.node();
  994|  3.99k|        auto mutate = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (994:23): [True: 3.99k, Folded]
  |  Branch (994:35): [True: 3.50k, False: 494]
  ------------------
  995|  3.99k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (995:13): [Folded, False: 3.99k]
  |  Branch (995:25): [True: 0, False: 0]
  ------------------
  996|      0|            auto res = mutate ? pos.towards_oh(this_t{}, last, idx, e)
  ------------------
  |  Branch (996:24): [True: 0, False: 0]
  ------------------
  997|      0|                              : pos.towards_oh(no_mut_t{}, last, idx, e);
  998|      0|            if (Mutating)
  ------------------
  |  Branch (998:17): [True: 0, Folded]
  ------------------
  999|      0|                pos.visit(dec_right_visitor{}, count_t{1});
 1000|      0|            return res;
 1001|  3.99k|        } else {
 1002|  3.99k|            using std::get;
 1003|  3.99k|            auto subs =
 1004|  3.99k|                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
  ------------------
  |  Branch (1004:17): [True: 3.50k, False: 494]
  ------------------
 1005|  3.99k|                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
 1006|  3.99k|            auto next = get<1>(subs);
 1007|  3.99k|            auto ts   = get<2>(subs);
 1008|  3.99k|            auto tail = get<3>(subs);
 1009|  3.99k|            IMMER_TRY {
  ------------------
  |  |   49|  3.99k|#define IMMER_TRY try
  ------------------
 1010|  3.99k|                if (next) {
  ------------------
  |  Branch (1010:21): [True: 1.35k, False: 2.64k]
  ------------------
 1011|  1.35k|                    if (mutate) {
  ------------------
  |  Branch (1011:25): [True: 1.15k, False: 197]
  ------------------
 1012|  1.15k|                        node->inner()[idx] = next;
 1013|  1.15k|                        pos.each_right(dec_visitor{}, idx + 1);
 1014|  1.15k|                        return std::make_tuple(pos.shift(), node, ts, tail);
 1015|  1.15k|                    } else {
 1016|    197|                        auto newn          = node_t::copy_inner_e(e, node, idx);
 1017|    197|                        newn->inner()[idx] = next;
 1018|    197|                        if (Mutating)
  ------------------
  |  Branch (1018:29): [True: 197, Folded]
  ------------------
 1019|    197|                            pos.visit(dec_visitor{});
 1020|    197|                        return std::make_tuple(pos.shift(), newn, ts, tail);
 1021|    197|                    }
 1022|  2.64k|                } else if (idx == 0) {
  ------------------
  |  Branch (1022:28): [True: 1.04k, False: 1.60k]
  ------------------
 1023|  1.04k|                    if (Mutating)
  ------------------
  |  Branch (1023:25): [True: 1.04k, Folded]
  ------------------
 1024|  1.04k|                        pos.visit(dec_right_visitor{}, count_t{1});
 1025|  1.04k|                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
 1026|  1.60k|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (1026:28): [Folded, False: 1.60k]
  |  Branch (1026:40): [True: 0, False: 0]
  |  Branch (1026:52): [True: 0, False: 0]
  ------------------
 1027|      0|                    auto newn = pos.node()->inner()[0];
 1028|      0|                    if (!mutate)
  ------------------
  |  Branch (1028:25): [True: 0, False: 0]
  ------------------
 1029|      0|                        newn->inc();
 1030|      0|                    if (Mutating)
  ------------------
  |  Branch (1030:25): [True: 0, Folded]
  ------------------
 1031|      0|                        pos.visit(dec_right_visitor{}, count_t{2});
 1032|      0|                    return std::make_tuple(pos.shift() - B, newn, ts, tail);
 1033|  1.60k|                } else {
 1034|  1.60k|                    if (mutate) {
  ------------------
  |  Branch (1034:25): [True: 1.37k, False: 230]
  ------------------
 1035|  1.37k|                        pos.each_right(dec_visitor{}, idx + 1);
 1036|  1.37k|                        return std::make_tuple(pos.shift(), node, ts, tail);
 1037|  1.37k|                    } else {
 1038|    230|                        auto newn = node_t::copy_inner_e(e, node, idx);
 1039|    230|                        if (Mutating)
  ------------------
  |  Branch (1039:29): [True: 230, Folded]
  ------------------
 1040|    230|                            pos.visit(dec_visitor{});
 1041|    230|                        return std::make_tuple(pos.shift(), newn, ts, tail);
 1042|    230|                    }
 1043|  1.60k|                }
 1044|  3.99k|            }
 1045|  3.99k|            IMMER_CATCH (...) {
 1046|      0|                assert(!mutate);
  ------------------
  |  Branch (1046:17): [True: 0, False: 0]
  ------------------
 1047|      0|                assert(!next || pos.shift() > BL);
  ------------------
  |  Branch (1047:17): [True: 0, False: 0]
  |  Branch (1047:17): [True: 0, False: 0]
  |  Branch (1047:17): [True: 0, False: 0]
  ------------------
 1048|      0|                assert(tail);
  ------------------
  |  Branch (1048:17): [True: 0, False: 0]
  ------------------
 1049|      0|                if (next)
  ------------------
  |  Branch (1049:21): [True: 0, False: 0]
  ------------------
 1050|      0|                    dec_regular(next, pos.shift() - B, last + 1 - ts);
 1051|      0|                dec_leaf(tail, ts);
 1052|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1053|      0|            }
 1054|  3.99k|        }
 1055|  3.99k|    }
_ZN5immer6detail4rbts17dec_right_visitor13visit_regularIRNS1_11regular_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEEEvOT_j:
  878|  1.04k|    {
  879|  1.04k|        using node_t = node_type<Pos>;
  880|  1.04k|        auto node    = p.node();
  881|  1.04k|        if (node->dec()) {
  ------------------
  |  Branch (881:13): [True: 0, False: 1.04k]
  ------------------
  882|      0|            p.each_right(dec_t{}, idx);
  883|      0|            node_t::delete_inner(node, p.count());
  884|      0|        }
  885|  1.04k|    }
_ZN5immer6detail4rbts23slice_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEELb0ELb0EE10visit_leafIRNS1_8leaf_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_mNSA_5applyIS7_E4type4editE:
 1059|  2.82k|    {
 1060|  2.82k|        auto old_tail_size = pos.count();
 1061|  2.82k|        auto new_tail_size = pos.index(last) + 1;
 1062|  2.82k|        auto node          = pos.node();
 1063|  2.82k|        auto mutate        = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (1063:30): [Folded, False: 2.82k]
  |  Branch (1063:42): [True: 0, False: 0]
  ------------------
 1064|  2.82k|        if (new_tail_size == old_tail_size) {
  ------------------
  |  Branch (1064:13): [True: 1.05k, False: 1.77k]
  ------------------
 1065|  1.05k|            if (!Mutating)
  ------------------
  |  Branch (1065:17): [True: 1.05k, Folded]
  ------------------
 1066|  1.05k|                node->inc();
 1067|  1.05k|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1068|  1.77k|        } else if (mutate) {
  ------------------
  |  Branch (1068:20): [True: 0, False: 1.77k]
  ------------------
 1069|      0|            detail::destroy_n(node->leaf() + new_tail_size,
 1070|      0|                              old_tail_size - new_tail_size);
 1071|      0|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1072|  1.77k|        } else {
 1073|  1.77k|            auto new_tail = node_t::copy_leaf_e(e, node, new_tail_size);
 1074|  1.77k|            if (Mutating)
  ------------------
  |  Branch (1074:17): [Folded, False: 1.77k]
  ------------------
 1075|      0|                pos.visit(dec_visitor{});
 1076|  1.77k|            return std::make_tuple(0, nullptr, new_tail_size, new_tail);
 1077|  1.77k|        }
 1078|  2.82k|    }
_ZN5immer6detail4rbts23slice_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEELb0ELb0EE13visit_regularIRNS1_11regular_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_mNSA_5applyIS7_E4type4editE:
  991|  2.50k|    {
  992|  2.50k|        auto idx    = pos.index(last);
  993|  2.50k|        auto node   = pos.node();
  994|  2.50k|        auto mutate = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (994:23): [Folded, False: 2.50k]
  |  Branch (994:35): [True: 0, False: 0]
  ------------------
  995|  2.50k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (995:13): [Folded, False: 2.50k]
  |  Branch (995:25): [True: 0, False: 0]
  ------------------
  996|      0|            auto res = mutate ? pos.towards_oh(this_t{}, last, idx, e)
  ------------------
  |  Branch (996:24): [True: 0, False: 0]
  ------------------
  997|      0|                              : pos.towards_oh(no_mut_t{}, last, idx, e);
  998|      0|            if (Mutating)
  ------------------
  |  Branch (998:17): [Folded, False: 0]
  ------------------
  999|      0|                pos.visit(dec_right_visitor{}, count_t{1});
 1000|      0|            return res;
 1001|  2.50k|        } else {
 1002|  2.50k|            using std::get;
 1003|  2.50k|            auto subs =
 1004|  2.50k|                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
  ------------------
  |  Branch (1004:17): [True: 0, False: 2.50k]
  ------------------
 1005|  2.50k|                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
 1006|  2.50k|            auto next = get<1>(subs);
 1007|  2.50k|            auto ts   = get<2>(subs);
 1008|  2.50k|            auto tail = get<3>(subs);
 1009|  2.50k|            IMMER_TRY {
  ------------------
  |  |   49|  2.50k|#define IMMER_TRY try
  ------------------
 1010|  2.50k|                if (next) {
  ------------------
  |  Branch (1010:21): [True: 618, False: 1.88k]
  ------------------
 1011|    618|                    if (mutate) {
  ------------------
  |  Branch (1011:25): [True: 0, False: 618]
  ------------------
 1012|      0|                        node->inner()[idx] = next;
 1013|      0|                        pos.each_right(dec_visitor{}, idx + 1);
 1014|      0|                        return std::make_tuple(pos.shift(), node, ts, tail);
 1015|    618|                    } else {
 1016|    618|                        auto newn          = node_t::copy_inner_e(e, node, idx);
 1017|    618|                        newn->inner()[idx] = next;
 1018|    618|                        if (Mutating)
  ------------------
  |  Branch (1018:29): [Folded, False: 618]
  ------------------
 1019|      0|                            pos.visit(dec_visitor{});
 1020|    618|                        return std::make_tuple(pos.shift(), newn, ts, tail);
 1021|    618|                    }
 1022|  1.88k|                } else if (idx == 0) {
  ------------------
  |  Branch (1022:28): [True: 1.03k, False: 854]
  ------------------
 1023|  1.03k|                    if (Mutating)
  ------------------
  |  Branch (1023:25): [Folded, False: 1.03k]
  ------------------
 1024|      0|                        pos.visit(dec_right_visitor{}, count_t{1});
 1025|  1.03k|                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
 1026|  1.03k|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (1026:28): [Folded, False: 854]
  |  Branch (1026:40): [True: 0, False: 0]
  |  Branch (1026:52): [True: 0, False: 0]
  ------------------
 1027|      0|                    auto newn = pos.node()->inner()[0];
 1028|      0|                    if (!mutate)
  ------------------
  |  Branch (1028:25): [True: 0, False: 0]
  ------------------
 1029|      0|                        newn->inc();
 1030|      0|                    if (Mutating)
  ------------------
  |  Branch (1030:25): [Folded, False: 0]
  ------------------
 1031|      0|                        pos.visit(dec_right_visitor{}, count_t{2});
 1032|      0|                    return std::make_tuple(pos.shift() - B, newn, ts, tail);
 1033|    854|                } else {
 1034|    854|                    if (mutate) {
  ------------------
  |  Branch (1034:25): [True: 0, False: 854]
  ------------------
 1035|      0|                        pos.each_right(dec_visitor{}, idx + 1);
 1036|      0|                        return std::make_tuple(pos.shift(), node, ts, tail);
 1037|    854|                    } else {
 1038|    854|                        auto newn = node_t::copy_inner_e(e, node, idx);
 1039|    854|                        if (Mutating)
  ------------------
  |  Branch (1039:29): [Folded, False: 854]
  ------------------
 1040|      0|                            pos.visit(dec_visitor{});
 1041|    854|                        return std::make_tuple(pos.shift(), newn, ts, tail);
 1042|    854|                    }
 1043|    854|                }
 1044|  2.50k|            }
 1045|  2.50k|            IMMER_CATCH (...) {
 1046|      0|                assert(!mutate);
  ------------------
  |  Branch (1046:17): [True: 0, False: 0]
  ------------------
 1047|      0|                assert(!next || pos.shift() > BL);
  ------------------
  |  Branch (1047:17): [True: 0, False: 0]
  |  Branch (1047:17): [True: 0, False: 0]
  |  Branch (1047:17): [True: 0, False: 0]
  ------------------
 1048|      0|                assert(tail);
  ------------------
  |  Branch (1048:17): [True: 0, False: 0]
  ------------------
 1049|      0|                if (next)
  ------------------
  |  Branch (1049:21): [True: 0, False: 0]
  ------------------
 1050|      0|                    dec_regular(next, pos.shift() - B, last + 1 - ts);
 1051|      0|                dec_leaf(tail, ts);
 1052|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1053|      0|            }
 1054|  2.50k|        }
 1055|  2.50k|    }
_ZN5immer6detail4rbts17dec_right_visitor13visit_relaxedIRNS1_11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEEEvOT_j:
  867|  43.1k|    {
  868|  43.1k|        using node_t = node_type<Pos>;
  869|  43.1k|        auto node    = p.node();
  870|  43.1k|        if (node->dec()) {
  ------------------
  |  Branch (870:13): [True: 0, False: 43.1k]
  ------------------
  871|      0|            p.each_right(dec_t{}, idx);
  872|      0|            node_t::delete_inner_r(node, p.count());
  873|      0|        }
  874|  43.1k|    }
_ZN5immer6detail4rbts23slice_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEELb0ELb1EE10visit_leafIRNS1_12leaf_sub_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_mNSA_5applyIS7_E4type4editE:
 1059|  4.68k|    {
 1060|  4.68k|        auto old_tail_size = pos.count();
 1061|  4.68k|        auto new_tail_size = pos.index(last) + 1;
 1062|  4.68k|        auto node          = pos.node();
 1063|  4.68k|        auto mutate        = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (1063:30): [True: 4.68k, Folded]
  |  Branch (1063:42): [True: 2.02k, False: 2.66k]
  ------------------
 1064|  4.68k|        if (new_tail_size == old_tail_size) {
  ------------------
  |  Branch (1064:13): [True: 2.67k, False: 2.01k]
  ------------------
 1065|  2.67k|            if (!Mutating)
  ------------------
  |  Branch (1065:17): [Folded, False: 2.67k]
  ------------------
 1066|      0|                node->inc();
 1067|  2.67k|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1068|  2.67k|        } else if (mutate) {
  ------------------
  |  Branch (1068:20): [True: 1.04k, False: 974]
  ------------------
 1069|  1.04k|            detail::destroy_n(node->leaf() + new_tail_size,
 1070|  1.04k|                              old_tail_size - new_tail_size);
 1071|  1.04k|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1072|  1.04k|        } else {
 1073|    974|            auto new_tail = node_t::copy_leaf_e(e, node, new_tail_size);
 1074|    974|            if (Mutating)
  ------------------
  |  Branch (1074:17): [True: 974, Folded]
  ------------------
 1075|    974|                pos.visit(dec_visitor{});
 1076|    974|            return std::make_tuple(0, nullptr, new_tail_size, new_tail);
 1077|    974|        }
 1078|  4.68k|    }
_ZN5immer6detail4rbts23slice_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEELb0ELb1EE13visit_relaxedIRNS1_11relaxed_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_mNSA_5applyIS7_E4type4editE:
  913|  10.9k|    {
  914|  10.9k|        auto idx    = pos.index(last);
  915|  10.9k|        auto node   = pos.node();
  916|  10.9k|        auto mutate = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (916:23): [True: 10.9k, Folded]
  |  Branch (916:35): [True: 9.10k, False: 1.79k]
  ------------------
  917|  10.9k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (917:13): [Folded, False: 10.9k]
  |  Branch (917:25): [True: 0, False: 0]
  ------------------
  918|      0|            auto res = mutate ? pos.towards_oh(this_t{}, last, idx, e)
  ------------------
  |  Branch (918:24): [True: 0, False: 0]
  ------------------
  919|      0|                              : pos.towards_oh(no_mut_t{}, last, idx, e);
  920|      0|            if (Mutating)
  ------------------
  |  Branch (920:17): [True: 0, Folded]
  ------------------
  921|      0|                pos.visit(dec_right_visitor{}, count_t{1});
  922|      0|            return res;
  923|  10.9k|        } else {
  924|  10.9k|            using std::get;
  925|  10.9k|            auto subs =
  926|  10.9k|                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
  ------------------
  |  Branch (926:17): [True: 9.10k, False: 1.79k]
  ------------------
  927|  10.9k|                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
  928|  10.9k|            auto next = get<1>(subs);
  929|  10.9k|            auto ts   = get<2>(subs);
  930|  10.9k|            auto tail = get<3>(subs);
  931|  10.9k|            IMMER_TRY {
  ------------------
  |  |   49|  10.9k|#define IMMER_TRY try
  ------------------
  932|  10.9k|                if (next) {
  ------------------
  |  Branch (932:21): [True: 6.13k, False: 4.76k]
  ------------------
  933|  6.13k|                    if (mutate) {
  ------------------
  |  Branch (933:25): [True: 5.22k, False: 909]
  ------------------
  934|  5.22k|                        auto nodr = node->ensure_mutable_relaxed_n(e, idx);
  935|  5.22k|                        pos.each_right(dec_visitor{}, idx + 1);
  936|  5.22k|                        node->inner()[idx] = next;
  937|  5.22k|                        nodr->d.sizes[idx] = last + 1 - ts;
  938|  5.22k|                        nodr->d.count      = idx + 1;
  939|  5.22k|                        assert(nodr->d.sizes[idx]);
  ------------------
  |  Branch (939:25): [True: 5.22k, False: 0]
  ------------------
  940|  5.22k|                        return std::make_tuple(pos.shift(), node, ts, tail);
  941|  5.22k|                    } else {
  942|    909|                        auto newn = node_t::copy_inner_r_e(e, node, idx);
  943|    909|                        auto newr = newn->relaxed();
  944|    909|                        newn->inner()[idx] = next;
  945|    909|                        newr->d.sizes[idx] = last + 1 - ts;
  946|    909|                        newr->d.count      = idx + 1;
  947|    909|                        assert(newr->d.sizes[idx]);
  ------------------
  |  Branch (947:25): [True: 909, False: 0]
  ------------------
  948|    909|                        if (Mutating)
  ------------------
  |  Branch (948:29): [True: 909, Folded]
  ------------------
  949|    909|                            pos.visit(dec_visitor{});
  950|    909|                        return std::make_tuple(pos.shift(), newn, ts, tail);
  951|    909|                    }
  952|  6.13k|                } else if (idx == 0) {
  ------------------
  |  Branch (952:28): [True: 1.20k, False: 3.56k]
  ------------------
  953|  1.20k|                    if (Mutating)
  ------------------
  |  Branch (953:25): [True: 1.20k, Folded]
  ------------------
  954|  1.20k|                        pos.visit(dec_right_visitor{}, count_t{1});
  955|  1.20k|                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
  956|  3.56k|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (956:28): [Folded, False: 3.56k]
  |  Branch (956:40): [True: 0, False: 0]
  |  Branch (956:52): [True: 0, False: 0]
  ------------------
  957|      0|                    auto newn = pos.node()->inner()[0];
  958|      0|                    if (!mutate)
  ------------------
  |  Branch (958:25): [True: 0, False: 0]
  ------------------
  959|      0|                        newn->inc();
  960|      0|                    if (Mutating)
  ------------------
  |  Branch (960:25): [True: 0, Folded]
  ------------------
  961|      0|                        pos.visit(dec_right_visitor{}, count_t{2});
  962|      0|                    return std::make_tuple(pos.shift() - B, newn, ts, tail);
  963|  3.56k|                } else {
  964|  3.56k|                    if (mutate) {
  ------------------
  |  Branch (964:25): [True: 2.90k, False: 666]
  ------------------
  965|  2.90k|                        pos.each_right(dec_visitor{}, idx + 1);
  966|  2.90k|                        node->ensure_mutable_relaxed_n(e, idx)->d.count = idx;
  967|  2.90k|                        return std::make_tuple(pos.shift(), node, ts, tail);
  968|  2.90k|                    } else {
  969|    666|                        auto newn = node_t::copy_inner_r_e(e, node, idx);
  970|    666|                        if (Mutating)
  ------------------
  |  Branch (970:29): [True: 666, Folded]
  ------------------
  971|    666|                            pos.visit(dec_visitor{});
  972|    666|                        return std::make_tuple(pos.shift(), newn, ts, tail);
  973|    666|                    }
  974|  3.56k|                }
  975|  10.9k|            }
  976|  10.9k|            IMMER_CATCH (...) {
  977|      0|                assert(!mutate);
  ------------------
  |  Branch (977:17): [True: 0, False: 0]
  ------------------
  978|      0|                assert(!next || pos.shift() > BL);
  ------------------
  |  Branch (978:17): [True: 0, False: 0]
  |  Branch (978:17): [True: 0, False: 0]
  |  Branch (978:17): [True: 0, False: 0]
  ------------------
  979|      0|                if (next)
  ------------------
  |  Branch (979:21): [True: 0, False: 0]
  ------------------
  980|      0|                    dec_inner(next,
  981|      0|                              pos.shift() - B,
  982|      0|                              last + 1 - ts - pos.size_before(idx));
  983|      0|                dec_leaf(tail, ts);
  984|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  985|      0|            }
  986|  10.9k|        }
  987|  10.9k|    }
_ZN5immer6detail4rbts23slice_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEELb0ELb1EE13visit_regularIRNS1_15regular_sub_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_mNSA_5applyIS7_E4type4editE:
  991|  2.67k|    {
  992|  2.67k|        auto idx    = pos.index(last);
  993|  2.67k|        auto node   = pos.node();
  994|  2.67k|        auto mutate = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (994:23): [True: 2.67k, Folded]
  |  Branch (994:35): [True: 1.67k, False: 994]
  ------------------
  995|  2.67k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (995:13): [Folded, False: 2.67k]
  |  Branch (995:25): [True: 0, False: 0]
  ------------------
  996|      0|            auto res = mutate ? pos.towards_oh(this_t{}, last, idx, e)
  ------------------
  |  Branch (996:24): [True: 0, False: 0]
  ------------------
  997|      0|                              : pos.towards_oh(no_mut_t{}, last, idx, e);
  998|      0|            if (Mutating)
  ------------------
  |  Branch (998:17): [True: 0, Folded]
  ------------------
  999|      0|                pos.visit(dec_right_visitor{}, count_t{1});
 1000|      0|            return res;
 1001|  2.67k|        } else {
 1002|  2.67k|            using std::get;
 1003|  2.67k|            auto subs =
 1004|  2.67k|                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
  ------------------
  |  Branch (1004:17): [True: 1.67k, False: 994]
  ------------------
 1005|  2.67k|                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
 1006|  2.67k|            auto next = get<1>(subs);
 1007|  2.67k|            auto ts   = get<2>(subs);
 1008|  2.67k|            auto tail = get<3>(subs);
 1009|  2.67k|            IMMER_TRY {
  ------------------
  |  |   49|  2.67k|#define IMMER_TRY try
  ------------------
 1010|  2.67k|                if (next) {
  ------------------
  |  Branch (1010:21): [True: 1.06k, False: 1.61k]
  ------------------
 1011|  1.06k|                    if (mutate) {
  ------------------
  |  Branch (1011:25): [True: 684, False: 377]
  ------------------
 1012|    684|                        node->inner()[idx] = next;
 1013|    684|                        pos.each_right(dec_visitor{}, idx + 1);
 1014|    684|                        return std::make_tuple(pos.shift(), node, ts, tail);
 1015|    684|                    } else {
 1016|    377|                        auto newn          = node_t::copy_inner_e(e, node, idx);
 1017|    377|                        newn->inner()[idx] = next;
 1018|    377|                        if (Mutating)
  ------------------
  |  Branch (1018:29): [True: 377, Folded]
  ------------------
 1019|    377|                            pos.visit(dec_visitor{});
 1020|    377|                        return std::make_tuple(pos.shift(), newn, ts, tail);
 1021|    377|                    }
 1022|  1.61k|                } else if (idx == 0) {
  ------------------
  |  Branch (1022:28): [True: 669, False: 941]
  ------------------
 1023|    669|                    if (Mutating)
  ------------------
  |  Branch (1023:25): [True: 669, Folded]
  ------------------
 1024|    669|                        pos.visit(dec_right_visitor{}, count_t{1});
 1025|    669|                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
 1026|    941|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (1026:28): [Folded, False: 941]
  |  Branch (1026:40): [True: 0, False: 0]
  |  Branch (1026:52): [True: 0, False: 0]
  ------------------
 1027|      0|                    auto newn = pos.node()->inner()[0];
 1028|      0|                    if (!mutate)
  ------------------
  |  Branch (1028:25): [True: 0, False: 0]
  ------------------
 1029|      0|                        newn->inc();
 1030|      0|                    if (Mutating)
  ------------------
  |  Branch (1030:25): [True: 0, Folded]
  ------------------
 1031|      0|                        pos.visit(dec_right_visitor{}, count_t{2});
 1032|      0|                    return std::make_tuple(pos.shift() - B, newn, ts, tail);
 1033|    941|                } else {
 1034|    941|                    if (mutate) {
  ------------------
  |  Branch (1034:25): [True: 342, False: 599]
  ------------------
 1035|    342|                        pos.each_right(dec_visitor{}, idx + 1);
 1036|    342|                        return std::make_tuple(pos.shift(), node, ts, tail);
 1037|    599|                    } else {
 1038|    599|                        auto newn = node_t::copy_inner_e(e, node, idx);
 1039|    599|                        if (Mutating)
  ------------------
  |  Branch (1039:29): [True: 599, Folded]
  ------------------
 1040|    599|                            pos.visit(dec_visitor{});
 1041|    599|                        return std::make_tuple(pos.shift(), newn, ts, tail);
 1042|    599|                    }
 1043|    941|                }
 1044|  2.67k|            }
 1045|  2.67k|            IMMER_CATCH (...) {
 1046|      0|                assert(!mutate);
  ------------------
  |  Branch (1046:17): [True: 0, False: 0]
  ------------------
 1047|      0|                assert(!next || pos.shift() > BL);
  ------------------
  |  Branch (1047:17): [True: 0, False: 0]
  |  Branch (1047:17): [True: 0, False: 0]
  |  Branch (1047:17): [True: 0, False: 0]
  ------------------
 1048|      0|                assert(tail);
  ------------------
  |  Branch (1048:17): [True: 0, False: 0]
  ------------------
 1049|      0|                if (next)
  ------------------
  |  Branch (1049:21): [True: 0, False: 0]
  ------------------
 1050|      0|                    dec_regular(next, pos.shift() - B, last + 1 - ts);
 1051|      0|                dec_leaf(tail, ts);
 1052|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1053|      0|            }
 1054|  2.67k|        }
 1055|  2.67k|    }
_ZN5immer6detail4rbts17dec_right_visitor13visit_regularIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEEEvOT_j:
  878|  9.32k|    {
  879|  9.32k|        using node_t = node_type<Pos>;
  880|  9.32k|        auto node    = p.node();
  881|  9.32k|        if (node->dec()) {
  ------------------
  |  Branch (881:13): [True: 0, False: 9.32k]
  ------------------
  882|      0|            p.each_right(dec_t{}, idx);
  883|      0|            node_t::delete_inner(node, p.count());
  884|      0|        }
  885|  9.32k|    }
_ZN5immer6detail4rbts23slice_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEELb0ELb0EE10visit_leafIRNS1_12leaf_sub_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_mNSA_5applyIS7_E4type4editE:
 1059|  5.80k|    {
 1060|  5.80k|        auto old_tail_size = pos.count();
 1061|  5.80k|        auto new_tail_size = pos.index(last) + 1;
 1062|  5.80k|        auto node          = pos.node();
 1063|  5.80k|        auto mutate        = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (1063:30): [Folded, False: 5.80k]
  |  Branch (1063:42): [True: 0, False: 0]
  ------------------
 1064|  5.80k|        if (new_tail_size == old_tail_size) {
  ------------------
  |  Branch (1064:13): [True: 1.76k, False: 4.03k]
  ------------------
 1065|  1.76k|            if (!Mutating)
  ------------------
  |  Branch (1065:17): [True: 1.76k, Folded]
  ------------------
 1066|  1.76k|                node->inc();
 1067|  1.76k|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1068|  4.03k|        } else if (mutate) {
  ------------------
  |  Branch (1068:20): [True: 0, False: 4.03k]
  ------------------
 1069|      0|            detail::destroy_n(node->leaf() + new_tail_size,
 1070|      0|                              old_tail_size - new_tail_size);
 1071|      0|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1072|  4.03k|        } else {
 1073|  4.03k|            auto new_tail = node_t::copy_leaf_e(e, node, new_tail_size);
 1074|  4.03k|            if (Mutating)
  ------------------
  |  Branch (1074:17): [Folded, False: 4.03k]
  ------------------
 1075|      0|                pos.visit(dec_visitor{});
 1076|  4.03k|            return std::make_tuple(0, nullptr, new_tail_size, new_tail);
 1077|  4.03k|        }
 1078|  5.80k|    }
_ZN5immer6detail4rbts23slice_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEELb0ELb0EE13visit_relaxedIRNS1_11relaxed_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_mNSA_5applyIS7_E4type4editE:
  913|  7.91k|    {
  914|  7.91k|        auto idx    = pos.index(last);
  915|  7.91k|        auto node   = pos.node();
  916|  7.91k|        auto mutate = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (916:23): [Folded, False: 7.91k]
  |  Branch (916:35): [True: 0, False: 0]
  ------------------
  917|  7.91k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (917:13): [Folded, False: 7.91k]
  |  Branch (917:25): [True: 0, False: 0]
  ------------------
  918|      0|            auto res = mutate ? pos.towards_oh(this_t{}, last, idx, e)
  ------------------
  |  Branch (918:24): [True: 0, False: 0]
  ------------------
  919|      0|                              : pos.towards_oh(no_mut_t{}, last, idx, e);
  920|      0|            if (Mutating)
  ------------------
  |  Branch (920:17): [Folded, False: 0]
  ------------------
  921|      0|                pos.visit(dec_right_visitor{}, count_t{1});
  922|      0|            return res;
  923|  7.91k|        } else {
  924|  7.91k|            using std::get;
  925|  7.91k|            auto subs =
  926|  7.91k|                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
  ------------------
  |  Branch (926:17): [True: 0, False: 7.91k]
  ------------------
  927|  7.91k|                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
  928|  7.91k|            auto next = get<1>(subs);
  929|  7.91k|            auto ts   = get<2>(subs);
  930|  7.91k|            auto tail = get<3>(subs);
  931|  7.91k|            IMMER_TRY {
  ------------------
  |  |   49|  7.91k|#define IMMER_TRY try
  ------------------
  932|  7.91k|                if (next) {
  ------------------
  |  Branch (932:21): [True: 3.04k, False: 4.87k]
  ------------------
  933|  3.04k|                    if (mutate) {
  ------------------
  |  Branch (933:25): [True: 0, False: 3.04k]
  ------------------
  934|      0|                        auto nodr = node->ensure_mutable_relaxed_n(e, idx);
  935|      0|                        pos.each_right(dec_visitor{}, idx + 1);
  936|      0|                        node->inner()[idx] = next;
  937|      0|                        nodr->d.sizes[idx] = last + 1 - ts;
  938|      0|                        nodr->d.count      = idx + 1;
  939|      0|                        assert(nodr->d.sizes[idx]);
  ------------------
  |  Branch (939:25): [True: 0, False: 0]
  ------------------
  940|      0|                        return std::make_tuple(pos.shift(), node, ts, tail);
  941|  3.04k|                    } else {
  942|  3.04k|                        auto newn = node_t::copy_inner_r_e(e, node, idx);
  943|  3.04k|                        auto newr = newn->relaxed();
  944|  3.04k|                        newn->inner()[idx] = next;
  945|  3.04k|                        newr->d.sizes[idx] = last + 1 - ts;
  946|  3.04k|                        newr->d.count      = idx + 1;
  947|  3.04k|                        assert(newr->d.sizes[idx]);
  ------------------
  |  Branch (947:25): [True: 3.04k, False: 0]
  ------------------
  948|  3.04k|                        if (Mutating)
  ------------------
  |  Branch (948:29): [Folded, False: 3.04k]
  ------------------
  949|      0|                            pos.visit(dec_visitor{});
  950|  3.04k|                        return std::make_tuple(pos.shift(), newn, ts, tail);
  951|  3.04k|                    }
  952|  4.87k|                } else if (idx == 0) {
  ------------------
  |  Branch (952:28): [True: 1.93k, False: 2.94k]
  ------------------
  953|  1.93k|                    if (Mutating)
  ------------------
  |  Branch (953:25): [Folded, False: 1.93k]
  ------------------
  954|      0|                        pos.visit(dec_right_visitor{}, count_t{1});
  955|  1.93k|                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
  956|  2.94k|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (956:28): [Folded, False: 2.94k]
  |  Branch (956:40): [True: 0, False: 0]
  |  Branch (956:52): [True: 0, False: 0]
  ------------------
  957|      0|                    auto newn = pos.node()->inner()[0];
  958|      0|                    if (!mutate)
  ------------------
  |  Branch (958:25): [True: 0, False: 0]
  ------------------
  959|      0|                        newn->inc();
  960|      0|                    if (Mutating)
  ------------------
  |  Branch (960:25): [Folded, False: 0]
  ------------------
  961|      0|                        pos.visit(dec_right_visitor{}, count_t{2});
  962|      0|                    return std::make_tuple(pos.shift() - B, newn, ts, tail);
  963|  2.94k|                } else {
  964|  2.94k|                    if (mutate) {
  ------------------
  |  Branch (964:25): [True: 0, False: 2.94k]
  ------------------
  965|      0|                        pos.each_right(dec_visitor{}, idx + 1);
  966|      0|                        node->ensure_mutable_relaxed_n(e, idx)->d.count = idx;
  967|      0|                        return std::make_tuple(pos.shift(), node, ts, tail);
  968|  2.94k|                    } else {
  969|  2.94k|                        auto newn = node_t::copy_inner_r_e(e, node, idx);
  970|  2.94k|                        if (Mutating)
  ------------------
  |  Branch (970:29): [Folded, False: 2.94k]
  ------------------
  971|      0|                            pos.visit(dec_visitor{});
  972|  2.94k|                        return std::make_tuple(pos.shift(), newn, ts, tail);
  973|  2.94k|                    }
  974|  2.94k|                }
  975|  7.91k|            }
  976|  7.91k|            IMMER_CATCH (...) {
  977|      0|                assert(!mutate);
  ------------------
  |  Branch (977:17): [True: 0, False: 0]
  ------------------
  978|      0|                assert(!next || pos.shift() > BL);
  ------------------
  |  Branch (978:17): [True: 0, False: 0]
  |  Branch (978:17): [True: 0, False: 0]
  |  Branch (978:17): [True: 0, False: 0]
  ------------------
  979|      0|                if (next)
  ------------------
  |  Branch (979:21): [True: 0, False: 0]
  ------------------
  980|      0|                    dec_inner(next,
  981|      0|                              pos.shift() - B,
  982|      0|                              last + 1 - ts - pos.size_before(idx));
  983|      0|                dec_leaf(tail, ts);
  984|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  985|      0|            }
  986|  7.91k|        }
  987|  7.91k|    }
_ZN5immer6detail4rbts23slice_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEELb0ELb0EE13visit_regularIRNS1_15regular_sub_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_mNSA_5applyIS7_E4type4editE:
  991|  1.46k|    {
  992|  1.46k|        auto idx    = pos.index(last);
  993|  1.46k|        auto node   = pos.node();
  994|  1.46k|        auto mutate = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (994:23): [Folded, False: 1.46k]
  |  Branch (994:35): [True: 0, False: 0]
  ------------------
  995|  1.46k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (995:13): [Folded, False: 1.46k]
  |  Branch (995:25): [True: 0, False: 0]
  ------------------
  996|      0|            auto res = mutate ? pos.towards_oh(this_t{}, last, idx, e)
  ------------------
  |  Branch (996:24): [True: 0, False: 0]
  ------------------
  997|      0|                              : pos.towards_oh(no_mut_t{}, last, idx, e);
  998|      0|            if (Mutating)
  ------------------
  |  Branch (998:17): [Folded, False: 0]
  ------------------
  999|      0|                pos.visit(dec_right_visitor{}, count_t{1});
 1000|      0|            return res;
 1001|  1.46k|        } else {
 1002|  1.46k|            using std::get;
 1003|  1.46k|            auto subs =
 1004|  1.46k|                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
  ------------------
  |  Branch (1004:17): [True: 0, False: 1.46k]
  ------------------
 1005|  1.46k|                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
 1006|  1.46k|            auto next = get<1>(subs);
 1007|  1.46k|            auto ts   = get<2>(subs);
 1008|  1.46k|            auto tail = get<3>(subs);
 1009|  1.46k|            IMMER_TRY {
  ------------------
  |  |   49|  1.46k|#define IMMER_TRY try
  ------------------
 1010|  1.46k|                if (next) {
  ------------------
  |  Branch (1010:21): [True: 573, False: 896]
  ------------------
 1011|    573|                    if (mutate) {
  ------------------
  |  Branch (1011:25): [True: 0, False: 573]
  ------------------
 1012|      0|                        node->inner()[idx] = next;
 1013|      0|                        pos.each_right(dec_visitor{}, idx + 1);
 1014|      0|                        return std::make_tuple(pos.shift(), node, ts, tail);
 1015|    573|                    } else {
 1016|    573|                        auto newn          = node_t::copy_inner_e(e, node, idx);
 1017|    573|                        newn->inner()[idx] = next;
 1018|    573|                        if (Mutating)
  ------------------
  |  Branch (1018:29): [Folded, False: 573]
  ------------------
 1019|      0|                            pos.visit(dec_visitor{});
 1020|    573|                        return std::make_tuple(pos.shift(), newn, ts, tail);
 1021|    573|                    }
 1022|    896|                } else if (idx == 0) {
  ------------------
  |  Branch (1022:28): [True: 423, False: 473]
  ------------------
 1023|    423|                    if (Mutating)
  ------------------
  |  Branch (1023:25): [Folded, False: 423]
  ------------------
 1024|      0|                        pos.visit(dec_right_visitor{}, count_t{1});
 1025|    423|                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
 1026|    473|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (1026:28): [Folded, False: 473]
  |  Branch (1026:40): [True: 0, False: 0]
  |  Branch (1026:52): [True: 0, False: 0]
  ------------------
 1027|      0|                    auto newn = pos.node()->inner()[0];
 1028|      0|                    if (!mutate)
  ------------------
  |  Branch (1028:25): [True: 0, False: 0]
  ------------------
 1029|      0|                        newn->inc();
 1030|      0|                    if (Mutating)
  ------------------
  |  Branch (1030:25): [Folded, False: 0]
  ------------------
 1031|      0|                        pos.visit(dec_right_visitor{}, count_t{2});
 1032|      0|                    return std::make_tuple(pos.shift() - B, newn, ts, tail);
 1033|    473|                } else {
 1034|    473|                    if (mutate) {
  ------------------
  |  Branch (1034:25): [True: 0, False: 473]
  ------------------
 1035|      0|                        pos.each_right(dec_visitor{}, idx + 1);
 1036|      0|                        return std::make_tuple(pos.shift(), node, ts, tail);
 1037|    473|                    } else {
 1038|    473|                        auto newn = node_t::copy_inner_e(e, node, idx);
 1039|    473|                        if (Mutating)
  ------------------
  |  Branch (1039:29): [Folded, False: 473]
  ------------------
 1040|      0|                            pos.visit(dec_visitor{});
 1041|    473|                        return std::make_tuple(pos.shift(), newn, ts, tail);
 1042|    473|                    }
 1043|    473|                }
 1044|  1.46k|            }
 1045|  1.46k|            IMMER_CATCH (...) {
 1046|      0|                assert(!mutate);
  ------------------
  |  Branch (1046:17): [True: 0, False: 0]
  ------------------
 1047|      0|                assert(!next || pos.shift() > BL);
  ------------------
  |  Branch (1047:17): [True: 0, False: 0]
  |  Branch (1047:17): [True: 0, False: 0]
  |  Branch (1047:17): [True: 0, False: 0]
  ------------------
 1048|      0|                assert(tail);
  ------------------
  |  Branch (1048:17): [True: 0, False: 0]
  ------------------
 1049|      0|                if (next)
  ------------------
  |  Branch (1049:21): [True: 0, False: 0]
  ------------------
 1050|      0|                    dec_regular(next, pos.shift() - B, last + 1 - ts);
 1051|      0|                dec_leaf(tail, ts);
 1052|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1053|      0|            }
 1054|  1.46k|        }
 1055|  1.46k|    }
_ZN5immer6detail4rbts23slice_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEELb1ELb1EE13visit_regularIRNS1_15regular_sub_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_mNSA_5applyIS7_E4type4editE:
  991|  14.6k|    {
  992|  14.6k|        auto idx    = pos.index(last);
  993|  14.6k|        auto node   = pos.node();
  994|  14.6k|        auto mutate = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (994:23): [True: 14.6k, Folded]
  |  Branch (994:35): [True: 8.86k, False: 5.74k]
  ------------------
  995|  14.6k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (995:13): [True: 14.6k, Folded]
  |  Branch (995:25): [True: 6.62k, False: 7.98k]
  ------------------
  996|  6.62k|            auto res = mutate ? pos.towards_oh(this_t{}, last, idx, e)
  ------------------
  |  Branch (996:24): [True: 3.71k, False: 2.91k]
  ------------------
  997|  6.62k|                              : pos.towards_oh(no_mut_t{}, last, idx, e);
  998|  6.62k|            if (Mutating)
  ------------------
  |  Branch (998:17): [True: 6.62k, Folded]
  ------------------
  999|  6.62k|                pos.visit(dec_right_visitor{}, count_t{1});
 1000|  6.62k|            return res;
 1001|  7.98k|        } else {
 1002|  7.98k|            using std::get;
 1003|  7.98k|            auto subs =
 1004|  7.98k|                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
  ------------------
  |  Branch (1004:17): [True: 5.15k, False: 2.83k]
  ------------------
 1005|  7.98k|                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
 1006|  7.98k|            auto next = get<1>(subs);
 1007|  7.98k|            auto ts   = get<2>(subs);
 1008|  7.98k|            auto tail = get<3>(subs);
 1009|  7.98k|            IMMER_TRY {
  ------------------
  |  |   49|  7.98k|#define IMMER_TRY try
  ------------------
 1010|  7.98k|                if (next) {
  ------------------
  |  Branch (1010:21): [True: 3.94k, False: 4.04k]
  ------------------
 1011|  3.94k|                    if (mutate) {
  ------------------
  |  Branch (1011:25): [True: 2.99k, False: 943]
  ------------------
 1012|  2.99k|                        node->inner()[idx] = next;
 1013|  2.99k|                        pos.each_right(dec_visitor{}, idx + 1);
 1014|  2.99k|                        return std::make_tuple(pos.shift(), node, ts, tail);
 1015|  2.99k|                    } else {
 1016|    943|                        auto newn          = node_t::copy_inner_e(e, node, idx);
 1017|    943|                        newn->inner()[idx] = next;
 1018|    943|                        if (Mutating)
  ------------------
  |  Branch (1018:29): [True: 943, Folded]
  ------------------
 1019|    943|                            pos.visit(dec_visitor{});
 1020|    943|                        return std::make_tuple(pos.shift(), newn, ts, tail);
 1021|    943|                    }
 1022|  4.04k|                } else if (idx == 0) {
  ------------------
  |  Branch (1022:28): [True: 0, False: 4.04k]
  ------------------
 1023|      0|                    if (Mutating)
  ------------------
  |  Branch (1023:25): [True: 0, Folded]
  ------------------
 1024|      0|                        pos.visit(dec_right_visitor{}, count_t{1});
 1025|      0|                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
 1026|  4.04k|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (1026:28): [True: 4.04k, Folded]
  |  Branch (1026:40): [True: 3.40k, False: 637]
  |  Branch (1026:52): [True: 2.02k, False: 1.37k]
  ------------------
 1027|  2.02k|                    auto newn = pos.node()->inner()[0];
 1028|  2.02k|                    if (!mutate)
  ------------------
  |  Branch (1028:25): [True: 955, False: 1.07k]
  ------------------
 1029|    955|                        newn->inc();
 1030|  2.02k|                    if (Mutating)
  ------------------
  |  Branch (1030:25): [True: 2.02k, Folded]
  ------------------
 1031|  2.02k|                        pos.visit(dec_right_visitor{}, count_t{2});
 1032|  2.02k|                    return std::make_tuple(pos.shift() - B, newn, ts, tail);
 1033|  2.02k|                } else {
 1034|  2.01k|                    if (mutate) {
  ------------------
  |  Branch (1034:25): [True: 1.08k, False: 932]
  ------------------
 1035|  1.08k|                        pos.each_right(dec_visitor{}, idx + 1);
 1036|  1.08k|                        return std::make_tuple(pos.shift(), node, ts, tail);
 1037|  1.08k|                    } else {
 1038|    932|                        auto newn = node_t::copy_inner_e(e, node, idx);
 1039|    932|                        if (Mutating)
  ------------------
  |  Branch (1039:29): [True: 932, Folded]
  ------------------
 1040|    932|                            pos.visit(dec_visitor{});
 1041|    932|                        return std::make_tuple(pos.shift(), newn, ts, tail);
 1042|    932|                    }
 1043|  2.01k|                }
 1044|  7.98k|            }
 1045|  7.98k|            IMMER_CATCH (...) {
 1046|      0|                assert(!mutate);
  ------------------
  |  Branch (1046:17): [True: 0, False: 0]
  ------------------
 1047|      0|                assert(!next || pos.shift() > BL);
  ------------------
  |  Branch (1047:17): [True: 0, False: 0]
  |  Branch (1047:17): [True: 0, False: 0]
  |  Branch (1047:17): [True: 0, False: 0]
  ------------------
 1048|      0|                assert(tail);
  ------------------
  |  Branch (1048:17): [True: 0, False: 0]
  ------------------
 1049|      0|                if (next)
  ------------------
  |  Branch (1049:21): [True: 0, False: 0]
  ------------------
 1050|      0|                    dec_regular(next, pos.shift() - B, last + 1 - ts);
 1051|      0|                dec_leaf(tail, ts);
 1052|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1053|      0|            }
 1054|  7.98k|        }
 1055|  14.6k|    }
_ZN5immer6detail4rbts23slice_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEELb1ELb1EE10visit_leafIRNS1_13full_leaf_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_mNSA_5applyIS7_E4type4editE:
 1059|  1.36k|    {
 1060|  1.36k|        auto old_tail_size = pos.count();
 1061|  1.36k|        auto new_tail_size = pos.index(last) + 1;
 1062|  1.36k|        auto node          = pos.node();
 1063|  1.36k|        auto mutate        = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (1063:30): [True: 1.36k, Folded]
  |  Branch (1063:42): [True: 756, False: 607]
  ------------------
 1064|  1.36k|        if (new_tail_size == old_tail_size) {
  ------------------
  |  Branch (1064:13): [True: 388, False: 975]
  ------------------
 1065|    388|            if (!Mutating)
  ------------------
  |  Branch (1065:17): [Folded, False: 388]
  ------------------
 1066|      0|                node->inc();
 1067|    388|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1068|    975|        } else if (mutate) {
  ------------------
  |  Branch (1068:20): [True: 552, False: 423]
  ------------------
 1069|    552|            detail::destroy_n(node->leaf() + new_tail_size,
 1070|    552|                              old_tail_size - new_tail_size);
 1071|    552|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1072|    552|        } else {
 1073|    423|            auto new_tail = node_t::copy_leaf_e(e, node, new_tail_size);
 1074|    423|            if (Mutating)
  ------------------
  |  Branch (1074:17): [True: 423, Folded]
  ------------------
 1075|    423|                pos.visit(dec_visitor{});
 1076|    423|            return std::make_tuple(0, nullptr, new_tail_size, new_tail);
 1077|    423|        }
 1078|  1.36k|    }
_ZN5immer6detail4rbts23slice_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEELb1ELb1EE13visit_regularIRNS1_8full_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_mNSA_5applyIS7_E4type4editE:
  991|  2.77k|    {
  992|  2.77k|        auto idx    = pos.index(last);
  993|  2.77k|        auto node   = pos.node();
  994|  2.77k|        auto mutate = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (994:23): [True: 2.77k, Folded]
  |  Branch (994:35): [True: 1.96k, False: 811]
  ------------------
  995|  2.77k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (995:13): [True: 2.77k, Folded]
  |  Branch (995:25): [True: 1.34k, False: 1.43k]
  ------------------
  996|  1.34k|            auto res = mutate ? pos.towards_oh(this_t{}, last, idx, e)
  ------------------
  |  Branch (996:24): [True: 1.13k, False: 207]
  ------------------
  997|  1.34k|                              : pos.towards_oh(no_mut_t{}, last, idx, e);
  998|  1.34k|            if (Mutating)
  ------------------
  |  Branch (998:17): [True: 1.34k, Folded]
  ------------------
  999|  1.34k|                pos.visit(dec_right_visitor{}, count_t{1});
 1000|  1.34k|            return res;
 1001|  1.43k|        } else {
 1002|  1.43k|            using std::get;
 1003|  1.43k|            auto subs =
 1004|  1.43k|                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
  ------------------
  |  Branch (1004:17): [True: 828, False: 604]
  ------------------
 1005|  1.43k|                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
 1006|  1.43k|            auto next = get<1>(subs);
 1007|  1.43k|            auto ts   = get<2>(subs);
 1008|  1.43k|            auto tail = get<3>(subs);
 1009|  1.43k|            IMMER_TRY {
  ------------------
  |  |   49|  1.43k|#define IMMER_TRY try
  ------------------
 1010|  1.43k|                if (next) {
  ------------------
  |  Branch (1010:21): [True: 554, False: 878]
  ------------------
 1011|    554|                    if (mutate) {
  ------------------
  |  Branch (1011:25): [True: 356, False: 198]
  ------------------
 1012|    356|                        node->inner()[idx] = next;
 1013|    356|                        pos.each_right(dec_visitor{}, idx + 1);
 1014|    356|                        return std::make_tuple(pos.shift(), node, ts, tail);
 1015|    356|                    } else {
 1016|    198|                        auto newn          = node_t::copy_inner_e(e, node, idx);
 1017|    198|                        newn->inner()[idx] = next;
 1018|    198|                        if (Mutating)
  ------------------
  |  Branch (1018:29): [True: 198, Folded]
  ------------------
 1019|    198|                            pos.visit(dec_visitor{});
 1020|    198|                        return std::make_tuple(pos.shift(), newn, ts, tail);
 1021|    198|                    }
 1022|    878|                } else if (idx == 0) {
  ------------------
  |  Branch (1022:28): [True: 0, False: 878]
  ------------------
 1023|      0|                    if (Mutating)
  ------------------
  |  Branch (1023:25): [True: 0, Folded]
  ------------------
 1024|      0|                        pos.visit(dec_right_visitor{}, count_t{1});
 1025|      0|                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
 1026|    878|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (1026:28): [True: 878, Folded]
  |  Branch (1026:40): [True: 648, False: 230]
  |  Branch (1026:52): [True: 245, False: 403]
  ------------------
 1027|    245|                    auto newn = pos.node()->inner()[0];
 1028|    245|                    if (!mutate)
  ------------------
  |  Branch (1028:25): [True: 197, False: 48]
  ------------------
 1029|    197|                        newn->inc();
 1030|    245|                    if (Mutating)
  ------------------
  |  Branch (1030:25): [True: 245, Folded]
  ------------------
 1031|    245|                        pos.visit(dec_right_visitor{}, count_t{2});
 1032|    245|                    return std::make_tuple(pos.shift() - B, newn, ts, tail);
 1033|    633|                } else {
 1034|    633|                    if (mutate) {
  ------------------
  |  Branch (1034:25): [True: 424, False: 209]
  ------------------
 1035|    424|                        pos.each_right(dec_visitor{}, idx + 1);
 1036|    424|                        return std::make_tuple(pos.shift(), node, ts, tail);
 1037|    424|                    } else {
 1038|    209|                        auto newn = node_t::copy_inner_e(e, node, idx);
 1039|    209|                        if (Mutating)
  ------------------
  |  Branch (1039:29): [True: 209, Folded]
  ------------------
 1040|    209|                            pos.visit(dec_visitor{});
 1041|    209|                        return std::make_tuple(pos.shift(), newn, ts, tail);
 1042|    209|                    }
 1043|    633|                }
 1044|  1.43k|            }
 1045|  1.43k|            IMMER_CATCH (...) {
 1046|      0|                assert(!mutate);
  ------------------
  |  Branch (1046:17): [True: 0, False: 0]
  ------------------
 1047|      0|                assert(!next || pos.shift() > BL);
  ------------------
  |  Branch (1047:17): [True: 0, False: 0]
  |  Branch (1047:17): [True: 0, False: 0]
  |  Branch (1047:17): [True: 0, False: 0]
  ------------------
 1048|      0|                assert(tail);
  ------------------
  |  Branch (1048:17): [True: 0, False: 0]
  ------------------
 1049|      0|                if (next)
  ------------------
  |  Branch (1049:21): [True: 0, False: 0]
  ------------------
 1050|      0|                    dec_regular(next, pos.shift() - B, last + 1 - ts);
 1051|      0|                dec_leaf(tail, ts);
 1052|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1053|      0|            }
 1054|  1.43k|        }
 1055|  2.77k|    }
_ZN5immer6detail4rbts23slice_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEELb1ELb1EE10visit_leafIRNS1_8leaf_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_mNSA_5applyIS7_E4type4editE:
 1059|    711|    {
 1060|    711|        auto old_tail_size = pos.count();
 1061|    711|        auto new_tail_size = pos.index(last) + 1;
 1062|    711|        auto node          = pos.node();
 1063|    711|        auto mutate        = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (1063:30): [True: 711, Folded]
  |  Branch (1063:42): [True: 509, False: 202]
  ------------------
 1064|    711|        if (new_tail_size == old_tail_size) {
  ------------------
  |  Branch (1064:13): [True: 260, False: 451]
  ------------------
 1065|    260|            if (!Mutating)
  ------------------
  |  Branch (1065:17): [Folded, False: 260]
  ------------------
 1066|      0|                node->inc();
 1067|    260|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1068|    451|        } else if (mutate) {
  ------------------
  |  Branch (1068:20): [True: 256, False: 195]
  ------------------
 1069|    256|            detail::destroy_n(node->leaf() + new_tail_size,
 1070|    256|                              old_tail_size - new_tail_size);
 1071|    256|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1072|    256|        } else {
 1073|    195|            auto new_tail = node_t::copy_leaf_e(e, node, new_tail_size);
 1074|    195|            if (Mutating)
  ------------------
  |  Branch (1074:17): [True: 195, Folded]
  ------------------
 1075|    195|                pos.visit(dec_visitor{});
 1076|    195|            return std::make_tuple(0, nullptr, new_tail_size, new_tail);
 1077|    195|        }
 1078|    711|    }
_ZN5immer6detail4rbts16concat_trees_mutINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEENS1_11relaxed_posIT_EENSt3__15decayISE_E4type6node_t6edit_tESL_PSE_jSL_SM_jm:
 2498|  7.18k|{
 2499|  7.18k|    return make_singleton_regular_sub_pos(ltail, ltcount)
 2500|  7.18k|        .visit(concat_trees_left_mut_visitor<Node>{},
 2501|  7.18k|               ec,
 2502|  7.18k|               el,
 2503|  7.18k|               empty_leaf_pos<Node>{},
 2504|  7.18k|               er,
 2505|  7.18k|               rroot,
 2506|  7.18k|               rshift,
 2507|  7.18k|               rsize)
 2508|  7.18k|        .realize_e(ec);
 2509|  7.18k|}
_ZN5immer6detail4rbts29concat_trees_left_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10visit_nodeIRNS1_25singleton_regular_sub_posISC_EENS1_14empty_leaf_posISC_EEJRPSC_RjRmEEENS1_17concat_center_posISC_EEOT_NSA_5applyIS7_E4type4editESV_OT0_SV_DpOT1_:
 2451|  7.18k|    {
 2452|  7.18k|        return visit_maybe_relaxed_sub(args...,
 2453|  7.18k|                                       concat_trees_right_mut_visitor<Node>{},
 2454|  7.18k|                                       ec,
 2455|  7.18k|                                       el,
 2456|  7.18k|                                       lpos,
 2457|  7.18k|                                       tpos,
 2458|  7.18k|                                       er);
 2459|  7.18k|    }
_ZN5immer6detail4rbts30concat_trees_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10visit_nodeIRNS1_11relaxed_posISC_EERNS1_25singleton_regular_sub_posISC_EERNS1_14empty_leaf_posISC_EEEENS1_17concat_center_posISC_EEOT_NSA_5applyIS7_E4type4editESV_OT0_OT1_SV_:
 2432|  3.77k|    {
 2433|  3.77k|        return concat_inners_mut<Node>(ec, el, lpos, tpos, er, rpos);
 2434|  3.77k|    }
_ZN5immer6detail4rbts17concat_inners_mutINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEERNS1_25singleton_regular_sub_posISC_EERNS1_14empty_leaf_posISC_EERNS1_11relaxed_posISC_EEEENS1_17concat_center_posIT_EENSt3__15decayISN_E4type6node_t6edit_tESU_OT0_OT1_SU_OT2_:
 2333|  17.4k|{
 2334|  17.4k|    auto lshift = lpos.shift();
 2335|  17.4k|    auto rshift = rpos.shift();
 2336|       |    // lpos.node() can be null it is a singleton_regular_sub_pos<...>,
 2337|       |    // this is, when the tree is just a tail...
 2338|  17.4k|    if (lshift > rshift) {
  ------------------
  |  Branch (2338:9): [True: 0, False: 17.4k]
  ------------------
 2339|      0|        auto cpos = lpos.last_sub(
 2340|      0|            concat_left_mut_visitor<Node>{}, ec, el, tpos, er, rpos);
 2341|      0|        return concat_rebalance_mut<Node>(
 2342|      0|            ec, el, lpos, cpos, er, null_sub_pos{});
 2343|  17.4k|    } else if (lshift < rshift) {
  ------------------
  |  Branch (2343:16): [True: 13.9k, False: 3.50k]
  ------------------
 2344|  13.9k|        auto cpos = rpos.first_sub(
 2345|  13.9k|            concat_right_mut_visitor<Node>{}, ec, el, lpos, tpos, er);
 2346|  13.9k|        return concat_rebalance_mut<Node>(
 2347|  13.9k|            ec, el, null_sub_pos{}, cpos, er, rpos);
 2348|  13.9k|    } else {
 2349|  3.50k|        assert(lshift == rshift);
  ------------------
  |  Branch (2349:9): [True: 3.50k, False: 0]
  ------------------
 2350|  3.50k|        assert(Node::bits_leaf == 0u || lshift > 0);
  ------------------
  |  Branch (2350:9): [Folded, False: 3.50k]
  |  Branch (2350:9): [True: 3.50k, False: 0]
  |  Branch (2350:9): [True: 3.50k, False: 0]
  ------------------
 2351|  3.50k|        auto cpos = lpos.last_sub(
 2352|  3.50k|            concat_both_mut_visitor<Node>{}, ec, el, tpos, er, rpos);
 2353|  3.50k|        return concat_rebalance_mut<Node>(ec, el, lpos, cpos, er, rpos);
 2354|  3.50k|    }
 2355|  17.4k|}
_ZN5immer6detail4rbts17concat_merger_mutINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEC2ENSA_5applyIS7_E4type4editEjPjjSH_PSC_:
 2040|  1.00M|        : ec_{ec}
 2041|  1.00M|        , curr_{counts}
 2042|  1.00M|        , n_{n}
 2043|  1.00M|        , result_{shift + B, nullptr, 0}
 2044|  1.00M|    {
 2045|  1.00M|        if (candidate) {
  ------------------
  |  Branch (2045:13): [True: 613k, False: 395k]
  ------------------
 2046|   613k|            candidate->ensure_mutable_relaxed_e(candidate_e, ec);
 2047|   613k|            result_.nodes_[0] = candidate;
 2048|   613k|        } else {
 2049|   395k|            result_.nodes_[0] = node_t::make_inner_r_e(ec);
 2050|   395k|        }
 2051|  1.00M|    }
_ZN5immer6detail4rbts17concat_center_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE8each_subINS1_25concat_merger_mut_visitorEJRNS1_17concat_merger_mutISC_EERNSA_5applyIS7_E4type4editEEEEvT_DpOT0_:
 1512|  1.00M|    {
 1513|  1.00M|        if (shift_ == BL) {
  ------------------
  |  Branch (1513:13): [True: 117k, False: 891k]
  ------------------
 1514|   117k|            auto s = size_t{};
 1515|   464k|            for (auto i = count_t{0}; i < count_; ++i) {
  ------------------
  |  Branch (1515:39): [True: 346k, False: 117k]
  ------------------
 1516|   346k|                make_leaf_sub_pos(nodes_[i], sizes_[i] - s).visit(v, args...);
 1517|   346k|                s = sizes_[i];
 1518|   346k|            }
 1519|   891k|        } else {
 1520|  2.09M|            for (auto i = count_t{0}; i < count_; ++i)
  ------------------
  |  Branch (1520:39): [True: 1.20M, False: 891k]
  ------------------
 1521|  1.20M|                make_relaxed_pos(nodes_[i], shift_ - B, nodes_[i]->relaxed())
 1522|  1.20M|                    .visit(v, args...);
 1523|   891k|        }
 1524|  1.00M|    }
_ZN5immer6detail4rbts25concat_merger_mut_visitor10visit_leafIRNS1_12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEENS1_17concat_merger_mutISE_EEEEvOT_RT0_NSt3__15decayISJ_E4type6node_t6edit_tE:
 2227|   618k|    {
 2228|   618k|        merger.merge_leaf(p, e);
 2229|   618k|    }
_ZN5immer6detail4rbts17concat_merger_mutINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10merge_leafIRNS1_12leaf_sub_posISC_EEEEvOT_NSA_5applyIS7_E4type4editE:
 2097|   618k|    {
 2098|   618k|        auto from       = p.node();
 2099|   618k|        auto from_size  = p.size();
 2100|   618k|        auto from_count = p.count();
 2101|   618k|        assert(from);
  ------------------
  |  Branch (2101:9): [True: 618k, False: 0]
  ------------------
 2102|   618k|        assert(from_size);
  ------------------
  |  Branch (2102:9): [True: 618k, False: 0]
  ------------------
 2103|   618k|        if (!to_ && *curr_ == from_count) {
  ------------------
  |  Branch (2103:13): [True: 588k, False: 30.3k]
  |  Branch (2103:21): [True: 573k, False: 15.2k]
  ------------------
 2104|   573k|            add_child(from, from_size);
 2105|   573k|        } else {
 2106|  45.6k|            auto from_offset = count_t{};
 2107|  45.6k|            auto from_data   = from->leaf();
 2108|  45.6k|            auto from_mutate = from->can_mutate(e);
 2109|  59.8k|            do {
 2110|  59.8k|                if (!to_) {
  ------------------
  |  Branch (2110:21): [True: 29.5k, False: 30.3k]
  ------------------
 2111|  29.5k|                    if (from_mutate) {
  ------------------
  |  Branch (2111:25): [True: 1.62k, False: 27.8k]
  ------------------
 2112|  1.62k|                        node_t::ownee(from) = ec_;
 2113|  1.62k|                        to_                 = from->inc();
 2114|  1.62k|                        assert(from_count);
  ------------------
  |  Branch (2114:25): [True: 1.62k, False: 0]
  ------------------
 2115|  27.8k|                    } else {
 2116|  27.8k|                        to_ = node_t::make_leaf_e(ec_);
 2117|  27.8k|                    }
 2118|  29.5k|                    to_offset_ = 0;
 2119|  29.5k|                }
 2120|  59.8k|                auto data = to_->leaf();
 2121|  59.8k|                auto to_copy =
 2122|  59.8k|                    std::min(from_count - from_offset, *curr_ - to_offset_);
 2123|  59.8k|                if (from == to_) {
  ------------------
  |  Branch (2123:21): [True: 1.62k, False: 58.2k]
  ------------------
 2124|  1.62k|                    if (from_offset != to_offset_)
  ------------------
  |  Branch (2124:25): [True: 375, False: 1.25k]
  ------------------
 2125|    375|                        std::move(from_data + from_offset,
 2126|    375|                                  from_data + from_offset + to_copy,
 2127|    375|                                  data + to_offset_);
 2128|  58.2k|                } else {
 2129|  58.2k|                    if (!from_mutate)
  ------------------
  |  Branch (2129:25): [True: 57.2k, False: 974]
  ------------------
 2130|  57.2k|                        detail::uninitialized_copy(from_data + from_offset,
 2131|  57.2k|                                                   from_data + from_offset +
 2132|  57.2k|                                                       to_copy,
 2133|  57.2k|                                                   data + to_offset_);
 2134|    974|                    else
 2135|    974|                        detail::uninitialized_move(from_data + from_offset,
 2136|    974|                                                   from_data + from_offset +
 2137|    974|                                                       to_copy,
 2138|    974|                                                   data + to_offset_);
 2139|  58.2k|                }
 2140|  59.8k|                to_offset_ += to_copy;
 2141|  59.8k|                from_offset += to_copy;
 2142|  59.8k|                if (*curr_ == to_offset_) {
  ------------------
  |  Branch (2142:21): [True: 29.5k, False: 30.3k]
  ------------------
 2143|  29.5k|                    add_child(to_, to_offset_);
 2144|  29.5k|                    to_ = nullptr;
 2145|  29.5k|                }
 2146|  59.8k|            } while (from_offset != from_count);
  ------------------
  |  Branch (2146:22): [True: 14.2k, False: 45.6k]
  ------------------
 2147|  45.6k|        }
 2148|   618k|    }
_ZN5immer6detail4rbts17concat_merger_mutINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE9add_childEPSC_m:
 2064|  3.66M|    {
 2065|  3.66M|        assert(size);
  ------------------
  |  Branch (2065:9): [True: 3.66M, False: 0]
  ------------------
 2066|  3.66M|        ++curr_;
 2067|  3.66M|        auto parent  = result_.nodes_[result_.count_ - 1];
 2068|  3.66M|        auto relaxed = parent->relaxed();
 2069|  3.66M|        if (count_ == branches<B>) {
  ------------------
  |  Branch (2069:13): [True: 329k, False: 3.33M]
  ------------------
 2070|   329k|            parent->relaxed()->d.count = count_;
 2071|   329k|            assert(result_.count_ < result_t::max_children);
  ------------------
  |  Branch (2071:13): [True: 329k, False: 0]
  ------------------
 2072|   329k|            n_ -= branches<B>;
 2073|   329k|            if (candidate_) {
  ------------------
  |  Branch (2073:17): [True: 20.6k, False: 308k]
  ------------------
 2074|  20.6k|                parent = candidate_;
 2075|  20.6k|                parent->ensure_mutable_relaxed_e(candidate_e_, ec_);
 2076|  20.6k|                candidate_ = nullptr;
 2077|  20.6k|            } else
 2078|   308k|                parent = node_t::make_inner_r_e(ec_);
 2079|   329k|            count_                         = 0;
 2080|   329k|            relaxed                        = parent->relaxed();
 2081|   329k|            result_.nodes_[result_.count_] = parent;
 2082|   329k|            result_.sizes_[result_.count_] = result_.sizes_[result_.count_ - 1];
 2083|   329k|            assert(result_.sizes_[result_.count_]);
  ------------------
  |  Branch (2083:13): [True: 329k, False: 0]
  ------------------
 2084|   329k|            ++result_.count_;
 2085|   329k|        }
 2086|  3.66M|        auto idx = count_++;
 2087|  3.66M|        result_.sizes_[result_.count_ - 1] += size;
 2088|  3.66M|        assert(size);
  ------------------
  |  Branch (2088:9): [True: 3.66M, False: 0]
  ------------------
 2089|  3.66M|        assert(result_.sizes_[result_.count_ - 1]);
  ------------------
  |  Branch (2089:9): [True: 3.66M, False: 0]
  ------------------
 2090|  3.66M|        relaxed->d.sizes[idx] = size + (idx ? relaxed->d.sizes[idx - 1] : 0);
  ------------------
  |  Branch (2090:41): [True: 2.32M, False: 1.33M]
  ------------------
 2091|  3.66M|        assert(relaxed->d.sizes[idx]);
  ------------------
  |  Branch (2091:9): [True: 3.66M, False: 0]
  ------------------
 2092|  3.66M|        parent->inner()[idx] = p;
 2093|  3.66M|    };
_ZN5immer6detail4rbts25concat_merger_mut_visitor11visit_innerIRNS1_11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEENS1_17concat_merger_mutISE_EEEEvOT_RT0_NSt3__15decayISJ_E4type6node_t6edit_tE:
 2221|  2.81M|    {
 2222|  2.81M|        merger.merge_inner(p, e);
 2223|  2.81M|    }
_ZN5immer6detail4rbts17concat_merger_mutINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE11merge_innerIRNS1_11relaxed_posISC_EEEEvOT_NSA_5applyIS7_E4type4editE:
 2152|  2.81M|    {
 2153|  2.81M|        auto from       = p.node();
 2154|  2.81M|        auto from_size  = p.size();
 2155|  2.81M|        auto from_count = p.count();
 2156|  2.81M|        assert(from_size);
  ------------------
  |  Branch (2156:9): [True: 2.81M, False: 0]
  ------------------
 2157|  2.81M|        if (!to_ && *curr_ == from_count) {
  ------------------
  |  Branch (2157:13): [True: 2.75M, False: 55.2k]
  |  Branch (2157:21): [True: 2.72M, False: 35.2k]
  ------------------
 2158|  2.72M|            add_child(from, from_size);
 2159|  2.72M|        } else {
 2160|  90.5k|            auto from_offset = count_t{};
 2161|  90.5k|            auto from_data   = from->inner();
 2162|  90.5k|            auto from_mutate = from->can_relax() && from->can_mutate(e);
  ------------------
  |  Branch (2162:32): [True: 90.5k, False: 0]
  |  Branch (2162:53): [True: 57.7k, False: 32.8k]
  ------------------
 2163|   109k|            do {
 2164|   109k|                if (!to_) {
  ------------------
  |  Branch (2164:21): [True: 54.1k, False: 55.2k]
  ------------------
 2165|  54.1k|                    if (from_mutate) {
  ------------------
  |  Branch (2165:25): [True: 36.6k, False: 17.4k]
  ------------------
 2166|  36.6k|                        node_t::ownee(from) = ec_;
 2167|  36.6k|                        from->ensure_mutable_relaxed_e(e, ec_);
 2168|  36.6k|                        to_ = from;
 2169|  36.6k|                    } else {
 2170|  17.4k|                        to_ = node_t::make_inner_r_e(ec_);
 2171|  17.4k|                    }
 2172|  54.1k|                    to_offset_ = 0;
 2173|  54.1k|                    to_size_   = 0;
 2174|  54.1k|                }
 2175|   109k|                auto data = to_->inner();
 2176|   109k|                auto to_copy =
 2177|   109k|                    std::min(from_count - from_offset, *curr_ - to_offset_);
 2178|   109k|                auto sizes = to_->relaxed()->d.sizes;
 2179|   109k|                if (from != to_ || from_offset != to_offset_) {
  ------------------
  |  Branch (2179:21): [True: 72.7k, False: 36.6k]
  |  Branch (2179:36): [True: 15.1k, False: 21.4k]
  ------------------
 2180|  87.9k|                    std::copy(from_data + from_offset,
 2181|  87.9k|                              from_data + from_offset + to_copy,
 2182|  87.9k|                              data + to_offset_);
 2183|  87.9k|                    p.copy_sizes(
 2184|  87.9k|                        from_offset, to_copy, to_size_, sizes + to_offset_);
 2185|  87.9k|                }
 2186|   109k|                to_offset_ += to_copy;
 2187|   109k|                from_offset += to_copy;
 2188|   109k|                to_size_ = sizes[to_offset_ - 1];
 2189|   109k|                if (*curr_ == to_offset_) {
  ------------------
  |  Branch (2189:21): [True: 54.1k, False: 55.2k]
  ------------------
 2190|  54.1k|                    to_->relaxed()->d.count = to_offset_;
 2191|  54.1k|                    add_child(to_, to_size_);
 2192|  54.1k|                    to_ = nullptr;
 2193|  54.1k|                }
 2194|   109k|            } while (from_offset != from_count);
  ------------------
  |  Branch (2194:22): [True: 18.8k, False: 90.5k]
  ------------------
 2195|  90.5k|        }
 2196|  2.81M|    }
_ZN5immer6detail4rbts17concat_merger_mutINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE13set_candidateENSA_5applyIS7_E4type4editEPSC_:
 2058|  48.3k|    {
 2059|  48.3k|        candidate_   = candidate;
 2060|  48.3k|        candidate_e_ = candidate_e;
 2061|  48.3k|    }
_ZNK5immer6detail4rbts17concat_merger_mutINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE6finishEv:
 2199|  1.00M|    {
 2200|  1.00M|        assert(!to_);
  ------------------
  |  Branch (2200:9): [True: 1.00M, False: 0]
  ------------------
 2201|  1.00M|        result_.nodes_[result_.count_ - 1]->relaxed()->d.count = count_;
 2202|  1.00M|        return result_;
 2203|  1.00M|    }
_ZN5immer6detail4rbts24concat_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE11visit_innerIRNS1_11relaxed_posISC_EERNS1_25singleton_regular_sub_posISC_EERNS1_14empty_leaf_posISC_EEEENS1_17concat_center_posISC_EEOT_NSA_5applyIS7_E4type4editESV_OT0_OT1_SV_:
 2387|  13.6k|    {
 2388|  13.6k|        return concat_inners_mut<Node>(ec, el, lpos, tpos, er, rpos);
 2389|  13.6k|    }
_ZN5immer6detail4rbts24concat_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE11visit_innerIRNS1_15regular_sub_posISC_EERNS1_25singleton_regular_sub_posISC_EERNS1_14empty_leaf_posISC_EEEENS1_17concat_center_posISC_EEOT_NSA_5applyIS7_E4type4editESV_OT0_OT1_SV_:
 2387|    272|    {
 2388|    272|        return concat_inners_mut<Node>(ec, el, lpos, tpos, er, rpos);
 2389|    272|    }
_ZN5immer6detail4rbts17concat_inners_mutINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEERNS1_25singleton_regular_sub_posISC_EERNS1_14empty_leaf_posISC_EERNS1_15regular_sub_posISC_EEEENS1_17concat_center_posIT_EENSt3__15decayISN_E4type6node_t6edit_tESU_OT0_OT1_SU_OT2_:
 2333|  3.67k|{
 2334|  3.67k|    auto lshift = lpos.shift();
 2335|  3.67k|    auto rshift = rpos.shift();
 2336|       |    // lpos.node() can be null it is a singleton_regular_sub_pos<...>,
 2337|       |    // this is, when the tree is just a tail...
 2338|  3.67k|    if (lshift > rshift) {
  ------------------
  |  Branch (2338:9): [True: 0, False: 3.67k]
  ------------------
 2339|      0|        auto cpos = lpos.last_sub(
 2340|      0|            concat_left_mut_visitor<Node>{}, ec, el, tpos, er, rpos);
 2341|      0|        return concat_rebalance_mut<Node>(
 2342|      0|            ec, el, lpos, cpos, er, null_sub_pos{});
 2343|  3.67k|    } else if (lshift < rshift) {
  ------------------
  |  Branch (2343:16): [True: 1.01k, False: 2.65k]
  ------------------
 2344|  1.01k|        auto cpos = rpos.first_sub(
 2345|  1.01k|            concat_right_mut_visitor<Node>{}, ec, el, lpos, tpos, er);
 2346|  1.01k|        return concat_rebalance_mut<Node>(
 2347|  1.01k|            ec, el, null_sub_pos{}, cpos, er, rpos);
 2348|  2.65k|    } else {
 2349|  2.65k|        assert(lshift == rshift);
  ------------------
  |  Branch (2349:9): [True: 2.65k, False: 0]
  ------------------
 2350|  2.65k|        assert(Node::bits_leaf == 0u || lshift > 0);
  ------------------
  |  Branch (2350:9): [Folded, False: 2.65k]
  |  Branch (2350:9): [True: 2.65k, False: 0]
  |  Branch (2350:9): [True: 2.65k, False: 0]
  ------------------
 2351|  2.65k|        auto cpos = lpos.last_sub(
 2352|  2.65k|            concat_both_mut_visitor<Node>{}, ec, el, tpos, er, rpos);
 2353|  2.65k|        return concat_rebalance_mut<Node>(ec, el, lpos, cpos, er, rpos);
 2354|  2.65k|    }
 2355|  3.67k|}
_ZN5immer6detail4rbts24concat_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE11visit_innerIRNS1_8full_posISC_EERNS1_25singleton_regular_sub_posISC_EERNS1_14empty_leaf_posISC_EEEENS1_17concat_center_posISC_EEOT_NSA_5applyIS7_E4type4editESV_OT0_OT1_SV_:
 2387|  1.77k|    {
 2388|  1.77k|        return concat_inners_mut<Node>(ec, el, lpos, tpos, er, rpos);
 2389|  1.77k|    }
_ZN5immer6detail4rbts17concat_inners_mutINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEERNS1_25singleton_regular_sub_posISC_EERNS1_14empty_leaf_posISC_EERNS1_8full_posISC_EEEENS1_17concat_center_posIT_EENSt3__15decayISN_E4type6node_t6edit_tESU_OT0_OT1_SU_OT2_:
 2333|  1.77k|{
 2334|  1.77k|    auto lshift = lpos.shift();
 2335|  1.77k|    auto rshift = rpos.shift();
 2336|       |    // lpos.node() can be null it is a singleton_regular_sub_pos<...>,
 2337|       |    // this is, when the tree is just a tail...
 2338|  1.77k|    if (lshift > rshift) {
  ------------------
  |  Branch (2338:9): [True: 0, False: 1.77k]
  ------------------
 2339|      0|        auto cpos = lpos.last_sub(
 2340|      0|            concat_left_mut_visitor<Node>{}, ec, el, tpos, er, rpos);
 2341|      0|        return concat_rebalance_mut<Node>(
 2342|      0|            ec, el, lpos, cpos, er, null_sub_pos{});
 2343|  1.77k|    } else if (lshift < rshift) {
  ------------------
  |  Branch (2343:16): [True: 755, False: 1.01k]
  ------------------
 2344|    755|        auto cpos = rpos.first_sub(
 2345|    755|            concat_right_mut_visitor<Node>{}, ec, el, lpos, tpos, er);
 2346|    755|        return concat_rebalance_mut<Node>(
 2347|    755|            ec, el, null_sub_pos{}, cpos, er, rpos);
 2348|  1.01k|    } else {
 2349|  1.01k|        assert(lshift == rshift);
  ------------------
  |  Branch (2349:9): [True: 1.01k, False: 0]
  ------------------
 2350|  1.01k|        assert(Node::bits_leaf == 0u || lshift > 0);
  ------------------
  |  Branch (2350:9): [Folded, False: 1.01k]
  |  Branch (2350:9): [True: 1.01k, False: 0]
  |  Branch (2350:9): [True: 1.01k, False: 0]
  ------------------
 2351|  1.01k|        auto cpos = lpos.last_sub(
 2352|  1.01k|            concat_both_mut_visitor<Node>{}, ec, el, tpos, er, rpos);
 2353|  1.01k|        return concat_rebalance_mut<Node>(ec, el, lpos, cpos, er, rpos);
 2354|  1.01k|    }
 2355|  1.77k|}
_ZN5immer6detail4rbts20concat_rebalance_mutINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEENS1_12null_sub_posERNS1_17concat_center_posISC_EERNS1_8full_posISC_EEEENSE_IT_EENSt3__15decayISK_E4type6node_t6edit_tESR_OT0_OT1_SR_OT2_:
 2280|  1.26k|{
 2281|  1.26k|    auto plan = concat_rebalance_plan_mut<Node::bits, Node::bits_leaf>{};
 2282|  1.26k|    plan.fill(lpos, cpos, rpos);
 2283|  1.26k|    plan.shuffle(cpos.shift());
 2284|  1.26k|    return plan.merge(ec, el, lpos, cpos, er, rpos);
 2285|  1.26k|}
_ZN5immer6detail4rbts25concat_rebalance_plan_mutILj2ELj2EE5mergeIRNS1_12null_sub_posERNS1_17concat_center_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEERNS1_8full_posISH_EEEENS7_INSt3__15decayIT0_E4type6node_tEEENSS_6edit_tESU_OT_OSP_SU_OT1_:
 2244|  1.26k|    {
 2245|  1.26k|        using node_t    = node_type<CPos>;
 2246|  1.26k|        using merger_t  = concat_merger_mut<node_t>;
 2247|  1.26k|        using visitor_t = concat_merger_mut_visitor;
 2248|  1.26k|        auto lnode      = ((node_t*) lpos.node());
 2249|  1.26k|        auto rnode      = ((node_t*) rpos.node());
 2250|  1.26k|        auto lmut2      = lnode && lnode->can_relax() && lnode->can_mutate(el);
  ------------------
  |  Branch (2250:27): [True: 0, False: 1.26k]
  |  Branch (2250:36): [True: 0, False: 0]
  |  Branch (2250:58): [True: 0, False: 0]
  ------------------
 2251|  1.26k|        auto rmut2      = rnode && rnode->can_relax() && rnode->can_mutate(er);
  ------------------
  |  Branch (2251:27): [True: 1.26k, False: 0]
  |  Branch (2251:36): [True: 1.26k, False: 0]
  |  Branch (2251:58): [True: 238, False: 1.03k]
  ------------------
 2252|  1.26k|        auto merger     = merger_t{ec,
 2253|  1.26k|                               cpos.shift(),
 2254|  1.26k|                               this->counts,
 2255|  1.26k|                               this->n,
 2256|  1.26k|                               el,
 2257|  1.26k|                               lmut2 ? lnode : nullptr};
  ------------------
  |  Branch (2257:32): [True: 0, False: 1.26k]
  ------------------
 2258|  1.26k|        IMMER_TRY {
  ------------------
  |  |   49|  1.26k|#define IMMER_TRY try
  ------------------
 2259|  1.26k|            lpos.each_left_sub(visitor_t{}, merger, el);
 2260|  1.26k|            cpos.each_sub(visitor_t{}, merger, ec);
 2261|  1.26k|            if (rmut2)
  ------------------
  |  Branch (2261:17): [True: 238, False: 1.03k]
  ------------------
 2262|    238|                merger.set_candidate(er, rnode);
 2263|  1.26k|            rpos.each_right_sub(visitor_t{}, merger, er);
 2264|  1.26k|            return merger.finish();
 2265|  1.26k|        }
 2266|  1.26k|        IMMER_CATCH (...) {
 2267|      0|            merger.abort();
 2268|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 2269|      0|        }
 2270|  1.26k|    }
_ZN5immer6detail4rbts25concat_merger_mut_visitor10visit_leafIRNS1_13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEENS1_17concat_merger_mutISE_EEEEvOT_RT0_NSt3__15decayISJ_E4type6node_t6edit_tE:
 2227|  76.2k|    {
 2228|  76.2k|        merger.merge_leaf(p, e);
 2229|  76.2k|    }
_ZN5immer6detail4rbts17concat_merger_mutINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10merge_leafIRNS1_13full_leaf_posISC_EEEEvOT_NSA_5applyIS7_E4type4editE:
 2097|  76.2k|    {
 2098|  76.2k|        auto from       = p.node();
 2099|  76.2k|        auto from_size  = p.size();
 2100|  76.2k|        auto from_count = p.count();
 2101|  76.2k|        assert(from);
  ------------------
  |  Branch (2101:9): [True: 76.2k, False: 0]
  ------------------
 2102|  76.2k|        assert(from_size);
  ------------------
  |  Branch (2102:9): [True: 76.2k, False: 0]
  ------------------
 2103|  76.2k|        if (!to_ && *curr_ == from_count) {
  ------------------
  |  Branch (2103:13): [True: 76.2k, False: 0]
  |  Branch (2103:21): [True: 76.2k, False: 0]
  ------------------
 2104|  76.2k|            add_child(from, from_size);
 2105|  76.2k|        } else {
 2106|      0|            auto from_offset = count_t{};
 2107|      0|            auto from_data   = from->leaf();
 2108|      0|            auto from_mutate = from->can_mutate(e);
 2109|      0|            do {
 2110|      0|                if (!to_) {
  ------------------
  |  Branch (2110:21): [True: 0, False: 0]
  ------------------
 2111|      0|                    if (from_mutate) {
  ------------------
  |  Branch (2111:25): [True: 0, False: 0]
  ------------------
 2112|      0|                        node_t::ownee(from) = ec_;
 2113|      0|                        to_                 = from->inc();
 2114|      0|                        assert(from_count);
  ------------------
  |  Branch (2114:25): [True: 0, False: 0]
  ------------------
 2115|      0|                    } else {
 2116|      0|                        to_ = node_t::make_leaf_e(ec_);
 2117|      0|                    }
 2118|      0|                    to_offset_ = 0;
 2119|      0|                }
 2120|      0|                auto data = to_->leaf();
 2121|      0|                auto to_copy =
 2122|      0|                    std::min(from_count - from_offset, *curr_ - to_offset_);
 2123|      0|                if (from == to_) {
  ------------------
  |  Branch (2123:21): [True: 0, False: 0]
  ------------------
 2124|      0|                    if (from_offset != to_offset_)
  ------------------
  |  Branch (2124:25): [True: 0, False: 0]
  ------------------
 2125|      0|                        std::move(from_data + from_offset,
 2126|      0|                                  from_data + from_offset + to_copy,
 2127|      0|                                  data + to_offset_);
 2128|      0|                } else {
 2129|      0|                    if (!from_mutate)
  ------------------
  |  Branch (2129:25): [True: 0, False: 0]
  ------------------
 2130|      0|                        detail::uninitialized_copy(from_data + from_offset,
 2131|      0|                                                   from_data + from_offset +
 2132|      0|                                                       to_copy,
 2133|      0|                                                   data + to_offset_);
 2134|      0|                    else
 2135|      0|                        detail::uninitialized_move(from_data + from_offset,
 2136|      0|                                                   from_data + from_offset +
 2137|      0|                                                       to_copy,
 2138|      0|                                                   data + to_offset_);
 2139|      0|                }
 2140|      0|                to_offset_ += to_copy;
 2141|      0|                from_offset += to_copy;
 2142|      0|                if (*curr_ == to_offset_) {
  ------------------
  |  Branch (2142:21): [True: 0, False: 0]
  ------------------
 2143|      0|                    add_child(to_, to_offset_);
 2144|      0|                    to_ = nullptr;
 2145|      0|                }
 2146|      0|            } while (from_offset != from_count);
  ------------------
  |  Branch (2146:22): [True: 0, False: 0]
  ------------------
 2147|      0|        }
 2148|  76.2k|    }
_ZN5immer6detail4rbts25concat_merger_mut_visitor11visit_innerIRNS1_8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEENS1_17concat_merger_mutISE_EEEEvOT_RT0_NSt3__15decayISJ_E4type6node_t6edit_tE:
 2221|   123k|    {
 2222|   123k|        merger.merge_inner(p, e);
 2223|   123k|    }
_ZN5immer6detail4rbts17concat_merger_mutINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE11merge_innerIRNS1_8full_posISC_EEEEvOT_NSA_5applyIS7_E4type4editE:
 2152|   123k|    {
 2153|   123k|        auto from       = p.node();
 2154|   123k|        auto from_size  = p.size();
 2155|   123k|        auto from_count = p.count();
 2156|   123k|        assert(from_size);
  ------------------
  |  Branch (2156:9): [True: 123k, False: 0]
  ------------------
 2157|   123k|        if (!to_ && *curr_ == from_count) {
  ------------------
  |  Branch (2157:13): [True: 123k, False: 0]
  |  Branch (2157:21): [True: 123k, False: 0]
  ------------------
 2158|   123k|            add_child(from, from_size);
 2159|   123k|        } else {
 2160|      0|            auto from_offset = count_t{};
 2161|      0|            auto from_data   = from->inner();
 2162|      0|            auto from_mutate = from->can_relax() && from->can_mutate(e);
  ------------------
  |  Branch (2162:32): [True: 0, False: 0]
  |  Branch (2162:53): [True: 0, False: 0]
  ------------------
 2163|      0|            do {
 2164|      0|                if (!to_) {
  ------------------
  |  Branch (2164:21): [True: 0, False: 0]
  ------------------
 2165|      0|                    if (from_mutate) {
  ------------------
  |  Branch (2165:25): [True: 0, False: 0]
  ------------------
 2166|      0|                        node_t::ownee(from) = ec_;
 2167|      0|                        from->ensure_mutable_relaxed_e(e, ec_);
 2168|      0|                        to_ = from;
 2169|      0|                    } else {
 2170|      0|                        to_ = node_t::make_inner_r_e(ec_);
 2171|      0|                    }
 2172|      0|                    to_offset_ = 0;
 2173|      0|                    to_size_   = 0;
 2174|      0|                }
 2175|      0|                auto data = to_->inner();
 2176|      0|                auto to_copy =
 2177|      0|                    std::min(from_count - from_offset, *curr_ - to_offset_);
 2178|      0|                auto sizes = to_->relaxed()->d.sizes;
 2179|      0|                if (from != to_ || from_offset != to_offset_) {
  ------------------
  |  Branch (2179:21): [True: 0, False: 0]
  |  Branch (2179:36): [True: 0, False: 0]
  ------------------
 2180|      0|                    std::copy(from_data + from_offset,
 2181|      0|                              from_data + from_offset + to_copy,
 2182|      0|                              data + to_offset_);
 2183|      0|                    p.copy_sizes(
 2184|      0|                        from_offset, to_copy, to_size_, sizes + to_offset_);
 2185|      0|                }
 2186|      0|                to_offset_ += to_copy;
 2187|      0|                from_offset += to_copy;
 2188|      0|                to_size_ = sizes[to_offset_ - 1];
 2189|      0|                if (*curr_ == to_offset_) {
  ------------------
  |  Branch (2189:21): [True: 0, False: 0]
  ------------------
 2190|      0|                    to_->relaxed()->d.count = to_offset_;
 2191|      0|                    add_child(to_, to_size_);
 2192|      0|                    to_ = nullptr;
 2193|      0|                }
 2194|      0|            } while (from_offset != from_count);
  ------------------
  |  Branch (2194:22): [True: 0, False: 0]
  ------------------
 2195|      0|        }
 2196|   123k|    }
_ZN5immer6detail4rbts23concat_both_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10visit_leafIRNS1_12leaf_sub_posISC_EERNS1_14empty_leaf_posISC_EERNS1_8full_posISC_EEEENS1_17concat_center_posISC_EEOT_NSA_5applyIS7_E4type4editESV_OT0_SV_OT1_:
 2416|  1.01k|    {
 2417|  1.01k|        return rpos.first_sub_leaf(
 2418|  1.01k|            concat_right_mut_visitor<Node>{}, ec, el, lpos, tpos, er);
 2419|  1.01k|    }
_ZN5immer6detail4rbts24concat_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10visit_leafIRNS1_13full_leaf_posISC_EERNS1_12leaf_sub_posISC_EERNS1_14empty_leaf_posISC_EEEENS1_17concat_center_posISC_EEOT_NSA_5applyIS7_E4type4editESV_OT0_OT1_SV_:
 2394|  3.67k|    {
 2395|  3.67k|        return concat_leafs_mut<Node>(ec, el, lpos, tpos, er, rpos);
 2396|  3.67k|    }
_ZN5immer6detail4rbts16concat_leafs_mutINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEERNS1_12leaf_sub_posISC_EERNS1_14empty_leaf_posISC_EERNS1_13full_leaf_posISC_EEEENS1_17concat_center_posIT_EENSt3__15decayISN_E4type6node_t6edit_tESU_OT0_OT1_SU_OT2_:
 2294|  3.67k|{
 2295|  3.67k|    static_assert(Node::bits >= 2, "");
 2296|  3.67k|    assert(lpos.shift() == tpos.shift());
  ------------------
  |  Branch (2296:5): [True: 3.67k, False: 0]
  ------------------
 2297|  3.67k|    assert(lpos.shift() == rpos.shift());
  ------------------
  |  Branch (2297:5): [True: 3.67k, False: 0]
  ------------------
 2298|  3.67k|    assert(lpos.shift() == 0);
  ------------------
  |  Branch (2298:5): [True: 3.67k, False: 0]
  ------------------
 2299|  3.67k|    if (tpos.count() > 0)
  ------------------
  |  Branch (2299:9): [True: 0, False: 3.67k]
  ------------------
 2300|      0|        return {
 2301|      0|            Node::bits_leaf,
 2302|      0|            lpos.node(),
 2303|      0|            lpos.count(),
 2304|      0|            tpos.node(),
 2305|      0|            tpos.count(),
 2306|      0|            rpos.node(),
 2307|      0|            rpos.count(),
 2308|      0|        };
 2309|  3.67k|    else
 2310|  3.67k|        return {
 2311|  3.67k|            Node::bits_leaf,
 2312|  3.67k|            lpos.node(),
 2313|  3.67k|            lpos.count(),
 2314|  3.67k|            rpos.node(),
 2315|  3.67k|            rpos.count(),
 2316|  3.67k|        };
 2317|  3.67k|}
_ZN5immer6detail4rbts20concat_rebalance_mutINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEERNS1_25singleton_regular_sub_posISC_EERNS1_17concat_center_posISC_EERNS1_8full_posISC_EEEENSG_IT_EENSt3__15decayISM_E4type6node_t6edit_tEST_OT0_OT1_ST_OT2_:
 2280|  1.01k|{
 2281|  1.01k|    auto plan = concat_rebalance_plan_mut<Node::bits, Node::bits_leaf>{};
 2282|  1.01k|    plan.fill(lpos, cpos, rpos);
 2283|  1.01k|    plan.shuffle(cpos.shift());
 2284|  1.01k|    return plan.merge(ec, el, lpos, cpos, er, rpos);
 2285|  1.01k|}
_ZN5immer6detail4rbts25concat_rebalance_plan_mutILj2ELj2EE5mergeIRNS1_25singleton_regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEERNS1_17concat_center_posISF_EERNS1_8full_posISF_EEEENSI_INSt3__15decayIT0_E4type6node_tEEENST_6edit_tESV_OT_OSQ_SV_OT1_:
 2244|  1.01k|    {
 2245|  1.01k|        using node_t    = node_type<CPos>;
 2246|  1.01k|        using merger_t  = concat_merger_mut<node_t>;
 2247|  1.01k|        using visitor_t = concat_merger_mut_visitor;
 2248|  1.01k|        auto lnode      = ((node_t*) lpos.node());
 2249|  1.01k|        auto rnode      = ((node_t*) rpos.node());
 2250|  1.01k|        auto lmut2      = lnode && lnode->can_relax() && lnode->can_mutate(el);
  ------------------
  |  Branch (2250:27): [True: 0, False: 1.01k]
  |  Branch (2250:36): [True: 0, False: 0]
  |  Branch (2250:58): [True: 0, False: 0]
  ------------------
 2251|  1.01k|        auto rmut2      = rnode && rnode->can_relax() && rnode->can_mutate(er);
  ------------------
  |  Branch (2251:27): [True: 1.01k, False: 0]
  |  Branch (2251:36): [True: 1.01k, False: 0]
  |  Branch (2251:58): [True: 361, False: 657]
  ------------------
 2252|  1.01k|        auto merger     = merger_t{ec,
 2253|  1.01k|                               cpos.shift(),
 2254|  1.01k|                               this->counts,
 2255|  1.01k|                               this->n,
 2256|  1.01k|                               el,
 2257|  1.01k|                               lmut2 ? lnode : nullptr};
  ------------------
  |  Branch (2257:32): [True: 0, False: 1.01k]
  ------------------
 2258|  1.01k|        IMMER_TRY {
  ------------------
  |  |   49|  1.01k|#define IMMER_TRY try
  ------------------
 2259|  1.01k|            lpos.each_left_sub(visitor_t{}, merger, el);
 2260|  1.01k|            cpos.each_sub(visitor_t{}, merger, ec);
 2261|  1.01k|            if (rmut2)
  ------------------
  |  Branch (2261:17): [True: 361, False: 657]
  ------------------
 2262|    361|                merger.set_candidate(er, rnode);
 2263|  1.01k|            rpos.each_right_sub(visitor_t{}, merger, er);
 2264|  1.01k|            return merger.finish();
 2265|  1.01k|        }
 2266|  1.01k|        IMMER_CATCH (...) {
 2267|      0|            merger.abort();
 2268|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 2269|      0|        }
 2270|  1.01k|    }
_ZN5immer6detail4rbts20concat_rebalance_mutINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEENS1_12null_sub_posERNS1_17concat_center_posISC_EERNS1_15regular_sub_posISC_EEEENSE_IT_EENSt3__15decayISK_E4type6node_t6edit_tESR_OT0_OT1_SR_OT2_:
 2280|  2.33k|{
 2281|  2.33k|    auto plan = concat_rebalance_plan_mut<Node::bits, Node::bits_leaf>{};
 2282|  2.33k|    plan.fill(lpos, cpos, rpos);
 2283|  2.33k|    plan.shuffle(cpos.shift());
 2284|  2.33k|    return plan.merge(ec, el, lpos, cpos, er, rpos);
 2285|  2.33k|}
_ZN5immer6detail4rbts25concat_rebalance_plan_mutILj2ELj2EE5mergeIRNS1_12null_sub_posERNS1_17concat_center_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEERNS1_15regular_sub_posISH_EEEENS7_INSt3__15decayIT0_E4type6node_tEEENSS_6edit_tESU_OT_OSP_SU_OT1_:
 2244|  2.33k|    {
 2245|  2.33k|        using node_t    = node_type<CPos>;
 2246|  2.33k|        using merger_t  = concat_merger_mut<node_t>;
 2247|  2.33k|        using visitor_t = concat_merger_mut_visitor;
 2248|  2.33k|        auto lnode      = ((node_t*) lpos.node());
 2249|  2.33k|        auto rnode      = ((node_t*) rpos.node());
 2250|  2.33k|        auto lmut2      = lnode && lnode->can_relax() && lnode->can_mutate(el);
  ------------------
  |  Branch (2250:27): [True: 0, False: 2.33k]
  |  Branch (2250:36): [True: 0, False: 0]
  |  Branch (2250:58): [True: 0, False: 0]
  ------------------
 2251|  2.33k|        auto rmut2      = rnode && rnode->can_relax() && rnode->can_mutate(er);
  ------------------
  |  Branch (2251:27): [True: 2.33k, False: 0]
  |  Branch (2251:36): [True: 2.33k, False: 0]
  |  Branch (2251:58): [True: 417, False: 1.91k]
  ------------------
 2252|  2.33k|        auto merger     = merger_t{ec,
 2253|  2.33k|                               cpos.shift(),
 2254|  2.33k|                               this->counts,
 2255|  2.33k|                               this->n,
 2256|  2.33k|                               el,
 2257|  2.33k|                               lmut2 ? lnode : nullptr};
  ------------------
  |  Branch (2257:32): [True: 0, False: 2.33k]
  ------------------
 2258|  2.33k|        IMMER_TRY {
  ------------------
  |  |   49|  2.33k|#define IMMER_TRY try
  ------------------
 2259|  2.33k|            lpos.each_left_sub(visitor_t{}, merger, el);
 2260|  2.33k|            cpos.each_sub(visitor_t{}, merger, ec);
 2261|  2.33k|            if (rmut2)
  ------------------
  |  Branch (2261:17): [True: 417, False: 1.91k]
  ------------------
 2262|    417|                merger.set_candidate(er, rnode);
 2263|  2.33k|            rpos.each_right_sub(visitor_t{}, merger, er);
 2264|  2.33k|            return merger.finish();
 2265|  2.33k|        }
 2266|  2.33k|        IMMER_CATCH (...) {
 2267|      0|            merger.abort();
 2268|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 2269|      0|        }
 2270|  2.33k|    }
_ZN5immer6detail4rbts25concat_merger_mut_visitor11visit_innerIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEENS1_17concat_merger_mutISE_EEEEvOT_RT0_NSt3__15decayISJ_E4type6node_t6edit_tE:
 2221|  81.5k|    {
 2222|  81.5k|        merger.merge_inner(p, e);
 2223|  81.5k|    }
_ZN5immer6detail4rbts17concat_merger_mutINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE11merge_innerIRNS1_15regular_sub_posISC_EEEEvOT_NSA_5applyIS7_E4type4editE:
 2152|  81.5k|    {
 2153|  81.5k|        auto from       = p.node();
 2154|  81.5k|        auto from_size  = p.size();
 2155|  81.5k|        auto from_count = p.count();
 2156|  81.5k|        assert(from_size);
  ------------------
  |  Branch (2156:9): [True: 81.5k, False: 0]
  ------------------
 2157|  81.5k|        if (!to_ && *curr_ == from_count) {
  ------------------
  |  Branch (2157:13): [True: 80.1k, False: 1.36k]
  |  Branch (2157:21): [True: 80.1k, False: 0]
  ------------------
 2158|  80.1k|            add_child(from, from_size);
 2159|  80.1k|        } else {
 2160|  1.36k|            auto from_offset = count_t{};
 2161|  1.36k|            auto from_data   = from->inner();
 2162|  1.36k|            auto from_mutate = from->can_relax() && from->can_mutate(e);
  ------------------
  |  Branch (2162:32): [True: 1.36k, False: 0]
  |  Branch (2162:53): [True: 197, False: 1.16k]
  ------------------
 2163|  2.73k|            do {
 2164|  2.73k|                if (!to_) {
  ------------------
  |  Branch (2164:21): [True: 1.36k, False: 1.36k]
  ------------------
 2165|  1.36k|                    if (from_mutate) {
  ------------------
  |  Branch (2165:25): [True: 197, False: 1.16k]
  ------------------
 2166|    197|                        node_t::ownee(from) = ec_;
 2167|    197|                        from->ensure_mutable_relaxed_e(e, ec_);
 2168|    197|                        to_ = from;
 2169|  1.16k|                    } else {
 2170|  1.16k|                        to_ = node_t::make_inner_r_e(ec_);
 2171|  1.16k|                    }
 2172|  1.36k|                    to_offset_ = 0;
 2173|  1.36k|                    to_size_   = 0;
 2174|  1.36k|                }
 2175|  2.73k|                auto data = to_->inner();
 2176|  2.73k|                auto to_copy =
 2177|  2.73k|                    std::min(from_count - from_offset, *curr_ - to_offset_);
 2178|  2.73k|                auto sizes = to_->relaxed()->d.sizes;
 2179|  2.73k|                if (from != to_ || from_offset != to_offset_) {
  ------------------
  |  Branch (2179:21): [True: 2.53k, False: 197]
  |  Branch (2179:36): [True: 197, False: 0]
  ------------------
 2180|  2.73k|                    std::copy(from_data + from_offset,
 2181|  2.73k|                              from_data + from_offset + to_copy,
 2182|  2.73k|                              data + to_offset_);
 2183|  2.73k|                    p.copy_sizes(
 2184|  2.73k|                        from_offset, to_copy, to_size_, sizes + to_offset_);
 2185|  2.73k|                }
 2186|  2.73k|                to_offset_ += to_copy;
 2187|  2.73k|                from_offset += to_copy;
 2188|  2.73k|                to_size_ = sizes[to_offset_ - 1];
 2189|  2.73k|                if (*curr_ == to_offset_) {
  ------------------
  |  Branch (2189:21): [True: 1.36k, False: 1.36k]
  ------------------
 2190|  1.36k|                    to_->relaxed()->d.count = to_offset_;
 2191|  1.36k|                    add_child(to_, to_size_);
 2192|  1.36k|                    to_ = nullptr;
 2193|  1.36k|                }
 2194|  2.73k|            } while (from_offset != from_count);
  ------------------
  |  Branch (2194:22): [True: 1.36k, False: 1.36k]
  ------------------
 2195|  1.36k|        }
 2196|  81.5k|    }
_ZN5immer6detail4rbts23concat_both_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10visit_leafIRNS1_12leaf_sub_posISC_EERNS1_14empty_leaf_posISC_EERNS1_15regular_sub_posISC_EEEENS1_17concat_center_posISC_EEOT_NSA_5applyIS7_E4type4editESV_OT0_SV_OT1_:
 2416|  2.65k|    {
 2417|  2.65k|        return rpos.first_sub_leaf(
 2418|  2.65k|            concat_right_mut_visitor<Node>{}, ec, el, lpos, tpos, er);
 2419|  2.65k|    }
_ZN5immer6detail4rbts24concat_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10visit_leafIRNS1_12leaf_sub_posISC_EESH_RNS1_14empty_leaf_posISC_EEEENS1_17concat_center_posISC_EEOT_NSA_5applyIS7_E4type4editESS_OT0_OT1_SS_:
 2394|  3.50k|    {
 2395|  3.50k|        return concat_leafs_mut<Node>(ec, el, lpos, tpos, er, rpos);
 2396|  3.50k|    }
_ZN5immer6detail4rbts16concat_leafs_mutINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEERNS1_12leaf_sub_posISC_EERNS1_14empty_leaf_posISC_EESF_EENS1_17concat_center_posIT_EENSt3__15decayISK_E4type6node_t6edit_tESR_OT0_OT1_SR_OT2_:
 2294|  3.50k|{
 2295|  3.50k|    static_assert(Node::bits >= 2, "");
 2296|  3.50k|    assert(lpos.shift() == tpos.shift());
  ------------------
  |  Branch (2296:5): [True: 3.50k, False: 0]
  ------------------
 2297|  3.50k|    assert(lpos.shift() == rpos.shift());
  ------------------
  |  Branch (2297:5): [True: 3.50k, False: 0]
  ------------------
 2298|  3.50k|    assert(lpos.shift() == 0);
  ------------------
  |  Branch (2298:5): [True: 3.50k, False: 0]
  ------------------
 2299|  3.50k|    if (tpos.count() > 0)
  ------------------
  |  Branch (2299:9): [True: 0, False: 3.50k]
  ------------------
 2300|      0|        return {
 2301|      0|            Node::bits_leaf,
 2302|      0|            lpos.node(),
 2303|      0|            lpos.count(),
 2304|      0|            tpos.node(),
 2305|      0|            tpos.count(),
 2306|      0|            rpos.node(),
 2307|      0|            rpos.count(),
 2308|      0|        };
 2309|  3.50k|    else
 2310|  3.50k|        return {
 2311|  3.50k|            Node::bits_leaf,
 2312|  3.50k|            lpos.node(),
 2313|  3.50k|            lpos.count(),
 2314|  3.50k|            rpos.node(),
 2315|  3.50k|            rpos.count(),
 2316|  3.50k|        };
 2317|  3.50k|}
_ZN5immer6detail4rbts20concat_rebalance_mutINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEERNS1_25singleton_regular_sub_posISC_EERNS1_17concat_center_posISC_EERNS1_15regular_sub_posISC_EEEENSG_IT_EENSt3__15decayISM_E4type6node_t6edit_tEST_OT0_OT1_ST_OT2_:
 2280|  2.65k|{
 2281|  2.65k|    auto plan = concat_rebalance_plan_mut<Node::bits, Node::bits_leaf>{};
 2282|  2.65k|    plan.fill(lpos, cpos, rpos);
 2283|  2.65k|    plan.shuffle(cpos.shift());
 2284|  2.65k|    return plan.merge(ec, el, lpos, cpos, er, rpos);
 2285|  2.65k|}
_ZN5immer6detail4rbts25concat_rebalance_plan_mutILj2ELj2EE5mergeIRNS1_25singleton_regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEERNS1_17concat_center_posISF_EERNS1_15regular_sub_posISF_EEEENSI_INSt3__15decayIT0_E4type6node_tEEENST_6edit_tESV_OT_OSQ_SV_OT1_:
 2244|  2.65k|    {
 2245|  2.65k|        using node_t    = node_type<CPos>;
 2246|  2.65k|        using merger_t  = concat_merger_mut<node_t>;
 2247|  2.65k|        using visitor_t = concat_merger_mut_visitor;
 2248|  2.65k|        auto lnode      = ((node_t*) lpos.node());
 2249|  2.65k|        auto rnode      = ((node_t*) rpos.node());
 2250|  2.65k|        auto lmut2      = lnode && lnode->can_relax() && lnode->can_mutate(el);
  ------------------
  |  Branch (2250:27): [True: 0, False: 2.65k]
  |  Branch (2250:36): [True: 0, False: 0]
  |  Branch (2250:58): [True: 0, False: 0]
  ------------------
 2251|  2.65k|        auto rmut2      = rnode && rnode->can_relax() && rnode->can_mutate(er);
  ------------------
  |  Branch (2251:27): [True: 2.65k, False: 0]
  |  Branch (2251:36): [True: 2.65k, False: 0]
  |  Branch (2251:58): [True: 370, False: 2.28k]
  ------------------
 2252|  2.65k|        auto merger     = merger_t{ec,
 2253|  2.65k|                               cpos.shift(),
 2254|  2.65k|                               this->counts,
 2255|  2.65k|                               this->n,
 2256|  2.65k|                               el,
 2257|  2.65k|                               lmut2 ? lnode : nullptr};
  ------------------
  |  Branch (2257:32): [True: 0, False: 2.65k]
  ------------------
 2258|  2.65k|        IMMER_TRY {
  ------------------
  |  |   49|  2.65k|#define IMMER_TRY try
  ------------------
 2259|  2.65k|            lpos.each_left_sub(visitor_t{}, merger, el);
 2260|  2.65k|            cpos.each_sub(visitor_t{}, merger, ec);
 2261|  2.65k|            if (rmut2)
  ------------------
  |  Branch (2261:17): [True: 370, False: 2.28k]
  ------------------
 2262|    370|                merger.set_candidate(er, rnode);
 2263|  2.65k|            rpos.each_right_sub(visitor_t{}, merger, er);
 2264|  2.65k|            return merger.finish();
 2265|  2.65k|        }
 2266|  2.65k|        IMMER_CATCH (...) {
 2267|      0|            merger.abort();
 2268|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 2269|      0|        }
 2270|  2.65k|    }
_ZN5immer6detail4rbts20concat_rebalance_mutINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEENS1_12null_sub_posERNS1_17concat_center_posISC_EERNS1_11relaxed_posISC_EEEENSE_IT_EENSt3__15decayISK_E4type6node_t6edit_tESR_OT0_OT1_SR_OT2_:
 2280|  69.9k|{
 2281|  69.9k|    auto plan = concat_rebalance_plan_mut<Node::bits, Node::bits_leaf>{};
 2282|  69.9k|    plan.fill(lpos, cpos, rpos);
 2283|  69.9k|    plan.shuffle(cpos.shift());
 2284|  69.9k|    return plan.merge(ec, el, lpos, cpos, er, rpos);
 2285|  69.9k|}
_ZN5immer6detail4rbts25concat_rebalance_plan_mutILj2ELj2EE5mergeIRNS1_12null_sub_posERNS1_17concat_center_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEERNS1_11relaxed_posISH_EEEENS7_INSt3__15decayIT0_E4type6node_tEEENSS_6edit_tESU_OT_OSP_SU_OT1_:
 2244|  69.9k|    {
 2245|  69.9k|        using node_t    = node_type<CPos>;
 2246|  69.9k|        using merger_t  = concat_merger_mut<node_t>;
 2247|  69.9k|        using visitor_t = concat_merger_mut_visitor;
 2248|  69.9k|        auto lnode      = ((node_t*) lpos.node());
 2249|  69.9k|        auto rnode      = ((node_t*) rpos.node());
 2250|  69.9k|        auto lmut2      = lnode && lnode->can_relax() && lnode->can_mutate(el);
  ------------------
  |  Branch (2250:27): [True: 0, False: 69.9k]
  |  Branch (2250:36): [True: 0, False: 0]
  |  Branch (2250:58): [True: 0, False: 0]
  ------------------
 2251|  69.9k|        auto rmut2      = rnode && rnode->can_relax() && rnode->can_mutate(er);
  ------------------
  |  Branch (2251:27): [True: 69.9k, False: 0]
  |  Branch (2251:36): [True: 69.9k, False: 0]
  |  Branch (2251:58): [True: 30.2k, False: 39.7k]
  ------------------
 2252|  69.9k|        auto merger     = merger_t{ec,
 2253|  69.9k|                               cpos.shift(),
 2254|  69.9k|                               this->counts,
 2255|  69.9k|                               this->n,
 2256|  69.9k|                               el,
 2257|  69.9k|                               lmut2 ? lnode : nullptr};
  ------------------
  |  Branch (2257:32): [True: 0, False: 69.9k]
  ------------------
 2258|  69.9k|        IMMER_TRY {
  ------------------
  |  |   49|  69.9k|#define IMMER_TRY try
  ------------------
 2259|  69.9k|            lpos.each_left_sub(visitor_t{}, merger, el);
 2260|  69.9k|            cpos.each_sub(visitor_t{}, merger, ec);
 2261|  69.9k|            if (rmut2)
  ------------------
  |  Branch (2261:17): [True: 30.2k, False: 39.7k]
  ------------------
 2262|  30.2k|                merger.set_candidate(er, rnode);
 2263|  69.9k|            rpos.each_right_sub(visitor_t{}, merger, er);
 2264|  69.9k|            return merger.finish();
 2265|  69.9k|        }
 2266|  69.9k|        IMMER_CATCH (...) {
 2267|      0|            merger.abort();
 2268|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 2269|      0|        }
 2270|  69.9k|    }
_ZN5immer6detail4rbts23concat_both_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10visit_leafIRNS1_12leaf_sub_posISC_EERNS1_14empty_leaf_posISC_EERNS1_11relaxed_posISC_EEEENS1_17concat_center_posISC_EEOT_NSA_5applyIS7_E4type4editESV_OT0_SV_OT1_:
 2416|  3.50k|    {
 2417|  3.50k|        return rpos.first_sub_leaf(
 2418|  3.50k|            concat_right_mut_visitor<Node>{}, ec, el, lpos, tpos, er);
 2419|  3.50k|    }
_ZN5immer6detail4rbts20concat_rebalance_mutINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEERNS1_25singleton_regular_sub_posISC_EERNS1_17concat_center_posISC_EERNS1_11relaxed_posISC_EEEENSG_IT_EENSt3__15decayISM_E4type6node_t6edit_tEST_OT0_OT1_ST_OT2_:
 2280|  3.50k|{
 2281|  3.50k|    auto plan = concat_rebalance_plan_mut<Node::bits, Node::bits_leaf>{};
 2282|  3.50k|    plan.fill(lpos, cpos, rpos);
 2283|  3.50k|    plan.shuffle(cpos.shift());
 2284|  3.50k|    return plan.merge(ec, el, lpos, cpos, er, rpos);
 2285|  3.50k|}
_ZN5immer6detail4rbts25concat_rebalance_plan_mutILj2ELj2EE5mergeIRNS1_25singleton_regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEERNS1_17concat_center_posISF_EERNS1_11relaxed_posISF_EEEENSI_INSt3__15decayIT0_E4type6node_tEEENST_6edit_tESV_OT_OSQ_SV_OT1_:
 2244|  3.50k|    {
 2245|  3.50k|        using node_t    = node_type<CPos>;
 2246|  3.50k|        using merger_t  = concat_merger_mut<node_t>;
 2247|  3.50k|        using visitor_t = concat_merger_mut_visitor;
 2248|  3.50k|        auto lnode      = ((node_t*) lpos.node());
 2249|  3.50k|        auto rnode      = ((node_t*) rpos.node());
 2250|  3.50k|        auto lmut2      = lnode && lnode->can_relax() && lnode->can_mutate(el);
  ------------------
  |  Branch (2250:27): [True: 0, False: 3.50k]
  |  Branch (2250:36): [True: 0, False: 0]
  |  Branch (2250:58): [True: 0, False: 0]
  ------------------
 2251|  3.50k|        auto rmut2      = rnode && rnode->can_relax() && rnode->can_mutate(er);
  ------------------
  |  Branch (2251:27): [True: 3.50k, False: 0]
  |  Branch (2251:36): [True: 3.50k, False: 0]
  |  Branch (2251:58): [True: 1.89k, False: 1.61k]
  ------------------
 2252|  3.50k|        auto merger     = merger_t{ec,
 2253|  3.50k|                               cpos.shift(),
 2254|  3.50k|                               this->counts,
 2255|  3.50k|                               this->n,
 2256|  3.50k|                               el,
 2257|  3.50k|                               lmut2 ? lnode : nullptr};
  ------------------
  |  Branch (2257:32): [True: 0, False: 3.50k]
  ------------------
 2258|  3.50k|        IMMER_TRY {
  ------------------
  |  |   49|  3.50k|#define IMMER_TRY try
  ------------------
 2259|  3.50k|            lpos.each_left_sub(visitor_t{}, merger, el);
 2260|  3.50k|            cpos.each_sub(visitor_t{}, merger, ec);
 2261|  3.50k|            if (rmut2)
  ------------------
  |  Branch (2261:17): [True: 1.89k, False: 1.61k]
  ------------------
 2262|  1.89k|                merger.set_candidate(er, rnode);
 2263|  3.50k|            rpos.each_right_sub(visitor_t{}, merger, er);
 2264|  3.50k|            return merger.finish();
 2265|  3.50k|        }
 2266|  3.50k|        IMMER_CATCH (...) {
 2267|      0|            merger.abort();
 2268|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 2269|      0|        }
 2270|  3.50k|    }
_ZN5immer6detail4rbts30concat_trees_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10visit_nodeIRNS1_15regular_sub_posISC_EERNS1_25singleton_regular_sub_posISC_EERNS1_14empty_leaf_posISC_EEEENS1_17concat_center_posISC_EEOT_NSA_5applyIS7_E4type4editESV_OT0_OT1_SV_:
 2432|  3.40k|    {
 2433|  3.40k|        return concat_inners_mut<Node>(ec, el, lpos, tpos, er, rpos);
 2434|  3.40k|    }
_ZN5immer6detail4rbts17concat_center_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE9realize_eENSA_5applyIS7_E4type4editE:
 1548|   117k|    {
 1549|   117k|        if (count_ > 1) {
  ------------------
  |  Branch (1549:13): [True: 11.8k, False: 105k]
  ------------------
 1550|  11.8k|            auto result = node_t::make_inner_r_e(e);
 1551|  11.8k|            auto r      = result->relaxed();
 1552|  11.8k|            r->d.count  = count_;
 1553|  11.8k|            std::copy(nodes_, nodes_ + count_, result->inner());
 1554|  11.8k|            std::copy(sizes_, sizes_ + count_, r->d.sizes);
 1555|  11.8k|            return {result, shift_, r};
 1556|   105k|        } else {
 1557|   105k|            assert(shift_ >= B + BL);
  ------------------
  |  Branch (1557:13): [True: 105k, False: 0]
  ------------------
 1558|   105k|            return {nodes_[0], shift_ - B, nodes_[0]->relaxed()};
 1559|   105k|        }
 1560|   117k|    }
_ZN5immer6detail4rbts16concat_trees_mutINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEENS1_11relaxed_posIT_EENSt3__15decayISE_E4type6node_t6edit_tESL_PSE_jmSM_jSL_SM_jm:
 2474|   110k|{
 2475|   110k|    return visit_maybe_relaxed_sub(lroot,
 2476|   110k|                                   lshift,
 2477|   110k|                                   lsize,
 2478|   110k|                                   concat_trees_left_mut_visitor<Node>{},
 2479|   110k|                                   ec,
 2480|   110k|                                   el,
 2481|   110k|                                   make_leaf_pos(ltail, ltcount),
 2482|   110k|                                   er,
 2483|   110k|                                   rroot,
 2484|   110k|                                   rshift,
 2485|   110k|                                   rsize)
 2486|   110k|        .realize_e(ec);
 2487|   110k|}
_ZN5immer6detail4rbts29concat_trees_left_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10visit_nodeIRNS1_11relaxed_posISC_EENS1_8leaf_posISC_EEJRPSC_RjRmEEENS1_17concat_center_posISC_EEOT_NSA_5applyIS7_E4type4editESV_OT0_SV_DpOT1_:
 2451|   104k|    {
 2452|   104k|        return visit_maybe_relaxed_sub(args...,
 2453|   104k|                                       concat_trees_right_mut_visitor<Node>{},
 2454|   104k|                                       ec,
 2455|   104k|                                       el,
 2456|   104k|                                       lpos,
 2457|   104k|                                       tpos,
 2458|   104k|                                       er);
 2459|   104k|    }
_ZN5immer6detail4rbts30concat_trees_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10visit_nodeIRNS1_11relaxed_posISC_EESH_RNS1_8leaf_posISC_EEEENS1_17concat_center_posISC_EEOT_NSA_5applyIS7_E4type4editESS_OT0_OT1_SS_:
 2432|  68.5k|    {
 2433|  68.5k|        return concat_inners_mut<Node>(ec, el, lpos, tpos, er, rpos);
 2434|  68.5k|    }
_ZN5immer6detail4rbts17concat_inners_mutINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEERNS1_11relaxed_posISC_EERNS1_8leaf_posISC_EESF_EENS1_17concat_center_posIT_EENSt3__15decayISK_E4type6node_t6edit_tESR_OT0_OT1_SR_OT2_:
 2333|   611k|{
 2334|   611k|    auto lshift = lpos.shift();
 2335|   611k|    auto rshift = rpos.shift();
 2336|       |    // lpos.node() can be null it is a singleton_regular_sub_pos<...>,
 2337|       |    // this is, when the tree is just a tail...
 2338|   611k|    if (lshift > rshift) {
  ------------------
  |  Branch (2338:9): [True: 333k, False: 277k]
  ------------------
 2339|   333k|        auto cpos = lpos.last_sub(
 2340|   333k|            concat_left_mut_visitor<Node>{}, ec, el, tpos, er, rpos);
 2341|   333k|        return concat_rebalance_mut<Node>(
 2342|   333k|            ec, el, lpos, cpos, er, null_sub_pos{});
 2343|   333k|    } else if (lshift < rshift) {
  ------------------
  |  Branch (2343:16): [True: 46.8k, False: 230k]
  ------------------
 2344|  46.8k|        auto cpos = rpos.first_sub(
 2345|  46.8k|            concat_right_mut_visitor<Node>{}, ec, el, lpos, tpos, er);
 2346|  46.8k|        return concat_rebalance_mut<Node>(
 2347|  46.8k|            ec, el, null_sub_pos{}, cpos, er, rpos);
 2348|   230k|    } else {
 2349|   230k|        assert(lshift == rshift);
  ------------------
  |  Branch (2349:9): [True: 230k, False: 0]
  ------------------
 2350|   230k|        assert(Node::bits_leaf == 0u || lshift > 0);
  ------------------
  |  Branch (2350:9): [Folded, False: 230k]
  |  Branch (2350:9): [True: 230k, False: 0]
  |  Branch (2350:9): [True: 230k, False: 0]
  ------------------
 2351|   230k|        auto cpos = lpos.last_sub(
 2352|   230k|            concat_both_mut_visitor<Node>{}, ec, el, tpos, er, rpos);
 2353|   230k|        return concat_rebalance_mut<Node>(ec, el, lpos, cpos, er, rpos);
 2354|   230k|    }
 2355|   611k|}
_ZN5immer6detail4rbts23concat_left_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE11visit_innerIRNS1_11relaxed_posISC_EERNS1_8leaf_posISC_EESH_EENS1_17concat_center_posISC_EEOT_NSA_5applyIS7_E4type4editESS_OT0_SS_OT1_:
 2366|   332k|    {
 2367|   332k|        return concat_inners_mut<Node>(ec, el, lpos, tpos, er, rpos);
 2368|   332k|    }
_ZN5immer6detail4rbts23concat_left_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE11visit_innerIRNS1_15regular_sub_posISC_EERNS1_8leaf_posISC_EERNS1_11relaxed_posISC_EEEENS1_17concat_center_posISC_EEOT_NSA_5applyIS7_E4type4editESV_OT0_SV_OT1_:
 2366|  3.71k|    {
 2367|  3.71k|        return concat_inners_mut<Node>(ec, el, lpos, tpos, er, rpos);
 2368|  3.71k|    }
_ZN5immer6detail4rbts17concat_inners_mutINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEERNS1_15regular_sub_posISC_EERNS1_8leaf_posISC_EERNS1_11relaxed_posISC_EEEENS1_17concat_center_posIT_EENSt3__15decayISN_E4type6node_t6edit_tESU_OT0_OT1_SU_OT2_:
 2333|   109k|{
 2334|   109k|    auto lshift = lpos.shift();
 2335|   109k|    auto rshift = rpos.shift();
 2336|       |    // lpos.node() can be null it is a singleton_regular_sub_pos<...>,
 2337|       |    // this is, when the tree is just a tail...
 2338|   109k|    if (lshift > rshift) {
  ------------------
  |  Branch (2338:9): [True: 2.05k, False: 107k]
  ------------------
 2339|  2.05k|        auto cpos = lpos.last_sub(
 2340|  2.05k|            concat_left_mut_visitor<Node>{}, ec, el, tpos, er, rpos);
 2341|  2.05k|        return concat_rebalance_mut<Node>(
 2342|  2.05k|            ec, el, lpos, cpos, er, null_sub_pos{});
 2343|   107k|    } else if (lshift < rshift) {
  ------------------
  |  Branch (2343:16): [True: 9.22k, False: 98.1k]
  ------------------
 2344|  9.22k|        auto cpos = rpos.first_sub(
 2345|  9.22k|            concat_right_mut_visitor<Node>{}, ec, el, lpos, tpos, er);
 2346|  9.22k|        return concat_rebalance_mut<Node>(
 2347|  9.22k|            ec, el, null_sub_pos{}, cpos, er, rpos);
 2348|  98.1k|    } else {
 2349|  98.1k|        assert(lshift == rshift);
  ------------------
  |  Branch (2349:9): [True: 98.1k, False: 0]
  ------------------
 2350|  98.1k|        assert(Node::bits_leaf == 0u || lshift > 0);
  ------------------
  |  Branch (2350:9): [Folded, False: 98.1k]
  |  Branch (2350:9): [True: 98.1k, False: 0]
  |  Branch (2350:9): [True: 98.1k, False: 0]
  ------------------
 2351|  98.1k|        auto cpos = lpos.last_sub(
 2352|  98.1k|            concat_both_mut_visitor<Node>{}, ec, el, tpos, er, rpos);
 2353|  98.1k|        return concat_rebalance_mut<Node>(ec, el, lpos, cpos, er, rpos);
 2354|  98.1k|    }
 2355|   109k|}
_ZN5immer6detail4rbts20concat_rebalance_mutINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEERNS1_15regular_sub_posISC_EERNS1_17concat_center_posISC_EENS1_12null_sub_posEEENSG_IT_EENSt3__15decayISK_E4type6node_t6edit_tESR_OT0_OT1_SR_OT2_:
 2280|  3.89k|{
 2281|  3.89k|    auto plan = concat_rebalance_plan_mut<Node::bits, Node::bits_leaf>{};
 2282|  3.89k|    plan.fill(lpos, cpos, rpos);
 2283|  3.89k|    plan.shuffle(cpos.shift());
 2284|  3.89k|    return plan.merge(ec, el, lpos, cpos, er, rpos);
 2285|  3.89k|}
_ZN5immer6detail4rbts25concat_rebalance_plan_mutILj2ELj2EE5mergeIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEERNS1_17concat_center_posISF_EERNS1_12null_sub_posEEENSI_INSt3__15decayIT0_E4type6node_tEEENSS_6edit_tESU_OT_OSP_SU_OT1_:
 2244|  3.89k|    {
 2245|  3.89k|        using node_t    = node_type<CPos>;
 2246|  3.89k|        using merger_t  = concat_merger_mut<node_t>;
 2247|  3.89k|        using visitor_t = concat_merger_mut_visitor;
 2248|  3.89k|        auto lnode      = ((node_t*) lpos.node());
 2249|  3.89k|        auto rnode      = ((node_t*) rpos.node());
 2250|  3.89k|        auto lmut2      = lnode && lnode->can_relax() && lnode->can_mutate(el);
  ------------------
  |  Branch (2250:27): [True: 3.89k, False: 0]
  |  Branch (2250:36): [True: 3.89k, False: 0]
  |  Branch (2250:58): [True: 645, False: 3.25k]
  ------------------
 2251|  3.89k|        auto rmut2      = rnode && rnode->can_relax() && rnode->can_mutate(er);
  ------------------
  |  Branch (2251:27): [True: 0, False: 3.89k]
  |  Branch (2251:36): [True: 0, False: 0]
  |  Branch (2251:58): [True: 0, False: 0]
  ------------------
 2252|  3.89k|        auto merger     = merger_t{ec,
 2253|  3.89k|                               cpos.shift(),
 2254|  3.89k|                               this->counts,
 2255|  3.89k|                               this->n,
 2256|  3.89k|                               el,
 2257|  3.89k|                               lmut2 ? lnode : nullptr};
  ------------------
  |  Branch (2257:32): [True: 645, False: 3.25k]
  ------------------
 2258|  3.89k|        IMMER_TRY {
  ------------------
  |  |   49|  3.89k|#define IMMER_TRY try
  ------------------
 2259|  3.89k|            lpos.each_left_sub(visitor_t{}, merger, el);
 2260|  3.89k|            cpos.each_sub(visitor_t{}, merger, ec);
 2261|  3.89k|            if (rmut2)
  ------------------
  |  Branch (2261:17): [True: 0, False: 3.89k]
  ------------------
 2262|      0|                merger.set_candidate(er, rnode);
 2263|  3.89k|            rpos.each_right_sub(visitor_t{}, merger, er);
 2264|  3.89k|            return merger.finish();
 2265|  3.89k|        }
 2266|  3.89k|        IMMER_CATCH (...) {
 2267|      0|            merger.abort();
 2268|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 2269|      0|        }
 2270|  3.89k|    }
_ZN5immer6detail4rbts24concat_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE11visit_innerIRNS1_11relaxed_posISC_EERNS1_15regular_sub_posISC_EERNS1_8leaf_posISC_EEEENS1_17concat_center_posISC_EEOT_NSA_5applyIS7_E4type4editESV_OT0_OT1_SV_:
 2387|   101k|    {
 2388|   101k|        return concat_inners_mut<Node>(ec, el, lpos, tpos, er, rpos);
 2389|   101k|    }
_ZN5immer6detail4rbts24concat_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE11visit_innerIRNS1_15regular_sub_posISC_EESH_RNS1_8leaf_posISC_EEEENS1_17concat_center_posISC_EEOT_NSA_5applyIS7_E4type4editESS_OT0_OT1_SS_:
 2387|  2.78k|    {
 2388|  2.78k|        return concat_inners_mut<Node>(ec, el, lpos, tpos, er, rpos);
 2389|  2.78k|    }
_ZN5immer6detail4rbts17concat_inners_mutINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEERNS1_15regular_sub_posISC_EERNS1_8leaf_posISC_EESF_EENS1_17concat_center_posIT_EENSt3__15decayISK_E4type6node_t6edit_tESR_OT0_OT1_SR_OT2_:
 2333|  7.84k|{
 2334|  7.84k|    auto lshift = lpos.shift();
 2335|  7.84k|    auto rshift = rpos.shift();
 2336|       |    // lpos.node() can be null it is a singleton_regular_sub_pos<...>,
 2337|       |    // this is, when the tree is just a tail...
 2338|  7.84k|    if (lshift > rshift) {
  ------------------
  |  Branch (2338:9): [True: 1.83k, False: 6.00k]
  ------------------
 2339|  1.83k|        auto cpos = lpos.last_sub(
 2340|  1.83k|            concat_left_mut_visitor<Node>{}, ec, el, tpos, er, rpos);
 2341|  1.83k|        return concat_rebalance_mut<Node>(
 2342|  1.83k|            ec, el, lpos, cpos, er, null_sub_pos{});
 2343|  6.00k|    } else if (lshift < rshift) {
  ------------------
  |  Branch (2343:16): [True: 498, False: 5.51k]
  ------------------
 2344|    498|        auto cpos = rpos.first_sub(
 2345|    498|            concat_right_mut_visitor<Node>{}, ec, el, lpos, tpos, er);
 2346|    498|        return concat_rebalance_mut<Node>(
 2347|    498|            ec, el, null_sub_pos{}, cpos, er, rpos);
 2348|  5.51k|    } else {
 2349|  5.51k|        assert(lshift == rshift);
  ------------------
  |  Branch (2349:9): [True: 5.51k, False: 0]
  ------------------
 2350|  5.51k|        assert(Node::bits_leaf == 0u || lshift > 0);
  ------------------
  |  Branch (2350:9): [Folded, False: 5.51k]
  |  Branch (2350:9): [True: 5.51k, False: 0]
  |  Branch (2350:9): [True: 5.51k, False: 0]
  ------------------
 2351|  5.51k|        auto cpos = lpos.last_sub(
 2352|  5.51k|            concat_both_mut_visitor<Node>{}, ec, el, tpos, er, rpos);
 2353|  5.51k|        return concat_rebalance_mut<Node>(ec, el, lpos, cpos, er, rpos);
 2354|  5.51k|    }
 2355|  7.84k|}
_ZN5immer6detail4rbts23concat_left_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE11visit_innerIRNS1_15regular_sub_posISC_EERNS1_8leaf_posISC_EESH_EENS1_17concat_center_posISC_EEOT_NSA_5applyIS7_E4type4editESS_OT0_SS_OT1_:
 2366|  2.42k|    {
 2367|  2.42k|        return concat_inners_mut<Node>(ec, el, lpos, tpos, er, rpos);
 2368|  2.42k|    }
_ZN5immer6detail4rbts24concat_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE11visit_innerIRNS1_8full_posISC_EERNS1_15regular_sub_posISC_EERNS1_8leaf_posISC_EEEENS1_17concat_center_posISC_EEOT_NSA_5applyIS7_E4type4editESV_OT0_OT1_SV_:
 2387|  9.40k|    {
 2388|  9.40k|        return concat_inners_mut<Node>(ec, el, lpos, tpos, er, rpos);
 2389|  9.40k|    }
_ZN5immer6detail4rbts17concat_inners_mutINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEERNS1_15regular_sub_posISC_EERNS1_8leaf_posISC_EERNS1_8full_posISC_EEEENS1_17concat_center_posIT_EENSt3__15decayISN_E4type6node_t6edit_tESU_OT0_OT1_SU_OT2_:
 2333|  9.40k|{
 2334|  9.40k|    auto lshift = lpos.shift();
 2335|  9.40k|    auto rshift = rpos.shift();
 2336|       |    // lpos.node() can be null it is a singleton_regular_sub_pos<...>,
 2337|       |    // this is, when the tree is just a tail...
 2338|  9.40k|    if (lshift > rshift) {
  ------------------
  |  Branch (2338:9): [True: 0, False: 9.40k]
  ------------------
 2339|      0|        auto cpos = lpos.last_sub(
 2340|      0|            concat_left_mut_visitor<Node>{}, ec, el, tpos, er, rpos);
 2341|      0|        return concat_rebalance_mut<Node>(
 2342|      0|            ec, el, lpos, cpos, er, null_sub_pos{});
 2343|  9.40k|    } else if (lshift < rshift) {
  ------------------
  |  Branch (2343:16): [True: 249, False: 9.15k]
  ------------------
 2344|    249|        auto cpos = rpos.first_sub(
 2345|    249|            concat_right_mut_visitor<Node>{}, ec, el, lpos, tpos, er);
 2346|    249|        return concat_rebalance_mut<Node>(
 2347|    249|            ec, el, null_sub_pos{}, cpos, er, rpos);
 2348|  9.15k|    } else {
 2349|  9.15k|        assert(lshift == rshift);
  ------------------
  |  Branch (2349:9): [True: 9.15k, False: 0]
  ------------------
 2350|  9.15k|        assert(Node::bits_leaf == 0u || lshift > 0);
  ------------------
  |  Branch (2350:9): [Folded, False: 9.15k]
  |  Branch (2350:9): [True: 9.15k, False: 0]
  |  Branch (2350:9): [True: 9.15k, False: 0]
  ------------------
 2351|  9.15k|        auto cpos = lpos.last_sub(
 2352|  9.15k|            concat_both_mut_visitor<Node>{}, ec, el, tpos, er, rpos);
 2353|  9.15k|        return concat_rebalance_mut<Node>(ec, el, lpos, cpos, er, rpos);
 2354|  9.15k|    }
 2355|  9.40k|}
_ZN5immer6detail4rbts23concat_both_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10visit_leafIRNS1_12leaf_sub_posISC_EERNS1_8leaf_posISC_EERNS1_8full_posISC_EEEENS1_17concat_center_posISC_EEOT_NSA_5applyIS7_E4type4editESV_OT0_SV_OT1_:
 2416|  6.58k|    {
 2417|  6.58k|        return rpos.first_sub_leaf(
 2418|  6.58k|            concat_right_mut_visitor<Node>{}, ec, el, lpos, tpos, er);
 2419|  6.58k|    }
_ZN5immer6detail4rbts24concat_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10visit_leafIRNS1_13full_leaf_posISC_EERNS1_12leaf_sub_posISC_EERNS1_8leaf_posISC_EEEENS1_17concat_center_posISC_EEOT_NSA_5applyIS7_E4type4editESV_OT0_OT1_SV_:
 2394|  42.5k|    {
 2395|  42.5k|        return concat_leafs_mut<Node>(ec, el, lpos, tpos, er, rpos);
 2396|  42.5k|    }
_ZN5immer6detail4rbts16concat_leafs_mutINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEERNS1_12leaf_sub_posISC_EERNS1_8leaf_posISC_EERNS1_13full_leaf_posISC_EEEENS1_17concat_center_posIT_EENSt3__15decayISN_E4type6node_t6edit_tESU_OT0_OT1_SU_OT2_:
 2294|  42.5k|{
 2295|  42.5k|    static_assert(Node::bits >= 2, "");
 2296|  42.5k|    assert(lpos.shift() == tpos.shift());
  ------------------
  |  Branch (2296:5): [True: 42.5k, False: 0]
  ------------------
 2297|  42.5k|    assert(lpos.shift() == rpos.shift());
  ------------------
  |  Branch (2297:5): [True: 42.5k, False: 0]
  ------------------
 2298|  42.5k|    assert(lpos.shift() == 0);
  ------------------
  |  Branch (2298:5): [True: 42.5k, False: 0]
  ------------------
 2299|  42.5k|    if (tpos.count() > 0)
  ------------------
  |  Branch (2299:9): [True: 42.5k, False: 0]
  ------------------
 2300|  42.5k|        return {
 2301|  42.5k|            Node::bits_leaf,
 2302|  42.5k|            lpos.node(),
 2303|  42.5k|            lpos.count(),
 2304|  42.5k|            tpos.node(),
 2305|  42.5k|            tpos.count(),
 2306|  42.5k|            rpos.node(),
 2307|  42.5k|            rpos.count(),
 2308|  42.5k|        };
 2309|      0|    else
 2310|      0|        return {
 2311|      0|            Node::bits_leaf,
 2312|      0|            lpos.node(),
 2313|      0|            lpos.count(),
 2314|      0|            rpos.node(),
 2315|      0|            rpos.count(),
 2316|      0|        };
 2317|  42.5k|}
_ZN5immer6detail4rbts23concat_both_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE11visit_innerIRNS1_15regular_sub_posISC_EERNS1_8leaf_posISC_EERNS1_8full_posISC_EEEENS1_17concat_center_posISC_EEOT_NSA_5applyIS7_E4type4editESV_OT0_SV_OT1_:
 2408|  4.45k|    {
 2409|  4.45k|        return rpos.first_sub(
 2410|  4.45k|            concat_right_mut_visitor<Node>{}, ec, el, lpos, tpos, er);
 2411|  4.45k|    }
_ZN5immer6detail4rbts20concat_rebalance_mutINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEERNS1_15regular_sub_posISC_EERNS1_17concat_center_posISC_EERNS1_8full_posISC_EEEENSG_IT_EENSt3__15decayISM_E4type6node_t6edit_tEST_OT0_OT1_ST_OT2_:
 2280|  9.15k|{
 2281|  9.15k|    auto plan = concat_rebalance_plan_mut<Node::bits, Node::bits_leaf>{};
 2282|  9.15k|    plan.fill(lpos, cpos, rpos);
 2283|  9.15k|    plan.shuffle(cpos.shift());
 2284|  9.15k|    return plan.merge(ec, el, lpos, cpos, er, rpos);
 2285|  9.15k|}
_ZN5immer6detail4rbts25concat_rebalance_plan_mutILj2ELj2EE5mergeIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEERNS1_17concat_center_posISF_EERNS1_8full_posISF_EEEENSI_INSt3__15decayIT0_E4type6node_tEEENST_6edit_tESV_OT_OSQ_SV_OT1_:
 2244|  9.15k|    {
 2245|  9.15k|        using node_t    = node_type<CPos>;
 2246|  9.15k|        using merger_t  = concat_merger_mut<node_t>;
 2247|  9.15k|        using visitor_t = concat_merger_mut_visitor;
 2248|  9.15k|        auto lnode      = ((node_t*) lpos.node());
 2249|  9.15k|        auto rnode      = ((node_t*) rpos.node());
 2250|  9.15k|        auto lmut2      = lnode && lnode->can_relax() && lnode->can_mutate(el);
  ------------------
  |  Branch (2250:27): [True: 9.15k, False: 0]
  |  Branch (2250:36): [True: 9.15k, False: 0]
  |  Branch (2250:58): [True: 453, False: 8.70k]
  ------------------
 2251|  9.15k|        auto rmut2      = rnode && rnode->can_relax() && rnode->can_mutate(er);
  ------------------
  |  Branch (2251:27): [True: 9.15k, False: 0]
  |  Branch (2251:36): [True: 9.15k, False: 0]
  |  Branch (2251:58): [True: 218, False: 8.93k]
  ------------------
 2252|  9.15k|        auto merger     = merger_t{ec,
 2253|  9.15k|                               cpos.shift(),
 2254|  9.15k|                               this->counts,
 2255|  9.15k|                               this->n,
 2256|  9.15k|                               el,
 2257|  9.15k|                               lmut2 ? lnode : nullptr};
  ------------------
  |  Branch (2257:32): [True: 453, False: 8.70k]
  ------------------
 2258|  9.15k|        IMMER_TRY {
  ------------------
  |  |   49|  9.15k|#define IMMER_TRY try
  ------------------
 2259|  9.15k|            lpos.each_left_sub(visitor_t{}, merger, el);
 2260|  9.15k|            cpos.each_sub(visitor_t{}, merger, ec);
 2261|  9.15k|            if (rmut2)
  ------------------
  |  Branch (2261:17): [True: 218, False: 8.93k]
  ------------------
 2262|    218|                merger.set_candidate(er, rnode);
 2263|  9.15k|            rpos.each_right_sub(visitor_t{}, merger, er);
 2264|  9.15k|            return merger.finish();
 2265|  9.15k|        }
 2266|  9.15k|        IMMER_CATCH (...) {
 2267|      0|            merger.abort();
 2268|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 2269|      0|        }
 2270|  9.15k|    }
_ZN5immer6detail4rbts23concat_both_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10visit_leafIRNS1_12leaf_sub_posISC_EERNS1_8leaf_posISC_EERNS1_15regular_sub_posISC_EEEENS1_17concat_center_posISC_EEOT_NSA_5applyIS7_E4type4editESV_OT0_SV_OT1_:
 2416|  36.0k|    {
 2417|  36.0k|        return rpos.first_sub_leaf(
 2418|  36.0k|            concat_right_mut_visitor<Node>{}, ec, el, lpos, tpos, er);
 2419|  36.0k|    }
_ZN5immer6detail4rbts24concat_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10visit_leafIRNS1_12leaf_sub_posISC_EESH_RNS1_8leaf_posISC_EEEENS1_17concat_center_posISC_EEOT_NSA_5applyIS7_E4type4editESS_OT0_OT1_SS_:
 2394|  68.0k|    {
 2395|  68.0k|        return concat_leafs_mut<Node>(ec, el, lpos, tpos, er, rpos);
 2396|  68.0k|    }
_ZN5immer6detail4rbts16concat_leafs_mutINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEERNS1_12leaf_sub_posISC_EERNS1_8leaf_posISC_EESF_EENS1_17concat_center_posIT_EENSt3__15decayISK_E4type6node_t6edit_tESR_OT0_OT1_SR_OT2_:
 2294|  68.0k|{
 2295|  68.0k|    static_assert(Node::bits >= 2, "");
 2296|  68.0k|    assert(lpos.shift() == tpos.shift());
  ------------------
  |  Branch (2296:5): [True: 68.0k, False: 0]
  ------------------
 2297|  68.0k|    assert(lpos.shift() == rpos.shift());
  ------------------
  |  Branch (2297:5): [True: 68.0k, False: 0]
  ------------------
 2298|  68.0k|    assert(lpos.shift() == 0);
  ------------------
  |  Branch (2298:5): [True: 68.0k, False: 0]
  ------------------
 2299|  68.0k|    if (tpos.count() > 0)
  ------------------
  |  Branch (2299:9): [True: 68.0k, False: 0]
  ------------------
 2300|  68.0k|        return {
 2301|  68.0k|            Node::bits_leaf,
 2302|  68.0k|            lpos.node(),
 2303|  68.0k|            lpos.count(),
 2304|  68.0k|            tpos.node(),
 2305|  68.0k|            tpos.count(),
 2306|  68.0k|            rpos.node(),
 2307|  68.0k|            rpos.count(),
 2308|  68.0k|        };
 2309|      0|    else
 2310|      0|        return {
 2311|      0|            Node::bits_leaf,
 2312|      0|            lpos.node(),
 2313|      0|            lpos.count(),
 2314|      0|            rpos.node(),
 2315|      0|            rpos.count(),
 2316|      0|        };
 2317|  68.0k|}
_ZN5immer6detail4rbts23concat_both_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE11visit_innerIRNS1_15regular_sub_posISC_EERNS1_8leaf_posISC_EESH_EENS1_17concat_center_posISC_EEOT_NSA_5applyIS7_E4type4editESS_OT0_SS_OT1_:
 2408|  4.20k|    {
 2409|  4.20k|        return rpos.first_sub(
 2410|  4.20k|            concat_right_mut_visitor<Node>{}, ec, el, lpos, tpos, er);
 2411|  4.20k|    }
_ZN5immer6detail4rbts20concat_rebalance_mutINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEERNS1_15regular_sub_posISC_EERNS1_17concat_center_posISC_EESF_EENSG_IT_EENSt3__15decayISJ_E4type6node_t6edit_tESQ_OT0_OT1_SQ_OT2_:
 2280|  5.51k|{
 2281|  5.51k|    auto plan = concat_rebalance_plan_mut<Node::bits, Node::bits_leaf>{};
 2282|  5.51k|    plan.fill(lpos, cpos, rpos);
 2283|  5.51k|    plan.shuffle(cpos.shift());
 2284|  5.51k|    return plan.merge(ec, el, lpos, cpos, er, rpos);
 2285|  5.51k|}
_ZN5immer6detail4rbts25concat_rebalance_plan_mutILj2ELj2EE5mergeIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEERNS1_17concat_center_posISF_EESH_EENSI_INSt3__15decayIT0_E4type6node_tEEENSQ_6edit_tESS_OT_OSN_SS_OT1_:
 2244|  5.51k|    {
 2245|  5.51k|        using node_t    = node_type<CPos>;
 2246|  5.51k|        using merger_t  = concat_merger_mut<node_t>;
 2247|  5.51k|        using visitor_t = concat_merger_mut_visitor;
 2248|  5.51k|        auto lnode      = ((node_t*) lpos.node());
 2249|  5.51k|        auto rnode      = ((node_t*) rpos.node());
 2250|  5.51k|        auto lmut2      = lnode && lnode->can_relax() && lnode->can_mutate(el);
  ------------------
  |  Branch (2250:27): [True: 5.51k, False: 0]
  |  Branch (2250:36): [True: 5.51k, False: 0]
  |  Branch (2250:58): [True: 661, False: 4.84k]
  ------------------
 2251|  5.51k|        auto rmut2      = rnode && rnode->can_relax() && rnode->can_mutate(er);
  ------------------
  |  Branch (2251:27): [True: 5.51k, False: 0]
  |  Branch (2251:36): [True: 5.51k, False: 0]
  |  Branch (2251:58): [True: 667, False: 4.84k]
  ------------------
 2252|  5.51k|        auto merger     = merger_t{ec,
 2253|  5.51k|                               cpos.shift(),
 2254|  5.51k|                               this->counts,
 2255|  5.51k|                               this->n,
 2256|  5.51k|                               el,
 2257|  5.51k|                               lmut2 ? lnode : nullptr};
  ------------------
  |  Branch (2257:32): [True: 661, False: 4.84k]
  ------------------
 2258|  5.51k|        IMMER_TRY {
  ------------------
  |  |   49|  5.51k|#define IMMER_TRY try
  ------------------
 2259|  5.51k|            lpos.each_left_sub(visitor_t{}, merger, el);
 2260|  5.51k|            cpos.each_sub(visitor_t{}, merger, ec);
 2261|  5.51k|            if (rmut2)
  ------------------
  |  Branch (2261:17): [True: 667, False: 4.84k]
  ------------------
 2262|    667|                merger.set_candidate(er, rnode);
 2263|  5.51k|            rpos.each_right_sub(visitor_t{}, merger, er);
 2264|  5.51k|            return merger.finish();
 2265|  5.51k|        }
 2266|  5.51k|        IMMER_CATCH (...) {
 2267|      0|            merger.abort();
 2268|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 2269|      0|        }
 2270|  5.51k|    }
_ZN5immer6detail4rbts23concat_both_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10visit_leafIRNS1_12leaf_sub_posISC_EERNS1_8leaf_posISC_EERNS1_11relaxed_posISC_EEEENS1_17concat_center_posISC_EEOT_NSA_5applyIS7_E4type4editESV_OT0_SV_OT1_:
 2416|  68.0k|    {
 2417|  68.0k|        return rpos.first_sub_leaf(
 2418|  68.0k|            concat_right_mut_visitor<Node>{}, ec, el, lpos, tpos, er);
 2419|  68.0k|    }
_ZN5immer6detail4rbts23concat_both_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE11visit_innerIRNS1_15regular_sub_posISC_EERNS1_8leaf_posISC_EERNS1_11relaxed_posISC_EEEENS1_17concat_center_posISC_EEOT_NSA_5applyIS7_E4type4editESV_OT0_SV_OT1_:
 2408|  95.5k|    {
 2409|  95.5k|        return rpos.first_sub(
 2410|  95.5k|            concat_right_mut_visitor<Node>{}, ec, el, lpos, tpos, er);
 2411|  95.5k|    }
_ZN5immer6detail4rbts20concat_rebalance_mutINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEERNS1_15regular_sub_posISC_EERNS1_17concat_center_posISC_EERNS1_11relaxed_posISC_EEEENSG_IT_EENSt3__15decayISM_E4type6node_t6edit_tEST_OT0_OT1_ST_OT2_:
 2280|  98.1k|{
 2281|  98.1k|    auto plan = concat_rebalance_plan_mut<Node::bits, Node::bits_leaf>{};
 2282|  98.1k|    plan.fill(lpos, cpos, rpos);
 2283|  98.1k|    plan.shuffle(cpos.shift());
 2284|  98.1k|    return plan.merge(ec, el, lpos, cpos, er, rpos);
 2285|  98.1k|}
_ZN5immer6detail4rbts25concat_rebalance_plan_mutILj2ELj2EE5mergeIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEERNS1_17concat_center_posISF_EERNS1_11relaxed_posISF_EEEENSI_INSt3__15decayIT0_E4type6node_tEEENST_6edit_tESV_OT_OSQ_SV_OT1_:
 2244|  98.1k|    {
 2245|  98.1k|        using node_t    = node_type<CPos>;
 2246|  98.1k|        using merger_t  = concat_merger_mut<node_t>;
 2247|  98.1k|        using visitor_t = concat_merger_mut_visitor;
 2248|  98.1k|        auto lnode      = ((node_t*) lpos.node());
 2249|  98.1k|        auto rnode      = ((node_t*) rpos.node());
 2250|  98.1k|        auto lmut2      = lnode && lnode->can_relax() && lnode->can_mutate(el);
  ------------------
  |  Branch (2250:27): [True: 98.1k, False: 0]
  |  Branch (2250:36): [True: 98.1k, False: 0]
  |  Branch (2250:58): [True: 3.71k, False: 94.4k]
  ------------------
 2251|  98.1k|        auto rmut2      = rnode && rnode->can_relax() && rnode->can_mutate(er);
  ------------------
  |  Branch (2251:27): [True: 98.1k, False: 0]
  |  Branch (2251:36): [True: 98.1k, False: 0]
  |  Branch (2251:58): [True: 3.79k, False: 94.3k]
  ------------------
 2252|  98.1k|        auto merger     = merger_t{ec,
 2253|  98.1k|                               cpos.shift(),
 2254|  98.1k|                               this->counts,
 2255|  98.1k|                               this->n,
 2256|  98.1k|                               el,
 2257|  98.1k|                               lmut2 ? lnode : nullptr};
  ------------------
  |  Branch (2257:32): [True: 3.71k, False: 94.4k]
  ------------------
 2258|  98.1k|        IMMER_TRY {
  ------------------
  |  |   49|  98.1k|#define IMMER_TRY try
  ------------------
 2259|  98.1k|            lpos.each_left_sub(visitor_t{}, merger, el);
 2260|  98.1k|            cpos.each_sub(visitor_t{}, merger, ec);
 2261|  98.1k|            if (rmut2)
  ------------------
  |  Branch (2261:17): [True: 3.79k, False: 94.3k]
  ------------------
 2262|  3.79k|                merger.set_candidate(er, rnode);
 2263|  98.1k|            rpos.each_right_sub(visitor_t{}, merger, er);
 2264|  98.1k|            return merger.finish();
 2265|  98.1k|        }
 2266|  98.1k|        IMMER_CATCH (...) {
 2267|      0|            merger.abort();
 2268|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 2269|      0|        }
 2270|  98.1k|    }
_ZN5immer6detail4rbts20concat_rebalance_mutINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEERNS1_11relaxed_posISC_EERNS1_17concat_center_posISC_EENS1_12null_sub_posEEENSG_IT_EENSt3__15decayISK_E4type6node_t6edit_tESR_OT0_OT1_SR_OT2_:
 2280|   542k|{
 2281|   542k|    auto plan = concat_rebalance_plan_mut<Node::bits, Node::bits_leaf>{};
 2282|   542k|    plan.fill(lpos, cpos, rpos);
 2283|   542k|    plan.shuffle(cpos.shift());
 2284|   542k|    return plan.merge(ec, el, lpos, cpos, er, rpos);
 2285|   542k|}
_ZN5immer6detail4rbts25concat_rebalance_plan_mutILj2ELj2EE5mergeIRNS1_11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEERNS1_17concat_center_posISF_EERNS1_12null_sub_posEEENSI_INSt3__15decayIT0_E4type6node_tEEENSS_6edit_tESU_OT_OSP_SU_OT1_:
 2244|   542k|    {
 2245|   542k|        using node_t    = node_type<CPos>;
 2246|   542k|        using merger_t  = concat_merger_mut<node_t>;
 2247|   542k|        using visitor_t = concat_merger_mut_visitor;
 2248|   542k|        auto lnode      = ((node_t*) lpos.node());
 2249|   542k|        auto rnode      = ((node_t*) rpos.node());
 2250|   542k|        auto lmut2      = lnode && lnode->can_relax() && lnode->can_mutate(el);
  ------------------
  |  Branch (2250:27): [True: 542k, False: 0]
  |  Branch (2250:36): [True: 542k, False: 0]
  |  Branch (2250:58): [True: 522k, False: 20.1k]
  ------------------
 2251|   542k|        auto rmut2      = rnode && rnode->can_relax() && rnode->can_mutate(er);
  ------------------
  |  Branch (2251:27): [True: 0, False: 542k]
  |  Branch (2251:36): [True: 0, False: 0]
  |  Branch (2251:58): [True: 0, False: 0]
  ------------------
 2252|   542k|        auto merger     = merger_t{ec,
 2253|   542k|                               cpos.shift(),
 2254|   542k|                               this->counts,
 2255|   542k|                               this->n,
 2256|   542k|                               el,
 2257|   542k|                               lmut2 ? lnode : nullptr};
  ------------------
  |  Branch (2257:32): [True: 522k, False: 20.1k]
  ------------------
 2258|   542k|        IMMER_TRY {
  ------------------
  |  |   49|   542k|#define IMMER_TRY try
  ------------------
 2259|   542k|            lpos.each_left_sub(visitor_t{}, merger, el);
 2260|   542k|            cpos.each_sub(visitor_t{}, merger, ec);
 2261|   542k|            if (rmut2)
  ------------------
  |  Branch (2261:17): [True: 0, False: 542k]
  ------------------
 2262|      0|                merger.set_candidate(er, rnode);
 2263|   542k|            rpos.each_right_sub(visitor_t{}, merger, er);
 2264|   542k|            return merger.finish();
 2265|   542k|        }
 2266|   542k|        IMMER_CATCH (...) {
 2267|      0|            merger.abort();
 2268|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 2269|      0|        }
 2270|   542k|    }
_ZN5immer6detail4rbts24concat_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE11visit_innerIRNS1_11relaxed_posISC_EESH_RNS1_8leaf_posISC_EEEENS1_17concat_center_posISC_EEOT_NSA_5applyIS7_E4type4editESS_OT0_OT1_SS_:
 2387|   210k|    {
 2388|   210k|        return concat_inners_mut<Node>(ec, el, lpos, tpos, er, rpos);
 2389|   210k|    }
_ZN5immer6detail4rbts24concat_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE11visit_innerIRNS1_15regular_sub_posISC_EERNS1_11relaxed_posISC_EERNS1_8leaf_posISC_EEEENS1_17concat_center_posISC_EEOT_NSA_5applyIS7_E4type4editESV_OT0_OT1_SV_:
 2387|  1.53k|    {
 2388|  1.53k|        return concat_inners_mut<Node>(ec, el, lpos, tpos, er, rpos);
 2389|  1.53k|    }
_ZN5immer6detail4rbts17concat_inners_mutINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEERNS1_11relaxed_posISC_EERNS1_8leaf_posISC_EERNS1_15regular_sub_posISC_EEEENS1_17concat_center_posIT_EENSt3__15decayISN_E4type6node_t6edit_tESU_OT0_OT1_SU_OT2_:
 2333|   245k|{
 2334|   245k|    auto lshift = lpos.shift();
 2335|   245k|    auto rshift = rpos.shift();
 2336|       |    // lpos.node() can be null it is a singleton_regular_sub_pos<...>,
 2337|       |    // this is, when the tree is just a tail...
 2338|   245k|    if (lshift > rshift) {
  ------------------
  |  Branch (2338:9): [True: 208k, False: 36.5k]
  ------------------
 2339|   208k|        auto cpos = lpos.last_sub(
 2340|   208k|            concat_left_mut_visitor<Node>{}, ec, el, tpos, er, rpos);
 2341|   208k|        return concat_rebalance_mut<Node>(
 2342|   208k|            ec, el, lpos, cpos, er, null_sub_pos{});
 2343|   208k|    } else if (lshift < rshift) {
  ------------------
  |  Branch (2343:16): [True: 817, False: 35.7k]
  ------------------
 2344|    817|        auto cpos = rpos.first_sub(
 2345|    817|            concat_right_mut_visitor<Node>{}, ec, el, lpos, tpos, er);
 2346|    817|        return concat_rebalance_mut<Node>(
 2347|    817|            ec, el, null_sub_pos{}, cpos, er, rpos);
 2348|  35.7k|    } else {
 2349|  35.7k|        assert(lshift == rshift);
  ------------------
  |  Branch (2349:9): [True: 35.7k, False: 0]
  ------------------
 2350|  35.7k|        assert(Node::bits_leaf == 0u || lshift > 0);
  ------------------
  |  Branch (2350:9): [Folded, False: 35.7k]
  |  Branch (2350:9): [True: 35.7k, False: 0]
  |  Branch (2350:9): [True: 35.7k, False: 0]
  ------------------
 2351|  35.7k|        auto cpos = lpos.last_sub(
 2352|  35.7k|            concat_both_mut_visitor<Node>{}, ec, el, tpos, er, rpos);
 2353|  35.7k|        return concat_rebalance_mut<Node>(ec, el, lpos, cpos, er, rpos);
 2354|  35.7k|    }
 2355|   245k|}
_ZN5immer6detail4rbts23concat_left_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE11visit_innerIRNS1_11relaxed_posISC_EERNS1_8leaf_posISC_EERNS1_15regular_sub_posISC_EEEENS1_17concat_center_posISC_EEOT_NSA_5applyIS7_E4type4editESV_OT0_SV_OT1_:
 2366|   208k|    {
 2367|   208k|        return concat_inners_mut<Node>(ec, el, lpos, tpos, er, rpos);
 2368|   208k|    }
_ZN5immer6detail4rbts24concat_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE11visit_innerIRNS1_8full_posISC_EERNS1_11relaxed_posISC_EERNS1_8leaf_posISC_EEEENS1_17concat_center_posISC_EEOT_NSA_5applyIS7_E4type4editESV_OT0_OT1_SV_:
 2387|  2.64k|    {
 2388|  2.64k|        return concat_inners_mut<Node>(ec, el, lpos, tpos, er, rpos);
 2389|  2.64k|    }
_ZN5immer6detail4rbts17concat_inners_mutINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEERNS1_11relaxed_posISC_EERNS1_8leaf_posISC_EERNS1_8full_posISC_EEEENS1_17concat_center_posIT_EENSt3__15decayISN_E4type6node_t6edit_tESU_OT0_OT1_SU_OT2_:
 2333|  2.64k|{
 2334|  2.64k|    auto lshift = lpos.shift();
 2335|  2.64k|    auto rshift = rpos.shift();
 2336|       |    // lpos.node() can be null it is a singleton_regular_sub_pos<...>,
 2337|       |    // this is, when the tree is just a tail...
 2338|  2.64k|    if (lshift > rshift) {
  ------------------
  |  Branch (2338:9): [True: 0, False: 2.64k]
  ------------------
 2339|      0|        auto cpos = lpos.last_sub(
 2340|      0|            concat_left_mut_visitor<Node>{}, ec, el, tpos, er, rpos);
 2341|      0|        return concat_rebalance_mut<Node>(
 2342|      0|            ec, el, lpos, cpos, er, null_sub_pos{});
 2343|  2.64k|    } else if (lshift < rshift) {
  ------------------
  |  Branch (2343:16): [True: 264, False: 2.38k]
  ------------------
 2344|    264|        auto cpos = rpos.first_sub(
 2345|    264|            concat_right_mut_visitor<Node>{}, ec, el, lpos, tpos, er);
 2346|    264|        return concat_rebalance_mut<Node>(
 2347|    264|            ec, el, null_sub_pos{}, cpos, er, rpos);
 2348|  2.38k|    } else {
 2349|  2.38k|        assert(lshift == rshift);
  ------------------
  |  Branch (2349:9): [True: 2.38k, False: 0]
  ------------------
 2350|  2.38k|        assert(Node::bits_leaf == 0u || lshift > 0);
  ------------------
  |  Branch (2350:9): [Folded, False: 2.38k]
  |  Branch (2350:9): [True: 2.38k, False: 0]
  |  Branch (2350:9): [True: 2.38k, False: 0]
  ------------------
 2351|  2.38k|        auto cpos = lpos.last_sub(
 2352|  2.38k|            concat_both_mut_visitor<Node>{}, ec, el, tpos, er, rpos);
 2353|  2.38k|        return concat_rebalance_mut<Node>(ec, el, lpos, cpos, er, rpos);
 2354|  2.38k|    }
 2355|  2.64k|}
_ZN5immer6detail4rbts23concat_both_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE11visit_innerIRNS1_11relaxed_posISC_EERNS1_8leaf_posISC_EERNS1_8full_posISC_EEEENS1_17concat_center_posISC_EEOT_NSA_5applyIS7_E4type4editESV_OT0_SV_OT1_:
 2408|    495|    {
 2409|    495|        return rpos.first_sub(
 2410|    495|            concat_right_mut_visitor<Node>{}, ec, el, lpos, tpos, er);
 2411|    495|    }
_ZN5immer6detail4rbts20concat_rebalance_mutINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEERNS1_11relaxed_posISC_EERNS1_17concat_center_posISC_EERNS1_8full_posISC_EEEENSG_IT_EENSt3__15decayISM_E4type6node_t6edit_tEST_OT0_OT1_ST_OT2_:
 2280|  2.38k|{
 2281|  2.38k|    auto plan = concat_rebalance_plan_mut<Node::bits, Node::bits_leaf>{};
 2282|  2.38k|    plan.fill(lpos, cpos, rpos);
 2283|  2.38k|    plan.shuffle(cpos.shift());
 2284|  2.38k|    return plan.merge(ec, el, lpos, cpos, er, rpos);
 2285|  2.38k|}
_ZN5immer6detail4rbts25concat_rebalance_plan_mutILj2ELj2EE5mergeIRNS1_11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEERNS1_17concat_center_posISF_EERNS1_8full_posISF_EEEENSI_INSt3__15decayIT0_E4type6node_tEEENST_6edit_tESV_OT_OSQ_SV_OT1_:
 2244|  2.38k|    {
 2245|  2.38k|        using node_t    = node_type<CPos>;
 2246|  2.38k|        using merger_t  = concat_merger_mut<node_t>;
 2247|  2.38k|        using visitor_t = concat_merger_mut_visitor;
 2248|  2.38k|        auto lnode      = ((node_t*) lpos.node());
 2249|  2.38k|        auto rnode      = ((node_t*) rpos.node());
 2250|  2.38k|        auto lmut2      = lnode && lnode->can_relax() && lnode->can_mutate(el);
  ------------------
  |  Branch (2250:27): [True: 2.38k, False: 0]
  |  Branch (2250:36): [True: 2.38k, False: 0]
  |  Branch (2250:58): [True: 902, False: 1.48k]
  ------------------
 2251|  2.38k|        auto rmut2      = rnode && rnode->can_relax() && rnode->can_mutate(er);
  ------------------
  |  Branch (2251:27): [True: 2.38k, False: 0]
  |  Branch (2251:36): [True: 2.38k, False: 0]
  |  Branch (2251:58): [True: 198, False: 2.18k]
  ------------------
 2252|  2.38k|        auto merger     = merger_t{ec,
 2253|  2.38k|                               cpos.shift(),
 2254|  2.38k|                               this->counts,
 2255|  2.38k|                               this->n,
 2256|  2.38k|                               el,
 2257|  2.38k|                               lmut2 ? lnode : nullptr};
  ------------------
  |  Branch (2257:32): [True: 902, False: 1.48k]
  ------------------
 2258|  2.38k|        IMMER_TRY {
  ------------------
  |  |   49|  2.38k|#define IMMER_TRY try
  ------------------
 2259|  2.38k|            lpos.each_left_sub(visitor_t{}, merger, el);
 2260|  2.38k|            cpos.each_sub(visitor_t{}, merger, ec);
 2261|  2.38k|            if (rmut2)
  ------------------
  |  Branch (2261:17): [True: 198, False: 2.18k]
  ------------------
 2262|    198|                merger.set_candidate(er, rnode);
 2263|  2.38k|            rpos.each_right_sub(visitor_t{}, merger, er);
 2264|  2.38k|            return merger.finish();
 2265|  2.38k|        }
 2266|  2.38k|        IMMER_CATCH (...) {
 2267|      0|            merger.abort();
 2268|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 2269|      0|        }
 2270|  2.38k|    }
_ZN5immer6detail4rbts23concat_both_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE11visit_innerIRNS1_11relaxed_posISC_EERNS1_8leaf_posISC_EERNS1_15regular_sub_posISC_EEEENS1_17concat_center_posISC_EEOT_NSA_5applyIS7_E4type4editESV_OT0_SV_OT1_:
 2408|  1.07k|    {
 2409|  1.07k|        return rpos.first_sub(
 2410|  1.07k|            concat_right_mut_visitor<Node>{}, ec, el, lpos, tpos, er);
 2411|  1.07k|    }
_ZN5immer6detail4rbts20concat_rebalance_mutINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEERNS1_11relaxed_posISC_EERNS1_17concat_center_posISC_EERNS1_15regular_sub_posISC_EEEENSG_IT_EENSt3__15decayISM_E4type6node_t6edit_tEST_OT0_OT1_ST_OT2_:
 2280|  35.7k|{
 2281|  35.7k|    auto plan = concat_rebalance_plan_mut<Node::bits, Node::bits_leaf>{};
 2282|  35.7k|    plan.fill(lpos, cpos, rpos);
 2283|  35.7k|    plan.shuffle(cpos.shift());
 2284|  35.7k|    return plan.merge(ec, el, lpos, cpos, er, rpos);
 2285|  35.7k|}
_ZN5immer6detail4rbts25concat_rebalance_plan_mutILj2ELj2EE5mergeIRNS1_11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEERNS1_17concat_center_posISF_EERNS1_15regular_sub_posISF_EEEENSI_INSt3__15decayIT0_E4type6node_tEEENST_6edit_tESV_OT_OSQ_SV_OT1_:
 2244|  35.7k|    {
 2245|  35.7k|        using node_t    = node_type<CPos>;
 2246|  35.7k|        using merger_t  = concat_merger_mut<node_t>;
 2247|  35.7k|        using visitor_t = concat_merger_mut_visitor;
 2248|  35.7k|        auto lnode      = ((node_t*) lpos.node());
 2249|  35.7k|        auto rnode      = ((node_t*) rpos.node());
 2250|  35.7k|        auto lmut2      = lnode && lnode->can_relax() && lnode->can_mutate(el);
  ------------------
  |  Branch (2250:27): [True: 35.7k, False: 0]
  |  Branch (2250:36): [True: 35.7k, False: 0]
  |  Branch (2250:58): [True: 33.0k, False: 2.76k]
  ------------------
 2251|  35.7k|        auto rmut2      = rnode && rnode->can_relax() && rnode->can_mutate(er);
  ------------------
  |  Branch (2251:27): [True: 35.7k, False: 0]
  |  Branch (2251:36): [True: 35.7k, False: 0]
  |  Branch (2251:58): [True: 383, False: 35.3k]
  ------------------
 2252|  35.7k|        auto merger     = merger_t{ec,
 2253|  35.7k|                               cpos.shift(),
 2254|  35.7k|                               this->counts,
 2255|  35.7k|                               this->n,
 2256|  35.7k|                               el,
 2257|  35.7k|                               lmut2 ? lnode : nullptr};
  ------------------
  |  Branch (2257:32): [True: 33.0k, False: 2.76k]
  ------------------
 2258|  35.7k|        IMMER_TRY {
  ------------------
  |  |   49|  35.7k|#define IMMER_TRY try
  ------------------
 2259|  35.7k|            lpos.each_left_sub(visitor_t{}, merger, el);
 2260|  35.7k|            cpos.each_sub(visitor_t{}, merger, ec);
 2261|  35.7k|            if (rmut2)
  ------------------
  |  Branch (2261:17): [True: 383, False: 35.3k]
  ------------------
 2262|    383|                merger.set_candidate(er, rnode);
 2263|  35.7k|            rpos.each_right_sub(visitor_t{}, merger, er);
 2264|  35.7k|            return merger.finish();
 2265|  35.7k|        }
 2266|  35.7k|        IMMER_CATCH (...) {
 2267|      0|            merger.abort();
 2268|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 2269|      0|        }
 2270|  35.7k|    }
_ZN5immer6detail4rbts23concat_both_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE11visit_innerIRNS1_11relaxed_posISC_EERNS1_8leaf_posISC_EESH_EENS1_17concat_center_posISC_EEOT_NSA_5applyIS7_E4type4editESS_OT0_SS_OT1_:
 2408|   165k|    {
 2409|   165k|        return rpos.first_sub(
 2410|   165k|            concat_right_mut_visitor<Node>{}, ec, el, lpos, tpos, er);
 2411|   165k|    }
_ZN5immer6detail4rbts20concat_rebalance_mutINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEERNS1_11relaxed_posISC_EERNS1_17concat_center_posISC_EESF_EENSG_IT_EENSt3__15decayISJ_E4type6node_t6edit_tESQ_OT0_OT1_SQ_OT2_:
 2280|   230k|{
 2281|   230k|    auto plan = concat_rebalance_plan_mut<Node::bits, Node::bits_leaf>{};
 2282|   230k|    plan.fill(lpos, cpos, rpos);
 2283|   230k|    plan.shuffle(cpos.shift());
 2284|   230k|    return plan.merge(ec, el, lpos, cpos, er, rpos);
 2285|   230k|}
_ZN5immer6detail4rbts25concat_rebalance_plan_mutILj2ELj2EE5mergeIRNS1_11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEERNS1_17concat_center_posISF_EESH_EENSI_INSt3__15decayIT0_E4type6node_tEEENSQ_6edit_tESS_OT_OSN_SS_OT1_:
 2244|   230k|    {
 2245|   230k|        using node_t    = node_type<CPos>;
 2246|   230k|        using merger_t  = concat_merger_mut<node_t>;
 2247|   230k|        using visitor_t = concat_merger_mut_visitor;
 2248|   230k|        auto lnode      = ((node_t*) lpos.node());
 2249|   230k|        auto rnode      = ((node_t*) rpos.node());
 2250|   230k|        auto lmut2      = lnode && lnode->can_relax() && lnode->can_mutate(el);
  ------------------
  |  Branch (2250:27): [True: 230k, False: 0]
  |  Branch (2250:36): [True: 230k, False: 0]
  |  Branch (2250:58): [True: 52.0k, False: 178k]
  ------------------
 2251|   230k|        auto rmut2      = rnode && rnode->can_relax() && rnode->can_mutate(er);
  ------------------
  |  Branch (2251:27): [True: 230k, False: 0]
  |  Branch (2251:36): [True: 230k, False: 0]
  |  Branch (2251:58): [True: 9.65k, False: 221k]
  ------------------
 2252|   230k|        auto merger     = merger_t{ec,
 2253|   230k|                               cpos.shift(),
 2254|   230k|                               this->counts,
 2255|   230k|                               this->n,
 2256|   230k|                               el,
 2257|   230k|                               lmut2 ? lnode : nullptr};
  ------------------
  |  Branch (2257:32): [True: 52.0k, False: 178k]
  ------------------
 2258|   230k|        IMMER_TRY {
  ------------------
  |  |   49|   230k|#define IMMER_TRY try
  ------------------
 2259|   230k|            lpos.each_left_sub(visitor_t{}, merger, el);
 2260|   230k|            cpos.each_sub(visitor_t{}, merger, ec);
 2261|   230k|            if (rmut2)
  ------------------
  |  Branch (2261:17): [True: 9.65k, False: 221k]
  ------------------
 2262|  9.65k|                merger.set_candidate(er, rnode);
 2263|   230k|            rpos.each_right_sub(visitor_t{}, merger, er);
 2264|   230k|            return merger.finish();
 2265|   230k|        }
 2266|   230k|        IMMER_CATCH (...) {
 2267|      0|            merger.abort();
 2268|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 2269|      0|        }
 2270|   230k|    }
_ZN5immer6detail4rbts30concat_trees_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10visit_nodeIRNS1_15regular_sub_posISC_EERNS1_11relaxed_posISC_EERNS1_8leaf_posISC_EEEENS1_17concat_center_posISC_EEOT_NSA_5applyIS7_E4type4editESV_OT0_OT1_SV_:
 2432|  35.6k|    {
 2433|  35.6k|        return concat_inners_mut<Node>(ec, el, lpos, tpos, er, rpos);
 2434|  35.6k|    }
_ZN5immer6detail4rbts29concat_trees_left_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10visit_nodeIRNS1_15regular_sub_posISC_EENS1_8leaf_posISC_EEJRPSC_RjRmEEENS1_17concat_center_posISC_EEOT_NSA_5applyIS7_E4type4editESV_OT0_SV_DpOT1_:
 2451|  6.39k|    {
 2452|  6.39k|        return visit_maybe_relaxed_sub(args...,
 2453|  6.39k|                                       concat_trees_right_mut_visitor<Node>{},
 2454|  6.39k|                                       ec,
 2455|  6.39k|                                       el,
 2456|  6.39k|                                       lpos,
 2457|  6.39k|                                       tpos,
 2458|  6.39k|                                       er);
 2459|  6.39k|    }
_ZN5immer6detail4rbts30concat_trees_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10visit_nodeIRNS1_11relaxed_posISC_EERNS1_15regular_sub_posISC_EERNS1_8leaf_posISC_EEEENS1_17concat_center_posISC_EEOT_NSA_5applyIS7_E4type4editESV_OT0_OT1_SV_:
 2432|  3.75k|    {
 2433|  3.75k|        return concat_inners_mut<Node>(ec, el, lpos, tpos, er, rpos);
 2434|  3.75k|    }
_ZN5immer6detail4rbts30concat_trees_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10visit_nodeIRNS1_15regular_sub_posISC_EESH_RNS1_8leaf_posISC_EEEENS1_17concat_center_posISC_EEOT_NSA_5applyIS7_E4type4editESS_OT0_OT1_SS_:
 2432|  2.64k|    {
 2433|  2.64k|        return concat_inners_mut<Node>(ec, el, lpos, tpos, er, rpos);
 2434|  2.64k|    }

_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEENS1_11dec_visitorEJEEEDcPT_jmT0_DpOT1_:
 1838|   243k|{
 1839|   243k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 243k, False: 0]
  ------------------
 1840|   243k|    auto relaxed = node->relaxed();
 1841|   243k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 195k, False: 48.0k]
  ------------------
 1842|   195k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 195k, False: 0]
  ------------------
 1843|   195k|        return make_relaxed_pos(node, shift, relaxed)
 1844|   195k|            .visit(v, std::forward<Args>(args)...);
 1845|   195k|    } else {
 1846|  48.0k|        return make_regular_sub_pos(node, shift, size)
 1847|  48.0k|            .visit(v, std::forward<Args>(args)...);
 1848|  48.0k|    }
 1849|   243k|}
_ZN5immer6detail4rbts16make_relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEENS1_11relaxed_posIT_EEPSE_jPNSE_9relaxed_tE:
 1828|  11.7M|{
 1829|  11.7M|    assert(node);
  ------------------
  |  Branch (1829:5): [True: 11.7M, False: 0]
  ------------------
 1830|  11.7M|    assert(relaxed);
  ------------------
  |  Branch (1830:5): [True: 11.7M, False: 0]
  ------------------
 1831|  11.7M|    assert(shift >= NodeT::bits_leaf);
  ------------------
  |  Branch (1831:5): [True: 11.7M, False: 0]
  ------------------
 1832|  11.7M|    return {node, shift, relaxed};
 1833|  11.7M|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_11dec_visitorEJEEEDcT_DpOT0_:
 1813|   616k|    {
 1814|   616k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|   616k|    }
_ZNK5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE4nodeEv:
 1431|  7.53M|    node_t* node() const { return node_; }
_ZNK5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5countEv:
 1430|  10.3M|    count_t count() const { return relaxed_->d.count; }
_ZN5immer6detail4rbts20make_regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEENS1_15regular_sub_posIT_EEPSE_jm:
 1044|  2.22M|{
 1045|  2.22M|    assert(node);
  ------------------
  |  Branch (1045:5): [True: 2.22M, False: 0]
  ------------------
 1046|  2.22M|    assert(shift >= NodeT::bits_leaf);
  ------------------
  |  Branch (1046:5): [True: 2.22M, False: 0]
  ------------------
 1047|  2.22M|    assert(size > 0);
  ------------------
  |  Branch (1047:5): [True: 2.22M, False: 0]
  ------------------
 1048|  2.22M|    assert(size <= (branches<NodeT::bits, size_t> << shift));
  ------------------
  |  Branch (1048:5): [True: 2.22M, False: 0]
  ------------------
 1049|  2.22M|    return {node, shift, size};
 1050|  2.22M|}
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_11dec_visitorEJEEEDcT_DpOT0_:
 1036|  59.5k|    {
 1037|  59.5k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  59.5k|    }
_ZNK5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE4nodeEv:
  785|  4.25M|    node_t* node() const { return node_; }
_ZNK5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5shiftEv:
  787|  4.48M|    shift_t shift() const { return shift_; }
_ZN5immer6detail4rbts18make_full_leaf_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEENS1_13full_leaf_posIT_EEPSE_:
  214|   282k|{
  215|   282k|    assert(node);
  ------------------
  |  Branch (215:5): [True: 282k, False: 0]
  ------------------
  216|   282k|    return {node};
  217|   282k|}
_ZN5immer6detail4rbts13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_11dec_visitorEJEEEDcT_DpOT0_:
  207|  5.84k|    {
  208|  5.84k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  209|  5.84k|    }
_ZNK5immer6detail4rbts13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE4nodeEv:
  199|   197k|    node_t* node() const { return node_; }
_ZNK5immer6detail4rbts13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5countEv:
  198|   280k|    count_t count() const { return branches<BL>; }
_ZN5immer6detail4rbts13make_leaf_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEENS1_8leaf_posIT_EEPSE_m:
  119|   171k|{
  120|   171k|    assert(node);
  ------------------
  |  Branch (120:5): [True: 171k, False: 0]
  ------------------
  121|   171k|    assert(size > 0);
  ------------------
  |  Branch (121:5): [True: 171k, False: 0]
  ------------------
  122|   171k|    return {node, size};
  123|   171k|}
_ZNK5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE4sizeEv:
  786|  7.10M|    size_t size() const { return size_; }
_ZN5immer6detail4rbts8leaf_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_11dec_visitorEJEEEDcT_DpOT0_:
  112|  2.41k|    {
  113|  2.41k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  114|  2.41k|    }
_ZNK5immer6detail4rbts8leaf_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE4nodeEv:
  104|   174k|    node_t* node() const { return node_; }
_ZNK5immer6detail4rbts8leaf_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5countEv:
  103|   327k|    count_t count() const { return index(size_ - 1) + 1; }
_ZNK5immer6detail4rbts8leaf_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5indexEm:
  107|   338k|    count_t index(size_t idx) const { return idx & mask<BL>; }
_ZN5immer6detail4rbts13make_full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEENS1_8full_posIT_EEPSE_j:
 1412|   351k|{
 1413|   351k|    assert(node);
  ------------------
  |  Branch (1413:5): [True: 351k, False: 0]
  ------------------
 1414|   351k|    assert(shift >= NodeT::bits_leaf);
  ------------------
  |  Branch (1414:5): [True: 351k, False: 0]
  ------------------
 1415|   351k|    return {node, shift};
 1416|   351k|}
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_11dec_visitorEJEEEDcT_DpOT0_:
 1405|  8.77k|    {
 1406|  8.77k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1407|  8.77k|    }
_ZNK5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE4nodeEv:
 1159|   206k|    node_t* node() const { return node_; }
_ZNK5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5countEv:
 1158|   311k|    count_t count() const { return branches<B>; }
_ZN5immer6detail4rbts16make_regular_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEENS1_11regular_posIT_EEPSE_jm:
  690|  9.32M|{
  691|  9.32M|    assert(node);
  ------------------
  |  Branch (691:5): [True: 9.32M, False: 0]
  ------------------
  692|  9.32M|    assert(shift >= NodeT::bits_leaf);
  ------------------
  |  Branch (692:5): [True: 9.32M, False: 0]
  ------------------
  693|  9.32M|    assert(size > 0);
  ------------------
  |  Branch (693:5): [True: 9.32M, False: 0]
  ------------------
  694|  9.32M|    return {node, shift, size};
  695|  9.32M|}
_ZN5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_11dec_visitorEJEEEDcT_DpOT0_:
  336|  3.26k|    {
  337|  3.26k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
  338|  3.26k|    }
_ZNK5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE4nodeEv:
  231|  16.9M|    node_t* node() const { return node_; }
_ZNK5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5shiftEv:
  233|  16.9M|    shift_t shift() const { return shift_; }
_ZNK5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE4sizeEv:
  232|  35.5M|    size_t size() const { return size_; }
_ZNK5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5countEv:
  230|  7.61M|    count_t count() const { return index(size_ - 1) + 1; }
_ZNK5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5indexEm:
  234|  26.2M|    count_t index(size_t idx) const { return (idx >> shift_) & mask<B>; }
_ZNK5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5countEv:
  784|  2.85M|    count_t count() const { return subindex(size_ - 1) + 1; }
_ZNK5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE8subindexEm:
  789|  2.87M|    count_t subindex(size_t idx) const { return idx >> shift_; }
_ZN5immer6detail4rbts22make_empty_regular_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEENS1_17empty_regular_posIT_EEPSE_:
   64|   423k|{
   65|   423k|    return {node};
   66|   423k|}
_ZN5immer6detail4rbts17empty_regular_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_11dec_visitorEJEEEDcT_DpOT0_:
   57|   423k|    {
   58|   423k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
   59|   423k|    }
_ZNK5immer6detail4rbts17empty_regular_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE4nodeEv:
   41|   423k|    node_t* node() const { return node_; }
_ZN5immer6detail4rbts17make_leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEENS1_12leaf_sub_posIT_EEPSE_j:
  151|  2.70M|{
  152|  2.70M|    assert(node);
  ------------------
  |  Branch (152:5): [True: 2.70M, False: 0]
  ------------------
  153|  2.70M|    assert(count <= branches<NodeT::bits_leaf>);
  ------------------
  |  Branch (153:5): [True: 2.70M, False: 0]
  ------------------
  154|  2.70M|    return {node, count};
  155|  2.70M|}
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_11dec_visitorEJEEEDcT_DpOT0_:
  144|   494k|    {
  145|   494k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  146|   494k|    }
_ZNK5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE4nodeEv:
  136|  1.76M|    node_t* node() const { return node_; }
_ZNK5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5countEv:
  135|  2.21M|    count_t count() const { return count_; }
_ZN5immer6detail4rbts19make_empty_leaf_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEENS1_14empty_leaf_posIT_EEPSE_:
   88|   368k|{
   89|   368k|    assert(node);
  ------------------
  |  Branch (89:5): [True: 368k, False: 0]
  ------------------
   90|   368k|    return {node};
   91|   368k|}
_ZN5immer6detail4rbts14empty_leaf_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_11dec_visitorEJEEEDcT_DpOT0_:
   81|   368k|    {
   82|   368k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
   83|   368k|    }
_ZNK5immer6detail4rbts14empty_leaf_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE4nodeEv:
   75|   368k|    node_t* node() const { return node_; }
_ZNK5immer6detail4rbts14empty_leaf_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5countEv:
   74|  10.2k|    count_t count() const { return 0; }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_17push_tail_visitorISC_EEJRPSC_RjEEEDcT_DpOT0_:
 1813|  37.2k|    {
 1814|  37.2k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  37.2k|    }
_ZNK5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5shiftEv:
 1433|  3.45M|    shift_t shift() const { return shift_; }
_ZNK5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE4sizeEj:
 1443|  2.92M|    {
 1444|  2.92M|        return size_sbh(offset, size_before(offset));
 1445|  2.92M|    }
_ZNK5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE8size_sbhEjm:
 1448|  3.03M|    {
 1449|  3.03M|        assert(size_before_hint == size_before(offset));
  ------------------
  |  Branch (1449:9): [True: 3.03M, False: 0]
  ------------------
 1450|  3.03M|        return relaxed_->d.sizes[offset] - size_before_hint;
 1451|  3.03M|    }
_ZNK5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE11size_beforeEj:
 1438|  6.27M|    {
 1439|  6.27M|        return offset ? relaxed_->d.sizes[offset - 1] : 0;
  ------------------
  |  Branch (1439:16): [True: 5.04M, False: 1.22M]
  ------------------
 1440|  6.27M|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE11last_oh_cshINS1_17push_tail_visitorISC_EEJRPSC_RjEEEDcT_jmDpOT0_:
 1737|  33.9k|    {
 1738|  33.9k|        assert(offset_hint == count() - 1);
  ------------------
  |  Branch (1738:9): [True: 33.9k, False: 0]
  ------------------
 1739|  33.9k|        assert(child_size_hint == size(offset_hint));
  ------------------
  |  Branch (1739:9): [True: 33.9k, False: 0]
  ------------------
 1740|  33.9k|        auto child   = node_->inner()[offset_hint];
 1741|  33.9k|        auto is_leaf = shift_ == BL;
 1742|  33.9k|        return is_leaf
  ------------------
  |  Branch (1742:16): [True: 0, False: 33.9k]
  ------------------
 1743|  33.9k|                   ? make_leaf_sub_pos(child, child_size_hint).visit(v, args...)
 1744|  33.9k|                   : visit_maybe_relaxed_sub(
 1745|  33.9k|                         child, shift_ - B, child_size_hint, v, args...);
 1746|  33.9k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEENS1_17push_tail_visitorISC_EEJRPSC_RjEEEDcPT_jmT0_DpOT1_:
 1838|  33.9k|{
 1839|  33.9k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 33.9k, False: 0]
  ------------------
 1840|  33.9k|    auto relaxed = node->relaxed();
 1841|  33.9k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 26.9k, False: 6.99k]
  ------------------
 1842|  26.9k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 26.9k, False: 0]
  ------------------
 1843|  26.9k|        return make_relaxed_pos(node, shift, relaxed)
 1844|  26.9k|            .visit(v, std::forward<Args>(args)...);
 1845|  26.9k|    } else {
 1846|  6.99k|        return make_regular_sub_pos(node, shift, size)
 1847|  6.99k|            .visit(v, std::forward<Args>(args)...);
 1848|  6.99k|    }
 1849|  33.9k|}
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_17push_tail_visitorISC_EEJRPSC_RjEEEDcT_DpOT0_:
 1036|  6.99k|    {
 1037|  6.99k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  6.99k|    }
_ZNK5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5indexEm:
  788|  3.58M|    count_t index(size_t idx) const { return (idx >> shift_) & mask<B>; }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE7last_ohINS1_17push_tail_visitorISC_EEJRPSC_EEEDcT_jDpOT0_:
  952|  7.86k|    {
  953|  7.86k|        return last_oh_regular(*this, v, offset_hint, args...);
  954|  7.86k|    }
_ZN5immer6detail4rbts15last_oh_regularIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEENS1_17push_tail_visitorISD_EEJRPSD_EEEDcOT_T0_jDpOT1_:
  677|  7.86k|{
  678|  7.86k|    assert(offset_hint == p.count() - 1);
  ------------------
  |  Branch (678:5): [True: 7.86k, False: 0]
  ------------------
  679|  7.86k|    constexpr auto B  = bits<Pos>;
  680|  7.86k|    constexpr auto BL = bits_leaf<Pos>;
  681|  7.86k|    auto child        = p.node()->inner()[offset_hint];
  682|  7.86k|    auto is_leaf      = p.shift() == BL;
  683|  7.86k|    return is_leaf ? make_leaf_pos(child, p.size()).visit(v, args...)
  ------------------
  |  Branch (683:12): [True: 0, False: 7.86k]
  ------------------
  684|  7.86k|                   : make_regular_pos(child, p.shift() - B, p.size())
  685|  7.86k|                         .visit(v, args...);
  686|  7.86k|}
_ZN5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_17push_tail_visitorISC_EEJRPSC_EEEDcT_DpOT0_:
  336|  27.7k|    {
  337|  27.7k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
  338|  27.7k|    }
_ZN5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE7last_ohINS1_17push_tail_visitorISC_EEJRPSC_EEEDcT_jDpOT0_:
  330|  19.9k|    {
  331|  19.9k|        return last_oh_regular(*this, v, offset_hint, args...);
  332|  19.9k|    }
_ZN5immer6detail4rbts15last_oh_regularIRNS1_11regular_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEENS1_17push_tail_visitorISD_EEJRPSD_EEEDcOT_T0_jDpOT1_:
  677|  19.9k|{
  678|  19.9k|    assert(offset_hint == p.count() - 1);
  ------------------
  |  Branch (678:5): [True: 19.9k, False: 0]
  ------------------
  679|  19.9k|    constexpr auto B  = bits<Pos>;
  680|  19.9k|    constexpr auto BL = bits_leaf<Pos>;
  681|  19.9k|    auto child        = p.node()->inner()[offset_hint];
  682|  19.9k|    auto is_leaf      = p.shift() == BL;
  683|  19.9k|    return is_leaf ? make_leaf_pos(child, p.size()).visit(v, args...)
  ------------------
  |  Branch (683:12): [True: 0, False: 19.9k]
  ------------------
  684|  19.9k|                   : make_regular_pos(child, p.shift() - B, p.size())
  685|  19.9k|                         .visit(v, args...);
  686|  19.9k|}
_ZNK5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE4sizeEv:
 1432|  5.19M|    size_t size() const { return relaxed_->d.sizes[relaxed_->d.count - 1]; }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_17push_tail_visitorISC_EEJRPSC_EEEDcT_DpOT0_:
 1036|  4.11k|    {
 1037|  4.11k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  4.11k|    }
flex-vector-gc.cpp:_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_14update_visitorISC_EEJmRZZ22LLVMFuzzerTestOneInputENK3$_5clI12fuzzer_inputEEDaRT_EUlSK_E_EEEDcSK_DpOT0_:
  144|    538|    {
  145|    538|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  146|    538|    }
_ZNK5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5indexEm:
  139|  35.4k|    count_t index(size_t idx) const { return idx & mask<BL>; }
flex-vector-gc.cpp:_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEENS1_14update_visitorISC_EEJRmRZZ22LLVMFuzzerTestOneInputENK3$_5clI12fuzzer_inputEEDaRT_EUlSJ_E_EEEDcPSJ_jmT0_DpOT1_:
 1838|  30.1k|{
 1839|  30.1k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 30.1k, False: 0]
  ------------------
 1840|  30.1k|    auto relaxed = node->relaxed();
 1841|  30.1k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 28.0k, False: 2.17k]
  ------------------
 1842|  28.0k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 28.0k, False: 0]
  ------------------
 1843|  28.0k|        return make_relaxed_pos(node, shift, relaxed)
 1844|  28.0k|            .visit(v, std::forward<Args>(args)...);
 1845|  28.0k|    } else {
 1846|  2.17k|        return make_regular_sub_pos(node, shift, size)
 1847|  2.17k|            .visit(v, std::forward<Args>(args)...);
 1848|  2.17k|    }
 1849|  30.1k|}
flex-vector-gc.cpp:_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_14update_visitorISC_EEJRmRZZ22LLVMFuzzerTestOneInputENK3$_5clI12fuzzer_inputEEDaRT_EUlSL_E_EEEDcSL_DpOT0_:
 1813|  28.0k|    {
 1814|  28.0k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  28.0k|    }
_ZNK5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5indexEm:
 1454|   808k|    {
 1455|   808k|        auto offset = idx >> shift_;
 1456|   955k|        while (relaxed_->d.sizes[offset] <= idx)
  ------------------
  |  Branch (1456:16): [True: 147k, False: 808k]
  ------------------
 1457|   147k|            ++offset;
 1458|   808k|        return offset;
 1459|   808k|    }
_ZNK5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE7relaxedEv:
 1435|  28.0k|    relaxed_t* relaxed() const { return relaxed_; }
flex-vector-gc.cpp:_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10towards_ohINS1_14update_visitorISC_EEJRZZ22LLVMFuzzerTestOneInputENK3$_5clI12fuzzer_inputEEDaRT_EUlSK_E_EEEDcSK_mjDpOT0_:
 1686|  28.0k|    {
 1687|  28.0k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1687:9): [True: 28.0k, False: 0]
  ------------------
 1688|  28.0k|        auto left_size = offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0;
  ------------------
  |  Branch (1688:26): [True: 2.27k, False: 25.7k]
  ------------------
 1689|  28.0k|        return towards_oh_sbh(v, idx, offset_hint, left_size, args...);
 1690|  28.0k|    }
flex-vector-gc.cpp:_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE14towards_oh_sbhINS1_14update_visitorISC_EEJRZZ22LLVMFuzzerTestOneInputENK3$_5clI12fuzzer_inputEEDaRT_EUlSK_E_EEEDcSK_mjmDpOT0_:
 1698|  28.0k|    {
 1699|  28.0k|        return towards_sub_oh_sbh(v, idx, offset_hint, left_size_hint, args...);
 1700|  28.0k|    }
flex-vector-gc.cpp:_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE18towards_sub_oh_sbhINS1_14update_visitorISC_EEJRZZ22LLVMFuzzerTestOneInputENK3$_5clI12fuzzer_inputEEDaRT_EUlSK_E_EEEDcSK_mjmDpOT0_:
 1717|  28.0k|    {
 1718|  28.0k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1718:9): [True: 28.0k, False: 0]
  ------------------
 1719|  28.0k|        assert(left_size_hint ==
  ------------------
  |  Branch (1719:9): [True: 2.27k, False: 25.7k]
  |  Branch (1719:9): [True: 28.0k, False: 0]
  ------------------
 1720|  28.0k|               (offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0));
 1721|  28.0k|        auto child     = node_->inner()[offset_hint];
 1722|  28.0k|        auto is_leaf   = shift_ == BL;
 1723|  28.0k|        auto next_size = relaxed_->d.sizes[offset_hint] - left_size_hint;
 1724|  28.0k|        auto next_idx  = idx - left_size_hint;
 1725|  28.0k|        return is_leaf
  ------------------
  |  Branch (1725:16): [True: 3.23k, False: 24.7k]
  ------------------
 1726|  28.0k|                   ? make_leaf_sub_pos(child, next_size)
 1727|  3.23k|                         .visit(v, next_idx, args...)
 1728|  28.0k|                   : visit_maybe_relaxed_sub(
 1729|  24.7k|                         child, shift_ - B, next_size, v, next_idx, args...);
 1730|  28.0k|    }
flex-vector-gc.cpp:_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_14update_visitorISC_EEJRmRZZ22LLVMFuzzerTestOneInputENK3$_5clI12fuzzer_inputEEDaRT_EUlSL_E_EEEDcSL_DpOT0_:
  144|  3.23k|    {
  145|  3.23k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  146|  3.23k|    }
flex-vector-gc.cpp:_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_14update_visitorISC_EEJRmRZZ22LLVMFuzzerTestOneInputENK3$_5clI12fuzzer_inputEEDaRT_EUlSL_E_EEEDcSL_DpOT0_:
 1036|  2.17k|    {
 1037|  2.17k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  2.17k|    }
flex-vector-gc.cpp:_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE13towards_oh_chINS1_14update_visitorISC_EEJRZZ22LLVMFuzzerTestOneInputENK3$_5clI12fuzzer_inputEEDaRT_EUlSK_E_EEEDcSK_mjjDpOT0_:
  938|  2.17k|    {
  939|  2.17k|        return towards_oh_ch_regular(
  940|  2.17k|            *this, v, idx, offset_hint, count(), args...);
  941|  2.17k|    }
flex-vector-gc.cpp:_ZN5immer6detail4rbts21towards_oh_ch_regularIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEENS1_14update_visitorISD_EEJRZZ22LLVMFuzzerTestOneInputENK3$_5clI12fuzzer_inputEEDaRT_EUlSL_E_EEEDcOSL_T0_mjjDpOT1_:
  632|  2.17k|{
  633|  2.17k|    constexpr auto B  = bits<Pos>;
  634|  2.17k|    constexpr auto BL = bits_leaf<Pos>;
  635|  2.17k|    assert(offset_hint == p.index(idx));
  ------------------
  |  Branch (635:5): [True: 2.17k, False: 0]
  ------------------
  636|  2.17k|    assert(count_hint == p.count());
  ------------------
  |  Branch (636:5): [True: 2.17k, False: 0]
  ------------------
  637|  2.17k|    auto is_leaf = p.shift() == BL;
  638|  2.17k|    auto child   = p.node()->inner()[offset_hint];
  639|  2.17k|    auto is_full = offset_hint + 1 != count_hint;
  640|  2.17k|    return is_full
  ------------------
  |  Branch (640:12): [True: 895, False: 1.28k]
  ------------------
  641|  2.17k|               ? (is_leaf ? make_full_leaf_pos(child).visit(v, idx, args...)
  ------------------
  |  Branch (641:19): [True: 296, False: 599]
  ------------------
  642|    895|                          : make_full_pos(child, p.shift() - B)
  643|    599|                                .visit(v, idx, args...))
  644|  2.17k|               : (is_leaf
  ------------------
  |  Branch (644:19): [True: 514, False: 770]
  ------------------
  645|  1.28k|                      ? make_leaf_pos(child, p.size()).visit(v, idx, args...)
  646|  1.28k|                      : make_regular_pos(child, p.shift() - B, p.size())
  647|    770|                            .visit(v, idx, args...));
  648|  2.17k|}
flex-vector-gc.cpp:_ZN5immer6detail4rbts13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_14update_visitorISC_EEJRmRZZ22LLVMFuzzerTestOneInputENK3$_5clI12fuzzer_inputEEDaRT_EUlSL_E_EEEDcSL_DpOT0_:
  207|  1.33k|    {
  208|  1.33k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  209|  1.33k|    }
_ZNK5immer6detail4rbts13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5indexEm:
  202|  27.7k|    count_t index(size_t idx) const { return idx & mask<BL>; }
flex-vector-gc.cpp:_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_14update_visitorISC_EEJRmRZZ22LLVMFuzzerTestOneInputENK3$_5clI12fuzzer_inputEEDaRT_EUlSL_E_EEEDcSL_DpOT0_:
 1405|  1.34k|    {
 1406|  1.34k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1407|  1.34k|    }
_ZNK5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5indexEm:
 1162|  51.7k|    count_t index(size_t idx) const { return (idx >> shift_) & mask<B>; }
flex-vector-gc.cpp:_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE13towards_oh_chINS1_14update_visitorISC_EEJRZZ22LLVMFuzzerTestOneInputENK3$_5clI12fuzzer_inputEEDaRT_EUlSK_E_EEEDcSK_mjjDpOT0_:
 1329|  1.34k|    {
 1330|  1.34k|        return towards_oh(v, idx, offset_hint, args...);
 1331|  1.34k|    }
flex-vector-gc.cpp:_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10towards_ohINS1_14update_visitorISC_EEJRZZ22LLVMFuzzerTestOneInputENK3$_5clI12fuzzer_inputEEDaRT_EUlSK_E_EEEDcSK_mjDpOT0_:
 1336|  1.34k|    {
 1337|  1.34k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1337:9): [True: 1.34k, False: 0]
  ------------------
 1338|  1.34k|        auto is_leaf = shift_ == BL;
 1339|  1.34k|        auto child   = node_->inner()[offset_hint];
 1340|  1.34k|        return is_leaf
  ------------------
  |  Branch (1340:16): [True: 801, False: 548]
  ------------------
 1341|  1.34k|                   ? make_full_leaf_pos(child).visit(v, idx, args...)
 1342|  1.34k|                   : make_full_pos(child, shift_ - B).visit(v, idx, args...);
 1343|  1.34k|    }
flex-vector-gc.cpp:_ZN5immer6detail4rbts8leaf_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_14update_visitorISC_EEJRmRZZ22LLVMFuzzerTestOneInputENK3$_5clI12fuzzer_inputEEDaRT_EUlSL_E_EEEDcSL_DpOT0_:
  112|    846|    {
  113|    846|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  114|    846|    }
flex-vector-gc.cpp:_ZN5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_14update_visitorISC_EEJRmRZZ22LLVMFuzzerTestOneInputENK3$_5clI12fuzzer_inputEEDaRT_EUlSL_E_EEEDcSL_DpOT0_:
  336|  1.20k|    {
  337|  1.20k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
  338|  1.20k|    }
flex-vector-gc.cpp:_ZN5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE13towards_oh_chINS1_14update_visitorISC_EEJRZZ22LLVMFuzzerTestOneInputENK3$_5clI12fuzzer_inputEEDaRT_EUlSK_E_EEEDcSK_mjjDpOT0_:
  316|  1.20k|    {
  317|  1.20k|        return towards_oh_ch_regular(
  318|  1.20k|            *this, v, idx, offset_hint, count(), args...);
  319|  1.20k|    }
flex-vector-gc.cpp:_ZN5immer6detail4rbts21towards_oh_ch_regularIRNS1_11regular_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEENS1_14update_visitorISD_EEJRZZ22LLVMFuzzerTestOneInputENK3$_5clI12fuzzer_inputEEDaRT_EUlSL_E_EEEDcOSL_T0_mjjDpOT1_:
  632|  1.20k|{
  633|  1.20k|    constexpr auto B  = bits<Pos>;
  634|  1.20k|    constexpr auto BL = bits_leaf<Pos>;
  635|  1.20k|    assert(offset_hint == p.index(idx));
  ------------------
  |  Branch (635:5): [True: 1.20k, False: 0]
  ------------------
  636|  1.20k|    assert(count_hint == p.count());
  ------------------
  |  Branch (636:5): [True: 1.20k, False: 0]
  ------------------
  637|  1.20k|    auto is_leaf = p.shift() == BL;
  638|  1.20k|    auto child   = p.node()->inner()[offset_hint];
  639|  1.20k|    auto is_full = offset_hint + 1 != count_hint;
  640|  1.20k|    return is_full
  ------------------
  |  Branch (640:12): [True: 438, False: 762]
  ------------------
  641|  1.20k|               ? (is_leaf ? make_full_leaf_pos(child).visit(v, idx, args...)
  ------------------
  |  Branch (641:19): [True: 236, False: 202]
  ------------------
  642|    438|                          : make_full_pos(child, p.shift() - B)
  643|    202|                                .visit(v, idx, args...))
  644|  1.20k|               : (is_leaf
  ------------------
  |  Branch (644:19): [True: 332, False: 430]
  ------------------
  645|    762|                      ? make_leaf_pos(child, p.size()).visit(v, idx, args...)
  646|    762|                      : make_regular_pos(child, p.shift() - B, p.size())
  647|    430|                            .visit(v, idx, args...));
  648|  1.20k|}
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEENS1_19slice_right_visitorISC_Lb1EEEJRmEEEDcPT_jmT0_DpOT1_:
 1838|  22.3k|{
 1839|  22.3k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 22.3k, False: 0]
  ------------------
 1840|  22.3k|    auto relaxed = node->relaxed();
 1841|  22.3k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 16.7k, False: 5.66k]
  ------------------
 1842|  16.7k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 16.7k, False: 0]
  ------------------
 1843|  16.7k|        return make_relaxed_pos(node, shift, relaxed)
 1844|  16.7k|            .visit(v, std::forward<Args>(args)...);
 1845|  16.7k|    } else {
 1846|  5.66k|        return make_regular_sub_pos(node, shift, size)
 1847|  5.66k|            .visit(v, std::forward<Args>(args)...);
 1848|  5.66k|    }
 1849|  22.3k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_19slice_right_visitorISC_Lb1EEEJRmEEEDcT_DpOT0_:
 1813|  16.7k|    {
 1814|  16.7k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  16.7k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10towards_ohINS1_19slice_right_visitorISC_Lb1EEEJEEEDcT_mjDpOT0_:
 1686|  13.0k|    {
 1687|  13.0k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1687:9): [True: 13.0k, False: 0]
  ------------------
 1688|  13.0k|        auto left_size = offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0;
  ------------------
  |  Branch (1688:26): [True: 0, False: 13.0k]
  ------------------
 1689|  13.0k|        return towards_oh_sbh(v, idx, offset_hint, left_size, args...);
 1690|  13.0k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE14towards_oh_sbhINS1_19slice_right_visitorISC_Lb1EEEJEEEDcT_mjmDpOT0_:
 1698|  13.0k|    {
 1699|  13.0k|        return towards_sub_oh_sbh(v, idx, offset_hint, left_size_hint, args...);
 1700|  13.0k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE18towards_sub_oh_sbhINS1_19slice_right_visitorISC_Lb1EEEJEEEDcT_mjmDpOT0_:
 1717|  13.0k|    {
 1718|  13.0k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1718:9): [True: 13.0k, False: 0]
  ------------------
 1719|  13.0k|        assert(left_size_hint ==
  ------------------
  |  Branch (1719:9): [True: 0, False: 13.0k]
  |  Branch (1719:9): [True: 13.0k, False: 0]
  ------------------
 1720|  13.0k|               (offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0));
 1721|  13.0k|        auto child     = node_->inner()[offset_hint];
 1722|  13.0k|        auto is_leaf   = shift_ == BL;
 1723|  13.0k|        auto next_size = relaxed_->d.sizes[offset_hint] - left_size_hint;
 1724|  13.0k|        auto next_idx  = idx - left_size_hint;
 1725|  13.0k|        return is_leaf
  ------------------
  |  Branch (1725:16): [True: 906, False: 12.1k]
  ------------------
 1726|  13.0k|                   ? make_leaf_sub_pos(child, next_size)
 1727|    906|                         .visit(v, next_idx, args...)
 1728|  13.0k|                   : visit_maybe_relaxed_sub(
 1729|  12.1k|                         child, shift_ - B, next_size, v, next_idx, args...);
 1730|  13.0k|    }
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_19slice_right_visitorISC_Lb1EEEJRmEEEDcT_DpOT0_:
  144|    906|    {
  145|    906|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  146|    906|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10towards_ohINS1_19slice_right_visitorISC_Lb0EEEJEEEDcT_mjDpOT0_:
 1686|  7.91k|    {
 1687|  7.91k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1687:9): [True: 7.91k, False: 0]
  ------------------
 1688|  7.91k|        auto left_size = offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0;
  ------------------
  |  Branch (1688:26): [True: 5.58k, False: 2.33k]
  ------------------
 1689|  7.91k|        return towards_oh_sbh(v, idx, offset_hint, left_size, args...);
 1690|  7.91k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE14towards_oh_sbhINS1_19slice_right_visitorISC_Lb0EEEJEEEDcT_mjmDpOT0_:
 1698|  7.91k|    {
 1699|  7.91k|        return towards_sub_oh_sbh(v, idx, offset_hint, left_size_hint, args...);
 1700|  7.91k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE18towards_sub_oh_sbhINS1_19slice_right_visitorISC_Lb0EEEJEEEDcT_mjmDpOT0_:
 1717|  7.91k|    {
 1718|  7.91k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1718:9): [True: 7.91k, False: 0]
  ------------------
 1719|  7.91k|        assert(left_size_hint ==
  ------------------
  |  Branch (1719:9): [True: 5.58k, False: 2.33k]
  |  Branch (1719:9): [True: 7.91k, False: 0]
  ------------------
 1720|  7.91k|               (offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0));
 1721|  7.91k|        auto child     = node_->inner()[offset_hint];
 1722|  7.91k|        auto is_leaf   = shift_ == BL;
 1723|  7.91k|        auto next_size = relaxed_->d.sizes[offset_hint] - left_size_hint;
 1724|  7.91k|        auto next_idx  = idx - left_size_hint;
 1725|  7.91k|        return is_leaf
  ------------------
  |  Branch (1725:16): [True: 2.34k, False: 5.57k]
  ------------------
 1726|  7.91k|                   ? make_leaf_sub_pos(child, next_size)
 1727|  2.34k|                         .visit(v, next_idx, args...)
 1728|  7.91k|                   : visit_maybe_relaxed_sub(
 1729|  5.57k|                         child, shift_ - B, next_size, v, next_idx, args...);
 1730|  7.91k|    }
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_19slice_right_visitorISC_Lb0EEEJRmEEEDcT_DpOT0_:
  144|  2.34k|    {
  145|  2.34k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  146|  2.34k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEENS1_19slice_right_visitorISC_Lb0EEEJRmEEEDcPT_jmT0_DpOT1_:
 1838|  5.57k|{
 1839|  5.57k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 5.57k, False: 0]
  ------------------
 1840|  5.57k|    auto relaxed = node->relaxed();
 1841|  5.57k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 4.23k, False: 1.34k]
  ------------------
 1842|  4.23k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 4.23k, False: 0]
  ------------------
 1843|  4.23k|        return make_relaxed_pos(node, shift, relaxed)
 1844|  4.23k|            .visit(v, std::forward<Args>(args)...);
 1845|  4.23k|    } else {
 1846|  1.34k|        return make_regular_sub_pos(node, shift, size)
 1847|  1.34k|            .visit(v, std::forward<Args>(args)...);
 1848|  1.34k|    }
 1849|  5.57k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_19slice_right_visitorISC_Lb0EEEJRmEEEDcT_DpOT0_:
 1813|  4.23k|    {
 1814|  4.23k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  4.23k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_19slice_right_visitorISC_Lb0EEEJRmEEEDcT_DpOT0_:
 1036|  1.34k|    {
 1037|  1.34k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  1.34k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10towards_ohINS1_19slice_right_visitorISC_Lb0EEEJEEEDcT_mjDpOT0_:
  927|  3.88k|    {
  928|  3.88k|        return towards_oh_ch_regular(
  929|  3.88k|            *this, v, idx, offset_hint, count(), args...);
  930|  3.88k|    }
_ZN5immer6detail4rbts21towards_oh_ch_regularIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEENS1_19slice_right_visitorISD_Lb0EEEJEEEDcOT_T0_mjjDpOT1_:
  632|  3.88k|{
  633|  3.88k|    constexpr auto B  = bits<Pos>;
  634|  3.88k|    constexpr auto BL = bits_leaf<Pos>;
  635|  3.88k|    assert(offset_hint == p.index(idx));
  ------------------
  |  Branch (635:5): [True: 3.88k, False: 0]
  ------------------
  636|  3.88k|    assert(count_hint == p.count());
  ------------------
  |  Branch (636:5): [True: 3.88k, False: 0]
  ------------------
  637|  3.88k|    auto is_leaf = p.shift() == BL;
  638|  3.88k|    auto child   = p.node()->inner()[offset_hint];
  639|  3.88k|    auto is_full = offset_hint + 1 != count_hint;
  640|  3.88k|    return is_full
  ------------------
  |  Branch (640:12): [True: 1.24k, False: 2.64k]
  ------------------
  641|  3.88k|               ? (is_leaf ? make_full_leaf_pos(child).visit(v, idx, args...)
  ------------------
  |  Branch (641:19): [True: 469, False: 771]
  ------------------
  642|  1.24k|                          : make_full_pos(child, p.shift() - B)
  643|    771|                                .visit(v, idx, args...))
  644|  3.88k|               : (is_leaf
  ------------------
  |  Branch (644:19): [True: 867, False: 1.78k]
  ------------------
  645|  2.64k|                      ? make_leaf_pos(child, p.size()).visit(v, idx, args...)
  646|  2.64k|                      : make_regular_pos(child, p.shift() - B, p.size())
  647|  1.78k|                            .visit(v, idx, args...));
  648|  3.88k|}
_ZN5immer6detail4rbts13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_19slice_right_visitorISC_Lb0EEEJRmEEEDcT_DpOT0_:
  207|  3.22k|    {
  208|  3.22k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  209|  3.22k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_19slice_right_visitorISC_Lb0EEEJRmEEEDcT_DpOT0_:
 1405|  2.31k|    {
 1406|  2.31k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1407|  2.31k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10towards_ohINS1_19slice_right_visitorISC_Lb0EEEJEEEDcT_mjDpOT0_:
 1336|  3.63k|    {
 1337|  3.63k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1337:9): [True: 3.63k, False: 0]
  ------------------
 1338|  3.63k|        auto is_leaf = shift_ == BL;
 1339|  3.63k|        auto child   = node_->inner()[offset_hint];
 1340|  3.63k|        return is_leaf
  ------------------
  |  Branch (1340:16): [True: 2.29k, False: 1.33k]
  ------------------
 1341|  3.63k|                   ? make_full_leaf_pos(child).visit(v, idx, args...)
 1342|  3.63k|                   : make_full_pos(child, shift_ - B).visit(v, idx, args...);
 1343|  3.63k|    }
_ZNK5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5shiftEv:
 1161|  41.7k|    shift_t shift() const { return shift_; }
_ZN5immer6detail4rbts8leaf_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_19slice_right_visitorISC_Lb0EEEJRmEEEDcT_DpOT0_:
  112|  1.97k|    {
  113|  1.97k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  114|  1.97k|    }
_ZN5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_19slice_right_visitorISC_Lb0EEEJRmEEEDcT_DpOT0_:
  336|  2.59k|    {
  337|  2.59k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
  338|  2.59k|    }
_ZN5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10towards_ohINS1_19slice_right_visitorISC_Lb0EEEJEEEDcT_mjDpOT0_:
  305|  2.59k|    {
  306|  2.59k|        return towards_oh_ch_regular(
  307|  2.59k|            *this, v, idx, offset_hint, count(), args...);
  308|  2.59k|    }
_ZN5immer6detail4rbts21towards_oh_ch_regularIRNS1_11regular_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEENS1_19slice_right_visitorISD_Lb0EEEJEEEDcOT_T0_mjjDpOT1_:
  632|  2.59k|{
  633|  2.59k|    constexpr auto B  = bits<Pos>;
  634|  2.59k|    constexpr auto BL = bits_leaf<Pos>;
  635|  2.59k|    assert(offset_hint == p.index(idx));
  ------------------
  |  Branch (635:5): [True: 2.59k, False: 0]
  ------------------
  636|  2.59k|    assert(count_hint == p.count());
  ------------------
  |  Branch (636:5): [True: 2.59k, False: 0]
  ------------------
  637|  2.59k|    auto is_leaf = p.shift() == BL;
  638|  2.59k|    auto child   = p.node()->inner()[offset_hint];
  639|  2.59k|    auto is_full = offset_hint + 1 != count_hint;
  640|  2.59k|    return is_full
  ------------------
  |  Branch (640:12): [True: 673, False: 1.92k]
  ------------------
  641|  2.59k|               ? (is_leaf ? make_full_leaf_pos(child).visit(v, idx, args...)
  ------------------
  |  Branch (641:19): [True: 462, False: 211]
  ------------------
  642|    673|                          : make_full_pos(child, p.shift() - B)
  643|    211|                                .visit(v, idx, args...))
  644|  2.59k|               : (is_leaf
  ------------------
  |  Branch (644:19): [True: 1.10k, False: 814]
  ------------------
  645|  1.92k|                      ? make_leaf_pos(child, p.size()).visit(v, idx, args...)
  646|  1.92k|                      : make_regular_pos(child, p.shift() - B, p.size())
  647|    814|                            .visit(v, idx, args...));
  648|  2.59k|}
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_19slice_right_visitorISC_Lb1EEEJRmEEEDcT_DpOT0_:
 1036|  5.66k|    {
 1037|  5.66k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  5.66k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10towards_ohINS1_19slice_right_visitorISC_Lb1EEEJEEEDcT_mjDpOT0_:
  927|  3.11k|    {
  928|  3.11k|        return towards_oh_ch_regular(
  929|  3.11k|            *this, v, idx, offset_hint, count(), args...);
  930|  3.11k|    }
_ZN5immer6detail4rbts21towards_oh_ch_regularIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEENS1_19slice_right_visitorISD_Lb1EEEJEEEDcOT_T0_mjjDpOT1_:
  632|  3.11k|{
  633|  3.11k|    constexpr auto B  = bits<Pos>;
  634|  3.11k|    constexpr auto BL = bits_leaf<Pos>;
  635|  3.11k|    assert(offset_hint == p.index(idx));
  ------------------
  |  Branch (635:5): [True: 3.11k, False: 0]
  ------------------
  636|  3.11k|    assert(count_hint == p.count());
  ------------------
  |  Branch (636:5): [True: 3.11k, False: 0]
  ------------------
  637|  3.11k|    auto is_leaf = p.shift() == BL;
  638|  3.11k|    auto child   = p.node()->inner()[offset_hint];
  639|  3.11k|    auto is_full = offset_hint + 1 != count_hint;
  640|  3.11k|    return is_full
  ------------------
  |  Branch (640:12): [True: 2.59k, False: 522]
  ------------------
  641|  3.11k|               ? (is_leaf ? make_full_leaf_pos(child).visit(v, idx, args...)
  ------------------
  |  Branch (641:19): [True: 709, False: 1.88k]
  ------------------
  642|  2.59k|                          : make_full_pos(child, p.shift() - B)
  643|  1.88k|                                .visit(v, idx, args...))
  644|  3.11k|               : (is_leaf
  ------------------
  |  Branch (644:19): [True: 522, False: 0]
  ------------------
  645|    522|                      ? make_leaf_pos(child, p.size()).visit(v, idx, args...)
  646|    522|                      : make_regular_pos(child, p.shift() - B, p.size())
  647|      0|                            .visit(v, idx, args...));
  648|  3.11k|}
_ZN5immer6detail4rbts13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_19slice_right_visitorISC_Lb1EEEJRmEEEDcT_DpOT0_:
  207|  1.28k|    {
  208|  1.28k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  209|  1.28k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_19slice_right_visitorISC_Lb1EEEJRmEEEDcT_DpOT0_:
 1405|  2.39k|    {
 1406|  2.39k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1407|  2.39k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10towards_ohINS1_19slice_right_visitorISC_Lb1EEEJEEEDcT_mjDpOT0_:
 1336|  1.08k|    {
 1337|  1.08k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1337:9): [True: 1.08k, False: 0]
  ------------------
 1338|  1.08k|        auto is_leaf = shift_ == BL;
 1339|  1.08k|        auto child   = node_->inner()[offset_hint];
 1340|  1.08k|        return is_leaf
  ------------------
  |  Branch (1340:16): [True: 573, False: 512]
  ------------------
 1341|  1.08k|                   ? make_full_leaf_pos(child).visit(v, idx, args...)
 1342|  1.08k|                   : make_full_pos(child, shift_ - B).visit(v, idx, args...);
 1343|  1.08k|    }
_ZN5immer6detail4rbts8leaf_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_19slice_right_visitorISC_Lb1EEEJRmEEEDcT_DpOT0_:
  112|    522|    {
  113|    522|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  114|    522|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEENS1_18slice_left_visitorISC_Lb1EEEJRmEEEDcPT_jmT0_DpOT1_:
 1838|  16.6k|{
 1839|  16.6k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 16.6k, False: 0]
  ------------------
 1840|  16.6k|    auto relaxed = node->relaxed();
 1841|  16.6k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 14.1k, False: 2.55k]
  ------------------
 1842|  14.1k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 14.1k, False: 0]
  ------------------
 1843|  14.1k|        return make_relaxed_pos(node, shift, relaxed)
 1844|  14.1k|            .visit(v, std::forward<Args>(args)...);
 1845|  14.1k|    } else {
 1846|  2.55k|        return make_regular_sub_pos(node, shift, size)
 1847|  2.55k|            .visit(v, std::forward<Args>(args)...);
 1848|  2.55k|    }
 1849|  16.6k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_18slice_left_visitorISC_Lb1EEEJRmEEEDcT_DpOT0_:
 1813|  14.1k|    {
 1814|  14.1k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  14.1k|    }
_ZNK5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE8subindexEm:
 1434|   106k|    count_t subindex(size_t idx) const { return index(idx); }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE14towards_sub_ohINS1_18slice_left_visitorISC_Lb1EEEJEEEDcT_mjDpOT0_:
 1705|  1.37k|    {
 1706|  1.37k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1706:9): [True: 1.37k, False: 0]
  ------------------
 1707|  1.37k|        auto left_size = offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0;
  ------------------
  |  Branch (1707:26): [True: 877, False: 493]
  ------------------
 1708|  1.37k|        return towards_sub_oh_sbh(v, idx, offset_hint, left_size, args...);
 1709|  1.37k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE18towards_sub_oh_sbhINS1_18slice_left_visitorISC_Lb1EEEJEEEDcT_mjmDpOT0_:
 1717|  1.37k|    {
 1718|  1.37k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1718:9): [True: 1.37k, False: 0]
  ------------------
 1719|  1.37k|        assert(left_size_hint ==
  ------------------
  |  Branch (1719:9): [True: 877, False: 493]
  |  Branch (1719:9): [True: 1.37k, False: 0]
  ------------------
 1720|  1.37k|               (offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0));
 1721|  1.37k|        auto child     = node_->inner()[offset_hint];
 1722|  1.37k|        auto is_leaf   = shift_ == BL;
 1723|  1.37k|        auto next_size = relaxed_->d.sizes[offset_hint] - left_size_hint;
 1724|  1.37k|        auto next_idx  = idx - left_size_hint;
 1725|  1.37k|        return is_leaf
  ------------------
  |  Branch (1725:16): [True: 0, False: 1.37k]
  ------------------
 1726|  1.37k|                   ? make_leaf_sub_pos(child, next_size)
 1727|      0|                         .visit(v, next_idx, args...)
 1728|  1.37k|                   : visit_maybe_relaxed_sub(
 1729|  1.37k|                         child, shift_ - B, next_size, v, next_idx, args...);
 1730|  1.37k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE14towards_sub_ohINS1_18slice_left_visitorISC_Lb0EEEJEEEDcT_mjDpOT0_:
 1705|   104k|    {
 1706|   104k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1706:9): [True: 104k, False: 0]
  ------------------
 1707|   104k|        auto left_size = offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0;
  ------------------
  |  Branch (1707:26): [True: 19.7k, False: 85.1k]
  ------------------
 1708|   104k|        return towards_sub_oh_sbh(v, idx, offset_hint, left_size, args...);
 1709|   104k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE18towards_sub_oh_sbhINS1_18slice_left_visitorISC_Lb0EEEJEEEDcT_mjmDpOT0_:
 1717|   104k|    {
 1718|   104k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1718:9): [True: 104k, False: 0]
  ------------------
 1719|   104k|        assert(left_size_hint ==
  ------------------
  |  Branch (1719:9): [True: 19.7k, False: 85.1k]
  |  Branch (1719:9): [True: 104k, False: 0]
  ------------------
 1720|   104k|               (offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0));
 1721|   104k|        auto child     = node_->inner()[offset_hint];
 1722|   104k|        auto is_leaf   = shift_ == BL;
 1723|   104k|        auto next_size = relaxed_->d.sizes[offset_hint] - left_size_hint;
 1724|   104k|        auto next_idx  = idx - left_size_hint;
 1725|   104k|        return is_leaf
  ------------------
  |  Branch (1725:16): [True: 11.3k, False: 93.5k]
  ------------------
 1726|   104k|                   ? make_leaf_sub_pos(child, next_size)
 1727|  11.3k|                         .visit(v, next_idx, args...)
 1728|   104k|                   : visit_maybe_relaxed_sub(
 1729|  93.5k|                         child, shift_ - B, next_size, v, next_idx, args...);
 1730|   104k|    }
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_18slice_left_visitorISC_Lb0EEEJRmEEEDcT_DpOT0_:
  144|  11.3k|    {
  145|  11.3k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  146|  11.3k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEENS1_18slice_left_visitorISC_Lb0EEEJRmEEEDcPT_jmT0_DpOT1_:
 1838|  93.5k|{
 1839|  93.5k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 93.5k, False: 0]
  ------------------
 1840|  93.5k|    auto relaxed = node->relaxed();
 1841|  93.5k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 92.1k, False: 1.40k]
  ------------------
 1842|  92.1k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 92.1k, False: 0]
  ------------------
 1843|  92.1k|        return make_relaxed_pos(node, shift, relaxed)
 1844|  92.1k|            .visit(v, std::forward<Args>(args)...);
 1845|  92.1k|    } else {
 1846|  1.40k|        return make_regular_sub_pos(node, shift, size)
 1847|  1.40k|            .visit(v, std::forward<Args>(args)...);
 1848|  1.40k|    }
 1849|  93.5k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_18slice_left_visitorISC_Lb0EEEJRmEEEDcT_DpOT0_:
 1813|  92.1k|    {
 1814|  92.1k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  92.1k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_18slice_left_visitorISC_Lb0EEEJRmEEEDcT_DpOT0_:
 1036|  1.40k|    {
 1037|  1.40k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  1.40k|    }
_ZNK5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE11size_beforeEj:
  791|  12.6k|    {
  792|  12.6k|        return size_t{offset} << shift_;
  793|  12.6k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE8size_sbhEjm:
  803|  4.31k|    {
  804|  4.31k|        assert(size_before_hint == size_before(offset));
  ------------------
  |  Branch (804:9): [True: 4.31k, False: 0]
  ------------------
  805|  4.31k|        return offset == subindex(size_ - 1) ? size_ - size_before_hint
  ------------------
  |  Branch (805:16): [True: 2.22k, False: 2.09k]
  ------------------
  806|  4.31k|                                             : size_t{1} << shift_;
  807|  4.31k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE14towards_sub_ohINS1_18slice_left_visitorISC_Lb0EEEJEEEDcT_mjDpOT0_:
  946|  2.99k|    {
  947|  2.99k|        return towards_sub_oh_regular(*this, v, idx, offset_hint, args...);
  948|  2.99k|    }
_ZN5immer6detail4rbts22towards_sub_oh_regularIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEENS1_18slice_left_visitorISD_Lb0EEEJEEEDcOT_T0_mjDpOT1_:
  653|  2.99k|{
  654|  2.99k|    constexpr auto B  = bits<Pos>;
  655|  2.99k|    constexpr auto BL = bits_leaf<Pos>;
  656|  2.99k|    assert(offset_hint == p.index(idx));
  ------------------
  |  Branch (656:5): [True: 2.99k, False: 0]
  ------------------
  657|  2.99k|    auto is_leaf = p.shift() == BL;
  658|  2.99k|    auto child   = p.node()->inner()[offset_hint];
  659|  2.99k|    auto lsize   = offset_hint << p.shift();
  660|  2.99k|    auto size    = p.this_size();
  661|  2.99k|    auto is_full = (size - lsize) >= (size_t{1} << p.shift());
  662|  2.99k|    return is_full
  ------------------
  |  Branch (662:12): [True: 2.99k, False: 0]
  ------------------
  663|  2.99k|               ? (is_leaf
  ------------------
  |  Branch (663:19): [True: 1.88k, False: 1.11k]
  ------------------
  664|  2.99k|                      ? make_full_leaf_pos(child).visit(v, idx - lsize, args...)
  665|  2.99k|                      : make_full_pos(child, p.shift() - B)
  666|  1.11k|                            .visit(v, idx - lsize, args...))
  667|  2.99k|               : (is_leaf
  ------------------
  |  Branch (667:19): [True: 0, False: 0]
  ------------------
  668|      0|                      ? make_leaf_sub_pos(child, size - lsize)
  669|      0|                            .visit(v, idx - lsize, args...)
  670|      0|                      : make_regular_sub_pos(child, p.shift() - B, size - lsize)
  671|      0|                            .visit(v, idx - lsize, args...));
  672|  2.99k|}
_ZNK5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE9this_sizeEv:
  794|  4.31k|    size_t this_size() const { return size_; }
_ZN5immer6detail4rbts13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_18slice_left_visitorISC_Lb0EEEJmEEEDcT_DpOT0_:
  207|  3.95k|    {
  208|  3.95k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  209|  3.95k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_18slice_left_visitorISC_Lb0EEEJmEEEDcT_DpOT0_:
 1405|  2.39k|    {
 1406|  2.39k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1407|  2.39k|    }
_ZNK5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE8subindexEm:
 1163|  3.61k|    count_t subindex(size_t idx) const { return idx >> shift_; }
_ZNK5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE11size_beforeEj:
 1170|  3.61k|    {
 1171|  3.61k|        return size_t{offset} << shift_;
 1172|  3.61k|    }
_ZNK5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE8size_sbhEjm:
 1166|  3.61k|    {
 1167|  3.61k|        return size_t{1} << shift_;
 1168|  3.61k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE14towards_sub_ohINS1_18slice_left_visitorISC_Lb0EEEJEEEDcT_mjDpOT0_:
 1348|  3.35k|    {
 1349|  3.35k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1349:9): [True: 3.35k, False: 0]
  ------------------
 1350|  3.35k|        auto is_leaf = shift_ == BL;
 1351|  3.35k|        auto child   = node_->inner()[offset_hint];
 1352|  3.35k|        auto lsize   = size_t{offset_hint} << shift_;
 1353|  3.35k|        return is_leaf
  ------------------
  |  Branch (1353:16): [True: 2.07k, False: 1.27k]
  ------------------
 1354|  3.35k|                   ? make_full_leaf_pos(child).visit(v, idx - lsize, args...)
 1355|  3.35k|                   : make_full_pos(child, shift_ - B)
 1356|  1.27k|                         .visit(v, idx - lsize, args...);
 1357|  3.35k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10copy_sizesEjjmPm:
 1175|  3.35k|    {
 1176|  3.35k|        auto e = sizes + n;
 1177|  9.14k|        for (; sizes != e; ++sizes) {
  ------------------
  |  Branch (1177:16): [True: 5.78k, False: 3.35k]
  ------------------
 1178|  5.78k|            init = *sizes = init + (size_t{1} << shift_);
 1179|       |            assert(init);
  ------------------
  |  Branch (1179:13): [True: 5.78k, False: 0]
  ------------------
 1180|  5.78k|        }
 1181|  3.35k|    }
_ZNK5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE4sizeEv:
 1160|   153k|    size_t size() const { return branches<B, size_t> << shift_; }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10copy_sizesEjjmPm:
  810|  6.75k|    {
  811|  6.75k|        if (n) {
  ------------------
  |  Branch (811:13): [True: 5.85k, False: 899]
  ------------------
  812|  5.85k|            auto last = offset + n - 1;
  813|  5.85k|            auto e    = sizes + n - 1;
  814|  11.6k|            for (; sizes != e; ++sizes) {
  ------------------
  |  Branch (814:20): [True: 5.75k, False: 5.85k]
  ------------------
  815|  5.75k|                init = *sizes = init + (size_t{1} << shift_);
  816|  5.75k|                assert(init);
  ------------------
  |  Branch (816:17): [True: 5.75k, False: 0]
  ------------------
  817|  5.75k|            }
  818|  5.85k|            *sizes = init + size(last);
  819|       |            assert(*sizes);
  ------------------
  |  Branch (819:13): [True: 5.85k, False: 0]
  ------------------
  820|  5.85k|        }
  821|  6.75k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE4sizeEj:
  797|  5.85k|    {
  798|  5.85k|        return offset == subindex(size_ - 1) ? size_ - size_before(offset)
  ------------------
  |  Branch (798:16): [True: 3.97k, False: 1.88k]
  ------------------
  799|  5.85k|                                             : size_t{1} << shift_;
  800|  5.85k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10copy_sizesEjjmPm:
 1462|   208k|    {
 1463|   208k|        auto e     = sizes + n;
 1464|   208k|        auto prev  = size_before(offset);
 1465|   208k|        auto these = relaxed_->d.sizes + offset;
 1466|   569k|        for (; sizes != e; ++sizes, ++these) {
  ------------------
  |  Branch (1466:16): [True: 361k, False: 208k]
  ------------------
 1467|   361k|            auto this_size = *these;
 1468|   361k|            init = *sizes = init + (this_size - prev);
 1469|   361k|            assert(init);
  ------------------
  |  Branch (1469:13): [True: 361k, False: 0]
  ------------------
 1470|   361k|            prev = this_size;
 1471|   361k|        }
 1472|   208k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_18slice_left_visitorISC_Lb1EEEJRmEEEDcT_DpOT0_:
 1036|  2.55k|    {
 1037|  2.55k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  2.55k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE14towards_sub_ohINS1_18slice_left_visitorISC_Lb1EEEJEEEDcT_mjDpOT0_:
  946|  1.32k|    {
  947|  1.32k|        return towards_sub_oh_regular(*this, v, idx, offset_hint, args...);
  948|  1.32k|    }
_ZN5immer6detail4rbts22towards_sub_oh_regularIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEENS1_18slice_left_visitorISD_Lb1EEEJEEEDcOT_T0_mjDpOT1_:
  653|  1.32k|{
  654|  1.32k|    constexpr auto B  = bits<Pos>;
  655|  1.32k|    constexpr auto BL = bits_leaf<Pos>;
  656|  1.32k|    assert(offset_hint == p.index(idx));
  ------------------
  |  Branch (656:5): [True: 1.32k, False: 0]
  ------------------
  657|  1.32k|    auto is_leaf = p.shift() == BL;
  658|  1.32k|    auto child   = p.node()->inner()[offset_hint];
  659|  1.32k|    auto lsize   = offset_hint << p.shift();
  660|  1.32k|    auto size    = p.this_size();
  661|  1.32k|    auto is_full = (size - lsize) >= (size_t{1} << p.shift());
  662|  1.32k|    return is_full
  ------------------
  |  Branch (662:12): [True: 963, False: 358]
  ------------------
  663|  1.32k|               ? (is_leaf
  ------------------
  |  Branch (663:19): [True: 0, False: 963]
  ------------------
  664|    963|                      ? make_full_leaf_pos(child).visit(v, idx - lsize, args...)
  665|    963|                      : make_full_pos(child, p.shift() - B)
  666|    963|                            .visit(v, idx - lsize, args...))
  667|  1.32k|               : (is_leaf
  ------------------
  |  Branch (667:19): [True: 0, False: 358]
  ------------------
  668|    358|                      ? make_leaf_sub_pos(child, size - lsize)
  669|      0|                            .visit(v, idx - lsize, args...)
  670|    358|                      : make_regular_sub_pos(child, p.shift() - B, size - lsize)
  671|    358|                            .visit(v, idx - lsize, args...));
  672|  1.32k|}
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_18slice_left_visitorISC_Lb1EEEJmEEEDcT_DpOT0_:
 1405|  1.22k|    {
 1406|  1.22k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1407|  1.22k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE14towards_sub_ohINS1_18slice_left_visitorISC_Lb1EEEJEEEDcT_mjDpOT0_:
 1348|    262|    {
 1349|    262|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1349:9): [True: 262, False: 0]
  ------------------
 1350|    262|        auto is_leaf = shift_ == BL;
 1351|    262|        auto child   = node_->inner()[offset_hint];
 1352|    262|        auto lsize   = size_t{offset_hint} << shift_;
 1353|    262|        return is_leaf
  ------------------
  |  Branch (1353:16): [True: 0, False: 262]
  ------------------
 1354|    262|                   ? make_full_leaf_pos(child).visit(v, idx - lsize, args...)
 1355|    262|                   : make_full_pos(child, shift_ - B)
 1356|    262|                         .visit(v, idx - lsize, args...);
 1357|    262|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_18slice_left_visitorISC_Lb1EEEJmEEEDcT_DpOT0_:
 1036|    358|    {
 1037|    358|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|    358|    }
_ZN5immer6detail4rbts30make_singleton_regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEDaPT_j:
  766|  10.2k|{
  767|  10.2k|    assert(leaf);
  ------------------
  |  Branch (767:5): [True: 10.2k, False: 0]
  ------------------
  768|  10.2k|    IMMER_ASSERT_TAGGED(leaf->kind() == NodeT::kind_t::leaf);
  ------------------
  |  |   68|  10.2k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (768:5): [True: 10.2k, False: 0]
  ------------------
  769|  10.2k|    assert(count > 0);
  ------------------
  |  Branch (769:5): [True: 10.2k, False: 0]
  ------------------
  770|  10.2k|    return singleton_regular_sub_pos<NodeT>{leaf, count};
  771|  10.2k|}
_ZN5immer6detail4rbts25singleton_regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_25concat_trees_left_visitorISC_EEJNS1_14empty_leaf_posISC_EERPSC_RjRmEEEDcT_DpOT0_:
  759|  3.05k|    {
  760|  3.05k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
  761|  3.05k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEENS1_26concat_trees_right_visitorISC_EEJRNS1_25singleton_regular_sub_posISC_EERNS1_14empty_leaf_posISC_EEEEEDcPT_jmT0_DpOT1_:
 1838|  3.05k|{
 1839|  3.05k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 3.05k, False: 0]
  ------------------
 1840|  3.05k|    auto relaxed = node->relaxed();
 1841|  3.05k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 1.73k, False: 1.31k]
  ------------------
 1842|  1.73k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 1.73k, False: 0]
  ------------------
 1843|  1.73k|        return make_relaxed_pos(node, shift, relaxed)
 1844|  1.73k|            .visit(v, std::forward<Args>(args)...);
 1845|  1.73k|    } else {
 1846|  1.31k|        return make_regular_sub_pos(node, shift, size)
 1847|  1.31k|            .visit(v, std::forward<Args>(args)...);
 1848|  1.31k|    }
 1849|  3.05k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_26concat_trees_right_visitorISC_EEJRNS1_25singleton_regular_sub_posISC_EERNS1_14empty_leaf_posISC_EEEEEDcT_DpOT0_:
 1813|  1.73k|    {
 1814|  1.73k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  1.73k|    }
_ZNK5immer6detail4rbts25singleton_regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5shiftEv:
  735|  32.3k|    shift_t shift() const { return BL; }
_ZN5immer6detail4rbts25singleton_regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE13each_left_subINS1_34concat_rebalance_plan_fill_visitorEJRNS1_21concat_rebalance_planILj2ELj2EEEEEEvT_DpOT0_:
  744|  10.2k|    {
  745|  10.2k|    }
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_34concat_rebalance_plan_fill_visitorEJRNS1_21concat_rebalance_planILj2ELj2EEEEEEDcT_DpOT0_:
  144|   952k|    {
  145|   952k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  146|   952k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_34concat_rebalance_plan_fill_visitorEJRNS1_21concat_rebalance_planILj2ELj2EEEEEEDcT_DpOT0_:
 1813|  4.14M|    {
 1814|  4.14M|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  4.14M|    }
_ZN5immer6detail4rbts12null_sub_pos14each_right_subINS1_34concat_rebalance_plan_fill_visitorEJRNS1_21concat_rebalance_planILj2ELj2EEEEEEvT_DpOT0_:
  707|   553k|    {
  708|   553k|    }
_ZN5immer6detail4rbts25singleton_regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE13each_left_subINS1_21concat_merger_visitorEJRNS1_13concat_mergerISC_EEEEEvT_DpOT0_:
  744|  3.05k|    {
  745|  3.05k|    }
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_21concat_merger_visitorEJRNS1_13concat_mergerISC_EEEEEDcT_DpOT0_:
  144|   333k|    {
  145|   333k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  146|   333k|    }
_ZNK5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE4sizeEv:
  137|   952k|    size_t size() const { return count_; }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_21concat_merger_visitorEJRNS1_13concat_mergerISC_EEEEEDcT_DpOT0_:
 1813|  1.33M|    {
 1814|  1.33M|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  1.33M|    }
_ZN5immer6detail4rbts12null_sub_pos14each_right_subINS1_21concat_merger_visitorEJRNS1_13concat_mergerINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEEEEvT_DpOT0_:
  707|  7.10k|    {
  708|  7.10k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE9first_subINS1_20concat_right_visitorISC_EEJRNS1_25singleton_regular_sub_posISC_EERNS1_14empty_leaf_posISC_EEEEEDcT_DpOT0_:
 1762|  5.34k|    {
 1763|  5.34k|        auto child      = node_->inner()[0];
 1764|  5.34k|        auto child_size = relaxed_->d.sizes[0];
 1765|  5.34k|        auto is_leaf    = shift_ == BL;
 1766|  5.34k|        assert(child_size);
  ------------------
  |  Branch (1766:9): [True: 5.34k, False: 0]
  ------------------
 1767|  5.34k|        return is_leaf ? make_leaf_sub_pos(child, child_size).visit(v, args...)
  ------------------
  |  Branch (1767:16): [True: 0, False: 5.34k]
  ------------------
 1768|  5.34k|                       : visit_maybe_relaxed_sub(
 1769|  5.34k|                             child, shift_ - B, child_size, v, args...);
 1770|  5.34k|    }
_ZNK5immer6detail4rbts14empty_leaf_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5shiftEv:
   76|  10.2k|    shift_t shift() const { return 0; }
_ZNK5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5shiftEv:
  138|   616k|    shift_t shift() const { return 0; }
_ZNK5immer6detail4rbts25singleton_regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE4nodeEv:
  733|  7.18k|    node_t* node() const { return nullptr; }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEENS1_20concat_right_visitorISC_EEJRNS1_25singleton_regular_sub_posISC_EERNS1_14empty_leaf_posISC_EEEEEDcPT_jmT0_DpOT1_:
 1838|  5.34k|{
 1839|  5.34k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 5.34k, False: 0]
  ------------------
 1840|  5.34k|    auto relaxed = node->relaxed();
 1841|  5.34k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 5.14k, False: 202]
  ------------------
 1842|  5.14k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 5.14k, False: 0]
  ------------------
 1843|  5.14k|        return make_relaxed_pos(node, shift, relaxed)
 1844|  5.14k|            .visit(v, std::forward<Args>(args)...);
 1845|  5.14k|    } else {
 1846|    202|        return make_regular_sub_pos(node, shift, size)
 1847|    202|            .visit(v, std::forward<Args>(args)...);
 1848|    202|    }
 1849|  5.34k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_20concat_right_visitorISC_EEJRNS1_25singleton_regular_sub_posISC_EERNS1_14empty_leaf_posISC_EEEEEDcT_DpOT0_:
 1813|  5.14k|    {
 1814|  5.14k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  5.14k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_20concat_right_visitorISC_EEJRNS1_25singleton_regular_sub_posISC_EERNS1_14empty_leaf_posISC_EEEEEDcT_DpOT0_:
 1036|    202|    {
 1037|    202|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|    202|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE9first_subINS1_20concat_right_visitorISC_EEJRNS1_25singleton_regular_sub_posISC_EERNS1_14empty_leaf_posISC_EEEEEDcT_DpOT0_:
  970|    611|    {
  971|    611|        auto is_leaf = shift_ == BL;
  972|    611|        auto child   = node_->inner()[0];
  973|    611|        auto is_full = size_ >= (size_t{1} << shift_);
  974|    611|        return is_full
  ------------------
  |  Branch (974:16): [True: 611, False: 0]
  ------------------
  975|    611|                   ? (is_leaf
  ------------------
  |  Branch (975:23): [True: 0, False: 611]
  ------------------
  976|    611|                          ? make_full_leaf_pos(child).visit(v, args...)
  977|    611|                          : make_full_pos(child, shift_ - B).visit(v, args...))
  978|    611|                   : (is_leaf
  ------------------
  |  Branch (978:23): [True: 0, False: 0]
  ------------------
  979|      0|                          ? make_leaf_sub_pos(child, size_).visit(v, args...)
  980|      0|                          : make_regular_sub_pos(child, shift_ - B, size_)
  981|      0|                                .visit(v, args...));
  982|    611|    }
_ZNK5immer6detail4rbts13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5shiftEv:
  201|  56.9k|    shift_t shift() const { return 0; }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_20concat_right_visitorISC_EEJRNS1_25singleton_regular_sub_posISC_EERNS1_14empty_leaf_posISC_EEEEEDcT_DpOT0_:
 1405|  1.11k|    {
 1406|  1.11k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1407|  1.11k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE9first_subINS1_20concat_right_visitorISC_EEJRNS1_25singleton_regular_sub_posISC_EERNS1_14empty_leaf_posISC_EEEEEDcT_DpOT0_:
 1361|    502|    {
 1362|    502|        auto is_leaf = shift_ == BL;
 1363|    502|        auto child   = node_->inner()[0];
 1364|    502|        return is_leaf ? make_full_leaf_pos(child).visit(v, args...)
  ------------------
  |  Branch (1364:16): [True: 0, False: 502]
  ------------------
 1365|    502|                       : make_full_pos(child, shift_ - B).visit(v, args...);
 1366|    502|    }
_ZN5immer6detail4rbts12null_sub_pos13each_left_subINS1_34concat_rebalance_plan_fill_visitorEJRNS1_21concat_rebalance_planILj2ELj2EEEEEEvT_DpOT0_:
  711|  85.9k|    {
  712|  85.9k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE14each_right_subINS1_34concat_rebalance_plan_fill_visitorEJRNS1_21concat_rebalance_planILj2ELj2EEEEEEvT_DpOT0_:
 1304|  21.6k|    {
 1305|  21.6k|        each_i(v, 1, branches<B>, args...);
 1306|  21.6k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE6each_iINS1_34concat_rebalance_plan_fill_visitorEJRNS1_21concat_rebalance_planILj2ELj2EEEEEEvT_jjDpOT0_:
 1263|  21.6k|    {
 1264|  21.6k|        auto p = node_->inner() + i;
 1265|  21.6k|        auto e = node_->inner() + n;
 1266|  21.6k|        if (shift_ == BL) {
  ------------------
  |  Branch (1266:13): [True: 11.9k, False: 9.70k]
  ------------------
 1267|  47.6k|            for (; p != e; ++p) {
  ------------------
  |  Branch (1267:20): [True: 35.7k, False: 11.9k]
  ------------------
 1268|  35.7k|                IMMER_PREFETCH(p + 1);
 1269|  35.7k|                make_full_leaf_pos(*p).visit(v, args...);
 1270|  35.7k|            }
 1271|  11.9k|        } else {
 1272|  9.70k|            auto ss = shift_ - B;
 1273|  38.8k|            for (; p != e; ++p)
  ------------------
  |  Branch (1273:20): [True: 29.1k, False: 9.70k]
  ------------------
 1274|  29.1k|                make_full_pos(*p, ss).visit(v, args...);
 1275|  9.70k|        }
 1276|  21.6k|    }
_ZN5immer6detail4rbts13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_34concat_rebalance_plan_fill_visitorEJRNS1_21concat_rebalance_planILj2ELj2EEEEEEDcT_DpOT0_:
  207|  98.3k|    {
  208|  98.3k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  209|  98.3k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_34concat_rebalance_plan_fill_visitorEJRNS1_21concat_rebalance_planILj2ELj2EEEEEEDcT_DpOT0_:
 1405|   150k|    {
 1406|   150k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1407|   150k|    }
_ZN5immer6detail4rbts12null_sub_pos13each_left_subINS1_21concat_merger_visitorEJRNS1_13concat_mergerINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEEEEvT_DpOT0_:
  711|  12.3k|    {
  712|  12.3k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE14each_right_subINS1_21concat_merger_visitorEJRNS1_13concat_mergerISC_EEEEEvT_DpOT0_:
 1304|  7.80k|    {
 1305|  7.80k|        each_i(v, 1, branches<B>, args...);
 1306|  7.80k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE6each_iINS1_21concat_merger_visitorEJRNS1_13concat_mergerISC_EEEEEvT_jjDpOT0_:
 1263|  7.80k|    {
 1264|  7.80k|        auto p = node_->inner() + i;
 1265|  7.80k|        auto e = node_->inner() + n;
 1266|  7.80k|        if (shift_ == BL) {
  ------------------
  |  Branch (1266:13): [True: 4.31k, False: 3.48k]
  ------------------
 1267|  17.2k|            for (; p != e; ++p) {
  ------------------
  |  Branch (1267:20): [True: 12.9k, False: 4.31k]
  ------------------
 1268|  12.9k|                IMMER_PREFETCH(p + 1);
 1269|  12.9k|                make_full_leaf_pos(*p).visit(v, args...);
 1270|  12.9k|            }
 1271|  4.31k|        } else {
 1272|  3.48k|            auto ss = shift_ - B;
 1273|  13.9k|            for (; p != e; ++p)
  ------------------
  |  Branch (1273:20): [True: 10.4k, False: 3.48k]
  ------------------
 1274|  10.4k|                make_full_pos(*p, ss).visit(v, args...);
 1275|  3.48k|        }
 1276|  7.80k|    }
_ZN5immer6detail4rbts13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_21concat_merger_visitorEJRNS1_13concat_mergerISC_EEEEEDcT_DpOT0_:
  207|  22.0k|    {
  208|  22.0k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  209|  22.0k|    }
_ZNK5immer6detail4rbts13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE4sizeEv:
  200|  98.3k|    size_t size() const { return branches<BL>; }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_21concat_merger_visitorEJRNS1_13concat_mergerISC_EEEEEDcT_DpOT0_:
 1405|  26.4k|    {
 1406|  26.4k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1407|  26.4k|    }
_ZN5immer6detail4rbts25singleton_regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE8last_subINS1_19concat_both_visitorISC_EEJRNS1_14empty_leaf_posISC_EERNS1_8full_posISC_EEEEEDcT_DpOT0_:
  753|    611|    {
  754|    611|        return make_leaf_sub_pos(leaf_, count_).visit(v, args...);
  755|    611|    }
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_19concat_both_visitorISC_EEJRNS1_14empty_leaf_posISC_EERNS1_8full_posISC_EEEEEDcT_DpOT0_:
  144|    611|    {
  145|    611|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  146|    611|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE14first_sub_leafINS1_20concat_right_visitorISC_EEJRNS1_12leaf_sub_posISC_EERNS1_14empty_leaf_posISC_EEEEEDcT_DpOT0_:
 1370|    611|    {
 1371|    611|        assert(shift_ == BL);
  ------------------
  |  Branch (1371:9): [True: 611, False: 0]
  ------------------
 1372|    611|        auto child = node_->inner()[0];
 1373|    611|        return make_full_leaf_pos(child).visit(v, args...);
 1374|    611|    }
_ZN5immer6detail4rbts13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_20concat_right_visitorISC_EEJRNS1_12leaf_sub_posISC_EERNS1_14empty_leaf_posISC_EEEEEDcT_DpOT0_:
  207|  1.52k|    {
  208|  1.52k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  209|  1.52k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE14each_right_subINS1_34concat_rebalance_plan_fill_visitorEJRNS1_21concat_rebalance_planILj2ELj2EEEEEEvT_DpOT0_:
  906|  56.9k|    {
  907|  56.9k|        if (count() > 1)
  ------------------
  |  Branch (907:13): [True: 19.5k, False: 37.3k]
  ------------------
  908|  19.5k|            each_right_sub_(v, 1, args...);
  909|  56.9k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE15each_right_sub_INS1_34concat_rebalance_plan_fill_visitorEJRNS1_21concat_rebalance_planILj2ELj2EEEEEEvT_jDpOT0_:
  879|  19.5k|    {
  880|  19.5k|        auto last  = count() - 1;
  881|  19.5k|        auto lsize = size_ - (last << shift_);
  882|  19.5k|        auto n     = node()->inner() + i;
  883|  19.5k|        auto e     = node()->inner() + last;
  884|  19.5k|        if (shift() == BL) {
  ------------------
  |  Branch (884:13): [True: 7.66k, False: 11.9k]
  ------------------
  885|  16.2k|            for (; n != e; ++n) {
  ------------------
  |  Branch (885:20): [True: 8.61k, False: 7.66k]
  ------------------
  886|  8.61k|                IMMER_PREFETCH(n + 1);
  887|  8.61k|                make_full_leaf_pos(*n).visit(v, args...);
  888|  8.61k|            }
  889|  7.66k|            make_leaf_sub_pos(*n, lsize).visit(v, args...);
  890|  11.9k|        } else {
  891|  11.9k|            auto ss = shift_ - B;
  892|  21.8k|            for (; n != e; ++n)
  ------------------
  |  Branch (892:20): [True: 9.97k, False: 11.9k]
  ------------------
  893|  9.97k|                make_full_pos(*n, ss).visit(v, args...);
  894|  11.9k|            make_regular_sub_pos(*n, ss, lsize).visit(v, args...);
  895|  11.9k|        }
  896|  19.5k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_34concat_rebalance_plan_fill_visitorEJRNS1_21concat_rebalance_planILj2ELj2EEEEEEDcT_DpOT0_:
 1036|  96.8k|    {
 1037|  96.8k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  96.8k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE14each_right_subINS1_21concat_merger_visitorEJRNS1_13concat_mergerISC_EEEEEvT_DpOT0_:
  906|  10.6k|    {
  907|  10.6k|        if (count() > 1)
  ------------------
  |  Branch (907:13): [True: 6.85k, False: 3.84k]
  ------------------
  908|  6.85k|            each_right_sub_(v, 1, args...);
  909|  10.6k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE15each_right_sub_INS1_21concat_merger_visitorEJRNS1_13concat_mergerISC_EEEEEvT_jDpOT0_:
  879|  6.85k|    {
  880|  6.85k|        auto last  = count() - 1;
  881|  6.85k|        auto lsize = size_ - (last << shift_);
  882|  6.85k|        auto n     = node()->inner() + i;
  883|  6.85k|        auto e     = node()->inner() + last;
  884|  6.85k|        if (shift() == BL) {
  ------------------
  |  Branch (884:13): [True: 2.53k, False: 4.31k]
  ------------------
  885|  5.29k|            for (; n != e; ++n) {
  ------------------
  |  Branch (885:20): [True: 2.75k, False: 2.53k]
  ------------------
  886|  2.75k|                IMMER_PREFETCH(n + 1);
  887|  2.75k|                make_full_leaf_pos(*n).visit(v, args...);
  888|  2.75k|            }
  889|  2.53k|            make_leaf_sub_pos(*n, lsize).visit(v, args...);
  890|  4.31k|        } else {
  891|  4.31k|            auto ss = shift_ - B;
  892|  6.45k|            for (; n != e; ++n)
  ------------------
  |  Branch (892:20): [True: 2.13k, False: 4.31k]
  ------------------
  893|  2.13k|                make_full_pos(*n, ss).visit(v, args...);
  894|  4.31k|            make_regular_sub_pos(*n, ss, lsize).visit(v, args...);
  895|  4.31k|        }
  896|  6.85k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_21concat_merger_visitorEJRNS1_13concat_mergerISC_EEEEEDcT_DpOT0_:
 1036|  15.2k|    {
 1037|  15.2k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  15.2k|    }
_ZN5immer6detail4rbts25singleton_regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE8last_subINS1_19concat_both_visitorISC_EEJRNS1_14empty_leaf_posISC_EERNS1_15regular_sub_posISC_EEEEEDcT_DpOT0_:
  753|    909|    {
  754|    909|        return make_leaf_sub_pos(leaf_, count_).visit(v, args...);
  755|    909|    }
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_19concat_both_visitorISC_EEJRNS1_14empty_leaf_posISC_EERNS1_15regular_sub_posISC_EEEEEDcT_DpOT0_:
  144|    909|    {
  145|    909|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  146|    909|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE14first_sub_leafINS1_20concat_right_visitorISC_EEJRNS1_12leaf_sub_posISC_EERNS1_14empty_leaf_posISC_EEEEEDcT_DpOT0_:
  986|    909|    {
  987|    909|        assert(shift_ == BL);
  ------------------
  |  Branch (987:9): [True: 909, False: 0]
  ------------------
  988|    909|        auto child   = node_->inner()[0];
  989|    909|        auto is_full = size_ >= branches<BL>;
  990|    909|        return is_full ? make_full_leaf_pos(child).visit(v, args...)
  ------------------
  |  Branch (990:16): [True: 909, False: 0]
  ------------------
  991|    909|                       : make_leaf_sub_pos(child, size_).visit(v, args...);
  992|    909|    }
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_20concat_right_visitorISC_EEJRSD_RNS1_14empty_leaf_posISC_EEEEEDcT_DpOT0_:
  144|  1.53k|    {
  145|  1.53k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  146|  1.53k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE14each_right_subINS1_34concat_rebalance_plan_fill_visitorEJRNS1_21concat_rebalance_planILj2ELj2EEEEEEvT_DpOT0_:
 1647|   626k|    {
 1648|   626k|        each_right(v, 1, std::forward<Args>(args)...);
 1649|   626k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10each_rightINS1_34concat_rebalance_plan_fill_visitorEJRNS1_21concat_rebalance_planILj2ELj2EEEEEEvT_jDpOT0_:
 1653|   626k|    {
 1654|   626k|        assert(start > 0);
  ------------------
  |  Branch (1654:9): [True: 626k, False: 0]
  ------------------
 1655|   626k|        assert(start <= relaxed_->d.count);
  ------------------
  |  Branch (1655:9): [True: 626k, False: 0]
  ------------------
 1656|   626k|        auto s = relaxed_->d.sizes[start - 1];
 1657|   626k|        auto p = node_->inner();
 1658|   626k|        if (shift_ == BL) {
  ------------------
  |  Branch (1658:13): [True: 111k, False: 514k]
  ------------------
 1659|   395k|            for (auto i = start; i < relaxed_->d.count; ++i) {
  ------------------
  |  Branch (1659:34): [True: 284k, False: 111k]
  ------------------
 1660|   284k|                IMMER_PREFETCH(p + i + 1);
 1661|   284k|                make_leaf_sub_pos(p[i], relaxed_->d.sizes[i] - s)
 1662|   284k|                    .visit(v, args...);
 1663|   284k|                s = relaxed_->d.sizes[i];
 1664|   284k|                assert(s);
  ------------------
  |  Branch (1664:17): [True: 284k, False: 0]
  ------------------
 1665|   284k|            }
 1666|   514k|        } else {
 1667|   514k|            auto ss = shift_ - B;
 1668|  1.76M|            for (auto i = start; i < relaxed_->d.count; ++i) {
  ------------------
  |  Branch (1668:34): [True: 1.25M, False: 514k]
  ------------------
 1669|  1.25M|                visit_maybe_relaxed_sub(
 1670|  1.25M|                    p[i], ss, relaxed_->d.sizes[i] - s, v, args...);
 1671|  1.25M|                s = relaxed_->d.sizes[i];
 1672|       |                assert(s);
  ------------------
  |  Branch (1672:17): [True: 1.25M, False: 0]
  ------------------
 1673|  1.25M|            }
 1674|   514k|        }
 1675|   626k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEENS1_34concat_rebalance_plan_fill_visitorEJRNS1_21concat_rebalance_planILj2ELj2EEEEEEDcPT_jmT0_DpOT1_:
 1838|  2.62M|{
 1839|  2.62M|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 2.62M, False: 0]
  ------------------
 1840|  2.62M|    auto relaxed = node->relaxed();
 1841|  2.62M|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 2.54M, False: 84.8k]
  ------------------
 1842|  2.54M|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 2.54M, False: 0]
  ------------------
 1843|  2.54M|        return make_relaxed_pos(node, shift, relaxed)
 1844|  2.54M|            .visit(v, std::forward<Args>(args)...);
 1845|  2.54M|    } else {
 1846|  84.8k|        return make_regular_sub_pos(node, shift, size)
 1847|  84.8k|            .visit(v, std::forward<Args>(args)...);
 1848|  84.8k|    }
 1849|  2.62M|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE14each_right_subINS1_21concat_merger_visitorEJRNS1_13concat_mergerISC_EEEEEvT_DpOT0_:
 1647|   223k|    {
 1648|   223k|        each_right(v, 1, std::forward<Args>(args)...);
 1649|   223k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10each_rightINS1_21concat_merger_visitorEJRNS1_13concat_mergerISC_EEEEEvT_jDpOT0_:
 1653|   223k|    {
 1654|   223k|        assert(start > 0);
  ------------------
  |  Branch (1654:9): [True: 223k, False: 0]
  ------------------
 1655|   223k|        assert(start <= relaxed_->d.count);
  ------------------
  |  Branch (1655:9): [True: 223k, False: 0]
  ------------------
 1656|   223k|        auto s = relaxed_->d.sizes[start - 1];
 1657|   223k|        auto p = node_->inner();
 1658|   223k|        if (shift_ == BL) {
  ------------------
  |  Branch (1658:13): [True: 39.8k, False: 183k]
  ------------------
 1659|   151k|            for (auto i = start; i < relaxed_->d.count; ++i) {
  ------------------
  |  Branch (1659:34): [True: 111k, False: 39.8k]
  ------------------
 1660|   111k|                IMMER_PREFETCH(p + i + 1);
 1661|   111k|                make_leaf_sub_pos(p[i], relaxed_->d.sizes[i] - s)
 1662|   111k|                    .visit(v, args...);
 1663|   111k|                s = relaxed_->d.sizes[i];
 1664|   111k|                assert(s);
  ------------------
  |  Branch (1664:17): [True: 111k, False: 0]
  ------------------
 1665|   111k|            }
 1666|   183k|        } else {
 1667|   183k|            auto ss = shift_ - B;
 1668|   679k|            for (auto i = start; i < relaxed_->d.count; ++i) {
  ------------------
  |  Branch (1668:34): [True: 495k, False: 183k]
  ------------------
 1669|   495k|                visit_maybe_relaxed_sub(
 1670|   495k|                    p[i], ss, relaxed_->d.sizes[i] - s, v, args...);
 1671|   495k|                s = relaxed_->d.sizes[i];
 1672|       |                assert(s);
  ------------------
  |  Branch (1672:17): [True: 495k, False: 0]
  ------------------
 1673|   495k|            }
 1674|   183k|        }
 1675|   223k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEENS1_21concat_merger_visitorEJRNS1_13concat_mergerISC_EEEEEDcPT_jmT0_DpOT1_:
 1838|   947k|{
 1839|   947k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 947k, False: 0]
  ------------------
 1840|   947k|    auto relaxed = node->relaxed();
 1841|   947k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 936k, False: 10.9k]
  ------------------
 1842|   936k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 936k, False: 0]
  ------------------
 1843|   936k|        return make_relaxed_pos(node, shift, relaxed)
 1844|   936k|            .visit(v, std::forward<Args>(args)...);
 1845|   936k|    } else {
 1846|  10.9k|        return make_regular_sub_pos(node, shift, size)
 1847|  10.9k|            .visit(v, std::forward<Args>(args)...);
 1848|  10.9k|    }
 1849|   947k|}
_ZN5immer6detail4rbts25singleton_regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE8last_subINS1_19concat_both_visitorISC_EEJRNS1_14empty_leaf_posISC_EERNS1_11relaxed_posISC_EEEEEDcT_DpOT0_:
  753|  1.53k|    {
  754|  1.53k|        return make_leaf_sub_pos(leaf_, count_).visit(v, args...);
  755|  1.53k|    }
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_19concat_both_visitorISC_EEJRNS1_14empty_leaf_posISC_EERNS1_11relaxed_posISC_EEEEEDcT_DpOT0_:
  144|  1.53k|    {
  145|  1.53k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  146|  1.53k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE14first_sub_leafINS1_20concat_right_visitorISC_EEJRNS1_12leaf_sub_posISC_EERNS1_14empty_leaf_posISC_EEEEEDcT_DpOT0_:
 1774|  1.53k|    {
 1775|  1.53k|        assert(shift_ == BL);
  ------------------
  |  Branch (1775:9): [True: 1.53k, False: 0]
  ------------------
 1776|  1.53k|        auto child      = node_->inner()[0];
 1777|  1.53k|        auto child_size = relaxed_->d.sizes[0];
 1778|  1.53k|        return make_leaf_sub_pos(child, child_size).visit(v, args...);
 1779|  1.53k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_26concat_trees_right_visitorISC_EEJRNS1_25singleton_regular_sub_posISC_EERNS1_14empty_leaf_posISC_EEEEEDcT_DpOT0_:
 1036|  1.31k|    {
 1037|  1.31k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  1.31k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEENS1_25concat_trees_left_visitorISC_EEJNS1_8leaf_posISC_EERPSC_RjRmEEEDcPT_jmT0_DpOT1_:
 1838|  47.5k|{
 1839|  47.5k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 47.5k, False: 0]
  ------------------
 1840|  47.5k|    auto relaxed = node->relaxed();
 1841|  47.5k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 41.5k, False: 6.00k]
  ------------------
 1842|  41.5k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 41.5k, False: 0]
  ------------------
 1843|  41.5k|        return make_relaxed_pos(node, shift, relaxed)
 1844|  41.5k|            .visit(v, std::forward<Args>(args)...);
 1845|  41.5k|    } else {
 1846|  6.00k|        return make_regular_sub_pos(node, shift, size)
 1847|  6.00k|            .visit(v, std::forward<Args>(args)...);
 1848|  6.00k|    }
 1849|  47.5k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_25concat_trees_left_visitorISC_EEJNS1_8leaf_posISC_EERPSC_RjRmEEEDcT_DpOT0_:
 1813|  41.5k|    {
 1814|  41.5k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  41.5k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEENS1_26concat_trees_right_visitorISC_EEJRNS1_11relaxed_posISC_EERNS1_8leaf_posISC_EEEEEDcPT_jmT0_DpOT1_:
 1838|  41.5k|{
 1839|  41.5k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 41.5k, False: 0]
  ------------------
 1840|  41.5k|    auto relaxed = node->relaxed();
 1841|  41.5k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 38.6k, False: 2.82k]
  ------------------
 1842|  38.6k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 38.6k, False: 0]
  ------------------
 1843|  38.6k|        return make_relaxed_pos(node, shift, relaxed)
 1844|  38.6k|            .visit(v, std::forward<Args>(args)...);
 1845|  38.6k|    } else {
 1846|  2.82k|        return make_regular_sub_pos(node, shift, size)
 1847|  2.82k|            .visit(v, std::forward<Args>(args)...);
 1848|  2.82k|    }
 1849|  41.5k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_26concat_trees_right_visitorISC_EEJRSD_RNS1_8leaf_posISC_EEEEEDcT_DpOT0_:
 1813|  38.6k|    {
 1814|  38.6k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  38.6k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE8last_subINS1_19concat_left_visitorISC_EEJRNS1_8leaf_posISC_EERSD_EEEDcT_DpOT0_:
 1750|  3.07k|    {
 1751|  3.07k|        auto offset     = relaxed_->d.count - 1;
 1752|  3.07k|        auto child      = node_->inner()[offset];
 1753|  3.07k|        auto child_size = size(offset);
 1754|  3.07k|        auto is_leaf    = shift_ == BL;
 1755|  3.07k|        return is_leaf ? make_leaf_sub_pos(child, child_size).visit(v, args...)
  ------------------
  |  Branch (1755:16): [True: 0, False: 3.07k]
  ------------------
 1756|  3.07k|                       : visit_maybe_relaxed_sub(
 1757|  3.07k|                             child, shift_ - B, child_size, v, args...);
 1758|  3.07k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEENS1_19concat_left_visitorISC_EEJRNS1_8leaf_posISC_EERNS1_11relaxed_posISC_EEEEEDcPT_jmT0_DpOT1_:
 1838|  3.07k|{
 1839|  3.07k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 3.07k, False: 0]
  ------------------
 1840|  3.07k|    auto relaxed = node->relaxed();
 1841|  3.07k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 2.74k, False: 325]
  ------------------
 1842|  2.74k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 2.74k, False: 0]
  ------------------
 1843|  2.74k|        return make_relaxed_pos(node, shift, relaxed)
 1844|  2.74k|            .visit(v, std::forward<Args>(args)...);
 1845|  2.74k|    } else {
 1846|    325|        return make_regular_sub_pos(node, shift, size)
 1847|    325|            .visit(v, std::forward<Args>(args)...);
 1848|    325|    }
 1849|  3.07k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_19concat_left_visitorISC_EEJRNS1_8leaf_posISC_EERSD_EEEDcT_DpOT0_:
 1813|  2.74k|    {
 1814|  2.74k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  2.74k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_19concat_left_visitorISC_EEJRNS1_8leaf_posISC_EERNS1_11relaxed_posISC_EEEEEDcT_DpOT0_:
 1036|    795|    {
 1037|    795|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|    795|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE8last_subINS1_19concat_left_visitorISC_EEJRNS1_8leaf_posISC_EERNS1_11relaxed_posISC_EEEEEDcT_DpOT0_:
  958|    470|    {
  959|    470|        auto offset  = count() - 1;
  960|    470|        auto child   = node_->inner()[offset];
  961|    470|        auto is_leaf = shift_ == BL;
  962|    470|        auto lsize   = size_ - (size_t{offset} << shift_);
  963|    470|        return is_leaf ? make_leaf_sub_pos(child, lsize).visit(v, args...)
  ------------------
  |  Branch (963:16): [True: 0, False: 470]
  ------------------
  964|    470|                       : make_regular_sub_pos(child, shift_ - B, lsize)
  965|    470|                             .visit(v, args...);
  966|    470|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE13each_left_subINS1_34concat_rebalance_plan_fill_visitorEJRNS1_21concat_rebalance_planILj2ELj2EEEEEEvT_DpOT0_:
  913|   138k|    {
  914|   138k|        each_left(v, count() - 1, args...);
  915|   138k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE9each_leftINS1_34concat_rebalance_plan_fill_visitorEJRNS1_21concat_rebalance_planILj2ELj2EEEEEEvT_jDpOT0_:
  873|   138k|    {
  874|   138k|        return each_left_regular(*this, v, last, args...);
  875|   138k|    }
_ZN5immer6detail4rbts17each_left_regularIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEENS1_34concat_rebalance_plan_fill_visitorEJRNS1_21concat_rebalance_planILj2ELj2EEEEEEvOT_T0_jDpOT1_:
  575|   138k|{
  576|   138k|    constexpr auto B  = bits<Pos>;
  577|   138k|    constexpr auto BL = bits_leaf<Pos>;
  578|   138k|    assert(last < p.count());
  ------------------
  |  Branch (578:5): [True: 138k, False: 0]
  ------------------
  579|   138k|    if (p.shift() == BL) {
  ------------------
  |  Branch (579:9): [True: 57.7k, False: 80.2k]
  ------------------
  580|  57.7k|        auto n = p.node()->inner();
  581|  57.7k|        auto e = n + last;
  582|   111k|        for (; n != e; ++n) {
  ------------------
  |  Branch (582:16): [True: 53.9k, False: 57.7k]
  ------------------
  583|  53.9k|            IMMER_PREFETCH(n + 1);
  584|  53.9k|            make_full_leaf_pos(*n).visit(v, args...);
  585|  53.9k|        }
  586|  80.2k|    } else {
  587|  80.2k|        auto n  = p.node()->inner();
  588|  80.2k|        auto e  = n + last;
  589|  80.2k|        auto ss = p.shift() - B;
  590|   191k|        for (; n != e; ++n)
  ------------------
  |  Branch (590:16): [True: 110k, False: 80.2k]
  ------------------
  591|   110k|            make_full_pos(*n, ss).visit(v, args...);
  592|  80.2k|    }
  593|   138k|}
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE13each_left_subINS1_21concat_merger_visitorEJRNS1_13concat_mergerISC_EEEEEvT_DpOT0_:
  913|  21.3k|    {
  914|  21.3k|        each_left(v, count() - 1, args...);
  915|  21.3k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE9each_leftINS1_21concat_merger_visitorEJRNS1_13concat_mergerISC_EEEEEvT_jDpOT0_:
  873|  21.3k|    {
  874|  21.3k|        return each_left_regular(*this, v, last, args...);
  875|  21.3k|    }
_ZN5immer6detail4rbts17each_left_regularIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEENS1_21concat_merger_visitorEJRNS1_13concat_mergerISD_EEEEEvOT_T0_jDpOT1_:
  575|  21.3k|{
  576|  21.3k|    constexpr auto B  = bits<Pos>;
  577|  21.3k|    constexpr auto BL = bits_leaf<Pos>;
  578|  21.3k|    assert(last < p.count());
  ------------------
  |  Branch (578:5): [True: 21.3k, False: 0]
  ------------------
  579|  21.3k|    if (p.shift() == BL) {
  ------------------
  |  Branch (579:9): [True: 10.6k, False: 10.6k]
  ------------------
  580|  10.6k|        auto n = p.node()->inner();
  581|  10.6k|        auto e = n + last;
  582|  17.0k|        for (; n != e; ++n) {
  ------------------
  |  Branch (582:16): [True: 6.39k, False: 10.6k]
  ------------------
  583|  6.39k|            IMMER_PREFETCH(n + 1);
  584|  6.39k|            make_full_leaf_pos(*n).visit(v, args...);
  585|  6.39k|        }
  586|  10.6k|    } else {
  587|  10.6k|        auto n  = p.node()->inner();
  588|  10.6k|        auto e  = n + last;
  589|  10.6k|        auto ss = p.shift() - B;
  590|  24.4k|        for (; n != e; ++n)
  ------------------
  |  Branch (590:16): [True: 13.8k, False: 10.6k]
  ------------------
  591|  13.8k|            make_full_pos(*n, ss).visit(v, args...);
  592|  10.6k|    }
  593|  21.3k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE9first_subINS1_20concat_right_visitorISC_EEJRNS1_15regular_sub_posISC_EERNS1_8leaf_posISC_EEEEEDcT_DpOT0_:
 1762|  10.3k|    {
 1763|  10.3k|        auto child      = node_->inner()[0];
 1764|  10.3k|        auto child_size = relaxed_->d.sizes[0];
 1765|  10.3k|        auto is_leaf    = shift_ == BL;
 1766|  10.3k|        assert(child_size);
  ------------------
  |  Branch (1766:9): [True: 10.3k, False: 0]
  ------------------
 1767|  10.3k|        return is_leaf ? make_leaf_sub_pos(child, child_size).visit(v, args...)
  ------------------
  |  Branch (1767:16): [True: 0, False: 10.3k]
  ------------------
 1768|  10.3k|                       : visit_maybe_relaxed_sub(
 1769|  10.3k|                             child, shift_ - B, child_size, v, args...);
 1770|  10.3k|    }
_ZNK5immer6detail4rbts8leaf_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5shiftEv:
  106|   158k|    shift_t shift() const { return 0; }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEENS1_20concat_right_visitorISC_EEJRNS1_15regular_sub_posISC_EERNS1_8leaf_posISC_EEEEEDcPT_jmT0_DpOT1_:
 1838|  10.3k|{
 1839|  10.3k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 10.3k, False: 0]
  ------------------
 1840|  10.3k|    auto relaxed = node->relaxed();
 1841|  10.3k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 9.36k, False: 1.00k]
  ------------------
 1842|  9.36k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 9.36k, False: 0]
  ------------------
 1843|  9.36k|        return make_relaxed_pos(node, shift, relaxed)
 1844|  9.36k|            .visit(v, std::forward<Args>(args)...);
 1845|  9.36k|    } else {
 1846|  1.00k|        return make_regular_sub_pos(node, shift, size)
 1847|  1.00k|            .visit(v, std::forward<Args>(args)...);
 1848|  1.00k|    }
 1849|  10.3k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_20concat_right_visitorISC_EEJRNS1_15regular_sub_posISC_EERNS1_8leaf_posISC_EEEEEDcT_DpOT0_:
 1813|  9.36k|    {
 1814|  9.36k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  9.36k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_20concat_right_visitorISC_EEJRSD_RNS1_8leaf_posISC_EEEEEDcT_DpOT0_:
 1036|  1.00k|    {
 1037|  1.00k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  1.00k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE8last_subINS1_19concat_left_visitorISC_EEJRNS1_8leaf_posISC_EERSD_EEEDcT_DpOT0_:
  958|    901|    {
  959|    901|        auto offset  = count() - 1;
  960|    901|        auto child   = node_->inner()[offset];
  961|    901|        auto is_leaf = shift_ == BL;
  962|    901|        auto lsize   = size_ - (size_t{offset} << shift_);
  963|    901|        return is_leaf ? make_leaf_sub_pos(child, lsize).visit(v, args...)
  ------------------
  |  Branch (963:16): [True: 0, False: 901]
  ------------------
  964|    901|                       : make_regular_sub_pos(child, shift_ - B, lsize)
  965|    901|                             .visit(v, args...);
  966|    901|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_19concat_left_visitorISC_EEJRNS1_8leaf_posISC_EERSD_EEEDcT_DpOT0_:
 1036|  1.25k|    {
 1037|  1.25k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  1.25k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE9first_subINS1_20concat_right_visitorISC_EEJRSD_RNS1_8leaf_posISC_EEEEEDcT_DpOT0_:
  970|  2.47k|    {
  971|  2.47k|        auto is_leaf = shift_ == BL;
  972|  2.47k|        auto child   = node_->inner()[0];
  973|  2.47k|        auto is_full = size_ >= (size_t{1} << shift_);
  974|  2.47k|        return is_full
  ------------------
  |  Branch (974:16): [True: 2.47k, False: 0]
  ------------------
  975|  2.47k|                   ? (is_leaf
  ------------------
  |  Branch (975:23): [True: 0, False: 2.47k]
  ------------------
  976|  2.47k|                          ? make_full_leaf_pos(child).visit(v, args...)
  977|  2.47k|                          : make_full_pos(child, shift_ - B).visit(v, args...))
  978|  2.47k|                   : (is_leaf
  ------------------
  |  Branch (978:23): [True: 0, False: 0]
  ------------------
  979|      0|                          ? make_leaf_sub_pos(child, size_).visit(v, args...)
  980|      0|                          : make_regular_sub_pos(child, shift_ - B, size_)
  981|      0|                                .visit(v, args...));
  982|  2.47k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_20concat_right_visitorISC_EEJRNS1_15regular_sub_posISC_EERNS1_8leaf_posISC_EEEEEDcT_DpOT0_:
 1405|  4.73k|    {
 1406|  4.73k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1407|  4.73k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE9first_subINS1_20concat_right_visitorISC_EEJRNS1_15regular_sub_posISC_EERNS1_8leaf_posISC_EEEEEDcT_DpOT0_:
 1361|  2.25k|    {
 1362|  2.25k|        auto is_leaf = shift_ == BL;
 1363|  2.25k|        auto child   = node_->inner()[0];
 1364|  2.25k|        return is_leaf ? make_full_leaf_pos(child).visit(v, args...)
  ------------------
  |  Branch (1364:16): [True: 0, False: 2.25k]
  ------------------
 1365|  2.25k|                       : make_full_pos(child, shift_ - B).visit(v, args...);
 1366|  2.25k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE8last_subINS1_19concat_both_visitorISC_EEJRNS1_8leaf_posISC_EERNS1_8full_posISC_EEEEEDcT_DpOT0_:
  958|  4.52k|    {
  959|  4.52k|        auto offset  = count() - 1;
  960|  4.52k|        auto child   = node_->inner()[offset];
  961|  4.52k|        auto is_leaf = shift_ == BL;
  962|  4.52k|        auto lsize   = size_ - (size_t{offset} << shift_);
  963|  4.52k|        return is_leaf ? make_leaf_sub_pos(child, lsize).visit(v, args...)
  ------------------
  |  Branch (963:16): [True: 2.71k, False: 1.80k]
  ------------------
  964|  4.52k|                       : make_regular_sub_pos(child, shift_ - B, lsize)
  965|  1.80k|                             .visit(v, args...);
  966|  4.52k|    }
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_19concat_both_visitorISC_EEJRNS1_8leaf_posISC_EERNS1_8full_posISC_EEEEEDcT_DpOT0_:
  144|  3.70k|    {
  145|  3.70k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  146|  3.70k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE14first_sub_leafINS1_20concat_right_visitorISC_EEJRNS1_12leaf_sub_posISC_EERNS1_8leaf_posISC_EEEEEDcT_DpOT0_:
 1370|  3.70k|    {
 1371|  3.70k|        assert(shift_ == BL);
  ------------------
  |  Branch (1371:9): [True: 3.70k, False: 0]
  ------------------
 1372|  3.70k|        auto child = node_->inner()[0];
 1373|  3.70k|        return make_full_leaf_pos(child).visit(v, args...);
 1374|  3.70k|    }
_ZN5immer6detail4rbts13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_20concat_right_visitorISC_EEJRNS1_12leaf_sub_posISC_EERNS1_8leaf_posISC_EEEEEDcT_DpOT0_:
  207|  9.17k|    {
  208|  9.17k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  209|  9.17k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_19concat_both_visitorISC_EEJRNS1_8leaf_posISC_EERNS1_8full_posISC_EEEEEDcT_DpOT0_:
 1036|  2.04k|    {
 1037|  2.04k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  2.04k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE8last_subINS1_19concat_both_visitorISC_EEJRNS1_8leaf_posISC_EERSD_EEEDcT_DpOT0_:
  958|  5.79k|    {
  959|  5.79k|        auto offset  = count() - 1;
  960|  5.79k|        auto child   = node_->inner()[offset];
  961|  5.79k|        auto is_leaf = shift_ == BL;
  962|  5.79k|        auto lsize   = size_ - (size_t{offset} << shift_);
  963|  5.79k|        return is_leaf ? make_leaf_sub_pos(child, lsize).visit(v, args...)
  ------------------
  |  Branch (963:16): [True: 4.60k, False: 1.19k]
  ------------------
  964|  5.79k|                       : make_regular_sub_pos(child, shift_ - B, lsize)
  965|  1.19k|                             .visit(v, args...);
  966|  5.79k|    }
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_19concat_both_visitorISC_EEJRNS1_8leaf_posISC_EERNS1_15regular_sub_posISC_EEEEEDcT_DpOT0_:
  144|  5.46k|    {
  145|  5.46k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  146|  5.46k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE14first_sub_leafINS1_20concat_right_visitorISC_EEJRNS1_12leaf_sub_posISC_EERNS1_8leaf_posISC_EEEEEDcT_DpOT0_:
  986|  5.46k|    {
  987|  5.46k|        assert(shift_ == BL);
  ------------------
  |  Branch (987:9): [True: 5.46k, False: 0]
  ------------------
  988|  5.46k|        auto child   = node_->inner()[0];
  989|  5.46k|        auto is_full = size_ >= branches<BL>;
  990|  5.46k|        return is_full ? make_full_leaf_pos(child).visit(v, args...)
  ------------------
  |  Branch (990:16): [True: 5.46k, False: 0]
  ------------------
  991|  5.46k|                       : make_leaf_sub_pos(child, size_).visit(v, args...);
  992|  5.46k|    }
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_20concat_right_visitorISC_EEJRSD_RNS1_8leaf_posISC_EEEEEDcT_DpOT0_:
  144|  38.3k|    {
  145|  38.3k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  146|  38.3k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_19concat_both_visitorISC_EEJRNS1_8leaf_posISC_EERSD_EEEDcT_DpOT0_:
 1036|  1.82k|    {
 1037|  1.82k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  1.82k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE8last_subINS1_19concat_both_visitorISC_EEJRNS1_8leaf_posISC_EERNS1_11relaxed_posISC_EEEEEDcT_DpOT0_:
  958|  9.60k|    {
  959|  9.60k|        auto offset  = count() - 1;
  960|  9.60k|        auto child   = node_->inner()[offset];
  961|  9.60k|        auto is_leaf = shift_ == BL;
  962|  9.60k|        auto lsize   = size_ - (size_t{offset} << shift_);
  963|  9.60k|        return is_leaf ? make_leaf_sub_pos(child, lsize).visit(v, args...)
  ------------------
  |  Branch (963:16): [True: 3.30k, False: 6.30k]
  ------------------
  964|  9.60k|                       : make_regular_sub_pos(child, shift_ - B, lsize)
  965|  6.30k|                             .visit(v, args...);
  966|  9.60k|    }
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_19concat_both_visitorISC_EEJRNS1_8leaf_posISC_EERNS1_11relaxed_posISC_EEEEEDcT_DpOT0_:
  144|  38.3k|    {
  145|  38.3k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  146|  38.3k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE14first_sub_leafINS1_20concat_right_visitorISC_EEJRNS1_12leaf_sub_posISC_EERNS1_8leaf_posISC_EEEEEDcT_DpOT0_:
 1774|  38.3k|    {
 1775|  38.3k|        assert(shift_ == BL);
  ------------------
  |  Branch (1775:9): [True: 38.3k, False: 0]
  ------------------
 1776|  38.3k|        auto child      = node_->inner()[0];
 1777|  38.3k|        auto child_size = relaxed_->d.sizes[0];
 1778|  38.3k|        return make_leaf_sub_pos(child, child_size).visit(v, args...);
 1779|  38.3k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_19concat_both_visitorISC_EEJRNS1_8leaf_posISC_EERNS1_11relaxed_posISC_EEEEEDcT_DpOT0_:
 1036|  9.38k|    {
 1037|  9.38k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  9.38k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE13each_left_subINS1_34concat_rebalance_plan_fill_visitorEJRNS1_21concat_rebalance_planILj2ELj2EEEEEEvT_DpOT0_:
 1617|  1.02M|    {
 1618|  1.02M|        each_left(v, relaxed_->d.count - 1, args...);
 1619|  1.02M|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE9each_leftINS1_34concat_rebalance_plan_fill_visitorEJRNS1_21concat_rebalance_planILj2ELj2EEEEEEvT_jDpOT0_:
 1623|  1.02M|    {
 1624|  1.02M|        auto p = node_->inner();
 1625|  1.02M|        auto s = size_t{};
 1626|  1.02M|        if (shift_ == BL) {
  ------------------
  |  Branch (1626:13): [True: 100k, False: 923k]
  ------------------
 1627|   265k|            for (auto i = count_t{0}; i < n; ++i) {
  ------------------
  |  Branch (1627:39): [True: 164k, False: 100k]
  ------------------
 1628|   164k|                IMMER_PREFETCH(p + i + 1);
 1629|   164k|                make_leaf_sub_pos(p[i], relaxed_->d.sizes[i] - s)
 1630|   164k|                    .visit(v, args...);
 1631|   164k|                s = relaxed_->d.sizes[i];
 1632|   164k|                assert(s);
  ------------------
  |  Branch (1632:17): [True: 164k, False: 0]
  ------------------
 1633|   164k|            }
 1634|   923k|        } else {
 1635|   923k|            auto ss = shift_ - B;
 1636|  2.29M|            for (auto i = count_t{0}; i < n; ++i) {
  ------------------
  |  Branch (1636:39): [True: 1.37M, False: 923k]
  ------------------
 1637|  1.37M|                visit_maybe_relaxed_sub(
 1638|  1.37M|                    p[i], ss, relaxed_->d.sizes[i] - s, v, args...);
 1639|  1.37M|                s = relaxed_->d.sizes[i];
 1640|       |                assert(s);
  ------------------
  |  Branch (1640:17): [True: 1.37M, False: 0]
  ------------------
 1641|  1.37M|            }
 1642|   923k|        }
 1643|  1.02M|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE13each_left_subINS1_21concat_merger_visitorEJRNS1_13concat_mergerISC_EEEEEvT_DpOT0_:
 1617|   212k|    {
 1618|   212k|        each_left(v, relaxed_->d.count - 1, args...);
 1619|   212k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE9each_leftINS1_21concat_merger_visitorEJRNS1_13concat_mergerISC_EEEEEvT_jDpOT0_:
 1623|   212k|    {
 1624|   212k|        auto p = node_->inner();
 1625|   212k|        auto s = size_t{};
 1626|   212k|        if (shift_ == BL) {
  ------------------
  |  Branch (1626:13): [True: 36.8k, False: 175k]
  ------------------
 1627|   107k|            for (auto i = count_t{0}; i < n; ++i) {
  ------------------
  |  Branch (1627:39): [True: 70.6k, False: 36.8k]
  ------------------
 1628|  70.6k|                IMMER_PREFETCH(p + i + 1);
 1629|  70.6k|                make_leaf_sub_pos(p[i], relaxed_->d.sizes[i] - s)
 1630|  70.6k|                    .visit(v, args...);
 1631|  70.6k|                s = relaxed_->d.sizes[i];
 1632|  70.6k|                assert(s);
  ------------------
  |  Branch (1632:17): [True: 70.6k, False: 0]
  ------------------
 1633|  70.6k|            }
 1634|   175k|        } else {
 1635|   175k|            auto ss = shift_ - B;
 1636|   626k|            for (auto i = count_t{0}; i < n; ++i) {
  ------------------
  |  Branch (1636:39): [True: 451k, False: 175k]
  ------------------
 1637|   451k|                visit_maybe_relaxed_sub(
 1638|   451k|                    p[i], ss, relaxed_->d.sizes[i] - s, v, args...);
 1639|   451k|                s = relaxed_->d.sizes[i];
 1640|       |                assert(s);
  ------------------
  |  Branch (1640:17): [True: 451k, False: 0]
  ------------------
 1641|   451k|            }
 1642|   175k|        }
 1643|   212k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE9first_subINS1_20concat_right_visitorISC_EEJRSD_RNS1_8leaf_posISC_EEEEEDcT_DpOT0_:
 1762|   168k|    {
 1763|   168k|        auto child      = node_->inner()[0];
 1764|   168k|        auto child_size = relaxed_->d.sizes[0];
 1765|   168k|        auto is_leaf    = shift_ == BL;
 1766|   168k|        assert(child_size);
  ------------------
  |  Branch (1766:9): [True: 168k, False: 0]
  ------------------
 1767|   168k|        return is_leaf ? make_leaf_sub_pos(child, child_size).visit(v, args...)
  ------------------
  |  Branch (1767:16): [True: 0, False: 168k]
  ------------------
 1768|   168k|                       : visit_maybe_relaxed_sub(
 1769|   168k|                             child, shift_ - B, child_size, v, args...);
 1770|   168k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEENS1_20concat_right_visitorISC_EEJRNS1_11relaxed_posISC_EERNS1_8leaf_posISC_EEEEEDcPT_jmT0_DpOT1_:
 1838|   168k|{
 1839|   168k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 168k, False: 0]
  ------------------
 1840|   168k|    auto relaxed = node->relaxed();
 1841|   168k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 167k, False: 248]
  ------------------
 1842|   167k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 167k, False: 0]
  ------------------
 1843|   167k|        return make_relaxed_pos(node, shift, relaxed)
 1844|   167k|            .visit(v, std::forward<Args>(args)...);
 1845|   167k|    } else {
 1846|    248|        return make_regular_sub_pos(node, shift, size)
 1847|    248|            .visit(v, std::forward<Args>(args)...);
 1848|    248|    }
 1849|   168k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_20concat_right_visitorISC_EEJRSD_RNS1_8leaf_posISC_EEEEEDcT_DpOT0_:
 1813|   167k|    {
 1814|   167k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|   167k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_20concat_right_visitorISC_EEJRNS1_11relaxed_posISC_EERNS1_8leaf_posISC_EEEEEDcT_DpOT0_:
 1036|    248|    {
 1037|    248|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|    248|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE8last_subINS1_19concat_left_visitorISC_EEJRNS1_8leaf_posISC_EERNS1_15regular_sub_posISC_EEEEEDcT_DpOT0_:
 1750|  2.66k|    {
 1751|  2.66k|        auto offset     = relaxed_->d.count - 1;
 1752|  2.66k|        auto child      = node_->inner()[offset];
 1753|  2.66k|        auto child_size = size(offset);
 1754|  2.66k|        auto is_leaf    = shift_ == BL;
 1755|  2.66k|        return is_leaf ? make_leaf_sub_pos(child, child_size).visit(v, args...)
  ------------------
  |  Branch (1755:16): [True: 0, False: 2.66k]
  ------------------
 1756|  2.66k|                       : visit_maybe_relaxed_sub(
 1757|  2.66k|                             child, shift_ - B, child_size, v, args...);
 1758|  2.66k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEENS1_19concat_left_visitorISC_EEJRNS1_8leaf_posISC_EERNS1_15regular_sub_posISC_EEEEEDcPT_jmT0_DpOT1_:
 1838|  2.66k|{
 1839|  2.66k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 2.66k, False: 0]
  ------------------
 1840|  2.66k|    auto relaxed = node->relaxed();
 1841|  2.66k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 2.31k, False: 349]
  ------------------
 1842|  2.31k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 2.31k, False: 0]
  ------------------
 1843|  2.31k|        return make_relaxed_pos(node, shift, relaxed)
 1844|  2.31k|            .visit(v, std::forward<Args>(args)...);
 1845|  2.31k|    } else {
 1846|    349|        return make_regular_sub_pos(node, shift, size)
 1847|    349|            .visit(v, std::forward<Args>(args)...);
 1848|    349|    }
 1849|  2.66k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_19concat_left_visitorISC_EEJRNS1_8leaf_posISC_EERNS1_15regular_sub_posISC_EEEEEDcT_DpOT0_:
 1813|  2.31k|    {
 1814|  2.31k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  2.31k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE9first_subINS1_20concat_right_visitorISC_EEJRNS1_11relaxed_posISC_EERNS1_8leaf_posISC_EEEEEDcT_DpOT0_:
  970|  1.22k|    {
  971|  1.22k|        auto is_leaf = shift_ == BL;
  972|  1.22k|        auto child   = node_->inner()[0];
  973|  1.22k|        auto is_full = size_ >= (size_t{1} << shift_);
  974|  1.22k|        return is_full
  ------------------
  |  Branch (974:16): [True: 1.22k, False: 0]
  ------------------
  975|  1.22k|                   ? (is_leaf
  ------------------
  |  Branch (975:23): [True: 0, False: 1.22k]
  ------------------
  976|  1.22k|                          ? make_full_leaf_pos(child).visit(v, args...)
  977|  1.22k|                          : make_full_pos(child, shift_ - B).visit(v, args...))
  978|  1.22k|                   : (is_leaf
  ------------------
  |  Branch (978:23): [True: 0, False: 0]
  ------------------
  979|      0|                          ? make_leaf_sub_pos(child, size_).visit(v, args...)
  980|      0|                          : make_regular_sub_pos(child, shift_ - B, size_)
  981|      0|                                .visit(v, args...));
  982|  1.22k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_20concat_right_visitorISC_EEJRNS1_11relaxed_posISC_EERNS1_8leaf_posISC_EEEEEDcT_DpOT0_:
 1405|  1.95k|    {
 1406|  1.95k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1407|  1.95k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE9first_subINS1_20concat_right_visitorISC_EEJRNS1_11relaxed_posISC_EERNS1_8leaf_posISC_EEEEEDcT_DpOT0_:
 1361|    726|    {
 1362|    726|        auto is_leaf = shift_ == BL;
 1363|    726|        auto child   = node_->inner()[0];
 1364|    726|        return is_leaf ? make_full_leaf_pos(child).visit(v, args...)
  ------------------
  |  Branch (1364:16): [True: 0, False: 726]
  ------------------
 1365|    726|                       : make_full_pos(child, shift_ - B).visit(v, args...);
 1366|    726|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE8last_subINS1_19concat_both_visitorISC_EEJRNS1_8leaf_posISC_EERNS1_8full_posISC_EEEEEDcT_DpOT0_:
 1750|  1.63k|    {
 1751|  1.63k|        auto offset     = relaxed_->d.count - 1;
 1752|  1.63k|        auto child      = node_->inner()[offset];
 1753|  1.63k|        auto child_size = size(offset);
 1754|  1.63k|        auto is_leaf    = shift_ == BL;
 1755|  1.63k|        return is_leaf ? make_leaf_sub_pos(child, child_size).visit(v, args...)
  ------------------
  |  Branch (1755:16): [True: 990, False: 642]
  ------------------
 1756|  1.63k|                       : visit_maybe_relaxed_sub(
 1757|    642|                             child, shift_ - B, child_size, v, args...);
 1758|  1.63k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEENS1_19concat_both_visitorISC_EEJRNS1_8leaf_posISC_EERNS1_8full_posISC_EEEEEDcPT_jmT0_DpOT1_:
 1838|    642|{
 1839|    642|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 642, False: 0]
  ------------------
 1840|    642|    auto relaxed = node->relaxed();
 1841|    642|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 405, False: 237]
  ------------------
 1842|    405|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 405, False: 0]
  ------------------
 1843|    405|        return make_relaxed_pos(node, shift, relaxed)
 1844|    405|            .visit(v, std::forward<Args>(args)...);
 1845|    405|    } else {
 1846|    237|        return make_regular_sub_pos(node, shift, size)
 1847|    237|            .visit(v, std::forward<Args>(args)...);
 1848|    237|    }
 1849|    642|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_19concat_both_visitorISC_EEJRNS1_8leaf_posISC_EERNS1_8full_posISC_EEEEEDcT_DpOT0_:
 1813|    405|    {
 1814|    405|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|    405|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE8last_subINS1_19concat_both_visitorISC_EEJRNS1_8leaf_posISC_EERNS1_15regular_sub_posISC_EEEEEDcT_DpOT0_:
 1750|  2.15k|    {
 1751|  2.15k|        auto offset     = relaxed_->d.count - 1;
 1752|  2.15k|        auto child      = node_->inner()[offset];
 1753|  2.15k|        auto child_size = size(offset);
 1754|  2.15k|        auto is_leaf    = shift_ == BL;
 1755|  2.15k|        return is_leaf ? make_leaf_sub_pos(child, child_size).visit(v, args...)
  ------------------
  |  Branch (1755:16): [True: 865, False: 1.29k]
  ------------------
 1756|  2.15k|                       : visit_maybe_relaxed_sub(
 1757|  1.29k|                             child, shift_ - B, child_size, v, args...);
 1758|  2.15k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEENS1_19concat_both_visitorISC_EEJRNS1_8leaf_posISC_EERNS1_15regular_sub_posISC_EEEEEDcPT_jmT0_DpOT1_:
 1838|  1.29k|{
 1839|  1.29k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 1.29k, False: 0]
  ------------------
 1840|  1.29k|    auto relaxed = node->relaxed();
 1841|  1.29k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 656, False: 634]
  ------------------
 1842|    656|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 656, False: 0]
  ------------------
 1843|    656|        return make_relaxed_pos(node, shift, relaxed)
 1844|    656|            .visit(v, std::forward<Args>(args)...);
 1845|    656|    } else {
 1846|    634|        return make_regular_sub_pos(node, shift, size)
 1847|    634|            .visit(v, std::forward<Args>(args)...);
 1848|    634|    }
 1849|  1.29k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_19concat_both_visitorISC_EEJRNS1_8leaf_posISC_EERNS1_15regular_sub_posISC_EEEEEDcT_DpOT0_:
 1813|    656|    {
 1814|    656|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|    656|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE8last_subINS1_19concat_both_visitorISC_EEJRNS1_8leaf_posISC_EERSD_EEEDcT_DpOT0_:
 1750|   202k|    {
 1751|   202k|        auto offset     = relaxed_->d.count - 1;
 1752|   202k|        auto child      = node_->inner()[offset];
 1753|   202k|        auto child_size = size(offset);
 1754|   202k|        auto is_leaf    = shift_ == BL;
 1755|   202k|        return is_leaf ? make_leaf_sub_pos(child, child_size).visit(v, args...)
  ------------------
  |  Branch (1755:16): [True: 35.0k, False: 167k]
  ------------------
 1756|   202k|                       : visit_maybe_relaxed_sub(
 1757|   167k|                             child, shift_ - B, child_size, v, args...);
 1758|   202k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEENS1_19concat_both_visitorISC_EEJRNS1_8leaf_posISC_EERNS1_11relaxed_posISC_EEEEEDcPT_jmT0_DpOT1_:
 1838|   167k|{
 1839|   167k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 167k, False: 0]
  ------------------
 1840|   167k|    auto relaxed = node->relaxed();
 1841|   167k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 164k, False: 3.07k]
  ------------------
 1842|   164k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 164k, False: 0]
  ------------------
 1843|   164k|        return make_relaxed_pos(node, shift, relaxed)
 1844|   164k|            .visit(v, std::forward<Args>(args)...);
 1845|   164k|    } else {
 1846|  3.07k|        return make_regular_sub_pos(node, shift, size)
 1847|  3.07k|            .visit(v, std::forward<Args>(args)...);
 1848|  3.07k|    }
 1849|   167k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_19concat_both_visitorISC_EEJRNS1_8leaf_posISC_EERSD_EEEDcT_DpOT0_:
 1813|   164k|    {
 1814|   164k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|   164k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_26concat_trees_right_visitorISC_EEJRNS1_11relaxed_posISC_EERNS1_8leaf_posISC_EEEEEDcT_DpOT0_:
 1036|  2.82k|    {
 1037|  2.82k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  2.82k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_25concat_trees_left_visitorISC_EEJNS1_8leaf_posISC_EERPSC_RjRmEEEDcT_DpOT0_:
 1036|  6.00k|    {
 1037|  6.00k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  6.00k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEENS1_26concat_trees_right_visitorISC_EEJRNS1_15regular_sub_posISC_EERNS1_8leaf_posISC_EEEEEDcPT_jmT0_DpOT1_:
 1838|  6.00k|{
 1839|  6.00k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 6.00k, False: 0]
  ------------------
 1840|  6.00k|    auto relaxed = node->relaxed();
 1841|  6.00k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 904, False: 5.09k]
  ------------------
 1842|    904|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 904, False: 0]
  ------------------
 1843|    904|        return make_relaxed_pos(node, shift, relaxed)
 1844|    904|            .visit(v, std::forward<Args>(args)...);
 1845|  5.09k|    } else {
 1846|  5.09k|        return make_regular_sub_pos(node, shift, size)
 1847|  5.09k|            .visit(v, std::forward<Args>(args)...);
 1848|  5.09k|    }
 1849|  6.00k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_26concat_trees_right_visitorISC_EEJRNS1_15regular_sub_posISC_EERNS1_8leaf_posISC_EEEEEDcT_DpOT0_:
 1813|    904|    {
 1814|    904|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|    904|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_26concat_trees_right_visitorISC_EEJRSD_RNS1_8leaf_posISC_EEEEEDcT_DpOT0_:
 1036|  5.09k|    {
 1037|  5.09k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  5.09k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_21push_tail_mut_visitorISC_Lb1EEEJRNSA_5applyIS7_E4type4editERPSC_RjEEEDcT_DpOT0_:
 1813|   901k|    {
 1814|   901k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|   901k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE11last_oh_cshINS1_21push_tail_mut_visitorISC_Lb1EEEJRNSA_5applyIS7_E4type4editERPSC_RjEEEDcT_jmDpOT0_:
 1737|   889k|    {
 1738|   889k|        assert(offset_hint == count() - 1);
  ------------------
  |  Branch (1738:9): [True: 889k, False: 0]
  ------------------
 1739|   889k|        assert(child_size_hint == size(offset_hint));
  ------------------
  |  Branch (1739:9): [True: 889k, False: 0]
  ------------------
 1740|   889k|        auto child   = node_->inner()[offset_hint];
 1741|   889k|        auto is_leaf = shift_ == BL;
 1742|   889k|        return is_leaf
  ------------------
  |  Branch (1742:16): [True: 0, False: 889k]
  ------------------
 1743|   889k|                   ? make_leaf_sub_pos(child, child_size_hint).visit(v, args...)
 1744|   889k|                   : visit_maybe_relaxed_sub(
 1745|   889k|                         child, shift_ - B, child_size_hint, v, args...);
 1746|   889k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEENS1_21push_tail_mut_visitorISC_Lb1EEEJRNSA_5applyIS7_E4type4editERPSC_RjEEEDcPT_jmT0_DpOT1_:
 1838|   889k|{
 1839|   889k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 889k, False: 0]
  ------------------
 1840|   889k|    auto relaxed = node->relaxed();
 1841|   889k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 233k, False: 656k]
  ------------------
 1842|   233k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 233k, False: 0]
  ------------------
 1843|   233k|        return make_relaxed_pos(node, shift, relaxed)
 1844|   233k|            .visit(v, std::forward<Args>(args)...);
 1845|   656k|    } else {
 1846|   656k|        return make_regular_sub_pos(node, shift, size)
 1847|   656k|            .visit(v, std::forward<Args>(args)...);
 1848|   656k|    }
 1849|   889k|}
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_21push_tail_mut_visitorISC_Lb1EEEJRNSA_5applyIS7_E4type4editERPSC_RjEEEDcT_DpOT0_:
 1036|   656k|    {
 1037|   656k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|   656k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE7last_ohINS1_21push_tail_mut_visitorISC_Lb1EEEJRNSA_5applyIS7_E4type4editERPSC_EEEDcT_jDpOT0_:
  952|  1.71M|    {
  953|  1.71M|        return last_oh_regular(*this, v, offset_hint, args...);
  954|  1.71M|    }
_ZN5immer6detail4rbts15last_oh_regularIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEENS1_21push_tail_mut_visitorISD_Lb1EEEJRNSB_5applyIS8_E4type4editERPSD_EEEDcOT_T0_jDpOT1_:
  677|  1.71M|{
  678|  1.71M|    assert(offset_hint == p.count() - 1);
  ------------------
  |  Branch (678:5): [True: 1.71M, False: 0]
  ------------------
  679|  1.71M|    constexpr auto B  = bits<Pos>;
  680|  1.71M|    constexpr auto BL = bits_leaf<Pos>;
  681|  1.71M|    auto child        = p.node()->inner()[offset_hint];
  682|  1.71M|    auto is_leaf      = p.shift() == BL;
  683|  1.71M|    return is_leaf ? make_leaf_pos(child, p.size()).visit(v, args...)
  ------------------
  |  Branch (683:12): [True: 0, False: 1.71M]
  ------------------
  684|  1.71M|                   : make_regular_pos(child, p.shift() - B, p.size())
  685|  1.71M|                         .visit(v, args...);
  686|  1.71M|}
_ZN5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_21push_tail_mut_visitorISC_Lb1EEEJRNSA_5applyIS7_E4type4editERPSC_EEEDcT_DpOT0_:
  336|  9.27M|    {
  337|  9.27M|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
  338|  9.27M|    }
_ZN5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE7last_ohINS1_21push_tail_mut_visitorISC_Lb1EEEJRNSA_5applyIS7_E4type4editERPSC_EEEDcT_jDpOT0_:
  330|  7.55M|    {
  331|  7.55M|        return last_oh_regular(*this, v, offset_hint, args...);
  332|  7.55M|    }
_ZN5immer6detail4rbts15last_oh_regularIRNS1_11regular_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEENS1_21push_tail_mut_visitorISD_Lb1EEEJRNSB_5applyIS8_E4type4editERPSD_EEEDcOT_T0_jDpOT1_:
  677|  7.55M|{
  678|  7.55M|    assert(offset_hint == p.count() - 1);
  ------------------
  |  Branch (678:5): [True: 7.55M, False: 0]
  ------------------
  679|  7.55M|    constexpr auto B  = bits<Pos>;
  680|  7.55M|    constexpr auto BL = bits_leaf<Pos>;
  681|  7.55M|    auto child        = p.node()->inner()[offset_hint];
  682|  7.55M|    auto is_leaf      = p.shift() == BL;
  683|  7.55M|    return is_leaf ? make_leaf_pos(child, p.size()).visit(v, args...)
  ------------------
  |  Branch (683:12): [True: 0, False: 7.55M]
  ------------------
  684|  7.55M|                   : make_regular_pos(child, p.shift() - B, p.size())
  685|  7.55M|                         .visit(v, args...);
  686|  7.55M|}
_ZN5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE7last_ohINS1_21push_tail_mut_visitorISC_Lb0EEEJRNSA_5applyIS7_E4type4editERPSC_EEEDcT_jDpOT0_:
  330|  3.63k|    {
  331|  3.63k|        return last_oh_regular(*this, v, offset_hint, args...);
  332|  3.63k|    }
_ZN5immer6detail4rbts15last_oh_regularIRNS1_11regular_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEENS1_21push_tail_mut_visitorISD_Lb0EEEJRNSB_5applyIS8_E4type4editERPSD_EEEDcOT_T0_jDpOT1_:
  677|  3.63k|{
  678|  3.63k|    assert(offset_hint == p.count() - 1);
  ------------------
  |  Branch (678:5): [True: 3.63k, False: 0]
  ------------------
  679|  3.63k|    constexpr auto B  = bits<Pos>;
  680|  3.63k|    constexpr auto BL = bits_leaf<Pos>;
  681|  3.63k|    auto child        = p.node()->inner()[offset_hint];
  682|  3.63k|    auto is_leaf      = p.shift() == BL;
  683|  3.63k|    return is_leaf ? make_leaf_pos(child, p.size()).visit(v, args...)
  ------------------
  |  Branch (683:12): [True: 0, False: 3.63k]
  ------------------
  684|  3.63k|                   : make_regular_pos(child, p.shift() - B, p.size())
  685|  3.63k|                         .visit(v, args...);
  686|  3.63k|}
_ZN5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_21push_tail_mut_visitorISC_Lb0EEEJRNSA_5applyIS7_E4type4editERPSC_EEEDcT_DpOT0_:
  336|  7.73k|    {
  337|  7.73k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
  338|  7.73k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE7last_ohINS1_21push_tail_mut_visitorISC_Lb0EEEJRNSA_5applyIS7_E4type4editERPSC_EEEDcT_jDpOT0_:
  952|  4.09k|    {
  953|  4.09k|        return last_oh_regular(*this, v, offset_hint, args...);
  954|  4.09k|    }
_ZN5immer6detail4rbts15last_oh_regularIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEENS1_21push_tail_mut_visitorISD_Lb0EEEJRNSB_5applyIS8_E4type4editERPSD_EEEDcOT_T0_jDpOT1_:
  677|  4.09k|{
  678|  4.09k|    assert(offset_hint == p.count() - 1);
  ------------------
  |  Branch (678:5): [True: 4.09k, False: 0]
  ------------------
  679|  4.09k|    constexpr auto B  = bits<Pos>;
  680|  4.09k|    constexpr auto BL = bits_leaf<Pos>;
  681|  4.09k|    auto child        = p.node()->inner()[offset_hint];
  682|  4.09k|    auto is_leaf      = p.shift() == BL;
  683|  4.09k|    return is_leaf ? make_leaf_pos(child, p.size()).visit(v, args...)
  ------------------
  |  Branch (683:12): [True: 0, False: 4.09k]
  ------------------
  684|  4.09k|                   : make_regular_pos(child, p.shift() - B, p.size())
  685|  4.09k|                         .visit(v, args...);
  686|  4.09k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE11last_oh_cshINS1_21push_tail_mut_visitorISC_Lb0EEEJRNSA_5applyIS7_E4type4editERPSC_RjEEEDcT_jmDpOT0_:
 1737|  21.0k|    {
 1738|  21.0k|        assert(offset_hint == count() - 1);
  ------------------
  |  Branch (1738:9): [True: 21.0k, False: 0]
  ------------------
 1739|  21.0k|        assert(child_size_hint == size(offset_hint));
  ------------------
  |  Branch (1739:9): [True: 21.0k, False: 0]
  ------------------
 1740|  21.0k|        auto child   = node_->inner()[offset_hint];
 1741|  21.0k|        auto is_leaf = shift_ == BL;
 1742|  21.0k|        return is_leaf
  ------------------
  |  Branch (1742:16): [True: 0, False: 21.0k]
  ------------------
 1743|  21.0k|                   ? make_leaf_sub_pos(child, child_size_hint).visit(v, args...)
 1744|  21.0k|                   : visit_maybe_relaxed_sub(
 1745|  21.0k|                         child, shift_ - B, child_size_hint, v, args...);
 1746|  21.0k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEENS1_21push_tail_mut_visitorISC_Lb0EEEJRNSA_5applyIS7_E4type4editERPSC_RjEEEDcPT_jmT0_DpOT1_:
 1838|  21.0k|{
 1839|  21.0k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 21.0k, False: 0]
  ------------------
 1840|  21.0k|    auto relaxed = node->relaxed();
 1841|  21.0k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 18.1k, False: 2.95k]
  ------------------
 1842|  18.1k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 18.1k, False: 0]
  ------------------
 1843|  18.1k|        return make_relaxed_pos(node, shift, relaxed)
 1844|  18.1k|            .visit(v, std::forward<Args>(args)...);
 1845|  18.1k|    } else {
 1846|  2.95k|        return make_regular_sub_pos(node, shift, size)
 1847|  2.95k|            .visit(v, std::forward<Args>(args)...);
 1848|  2.95k|    }
 1849|  21.0k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_21push_tail_mut_visitorISC_Lb0EEEJRNSA_5applyIS7_E4type4editERPSC_RjEEEDcT_DpOT0_:
 1813|  18.1k|    {
 1814|  18.1k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  18.1k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_21push_tail_mut_visitorISC_Lb0EEEJRNSA_5applyIS7_E4type4editERPSC_RjEEEDcT_DpOT0_:
 1036|  2.95k|    {
 1037|  2.95k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  2.95k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_21push_tail_mut_visitorISC_Lb1EEEJRNSA_5applyIS7_E4type4editERPSC_EEEDcT_DpOT0_:
 1036|  1.08M|    {
 1037|  1.08M|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  1.08M|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEENS1_15get_mut_visitorISC_EEJRmRNSA_5applyIS7_E4type4editEPPSC_EEEDcPT_jmT0_DpOT1_:
 1838|  9.83k|{
 1839|  9.83k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 9.83k, False: 0]
  ------------------
 1840|  9.83k|    auto relaxed = node->relaxed();
 1841|  9.83k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 4.91k, False: 4.91k]
  ------------------
 1842|  4.91k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 4.91k, False: 0]
  ------------------
 1843|  4.91k|        return make_relaxed_pos(node, shift, relaxed)
 1844|  4.91k|            .visit(v, std::forward<Args>(args)...);
 1845|  4.91k|    } else {
 1846|  4.91k|        return make_regular_sub_pos(node, shift, size)
 1847|  4.91k|            .visit(v, std::forward<Args>(args)...);
 1848|  4.91k|    }
 1849|  9.83k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_15get_mut_visitorISC_EEJRmRNSA_5applyIS7_E4type4editEPPSC_EEEDcT_DpOT0_:
 1813|  4.91k|    {
 1814|  4.91k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  4.91k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10towards_ohINS1_15get_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editEPPSC_EEEDcT_mjDpOT0_:
 1686|  21.9k|    {
 1687|  21.9k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1687:9): [True: 21.9k, False: 0]
  ------------------
 1688|  21.9k|        auto left_size = offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0;
  ------------------
  |  Branch (1688:26): [True: 4.33k, False: 17.5k]
  ------------------
 1689|  21.9k|        return towards_oh_sbh(v, idx, offset_hint, left_size, args...);
 1690|  21.9k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE14towards_oh_sbhINS1_15get_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editERPPSC_EEEDcT_mjmDpOT0_:
 1698|  21.9k|    {
 1699|  21.9k|        return towards_sub_oh_sbh(v, idx, offset_hint, left_size_hint, args...);
 1700|  21.9k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE18towards_sub_oh_sbhINS1_15get_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editERPPSC_EEEDcT_mjmDpOT0_:
 1717|  21.9k|    {
 1718|  21.9k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1718:9): [True: 21.9k, False: 0]
  ------------------
 1719|  21.9k|        assert(left_size_hint ==
  ------------------
  |  Branch (1719:9): [True: 4.33k, False: 17.5k]
  |  Branch (1719:9): [True: 21.9k, False: 0]
  ------------------
 1720|  21.9k|               (offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0));
 1721|  21.9k|        auto child     = node_->inner()[offset_hint];
 1722|  21.9k|        auto is_leaf   = shift_ == BL;
 1723|  21.9k|        auto next_size = relaxed_->d.sizes[offset_hint] - left_size_hint;
 1724|  21.9k|        auto next_idx  = idx - left_size_hint;
 1725|  21.9k|        return is_leaf
  ------------------
  |  Branch (1725:16): [True: 3.32k, False: 18.5k]
  ------------------
 1726|  21.9k|                   ? make_leaf_sub_pos(child, next_size)
 1727|  3.32k|                         .visit(v, next_idx, args...)
 1728|  21.9k|                   : visit_maybe_relaxed_sub(
 1729|  18.5k|                         child, shift_ - B, next_size, v, next_idx, args...);
 1730|  21.9k|    }
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_15get_mut_visitorISC_EEJRmRNSA_5applyIS7_E4type4editERPPSC_EEEDcT_DpOT0_:
  144|  3.32k|    {
  145|  3.32k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  146|  3.32k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEENS1_15get_mut_visitorISC_EEJRmRNSA_5applyIS7_E4type4editERPPSC_EEEDcPT_jmT0_DpOT1_:
 1838|  18.5k|{
 1839|  18.5k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 18.5k, False: 0]
  ------------------
 1840|  18.5k|    auto relaxed = node->relaxed();
 1841|  18.5k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 17.0k, False: 1.59k]
  ------------------
 1842|  17.0k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 17.0k, False: 0]
  ------------------
 1843|  17.0k|        return make_relaxed_pos(node, shift, relaxed)
 1844|  17.0k|            .visit(v, std::forward<Args>(args)...);
 1845|  17.0k|    } else {
 1846|  1.59k|        return make_regular_sub_pos(node, shift, size)
 1847|  1.59k|            .visit(v, std::forward<Args>(args)...);
 1848|  1.59k|    }
 1849|  18.5k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_15get_mut_visitorISC_EEJRmRNSA_5applyIS7_E4type4editERPPSC_EEEDcT_DpOT0_:
 1813|  17.0k|    {
 1814|  17.0k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  17.0k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_15get_mut_visitorISC_EEJRmRNSA_5applyIS7_E4type4editERPPSC_EEEDcT_DpOT0_:
 1036|  1.59k|    {
 1037|  1.59k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  1.59k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE13towards_oh_chINS1_15get_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editEPPSC_EEEDcT_mjjDpOT0_:
  938|  6.51k|    {
  939|  6.51k|        return towards_oh_ch_regular(
  940|  6.51k|            *this, v, idx, offset_hint, count(), args...);
  941|  6.51k|    }
_ZN5immer6detail4rbts21towards_oh_ch_regularIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEENS1_15get_mut_visitorISD_EEJRNSB_5applyIS8_E4type4editERPPSD_EEEDcOT_T0_mjjDpOT1_:
  632|  6.51k|{
  633|  6.51k|    constexpr auto B  = bits<Pos>;
  634|  6.51k|    constexpr auto BL = bits_leaf<Pos>;
  635|  6.51k|    assert(offset_hint == p.index(idx));
  ------------------
  |  Branch (635:5): [True: 6.51k, False: 0]
  ------------------
  636|  6.51k|    assert(count_hint == p.count());
  ------------------
  |  Branch (636:5): [True: 6.51k, False: 0]
  ------------------
  637|  6.51k|    auto is_leaf = p.shift() == BL;
  638|  6.51k|    auto child   = p.node()->inner()[offset_hint];
  639|  6.51k|    auto is_full = offset_hint + 1 != count_hint;
  640|  6.51k|    return is_full
  ------------------
  |  Branch (640:12): [True: 4.33k, False: 2.17k]
  ------------------
  641|  6.51k|               ? (is_leaf ? make_full_leaf_pos(child).visit(v, idx, args...)
  ------------------
  |  Branch (641:19): [True: 769, False: 3.56k]
  ------------------
  642|  4.33k|                          : make_full_pos(child, p.shift() - B)
  643|  3.56k|                                .visit(v, idx, args...))
  644|  6.51k|               : (is_leaf
  ------------------
  |  Branch (644:19): [True: 780, False: 1.39k]
  ------------------
  645|  2.17k|                      ? make_leaf_pos(child, p.size()).visit(v, idx, args...)
  646|  2.17k|                      : make_regular_pos(child, p.shift() - B, p.size())
  647|  1.39k|                            .visit(v, idx, args...));
  648|  6.51k|}
_ZN5immer6detail4rbts13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_15get_mut_visitorISC_EEJRmRNSA_5applyIS7_E4type4editERPPSC_EEEDcT_DpOT0_:
  207|  5.04k|    {
  208|  5.04k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  209|  5.04k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_15get_mut_visitorISC_EEJRmRNSA_5applyIS7_E4type4editERPPSC_EEEDcT_DpOT0_:
 1405|  5.85k|    {
 1406|  5.85k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1407|  5.85k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE13towards_oh_chINS1_15get_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editEPPSC_EEEDcT_mjjDpOT0_:
 1329|  5.85k|    {
 1330|  5.85k|        return towards_oh(v, idx, offset_hint, args...);
 1331|  5.85k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10towards_ohINS1_15get_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editERPPSC_EEEDcT_mjDpOT0_:
 1336|  5.85k|    {
 1337|  5.85k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1337:9): [True: 5.85k, False: 0]
  ------------------
 1338|  5.85k|        auto is_leaf = shift_ == BL;
 1339|  5.85k|        auto child   = node_->inner()[offset_hint];
 1340|  5.85k|        return is_leaf
  ------------------
  |  Branch (1340:16): [True: 3.78k, False: 2.06k]
  ------------------
 1341|  5.85k|                   ? make_full_leaf_pos(child).visit(v, idx, args...)
 1342|  5.85k|                   : make_full_pos(child, shift_ - B).visit(v, idx, args...);
 1343|  5.85k|    }
_ZN5immer6detail4rbts8leaf_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_15get_mut_visitorISC_EEJRmRNSA_5applyIS7_E4type4editERPPSC_EEEDcT_DpOT0_:
  112|  1.46k|    {
  113|  1.46k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  114|  1.46k|    }
_ZN5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_15get_mut_visitorISC_EEJRmRNSA_5applyIS7_E4type4editERPPSC_EEEDcT_DpOT0_:
  336|  1.98k|    {
  337|  1.98k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
  338|  1.98k|    }
_ZN5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE13towards_oh_chINS1_15get_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editEPPSC_EEEDcT_mjjDpOT0_:
  316|  1.98k|    {
  317|  1.98k|        return towards_oh_ch_regular(
  318|  1.98k|            *this, v, idx, offset_hint, count(), args...);
  319|  1.98k|    }
_ZN5immer6detail4rbts21towards_oh_ch_regularIRNS1_11regular_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEENS1_15get_mut_visitorISD_EEJRNSB_5applyIS8_E4type4editERPPSD_EEEDcOT_T0_mjjDpOT1_:
  632|  1.98k|{
  633|  1.98k|    constexpr auto B  = bits<Pos>;
  634|  1.98k|    constexpr auto BL = bits_leaf<Pos>;
  635|  1.98k|    assert(offset_hint == p.index(idx));
  ------------------
  |  Branch (635:5): [True: 1.98k, False: 0]
  ------------------
  636|  1.98k|    assert(count_hint == p.count());
  ------------------
  |  Branch (636:5): [True: 1.98k, False: 0]
  ------------------
  637|  1.98k|    auto is_leaf = p.shift() == BL;
  638|  1.98k|    auto child   = p.node()->inner()[offset_hint];
  639|  1.98k|    auto is_full = offset_hint + 1 != count_hint;
  640|  1.98k|    return is_full
  ------------------
  |  Branch (640:12): [True: 709, False: 1.27k]
  ------------------
  641|  1.98k|               ? (is_leaf ? make_full_leaf_pos(child).visit(v, idx, args...)
  ------------------
  |  Branch (641:19): [True: 486, False: 223]
  ------------------
  642|    709|                          : make_full_pos(child, p.shift() - B)
  643|    223|                                .visit(v, idx, args...))
  644|  1.98k|               : (is_leaf
  ------------------
  |  Branch (644:19): [True: 687, False: 590]
  ------------------
  645|  1.27k|                      ? make_leaf_pos(child, p.size()).visit(v, idx, args...)
  646|  1.27k|                      : make_regular_pos(child, p.shift() - B, p.size())
  647|    590|                            .visit(v, idx, args...));
  648|  1.98k|}
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_15get_mut_visitorISC_EEJRmRNSA_5applyIS7_E4type4editEPPSC_EEEDcT_DpOT0_:
 1036|  4.91k|    {
 1037|  4.91k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  4.91k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEENS1_23slice_right_mut_visitorISC_Lb1ELb1EEEJRmRNSA_5applyIS7_E4type4editEEEEDcPT_jmT0_DpOT1_:
 1838|  66.5k|{
 1839|  66.5k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 66.5k, False: 0]
  ------------------
 1840|  66.5k|    auto relaxed = node->relaxed();
 1841|  66.5k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 51.9k, False: 14.6k]
  ------------------
 1842|  51.9k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 51.9k, False: 0]
  ------------------
 1843|  51.9k|        return make_relaxed_pos(node, shift, relaxed)
 1844|  51.9k|            .visit(v, std::forward<Args>(args)...);
 1845|  51.9k|    } else {
 1846|  14.6k|        return make_regular_sub_pos(node, shift, size)
 1847|  14.6k|            .visit(v, std::forward<Args>(args)...);
 1848|  14.6k|    }
 1849|  66.5k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_23slice_right_mut_visitorISC_Lb1ELb1EEEJRmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
 1813|  51.9k|    {
 1814|  51.9k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  51.9k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10towards_ohINS1_23slice_right_mut_visitorISC_Lb1ELb1EEEJRNSA_5applyIS7_E4type4editEEEEDcT_mjDpOT0_:
 1686|  35.2k|    {
 1687|  35.2k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1687:9): [True: 35.2k, False: 0]
  ------------------
 1688|  35.2k|        auto left_size = offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0;
  ------------------
  |  Branch (1688:26): [True: 0, False: 35.2k]
  ------------------
 1689|  35.2k|        return towards_oh_sbh(v, idx, offset_hint, left_size, args...);
 1690|  35.2k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE14towards_oh_sbhINS1_23slice_right_mut_visitorISC_Lb1ELb1EEEJRNSA_5applyIS7_E4type4editEEEEDcT_mjmDpOT0_:
 1698|  35.2k|    {
 1699|  35.2k|        return towards_sub_oh_sbh(v, idx, offset_hint, left_size_hint, args...);
 1700|  35.2k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE18towards_sub_oh_sbhINS1_23slice_right_mut_visitorISC_Lb1ELb1EEEJRNSA_5applyIS7_E4type4editEEEEDcT_mjmDpOT0_:
 1717|  35.2k|    {
 1718|  35.2k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1718:9): [True: 35.2k, False: 0]
  ------------------
 1719|  35.2k|        assert(left_size_hint ==
  ------------------
  |  Branch (1719:9): [True: 0, False: 35.2k]
  |  Branch (1719:9): [True: 35.2k, False: 0]
  ------------------
 1720|  35.2k|               (offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0));
 1721|  35.2k|        auto child     = node_->inner()[offset_hint];
 1722|  35.2k|        auto is_leaf   = shift_ == BL;
 1723|  35.2k|        auto next_size = relaxed_->d.sizes[offset_hint] - left_size_hint;
 1724|  35.2k|        auto next_idx  = idx - left_size_hint;
 1725|  35.2k|        return is_leaf
  ------------------
  |  Branch (1725:16): [True: 2.25k, False: 32.9k]
  ------------------
 1726|  35.2k|                   ? make_leaf_sub_pos(child, next_size)
 1727|  2.25k|                         .visit(v, next_idx, args...)
 1728|  35.2k|                   : visit_maybe_relaxed_sub(
 1729|  32.9k|                         child, shift_ - B, next_size, v, next_idx, args...);
 1730|  35.2k|    }
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_23slice_right_mut_visitorISC_Lb1ELb1EEEJRmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
  144|  2.25k|    {
  145|  2.25k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  146|  2.25k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10towards_ohINS1_23slice_right_mut_visitorISC_Lb1ELb0EEEJRNSA_5applyIS7_E4type4editEEEEDcT_mjDpOT0_:
 1686|  23.7k|    {
 1687|  23.7k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1687:9): [True: 23.7k, False: 0]
  ------------------
 1688|  23.7k|        auto left_size = offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0;
  ------------------
  |  Branch (1688:26): [True: 0, False: 23.7k]
  ------------------
 1689|  23.7k|        return towards_oh_sbh(v, idx, offset_hint, left_size, args...);
 1690|  23.7k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE14towards_oh_sbhINS1_23slice_right_mut_visitorISC_Lb1ELb0EEEJRNSA_5applyIS7_E4type4editEEEEDcT_mjmDpOT0_:
 1698|  23.7k|    {
 1699|  23.7k|        return towards_sub_oh_sbh(v, idx, offset_hint, left_size_hint, args...);
 1700|  23.7k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE18towards_sub_oh_sbhINS1_23slice_right_mut_visitorISC_Lb1ELb0EEEJRNSA_5applyIS7_E4type4editEEEEDcT_mjmDpOT0_:
 1717|  23.7k|    {
 1718|  23.7k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1718:9): [True: 23.7k, False: 0]
  ------------------
 1719|  23.7k|        assert(left_size_hint ==
  ------------------
  |  Branch (1719:9): [True: 0, False: 23.7k]
  |  Branch (1719:9): [True: 23.7k, False: 0]
  ------------------
 1720|  23.7k|               (offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0));
 1721|  23.7k|        auto child     = node_->inner()[offset_hint];
 1722|  23.7k|        auto is_leaf   = shift_ == BL;
 1723|  23.7k|        auto next_size = relaxed_->d.sizes[offset_hint] - left_size_hint;
 1724|  23.7k|        auto next_idx  = idx - left_size_hint;
 1725|  23.7k|        return is_leaf
  ------------------
  |  Branch (1725:16): [True: 1.01k, False: 22.7k]
  ------------------
 1726|  23.7k|                   ? make_leaf_sub_pos(child, next_size)
 1727|  1.01k|                         .visit(v, next_idx, args...)
 1728|  23.7k|                   : visit_maybe_relaxed_sub(
 1729|  22.7k|                         child, shift_ - B, next_size, v, next_idx, args...);
 1730|  23.7k|    }
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_23slice_right_mut_visitorISC_Lb1ELb0EEEJRmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
  144|  1.01k|    {
  145|  1.01k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  146|  1.01k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEENS1_23slice_right_mut_visitorISC_Lb1ELb0EEEJRmRNSA_5applyIS7_E4type4editEEEEDcPT_jmT0_DpOT1_:
 1838|  22.7k|{
 1839|  22.7k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 22.7k, False: 0]
  ------------------
 1840|  22.7k|    auto relaxed = node->relaxed();
 1841|  22.7k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 21.6k, False: 1.09k]
  ------------------
 1842|  21.6k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 21.6k, False: 0]
  ------------------
 1843|  21.6k|        return make_relaxed_pos(node, shift, relaxed)
 1844|  21.6k|            .visit(v, std::forward<Args>(args)...);
 1845|  21.6k|    } else {
 1846|  1.09k|        return make_regular_sub_pos(node, shift, size)
 1847|  1.09k|            .visit(v, std::forward<Args>(args)...);
 1848|  1.09k|    }
 1849|  22.7k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_23slice_right_mut_visitorISC_Lb1ELb0EEEJRmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
 1813|  21.6k|    {
 1814|  21.6k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  21.6k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_23slice_right_mut_visitorISC_Lb1ELb0EEEJRmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
 1036|  1.09k|    {
 1037|  1.09k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  1.09k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10towards_ohINS1_23slice_right_mut_visitorISC_Lb1ELb0EEEJRNSA_5applyIS7_E4type4editEEEEDcT_mjDpOT0_:
  927|  3.19k|    {
  928|  3.19k|        return towards_oh_ch_regular(
  929|  3.19k|            *this, v, idx, offset_hint, count(), args...);
  930|  3.19k|    }
_ZN5immer6detail4rbts21towards_oh_ch_regularIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEENS1_23slice_right_mut_visitorISD_Lb1ELb0EEEJRNSB_5applyIS8_E4type4editEEEEDcOT_T0_mjjDpOT1_:
  632|  3.19k|{
  633|  3.19k|    constexpr auto B  = bits<Pos>;
  634|  3.19k|    constexpr auto BL = bits_leaf<Pos>;
  635|  3.19k|    assert(offset_hint == p.index(idx));
  ------------------
  |  Branch (635:5): [True: 3.19k, False: 0]
  ------------------
  636|  3.19k|    assert(count_hint == p.count());
  ------------------
  |  Branch (636:5): [True: 3.19k, False: 0]
  ------------------
  637|  3.19k|    auto is_leaf = p.shift() == BL;
  638|  3.19k|    auto child   = p.node()->inner()[offset_hint];
  639|  3.19k|    auto is_full = offset_hint + 1 != count_hint;
  640|  3.19k|    return is_full
  ------------------
  |  Branch (640:12): [True: 2.43k, False: 764]
  ------------------
  641|  3.19k|               ? (is_leaf ? make_full_leaf_pos(child).visit(v, idx, args...)
  ------------------
  |  Branch (641:19): [True: 647, False: 1.78k]
  ------------------
  642|  2.43k|                          : make_full_pos(child, p.shift() - B)
  643|  1.78k|                                .visit(v, idx, args...))
  644|  3.19k|               : (is_leaf
  ------------------
  |  Branch (644:19): [True: 764, False: 0]
  ------------------
  645|    764|                      ? make_leaf_pos(child, p.size()).visit(v, idx, args...)
  646|    764|                      : make_regular_pos(child, p.shift() - B, p.size())
  647|      0|                            .visit(v, idx, args...));
  648|  3.19k|}
_ZN5immer6detail4rbts13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_23slice_right_mut_visitorISC_Lb1ELb0EEEJRmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
  207|  1.47k|    {
  208|  1.47k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  209|  1.47k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_23slice_right_mut_visitorISC_Lb1ELb0EEEJRmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
 1405|  2.17k|    {
 1406|  2.17k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1407|  2.17k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10towards_ohINS1_23slice_right_mut_visitorISC_Lb1ELb0EEEJRNSA_5applyIS7_E4type4editEEEEDcT_mjDpOT0_:
 1336|  1.20k|    {
 1337|  1.20k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1337:9): [True: 1.20k, False: 0]
  ------------------
 1338|  1.20k|        auto is_leaf = shift_ == BL;
 1339|  1.20k|        auto child   = node_->inner()[offset_hint];
 1340|  1.20k|        return is_leaf
  ------------------
  |  Branch (1340:16): [True: 823, False: 385]
  ------------------
 1341|  1.20k|                   ? make_full_leaf_pos(child).visit(v, idx, args...)
 1342|  1.20k|                   : make_full_pos(child, shift_ - B).visit(v, idx, args...);
 1343|  1.20k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10towards_ohINS1_23slice_right_mut_visitorISC_Lb0ELb1EEEJRNSA_5applyIS7_E4type4editEEEEDcT_mjDpOT0_:
 1336|  1.65k|    {
 1337|  1.65k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1337:9): [True: 1.65k, False: 0]
  ------------------
 1338|  1.65k|        auto is_leaf = shift_ == BL;
 1339|  1.65k|        auto child   = node_->inner()[offset_hint];
 1340|  1.65k|        return is_leaf
  ------------------
  |  Branch (1340:16): [True: 930, False: 729]
  ------------------
 1341|  1.65k|                   ? make_full_leaf_pos(child).visit(v, idx, args...)
 1342|  1.65k|                   : make_full_pos(child, shift_ - B).visit(v, idx, args...);
 1343|  1.65k|    }
_ZN5immer6detail4rbts13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_23slice_right_mut_visitorISC_Lb0ELb1EEEJRmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
  207|  2.51k|    {
  208|  2.51k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  209|  2.51k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_23slice_right_mut_visitorISC_Lb0ELb1EEEJRmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
 1405|  2.81k|    {
 1406|  2.81k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1407|  2.81k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_17dec_right_visitorEJjEEEDcT_DpOT0_:
 1405|  1.83k|    {
 1406|  1.83k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1407|  1.83k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10towards_ohINS1_23slice_right_mut_visitorISC_Lb0ELb0EEEJRNSA_5applyIS7_E4type4editEEEEDcT_mjDpOT0_:
 1336|  8.12k|    {
 1337|  8.12k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1337:9): [True: 8.12k, False: 0]
  ------------------
 1338|  8.12k|        auto is_leaf = shift_ == BL;
 1339|  8.12k|        auto child   = node_->inner()[offset_hint];
 1340|  8.12k|        return is_leaf
  ------------------
  |  Branch (1340:16): [True: 5.77k, False: 2.35k]
  ------------------
 1341|  8.12k|                   ? make_full_leaf_pos(child).visit(v, idx, args...)
 1342|  8.12k|                   : make_full_pos(child, shift_ - B).visit(v, idx, args...);
 1343|  8.12k|    }
_ZN5immer6detail4rbts13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_23slice_right_mut_visitorISC_Lb0ELb0EEEJRmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
  207|  7.53k|    {
  208|  7.53k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  209|  7.53k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_23slice_right_mut_visitorISC_Lb0ELb0EEEJRmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
 1405|  4.37k|    {
 1406|  4.37k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1407|  4.37k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10each_rightINS1_11dec_visitorEJEEEvT_jDpOT0_:
 1310|  1.60k|    {
 1311|  1.60k|        each_i(v, start, branches<B>, args...);
 1312|  1.60k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE6each_iINS1_11dec_visitorEJEEEvT_jjDpOT0_:
 1263|  1.60k|    {
 1264|  1.60k|        auto p = node_->inner() + i;
 1265|  1.60k|        auto e = node_->inner() + n;
 1266|  1.60k|        if (shift_ == BL) {
  ------------------
  |  Branch (1266:13): [True: 924, False: 681]
  ------------------
 1267|  1.37k|            for (; p != e; ++p) {
  ------------------
  |  Branch (1267:20): [True: 454, False: 924]
  ------------------
 1268|    454|                IMMER_PREFETCH(p + 1);
 1269|    454|                make_full_leaf_pos(*p).visit(v, args...);
 1270|    454|            }
 1271|    924|        } else {
 1272|    681|            auto ss = shift_ - B;
 1273|  1.28k|            for (; p != e; ++p)
  ------------------
  |  Branch (1273:20): [True: 607, False: 681]
  ------------------
 1274|    607|                make_full_pos(*p, ss).visit(v, args...);
 1275|    681|        }
 1276|  1.60k|    }
_ZN5immer6detail4rbts8leaf_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_23slice_right_mut_visitorISC_Lb1ELb0EEEJRmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
  112|    764|    {
  113|    764|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  114|    764|    }
_ZN5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10towards_ohINS1_23slice_right_mut_visitorISC_Lb0ELb1EEEJRNSA_5applyIS7_E4type4editEEEEDcT_mjDpOT0_:
  305|  3.50k|    {
  306|  3.50k|        return towards_oh_ch_regular(
  307|  3.50k|            *this, v, idx, offset_hint, count(), args...);
  308|  3.50k|    }
_ZN5immer6detail4rbts21towards_oh_ch_regularIRNS1_11regular_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEENS1_23slice_right_mut_visitorISD_Lb0ELb1EEEJRNSB_5applyIS8_E4type4editEEEEDcOT_T0_mjjDpOT1_:
  632|  3.50k|{
  633|  3.50k|    constexpr auto B  = bits<Pos>;
  634|  3.50k|    constexpr auto BL = bits_leaf<Pos>;
  635|  3.50k|    assert(offset_hint == p.index(idx));
  ------------------
  |  Branch (635:5): [True: 3.50k, False: 0]
  ------------------
  636|  3.50k|    assert(count_hint == p.count());
  ------------------
  |  Branch (636:5): [True: 3.50k, False: 0]
  ------------------
  637|  3.50k|    auto is_leaf = p.shift() == BL;
  638|  3.50k|    auto child   = p.node()->inner()[offset_hint];
  639|  3.50k|    auto is_full = offset_hint + 1 != count_hint;
  640|  3.50k|    return is_full
  ------------------
  |  Branch (640:12): [True: 1.44k, False: 2.06k]
  ------------------
  641|  3.50k|               ? (is_leaf ? make_full_leaf_pos(child).visit(v, idx, args...)
  ------------------
  |  Branch (641:19): [True: 840, False: 601]
  ------------------
  642|  1.44k|                          : make_full_pos(child, p.shift() - B)
  643|    601|                                .visit(v, idx, args...))
  644|  3.50k|               : (is_leaf
  ------------------
  |  Branch (644:19): [True: 1.42k, False: 642]
  ------------------
  645|  2.06k|                      ? make_leaf_pos(child, p.size()).visit(v, idx, args...)
  646|  2.06k|                      : make_regular_pos(child, p.shift() - B, p.size())
  647|    642|                            .visit(v, idx, args...));
  648|  3.50k|}
_ZN5immer6detail4rbts8leaf_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_23slice_right_mut_visitorISC_Lb0ELb1EEEJRmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
  112|  2.66k|    {
  113|  2.66k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  114|  2.66k|    }
_ZN5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_23slice_right_mut_visitorISC_Lb0ELb1EEEJRmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
  336|  3.99k|    {
  337|  3.99k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
  338|  3.99k|    }
_ZN5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_17dec_right_visitorEJjEEEDcT_DpOT0_:
  336|  1.04k|    {
  337|  1.04k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
  338|  1.04k|    }
_ZN5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10towards_ohINS1_23slice_right_mut_visitorISC_Lb0ELb0EEEJRNSA_5applyIS7_E4type4editEEEEDcT_mjDpOT0_:
  305|  3.00k|    {
  306|  3.00k|        return towards_oh_ch_regular(
  307|  3.00k|            *this, v, idx, offset_hint, count(), args...);
  308|  3.00k|    }
_ZN5immer6detail4rbts21towards_oh_ch_regularIRNS1_11regular_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEENS1_23slice_right_mut_visitorISD_Lb0ELb0EEEJRNSB_5applyIS8_E4type4editEEEEDcOT_T0_mjjDpOT1_:
  632|  3.00k|{
  633|  3.00k|    constexpr auto B  = bits<Pos>;
  634|  3.00k|    constexpr auto BL = bits_leaf<Pos>;
  635|  3.00k|    assert(offset_hint == p.index(idx));
  ------------------
  |  Branch (635:5): [True: 3.00k, False: 0]
  ------------------
  636|  3.00k|    assert(count_hint == p.count());
  ------------------
  |  Branch (636:5): [True: 3.00k, False: 0]
  ------------------
  637|  3.00k|    auto is_leaf = p.shift() == BL;
  638|  3.00k|    auto child   = p.node()->inner()[offset_hint];
  639|  3.00k|    auto is_full = offset_hint + 1 != count_hint;
  640|  3.00k|    return is_full
  ------------------
  |  Branch (640:12): [True: 786, False: 2.21k]
  ------------------
  641|  3.00k|               ? (is_leaf ? make_full_leaf_pos(child).visit(v, idx, args...)
  ------------------
  |  Branch (641:19): [True: 502, False: 284]
  ------------------
  642|    786|                          : make_full_pos(child, p.shift() - B)
  643|    284|                                .visit(v, idx, args...))
  644|  3.00k|               : (is_leaf
  ------------------
  |  Branch (644:19): [True: 1.53k, False: 679]
  ------------------
  645|  2.21k|                      ? make_leaf_pos(child, p.size()).visit(v, idx, args...)
  646|  2.21k|                      : make_regular_pos(child, p.shift() - B, p.size())
  647|    679|                            .visit(v, idx, args...));
  648|  3.00k|}
_ZN5immer6detail4rbts8leaf_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_23slice_right_mut_visitorISC_Lb0ELb0EEEJRmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
  112|  2.82k|    {
  113|  2.82k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  114|  2.82k|    }
_ZN5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_23slice_right_mut_visitorISC_Lb0ELb0EEEJRmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
  336|  2.50k|    {
  337|  2.50k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
  338|  2.50k|    }
_ZN5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10each_rightINS1_11dec_visitorEJEEEvT_jDpOT0_:
  285|  2.53k|    {
  286|  2.53k|        return each_right_regular(*this, v, start, args...);
  287|  2.53k|    }
_ZN5immer6detail4rbts18each_right_regularIRNS1_11regular_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEENS1_11dec_visitorEJEEEvOT_T0_jDpOT1_:
  597|  2.53k|{
  598|  2.53k|    constexpr auto B  = bits<Pos>;
  599|  2.53k|    constexpr auto BL = bits_leaf<Pos>;
  600|       |
  601|  2.53k|    if (p.shift() == BL) {
  ------------------
  |  Branch (601:9): [True: 1.37k, False: 1.15k]
  ------------------
  602|  1.37k|        auto n    = p.node()->inner() + start;
  603|  1.37k|        auto last = p.count() - 1;
  604|  1.37k|        auto e    = p.node()->inner() + last;
  605|  1.37k|        if (n <= e) {
  ------------------
  |  Branch (605:13): [True: 449, False: 923]
  ------------------
  606|    643|            for (; n != e; ++n) {
  ------------------
  |  Branch (606:20): [True: 194, False: 449]
  ------------------
  607|    194|                IMMER_PREFETCH(n + 1);
  608|    194|                make_full_leaf_pos(*n).visit(v, args...);
  609|    194|            }
  610|    449|            make_leaf_pos(*n, p.size()).visit(v, args...);
  611|    449|        }
  612|  1.37k|    } else {
  613|  1.15k|        auto n    = p.node()->inner() + start;
  614|  1.15k|        auto last = p.count() - 1;
  615|  1.15k|        auto e    = p.node()->inner() + last;
  616|  1.15k|        auto ss   = p.shift() - B;
  617|  1.15k|        if (n <= e) {
  ------------------
  |  Branch (617:13): [True: 601, False: 557]
  ------------------
  618|  1.20k|            for (; n != e; ++n)
  ------------------
  |  Branch (618:20): [True: 605, False: 601]
  ------------------
  619|    605|                make_full_pos(*n, ss).visit(v, args...);
  620|    601|            make_regular_pos(*n, ss, p.size()).visit(v, args...);
  621|    601|        }
  622|  1.15k|    }
  623|  2.53k|}
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10towards_ohINS1_23slice_right_mut_visitorISC_Lb0ELb1EEEJRNSA_5applyIS7_E4type4editEEEEDcT_mjDpOT0_:
  927|  6.82k|    {
  928|  6.82k|        return towards_oh_ch_regular(
  929|  6.82k|            *this, v, idx, offset_hint, count(), args...);
  930|  6.82k|    }
_ZN5immer6detail4rbts21towards_oh_ch_regularIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEENS1_23slice_right_mut_visitorISD_Lb0ELb1EEEJRNSB_5applyIS8_E4type4editEEEEDcOT_T0_mjjDpOT1_:
  632|  6.82k|{
  633|  6.82k|    constexpr auto B  = bits<Pos>;
  634|  6.82k|    constexpr auto BL = bits_leaf<Pos>;
  635|  6.82k|    assert(offset_hint == p.index(idx));
  ------------------
  |  Branch (635:5): [True: 6.82k, False: 0]
  ------------------
  636|  6.82k|    assert(count_hint == p.count());
  ------------------
  |  Branch (636:5): [True: 6.82k, False: 0]
  ------------------
  637|  6.82k|    auto is_leaf = p.shift() == BL;
  638|  6.82k|    auto child   = p.node()->inner()[offset_hint];
  639|  6.82k|    auto is_full = offset_hint + 1 != count_hint;
  640|  6.82k|    return is_full
  ------------------
  |  Branch (640:12): [True: 2.22k, False: 4.60k]
  ------------------
  641|  6.82k|               ? (is_leaf ? make_full_leaf_pos(child).visit(v, idx, args...)
  ------------------
  |  Branch (641:19): [True: 747, False: 1.48k]
  ------------------
  642|  2.22k|                          : make_full_pos(child, p.shift() - B)
  643|  1.48k|                                .visit(v, idx, args...))
  644|  6.82k|               : (is_leaf
  ------------------
  |  Branch (644:19): [True: 1.24k, False: 3.35k]
  ------------------
  645|  4.60k|                      ? make_leaf_pos(child, p.size()).visit(v, idx, args...)
  646|  4.60k|                      : make_regular_pos(child, p.shift() - B, p.size())
  647|  3.35k|                            .visit(v, idx, args...));
  648|  6.82k|}
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10towards_ohINS1_23slice_right_mut_visitorISC_Lb0ELb0EEEJRNSA_5applyIS7_E4type4editEEEEDcT_mjDpOT0_:
  927|  6.10k|    {
  928|  6.10k|        return towards_oh_ch_regular(
  929|  6.10k|            *this, v, idx, offset_hint, count(), args...);
  930|  6.10k|    }
_ZN5immer6detail4rbts21towards_oh_ch_regularIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEENS1_23slice_right_mut_visitorISD_Lb0ELb0EEEJRNSB_5applyIS8_E4type4editEEEEDcOT_T0_mjjDpOT1_:
  632|  6.10k|{
  633|  6.10k|    constexpr auto B  = bits<Pos>;
  634|  6.10k|    constexpr auto BL = bits_leaf<Pos>;
  635|  6.10k|    assert(offset_hint == p.index(idx));
  ------------------
  |  Branch (635:5): [True: 6.10k, False: 0]
  ------------------
  636|  6.10k|    assert(count_hint == p.count());
  ------------------
  |  Branch (636:5): [True: 6.10k, False: 0]
  ------------------
  637|  6.10k|    auto is_leaf = p.shift() == BL;
  638|  6.10k|    auto child   = p.node()->inner()[offset_hint];
  639|  6.10k|    auto is_full = offset_hint + 1 != count_hint;
  640|  6.10k|    return is_full
  ------------------
  |  Branch (640:12): [True: 2.99k, False: 3.11k]
  ------------------
  641|  6.10k|               ? (is_leaf ? make_full_leaf_pos(child).visit(v, idx, args...)
  ------------------
  |  Branch (641:19): [True: 1.26k, False: 1.73k]
  ------------------
  642|  2.99k|                          : make_full_pos(child, p.shift() - B)
  643|  1.73k|                                .visit(v, idx, args...))
  644|  6.10k|               : (is_leaf
  ------------------
  |  Branch (644:19): [True: 1.28k, False: 1.82k]
  ------------------
  645|  3.11k|                      ? make_leaf_pos(child, p.size()).visit(v, idx, args...)
  646|  3.11k|                      : make_regular_pos(child, p.shift() - B, p.size())
  647|  1.82k|                            .visit(v, idx, args...));
  648|  6.10k|}
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10each_rightINS1_11dec_visitorEJEEEvT_jDpOT0_:
  867|  5.10k|    {
  868|  5.10k|        return each_right_regular(*this, v, start, args...);
  869|  5.10k|    }
_ZN5immer6detail4rbts18each_right_regularIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEENS1_11dec_visitorEJEEEvOT_T0_jDpOT1_:
  597|  5.10k|{
  598|  5.10k|    constexpr auto B  = bits<Pos>;
  599|  5.10k|    constexpr auto BL = bits_leaf<Pos>;
  600|       |
  601|  5.10k|    if (p.shift() == BL) {
  ------------------
  |  Branch (601:9): [True: 1.42k, False: 3.68k]
  ------------------
  602|  1.42k|        auto n    = p.node()->inner() + start;
  603|  1.42k|        auto last = p.count() - 1;
  604|  1.42k|        auto e    = p.node()->inner() + last;
  605|  1.42k|        if (n <= e) {
  ------------------
  |  Branch (605:13): [True: 744, False: 677]
  ------------------
  606|    949|            for (; n != e; ++n) {
  ------------------
  |  Branch (606:20): [True: 205, False: 744]
  ------------------
  607|    205|                IMMER_PREFETCH(n + 1);
  608|    205|                make_full_leaf_pos(*n).visit(v, args...);
  609|    205|            }
  610|    744|            make_leaf_pos(*n, p.size()).visit(v, args...);
  611|    744|        }
  612|  3.68k|    } else {
  613|  3.68k|        auto n    = p.node()->inner() + start;
  614|  3.68k|        auto last = p.count() - 1;
  615|  3.68k|        auto e    = p.node()->inner() + last;
  616|  3.68k|        auto ss   = p.shift() - B;
  617|  3.68k|        if (n <= e) {
  ------------------
  |  Branch (617:13): [True: 1.28k, False: 2.40k]
  ------------------
  618|  2.00k|            for (; n != e; ++n)
  ------------------
  |  Branch (618:20): [True: 719, False: 1.28k]
  ------------------
  619|    719|                make_full_pos(*n, ss).visit(v, args...);
  620|  1.28k|            make_regular_pos(*n, ss, p.size()).visit(v, args...);
  621|  1.28k|        }
  622|  3.68k|    }
  623|  5.10k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_17dec_right_visitorEJjEEEDcT_DpOT0_:
 1813|  43.1k|    {
 1814|  43.1k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  43.1k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10towards_ohINS1_23slice_right_mut_visitorISC_Lb0ELb1EEEJRNSA_5applyIS7_E4type4editEEEEDcT_mjDpOT0_:
 1686|  18.2k|    {
 1687|  18.2k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1687:9): [True: 18.2k, False: 0]
  ------------------
 1688|  18.2k|        auto left_size = offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0;
  ------------------
  |  Branch (1688:26): [True: 14.8k, False: 3.38k]
  ------------------
 1689|  18.2k|        return towards_oh_sbh(v, idx, offset_hint, left_size, args...);
 1690|  18.2k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE14towards_oh_sbhINS1_23slice_right_mut_visitorISC_Lb0ELb1EEEJRNSA_5applyIS7_E4type4editEEEEDcT_mjmDpOT0_:
 1698|  18.2k|    {
 1699|  18.2k|        return towards_sub_oh_sbh(v, idx, offset_hint, left_size_hint, args...);
 1700|  18.2k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE18towards_sub_oh_sbhINS1_23slice_right_mut_visitorISC_Lb0ELb1EEEJRNSA_5applyIS7_E4type4editEEEEDcT_mjmDpOT0_:
 1717|  18.2k|    {
 1718|  18.2k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1718:9): [True: 18.2k, False: 0]
  ------------------
 1719|  18.2k|        assert(left_size_hint ==
  ------------------
  |  Branch (1719:9): [True: 14.8k, False: 3.38k]
  |  Branch (1719:9): [True: 18.2k, False: 0]
  ------------------
 1720|  18.2k|               (offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0));
 1721|  18.2k|        auto child     = node_->inner()[offset_hint];
 1722|  18.2k|        auto is_leaf   = shift_ == BL;
 1723|  18.2k|        auto next_size = relaxed_->d.sizes[offset_hint] - left_size_hint;
 1724|  18.2k|        auto next_idx  = idx - left_size_hint;
 1725|  18.2k|        return is_leaf
  ------------------
  |  Branch (1725:16): [True: 4.68k, False: 13.5k]
  ------------------
 1726|  18.2k|                   ? make_leaf_sub_pos(child, next_size)
 1727|  4.68k|                         .visit(v, next_idx, args...)
 1728|  18.2k|                   : visit_maybe_relaxed_sub(
 1729|  13.5k|                         child, shift_ - B, next_size, v, next_idx, args...);
 1730|  18.2k|    }
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_23slice_right_mut_visitorISC_Lb0ELb1EEEJRmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
  144|  4.68k|    {
  145|  4.68k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  146|  4.68k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEENS1_23slice_right_mut_visitorISC_Lb0ELb1EEEJRmRNSA_5applyIS7_E4type4editEEEEDcPT_jmT0_DpOT1_:
 1838|  13.5k|{
 1839|  13.5k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 13.5k, False: 0]
  ------------------
 1840|  13.5k|    auto relaxed = node->relaxed();
 1841|  13.5k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 10.9k, False: 2.67k]
  ------------------
 1842|  10.9k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 10.9k, False: 0]
  ------------------
 1843|  10.9k|        return make_relaxed_pos(node, shift, relaxed)
 1844|  10.9k|            .visit(v, std::forward<Args>(args)...);
 1845|  10.9k|    } else {
 1846|  2.67k|        return make_regular_sub_pos(node, shift, size)
 1847|  2.67k|            .visit(v, std::forward<Args>(args)...);
 1848|  2.67k|    }
 1849|  13.5k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_23slice_right_mut_visitorISC_Lb0ELb1EEEJRmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
 1813|  10.9k|    {
 1814|  10.9k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  10.9k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_23slice_right_mut_visitorISC_Lb0ELb1EEEJRmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
 1036|  2.67k|    {
 1037|  2.67k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  2.67k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_17dec_right_visitorEJjEEEDcT_DpOT0_:
 1036|  9.32k|    {
 1037|  9.32k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  9.32k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10towards_ohINS1_23slice_right_mut_visitorISC_Lb0ELb0EEEJRNSA_5applyIS7_E4type4editEEEEDcT_mjDpOT0_:
 1686|  15.1k|    {
 1687|  15.1k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1687:9): [True: 15.1k, False: 0]
  ------------------
 1688|  15.1k|        auto left_size = offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0;
  ------------------
  |  Branch (1688:26): [True: 11.0k, False: 4.18k]
  ------------------
 1689|  15.1k|        return towards_oh_sbh(v, idx, offset_hint, left_size, args...);
 1690|  15.1k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE14towards_oh_sbhINS1_23slice_right_mut_visitorISC_Lb0ELb0EEEJRNSA_5applyIS7_E4type4editEEEEDcT_mjmDpOT0_:
 1698|  15.1k|    {
 1699|  15.1k|        return towards_sub_oh_sbh(v, idx, offset_hint, left_size_hint, args...);
 1700|  15.1k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE18towards_sub_oh_sbhINS1_23slice_right_mut_visitorISC_Lb0ELb0EEEJRNSA_5applyIS7_E4type4editEEEEDcT_mjmDpOT0_:
 1717|  15.1k|    {
 1718|  15.1k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1718:9): [True: 15.1k, False: 0]
  ------------------
 1719|  15.1k|        assert(left_size_hint ==
  ------------------
  |  Branch (1719:9): [True: 11.0k, False: 4.18k]
  |  Branch (1719:9): [True: 15.1k, False: 0]
  ------------------
 1720|  15.1k|               (offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0));
 1721|  15.1k|        auto child     = node_->inner()[offset_hint];
 1722|  15.1k|        auto is_leaf   = shift_ == BL;
 1723|  15.1k|        auto next_size = relaxed_->d.sizes[offset_hint] - left_size_hint;
 1724|  15.1k|        auto next_idx  = idx - left_size_hint;
 1725|  15.1k|        return is_leaf
  ------------------
  |  Branch (1725:16): [True: 5.80k, False: 9.38k]
  ------------------
 1726|  15.1k|                   ? make_leaf_sub_pos(child, next_size)
 1727|  5.80k|                         .visit(v, next_idx, args...)
 1728|  15.1k|                   : visit_maybe_relaxed_sub(
 1729|  9.38k|                         child, shift_ - B, next_size, v, next_idx, args...);
 1730|  15.1k|    }
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_23slice_right_mut_visitorISC_Lb0ELb0EEEJRmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
  144|  5.80k|    {
  145|  5.80k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  146|  5.80k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEENS1_23slice_right_mut_visitorISC_Lb0ELb0EEEJRmRNSA_5applyIS7_E4type4editEEEEDcPT_jmT0_DpOT1_:
 1838|  9.38k|{
 1839|  9.38k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 9.38k, False: 0]
  ------------------
 1840|  9.38k|    auto relaxed = node->relaxed();
 1841|  9.38k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 7.91k, False: 1.46k]
  ------------------
 1842|  7.91k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 7.91k, False: 0]
  ------------------
 1843|  7.91k|        return make_relaxed_pos(node, shift, relaxed)
 1844|  7.91k|            .visit(v, std::forward<Args>(args)...);
 1845|  7.91k|    } else {
 1846|  1.46k|        return make_regular_sub_pos(node, shift, size)
 1847|  1.46k|            .visit(v, std::forward<Args>(args)...);
 1848|  1.46k|    }
 1849|  9.38k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_23slice_right_mut_visitorISC_Lb0ELb0EEEJRmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
 1813|  7.91k|    {
 1814|  7.91k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  7.91k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_23slice_right_mut_visitorISC_Lb0ELb0EEEJRmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
 1036|  1.46k|    {
 1037|  1.46k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  1.46k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10each_rightINS1_11dec_visitorEJEEEvT_jDpOT0_:
 1653|  16.0k|    {
 1654|  16.0k|        assert(start > 0);
  ------------------
  |  Branch (1654:9): [True: 16.0k, False: 0]
  ------------------
 1655|  16.0k|        assert(start <= relaxed_->d.count);
  ------------------
  |  Branch (1655:9): [True: 16.0k, False: 0]
  ------------------
 1656|  16.0k|        auto s = relaxed_->d.sizes[start - 1];
 1657|  16.0k|        auto p = node_->inner();
 1658|  16.0k|        if (shift_ == BL) {
  ------------------
  |  Branch (1658:13): [True: 3.98k, False: 12.0k]
  ------------------
 1659|  7.72k|            for (auto i = start; i < relaxed_->d.count; ++i) {
  ------------------
  |  Branch (1659:34): [True: 3.73k, False: 3.98k]
  ------------------
 1660|  3.73k|                IMMER_PREFETCH(p + i + 1);
 1661|  3.73k|                make_leaf_sub_pos(p[i], relaxed_->d.sizes[i] - s)
 1662|  3.73k|                    .visit(v, args...);
 1663|  3.73k|                s = relaxed_->d.sizes[i];
 1664|  3.73k|                assert(s);
  ------------------
  |  Branch (1664:17): [True: 3.73k, False: 0]
  ------------------
 1665|  3.73k|            }
 1666|  12.0k|        } else {
 1667|  12.0k|            auto ss = shift_ - B;
 1668|  24.8k|            for (auto i = start; i < relaxed_->d.count; ++i) {
  ------------------
  |  Branch (1668:34): [True: 12.7k, False: 12.0k]
  ------------------
 1669|  12.7k|                visit_maybe_relaxed_sub(
 1670|  12.7k|                    p[i], ss, relaxed_->d.sizes[i] - s, v, args...);
 1671|  12.7k|                s = relaxed_->d.sizes[i];
 1672|       |                assert(s);
  ------------------
  |  Branch (1672:17): [True: 12.7k, False: 0]
  ------------------
 1673|  12.7k|            }
 1674|  12.0k|        }
 1675|  16.0k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_23slice_right_mut_visitorISC_Lb1ELb1EEEJRmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
 1036|  14.6k|    {
 1037|  14.6k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  14.6k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10towards_ohINS1_23slice_right_mut_visitorISC_Lb1ELb1EEEJRNSA_5applyIS7_E4type4editEEEEDcT_mjDpOT0_:
  927|  3.71k|    {
  928|  3.71k|        return towards_oh_ch_regular(
  929|  3.71k|            *this, v, idx, offset_hint, count(), args...);
  930|  3.71k|    }
_ZN5immer6detail4rbts21towards_oh_ch_regularIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEENS1_23slice_right_mut_visitorISD_Lb1ELb1EEEJRNSB_5applyIS8_E4type4editEEEEDcOT_T0_mjjDpOT1_:
  632|  3.71k|{
  633|  3.71k|    constexpr auto B  = bits<Pos>;
  634|  3.71k|    constexpr auto BL = bits_leaf<Pos>;
  635|  3.71k|    assert(offset_hint == p.index(idx));
  ------------------
  |  Branch (635:5): [True: 3.71k, False: 0]
  ------------------
  636|  3.71k|    assert(count_hint == p.count());
  ------------------
  |  Branch (636:5): [True: 3.71k, False: 0]
  ------------------
  637|  3.71k|    auto is_leaf = p.shift() == BL;
  638|  3.71k|    auto child   = p.node()->inner()[offset_hint];
  639|  3.71k|    auto is_full = offset_hint + 1 != count_hint;
  640|  3.71k|    return is_full
  ------------------
  |  Branch (640:12): [True: 3.00k, False: 711]
  ------------------
  641|  3.71k|               ? (is_leaf ? make_full_leaf_pos(child).visit(v, idx, args...)
  ------------------
  |  Branch (641:19): [True: 598, False: 2.40k]
  ------------------
  642|  3.00k|                          : make_full_pos(child, p.shift() - B)
  643|  2.40k|                                .visit(v, idx, args...))
  644|  3.71k|               : (is_leaf
  ------------------
  |  Branch (644:19): [True: 711, False: 0]
  ------------------
  645|    711|                      ? make_leaf_pos(child, p.size()).visit(v, idx, args...)
  646|    711|                      : make_regular_pos(child, p.shift() - B, p.size())
  647|      0|                            .visit(v, idx, args...));
  648|  3.71k|}
_ZN5immer6detail4rbts13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_23slice_right_mut_visitorISC_Lb1ELb1EEEJRmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
  207|  1.36k|    {
  208|  1.36k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  209|  1.36k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_23slice_right_mut_visitorISC_Lb1ELb1EEEJRmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
 1405|  2.77k|    {
 1406|  2.77k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1407|  2.77k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10towards_ohINS1_23slice_right_mut_visitorISC_Lb1ELb1EEEJRNSA_5applyIS7_E4type4editEEEEDcT_mjDpOT0_:
 1336|  1.13k|    {
 1337|  1.13k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1337:9): [True: 1.13k, False: 0]
  ------------------
 1338|  1.13k|        auto is_leaf = shift_ == BL;
 1339|  1.13k|        auto child   = node_->inner()[offset_hint];
 1340|  1.13k|        return is_leaf
  ------------------
  |  Branch (1340:16): [True: 765, False: 370]
  ------------------
 1341|  1.13k|                   ? make_full_leaf_pos(child).visit(v, idx, args...)
 1342|  1.13k|                   : make_full_pos(child, shift_ - B).visit(v, idx, args...);
 1343|  1.13k|    }
_ZN5immer6detail4rbts8leaf_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_23slice_right_mut_visitorISC_Lb1ELb1EEEJRmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
  112|    711|    {
  113|    711|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  114|    711|    }
_ZN5immer6detail4rbts25singleton_regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_29concat_trees_left_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_NS1_14empty_leaf_posISC_EESL_RPSC_RjRmEEEDcT_DpOT0_:
  759|  7.18k|    {
  760|  7.18k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
  761|  7.18k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEENS1_30concat_trees_right_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESJ_RNS1_25singleton_regular_sub_posISC_EERNS1_14empty_leaf_posISC_EESJ_EEEDcPT_jmT0_DpOT1_:
 1838|  7.18k|{
 1839|  7.18k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 7.18k, False: 0]
  ------------------
 1840|  7.18k|    auto relaxed = node->relaxed();
 1841|  7.18k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 3.77k, False: 3.40k]
  ------------------
 1842|  3.77k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 3.77k, False: 0]
  ------------------
 1843|  3.77k|        return make_relaxed_pos(node, shift, relaxed)
 1844|  3.77k|            .visit(v, std::forward<Args>(args)...);
 1845|  3.77k|    } else {
 1846|  3.40k|        return make_regular_sub_pos(node, shift, size)
 1847|  3.40k|            .visit(v, std::forward<Args>(args)...);
 1848|  3.40k|    }
 1849|  7.18k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_30concat_trees_right_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RNS1_25singleton_regular_sub_posISC_EERNS1_14empty_leaf_posISC_EESL_EEEDcT_DpOT0_:
 1813|  3.77k|    {
 1814|  3.77k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  3.77k|    }
_ZNK5immer6detail4rbts12null_sub_pos4nodeEv:
  699|   620k|    auto node() const { return nullptr; }
_ZN5immer6detail4rbts25singleton_regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE13each_left_subINS1_25concat_merger_mut_visitorEJRNS1_17concat_merger_mutISC_EERNSA_5applyIS7_E4type4editEEEEvT_DpOT0_:
  744|  7.18k|    {
  745|  7.18k|    }
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_25concat_merger_mut_visitorEJRNS1_17concat_merger_mutISC_EERNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
  144|   618k|    {
  145|   618k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  146|   618k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_25concat_merger_mut_visitorEJRNS1_17concat_merger_mutISC_EERNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
 1813|  2.81M|    {
 1814|  2.81M|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  2.81M|    }
_ZN5immer6detail4rbts12null_sub_pos14each_right_subINS1_25concat_merger_mut_visitorEJRNS1_17concat_merger_mutINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEERNSD_5applyISA_E4type4editEEEEvT_DpOT0_:
  707|   546k|    {
  708|   546k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE9first_subINS1_24concat_right_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RNS1_25singleton_regular_sub_posISC_EERNS1_14empty_leaf_posISC_EESL_EEEDcT_DpOT0_:
 1762|  13.9k|    {
 1763|  13.9k|        auto child      = node_->inner()[0];
 1764|  13.9k|        auto child_size = relaxed_->d.sizes[0];
 1765|  13.9k|        auto is_leaf    = shift_ == BL;
 1766|  13.9k|        assert(child_size);
  ------------------
  |  Branch (1766:9): [True: 13.9k, False: 0]
  ------------------
 1767|  13.9k|        return is_leaf ? make_leaf_sub_pos(child, child_size).visit(v, args...)
  ------------------
  |  Branch (1767:16): [True: 0, False: 13.9k]
  ------------------
 1768|  13.9k|                       : visit_maybe_relaxed_sub(
 1769|  13.9k|                             child, shift_ - B, child_size, v, args...);
 1770|  13.9k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEENS1_24concat_right_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESJ_RNS1_25singleton_regular_sub_posISC_EERNS1_14empty_leaf_posISC_EESJ_EEEDcPT_jmT0_DpOT1_:
 1838|  13.9k|{
 1839|  13.9k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 13.9k, False: 0]
  ------------------
 1840|  13.9k|    auto relaxed = node->relaxed();
 1841|  13.9k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 13.6k, False: 272]
  ------------------
 1842|  13.6k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 13.6k, False: 0]
  ------------------
 1843|  13.6k|        return make_relaxed_pos(node, shift, relaxed)
 1844|  13.6k|            .visit(v, std::forward<Args>(args)...);
 1845|  13.6k|    } else {
 1846|    272|        return make_regular_sub_pos(node, shift, size)
 1847|    272|            .visit(v, std::forward<Args>(args)...);
 1848|    272|    }
 1849|  13.9k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_24concat_right_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RNS1_25singleton_regular_sub_posISC_EERNS1_14empty_leaf_posISC_EESL_EEEDcT_DpOT0_:
 1813|  13.6k|    {
 1814|  13.6k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  13.6k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_24concat_right_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RNS1_25singleton_regular_sub_posISC_EERNS1_14empty_leaf_posISC_EESL_EEEDcT_DpOT0_:
 1036|    272|    {
 1037|    272|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|    272|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE9first_subINS1_24concat_right_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RNS1_25singleton_regular_sub_posISC_EERNS1_14empty_leaf_posISC_EESL_EEEDcT_DpOT0_:
  970|  1.01k|    {
  971|  1.01k|        auto is_leaf = shift_ == BL;
  972|  1.01k|        auto child   = node_->inner()[0];
  973|  1.01k|        auto is_full = size_ >= (size_t{1} << shift_);
  974|  1.01k|        return is_full
  ------------------
  |  Branch (974:16): [True: 1.01k, False: 0]
  ------------------
  975|  1.01k|                   ? (is_leaf
  ------------------
  |  Branch (975:23): [True: 0, False: 1.01k]
  ------------------
  976|  1.01k|                          ? make_full_leaf_pos(child).visit(v, args...)
  977|  1.01k|                          : make_full_pos(child, shift_ - B).visit(v, args...))
  978|  1.01k|                   : (is_leaf
  ------------------
  |  Branch (978:23): [True: 0, False: 0]
  ------------------
  979|      0|                          ? make_leaf_sub_pos(child, size_).visit(v, args...)
  980|      0|                          : make_regular_sub_pos(child, shift_ - B, size_)
  981|      0|                                .visit(v, args...));
  982|  1.01k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_24concat_right_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RNS1_25singleton_regular_sub_posISC_EERNS1_14empty_leaf_posISC_EESL_EEEDcT_DpOT0_:
 1405|  1.77k|    {
 1406|  1.77k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1407|  1.77k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE9first_subINS1_24concat_right_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RNS1_25singleton_regular_sub_posISC_EERNS1_14empty_leaf_posISC_EESL_EEEDcT_DpOT0_:
 1361|    755|    {
 1362|    755|        auto is_leaf = shift_ == BL;
 1363|    755|        auto child   = node_->inner()[0];
 1364|    755|        return is_leaf ? make_full_leaf_pos(child).visit(v, args...)
  ------------------
  |  Branch (1364:16): [True: 0, False: 755]
  ------------------
 1365|    755|                       : make_full_pos(child, shift_ - B).visit(v, args...);
 1366|    755|    }
_ZN5immer6detail4rbts12null_sub_pos13each_left_subINS1_25concat_merger_mut_visitorEJRNS1_17concat_merger_mutINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEERNSD_5applyISA_E4type4editEEEEvT_DpOT0_:
  711|  73.5k|    {
  712|  73.5k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE14each_right_subINS1_25concat_merger_mut_visitorEJRNS1_17concat_merger_mutISC_EERNSA_5applyIS7_E4type4editEEEEvT_DpOT0_:
 1304|  13.8k|    {
 1305|  13.8k|        each_i(v, 1, branches<B>, args...);
 1306|  13.8k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE6each_iINS1_25concat_merger_mut_visitorEJRNS1_17concat_merger_mutISC_EERNSA_5applyIS7_E4type4editEEEEvT_jjDpOT0_:
 1263|  13.8k|    {
 1264|  13.8k|        auto p = node_->inner() + i;
 1265|  13.8k|        auto e = node_->inner() + n;
 1266|  13.8k|        if (shift_ == BL) {
  ------------------
  |  Branch (1266:13): [True: 7.60k, False: 6.22k]
  ------------------
 1267|  30.4k|            for (; p != e; ++p) {
  ------------------
  |  Branch (1267:20): [True: 22.8k, False: 7.60k]
  ------------------
 1268|  22.8k|                IMMER_PREFETCH(p + 1);
 1269|  22.8k|                make_full_leaf_pos(*p).visit(v, args...);
 1270|  22.8k|            }
 1271|  7.60k|        } else {
 1272|  6.22k|            auto ss = shift_ - B;
 1273|  24.8k|            for (; p != e; ++p)
  ------------------
  |  Branch (1273:20): [True: 18.6k, False: 6.22k]
  ------------------
 1274|  18.6k|                make_full_pos(*p, ss).visit(v, args...);
 1275|  6.22k|        }
 1276|  13.8k|    }
_ZN5immer6detail4rbts13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_25concat_merger_mut_visitorEJRNS1_17concat_merger_mutISC_EERNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
  207|  76.2k|    {
  208|  76.2k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  209|  76.2k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_25concat_merger_mut_visitorEJRNS1_17concat_merger_mutISC_EERNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
 1405|   123k|    {
 1406|   123k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1407|   123k|    }
_ZN5immer6detail4rbts25singleton_regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE8last_subINS1_23concat_both_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RNS1_14empty_leaf_posISC_EESL_RNS1_8full_posISC_EEEEEDcT_DpOT0_:
  753|  1.01k|    {
  754|  1.01k|        return make_leaf_sub_pos(leaf_, count_).visit(v, args...);
  755|  1.01k|    }
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_23concat_both_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RNS1_14empty_leaf_posISC_EESL_RNS1_8full_posISC_EEEEEDcT_DpOT0_:
  144|  1.01k|    {
  145|  1.01k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  146|  1.01k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE14first_sub_leafINS1_24concat_right_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RNS1_12leaf_sub_posISC_EERNS1_14empty_leaf_posISC_EESL_EEEDcT_DpOT0_:
 1370|  1.01k|    {
 1371|  1.01k|        assert(shift_ == BL);
  ------------------
  |  Branch (1371:9): [True: 1.01k, False: 0]
  ------------------
 1372|  1.01k|        auto child = node_->inner()[0];
 1373|  1.01k|        return make_full_leaf_pos(child).visit(v, args...);
 1374|  1.01k|    }
_ZN5immer6detail4rbts13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_24concat_right_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RNS1_12leaf_sub_posISC_EERNS1_14empty_leaf_posISC_EESL_EEEDcT_DpOT0_:
  207|  3.67k|    {
  208|  3.67k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  209|  3.67k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE14each_right_subINS1_25concat_merger_mut_visitorEJRNS1_17concat_merger_mutISC_EERNSA_5applyIS7_E4type4editEEEEvT_DpOT0_:
  906|  46.2k|    {
  907|  46.2k|        if (count() > 1)
  ------------------
  |  Branch (907:13): [True: 12.7k, False: 33.5k]
  ------------------
  908|  12.7k|            each_right_sub_(v, 1, args...);
  909|  46.2k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE15each_right_sub_INS1_25concat_merger_mut_visitorEJRNS1_17concat_merger_mutISC_EERNSA_5applyIS7_E4type4editEEEEvT_jDpOT0_:
  879|  12.7k|    {
  880|  12.7k|        auto last  = count() - 1;
  881|  12.7k|        auto lsize = size_ - (last << shift_);
  882|  12.7k|        auto n     = node()->inner() + i;
  883|  12.7k|        auto e     = node()->inner() + last;
  884|  12.7k|        if (shift() == BL) {
  ------------------
  |  Branch (884:13): [True: 5.12k, False: 7.60k]
  ------------------
  885|  10.9k|            for (; n != e; ++n) {
  ------------------
  |  Branch (885:20): [True: 5.85k, False: 5.12k]
  ------------------
  886|  5.85k|                IMMER_PREFETCH(n + 1);
  887|  5.85k|                make_full_leaf_pos(*n).visit(v, args...);
  888|  5.85k|            }
  889|  5.12k|            make_leaf_sub_pos(*n, lsize).visit(v, args...);
  890|  7.60k|        } else {
  891|  7.60k|            auto ss = shift_ - B;
  892|  15.4k|            for (; n != e; ++n)
  ------------------
  |  Branch (892:20): [True: 7.83k, False: 7.60k]
  ------------------
  893|  7.83k|                make_full_pos(*n, ss).visit(v, args...);
  894|  7.60k|            make_regular_sub_pos(*n, ss, lsize).visit(v, args...);
  895|  7.60k|        }
  896|  12.7k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_25concat_merger_mut_visitorEJRNS1_17concat_merger_mutISC_EERNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
 1036|  81.5k|    {
 1037|  81.5k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  81.5k|    }
_ZN5immer6detail4rbts25singleton_regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE8last_subINS1_23concat_both_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RNS1_14empty_leaf_posISC_EESL_RNS1_15regular_sub_posISC_EEEEEDcT_DpOT0_:
  753|  2.65k|    {
  754|  2.65k|        return make_leaf_sub_pos(leaf_, count_).visit(v, args...);
  755|  2.65k|    }
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_23concat_both_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RNS1_14empty_leaf_posISC_EESL_RNS1_15regular_sub_posISC_EEEEEDcT_DpOT0_:
  144|  2.65k|    {
  145|  2.65k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  146|  2.65k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE14first_sub_leafINS1_24concat_right_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RNS1_12leaf_sub_posISC_EERNS1_14empty_leaf_posISC_EESL_EEEDcT_DpOT0_:
  986|  2.65k|    {
  987|  2.65k|        assert(shift_ == BL);
  ------------------
  |  Branch (987:9): [True: 2.65k, False: 0]
  ------------------
  988|  2.65k|        auto child   = node_->inner()[0];
  989|  2.65k|        auto is_full = size_ >= branches<BL>;
  990|  2.65k|        return is_full ? make_full_leaf_pos(child).visit(v, args...)
  ------------------
  |  Branch (990:16): [True: 2.65k, False: 0]
  ------------------
  991|  2.65k|                       : make_leaf_sub_pos(child, size_).visit(v, args...);
  992|  2.65k|    }
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_24concat_right_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RSD_RNS1_14empty_leaf_posISC_EESL_EEEDcT_DpOT0_:
  144|  3.50k|    {
  145|  3.50k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  146|  3.50k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE14each_right_subINS1_25concat_merger_mut_visitorEJRNS1_17concat_merger_mutISC_EERNSA_5applyIS7_E4type4editEEEEvT_DpOT0_:
 1647|   402k|    {
 1648|   402k|        each_right(v, 1, std::forward<Args>(args)...);
 1649|   402k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE10each_rightINS1_25concat_merger_mut_visitorEJRNS1_17concat_merger_mutISC_EERNSA_5applyIS7_E4type4editEEEEvT_jDpOT0_:
 1653|   402k|    {
 1654|   402k|        assert(start > 0);
  ------------------
  |  Branch (1654:9): [True: 402k, False: 0]
  ------------------
 1655|   402k|        assert(start <= relaxed_->d.count);
  ------------------
  |  Branch (1655:9): [True: 402k, False: 0]
  ------------------
 1656|   402k|        auto s = relaxed_->d.sizes[start - 1];
 1657|   402k|        auto p = node_->inner();
 1658|   402k|        if (shift_ == BL) {
  ------------------
  |  Branch (1658:13): [True: 71.5k, False: 331k]
  ------------------
 1659|   244k|            for (auto i = start; i < relaxed_->d.count; ++i) {
  ------------------
  |  Branch (1659:34): [True: 172k, False: 71.5k]
  ------------------
 1660|   172k|                IMMER_PREFETCH(p + i + 1);
 1661|   172k|                make_leaf_sub_pos(p[i], relaxed_->d.sizes[i] - s)
 1662|   172k|                    .visit(v, args...);
 1663|   172k|                s = relaxed_->d.sizes[i];
 1664|   172k|                assert(s);
  ------------------
  |  Branch (1664:17): [True: 172k, False: 0]
  ------------------
 1665|   172k|            }
 1666|   331k|        } else {
 1667|   331k|            auto ss = shift_ - B;
 1668|  1.08M|            for (auto i = start; i < relaxed_->d.count; ++i) {
  ------------------
  |  Branch (1668:34): [True: 756k, False: 331k]
  ------------------
 1669|   756k|                visit_maybe_relaxed_sub(
 1670|   756k|                    p[i], ss, relaxed_->d.sizes[i] - s, v, args...);
 1671|   756k|                s = relaxed_->d.sizes[i];
 1672|       |                assert(s);
  ------------------
  |  Branch (1672:17): [True: 756k, False: 0]
  ------------------
 1673|   756k|            }
 1674|   331k|        }
 1675|   402k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEENS1_25concat_merger_mut_visitorEJRNS1_17concat_merger_mutISC_EERNSA_5applyIS7_E4type4editEEEEDcPT_jmT0_DpOT1_:
 1838|  1.67M|{
 1839|  1.67M|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 1.67M, False: 0]
  ------------------
 1840|  1.67M|    auto relaxed = node->relaxed();
 1841|  1.67M|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 1.60M, False: 73.9k]
  ------------------
 1842|  1.60M|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 1.60M, False: 0]
  ------------------
 1843|  1.60M|        return make_relaxed_pos(node, shift, relaxed)
 1844|  1.60M|            .visit(v, std::forward<Args>(args)...);
 1845|  1.60M|    } else {
 1846|  73.9k|        return make_regular_sub_pos(node, shift, size)
 1847|  73.9k|            .visit(v, std::forward<Args>(args)...);
 1848|  73.9k|    }
 1849|  1.67M|}
_ZN5immer6detail4rbts25singleton_regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE8last_subINS1_23concat_both_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RNS1_14empty_leaf_posISC_EESL_RNS1_11relaxed_posISC_EEEEEDcT_DpOT0_:
  753|  3.50k|    {
  754|  3.50k|        return make_leaf_sub_pos(leaf_, count_).visit(v, args...);
  755|  3.50k|    }
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_23concat_both_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RNS1_14empty_leaf_posISC_EESL_RNS1_11relaxed_posISC_EEEEEDcT_DpOT0_:
  144|  3.50k|    {
  145|  3.50k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  146|  3.50k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE14first_sub_leafINS1_24concat_right_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RNS1_12leaf_sub_posISC_EERNS1_14empty_leaf_posISC_EESL_EEEDcT_DpOT0_:
 1774|  3.50k|    {
 1775|  3.50k|        assert(shift_ == BL);
  ------------------
  |  Branch (1775:9): [True: 3.50k, False: 0]
  ------------------
 1776|  3.50k|        auto child      = node_->inner()[0];
 1777|  3.50k|        auto child_size = relaxed_->d.sizes[0];
 1778|  3.50k|        return make_leaf_sub_pos(child, child_size).visit(v, args...);
 1779|  3.50k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_30concat_trees_right_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RNS1_25singleton_regular_sub_posISC_EERNS1_14empty_leaf_posISC_EESL_EEEDcT_DpOT0_:
 1036|  3.40k|    {
 1037|  3.40k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  3.40k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEENS1_29concat_trees_left_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESJ_NS1_8leaf_posISC_EESJ_RPSC_RjRmEEEDcPT_jmT0_DpOT1_:
 1838|   110k|{
 1839|   110k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 110k, False: 0]
  ------------------
 1840|   110k|    auto relaxed = node->relaxed();
 1841|   110k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 104k, False: 6.39k]
  ------------------
 1842|   104k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 104k, False: 0]
  ------------------
 1843|   104k|        return make_relaxed_pos(node, shift, relaxed)
 1844|   104k|            .visit(v, std::forward<Args>(args)...);
 1845|   104k|    } else {
 1846|  6.39k|        return make_regular_sub_pos(node, shift, size)
 1847|  6.39k|            .visit(v, std::forward<Args>(args)...);
 1848|  6.39k|    }
 1849|   110k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_29concat_trees_left_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_NS1_8leaf_posISC_EESL_RPSC_RjRmEEEDcT_DpOT0_:
 1813|   104k|    {
 1814|   104k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|   104k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEENS1_30concat_trees_right_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESJ_RNS1_11relaxed_posISC_EERNS1_8leaf_posISC_EESJ_EEEDcPT_jmT0_DpOT1_:
 1838|   104k|{
 1839|   104k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 104k, False: 0]
  ------------------
 1840|   104k|    auto relaxed = node->relaxed();
 1841|   104k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 68.5k, False: 35.6k]
  ------------------
 1842|  68.5k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 68.5k, False: 0]
  ------------------
 1843|  68.5k|        return make_relaxed_pos(node, shift, relaxed)
 1844|  68.5k|            .visit(v, std::forward<Args>(args)...);
 1845|  68.5k|    } else {
 1846|  35.6k|        return make_regular_sub_pos(node, shift, size)
 1847|  35.6k|            .visit(v, std::forward<Args>(args)...);
 1848|  35.6k|    }
 1849|   104k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_30concat_trees_right_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RSD_RNS1_8leaf_posISC_EESL_EEEDcT_DpOT0_:
 1813|  68.5k|    {
 1814|  68.5k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  68.5k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE8last_subINS1_23concat_left_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RNS1_8leaf_posISC_EESL_RSD_EEEDcT_DpOT0_:
 1750|   333k|    {
 1751|   333k|        auto offset     = relaxed_->d.count - 1;
 1752|   333k|        auto child      = node_->inner()[offset];
 1753|   333k|        auto child_size = size(offset);
 1754|   333k|        auto is_leaf    = shift_ == BL;
 1755|   333k|        return is_leaf ? make_leaf_sub_pos(child, child_size).visit(v, args...)
  ------------------
  |  Branch (1755:16): [True: 0, False: 333k]
  ------------------
 1756|   333k|                       : visit_maybe_relaxed_sub(
 1757|   333k|                             child, shift_ - B, child_size, v, args...);
 1758|   333k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEENS1_23concat_left_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESJ_RNS1_8leaf_posISC_EESJ_RNS1_11relaxed_posISC_EEEEEDcPT_jmT0_DpOT1_:
 1838|   333k|{
 1839|   333k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 333k, False: 0]
  ------------------
 1840|   333k|    auto relaxed = node->relaxed();
 1841|   333k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 332k, False: 1.65k]
  ------------------
 1842|   332k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 332k, False: 0]
  ------------------
 1843|   332k|        return make_relaxed_pos(node, shift, relaxed)
 1844|   332k|            .visit(v, std::forward<Args>(args)...);
 1845|   332k|    } else {
 1846|  1.65k|        return make_regular_sub_pos(node, shift, size)
 1847|  1.65k|            .visit(v, std::forward<Args>(args)...);
 1848|  1.65k|    }
 1849|   333k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_23concat_left_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RNS1_8leaf_posISC_EESL_RSD_EEEDcT_DpOT0_:
 1813|   332k|    {
 1814|   332k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|   332k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_23concat_left_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RNS1_8leaf_posISC_EESL_RNS1_11relaxed_posISC_EEEEEDcT_DpOT0_:
 1036|  3.71k|    {
 1037|  3.71k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  3.71k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE8last_subINS1_23concat_left_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RNS1_8leaf_posISC_EESL_RNS1_11relaxed_posISC_EEEEEDcT_DpOT0_:
  958|  2.05k|    {
  959|  2.05k|        auto offset  = count() - 1;
  960|  2.05k|        auto child   = node_->inner()[offset];
  961|  2.05k|        auto is_leaf = shift_ == BL;
  962|  2.05k|        auto lsize   = size_ - (size_t{offset} << shift_);
  963|  2.05k|        return is_leaf ? make_leaf_sub_pos(child, lsize).visit(v, args...)
  ------------------
  |  Branch (963:16): [True: 0, False: 2.05k]
  ------------------
  964|  2.05k|                       : make_regular_sub_pos(child, shift_ - B, lsize)
  965|  2.05k|                             .visit(v, args...);
  966|  2.05k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE13each_left_subINS1_25concat_merger_mut_visitorEJRNS1_17concat_merger_mutISC_EERNSA_5applyIS7_E4type4editEEEEvT_DpOT0_:
  913|   116k|    {
  914|   116k|        each_left(v, count() - 1, args...);
  915|   116k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE9each_leftINS1_25concat_merger_mut_visitorEJRNS1_17concat_merger_mutISC_EERNSA_5applyIS7_E4type4editEEEEvT_jDpOT0_:
  873|   116k|    {
  874|   116k|        return each_left_regular(*this, v, last, args...);
  875|   116k|    }
_ZN5immer6detail4rbts17each_left_regularIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEENS1_25concat_merger_mut_visitorEJRNS1_17concat_merger_mutISD_EERNSB_5applyIS8_E4type4editEEEEvOT_T0_jDpOT1_:
  575|   116k|{
  576|   116k|    constexpr auto B  = bits<Pos>;
  577|   116k|    constexpr auto BL = bits_leaf<Pos>;
  578|   116k|    assert(last < p.count());
  ------------------
  |  Branch (578:5): [True: 116k, False: 0]
  ------------------
  579|   116k|    if (p.shift() == BL) {
  ------------------
  |  Branch (579:9): [True: 47.1k, False: 69.5k]
  ------------------
  580|  47.1k|        auto n = p.node()->inner();
  581|  47.1k|        auto e = n + last;
  582|  94.7k|        for (; n != e; ++n) {
  ------------------
  |  Branch (582:16): [True: 47.5k, False: 47.1k]
  ------------------
  583|  47.5k|            IMMER_PREFETCH(n + 1);
  584|  47.5k|            make_full_leaf_pos(*n).visit(v, args...);
  585|  47.5k|        }
  586|  69.5k|    } else {
  587|  69.5k|        auto n  = p.node()->inner();
  588|  69.5k|        auto e  = n + last;
  589|  69.5k|        auto ss = p.shift() - B;
  590|   166k|        for (; n != e; ++n)
  ------------------
  |  Branch (590:16): [True: 97.1k, False: 69.5k]
  ------------------
  591|  97.1k|            make_full_pos(*n, ss).visit(v, args...);
  592|  69.5k|    }
  593|   116k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE9first_subINS1_24concat_right_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RNS1_15regular_sub_posISC_EERNS1_8leaf_posISC_EESL_EEEDcT_DpOT0_:
 1762|   104k|    {
 1763|   104k|        auto child      = node_->inner()[0];
 1764|   104k|        auto child_size = relaxed_->d.sizes[0];
 1765|   104k|        auto is_leaf    = shift_ == BL;
 1766|   104k|        assert(child_size);
  ------------------
  |  Branch (1766:9): [True: 104k, False: 0]
  ------------------
 1767|   104k|        return is_leaf ? make_leaf_sub_pos(child, child_size).visit(v, args...)
  ------------------
  |  Branch (1767:16): [True: 0, False: 104k]
  ------------------
 1768|   104k|                       : visit_maybe_relaxed_sub(
 1769|   104k|                             child, shift_ - B, child_size, v, args...);
 1770|   104k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEENS1_24concat_right_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESJ_RNS1_15regular_sub_posISC_EERNS1_8leaf_posISC_EESJ_EEEDcPT_jmT0_DpOT1_:
 1838|   104k|{
 1839|   104k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 104k, False: 0]
  ------------------
 1840|   104k|    auto relaxed = node->relaxed();
 1841|   104k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 101k, False: 2.78k]
  ------------------
 1842|   101k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 101k, False: 0]
  ------------------
 1843|   101k|        return make_relaxed_pos(node, shift, relaxed)
 1844|   101k|            .visit(v, std::forward<Args>(args)...);
 1845|   101k|    } else {
 1846|  2.78k|        return make_regular_sub_pos(node, shift, size)
 1847|  2.78k|            .visit(v, std::forward<Args>(args)...);
 1848|  2.78k|    }
 1849|   104k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_24concat_right_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RNS1_15regular_sub_posISC_EERNS1_8leaf_posISC_EESL_EEEDcT_DpOT0_:
 1813|   101k|    {
 1814|   101k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|   101k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_24concat_right_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RSD_RNS1_8leaf_posISC_EESL_EEEDcT_DpOT0_:
 1036|  2.78k|    {
 1037|  2.78k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  2.78k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE8last_subINS1_23concat_left_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RNS1_8leaf_posISC_EESL_RSD_EEEDcT_DpOT0_:
  958|  1.83k|    {
  959|  1.83k|        auto offset  = count() - 1;
  960|  1.83k|        auto child   = node_->inner()[offset];
  961|  1.83k|        auto is_leaf = shift_ == BL;
  962|  1.83k|        auto lsize   = size_ - (size_t{offset} << shift_);
  963|  1.83k|        return is_leaf ? make_leaf_sub_pos(child, lsize).visit(v, args...)
  ------------------
  |  Branch (963:16): [True: 0, False: 1.83k]
  ------------------
  964|  1.83k|                       : make_regular_sub_pos(child, shift_ - B, lsize)
  965|  1.83k|                             .visit(v, args...);
  966|  1.83k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_23concat_left_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RNS1_8leaf_posISC_EESL_RSD_EEEDcT_DpOT0_:
 1036|  2.42k|    {
 1037|  2.42k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  2.42k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE9first_subINS1_24concat_right_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RSD_RNS1_8leaf_posISC_EESL_EEEDcT_DpOT0_:
  970|  4.69k|    {
  971|  4.69k|        auto is_leaf = shift_ == BL;
  972|  4.69k|        auto child   = node_->inner()[0];
  973|  4.69k|        auto is_full = size_ >= (size_t{1} << shift_);
  974|  4.69k|        return is_full
  ------------------
  |  Branch (974:16): [True: 4.69k, False: 0]
  ------------------
  975|  4.69k|                   ? (is_leaf
  ------------------
  |  Branch (975:23): [True: 0, False: 4.69k]
  ------------------
  976|  4.69k|                          ? make_full_leaf_pos(child).visit(v, args...)
  977|  4.69k|                          : make_full_pos(child, shift_ - B).visit(v, args...))
  978|  4.69k|                   : (is_leaf
  ------------------
  |  Branch (978:23): [True: 0, False: 0]
  ------------------
  979|      0|                          ? make_leaf_sub_pos(child, size_).visit(v, args...)
  980|      0|                          : make_regular_sub_pos(child, shift_ - B, size_)
  981|      0|                                .visit(v, args...));
  982|  4.69k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_24concat_right_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RNS1_15regular_sub_posISC_EERNS1_8leaf_posISC_EESL_EEEDcT_DpOT0_:
 1405|  9.40k|    {
 1406|  9.40k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1407|  9.40k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE9first_subINS1_24concat_right_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RNS1_15regular_sub_posISC_EERNS1_8leaf_posISC_EESL_EEEDcT_DpOT0_:
 1361|  4.70k|    {
 1362|  4.70k|        auto is_leaf = shift_ == BL;
 1363|  4.70k|        auto child   = node_->inner()[0];
 1364|  4.70k|        return is_leaf ? make_full_leaf_pos(child).visit(v, args...)
  ------------------
  |  Branch (1364:16): [True: 0, False: 4.70k]
  ------------------
 1365|  4.70k|                       : make_full_pos(child, shift_ - B).visit(v, args...);
 1366|  4.70k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE8last_subINS1_23concat_both_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RNS1_8leaf_posISC_EESL_RNS1_8full_posISC_EEEEEDcT_DpOT0_:
  958|  9.15k|    {
  959|  9.15k|        auto offset  = count() - 1;
  960|  9.15k|        auto child   = node_->inner()[offset];
  961|  9.15k|        auto is_leaf = shift_ == BL;
  962|  9.15k|        auto lsize   = size_ - (size_t{offset} << shift_);
  963|  9.15k|        return is_leaf ? make_leaf_sub_pos(child, lsize).visit(v, args...)
  ------------------
  |  Branch (963:16): [True: 4.95k, False: 4.20k]
  ------------------
  964|  9.15k|                       : make_regular_sub_pos(child, shift_ - B, lsize)
  965|  4.20k|                             .visit(v, args...);
  966|  9.15k|    }
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_23concat_both_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RNS1_8leaf_posISC_EESL_RNS1_8full_posISC_EEEEEDcT_DpOT0_:
  144|  6.58k|    {
  145|  6.58k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  146|  6.58k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE14first_sub_leafINS1_24concat_right_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RNS1_12leaf_sub_posISC_EERNS1_8leaf_posISC_EESL_EEEDcT_DpOT0_:
 1370|  6.58k|    {
 1371|  6.58k|        assert(shift_ == BL);
  ------------------
  |  Branch (1371:9): [True: 6.58k, False: 0]
  ------------------
 1372|  6.58k|        auto child = node_->inner()[0];
 1373|  6.58k|        return make_full_leaf_pos(child).visit(v, args...);
 1374|  6.58k|    }
_ZN5immer6detail4rbts13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_24concat_right_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RNS1_12leaf_sub_posISC_EERNS1_8leaf_posISC_EESL_EEEDcT_DpOT0_:
  207|  42.5k|    {
  208|  42.5k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  209|  42.5k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_23concat_both_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RNS1_8leaf_posISC_EESL_RNS1_8full_posISC_EEEEEDcT_DpOT0_:
 1036|  4.45k|    {
 1037|  4.45k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  4.45k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE8last_subINS1_23concat_both_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RNS1_8leaf_posISC_EESL_RSD_EEEDcT_DpOT0_:
  958|  5.51k|    {
  959|  5.51k|        auto offset  = count() - 1;
  960|  5.51k|        auto child   = node_->inner()[offset];
  961|  5.51k|        auto is_leaf = shift_ == BL;
  962|  5.51k|        auto lsize   = size_ - (size_t{offset} << shift_);
  963|  5.51k|        return is_leaf ? make_leaf_sub_pos(child, lsize).visit(v, args...)
  ------------------
  |  Branch (963:16): [True: 3.84k, False: 1.66k]
  ------------------
  964|  5.51k|                       : make_regular_sub_pos(child, shift_ - B, lsize)
  965|  1.66k|                             .visit(v, args...);
  966|  5.51k|    }
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_23concat_both_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RNS1_8leaf_posISC_EESL_RNS1_15regular_sub_posISC_EEEEEDcT_DpOT0_:
  144|  36.0k|    {
  145|  36.0k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  146|  36.0k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE14first_sub_leafINS1_24concat_right_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RNS1_12leaf_sub_posISC_EERNS1_8leaf_posISC_EESL_EEEDcT_DpOT0_:
  986|  36.0k|    {
  987|  36.0k|        assert(shift_ == BL);
  ------------------
  |  Branch (987:9): [True: 36.0k, False: 0]
  ------------------
  988|  36.0k|        auto child   = node_->inner()[0];
  989|  36.0k|        auto is_full = size_ >= branches<BL>;
  990|  36.0k|        return is_full ? make_full_leaf_pos(child).visit(v, args...)
  ------------------
  |  Branch (990:16): [True: 36.0k, False: 0]
  ------------------
  991|  36.0k|                       : make_leaf_sub_pos(child, size_).visit(v, args...);
  992|  36.0k|    }
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_24concat_right_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RSD_RNS1_8leaf_posISC_EESL_EEEDcT_DpOT0_:
  144|  68.0k|    {
  145|  68.0k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  146|  68.0k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_23concat_both_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RNS1_8leaf_posISC_EESL_RSD_EEEDcT_DpOT0_:
 1036|  4.20k|    {
 1037|  4.20k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  4.20k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE8last_subINS1_23concat_both_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RNS1_8leaf_posISC_EESL_RNS1_11relaxed_posISC_EEEEEDcT_DpOT0_:
  958|  98.1k|    {
  959|  98.1k|        auto offset  = count() - 1;
  960|  98.1k|        auto child   = node_->inner()[offset];
  961|  98.1k|        auto is_leaf = shift_ == BL;
  962|  98.1k|        auto lsize   = size_ - (size_t{offset} << shift_);
  963|  98.1k|        return is_leaf ? make_leaf_sub_pos(child, lsize).visit(v, args...)
  ------------------
  |  Branch (963:16): [True: 38.3k, False: 59.8k]
  ------------------
  964|  98.1k|                       : make_regular_sub_pos(child, shift_ - B, lsize)
  965|  59.8k|                             .visit(v, args...);
  966|  98.1k|    }
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_23concat_both_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RNS1_8leaf_posISC_EESL_RNS1_11relaxed_posISC_EEEEEDcT_DpOT0_:
  144|  68.0k|    {
  145|  68.0k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  146|  68.0k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE14first_sub_leafINS1_24concat_right_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RNS1_12leaf_sub_posISC_EERNS1_8leaf_posISC_EESL_EEEDcT_DpOT0_:
 1774|  68.0k|    {
 1775|  68.0k|        assert(shift_ == BL);
  ------------------
  |  Branch (1775:9): [True: 68.0k, False: 0]
  ------------------
 1776|  68.0k|        auto child      = node_->inner()[0];
 1777|  68.0k|        auto child_size = relaxed_->d.sizes[0];
 1778|  68.0k|        return make_leaf_sub_pos(child, child_size).visit(v, args...);
 1779|  68.0k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_23concat_both_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RNS1_8leaf_posISC_EESL_RNS1_11relaxed_posISC_EEEEEDcT_DpOT0_:
 1036|  95.5k|    {
 1037|  95.5k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  95.5k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE13each_left_subINS1_25concat_merger_mut_visitorEJRNS1_17concat_merger_mutISC_EERNSA_5applyIS7_E4type4editEEEEvT_DpOT0_:
 1617|   811k|    {
 1618|   811k|        each_left(v, relaxed_->d.count - 1, args...);
 1619|   811k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE9each_leftINS1_25concat_merger_mut_visitorEJRNS1_17concat_merger_mutISC_EERNSA_5applyIS7_E4type4editEEEEvT_jDpOT0_:
 1623|   811k|    {
 1624|   811k|        auto p = node_->inner();
 1625|   811k|        auto s = size_t{};
 1626|   811k|        if (shift_ == BL) {
  ------------------
  |  Branch (1626:13): [True: 63.4k, False: 748k]
  ------------------
 1627|   157k|            for (auto i = count_t{0}; i < n; ++i) {
  ------------------
  |  Branch (1627:39): [True: 94.3k, False: 63.4k]
  ------------------
 1628|  94.3k|                IMMER_PREFETCH(p + i + 1);
 1629|  94.3k|                make_leaf_sub_pos(p[i], relaxed_->d.sizes[i] - s)
 1630|  94.3k|                    .visit(v, args...);
 1631|  94.3k|                s = relaxed_->d.sizes[i];
 1632|  94.3k|                assert(s);
  ------------------
  |  Branch (1632:17): [True: 94.3k, False: 0]
  ------------------
 1633|  94.3k|            }
 1634|   748k|        } else {
 1635|   748k|            auto ss = shift_ - B;
 1636|  1.66M|            for (auto i = count_t{0}; i < n; ++i) {
  ------------------
  |  Branch (1636:39): [True: 921k, False: 748k]
  ------------------
 1637|   921k|                visit_maybe_relaxed_sub(
 1638|   921k|                    p[i], ss, relaxed_->d.sizes[i] - s, v, args...);
 1639|   921k|                s = relaxed_->d.sizes[i];
 1640|       |                assert(s);
  ------------------
  |  Branch (1640:17): [True: 921k, False: 0]
  ------------------
 1641|   921k|            }
 1642|   748k|        }
 1643|   811k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE9first_subINS1_24concat_right_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RSD_RNS1_8leaf_posISC_EESL_EEEDcT_DpOT0_:
 1762|   212k|    {
 1763|   212k|        auto child      = node_->inner()[0];
 1764|   212k|        auto child_size = relaxed_->d.sizes[0];
 1765|   212k|        auto is_leaf    = shift_ == BL;
 1766|   212k|        assert(child_size);
  ------------------
  |  Branch (1766:9): [True: 212k, False: 0]
  ------------------
 1767|   212k|        return is_leaf ? make_leaf_sub_pos(child, child_size).visit(v, args...)
  ------------------
  |  Branch (1767:16): [True: 0, False: 212k]
  ------------------
 1768|   212k|                       : visit_maybe_relaxed_sub(
 1769|   212k|                             child, shift_ - B, child_size, v, args...);
 1770|   212k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEENS1_24concat_right_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESJ_RNS1_11relaxed_posISC_EERNS1_8leaf_posISC_EESJ_EEEDcPT_jmT0_DpOT1_:
 1838|   212k|{
 1839|   212k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 212k, False: 0]
  ------------------
 1840|   212k|    auto relaxed = node->relaxed();
 1841|   212k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 210k, False: 1.53k]
  ------------------
 1842|   210k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 210k, False: 0]
  ------------------
 1843|   210k|        return make_relaxed_pos(node, shift, relaxed)
 1844|   210k|            .visit(v, std::forward<Args>(args)...);
 1845|   210k|    } else {
 1846|  1.53k|        return make_regular_sub_pos(node, shift, size)
 1847|  1.53k|            .visit(v, std::forward<Args>(args)...);
 1848|  1.53k|    }
 1849|   212k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_24concat_right_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RSD_RNS1_8leaf_posISC_EESL_EEEDcT_DpOT0_:
 1813|   210k|    {
 1814|   210k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|   210k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_24concat_right_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RNS1_11relaxed_posISC_EERNS1_8leaf_posISC_EESL_EEEDcT_DpOT0_:
 1036|  1.53k|    {
 1037|  1.53k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  1.53k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE8last_subINS1_23concat_left_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RNS1_8leaf_posISC_EESL_RNS1_15regular_sub_posISC_EEEEEDcT_DpOT0_:
 1750|   208k|    {
 1751|   208k|        auto offset     = relaxed_->d.count - 1;
 1752|   208k|        auto child      = node_->inner()[offset];
 1753|   208k|        auto child_size = size(offset);
 1754|   208k|        auto is_leaf    = shift_ == BL;
 1755|   208k|        return is_leaf ? make_leaf_sub_pos(child, child_size).visit(v, args...)
  ------------------
  |  Branch (1755:16): [True: 0, False: 208k]
  ------------------
 1756|   208k|                       : visit_maybe_relaxed_sub(
 1757|   208k|                             child, shift_ - B, child_size, v, args...);
 1758|   208k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEENS1_23concat_left_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESJ_RNS1_8leaf_posISC_EESJ_RNS1_15regular_sub_posISC_EEEEEDcPT_jmT0_DpOT1_:
 1838|   208k|{
 1839|   208k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 208k, False: 0]
  ------------------
 1840|   208k|    auto relaxed = node->relaxed();
 1841|   208k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 208k, False: 581]
  ------------------
 1842|   208k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 208k, False: 0]
  ------------------
 1843|   208k|        return make_relaxed_pos(node, shift, relaxed)
 1844|   208k|            .visit(v, std::forward<Args>(args)...);
 1845|   208k|    } else {
 1846|    581|        return make_regular_sub_pos(node, shift, size)
 1847|    581|            .visit(v, std::forward<Args>(args)...);
 1848|    581|    }
 1849|   208k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_23concat_left_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RNS1_8leaf_posISC_EESL_RNS1_15regular_sub_posISC_EEEEEDcT_DpOT0_:
 1813|   208k|    {
 1814|   208k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|   208k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE9first_subINS1_24concat_right_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RNS1_11relaxed_posISC_EERNS1_8leaf_posISC_EESL_EEEDcT_DpOT0_:
  970|  1.88k|    {
  971|  1.88k|        auto is_leaf = shift_ == BL;
  972|  1.88k|        auto child   = node_->inner()[0];
  973|  1.88k|        auto is_full = size_ >= (size_t{1} << shift_);
  974|  1.88k|        return is_full
  ------------------
  |  Branch (974:16): [True: 1.88k, False: 0]
  ------------------
  975|  1.88k|                   ? (is_leaf
  ------------------
  |  Branch (975:23): [True: 0, False: 1.88k]
  ------------------
  976|  1.88k|                          ? make_full_leaf_pos(child).visit(v, args...)
  977|  1.88k|                          : make_full_pos(child, shift_ - B).visit(v, args...))
  978|  1.88k|                   : (is_leaf
  ------------------
  |  Branch (978:23): [True: 0, False: 0]
  ------------------
  979|      0|                          ? make_leaf_sub_pos(child, size_).visit(v, args...)
  980|      0|                          : make_regular_sub_pos(child, shift_ - B, size_)
  981|      0|                                .visit(v, args...));
  982|  1.88k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_24concat_right_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RNS1_11relaxed_posISC_EERNS1_8leaf_posISC_EESL_EEEDcT_DpOT0_:
 1405|  2.64k|    {
 1406|  2.64k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1407|  2.64k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE9first_subINS1_24concat_right_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RNS1_11relaxed_posISC_EERNS1_8leaf_posISC_EESL_EEEDcT_DpOT0_:
 1361|    759|    {
 1362|    759|        auto is_leaf = shift_ == BL;
 1363|    759|        auto child   = node_->inner()[0];
 1364|    759|        return is_leaf ? make_full_leaf_pos(child).visit(v, args...)
  ------------------
  |  Branch (1364:16): [True: 0, False: 759]
  ------------------
 1365|    759|                       : make_full_pos(child, shift_ - B).visit(v, args...);
 1366|    759|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE8last_subINS1_23concat_both_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RNS1_8leaf_posISC_EESL_RNS1_8full_posISC_EEEEEDcT_DpOT0_:
 1750|  2.38k|    {
 1751|  2.38k|        auto offset     = relaxed_->d.count - 1;
 1752|  2.38k|        auto child      = node_->inner()[offset];
 1753|  2.38k|        auto child_size = size(offset);
 1754|  2.38k|        auto is_leaf    = shift_ == BL;
 1755|  2.38k|        return is_leaf ? make_leaf_sub_pos(child, child_size).visit(v, args...)
  ------------------
  |  Branch (1755:16): [True: 1.63k, False: 752]
  ------------------
 1756|  2.38k|                       : visit_maybe_relaxed_sub(
 1757|    752|                             child, shift_ - B, child_size, v, args...);
 1758|  2.38k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEENS1_23concat_both_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESJ_RNS1_8leaf_posISC_EESJ_RNS1_8full_posISC_EEEEEDcPT_jmT0_DpOT1_:
 1838|    752|{
 1839|    752|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 752, False: 0]
  ------------------
 1840|    752|    auto relaxed = node->relaxed();
 1841|    752|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 495, False: 257]
  ------------------
 1842|    495|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 495, False: 0]
  ------------------
 1843|    495|        return make_relaxed_pos(node, shift, relaxed)
 1844|    495|            .visit(v, std::forward<Args>(args)...);
 1845|    495|    } else {
 1846|    257|        return make_regular_sub_pos(node, shift, size)
 1847|    257|            .visit(v, std::forward<Args>(args)...);
 1848|    257|    }
 1849|    752|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_23concat_both_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RNS1_8leaf_posISC_EESL_RNS1_8full_posISC_EEEEEDcT_DpOT0_:
 1813|    495|    {
 1814|    495|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|    495|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE8last_subINS1_23concat_both_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RNS1_8leaf_posISC_EESL_RNS1_15regular_sub_posISC_EEEEEDcT_DpOT0_:
 1750|  35.7k|    {
 1751|  35.7k|        auto offset     = relaxed_->d.count - 1;
 1752|  35.7k|        auto child      = node_->inner()[offset];
 1753|  35.7k|        auto child_size = size(offset);
 1754|  35.7k|        auto is_leaf    = shift_ == BL;
 1755|  35.7k|        return is_leaf ? make_leaf_sub_pos(child, child_size).visit(v, args...)
  ------------------
  |  Branch (1755:16): [True: 32.1k, False: 3.60k]
  ------------------
 1756|  35.7k|                       : visit_maybe_relaxed_sub(
 1757|  3.60k|                             child, shift_ - B, child_size, v, args...);
 1758|  35.7k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEENS1_23concat_both_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESJ_RNS1_8leaf_posISC_EESJ_RNS1_15regular_sub_posISC_EEEEEDcPT_jmT0_DpOT1_:
 1838|  3.60k|{
 1839|  3.60k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 3.60k, False: 0]
  ------------------
 1840|  3.60k|    auto relaxed = node->relaxed();
 1841|  3.60k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 1.07k, False: 2.53k]
  ------------------
 1842|  1.07k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 1.07k, False: 0]
  ------------------
 1843|  1.07k|        return make_relaxed_pos(node, shift, relaxed)
 1844|  1.07k|            .visit(v, std::forward<Args>(args)...);
 1845|  2.53k|    } else {
 1846|  2.53k|        return make_regular_sub_pos(node, shift, size)
 1847|  2.53k|            .visit(v, std::forward<Args>(args)...);
 1848|  2.53k|    }
 1849|  3.60k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_23concat_both_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RNS1_8leaf_posISC_EESL_RNS1_15regular_sub_posISC_EEEEEDcT_DpOT0_:
 1813|  1.07k|    {
 1814|  1.07k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  1.07k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE8last_subINS1_23concat_both_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RNS1_8leaf_posISC_EESL_RSD_EEEDcT_DpOT0_:
 1750|   230k|    {
 1751|   230k|        auto offset     = relaxed_->d.count - 1;
 1752|   230k|        auto child      = node_->inner()[offset];
 1753|   230k|        auto child_size = size(offset);
 1754|   230k|        auto is_leaf    = shift_ == BL;
 1755|   230k|        return is_leaf ? make_leaf_sub_pos(child, child_size).visit(v, args...)
  ------------------
  |  Branch (1755:16): [True: 29.6k, False: 201k]
  ------------------
 1756|   230k|                       : visit_maybe_relaxed_sub(
 1757|   201k|                             child, shift_ - B, child_size, v, args...);
 1758|   230k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEENS1_23concat_both_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESJ_RNS1_8leaf_posISC_EESJ_RNS1_11relaxed_posISC_EEEEEDcPT_jmT0_DpOT1_:
 1838|   201k|{
 1839|   201k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 201k, False: 0]
  ------------------
 1840|   201k|    auto relaxed = node->relaxed();
 1841|   201k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 165k, False: 35.7k]
  ------------------
 1842|   165k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 165k, False: 0]
  ------------------
 1843|   165k|        return make_relaxed_pos(node, shift, relaxed)
 1844|   165k|            .visit(v, std::forward<Args>(args)...);
 1845|   165k|    } else {
 1846|  35.7k|        return make_regular_sub_pos(node, shift, size)
 1847|  35.7k|            .visit(v, std::forward<Args>(args)...);
 1848|  35.7k|    }
 1849|   201k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_23concat_both_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RNS1_8leaf_posISC_EESL_RSD_EEEDcT_DpOT0_:
 1813|   165k|    {
 1814|   165k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|   165k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_30concat_trees_right_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RNS1_11relaxed_posISC_EERNS1_8leaf_posISC_EESL_EEEDcT_DpOT0_:
 1036|  35.6k|    {
 1037|  35.6k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  35.6k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_29concat_trees_left_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_NS1_8leaf_posISC_EESL_RPSC_RjRmEEEDcT_DpOT0_:
 1036|  6.39k|    {
 1037|  6.39k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  6.39k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEENS1_30concat_trees_right_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESJ_RNS1_15regular_sub_posISC_EERNS1_8leaf_posISC_EESJ_EEEDcPT_jmT0_DpOT1_:
 1838|  6.39k|{
 1839|  6.39k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 6.39k, False: 0]
  ------------------
 1840|  6.39k|    auto relaxed = node->relaxed();
 1841|  6.39k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 3.75k, False: 2.64k]
  ------------------
 1842|  3.75k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 3.75k, False: 0]
  ------------------
 1843|  3.75k|        return make_relaxed_pos(node, shift, relaxed)
 1844|  3.75k|            .visit(v, std::forward<Args>(args)...);
 1845|  3.75k|    } else {
 1846|  2.64k|        return make_regular_sub_pos(node, shift, size)
 1847|  2.64k|            .visit(v, std::forward<Args>(args)...);
 1848|  2.64k|    }
 1849|  6.39k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_30concat_trees_right_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RNS1_15regular_sub_posISC_EERNS1_8leaf_posISC_EESL_EEEDcT_DpOT0_:
 1813|  3.75k|    {
 1814|  3.75k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  3.75k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEE5visitINS1_30concat_trees_right_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editESL_RSD_RNS1_8leaf_posISC_EESL_EEEDcT_DpOT0_:
 1036|  2.64k|    {
 1037|  2.64k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  2.64k|    }

_ZN5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEC2Ev:
  114|   356k|        : size{0}
  115|   356k|        , shift{BL}
  116|   356k|        , root{empty_root()}
  117|   356k|        , tail{empty_tail()}
  118|   356k|    {
  119|       |        assert(check_tree());
  ------------------
  |  Branch (119:9): [True: 356k, False: 0]
  ------------------
  120|   356k|    }
_ZN5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE10empty_rootEv:
   61|   371k|    {
   62|   371k|        static const auto empty_ = [] {
   63|   371k|            constexpr auto size = node_t::sizeof_inner_n(0);
   64|   371k|            static std::aligned_storage_t<size, alignof(std::max_align_t)>
   65|   371k|                storage;
   66|   371k|            return node_t::make_inner_n_into(&storage, size, 0u);
   67|   371k|        }();
   68|   371k|        return empty_->inc();
   69|   371k|    }
_ZZN5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE10empty_rootEvENKUlvE_clEv:
   62|      1|        static const auto empty_ = [] {
   63|      1|            constexpr auto size = node_t::sizeof_inner_n(0);
   64|      1|            static std::aligned_storage_t<size, alignof(std::max_align_t)>
   65|      1|                storage;
   66|      1|            return node_t::make_inner_n_into(&storage, size, 0u);
   67|      1|        }();
_ZN5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE10empty_tailEv:
   72|   360k|    {
   73|   360k|        static const auto empty_ = [] {
   74|   360k|            constexpr auto size = node_t::sizeof_leaf_n(0);
   75|   360k|            static std::aligned_storage_t<size, alignof(std::max_align_t)>
   76|   360k|                storage;
   77|   360k|            return node_t::make_leaf_n_into(&storage, size, 0u);
   78|   360k|        }();
   79|   360k|        return empty_->inc();
   80|   360k|    }
_ZZN5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE10empty_tailEvENKUlvE_clEv:
   73|      1|        static const auto empty_ = [] {
   74|      1|            constexpr auto size = node_t::sizeof_leaf_n(0);
   75|      1|            static std::aligned_storage_t<size, alignof(std::max_align_t)>
   76|      1|                storage;
   77|      1|            return node_t::make_leaf_n_into(&storage, size, 0u);
   78|      1|        }();
_ZNK5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE10check_treeEv:
 1372|   943k|    {
 1373|   943k|        IMMER_INVALID_STATE_ASSERT(shift <= sizeof(size_t) * 8 - BL);
  ------------------
  |  |   32|   943k|    if (!(expr))                                                               \
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 943k]
  |  |  ------------------
  |  |   33|   943k|    IMMER_THROW(invalid_tree{})
  |  |  ------------------
  |  |  |  |   51|      0|#define IMMER_THROW(expr) throw expr
  |  |  ------------------
  ------------------
 1374|   943k|        IMMER_INVALID_STATE_ASSERT(shift >= BL);
  ------------------
  |  |   32|   943k|    if (!(expr))                                                               \
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 943k]
  |  |  ------------------
  |  |   33|   943k|    IMMER_THROW(invalid_tree{})
  |  |  ------------------
  |  |  |  |   51|      0|#define IMMER_THROW(expr) throw expr
  |  |  ------------------
  ------------------
 1375|   943k|        IMMER_INVALID_STATE_ASSERT(tail_offset() <= size);
  ------------------
  |  |   32|   943k|    if (!(expr))                                                               \
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 943k]
  |  |  ------------------
  |  |   33|   943k|    IMMER_THROW(invalid_tree{})
  |  |  ------------------
  |  |  |  |   51|      0|#define IMMER_THROW(expr) throw expr
  |  |  ------------------
  ------------------
 1376|   943k|        IMMER_INVALID_STATE_ASSERT(tail_size() <= branches<BL>);
  ------------------
  |  |   32|   943k|    if (!(expr))                                                               \
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 943k]
  |  |  ------------------
  |  |   33|   943k|    IMMER_THROW(invalid_tree{})
  |  |  ------------------
  |  |  |  |   51|      0|#define IMMER_THROW(expr) throw expr
  |  |  ------------------
  ------------------
 1377|       |#if IMMER_DEBUG_DEEP_CHECK
 1378|       |        IMMER_INVALID_STATE_ASSERT(check_root());
 1379|       |        IMMER_INVALID_STATE_ASSERT(check_tail());
 1380|       |#endif
 1381|   943k|        return true;
 1382|   943k|    }
_ZNK5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE11tail_offsetEv:
  197|  7.04M|    {
  198|  7.04M|        auto r = root->relaxed();
  199|  7.04M|        assert(r == nullptr || r->d.count);
  ------------------
  |  Branch (199:9): [True: 4.60M, False: 2.44M]
  |  Branch (199:9): [True: 2.44M, False: 0]
  |  Branch (199:9): [True: 7.04M, False: 0]
  ------------------
  200|  7.04M|        return r      ? r->d.sizes[r->d.count - 1]
  ------------------
  |  Branch (200:16): [True: 2.44M, False: 4.60M]
  ------------------
  201|  7.04M|               : size ? (size - 1) & ~mask<BL>
  ------------------
  |  Branch (201:18): [True: 3.47M, False: 1.12M]
  ------------------
  202|       |                      /* otherwise */
  203|  4.60M|                      : 0;
  204|  7.04M|    }
_ZNK5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE9tail_sizeEv:
  194|  1.04M|    auto tail_size() const { return size - tail_offset(); }
_ZN5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EED2Ev:
  184|   648k|    ~rrbtree() { dec(); }
_ZNK5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE3decEv:
  192|   648k|    void dec() const { traverse(dec_visitor()); }
_ZNK5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE8traverseINS1_11dec_visitorEJEEEvT_DpOT0_:
  208|   648k|    {
  209|   648k|        auto tail_off  = tail_offset();
  210|   648k|        auto tail_size = size - tail_off;
  211|       |
  212|   648k|        if (tail_off)
  ------------------
  |  Branch (212:13): [True: 230k, False: 418k]
  ------------------
  213|   230k|            visit_maybe_relaxed_sub(root, shift, tail_off, v, args...);
  214|   418k|        else
  215|   418k|            make_empty_regular_pos(root).visit(v, args...);
  216|       |
  217|   648k|        if (tail_size)
  ------------------
  |  Branch (217:13): [True: 280k, False: 368k]
  ------------------
  218|   280k|            make_leaf_sub_pos(tail, tail_size).visit(v, args...);
  219|   368k|        else
  220|   368k|            make_empty_leaf_pos(tail).visit(v, args...);
  221|   648k|    }
_ZN5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEC2ERKSB_:
  151|   140k|        : rrbtree{other.size, other.shift, other.root, other.tail}
  152|   140k|    {
  153|   140k|        inc();
  154|   140k|    }
_ZN5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEC2EmjPNS1_4nodeIiSA_Lj2ELj2EEESE_:
  127|   292k|        : size{sz}
  128|   292k|        , shift{sh}
  129|   292k|        , root{r}
  130|   292k|        , tail{t}
  131|   292k|    {
  132|   292k|#if IMMER_THROW_ON_INVALID_STATE
  133|       |        // assert only happens in the Debug build, but when
  134|       |        // IMMER_THROW_ON_INVALID_STATE is activated, we want to just check_tree
  135|       |        // even in Release.
  136|   292k|        try {
  137|   292k|            check_tree();
  138|   292k|        } catch (...) {
  139|       |            // This not fully constructed rrbtree owns the nodes already, have
  140|       |            // to dec them.
  141|      0|            if (r && t)
  ------------------
  |  Branch (141:17): [True: 0, False: 0]
  |  Branch (141:22): [True: 0, False: 0]
  ------------------
  142|      0|                dec();
  143|      0|            throw;
  144|      0|        }
  145|       |#else
  146|       |        assert(check_tree());
  147|       |#endif
  148|   292k|    }
_ZNK5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE3incEv:
  187|   140k|    {
  188|   140k|        root->inc();
  189|   140k|        tail->inc();
  190|   140k|    }
_ZN5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEC2EOSB_:
  157|   279k|        : rrbtree{}
  158|   279k|    {
  159|   279k|        swap(*this, other);
  160|   279k|    }
_ZN5immer6detail4rbts4swapERNS1_7rrbtreeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEESC_:
  176|   584k|    {
  177|   584k|        using std::swap;
  178|   584k|        swap(x.size, y.size);
  179|   584k|        swap(x.shift, y.shift);
  180|   584k|        swap(x.root, y.root);
  181|   584k|        swap(x.tail, y.tail);
  182|   584k|    }
_ZN5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEaSEOSB_:
  170|   298k|    {
  171|   298k|        swap(*this, other);
  172|   298k|        return *this;
  173|   298k|    }
_ZNK5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE9push_backEi:
  500|  55.1k|    {
  501|  55.1k|        auto ts = tail_size();
  502|  55.1k|        if (ts < branches<BL>) {
  ------------------
  |  Branch (502:13): [True: 41.0k, False: 14.1k]
  ------------------
  503|  41.0k|            auto new_tail =
  504|  41.0k|                node_t::copy_leaf_emplace(tail, ts, std::move(value));
  505|  41.0k|            return {size + 1, shift, root->inc(), new_tail};
  506|  41.0k|        } else {
  507|  14.1k|            using std::get;
  508|  14.1k|            auto new_tail = node_t::make_leaf_n(1u, std::move(value));
  509|  14.1k|            auto tail_off = tail_offset();
  510|  14.1k|            IMMER_TRY {
  ------------------
  |  |   49|  14.1k|#define IMMER_TRY try
  ------------------
  511|  14.1k|                auto new_root =
  512|  14.1k|                    push_tail(root, shift, tail_off, tail, size - tail_off);
  513|  14.1k|                tail->inc();
  514|  14.1k|                return {size + 1, get<0>(new_root), get<1>(new_root), new_tail};
  515|  14.1k|            }
  516|  14.1k|            IMMER_CATCH (...) {
  517|      0|                node_t::delete_leaf(new_tail, 1u);
  518|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  519|      0|            }
  520|  14.1k|        }
  521|  55.1k|    }
_ZNK5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE9push_tailEPNS1_4nodeIiSA_Lj2ELj2EEEjmSE_j:
  369|  22.0k|    {
  370|  22.0k|        if (auto r = root->relaxed()) {
  ------------------
  |  Branch (370:18): [True: 10.2k, False: 11.8k]
  ------------------
  371|  10.2k|            auto new_root =
  372|  10.2k|                make_relaxed_pos(root, shift, r)
  373|  10.2k|                    .visit(push_tail_visitor<node_t>{}, tail, tail_size);
  374|  10.2k|            if (new_root)
  ------------------
  |  Branch (374:17): [True: 9.71k, False: 581]
  ------------------
  375|  9.71k|                return std::make_tuple(shift, new_root);
  376|    581|            else {
  377|    581|                auto new_root = node_t::make_inner_r_n(2);
  378|    581|                IMMER_TRY {
  ------------------
  |  |   49|    581|#define IMMER_TRY try
  ------------------
  379|    581|                    auto new_path        = node_t::make_path(shift, tail);
  380|    581|                    new_root->inner()[0] = root->inc();
  381|    581|                    new_root->inner()[1] = new_path;
  382|    581|                    new_root->relaxed()->d.sizes[0] = size;
  383|    581|                    new_root->relaxed()->d.sizes[1] = size + tail_size;
  384|    581|                    assert(size);
  ------------------
  |  Branch (384:21): [True: 581, False: 0]
  ------------------
  385|    581|                    assert(tail_size);
  ------------------
  |  Branch (385:21): [True: 581, False: 0]
  ------------------
  386|    581|                    new_root->relaxed()->d.count = 2u;
  387|    581|                }
  388|    581|                IMMER_CATCH (...) {
  389|      0|                    node_t::delete_inner_r(new_root, 2);
  390|      0|                    IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  391|      0|                }
  392|    581|                return std::make_tuple(shift + B, new_root);
  393|    581|            }
  394|  11.8k|        } else if (size == size_t{branches<B>} << shift) {
  ------------------
  |  Branch (394:20): [True: 1.07k, False: 10.7k]
  ------------------
  395|  1.07k|            auto new_root = node_t::make_inner_n(2);
  396|  1.07k|            IMMER_TRY {
  ------------------
  |  |   49|  1.07k|#define IMMER_TRY try
  ------------------
  397|  1.07k|                auto new_path        = node_t::make_path(shift, tail);
  398|  1.07k|                new_root->inner()[0] = root->inc();
  399|  1.07k|                new_root->inner()[1] = new_path;
  400|  1.07k|            }
  401|  1.07k|            IMMER_CATCH (...) {
  402|      0|                node_t::delete_inner(new_root, 2);
  403|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  404|      0|            }
  405|  1.07k|            return std::make_tuple(shift + B, new_root);
  406|  10.7k|        } else if (size) {
  ------------------
  |  Branch (406:20): [True: 4.11k, False: 6.61k]
  ------------------
  407|  4.11k|            auto new_root = make_regular_sub_pos(root, shift, size)
  408|  4.11k|                                .visit(push_tail_visitor<node_t>{}, tail);
  409|  4.11k|            return std::make_tuple(shift, new_root);
  410|  6.61k|        } else {
  411|  6.61k|            return std::make_tuple(shift, node_t::make_path(shift, tail));
  412|  6.61k|        }
  413|  22.0k|    }
flex-vector-gc.cpp:_ZNK5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE6updateIZZ22LLVMFuzzerTestOneInputENK3$_5clI12fuzzer_inputEEDaRT_EUlSG_E_EESB_mOSG_:
  580|  5.94k|    {
  581|  5.94k|        auto tail_off = tail_offset();
  582|  5.94k|        if (idx >= tail_off) {
  ------------------
  |  Branch (582:13): [True: 538, False: 5.41k]
  ------------------
  583|    538|            auto tail_size = size - tail_off;
  584|    538|            auto new_tail =
  585|    538|                make_leaf_sub_pos(tail, tail_size)
  586|    538|                    .visit(update_visitor<node_t>{}, idx - tail_off, fn);
  587|    538|            return {size, shift, root->inc(), new_tail};
  588|  5.41k|        } else {
  589|  5.41k|            auto new_root = visit_maybe_relaxed_sub(
  590|  5.41k|                root, shift, tail_off, update_visitor<node_t>{}, idx, fn);
  591|  5.41k|            return {size, shift, new_root, tail->inc()};
  592|  5.41k|        }
  593|  5.94k|    }
_ZNK5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE4takeEm:
  647|  12.8k|    {
  648|  12.8k|        auto tail_off = tail_offset();
  649|  12.8k|        if (new_size == 0) {
  ------------------
  |  Branch (649:13): [True: 1.55k, False: 11.2k]
  ------------------
  650|  1.55k|            return {};
  651|  11.2k|        } else if (new_size >= size) {
  ------------------
  |  Branch (651:20): [True: 734, False: 10.5k]
  ------------------
  652|    734|            return *this;
  653|  10.5k|        } else if (new_size > tail_off) {
  ------------------
  |  Branch (653:20): [True: 262, False: 10.2k]
  ------------------
  654|    262|            auto new_tail = node_t::copy_leaf(tail, new_size - tail_off);
  655|    262|            return {new_size, shift, root->inc(), new_tail};
  656|  10.2k|        } else {
  657|  10.2k|            using std::get;
  658|  10.2k|            auto l = new_size - 1;
  659|  10.2k|            auto v = slice_right_visitor<node_t>();
  660|  10.2k|            auto r = visit_maybe_relaxed_sub(root, shift, tail_off, v, l);
  661|  10.2k|            auto new_shift = get<0>(r);
  662|  10.2k|            auto new_root  = get<1>(r);
  663|  10.2k|            auto new_tail  = get<3>(r);
  664|  10.2k|            if (new_root) {
  ------------------
  |  Branch (664:17): [True: 7.54k, False: 2.71k]
  ------------------
  665|  7.54k|                IMMER_ASSERT_TAGGED(new_root->compute_shift() == get<0>(r));
  ------------------
  |  |   68|  7.54k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (665:17): [True: 7.54k, False: 0]
  ------------------
  666|  7.54k|                assert(new_root->check(new_shift, new_size - get<2>(r)));
  ------------------
  |  Branch (666:17): [True: 7.54k, False: 0]
  ------------------
  667|  7.54k|                return {new_size, new_shift, new_root, new_tail};
  668|  7.54k|            } else {
  669|  2.71k|                return {new_size, BL, empty_root(), new_tail};
  670|  2.71k|            }
  671|  10.2k|        }
  672|  12.8k|    }
_ZNK5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE4dropEm:
  711|  17.4k|    {
  712|  17.4k|        if (elems == 0) {
  ------------------
  |  Branch (712:13): [True: 1.22k, False: 16.2k]
  ------------------
  713|  1.22k|            return *this;
  714|  16.2k|        } else if (elems >= size) {
  ------------------
  |  Branch (714:20): [True: 220, False: 16.0k]
  ------------------
  715|    220|            return {};
  716|  16.0k|        } else if (elems == tail_offset()) {
  ------------------
  |  Branch (716:20): [True: 229, False: 15.8k]
  ------------------
  717|    229|            return {size - elems, BL, empty_root(), tail->inc()};
  718|  15.8k|        } else if (elems > tail_offset()) {
  ------------------
  |  Branch (718:20): [True: 506, False: 15.3k]
  ------------------
  719|    506|            auto tail_off = tail_offset();
  720|    506|            auto new_tail =
  721|    506|                node_t::copy_leaf(tail, elems - tail_off, size - tail_off);
  722|    506|            return {size - elems, BL, empty_root(), new_tail};
  723|  15.3k|        } else {
  724|  15.3k|            using std::get;
  725|  15.3k|            auto v = slice_left_visitor<node_t>();
  726|  15.3k|            auto r =
  727|  15.3k|                visit_maybe_relaxed_sub(root, shift, tail_offset(), v, elems);
  728|  15.3k|            auto new_root  = get<1>(r);
  729|  15.3k|            auto new_shift = get<0>(r);
  730|  15.3k|            return {size - elems, new_shift, new_root, tail->inc()};
  731|  15.3k|        }
  732|  17.4k|    }
_ZN5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE8max_sizeEv:
   54|  2.04M|    {
   55|  2.04M|        auto S = sizeof(size_t) * 8;
   56|  2.04M|        return ((size_t{1} << BL) - std::min(size_t{BL}, size_t{2})) *
   57|  2.04M|               ipow((size_t{1} << B) - 2, (S - BL) / B);
   58|  2.04M|    }
_ZNK5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE6concatERKSB_:
  735|  58.2k|    {
  736|  58.2k|        assert(r.size + size <= max_size());
  ------------------
  |  Branch (736:9): [True: 58.2k, False: 0]
  ------------------
  737|  58.2k|        using std::get;
  738|  58.2k|        if (size == 0)
  ------------------
  |  Branch (738:13): [True: 757, False: 57.4k]
  ------------------
  739|    757|            return r;
  740|  57.4k|        else if (r.size == 0)
  ------------------
  |  Branch (740:18): [True: 369, False: 57.0k]
  ------------------
  741|    369|            return *this;
  742|  57.0k|        else if (r.tail_offset() == 0) {
  ------------------
  |  Branch (742:18): [True: 6.53k, False: 50.5k]
  ------------------
  743|       |            // just concat the tail, similar to push_back
  744|  6.53k|            auto tail_offst = tail_offset();
  745|  6.53k|            auto tail_size  = size - tail_offst;
  746|  6.53k|            if (tail_size == branches<BL>) {
  ------------------
  |  Branch (746:17): [True: 2.38k, False: 4.15k]
  ------------------
  747|  2.38k|                auto new_root =
  748|  2.38k|                    push_tail(root, shift, tail_offst, tail, tail_size);
  749|  2.38k|                tail->inc();
  750|  2.38k|                return {size + r.size,
  751|  2.38k|                        get<0>(new_root),
  752|  2.38k|                        get<1>(new_root),
  753|  2.38k|                        r.tail->inc()};
  754|  4.15k|            } else if (tail_size + r.size <= branches<BL>) {
  ------------------
  |  Branch (754:24): [True: 2.51k, False: 1.63k]
  ------------------
  755|  2.51k|                auto new_tail =
  756|  2.51k|                    node_t::copy_leaf(tail, tail_size, r.tail, r.size);
  757|  2.51k|                return {size + r.size, shift, root->inc(), new_tail};
  758|  2.51k|            } else {
  759|  1.63k|                auto remaining = branches<BL> - tail_size;
  760|  1.63k|                auto add_tail =
  761|  1.63k|                    node_t::copy_leaf(tail, tail_size, r.tail, remaining);
  762|  1.63k|                IMMER_TRY {
  ------------------
  |  |   49|  1.63k|#define IMMER_TRY try
  ------------------
  763|  1.63k|                    auto new_tail =
  764|  1.63k|                        node_t::copy_leaf(r.tail, remaining, r.size);
  765|  1.63k|                    IMMER_TRY {
  ------------------
  |  |   49|  1.63k|#define IMMER_TRY try
  ------------------
  766|  1.63k|                        auto new_root = push_tail(
  767|  1.63k|                            root, shift, tail_offst, add_tail, branches<BL>);
  768|  1.63k|                        return {size + r.size,
  769|  1.63k|                                get<0>(new_root),
  770|  1.63k|                                get<1>(new_root),
  771|  1.63k|                                new_tail};
  772|  1.63k|                    }
  773|  1.63k|                    IMMER_CATCH (...) {
  774|      0|                        node_t::delete_leaf(new_tail, r.size - remaining);
  775|      0|                        IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  776|      0|                    }
  777|  1.63k|                }
  778|  1.63k|                IMMER_CATCH (...) {
  779|      0|                    node_t::delete_leaf(add_tail, branches<BL>);
  780|      0|                    IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  781|      0|                }
  782|  1.63k|            }
  783|  50.5k|        } else if (tail_offset() == 0) {
  ------------------
  |  Branch (783:20): [True: 3.05k, False: 47.5k]
  ------------------
  784|  3.05k|            auto tail_offst = tail_offset();
  785|  3.05k|            auto tail_size  = size - tail_offst;
  786|  3.05k|            auto concated =
  787|  3.05k|                concat_trees(tail, tail_size, r.root, r.shift, r.tail_offset());
  788|  3.05k|            auto new_shift = concated.shift();
  789|  3.05k|            auto new_root  = concated.node();
  790|  3.05k|            IMMER_ASSERT_TAGGED(new_shift == new_root->compute_shift());
  ------------------
  |  |   68|  3.05k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (790:13): [True: 3.05k, False: 0]
  ------------------
  791|  3.05k|            assert(new_root->check(new_shift, size + r.tail_offset()));
  ------------------
  |  Branch (791:13): [True: 3.05k, False: 0]
  ------------------
  792|  3.05k|            return {size + r.size, new_shift, new_root, r.tail->inc()};
  793|  47.5k|        } else {
  794|  47.5k|            auto tail_offst = tail_offset();
  795|  47.5k|            auto tail_size  = size - tail_offst;
  796|  47.5k|            auto concated   = concat_trees(root,
  797|  47.5k|                                         shift,
  798|  47.5k|                                         tail_offst,
  799|  47.5k|                                         tail,
  800|  47.5k|                                         tail_size,
  801|  47.5k|                                         r.root,
  802|  47.5k|                                         r.shift,
  803|  47.5k|                                         r.tail_offset());
  804|  47.5k|            auto new_shift  = concated.shift();
  805|  47.5k|            auto new_root   = concated.node();
  806|  47.5k|            IMMER_ASSERT_TAGGED(new_shift == new_root->compute_shift());
  ------------------
  |  |   68|  47.5k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (806:13): [True: 47.5k, False: 0]
  ------------------
  807|  47.5k|            assert(new_root->check(new_shift, size + r.tail_offset()));
  ------------------
  |  Branch (807:13): [True: 47.5k, False: 0]
  ------------------
  808|  47.5k|            return {size + r.size, new_shift, new_root, r.tail->inc()};
  809|  47.5k|        }
  810|  58.2k|    }
_ZN5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE13push_back_mutENS9_5applyIS6_E4type4editEi:
  478|  49.4k|    {
  479|  49.4k|        auto ts = tail_size();
  480|  49.4k|        if (ts < branches<BL>) {
  ------------------
  |  Branch (480:13): [True: 31.8k, False: 17.6k]
  ------------------
  481|  31.8k|            ensure_mutable_tail(e, ts);
  482|  31.8k|            new (&tail->leaf()[ts]) T(std::move(value));
  483|  31.8k|        } else {
  484|  17.6k|            using std::get;
  485|  17.6k|            auto new_tail = node_t::make_leaf_e(e, std::move(value));
  486|  17.6k|            auto tail_off = tail_offset();
  487|  17.6k|            IMMER_TRY {
  ------------------
  |  |   49|  17.6k|#define IMMER_TRY try
  ------------------
  488|  17.6k|                push_tail_mut(e, tail_off, tail, ts);
  489|  17.6k|                tail = new_tail;
  490|  17.6k|            }
  491|  17.6k|            IMMER_CATCH (...) {
  492|      0|                node_t::delete_leaf(new_tail, 1u);
  493|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  494|      0|            }
  495|  17.6k|        }
  496|  49.4k|        ++size;
  497|  49.4k|    }
_ZN5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE19ensure_mutable_tailENS9_5applyIS6_E4type4editEj:
  469|  1.36M|    {
  470|  1.36M|        if (!tail->can_mutate(e)) {
  ------------------
  |  Branch (470:13): [True: 23.9k, False: 1.33M]
  ------------------
  471|  23.9k|            auto new_tail = node_t::copy_leaf_e(e, tail, n);
  472|  23.9k|            dec_leaf(tail, n);
  473|  23.9k|            tail = new_tail;
  474|  23.9k|        }
  475|  1.36M|    }
_ZN5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE13push_tail_mutENS9_5applyIS6_E4type4editEmPNS1_4nodeIiSA_Lj2ELj2EEEj:
  417|  1.76M|    {
  418|  1.76M|        if (auto r = root->relaxed()) {
  ------------------
  |  Branch (418:18): [True: 668k, False: 1.09M]
  ------------------
  419|   668k|            auto new_root =
  420|   668k|                make_relaxed_pos(root, shift, r)
  421|   668k|                    .visit(push_tail_mut_visitor<node_t>{}, e, tail, tail_size);
  422|   668k|            if (new_root) {
  ------------------
  |  Branch (422:17): [True: 666k, False: 1.49k]
  ------------------
  423|   666k|                root = new_root;
  424|   666k|            } else {
  425|  1.49k|                auto new_root = node_t::make_inner_r_e(e);
  426|  1.49k|                IMMER_TRY {
  ------------------
  |  |   49|  1.49k|#define IMMER_TRY try
  ------------------
  427|  1.49k|                    auto new_path        = node_t::make_path_e(e, shift, tail);
  428|  1.49k|                    new_root->inner()[0] = root;
  429|  1.49k|                    new_root->inner()[1] = new_path;
  430|  1.49k|                    new_root->relaxed()->d.sizes[0] = tail_off;
  431|  1.49k|                    new_root->relaxed()->d.sizes[1] = tail_off + tail_size;
  432|  1.49k|                    assert(tail_off);
  ------------------
  |  Branch (432:21): [True: 1.49k, False: 0]
  ------------------
  433|  1.49k|                    assert(tail_size);
  ------------------
  |  Branch (433:21): [True: 1.49k, False: 0]
  ------------------
  434|  1.49k|                    new_root->relaxed()->d.count = 2u;
  435|  1.49k|                    root                         = new_root;
  436|  1.49k|                    shift += B;
  437|  1.49k|                }
  438|  1.49k|                IMMER_CATCH (...) {
  439|      0|                    node_t::delete_inner_r_e(new_root);
  440|      0|                    IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  441|      0|                }
  442|  1.49k|            }
  443|  1.09M|        } else if (tail_off == size_t{branches<B>} << shift) {
  ------------------
  |  Branch (443:20): [True: 5.11k, False: 1.08M]
  ------------------
  444|  5.11k|            auto new_root = node_t::make_inner_e(e);
  445|  5.11k|            IMMER_TRY {
  ------------------
  |  |   49|  5.11k|#define IMMER_TRY try
  ------------------
  446|  5.11k|                auto new_path        = node_t::make_path_e(e, shift, tail);
  447|  5.11k|                new_root->inner()[0] = root;
  448|  5.11k|                new_root->inner()[1] = new_path;
  449|  5.11k|                root                 = new_root;
  450|  5.11k|                shift += B;
  451|  5.11k|            }
  452|  5.11k|            IMMER_CATCH (...) {
  453|      0|                node_t::delete_inner_e(new_root);
  454|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  455|      0|            }
  456|  1.08M|        } else if (tail_off) {
  ------------------
  |  Branch (456:20): [True: 1.08M, False: 4.95k]
  ------------------
  457|  1.08M|            auto new_root =
  458|  1.08M|                make_regular_sub_pos(root, shift, tail_off)
  459|  1.08M|                    .visit(push_tail_mut_visitor<node_t>{}, e, tail);
  460|  1.08M|            root = new_root;
  461|  1.08M|        } else {
  462|  4.95k|            auto new_root = node_t::make_path_e(e, shift, tail);
  463|  4.95k|            dec_empty_regular(root);
  464|  4.95k|            root = new_root;
  465|  4.95k|        }
  466|  1.76M|    }
flex-vector-gc.cpp:_ZN5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE10update_mutIZZ22LLVMFuzzerTestOneInputENK3$_5clI12fuzzer_inputEEDaRT_EUlSG_E0_EEvNS9_5applyIS6_E4type4editEmOSG_:
  573|  10.4k|    {
  574|  10.4k|        auto& elem = get_mut(e, idx);
  575|  10.4k|        elem       = std::forward<FnT>(fn)(std::move(elem));
  576|  10.4k|    }
_ZN5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE7get_mutENS9_5applyIS6_E4type4editEm:
  539|  10.4k|    {
  540|  10.4k|        auto tail_off = tail_offset();
  541|  10.4k|        if (idx >= tail_off) {
  ------------------
  |  Branch (541:13): [True: 629, False: 9.83k]
  ------------------
  542|    629|            ensure_mutable_tail(e, size - tail_off);
  543|    629|            return tail->leaf()[(idx - tail_off) & mask<BL>];
  544|  9.83k|        } else {
  545|  9.83k|            return visit_maybe_relaxed_sub(root,
  546|  9.83k|                                           shift,
  547|  9.83k|                                           tail_off,
  548|  9.83k|                                           get_mut_visitor<node_t>{},
  549|  9.83k|                                           idx,
  550|  9.83k|                                           e,
  551|  9.83k|                                           &root);
  552|  9.83k|        }
  553|  10.4k|    }
_ZN5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE8take_mutENS9_5applyIS6_E4type4editEm:
  606|  37.4k|    {
  607|  37.4k|        auto tail_off = tail_offset();
  608|  37.4k|        if (new_size == 0) {
  ------------------
  |  Branch (608:13): [True: 702, False: 36.7k]
  ------------------
  609|    702|            *this = {};
  610|  36.7k|        } else if (new_size >= size) {
  ------------------
  |  Branch (610:20): [True: 2.61k, False: 34.1k]
  ------------------
  611|  2.61k|            return;
  612|  34.1k|        } else if (new_size > tail_off) {
  ------------------
  |  Branch (612:20): [True: 546, False: 33.6k]
  ------------------
  613|    546|            auto ts    = size - tail_off;
  614|    546|            auto newts = new_size - tail_off;
  615|    546|            if (tail->can_mutate(e)) {
  ------------------
  |  Branch (615:17): [True: 307, False: 239]
  ------------------
  616|    307|                detail::destroy_n(tail->leaf() + newts, ts - newts);
  617|    307|            } else {
  618|    239|                auto new_tail = node_t::copy_leaf_e(e, tail, newts);
  619|    239|                dec_leaf(tail, ts);
  620|    239|                tail = new_tail;
  621|    239|            }
  622|    546|            size = new_size;
  623|    546|            return;
  624|  33.6k|        } else {
  625|  33.6k|            using std::get;
  626|  33.6k|            auto l = new_size - 1;
  627|  33.6k|            auto v = slice_right_mut_visitor<node_t>();
  628|  33.6k|            auto r = visit_maybe_relaxed_sub(root, shift, tail_off, v, l, e);
  629|  33.6k|            auto new_shift = get<0>(r);
  630|  33.6k|            auto new_root  = get<1>(r);
  631|  33.6k|            auto new_tail  = get<3>(r);
  632|  33.6k|            if (new_root) {
  ------------------
  |  Branch (632:17): [True: 26.0k, False: 7.57k]
  ------------------
  633|  26.0k|                root  = new_root;
  634|  26.0k|                shift = new_shift;
  635|  26.0k|            } else {
  636|  7.57k|                root  = empty_root();
  637|  7.57k|                shift = BL;
  638|  7.57k|            }
  639|  33.6k|            dec_leaf(tail, size - tail_off);
  640|  33.6k|            size = new_size;
  641|  33.6k|            tail = new_tail;
  642|  33.6k|            return;
  643|  33.6k|        }
  644|  37.4k|    }
_ZN5immer6detail4rbts12concat_mut_rERKNS1_7rrbtreeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEERSB_NS9_5applyIS6_E4type4editE:
  942|  33.0k|    {
  943|  33.0k|        assert(&l != &r);
  ------------------
  |  Branch (943:9): [True: 33.0k, False: 0]
  ------------------
  944|  33.0k|        assert(r.size < (std::numeric_limits<size_t>::max() - l.size));
  ------------------
  |  Branch (944:9): [True: 33.0k, False: 0]
  ------------------
  945|  33.0k|        using std::get;
  946|  33.0k|        if (r.size == 0)
  ------------------
  |  Branch (946:13): [True: 3.36k, False: 29.6k]
  ------------------
  947|  3.36k|            r = std::move(l);
  948|  29.6k|        else if (l.size == 0)
  ------------------
  |  Branch (948:18): [True: 1.08k, False: 28.5k]
  ------------------
  949|  1.08k|            return;
  950|  28.5k|        else if (r.tail_offset() == 0) {
  ------------------
  |  Branch (950:18): [True: 6.14k, False: 22.4k]
  ------------------
  951|       |            // just concat the tail, similar to push_back
  952|  6.14k|            auto tail_offst = l.tail_offset();
  953|  6.14k|            auto tail_size  = l.size - tail_offst;
  954|  6.14k|            if (tail_size == branches<BL>) {
  ------------------
  |  Branch (954:17): [True: 1.13k, False: 5.01k]
  ------------------
  955|       |                // this could be improved by making sure that the
  956|       |                // newly created nodes as part of the `push_tail()`
  957|       |                // are tagged with `er`
  958|  1.13k|                auto res =
  959|  1.13k|                    l.push_tail(l.root, l.shift, tail_offst, l.tail, tail_size);
  960|  1.13k|                l.tail->inc(); // note: leak if mutably concatenated
  961|       |                               // with itself, but this is forbidden
  962|       |                               // by the interface
  963|  1.13k|                r = {l.size + r.size, get<0>(res), get<1>(res), r.tail->inc()};
  964|  1.13k|                return;
  965|  5.01k|            } else if (tail_size + r.size <= branches<BL>) {
  ------------------
  |  Branch (965:24): [True: 2.75k, False: 2.25k]
  ------------------
  966|       |                // doing this in a exception way mutating way is very
  967|       |                // tricky while potential performance gains are
  968|       |                // minimal (we need to move every element of the right
  969|       |                // tail anyways to make space for the left tail)
  970|       |                //
  971|       |                // we could however improve this by at least moving the
  972|       |                // elements of the right tail...
  973|  2.75k|                auto new_tail =
  974|  2.75k|                    node_t::copy_leaf(l.tail, tail_size, r.tail, r.size);
  975|  2.75k|                r = {l.size + r.size, l.shift, l.root->inc(), new_tail};
  976|  2.75k|                return;
  977|  2.75k|            } else {
  978|       |                // like the immutable version
  979|  2.25k|                auto remaining = branches<BL> - tail_size;
  980|  2.25k|                auto add_tail  = node_t::copy_leaf_e(
  981|  2.25k|                    er, l.tail, tail_size, r.tail, remaining);
  982|  2.25k|                IMMER_TRY {
  ------------------
  |  |   49|  2.25k|#define IMMER_TRY try
  ------------------
  983|  2.25k|                    auto new_tail =
  984|  2.25k|                        node_t::copy_leaf_e(er, r.tail, remaining, r.size);
  985|  2.25k|                    IMMER_TRY {
  ------------------
  |  |   49|  2.25k|#define IMMER_TRY try
  ------------------
  986|       |                        // this could be improved by making sure that the
  987|       |                        // newly created nodes as part of the `push_tail()`
  988|       |                        // are tagged with `er`
  989|  2.25k|                        auto new_root = l.push_tail(l.root,
  990|  2.25k|                                                    l.shift,
  991|  2.25k|                                                    tail_offst,
  992|  2.25k|                                                    add_tail,
  993|  2.25k|                                                    branches<BL>);
  994|  2.25k|                        r             = {l.size + r.size,
  995|  2.25k|                                         get<0>(new_root),
  996|  2.25k|                                         get<1>(new_root),
  997|  2.25k|                                         new_tail};
  998|  2.25k|                        return;
  999|  2.25k|                    }
 1000|  2.25k|                    IMMER_CATCH (...) {
 1001|      0|                        node_t::delete_leaf(new_tail, r.size - remaining);
 1002|      0|                        IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1003|      0|                    }
 1004|  2.25k|                }
 1005|  2.25k|                IMMER_CATCH (...) {
 1006|      0|                    node_t::delete_leaf(add_tail, branches<BL>);
 1007|      0|                    IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1008|      0|                }
 1009|  2.25k|            }
 1010|  22.4k|        } else if (l.tail_offset() == 0) {
  ------------------
  |  Branch (1010:20): [True: 2.57k, False: 19.8k]
  ------------------
 1011|  2.57k|            if (supports_transient_concat) {
  ------------------
  |  Branch (1011:17): [True: 2.57k, Folded]
  ------------------
 1012|  2.57k|                auto tail_offst = l.tail_offset();
 1013|  2.57k|                auto tail_size  = l.size - tail_offst;
 1014|  2.57k|                auto concated =
 1015|  2.57k|                    concat_trees_mut(er,
 1016|  2.57k|                                     MemoryPolicy::transience_t::noone,
 1017|  2.57k|                                     l.tail,
 1018|  2.57k|                                     tail_size,
 1019|  2.57k|                                     er,
 1020|  2.57k|                                     r.root,
 1021|  2.57k|                                     r.shift,
 1022|  2.57k|                                     r.tail_offset());
 1023|  2.57k|                IMMER_ASSERT_TAGGED(concated.shift() ==
  ------------------
  |  |   68|  2.57k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (1023:17): [True: 2.57k, False: 0]
  ------------------
 1024|  2.57k|                                    concated.node()->compute_shift());
 1025|  2.57k|                r.size += l.size;
 1026|  2.57k|                r.shift = concated.shift();
 1027|  2.57k|                r.root  = concated.node();
 1028|  2.57k|                assert(r.check_tree());
  ------------------
  |  Branch (1028:17): [True: 2.57k, False: 0]
  ------------------
 1029|  2.57k|            } else {
 1030|      0|                auto tail_offst = l.tail_offset();
 1031|      0|                auto tail_size  = l.size - tail_offst;
 1032|      0|                auto concated   = concat_trees(
 1033|      0|                    l.tail, tail_size, r.root, r.shift, r.tail_offset());
 1034|      0|                r = {l.size + r.size,
 1035|      0|                     concated.shift(),
 1036|      0|                     concated.node(),
 1037|      0|                     r.tail->inc()};
 1038|      0|                return;
 1039|      0|            }
 1040|  19.8k|        } else {
 1041|  19.8k|            if (supports_transient_concat) {
  ------------------
  |  Branch (1041:17): [True: 19.8k, Folded]
  ------------------
 1042|  19.8k|                auto tail_offst = l.tail_offset();
 1043|  19.8k|                auto tail_size  = l.size - tail_offst;
 1044|  19.8k|                auto concated =
 1045|  19.8k|                    concat_trees_mut(er,
 1046|  19.8k|                                     MemoryPolicy::transience_t::noone,
 1047|  19.8k|                                     l.root,
 1048|  19.8k|                                     l.shift,
 1049|  19.8k|                                     tail_offst,
 1050|  19.8k|                                     l.tail,
 1051|  19.8k|                                     tail_size,
 1052|  19.8k|                                     er,
 1053|  19.8k|                                     r.root,
 1054|  19.8k|                                     r.shift,
 1055|  19.8k|                                     r.tail_offset());
 1056|  19.8k|                IMMER_ASSERT_TAGGED(concated.shift() ==
  ------------------
  |  |   68|  19.8k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (1056:17): [True: 19.8k, False: 0]
  ------------------
 1057|  19.8k|                                    concated.node()->compute_shift());
 1058|  19.8k|                r.size += l.size;
 1059|  19.8k|                r.shift = concated.shift();
 1060|  19.8k|                r.root  = concated.node();
 1061|  19.8k|                assert(r.check_tree());
  ------------------
  |  Branch (1061:17): [True: 19.8k, False: 0]
  ------------------
 1062|  19.8k|                return;
 1063|  19.8k|            } else {
 1064|      0|                auto tail_offst = l.tail_offset();
 1065|      0|                auto tail_size  = l.size - tail_offst;
 1066|      0|                auto concated   = concat_trees(l.root,
 1067|      0|                                             l.shift,
 1068|      0|                                             tail_offst,
 1069|      0|                                             l.tail,
 1070|      0|                                             tail_size,
 1071|      0|                                             r.root,
 1072|      0|                                             r.shift,
 1073|      0|                                             r.tail_offset());
 1074|      0|                r               = {l.size + r.size,
 1075|      0|                                   concated.shift(),
 1076|      0|                                   concated.node(),
 1077|      0|                                   r.tail->inc()};
 1078|      0|                return;
 1079|      0|            }
 1080|  19.8k|        }
 1081|  33.0k|    }
_ZN5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEaSERKSB_:
  163|  6.79k|    {
  164|  6.79k|        auto next{other};
  165|  6.79k|        swap(*this, next);
  166|  6.79k|        return *this;
  167|  6.79k|    }
_ZN5immer6detail4rbts15concat_mut_lr_rERNS1_7rrbtreeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEENS9_5applyIS6_E4type4editESC_SG_:
 1220|  3.71k|    {
 1221|  3.71k|        assert(&l != &r);
  ------------------
  |  Branch (1221:9): [True: 3.71k, False: 0]
  ------------------
 1222|  3.71k|        assert(r.size < (std::numeric_limits<size_t>::max() - l.size));
  ------------------
  |  Branch (1222:9): [True: 3.71k, False: 0]
  ------------------
 1223|  3.71k|        using std::get;
 1224|  3.71k|        if (r.size == 0)
  ------------------
  |  Branch (1224:13): [True: 269, False: 3.44k]
  ------------------
 1225|    269|            r = l;
 1226|  3.44k|        else if (l.size == 0)
  ------------------
  |  Branch (1226:18): [True: 378, False: 3.06k]
  ------------------
 1227|    378|            return;
 1228|  3.06k|        else if (r.tail_offset() == 0) {
  ------------------
  |  Branch (1228:18): [True: 1.15k, False: 1.91k]
  ------------------
 1229|       |            // just concat the tail, similar to push_back
 1230|  1.15k|            auto tail_offst = l.tail_offset();
 1231|  1.15k|            auto tail_size  = l.size - tail_offst;
 1232|  1.15k|            if (tail_size == branches<BL>) {
  ------------------
  |  Branch (1232:17): [True: 318, False: 833]
  ------------------
 1233|       |                // this could be improved by making sure that the
 1234|       |                // newly created nodes as part of the `push_tail()`
 1235|       |                // are tagged with `er`
 1236|    318|                auto res =
 1237|    318|                    l.push_tail(l.root, l.shift, tail_offst, l.tail, tail_size);
 1238|    318|                r = {l.size + r.size, get<0>(res), get<1>(res), r.tail->inc()};
 1239|    318|                return;
 1240|    833|            } else if (tail_size + r.size <= branches<BL>) {
  ------------------
  |  Branch (1240:24): [True: 581, False: 252]
  ------------------
 1241|       |                // doing this in a exception way mutating way is very
 1242|       |                // tricky while potential performance gains are
 1243|       |                // minimal (we need to move every element of the right
 1244|       |                // tail anyways to make space for the left tail)
 1245|       |                //
 1246|       |                // we could however improve this by at least moving the
 1247|       |                // elements of the mutable tails...
 1248|    581|                auto new_tail =
 1249|    581|                    node_t::copy_leaf(l.tail, tail_size, r.tail, r.size);
 1250|    581|                r = {l.size + r.size, l.shift, l.root->inc(), new_tail};
 1251|    581|                return;
 1252|    581|            } else {
 1253|       |                // like the immutable version.
 1254|       |                // we could improve this also by moving elements
 1255|       |                // instead of just copying them
 1256|    252|                auto remaining = branches<BL> - tail_size;
 1257|    252|                auto add_tail  = node_t::copy_leaf_e(
 1258|    252|                    er, l.tail, tail_size, r.tail, remaining);
 1259|    252|                IMMER_TRY {
  ------------------
  |  |   49|    252|#define IMMER_TRY try
  ------------------
 1260|    252|                    auto new_tail =
 1261|    252|                        node_t::copy_leaf_e(er, r.tail, remaining, r.size);
 1262|    252|                    IMMER_TRY {
  ------------------
  |  |   49|    252|#define IMMER_TRY try
  ------------------
 1263|       |                        // this could be improved by making sure that the
 1264|       |                        // newly created nodes as part of the `push_tail()`
 1265|       |                        // are tagged with `er`
 1266|    252|                        auto new_root = l.push_tail(l.root,
 1267|    252|                                                    l.shift,
 1268|    252|                                                    tail_offst,
 1269|    252|                                                    add_tail,
 1270|    252|                                                    branches<BL>);
 1271|    252|                        r             = {l.size + r.size,
 1272|    252|                                         get<0>(new_root),
 1273|    252|                                         get<1>(new_root),
 1274|    252|                                         new_tail};
 1275|    252|                        return;
 1276|    252|                    }
 1277|    252|                    IMMER_CATCH (...) {
 1278|      0|                        node_t::delete_leaf(new_tail, r.size - remaining);
 1279|      0|                        IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1280|      0|                    }
 1281|    252|                }
 1282|    252|                IMMER_CATCH (...) {
 1283|      0|                    node_t::delete_leaf(add_tail, branches<BL>);
 1284|      0|                    IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1285|      0|                }
 1286|    252|            }
 1287|  1.91k|        } else if (l.tail_offset() == 0) {
  ------------------
  |  Branch (1287:20): [True: 712, False: 1.20k]
  ------------------
 1288|    712|            if (supports_transient_concat) {
  ------------------
  |  Branch (1288:17): [True: 712, Folded]
  ------------------
 1289|    712|                auto tail_offst = l.tail_offset();
 1290|    712|                auto tail_size  = l.size - tail_offst;
 1291|    712|                auto concated   = concat_trees_mut(er,
 1292|    712|                                                 el,
 1293|    712|                                                 l.tail,
 1294|    712|                                                 tail_size,
 1295|    712|                                                 er,
 1296|    712|                                                 r.root,
 1297|    712|                                                 r.shift,
 1298|    712|                                                 r.tail_offset());
 1299|    712|                IMMER_ASSERT_TAGGED(concated.shift() ==
  ------------------
  |  |   68|    712|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (1299:17): [True: 712, False: 0]
  ------------------
 1300|    712|                                    concated.node()->compute_shift());
 1301|    712|                assert(concated.node()->check(concated.shift(),
  ------------------
  |  Branch (1301:17): [True: 712, False: 0]
  ------------------
 1302|    712|                                              l.size + r.tail_offset()));
 1303|    712|                r.size += l.size;
 1304|    712|                r.shift = concated.shift();
 1305|    712|                r.root  = concated.node();
 1306|    712|                assert(r.check_tree());
  ------------------
  |  Branch (1306:17): [True: 712, False: 0]
  ------------------
 1307|    712|                l.hard_reset();
 1308|    712|            } else {
 1309|      0|                auto tail_offst = l.tail_offset();
 1310|      0|                auto tail_size  = l.size - tail_offst;
 1311|      0|                auto concated   = concat_trees(
 1312|      0|                    l.tail, tail_size, r.root, r.shift, r.tail_offset());
 1313|      0|                r = {l.size + r.size,
 1314|      0|                     concated.shift(),
 1315|      0|                     concated.node(),
 1316|      0|                     r.tail->inc()};
 1317|      0|                return;
 1318|      0|            }
 1319|  1.20k|        } else {
 1320|  1.20k|            if (supports_transient_concat) {
  ------------------
  |  Branch (1320:17): [True: 1.20k, Folded]
  ------------------
 1321|  1.20k|                auto tail_offst = l.tail_offset();
 1322|  1.20k|                auto tail_size  = l.size - tail_offst;
 1323|  1.20k|                auto concated   = concat_trees_mut(er,
 1324|  1.20k|                                                 el,
 1325|  1.20k|                                                 l.root,
 1326|  1.20k|                                                 l.shift,
 1327|  1.20k|                                                 tail_offst,
 1328|  1.20k|                                                 l.tail,
 1329|  1.20k|                                                 tail_size,
 1330|  1.20k|                                                 er,
 1331|  1.20k|                                                 r.root,
 1332|  1.20k|                                                 r.shift,
 1333|  1.20k|                                                 r.tail_offset());
 1334|  1.20k|                IMMER_ASSERT_TAGGED(concated.shift() ==
  ------------------
  |  |   68|  1.20k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (1334:17): [True: 1.20k, False: 0]
  ------------------
 1335|  1.20k|                                    concated.node()->compute_shift());
 1336|  1.20k|                assert(concated.node()->check(concated.shift(),
  ------------------
  |  Branch (1336:17): [True: 1.20k, False: 0]
  ------------------
 1337|  1.20k|                                              l.size + r.tail_offset()));
 1338|  1.20k|                r.size += l.size;
 1339|  1.20k|                r.shift = concated.shift();
 1340|  1.20k|                r.root  = concated.node();
 1341|  1.20k|                assert(r.check_tree());
  ------------------
  |  Branch (1341:17): [True: 1.20k, False: 0]
  ------------------
 1342|  1.20k|                l.hard_reset();
 1343|  1.20k|            } else {
 1344|      0|                auto tail_offst = l.tail_offset();
 1345|      0|                auto tail_size  = l.size - tail_offst;
 1346|      0|                auto concated   = concat_trees(l.root,
 1347|      0|                                             l.shift,
 1348|      0|                                             tail_offst,
 1349|      0|                                             l.tail,
 1350|      0|                                             tail_size,
 1351|      0|                                             r.root,
 1352|      0|                                             r.shift,
 1353|      0|                                             r.tail_offset());
 1354|      0|                r               = {l.size + r.size,
 1355|      0|                                   concated.shift(),
 1356|      0|                                   concated.node(),
 1357|      0|                                   r.tail->inc()};
 1358|      0|            }
 1359|  1.20k|        }
 1360|  3.71k|    }
_ZN5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE10hard_resetEv:
 1363|  4.02k|    {
 1364|  4.02k|        assert(supports_transient_concat);
  ------------------
  |  Branch (1364:9): [True: 4.02k, Folded]
  ------------------
 1365|  4.02k|        size  = 0;
 1366|  4.02k|        shift = BL;
 1367|  4.02k|        root  = empty_root();
 1368|  4.02k|        tail  = empty_tail();
 1369|  4.02k|    }
_ZN5immer6detail4rbts12concat_mut_lERNS1_7rrbtreeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEENS9_5applyIS6_E4type4editERKSB_:
  816|  1.85M|    {
  817|  1.85M|        assert(&l != &r);
  ------------------
  |  Branch (817:9): [True: 1.85M, False: 0]
  ------------------
  818|  1.85M|        assert(r.size < (std::numeric_limits<size_t>::max() - l.size));
  ------------------
  |  Branch (818:9): [True: 1.85M, False: 0]
  ------------------
  819|  1.85M|        using std::get;
  820|  1.85M|        if (l.size == 0)
  ------------------
  |  Branch (820:13): [True: 2.22k, False: 1.85M]
  ------------------
  821|  2.22k|            l = r;
  822|  1.85M|        else if (r.size == 0)
  ------------------
  |  Branch (822:18): [True: 13.6k, False: 1.84M]
  ------------------
  823|  13.6k|            return;
  824|  1.84M|        else if (r.tail_offset() == 0) {
  ------------------
  |  Branch (824:18): [True: 1.75M, False: 91.3k]
  ------------------
  825|       |            // just concat the tail, similar to push_back
  826|  1.75M|            auto tail_offst = l.tail_offset();
  827|  1.75M|            auto tail_size  = l.size - tail_offst;
  828|  1.75M|            if (tail_size == branches<BL>) {
  ------------------
  |  Branch (828:17): [True: 422k, False: 1.32M]
  ------------------
  829|   422k|                l.push_tail_mut(el, tail_offst, l.tail, tail_size);
  830|   422k|                l.tail = r.tail->inc();
  831|   422k|                l.size += r.size;
  832|   422k|                return;
  833|  1.32M|            } else if (tail_size + r.size <= branches<BL>) {
  ------------------
  |  Branch (833:24): [True: 9.28k, False: 1.32M]
  ------------------
  834|  9.28k|                l.ensure_mutable_tail(el, tail_size);
  835|  9.28k|                detail::uninitialized_copy(r.tail->leaf(),
  836|  9.28k|                                           r.tail->leaf() + r.size,
  837|  9.28k|                                           l.tail->leaf() + tail_size);
  838|  9.28k|                l.size += r.size;
  839|  9.28k|                return;
  840|  1.32M|            } else {
  841|  1.32M|                auto remaining = branches<BL> - tail_size;
  842|  1.32M|                l.ensure_mutable_tail(el, tail_size);
  843|  1.32M|                detail::uninitialized_copy(r.tail->leaf(),
  844|  1.32M|                                           r.tail->leaf() + remaining,
  845|  1.32M|                                           l.tail->leaf() + tail_size);
  846|  1.32M|                IMMER_TRY {
  ------------------
  |  |   49|  1.32M|#define IMMER_TRY try
  ------------------
  847|  1.32M|                    auto new_tail =
  848|  1.32M|                        node_t::copy_leaf_e(el, r.tail, remaining, r.size);
  849|  1.32M|                    IMMER_TRY {
  ------------------
  |  |   49|  1.32M|#define IMMER_TRY try
  ------------------
  850|  1.32M|                        l.push_tail_mut(el, tail_offst, l.tail, branches<BL>);
  851|  1.32M|                        l.tail = new_tail;
  852|  1.32M|                        l.size += r.size;
  853|  1.32M|                        return;
  854|  1.32M|                    }
  855|  1.32M|                    IMMER_CATCH (...) {
  856|      0|                        node_t::delete_leaf(new_tail, r.size - remaining);
  857|      0|                        IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  858|      0|                    }
  859|  1.32M|                }
  860|  1.32M|                IMMER_CATCH (...) {
  861|      0|                    detail::destroy_n(r.tail->leaf() + tail_size, remaining);
  862|      0|                    IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  863|      0|                }
  864|  1.32M|            }
  865|  1.75M|        } else if (l.tail_offset() == 0) {
  ------------------
  |  Branch (865:20): [True: 3.14k, False: 88.2k]
  ------------------
  866|  3.14k|            if (supports_transient_concat) {
  ------------------
  |  Branch (866:17): [True: 3.14k, Folded]
  ------------------
  867|  3.14k|                auto tail_offst = l.tail_offset();
  868|  3.14k|                auto tail_size  = l.size - tail_offst;
  869|  3.14k|                auto concated =
  870|  3.14k|                    concat_trees_mut(el,
  871|  3.14k|                                     el,
  872|  3.14k|                                     l.tail,
  873|  3.14k|                                     tail_size,
  874|  3.14k|                                     MemoryPolicy::transience_t::noone,
  875|  3.14k|                                     r.root,
  876|  3.14k|                                     r.shift,
  877|  3.14k|                                     r.tail_offset());
  878|  3.14k|                IMMER_ASSERT_TAGGED(concated.shift() ==
  ------------------
  |  |   68|  3.14k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (878:17): [True: 3.14k, False: 0]
  ------------------
  879|  3.14k|                                    concated.node()->compute_shift());
  880|  3.14k|                l.size += r.size;
  881|  3.14k|                l.shift = concated.shift();
  882|  3.14k|                l.root  = concated.node();
  883|  3.14k|                l.tail  = r.tail;
  884|  3.14k|                assert(l.check_tree());
  ------------------
  |  Branch (884:17): [True: 3.14k, False: 0]
  ------------------
  885|  3.14k|            } else {
  886|      0|                auto tail_offst = l.tail_offset();
  887|      0|                auto tail_size  = l.size - tail_offst;
  888|      0|                auto concated   = concat_trees(
  889|      0|                    l.tail, tail_size, r.root, r.shift, r.tail_offset());
  890|      0|                l = {l.size + r.size,
  891|      0|                     concated.shift(),
  892|      0|                     concated.node(),
  893|      0|                     r.tail->inc()};
  894|      0|                assert(l.check_tree());
  ------------------
  |  Branch (894:17): [True: 0, False: 0]
  ------------------
  895|      0|                return;
  896|      0|            }
  897|  88.2k|        } else {
  898|  88.2k|            if (supports_transient_concat) {
  ------------------
  |  Branch (898:17): [True: 88.2k, Folded]
  ------------------
  899|  88.2k|                auto tail_offst = l.tail_offset();
  900|  88.2k|                auto tail_size  = l.size - tail_offst;
  901|  88.2k|                assert(l.check_tree());
  ------------------
  |  Branch (901:17): [True: 88.2k, False: 0]
  ------------------
  902|  88.2k|                assert(r.check_tree());
  ------------------
  |  Branch (902:17): [True: 88.2k, False: 0]
  ------------------
  903|  88.2k|                auto concated =
  904|  88.2k|                    concat_trees_mut(el,
  905|  88.2k|                                     el,
  906|  88.2k|                                     l.root,
  907|  88.2k|                                     l.shift,
  908|  88.2k|                                     tail_offst,
  909|  88.2k|                                     l.tail,
  910|  88.2k|                                     tail_size,
  911|  88.2k|                                     MemoryPolicy::transience_t::noone,
  912|  88.2k|                                     r.root,
  913|  88.2k|                                     r.shift,
  914|  88.2k|                                     r.tail_offset());
  915|  88.2k|                IMMER_ASSERT_TAGGED(concated.shift() ==
  ------------------
  |  |   68|  88.2k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (915:17): [True: 88.2k, False: 0]
  ------------------
  916|  88.2k|                                    concated.node()->compute_shift());
  917|  88.2k|                l.size += r.size;
  918|  88.2k|                l.shift = concated.shift();
  919|  88.2k|                l.root  = concated.node();
  920|  88.2k|                l.tail  = r.tail;
  921|  88.2k|                assert(l.check_tree());
  ------------------
  |  Branch (921:17): [True: 88.2k, False: 0]
  ------------------
  922|  88.2k|            } else {
  923|      0|                auto tail_offst = l.tail_offset();
  924|      0|                auto tail_size  = l.size - tail_offst;
  925|      0|                auto concated   = concat_trees(l.root,
  926|      0|                                             l.shift,
  927|      0|                                             tail_offst,
  928|      0|                                             l.tail,
  929|      0|                                             tail_size,
  930|      0|                                             r.root,
  931|      0|                                             r.shift,
  932|      0|                                             r.tail_offset());
  933|      0|                l               = {l.size + r.size,
  934|      0|                                   concated.shift(),
  935|      0|                                   concated.node(),
  936|      0|                                   r.tail->inc()};
  937|      0|            }
  938|  88.2k|        }
  939|  1.85M|    }
_ZN5immer6detail4rbts15concat_mut_lr_lERNS1_7rrbtreeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEENS9_5applyIS6_E4type4editESC_SG_:
 1084|  6.55k|    {
 1085|  6.55k|        assert(&l != &r);
  ------------------
  |  Branch (1085:9): [True: 6.55k, False: 0]
  ------------------
 1086|  6.55k|        assert(r.size < (std::numeric_limits<size_t>::max() - l.size));
  ------------------
  |  Branch (1086:9): [True: 6.55k, False: 0]
  ------------------
 1087|  6.55k|        using std::get;
 1088|  6.55k|        if (l.size == 0)
  ------------------
  |  Branch (1088:13): [True: 933, False: 5.62k]
  ------------------
 1089|    933|            l = r;
 1090|  5.62k|        else if (r.size == 0)
  ------------------
  |  Branch (1090:18): [True: 1.08k, False: 4.54k]
  ------------------
 1091|  1.08k|            return;
 1092|  4.54k|        else if (r.tail_offset() == 0) {
  ------------------
  |  Branch (1092:18): [True: 2.42k, False: 2.11k]
  ------------------
 1093|       |            // just concat the tail, similar to push_back
 1094|  2.42k|            auto tail_offst = l.tail_offset();
 1095|  2.42k|            auto tail_size  = l.size - tail_offst;
 1096|  2.42k|            if (tail_size == branches<BL>) {
  ------------------
  |  Branch (1096:17): [True: 443, False: 1.98k]
  ------------------
 1097|    443|                l.push_tail_mut(el, tail_offst, l.tail, tail_size);
 1098|    443|                l.tail = r.tail->inc();
 1099|    443|                l.size += r.size;
 1100|    443|                return;
 1101|  1.98k|            } else if (tail_size + r.size <= branches<BL>) {
  ------------------
  |  Branch (1101:24): [True: 1.22k, False: 763]
  ------------------
 1102|  1.22k|                l.ensure_mutable_tail(el, tail_size);
 1103|  1.22k|                if (r.tail->can_mutate(er))
  ------------------
  |  Branch (1103:21): [True: 821, False: 401]
  ------------------
 1104|    821|                    detail::uninitialized_move(r.tail->leaf(),
 1105|    821|                                               r.tail->leaf() + r.size,
 1106|    821|                                               l.tail->leaf() + tail_size);
 1107|    401|                else
 1108|    401|                    detail::uninitialized_copy(r.tail->leaf(),
 1109|    401|                                               r.tail->leaf() + r.size,
 1110|    401|                                               l.tail->leaf() + tail_size);
 1111|  1.22k|                l.size += r.size;
 1112|  1.22k|                return;
 1113|  1.22k|            } else {
 1114|    763|                auto remaining = branches<BL> - tail_size;
 1115|    763|                l.ensure_mutable_tail(el, tail_size);
 1116|    763|                if (r.tail->can_mutate(er))
  ------------------
  |  Branch (1116:21): [True: 201, False: 562]
  ------------------
 1117|    201|                    detail::uninitialized_move(r.tail->leaf(),
 1118|    201|                                               r.tail->leaf() + remaining,
 1119|    201|                                               l.tail->leaf() + tail_size);
 1120|    562|                else
 1121|    562|                    detail::uninitialized_copy(r.tail->leaf(),
 1122|    562|                                               r.tail->leaf() + remaining,
 1123|    562|                                               l.tail->leaf() + tail_size);
 1124|    763|                IMMER_TRY {
  ------------------
  |  |   49|    763|#define IMMER_TRY try
  ------------------
 1125|    763|                    auto new_tail =
 1126|    763|                        node_t::copy_leaf_e(el, r.tail, remaining, r.size);
 1127|    763|                    IMMER_TRY {
  ------------------
  |  |   49|    763|#define IMMER_TRY try
  ------------------
 1128|    763|                        l.push_tail_mut(el, tail_offst, l.tail, branches<BL>);
 1129|    763|                        l.tail = new_tail;
 1130|    763|                        l.size += r.size;
 1131|    763|                        return;
 1132|    763|                    }
 1133|    763|                    IMMER_CATCH (...) {
 1134|      0|                        node_t::delete_leaf(new_tail, r.size - remaining);
 1135|      0|                        IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1136|      0|                    }
 1137|    763|                }
 1138|    763|                IMMER_CATCH (...) {
 1139|      0|                    detail::destroy_n(r.tail->leaf() + tail_size, remaining);
 1140|      0|                    IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1141|      0|                }
 1142|    763|            }
 1143|  2.42k|        } else if (l.tail_offset() == 0) {
  ------------------
  |  Branch (1143:20): [True: 744, False: 1.36k]
  ------------------
 1144|    744|            if (supports_transient_concat) {
  ------------------
  |  Branch (1144:17): [True: 744, Folded]
  ------------------
 1145|    744|                auto tail_offst = l.tail_offset();
 1146|    744|                auto tail_size  = l.size - tail_offst;
 1147|    744|                auto concated   = concat_trees_mut(el,
 1148|    744|                                                 el,
 1149|    744|                                                 l.tail,
 1150|    744|                                                 tail_size,
 1151|    744|                                                 er,
 1152|    744|                                                 r.root,
 1153|    744|                                                 r.shift,
 1154|    744|                                                 r.tail_offset());
 1155|    744|                IMMER_ASSERT_TAGGED(concated.shift() ==
  ------------------
  |  |   68|    744|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (1155:17): [True: 744, False: 0]
  ------------------
 1156|    744|                                    concated.node()->compute_shift());
 1157|    744|                l.size += r.size;
 1158|    744|                l.shift = concated.shift();
 1159|    744|                l.root  = concated.node();
 1160|    744|                l.tail  = r.tail;
 1161|    744|                assert(l.check_tree());
  ------------------
  |  Branch (1161:17): [True: 744, False: 0]
  ------------------
 1162|    744|                r.hard_reset();
 1163|    744|                return;
 1164|    744|            } else {
 1165|      0|                auto tail_offst = l.tail_offset();
 1166|      0|                auto tail_size  = l.size - tail_offst;
 1167|      0|                auto concated   = concat_trees(
 1168|      0|                    l.tail, tail_size, r.root, r.shift, r.tail_offset());
 1169|      0|                l = {l.size + r.size,
 1170|      0|                     concated.shift(),
 1171|      0|                     concated.node(),
 1172|      0|                     r.tail->inc()};
 1173|      0|                return;
 1174|      0|            }
 1175|  1.36k|        } else {
 1176|  1.36k|            if (supports_transient_concat) {
  ------------------
  |  Branch (1176:17): [True: 1.36k, Folded]
  ------------------
 1177|  1.36k|                auto tail_offst = l.tail_offset();
 1178|  1.36k|                auto tail_size  = l.size - tail_offst;
 1179|  1.36k|                auto concated   = concat_trees_mut(el,
 1180|  1.36k|                                                 el,
 1181|  1.36k|                                                 l.root,
 1182|  1.36k|                                                 l.shift,
 1183|  1.36k|                                                 tail_offst,
 1184|  1.36k|                                                 l.tail,
 1185|  1.36k|                                                 tail_size,
 1186|  1.36k|                                                 er,
 1187|  1.36k|                                                 r.root,
 1188|  1.36k|                                                 r.shift,
 1189|  1.36k|                                                 r.tail_offset());
 1190|  1.36k|                IMMER_ASSERT_TAGGED(concated.shift() ==
  ------------------
  |  |   68|  1.36k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (1190:17): [True: 1.36k, False: 0]
  ------------------
 1191|  1.36k|                                    concated.node()->compute_shift());
 1192|  1.36k|                l.size += r.size;
 1193|  1.36k|                l.shift = concated.shift();
 1194|  1.36k|                l.root  = concated.node();
 1195|  1.36k|                l.tail  = r.tail;
 1196|  1.36k|                assert(l.check_tree());
  ------------------
  |  Branch (1196:17): [True: 1.36k, False: 0]
  ------------------
 1197|  1.36k|                r.hard_reset();
 1198|  1.36k|                return;
 1199|  1.36k|            } else {
 1200|      0|                auto tail_offst = l.tail_offset();
 1201|      0|                auto tail_size  = l.size - tail_offst;
 1202|      0|                auto concated   = concat_trees(l.root,
 1203|      0|                                             l.shift,
 1204|      0|                                             tail_offst,
 1205|      0|                                             l.tail,
 1206|      0|                                             tail_size,
 1207|      0|                                             r.root,
 1208|      0|                                             r.shift,
 1209|      0|                                             r.tail_offset());
 1210|      0|                l               = {l.size + r.size,
 1211|      0|                                   concated.shift(),
 1212|      0|                                   concated.node(),
 1213|      0|                                   r.tail->inc()};
 1214|      0|                return;
 1215|      0|            }
 1216|  1.36k|        }
 1217|  6.55k|    }

_ZN5immer6detail4rbts12visitor_baseINS1_18slice_left_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEELb1EEEE13visit_relaxedIJRNS1_11relaxed_posISD_EERmEEEDcDpOT_:
   31|  14.1k|    {
   32|  14.1k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|  14.1k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_18slice_left_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEELb0EEEE13visit_relaxedIJRNS1_11relaxed_posISD_EERmEEEDcDpOT_:
   31|  92.1k|    {
   32|  92.1k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|  92.1k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_18slice_left_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEELb0EEEE13visit_regularIJRNS1_15regular_sub_posISD_EERmEEEDcDpOT_:
   37|  1.40k|    {
   38|  1.40k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  1.40k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_18slice_left_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEELb0EEEE13visit_regularIJRNS1_8full_posISD_EEmEEEDcDpOT_:
   37|  2.39k|    {
   38|  2.39k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  2.39k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_18slice_left_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEELb1EEEE13visit_regularIJRNS1_15regular_sub_posISD_EERmEEEDcDpOT_:
   37|  2.55k|    {
   38|  2.55k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  2.55k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_18slice_left_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEELb1EEEE13visit_regularIJRNS1_8full_posISD_EEmEEEDcDpOT_:
   37|  1.22k|    {
   38|  1.22k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  1.22k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_18slice_left_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEELb1EEEE13visit_regularIJRNS1_15regular_sub_posISD_EEmEEEDcDpOT_:
   37|    358|    {
   38|    358|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|    358|    }
_ZN5immer6detail4rbts12visitor_baseINS1_25concat_trees_left_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE13visit_regularIJRNS1_25singleton_regular_sub_posISD_EENS1_14empty_leaf_posISD_EERPSD_RjRmEEEDcDpOT_:
   37|  3.05k|    {
   38|  3.05k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  3.05k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_25concat_trees_left_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE11visit_innerIJRNS1_25singleton_regular_sub_posISD_EENS1_14empty_leaf_posISD_EERPSD_RjRmEEEDcDpOT_:
   43|  3.05k|    {
   44|  3.05k|        return Deriv::visit_node(std::forward<Args>(args)...);
   45|  3.05k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_26concat_trees_right_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE13visit_relaxedIJRNS1_11relaxed_posISD_EERNS1_25singleton_regular_sub_posISD_EERNS1_14empty_leaf_posISD_EEEEEDcDpOT_:
   31|  1.73k|    {
   32|  1.73k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|  1.73k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_26concat_trees_right_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE11visit_innerIJRNS1_11relaxed_posISD_EERNS1_25singleton_regular_sub_posISD_EERNS1_14empty_leaf_posISD_EEEEEDcDpOT_:
   43|  1.73k|    {
   44|  1.73k|        return Deriv::visit_node(std::forward<Args>(args)...);
   45|  1.73k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_34concat_rebalance_plan_fill_visitorEE10visit_leafIJRNS1_12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEERNS1_21concat_rebalance_planILj2ELj2EEEEEEDcDpOT_:
   49|   952k|    {
   50|   952k|        return Deriv::visit_node(std::forward<Args>(args)...);
   51|   952k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_34concat_rebalance_plan_fill_visitorEE13visit_relaxedIJRNS1_11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEERNS1_21concat_rebalance_planILj2ELj2EEEEEEDcDpOT_:
   31|  4.14M|    {
   32|  4.14M|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|  4.14M|    }
_ZN5immer6detail4rbts12visitor_baseINS1_34concat_rebalance_plan_fill_visitorEE11visit_innerIJRNS1_11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEERNS1_21concat_rebalance_planILj2ELj2EEEEEEDcDpOT_:
   43|  4.14M|    {
   44|  4.14M|        return Deriv::visit_node(std::forward<Args>(args)...);
   45|  4.14M|    }
_ZN5immer6detail4rbts12visitor_baseINS1_21concat_merger_visitorEE13visit_relaxedIJRNS1_11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEERNS1_13concat_mergerISG_EEEEEDcDpOT_:
   31|  1.33M|    {
   32|  1.33M|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|  1.33M|    }
_ZN5immer6detail4rbts12visitor_baseINS1_20concat_right_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE13visit_relaxedIJRNS1_11relaxed_posISD_EERNS1_25singleton_regular_sub_posISD_EERNS1_14empty_leaf_posISD_EEEEEDcDpOT_:
   31|  5.14k|    {
   32|  5.14k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|  5.14k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_20concat_right_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE13visit_regularIJRNS1_15regular_sub_posISD_EERNS1_25singleton_regular_sub_posISD_EERNS1_14empty_leaf_posISD_EEEEEDcDpOT_:
   37|    202|    {
   38|    202|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|    202|    }
_ZN5immer6detail4rbts12visitor_baseINS1_20concat_right_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE13visit_regularIJRNS1_8full_posISD_EERNS1_25singleton_regular_sub_posISD_EERNS1_14empty_leaf_posISD_EEEEEDcDpOT_:
   37|  1.11k|    {
   38|  1.11k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  1.11k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_34concat_rebalance_plan_fill_visitorEE10visit_leafIJRNS1_13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEERNS1_21concat_rebalance_planILj2ELj2EEEEEEDcDpOT_:
   49|  98.3k|    {
   50|  98.3k|        return Deriv::visit_node(std::forward<Args>(args)...);
   51|  98.3k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_34concat_rebalance_plan_fill_visitorEE13visit_regularIJRNS1_8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEERNS1_21concat_rebalance_planILj2ELj2EEEEEEDcDpOT_:
   37|   150k|    {
   38|   150k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|   150k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_34concat_rebalance_plan_fill_visitorEE11visit_innerIJRNS1_8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEERNS1_21concat_rebalance_planILj2ELj2EEEEEEDcDpOT_:
   43|   150k|    {
   44|   150k|        return Deriv::visit_node(std::forward<Args>(args)...);
   45|   150k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_21concat_merger_visitorEE13visit_regularIJRNS1_8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEERNS1_13concat_mergerISG_EEEEEDcDpOT_:
   37|  26.4k|    {
   38|  26.4k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  26.4k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_34concat_rebalance_plan_fill_visitorEE13visit_regularIJRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEERNS1_21concat_rebalance_planILj2ELj2EEEEEEDcDpOT_:
   37|  96.8k|    {
   38|  96.8k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  96.8k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_34concat_rebalance_plan_fill_visitorEE11visit_innerIJRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEERNS1_21concat_rebalance_planILj2ELj2EEEEEEDcDpOT_:
   43|  96.8k|    {
   44|  96.8k|        return Deriv::visit_node(std::forward<Args>(args)...);
   45|  96.8k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_21concat_merger_visitorEE13visit_regularIJRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEERNS1_13concat_mergerISG_EEEEEDcDpOT_:
   37|  15.2k|    {
   38|  15.2k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  15.2k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_26concat_trees_right_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE13visit_regularIJRNS1_15regular_sub_posISD_EERNS1_25singleton_regular_sub_posISD_EERNS1_14empty_leaf_posISD_EEEEEDcDpOT_:
   37|  1.31k|    {
   38|  1.31k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  1.31k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_26concat_trees_right_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE11visit_innerIJRNS1_15regular_sub_posISD_EERNS1_25singleton_regular_sub_posISD_EERNS1_14empty_leaf_posISD_EEEEEDcDpOT_:
   43|  1.31k|    {
   44|  1.31k|        return Deriv::visit_node(std::forward<Args>(args)...);
   45|  1.31k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_25concat_trees_left_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE13visit_relaxedIJRNS1_11relaxed_posISD_EENS1_8leaf_posISD_EERPSD_RjRmEEEDcDpOT_:
   31|  41.5k|    {
   32|  41.5k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|  41.5k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_25concat_trees_left_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE11visit_innerIJRNS1_11relaxed_posISD_EENS1_8leaf_posISD_EERPSD_RjRmEEEDcDpOT_:
   43|  41.5k|    {
   44|  41.5k|        return Deriv::visit_node(std::forward<Args>(args)...);
   45|  41.5k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_26concat_trees_right_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE13visit_relaxedIJRNS1_11relaxed_posISD_EESJ_RNS1_8leaf_posISD_EEEEEDcDpOT_:
   31|  38.6k|    {
   32|  38.6k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|  38.6k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_26concat_trees_right_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE11visit_innerIJRNS1_11relaxed_posISD_EESJ_RNS1_8leaf_posISD_EEEEEDcDpOT_:
   43|  38.6k|    {
   44|  38.6k|        return Deriv::visit_node(std::forward<Args>(args)...);
   45|  38.6k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_19concat_left_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE13visit_relaxedIJRNS1_11relaxed_posISD_EERNS1_8leaf_posISD_EESJ_EEEDcDpOT_:
   31|  2.74k|    {
   32|  2.74k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|  2.74k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_19concat_left_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE13visit_regularIJRNS1_15regular_sub_posISD_EERNS1_8leaf_posISD_EERNS1_11relaxed_posISD_EEEEEDcDpOT_:
   37|    795|    {
   38|    795|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|    795|    }
_ZN5immer6detail4rbts12visitor_baseINS1_20concat_right_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE13visit_relaxedIJRNS1_11relaxed_posISD_EERNS1_15regular_sub_posISD_EERNS1_8leaf_posISD_EEEEEDcDpOT_:
   31|  9.36k|    {
   32|  9.36k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|  9.36k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_20concat_right_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE13visit_regularIJRNS1_15regular_sub_posISD_EESJ_RNS1_8leaf_posISD_EEEEEDcDpOT_:
   37|  1.00k|    {
   38|  1.00k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  1.00k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_19concat_left_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE13visit_regularIJRNS1_15regular_sub_posISD_EERNS1_8leaf_posISD_EESJ_EEEDcDpOT_:
   37|  1.25k|    {
   38|  1.25k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  1.25k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_20concat_right_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE13visit_regularIJRNS1_8full_posISD_EERNS1_15regular_sub_posISD_EERNS1_8leaf_posISD_EEEEEDcDpOT_:
   37|  4.73k|    {
   38|  4.73k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  4.73k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_19concat_both_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE13visit_regularIJRNS1_15regular_sub_posISD_EERNS1_8leaf_posISD_EERNS1_8full_posISD_EEEEEDcDpOT_:
   37|  2.04k|    {
   38|  2.04k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  2.04k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_19concat_both_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE13visit_regularIJRNS1_15regular_sub_posISD_EERNS1_8leaf_posISD_EESJ_EEEDcDpOT_:
   37|  1.82k|    {
   38|  1.82k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  1.82k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_19concat_both_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE13visit_regularIJRNS1_15regular_sub_posISD_EERNS1_8leaf_posISD_EERNS1_11relaxed_posISD_EEEEEDcDpOT_:
   37|  9.38k|    {
   38|  9.38k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  9.38k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_20concat_right_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE13visit_relaxedIJRNS1_11relaxed_posISD_EESJ_RNS1_8leaf_posISD_EEEEEDcDpOT_:
   31|   167k|    {
   32|   167k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|   167k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_20concat_right_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE13visit_regularIJRNS1_15regular_sub_posISD_EERNS1_11relaxed_posISD_EERNS1_8leaf_posISD_EEEEEDcDpOT_:
   37|    248|    {
   38|    248|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|    248|    }
_ZN5immer6detail4rbts12visitor_baseINS1_19concat_left_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE13visit_relaxedIJRNS1_11relaxed_posISD_EERNS1_8leaf_posISD_EERNS1_15regular_sub_posISD_EEEEEDcDpOT_:
   31|  2.31k|    {
   32|  2.31k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|  2.31k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_20concat_right_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE13visit_regularIJRNS1_8full_posISD_EERNS1_11relaxed_posISD_EERNS1_8leaf_posISD_EEEEEDcDpOT_:
   37|  1.95k|    {
   38|  1.95k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  1.95k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_19concat_both_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE13visit_relaxedIJRNS1_11relaxed_posISD_EERNS1_8leaf_posISD_EERNS1_8full_posISD_EEEEEDcDpOT_:
   31|    405|    {
   32|    405|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|    405|    }
_ZN5immer6detail4rbts12visitor_baseINS1_19concat_both_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE13visit_relaxedIJRNS1_11relaxed_posISD_EERNS1_8leaf_posISD_EERNS1_15regular_sub_posISD_EEEEEDcDpOT_:
   31|    656|    {
   32|    656|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|    656|    }
_ZN5immer6detail4rbts12visitor_baseINS1_19concat_both_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE13visit_relaxedIJRNS1_11relaxed_posISD_EERNS1_8leaf_posISD_EESJ_EEEDcDpOT_:
   31|   164k|    {
   32|   164k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|   164k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_26concat_trees_right_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE13visit_regularIJRNS1_15regular_sub_posISD_EERNS1_11relaxed_posISD_EERNS1_8leaf_posISD_EEEEEDcDpOT_:
   37|  2.82k|    {
   38|  2.82k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  2.82k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_26concat_trees_right_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE11visit_innerIJRNS1_15regular_sub_posISD_EERNS1_11relaxed_posISD_EERNS1_8leaf_posISD_EEEEEDcDpOT_:
   43|  2.82k|    {
   44|  2.82k|        return Deriv::visit_node(std::forward<Args>(args)...);
   45|  2.82k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_25concat_trees_left_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE13visit_regularIJRNS1_15regular_sub_posISD_EENS1_8leaf_posISD_EERPSD_RjRmEEEDcDpOT_:
   37|  6.00k|    {
   38|  6.00k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  6.00k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_25concat_trees_left_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE11visit_innerIJRNS1_15regular_sub_posISD_EENS1_8leaf_posISD_EERPSD_RjRmEEEDcDpOT_:
   43|  6.00k|    {
   44|  6.00k|        return Deriv::visit_node(std::forward<Args>(args)...);
   45|  6.00k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_26concat_trees_right_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE13visit_relaxedIJRNS1_11relaxed_posISD_EERNS1_15regular_sub_posISD_EERNS1_8leaf_posISD_EEEEEDcDpOT_:
   31|    904|    {
   32|    904|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|    904|    }
_ZN5immer6detail4rbts12visitor_baseINS1_26concat_trees_right_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE11visit_innerIJRNS1_11relaxed_posISD_EERNS1_15regular_sub_posISD_EERNS1_8leaf_posISD_EEEEEDcDpOT_:
   43|    904|    {
   44|    904|        return Deriv::visit_node(std::forward<Args>(args)...);
   45|    904|    }
_ZN5immer6detail4rbts12visitor_baseINS1_26concat_trees_right_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE13visit_regularIJRNS1_15regular_sub_posISD_EESJ_RNS1_8leaf_posISD_EEEEEDcDpOT_:
   37|  5.09k|    {
   38|  5.09k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  5.09k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_26concat_trees_right_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE11visit_innerIJRNS1_15regular_sub_posISD_EESJ_RNS1_8leaf_posISD_EEEEEDcDpOT_:
   43|  5.09k|    {
   44|  5.09k|        return Deriv::visit_node(std::forward<Args>(args)...);
   45|  5.09k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_29concat_trees_left_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE13visit_regularIJRNS1_25singleton_regular_sub_posISD_EERNSB_5applyIS8_E4type4editESO_NS1_14empty_leaf_posISD_EESO_RPSD_RjRmEEEDcDpOT_:
   37|  7.18k|    {
   38|  7.18k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  7.18k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_29concat_trees_left_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE11visit_innerIJRNS1_25singleton_regular_sub_posISD_EERNSB_5applyIS8_E4type4editESO_NS1_14empty_leaf_posISD_EESO_RPSD_RjRmEEEDcDpOT_:
   43|  7.18k|    {
   44|  7.18k|        return Deriv::visit_node(std::forward<Args>(args)...);
   45|  7.18k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_30concat_trees_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE13visit_relaxedIJRNS1_11relaxed_posISD_EERNSB_5applyIS8_E4type4editESO_RNS1_25singleton_regular_sub_posISD_EERNS1_14empty_leaf_posISD_EESO_EEEDcDpOT_:
   31|  3.77k|    {
   32|  3.77k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|  3.77k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_30concat_trees_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE11visit_innerIJRNS1_11relaxed_posISD_EERNSB_5applyIS8_E4type4editESO_RNS1_25singleton_regular_sub_posISD_EERNS1_14empty_leaf_posISD_EESO_EEEDcDpOT_:
   43|  3.77k|    {
   44|  3.77k|        return Deriv::visit_node(std::forward<Args>(args)...);
   45|  3.77k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_25concat_merger_mut_visitorEE13visit_relaxedIJRNS1_11relaxed_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEERNS1_17concat_merger_mutISG_EERNSE_5applyISB_E4type4editEEEEDcDpOT_:
   31|  2.81M|    {
   32|  2.81M|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|  2.81M|    }
_ZN5immer6detail4rbts12visitor_baseINS1_24concat_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE13visit_relaxedIJRNS1_11relaxed_posISD_EERNSB_5applyIS8_E4type4editESO_RNS1_25singleton_regular_sub_posISD_EERNS1_14empty_leaf_posISD_EESO_EEEDcDpOT_:
   31|  13.6k|    {
   32|  13.6k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|  13.6k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_24concat_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE13visit_regularIJRNS1_15regular_sub_posISD_EERNSB_5applyIS8_E4type4editESO_RNS1_25singleton_regular_sub_posISD_EERNS1_14empty_leaf_posISD_EESO_EEEDcDpOT_:
   37|    272|    {
   38|    272|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|    272|    }
_ZN5immer6detail4rbts12visitor_baseINS1_24concat_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE13visit_regularIJRNS1_8full_posISD_EERNSB_5applyIS8_E4type4editESO_RNS1_25singleton_regular_sub_posISD_EERNS1_14empty_leaf_posISD_EESO_EEEDcDpOT_:
   37|  1.77k|    {
   38|  1.77k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  1.77k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_25concat_merger_mut_visitorEE13visit_regularIJRNS1_8full_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEERNS1_17concat_merger_mutISG_EERNSE_5applyISB_E4type4editEEEEDcDpOT_:
   37|   123k|    {
   38|   123k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|   123k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_25concat_merger_mut_visitorEE13visit_regularIJRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEERNS1_17concat_merger_mutISG_EERNSE_5applyISB_E4type4editEEEEDcDpOT_:
   37|  81.5k|    {
   38|  81.5k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  81.5k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_30concat_trees_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE13visit_regularIJRNS1_15regular_sub_posISD_EERNSB_5applyIS8_E4type4editESO_RNS1_25singleton_regular_sub_posISD_EERNS1_14empty_leaf_posISD_EESO_EEEDcDpOT_:
   37|  3.40k|    {
   38|  3.40k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  3.40k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_30concat_trees_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE11visit_innerIJRNS1_15regular_sub_posISD_EERNSB_5applyIS8_E4type4editESO_RNS1_25singleton_regular_sub_posISD_EERNS1_14empty_leaf_posISD_EESO_EEEDcDpOT_:
   43|  3.40k|    {
   44|  3.40k|        return Deriv::visit_node(std::forward<Args>(args)...);
   45|  3.40k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_29concat_trees_left_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE13visit_relaxedIJRNS1_11relaxed_posISD_EERNSB_5applyIS8_E4type4editESO_NS1_8leaf_posISD_EESO_RPSD_RjRmEEEDcDpOT_:
   31|   104k|    {
   32|   104k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|   104k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_29concat_trees_left_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE11visit_innerIJRNS1_11relaxed_posISD_EERNSB_5applyIS8_E4type4editESO_NS1_8leaf_posISD_EESO_RPSD_RjRmEEEDcDpOT_:
   43|   104k|    {
   44|   104k|        return Deriv::visit_node(std::forward<Args>(args)...);
   45|   104k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_30concat_trees_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE13visit_relaxedIJRNS1_11relaxed_posISD_EERNSB_5applyIS8_E4type4editESO_SJ_RNS1_8leaf_posISD_EESO_EEEDcDpOT_:
   31|  68.5k|    {
   32|  68.5k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|  68.5k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_30concat_trees_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE11visit_innerIJRNS1_11relaxed_posISD_EERNSB_5applyIS8_E4type4editESO_SJ_RNS1_8leaf_posISD_EESO_EEEDcDpOT_:
   43|  68.5k|    {
   44|  68.5k|        return Deriv::visit_node(std::forward<Args>(args)...);
   45|  68.5k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_23concat_left_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE13visit_relaxedIJRNS1_11relaxed_posISD_EERNSB_5applyIS8_E4type4editESO_RNS1_8leaf_posISD_EESO_SJ_EEEDcDpOT_:
   31|   332k|    {
   32|   332k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|   332k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_23concat_left_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE13visit_regularIJRNS1_15regular_sub_posISD_EERNSB_5applyIS8_E4type4editESO_RNS1_8leaf_posISD_EESO_RNS1_11relaxed_posISD_EEEEEDcDpOT_:
   37|  3.71k|    {
   38|  3.71k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  3.71k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_24concat_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE13visit_relaxedIJRNS1_11relaxed_posISD_EERNSB_5applyIS8_E4type4editESO_RNS1_15regular_sub_posISD_EERNS1_8leaf_posISD_EESO_EEEDcDpOT_:
   31|   101k|    {
   32|   101k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|   101k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_24concat_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE13visit_regularIJRNS1_15regular_sub_posISD_EERNSB_5applyIS8_E4type4editESO_SJ_RNS1_8leaf_posISD_EESO_EEEDcDpOT_:
   37|  2.78k|    {
   38|  2.78k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  2.78k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_23concat_left_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE13visit_regularIJRNS1_15regular_sub_posISD_EERNSB_5applyIS8_E4type4editESO_RNS1_8leaf_posISD_EESO_SJ_EEEDcDpOT_:
   37|  2.42k|    {
   38|  2.42k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  2.42k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_24concat_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE13visit_regularIJRNS1_8full_posISD_EERNSB_5applyIS8_E4type4editESO_RNS1_15regular_sub_posISD_EERNS1_8leaf_posISD_EESO_EEEDcDpOT_:
   37|  9.40k|    {
   38|  9.40k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  9.40k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_23concat_both_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE13visit_regularIJRNS1_15regular_sub_posISD_EERNSB_5applyIS8_E4type4editESO_RNS1_8leaf_posISD_EESO_RNS1_8full_posISD_EEEEEDcDpOT_:
   37|  4.45k|    {
   38|  4.45k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  4.45k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_23concat_both_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE13visit_regularIJRNS1_15regular_sub_posISD_EERNSB_5applyIS8_E4type4editESO_RNS1_8leaf_posISD_EESO_SJ_EEEDcDpOT_:
   37|  4.20k|    {
   38|  4.20k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  4.20k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_23concat_both_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE13visit_regularIJRNS1_15regular_sub_posISD_EERNSB_5applyIS8_E4type4editESO_RNS1_8leaf_posISD_EESO_RNS1_11relaxed_posISD_EEEEEDcDpOT_:
   37|  95.5k|    {
   38|  95.5k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  95.5k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_24concat_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE13visit_relaxedIJRNS1_11relaxed_posISD_EERNSB_5applyIS8_E4type4editESO_SJ_RNS1_8leaf_posISD_EESO_EEEDcDpOT_:
   31|   210k|    {
   32|   210k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|   210k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_24concat_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE13visit_regularIJRNS1_15regular_sub_posISD_EERNSB_5applyIS8_E4type4editESO_RNS1_11relaxed_posISD_EERNS1_8leaf_posISD_EESO_EEEDcDpOT_:
   37|  1.53k|    {
   38|  1.53k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  1.53k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_23concat_left_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE13visit_relaxedIJRNS1_11relaxed_posISD_EERNSB_5applyIS8_E4type4editESO_RNS1_8leaf_posISD_EESO_RNS1_15regular_sub_posISD_EEEEEDcDpOT_:
   31|   208k|    {
   32|   208k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|   208k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_24concat_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE13visit_regularIJRNS1_8full_posISD_EERNSB_5applyIS8_E4type4editESO_RNS1_11relaxed_posISD_EERNS1_8leaf_posISD_EESO_EEEDcDpOT_:
   37|  2.64k|    {
   38|  2.64k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  2.64k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_23concat_both_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE13visit_relaxedIJRNS1_11relaxed_posISD_EERNSB_5applyIS8_E4type4editESO_RNS1_8leaf_posISD_EESO_RNS1_8full_posISD_EEEEEDcDpOT_:
   31|    495|    {
   32|    495|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|    495|    }
_ZN5immer6detail4rbts12visitor_baseINS1_23concat_both_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE13visit_relaxedIJRNS1_11relaxed_posISD_EERNSB_5applyIS8_E4type4editESO_RNS1_8leaf_posISD_EESO_RNS1_15regular_sub_posISD_EEEEEDcDpOT_:
   31|  1.07k|    {
   32|  1.07k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|  1.07k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_23concat_both_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE13visit_relaxedIJRNS1_11relaxed_posISD_EERNSB_5applyIS8_E4type4editESO_RNS1_8leaf_posISD_EESO_SJ_EEEDcDpOT_:
   31|   165k|    {
   32|   165k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|   165k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_30concat_trees_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE13visit_regularIJRNS1_15regular_sub_posISD_EERNSB_5applyIS8_E4type4editESO_RNS1_11relaxed_posISD_EERNS1_8leaf_posISD_EESO_EEEDcDpOT_:
   37|  35.6k|    {
   38|  35.6k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  35.6k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_30concat_trees_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE11visit_innerIJRNS1_15regular_sub_posISD_EERNSB_5applyIS8_E4type4editESO_RNS1_11relaxed_posISD_EERNS1_8leaf_posISD_EESO_EEEDcDpOT_:
   43|  35.6k|    {
   44|  35.6k|        return Deriv::visit_node(std::forward<Args>(args)...);
   45|  35.6k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_29concat_trees_left_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE13visit_regularIJRNS1_15regular_sub_posISD_EERNSB_5applyIS8_E4type4editESO_NS1_8leaf_posISD_EESO_RPSD_RjRmEEEDcDpOT_:
   37|  6.39k|    {
   38|  6.39k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  6.39k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_29concat_trees_left_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE11visit_innerIJRNS1_15regular_sub_posISD_EERNSB_5applyIS8_E4type4editESO_NS1_8leaf_posISD_EESO_RPSD_RjRmEEEDcDpOT_:
   43|  6.39k|    {
   44|  6.39k|        return Deriv::visit_node(std::forward<Args>(args)...);
   45|  6.39k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_30concat_trees_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE13visit_relaxedIJRNS1_11relaxed_posISD_EERNSB_5applyIS8_E4type4editESO_RNS1_15regular_sub_posISD_EERNS1_8leaf_posISD_EESO_EEEDcDpOT_:
   31|  3.75k|    {
   32|  3.75k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|  3.75k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_30concat_trees_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE11visit_innerIJRNS1_11relaxed_posISD_EERNSB_5applyIS8_E4type4editESO_RNS1_15regular_sub_posISD_EERNS1_8leaf_posISD_EESO_EEEDcDpOT_:
   43|  3.75k|    {
   44|  3.75k|        return Deriv::visit_node(std::forward<Args>(args)...);
   45|  3.75k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_30concat_trees_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE13visit_regularIJRNS1_15regular_sub_posISD_EERNSB_5applyIS8_E4type4editESO_SJ_RNS1_8leaf_posISD_EESO_EEEDcDpOT_:
   37|  2.64k|    {
   38|  2.64k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  2.64k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_30concat_trees_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEEEE11visit_innerIJRNS1_15regular_sub_posISD_EERNSB_5applyIS8_E4type4editESO_SJ_RNS1_8leaf_posISD_EESO_EEEDcDpOT_:
   43|  2.64k|    {
   44|  2.64k|        return Deriv::visit_node(std::forward<Args>(args)...);
   45|  2.64k|    }

_ZN5immer6detail21with_trailing_storageINS0_4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE7inner_tEPSC_Lb0EE18get_storage_offsetEv:
  127|   868k|    {
  128|   868k|        check_base();
  129|   868k|        return sizeof(Derived);
  130|   868k|    }
_ZN5immer6detail21with_trailing_storageINS0_4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE7inner_tEPSC_Lb0EE10check_baseEv:
  134|  37.9M|    {
  135|  37.9M|        static_assert(std::is_standard_layout<Derived>::value &&
  136|  37.9M|                          !std::is_empty<Derived>::value,
  137|  37.9M|                      "Please add 'true' if the derived class is emtpy");
  138|  37.9M|    }
_ZN5immer6detail15auto_const_castINS_18no_refcount_policyEEERT_RKS3_:
  143|  22.6M|{
  144|  22.6M|    return const_cast<T&>(x);
  145|  22.6M|}
_ZN5immer6detail21with_trailing_storageINS0_4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE6leaf_tEiLb1EE18get_storage_offsetEv:
   87|   328k|    {
   88|   328k|        check_base();
   89|   328k|        return 0;
   90|   328k|    }
_ZN5immer6detail21with_trailing_storageINS0_4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE6leaf_tEiLb1EE10check_baseEv:
   94|  9.00M|    {
   95|       |        // is_standard_layout requires that only one class in the hierarchy
   96|       |        // contains non-static data members. Since this class contains one
   97|       |        // member, the static_assert will only hold when the derived class is
   98|       |        // empty.
   99|  9.00M|        static_assert(std::is_standard_layout<Derived>::value,
  100|  9.00M|                      "Please remove 'true' if the derived class is non emtpy");
  101|  9.00M|    }
_ZN5immer6detail21with_trailing_storageINS0_4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE7inner_tEPSC_Lb0EE15get_storage_ptrEv:
  113|  37.0M|    {
  114|  37.0M|        check_base();
  115|  37.0M|        auto* base = static_cast<Derived*>(this);
  116|  37.0M|        return reinterpret_cast<T*>(base + 1);
  117|  37.0M|    }
_ZN5immer6detail9destroy_nIPijEENSt3__19enable_ifIX20can_trivially_detroyIT_EES5_E4typeES5_T0_:
  188|  3.23k|{
  189|  3.23k|    return first + n;
  190|  3.23k|}
_ZN5immer6detail21with_trailing_storageINS0_4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE6leaf_tEiLb1EE15get_storage_ptrEv:
   75|  8.67M|    {
   76|  8.67M|        check_base();
   77|  8.67M|        return reinterpret_cast<T*>(this);
   78|  8.67M|    }
_ZN5immer6detail18uninitialized_copyIPiS2_S2_EENSt3__19enable_ifIX18can_trivially_copyIT_T1_EES6_E4typeES5_T0_S6_:
  236|  2.88M|{
  237|  2.88M|    return std::copy(first, last, out);
  238|  2.88M|}
_ZN5immer6detail9static_ifILb0EPNS0_4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEZNSC_15make_inner_sr_nEjPNS0_3csl10member_twoINSC_14relaxed_data_tENSE_7inheritIS8_NSE_6memberINSA_5applyIS7_E4type5owneeEvE4typeEE4typeEE4typeEEUlT_E_ZNSC_15make_inner_sr_nEjST_EUlSU_E0_EENSt3__19enable_ifIXntT_ET0_E4typeEOT1_OT2_:
  344|  28.0k|{
  345|  28.0k|    return std::forward<F2>(f2)(empty_t{});
  346|  28.0k|}
_ZN5immer6detail4ipowImEET_S2_j:
  323|  65.3M|{
  324|  65.3M|    return pow == 0 ? 1 : num * ipow(num, pow - 1);
  ------------------
  |  Branch (324:12): [True: 2.04M, False: 63.2M]
  ------------------
  325|  65.3M|}
_ZN5immer6detail9static_ifILb0EPNS0_3csl10member_twoINS0_4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE14relaxed_data_tENS2_7inheritISA_NS2_6memberINSC_5applyIS9_E4type5owneeEvE4typeEE4typeEE4typeEZNSE_24ensure_mutable_relaxed_nENSK_4editEjEUlT_E_ZNSE_24ensure_mutable_relaxed_nEST_jEUlSU_E0_EENSt3__19enable_ifIXntT_ET0_E4typeEOT1_OT2_:
  344|   907k|{
  345|   907k|    return std::forward<F2>(f2)(empty_t{});
  346|   907k|}
_ZN5immer6detail9static_ifILb1EZNS0_4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE14make_inner_r_eENSA_5applyIS7_E4type4editEEUlT_E_EENSt3__19enable_ifIXT_EvE4typeEOT0_:
  329|   769k|{
  330|   769k|    std::forward<F>(f)(empty_t{});
  331|   769k|}
_ZN5immer6detail9static_ifILb0EPNS0_4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEEZNSC_15make_inner_sr_eENSA_5applyIS7_E4type4editEPNS0_3csl10member_twoINSC_14relaxed_data_tENSI_7inheritIS8_NSI_6memberINSG_5owneeEvE4typeEE4typeEE4typeEEUlT_E_ZNSC_15make_inner_sr_eESH_SU_EUlSV_E0_EENSt3__19enable_ifIXntT_ET0_E4typeEOT1_OT2_:
  344|  17.5k|{
  345|  17.5k|    return std::forward<F2>(f2)(empty_t{});
  346|  17.5k|}
_ZN5immer6detail9destroy_nIPimEENSt3__19enable_ifIX20can_trivially_detroyIT_EES5_E4typeES5_T0_:
  188|    307|{
  189|    307|    return first + n;
  190|    307|}
_ZN5immer6detail9static_ifILb0EPNS0_3csl10member_twoINS0_4rbts4nodeIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE14relaxed_data_tENS2_7inheritISA_NS2_6memberINSC_5applyIS9_E4type5owneeEvE4typeEE4typeEE4typeEZNSE_24ensure_mutable_relaxed_eENSK_4editEST_EUlT_E_ZNSE_24ensure_mutable_relaxed_eEST_ST_EUlSU_E0_EENSt3__19enable_ifIXntT_ET0_E4typeEOT1_OT2_:
  344|   671k|{
  345|   671k|    return std::forward<F2>(f2)(empty_t{});
  346|   671k|}
_ZN5immer6detail18uninitialized_moveIPiS2_EENSt3__19enable_ifIX18can_trivially_copyIT_T0_EES6_E4typeES5_S5_S6_:
  210|  1.99k|{
  211|  1.99k|    return std::copy(first, last, out);
  212|  1.99k|}

_ZN5immer11flex_vectorIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEC2Ev:
   96|  32.0k|    flex_vector() = default;
_ZNKR5immer11flex_vectorIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE9transientEv:
  507|   110k|    IMMER_NODISCARD transient_type transient() const& { return impl_; }
_ZN5immer11flex_vectorIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEC2ENS_6detail4rbts7rrbtreeIiS8_Lj2ELj2EEE:
  536|   169k|        : impl_(std::move(impl))
  537|   169k|    {
  538|       |#if IMMER_DEBUG_PRINT
  539|       |        // force the compiler to generate debug_print, so we can call
  540|       |        // it from a debugger
  541|       |        [](volatile auto) {}(&flex_vector::debug_print);
  542|       |#endif
  543|   169k|    }
_ZNKR5immer11flex_vectorIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE9push_backEi:
  246|  55.1k|    {
  247|  55.1k|        return impl_.push_back(std::move(value));
  248|  55.1k|    }
_ZNK5immer11flex_vectorIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE4sizeEv:
  181|   170k|    IMMER_NODISCARD size_type size() const { return impl_.size; }
flex-vector-gc.cpp:_ZNKR5immer11flex_vectorIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE6updateIZZ22LLVMFuzzerTestOneInputENK3$_5clI12fuzzer_inputEEDaRT_EUlSE_E_EES9_mOSE_:
  323|  5.94k|    {
  324|  5.94k|        return impl_.update(index, std::forward<FnT>(fn));
  325|  5.94k|    }
_ZNKR5immer11flex_vectorIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE4takeEm:
  350|  12.8k|    {
  351|  12.8k|        return impl_.take(elems);
  352|  12.8k|    }
_ZNKR5immer11flex_vectorIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE4dropEm:
  376|  17.4k|    {
  377|  17.4k|        return impl_.drop(elems);
  378|  17.4k|    }
_ZN5immer11flex_vectorIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE8max_sizeEv:
   90|  1.98M|    constexpr static size_type max_size() { return impl_t::max_size(); }
_ZN5immerplERKNS_11flex_vectorIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEESB_:
  403|  58.2k|    {
  404|  58.2k|        return l.impl_.concat(r.impl_);
  405|  58.2k|    }

_ZN5immer21flex_vector_transientIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEC2Ev:
   71|  42.3k|    flex_vector_transient() = default;
_ZN5immer21flex_vector_transientIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EEC2ENS_6detail4rbts7rrbtreeIiS8_Lj2ELj2EEE:
  243|   110k|        : impl_(std::move(impl))
  244|   110k|    {
  245|   110k|    }
_ZNR5immer21flex_vector_transientIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE10persistentEv:
  233|  19.4k|    {
  234|  19.4k|        this->owner_t::operator=(owner_t{});
  235|  19.4k|        return impl_;
  236|  19.4k|    }
_ZN5immer21flex_vector_transientIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE9push_backEi:
  156|  49.4k|    {
  157|  49.4k|        impl_.push_back_mut(*this, std::move(value));
  158|  49.4k|    }
_ZNK5immer21flex_vector_transientIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE4sizeEv:
  127|  3.89M|    IMMER_NODISCARD size_type size() const { return impl_.size; }
flex-vector-gc.cpp:_ZN5immer21flex_vector_transientIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE6updateIZZ22LLVMFuzzerTestOneInputENK3$_5clI12fuzzer_inputEEDaRT_EUlSE_E0_EEvmOSE_:
  180|  10.4k|    {
  181|  10.4k|        impl_.update_mut(*this, index, std::forward<FnT>(fn));
  182|  10.4k|    }
_ZN5immer21flex_vector_transientIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE4takeEm:
  189|  37.4k|    void take(size_type elems) { impl_.take_mut(*this, elems); }
_ZN5immer21flex_vector_transientIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE7prependERS9_:
  219|  33.0k|    {
  220|  33.0k|        l.owner_t::operator=(owner_t{});
  221|  33.0k|        concat_mut_r(l.impl_, impl_, *this);
  222|  33.0k|    }
_ZN5immer21flex_vector_transientIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE7prependEOS9_:
  224|  3.71k|    {
  225|  3.71k|        concat_mut_lr_r(l.impl_, l, impl_, *this);
  226|  3.71k|    }
_ZN5immer21flex_vector_transientIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE6appendERS9_:
  204|  1.85M|    {
  205|  1.85M|        r.owner_t::operator=(owner_t{});
  206|  1.85M|        concat_mut_l(impl_, *this, r.impl_);
  207|  1.85M|    }
_ZN5immer21flex_vector_transientIiNS_13memory_policyINS_11heap_policyINS_7gc_heapEEENS_18no_refcount_policyENS_15spinlock_policyENS_20gc_transience_policyELb0ELb0EEELj2ELj2EE6appendEOS9_:
  209|  6.55k|    {
  210|  6.55k|        concat_mut_lr_l(impl_, *this, r.impl_, r);
  211|  6.55k|    }

_ZN5immer16gc_disable_guardC2Ev:
  137|  8.01k|    gc_disable_guard() { GC_disable(); }
_ZN5immer7gc_heap8allocateEmNS_10norefs_tagE:
  115|  3.48M|    {
  116|  3.48M|        IMMER_GC_INIT_GUARD_;
  117|  3.48M|        auto p = GC_malloc_atomic(n);
  118|  3.48M|        if (IMMER_UNLIKELY(!p))
  ------------------
  |  |  116|  3.48M|#define IMMER_UNLIKELY(cond) __builtin_expect(!!(cond), 0)
  |  |  ------------------
  |  |  |  Branch (116:30): [True: 0, False: 3.48M]
  |  |  ------------------
  ------------------
  119|      0|            IMMER_THROW(std::bad_alloc{});
  ------------------
  |  |   51|      0|#define IMMER_THROW(expr) throw expr
  ------------------
  120|  3.48M|        return p;
  121|  3.48M|    }
_ZN5immer16gc_disable_guardD2Ev:
  140|  8.01k|    {
  141|  8.01k|        GC_enable();
  142|  8.01k|        GC_gcollect();
  143|  8.01k|    }
_ZN5immer7gc_heap8allocateEm:
  106|  3.70M|    {
  107|  3.70M|        IMMER_GC_INIT_GUARD_;
  108|  3.70M|        auto p = GC_malloc(n);
  109|  3.70M|        if (IMMER_UNLIKELY(!p))
  ------------------
  |  |  116|  3.70M|#define IMMER_UNLIKELY(cond) __builtin_expect(!!(cond), 0)
  |  |  ------------------
  |  |  |  Branch (116:30): [True: 0, False: 3.70M]
  |  |  ------------------
  ------------------
  110|      0|            IMMER_THROW(std::bad_alloc{});
  ------------------
  |  |   51|      0|#define IMMER_THROW(expr) throw expr
  ------------------
  111|  3.70M|        return p;
  112|  3.70M|    }

_ZN5immer18no_refcount_policyC2Ev:
   22|  5.12M|    no_refcount_policy(){};
_ZN5immer18no_refcount_policy3incEv:
   25|  4.07M|    void inc() {}
_ZN5immer18no_refcount_policy3decEv:
   26|  2.04M|    bool dec() { return false; }
_ZN5immer18no_refcount_policy6uniqueEv:
   27|  16.5M|    bool unique() { return false; }

_ZN5immer20gc_transience_policy5applyINS_11heap_policyINS_7gc_heapEEEE4type5ownerC2Ev:
   60|  2.06M|                    : token_{make_token_()}
   61|  2.06M|                {
   62|  2.06M|                }
_ZN5immer20gc_transience_policy5applyINS_11heap_policyINS_7gc_heapEEEE4type5owner11make_token_Ev:
   51|  2.06M|                {
   52|  2.06M|                    return heap_::allocate(1, norefs_tag{});
   53|  2.06M|                };
_ZNK5immer20gc_transience_policy5applyINS_11heap_policyINS_7gc_heapEEEE4type4editneES7_:
   45|  4.32M|                bool operator!=(edit x) const { return v != x.v; }
_ZN5immer20gc_transience_policy5applyINS_11heap_policyINS_7gc_heapEEEE4type5owneraSEOS7_:
   79|  2.03M|                {
   80|  2.03M|                    token_ = o.token_.load();
   81|  2.03M|                    return *this;
   82|  2.03M|                }
_ZNK5immer20gc_transience_policy5applyINS_11heap_policyINS_7gc_heapEEEE4type5ownee10can_mutateENS6_4editE:
   99|  16.5M|                bool can_mutate(edit t) const { return token_ == t; }
_ZNK5immer20gc_transience_policy5applyINS_11heap_policyINS_7gc_heapEEEE4type4editeqES7_:
   44|  16.5M|                bool operator==(edit x) const { return v == x.v; }
_ZN5immer20gc_transience_policy5applyINS_11heap_policyINS_7gc_heapEEEE4type5owneeaSENS6_4editE:
   90|  4.32M|                {
   91|  4.32M|                    assert(e != noone);
  ------------------
  |  Branch (91:21): [True: 4.32M, False: 0]
  ------------------
   92|       |                    // This would be a nice safety plug but it sadly
   93|       |                    // does not hold during transient concatenation.
   94|       |                    // assert(token_ == e || token_ == edit{nullptr});
   95|  4.32M|                    token_ = e;
   96|  4.32M|                    return *this;
   97|  4.32M|                }
_ZN5immer20gc_transience_policy5applyINS_11heap_policyINS_7gc_heapEEEE4type5ownercvNS6_4editEEv:
   57|  7.45M|                operator edit() { return {token_}; }

