LLVMFuzzerTestOneInput:
   18|  8.52k|{
   19|  8.52k|    constexpr auto var_count = 8;
   20|  8.52k|    constexpr auto bits      = 2;
   21|       |
   22|  8.52k|    using vector_t =
   23|  8.52k|        immer::flex_vector<int, immer::default_memory_policy, bits, bits>;
   24|  8.52k|    using size_t = std::uint8_t;
   25|       |
   26|  8.52k|    auto vars = std::array<vector_t, var_count>{};
   27|       |
   28|  8.52k|    auto is_valid_var = [&](auto idx) { return idx >= 0 && idx < var_count; };
   29|  8.52k|    auto is_valid_var_neq = [](auto other) {
   30|  8.52k|        return [=](auto idx) {
   31|  8.52k|            return idx >= 0 && idx < var_count && idx != other;
   32|  8.52k|        };
   33|  8.52k|    };
   34|  8.52k|    auto is_valid_index = [](auto& v) {
   35|  8.52k|        return [&](auto idx) { return idx >= 0 && idx < v.size(); };
   36|  8.52k|    };
   37|  8.52k|    auto is_valid_size = [](auto& v) {
   38|  8.52k|        return [&](auto idx) { return idx >= 0 && idx <= v.size(); };
   39|  8.52k|    };
   40|  8.52k|    auto can_concat = [](auto&& v1, auto&& v2) {
   41|  8.52k|        return v1.size() + v2.size() < vector_t::max_size();
   42|  8.52k|    };
   43|  8.52k|    auto can_compare = [](auto&& v) {
   44|       |        // avoid comparing vectors that are too big, and hence, slow to compare
   45|  8.52k|        return v.size() < (1 << 15);
   46|  8.52k|    };
   47|  8.52k|    return fuzzer_input{data, size}.run([&](auto& in) {
   48|  8.52k|        enum ops
   49|  8.52k|        {
   50|  8.52k|            op_push_back,
   51|  8.52k|            op_update,
   52|  8.52k|            op_take,
   53|  8.52k|            op_drop,
   54|  8.52k|            op_concat,
   55|  8.52k|            op_push_back_move,
   56|  8.52k|            op_update_move,
   57|  8.52k|            op_take_move,
   58|  8.52k|            op_drop_move,
   59|  8.52k|            op_concat_move_l,
   60|  8.52k|            op_concat_move_r,
   61|  8.52k|            op_concat_move_lr,
   62|  8.52k|            op_insert,
   63|  8.52k|            op_erase,
   64|  8.52k|            op_compare,
   65|  8.52k|        };
   66|  8.52k|        auto src = read<char>(in, is_valid_var);
   67|  8.52k|        auto dst = read<char>(in, is_valid_var);
   68|  8.52k|        switch (read<char>(in)) {
   69|  8.52k|        case op_push_back: {
   70|  8.52k|            vars[dst] = vars[src].push_back(42);
   71|  8.52k|            break;
   72|  8.52k|        }
   73|  8.52k|        case op_update: {
   74|  8.52k|            auto idx  = read<size_t>(in, is_valid_index(vars[src]));
   75|  8.52k|            vars[dst] = vars[src].update(idx, [](auto x) { return x + 1; });
   76|  8.52k|            break;
   77|  8.52k|        }
   78|  8.52k|        case op_take: {
   79|  8.52k|            auto idx  = read<size_t>(in, is_valid_size(vars[src]));
   80|  8.52k|            vars[dst] = vars[src].take(idx);
   81|  8.52k|            break;
   82|  8.52k|        }
   83|  8.52k|        case op_drop: {
   84|  8.52k|            auto idx  = read<size_t>(in, is_valid_size(vars[src]));
   85|  8.52k|            vars[dst] = vars[src].drop(idx);
   86|  8.52k|            break;
   87|  8.52k|        }
   88|  8.52k|        case op_concat: {
   89|  8.52k|            auto src2 = read<char>(in, is_valid_var);
   90|  8.52k|            if (can_concat(vars[src], vars[src2]))
   91|  8.52k|                vars[dst] = vars[src] + vars[src2];
   92|  8.52k|            break;
   93|  8.52k|        }
   94|  8.52k|        case op_push_back_move: {
   95|  8.52k|            vars[dst] = std::move(vars[src]).push_back(21);
   96|  8.52k|            break;
   97|  8.52k|        }
   98|  8.52k|        case op_update_move: {
   99|  8.52k|            auto idx = read<size_t>(in, is_valid_index(vars[src]));
  100|  8.52k|            vars[dst] =
  101|  8.52k|                std::move(vars[src]).update(idx, [](auto x) { return x + 1; });
  102|  8.52k|            break;
  103|  8.52k|        }
  104|  8.52k|        case op_take_move: {
  105|  8.52k|            auto idx  = read<size_t>(in, is_valid_size(vars[src]));
  106|  8.52k|            vars[dst] = std::move(vars[src]).take(idx);
  107|  8.52k|            break;
  108|  8.52k|        }
  109|  8.52k|        case op_drop_move: {
  110|  8.52k|            auto idx  = read<size_t>(in, is_valid_size(vars[src]));
  111|  8.52k|            vars[dst] = std::move(vars[src]).drop(idx);
  112|  8.52k|            break;
  113|  8.52k|        }
  114|  8.52k|        case op_concat_move_l: {
  115|  8.52k|            auto src2 = read<char>(in, is_valid_var_neq(src));
  116|  8.52k|            if (can_concat(vars[src], vars[src2]))
  117|  8.52k|                vars[dst] = std::move(vars[src]) + vars[src2];
  118|  8.52k|            break;
  119|  8.52k|        }
  120|  8.52k|        case op_concat_move_r: {
  121|  8.52k|            auto src2 = read<char>(in, is_valid_var_neq(src));
  122|  8.52k|            if (can_concat(vars[src], vars[src2]))
  123|  8.52k|                vars[dst] = vars[src] + std::move(vars[src2]);
  124|  8.52k|            break;
  125|  8.52k|        }
  126|  8.52k|        case op_concat_move_lr: {
  127|  8.52k|            auto src2 = read<char>(in, is_valid_var_neq(src));
  128|  8.52k|            if (can_concat(vars[src], vars[src2]))
  129|  8.52k|                vars[dst] = std::move(vars[src]) + std::move(vars[src2]);
  130|  8.52k|            break;
  131|  8.52k|        }
  132|  8.52k|        case op_compare: {
  133|  8.52k|            using std::swap;
  134|  8.52k|            if (can_compare(vars[src]) && vars[src] == vars[dst])
  135|  8.52k|                swap(vars[src], vars[dst]);
  136|  8.52k|            break;
  137|  8.52k|        }
  138|  8.52k|        case op_erase: {
  139|  8.52k|            auto idx  = read<size_t>(in, is_valid_index(vars[src]));
  140|  8.52k|            vars[dst] = vars[src].erase(idx);
  141|  8.52k|            break;
  142|  8.52k|        }
  143|  8.52k|        case op_insert: {
  144|  8.52k|            auto idx  = read<size_t>(in, is_valid_size(vars[src]));
  145|  8.52k|            vars[dst] = vars[src].insert(idx, immer::box<int>{42});
  146|  8.52k|            break;
  147|  8.52k|        }
  148|  8.52k|        default:
  149|  8.52k|            break;
  150|  8.52k|        };
  151|  8.52k|        return true;
  152|  8.52k|    });
  153|  8.52k|}
flex-vector.cpp:_ZZ22LLVMFuzzerTestOneInputENK3$_6clI12fuzzer_inputEEDaRT_:
   47|  1.96M|    return fuzzer_input{data, size}.run([&](auto& in) {
   48|  1.96M|        enum ops
   49|  1.96M|        {
   50|  1.96M|            op_push_back,
   51|  1.96M|            op_update,
   52|  1.96M|            op_take,
   53|  1.96M|            op_drop,
   54|  1.96M|            op_concat,
   55|  1.96M|            op_push_back_move,
   56|  1.96M|            op_update_move,
   57|  1.96M|            op_take_move,
   58|  1.96M|            op_drop_move,
   59|  1.96M|            op_concat_move_l,
   60|  1.96M|            op_concat_move_r,
   61|  1.96M|            op_concat_move_lr,
   62|  1.96M|            op_insert,
   63|  1.96M|            op_erase,
   64|  1.96M|            op_compare,
   65|  1.96M|        };
   66|  1.96M|        auto src = read<char>(in, is_valid_var);
   67|  1.96M|        auto dst = read<char>(in, is_valid_var);
   68|  1.96M|        switch (read<char>(in)) {
   69|   460k|        case op_push_back: {
  ------------------
  |  Branch (69:9): [True: 460k, False: 1.50M]
  ------------------
   70|   460k|            vars[dst] = vars[src].push_back(42);
   71|   460k|            break;
   72|      0|        }
   73|   120k|        case op_update: {
  ------------------
  |  Branch (73:9): [True: 120k, False: 1.84M]
  ------------------
   74|   120k|            auto idx  = read<size_t>(in, is_valid_index(vars[src]));
   75|   120k|            vars[dst] = vars[src].update(idx, [](auto x) { return x + 1; });
   76|   120k|            break;
   77|      0|        }
   78|  1.59k|        case op_take: {
  ------------------
  |  Branch (78:9): [True: 1.59k, False: 1.96M]
  ------------------
   79|  1.59k|            auto idx  = read<size_t>(in, is_valid_size(vars[src]));
   80|  1.59k|            vars[dst] = vars[src].take(idx);
   81|  1.59k|            break;
   82|      0|        }
   83|  3.19k|        case op_drop: {
  ------------------
  |  Branch (83:9): [True: 3.19k, False: 1.96M]
  ------------------
   84|  3.19k|            auto idx  = read<size_t>(in, is_valid_size(vars[src]));
   85|  3.19k|            vars[dst] = vars[src].drop(idx);
   86|  3.19k|            break;
   87|      0|        }
   88|   854k|        case op_concat: {
  ------------------
  |  Branch (88:9): [True: 854k, False: 1.11M]
  ------------------
   89|   854k|            auto src2 = read<char>(in, is_valid_var);
   90|   854k|            if (can_concat(vars[src], vars[src2]))
  ------------------
  |  Branch (90:17): [True: 803k, False: 51.2k]
  ------------------
   91|   803k|                vars[dst] = vars[src] + vars[src2];
   92|   854k|            break;
   93|      0|        }
   94|  12.7k|        case op_push_back_move: {
  ------------------
  |  Branch (94:9): [True: 12.7k, False: 1.95M]
  ------------------
   95|  12.7k|            vars[dst] = std::move(vars[src]).push_back(21);
   96|  12.7k|            break;
   97|      0|        }
   98|  76.2k|        case op_update_move: {
  ------------------
  |  Branch (98:9): [True: 76.2k, False: 1.89M]
  ------------------
   99|  76.2k|            auto idx = read<size_t>(in, is_valid_index(vars[src]));
  100|  76.2k|            vars[dst] =
  101|  76.2k|                std::move(vars[src]).update(idx, [](auto x) { return x + 1; });
  102|  76.2k|            break;
  103|      0|        }
  104|  41.5k|        case op_take_move: {
  ------------------
  |  Branch (104:9): [True: 41.5k, False: 1.92M]
  ------------------
  105|  41.5k|            auto idx  = read<size_t>(in, is_valid_size(vars[src]));
  106|  41.5k|            vars[dst] = std::move(vars[src]).take(idx);
  107|  41.5k|            break;
  108|      0|        }
  109|  42.5k|        case op_drop_move: {
  ------------------
  |  Branch (109:9): [True: 42.5k, False: 1.92M]
  ------------------
  110|  42.5k|            auto idx  = read<size_t>(in, is_valid_size(vars[src]));
  111|  42.5k|            vars[dst] = std::move(vars[src]).drop(idx);
  112|  42.5k|            break;
  113|      0|        }
  114|   254k|        case op_concat_move_l: {
  ------------------
  |  Branch (114:9): [True: 254k, False: 1.71M]
  ------------------
  115|   254k|            auto src2 = read<char>(in, is_valid_var_neq(src));
  116|   254k|            if (can_concat(vars[src], vars[src2]))
  ------------------
  |  Branch (116:17): [True: 248k, False: 5.84k]
  ------------------
  117|   248k|                vars[dst] = std::move(vars[src]) + vars[src2];
  118|   254k|            break;
  119|      0|        }
  120|  4.39k|        case op_concat_move_r: {
  ------------------
  |  Branch (120:9): [True: 4.39k, False: 1.96M]
  ------------------
  121|  4.39k|            auto src2 = read<char>(in, is_valid_var_neq(src));
  122|  4.39k|            if (can_concat(vars[src], vars[src2]))
  ------------------
  |  Branch (122:17): [True: 3.89k, False: 502]
  ------------------
  123|  3.89k|                vars[dst] = vars[src] + std::move(vars[src2]);
  124|  4.39k|            break;
  125|      0|        }
  126|  2.35k|        case op_concat_move_lr: {
  ------------------
  |  Branch (126:9): [True: 2.35k, False: 1.96M]
  ------------------
  127|  2.35k|            auto src2 = read<char>(in, is_valid_var_neq(src));
  128|  2.35k|            if (can_concat(vars[src], vars[src2]))
  ------------------
  |  Branch (128:17): [True: 1.70k, False: 652]
  ------------------
  129|  1.70k|                vars[dst] = std::move(vars[src]) + std::move(vars[src2]);
  130|  2.35k|            break;
  131|      0|        }
  132|  32.4k|        case op_compare: {
  ------------------
  |  Branch (132:9): [True: 32.4k, False: 1.93M]
  ------------------
  133|  32.4k|            using std::swap;
  134|  32.4k|            if (can_compare(vars[src]) && vars[src] == vars[dst])
  ------------------
  |  Branch (134:17): [True: 28.6k, False: 3.89k]
  |  Branch (134:43): [True: 6.56k, False: 22.0k]
  ------------------
  135|  6.56k|                swap(vars[src], vars[dst]);
  136|  32.4k|            break;
  137|      0|        }
  138|  3.38k|        case op_erase: {
  ------------------
  |  Branch (138:9): [True: 3.38k, False: 1.96M]
  ------------------
  139|  3.38k|            auto idx  = read<size_t>(in, is_valid_index(vars[src]));
  140|  3.38k|            vars[dst] = vars[src].erase(idx);
  141|  3.38k|            break;
  142|      0|        }
  143|  19.2k|        case op_insert: {
  ------------------
  |  Branch (143:9): [True: 19.2k, False: 1.94M]
  ------------------
  144|  19.2k|            auto idx  = read<size_t>(in, is_valid_size(vars[src]));
  145|  19.2k|            vars[dst] = vars[src].insert(idx, immer::box<int>{42});
  146|  19.2k|            break;
  147|      0|        }
  148|  30.8k|        default:
  ------------------
  |  Branch (148:9): [True: 30.8k, False: 1.93M]
  ------------------
  149|  30.8k|            break;
  150|  1.96M|        };
  151|  1.95M|        return true;
  152|  1.96M|    });
flex-vector.cpp:_ZZ22LLVMFuzzerTestOneInputENK3$_0clIcEEDaT_:
   28|  5.13M|    auto is_valid_var = [&](auto idx) { return idx >= 0 && idx < var_count; };
  ------------------
  |  Branch (28:48): [True: 4.95M, False: 178k]
  |  Branch (28:60): [True: 4.77M, False: 185k]
  ------------------
flex-vector.cpp:_ZZZ22LLVMFuzzerTestOneInputENK3$_2clIN5immer11flex_vectorIiNS1_13memory_policyINS1_21free_list_heap_policyINS1_8cpp_heapELm1024EEENS1_15refcount_policyENS1_15spinlock_policyENS1_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEDaRT_ENKUlSC_E_clIhEEDaSC_:
   35|   359k|        return [&](auto idx) { return idx >= 0 && idx < v.size(); };
  ------------------
  |  Branch (35:39): [True: 359k, False: 0]
  |  Branch (35:51): [True: 199k, False: 160k]
  ------------------
flex-vector.cpp:_ZZ22LLVMFuzzerTestOneInputENK3$_2clIN5immer11flex_vectorIiNS1_13memory_policyINS1_21free_list_heap_policyINS1_8cpp_heapELm1024EEENS1_15refcount_policyENS1_15spinlock_policyENS1_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEDaRT_:
   34|   199k|    auto is_valid_index = [](auto& v) {
   35|   199k|        return [&](auto idx) { return idx >= 0 && idx < v.size(); };
   36|   199k|    };
flex-vector.cpp:_ZZZ22LLVMFuzzerTestOneInputENK3$_6clI12fuzzer_inputEEDaRT_ENKUlS2_E_clIiEEDaS2_:
   75|   119k|            vars[dst] = vars[src].update(idx, [](auto x) { return x + 1; });
flex-vector.cpp:_ZZZ22LLVMFuzzerTestOneInputENK3$_3clIN5immer11flex_vectorIiNS1_13memory_policyINS1_21free_list_heap_policyINS1_8cpp_heapELm1024EEENS1_15refcount_policyENS1_15spinlock_policyENS1_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEDaRT_ENKUlSC_E_clIhEEDaSC_:
   38|   120k|        return [&](auto idx) { return idx >= 0 && idx <= v.size(); };
  ------------------
  |  Branch (38:39): [True: 120k, False: 0]
  |  Branch (38:51): [True: 107k, False: 12.5k]
  ------------------
flex-vector.cpp:_ZZ22LLVMFuzzerTestOneInputENK3$_3clIN5immer11flex_vectorIiNS1_13memory_policyINS1_21free_list_heap_policyINS1_8cpp_heapELm1024EEENS1_15refcount_policyENS1_15spinlock_policyENS1_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEDaRT_:
   37|   108k|    auto is_valid_size = [](auto& v) {
   38|   108k|        return [&](auto idx) { return idx >= 0 && idx <= v.size(); };
   39|   108k|    };
flex-vector.cpp:_ZZ22LLVMFuzzerTestOneInputENK3$_4clIRN5immer11flex_vectorIiNS1_13memory_policyINS1_21free_list_heap_policyINS1_8cpp_heapELm1024EEENS1_15refcount_policyENS1_15spinlock_policyENS1_20no_transience_policyELb0ELb1EEELj2ELj2EEESC_EEDaOT_OT0_:
   40|  1.11M|    auto can_concat = [](auto&& v1, auto&& v2) {
   41|  1.11M|        return v1.size() + v2.size() < vector_t::max_size();
   42|  1.11M|    };
flex-vector.cpp:_ZZZ22LLVMFuzzerTestOneInputENK3$_6clI12fuzzer_inputEEDaRT_ENKUlS2_E0_clIiEEDaS2_:
  101|  76.1k|                std::move(vars[src]).update(idx, [](auto x) { return x + 1; });
flex-vector.cpp:_ZZZ22LLVMFuzzerTestOneInputENK3$_1clIcEEDaT_ENKUlS1_E_clIcEEDaS1_:
   30|   308k|        return [=](auto idx) {
   31|   308k|            return idx >= 0 && idx < var_count && idx != other;
  ------------------
  |  Branch (31:20): [True: 301k, False: 6.96k]
  |  Branch (31:32): [True: 290k, False: 11.1k]
  |  Branch (31:51): [True: 260k, False: 29.6k]
  ------------------
   32|   308k|        };
flex-vector.cpp:_ZZ22LLVMFuzzerTestOneInputENK3$_1clIcEEDaT_:
   29|   261k|    auto is_valid_var_neq = [](auto other) {
   30|   261k|        return [=](auto idx) {
   31|   261k|            return idx >= 0 && idx < var_count && idx != other;
   32|   261k|        };
   33|   261k|    };
flex-vector.cpp:_ZZ22LLVMFuzzerTestOneInputENK3$_5clIRN5immer11flex_vectorIiNS1_13memory_policyINS1_21free_list_heap_policyINS1_8cpp_heapELm1024EEENS1_15refcount_policyENS1_15spinlock_policyENS1_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEDaOT_:
   43|  32.4k|    auto can_compare = [](auto&& v) {
   44|       |        // avoid comparing vectors that are too big, and hence, slow to compare
   45|  32.4k|        return v.size() < (1 << 15);
   46|  32.4k|    };

flex-vector.cpp:_ZN12fuzzer_input3runIZ22LLVMFuzzerTestOneInputE3$_6EEiT_:
   50|  8.52k|    {
   51|  8.52k|        if (size_ > fuzzer_input_max_size)
  ------------------
  |  Branch (51:13): [True: 8, False: 8.51k]
  ------------------
   52|      8|            return 0;
   53|  8.51k|        try {
   54|  1.96M|            while (step(*this))
  ------------------
  |  Branch (54:20): [True: 1.95M, False: 8.51k]
  ------------------
   55|  1.95M|                continue;
   56|  8.51k|        } catch (const no_more_input&) {
   57|  8.51k|        };
   58|  8.51k|        return 0;
   59|  8.51k|    }
flex-vector.cpp:_Z4readIcZ22LLVMFuzzerTestOneInputE3$_0ET_R12fuzzer_inputT0_:
   70|  4.78M|{
   71|  4.78M|    auto x = read<T>(fz);
   72|  5.14M|    while (!cond(x))
  ------------------
  |  Branch (72:12): [True: 363k, False: 4.78M]
  ------------------
   73|   363k|        x = read<T>(fz);
   74|  4.78M|    return x;
   75|  4.78M|}
_Z4readIcERKT_R12fuzzer_input:
   64|  7.41M|{
   65|  7.41M|    return *reinterpret_cast<const T*>(fz.next(sizeof(T), alignof(T)));
   66|  7.41M|}
_ZN12fuzzer_input4nextEmm:
   40|  7.89M|    {
   41|  7.89M|        auto& p = const_cast<void*&>(reinterpret_cast<const void*&>(data_));
   42|  7.89M|        auto r  = std::align(align, size, p, size_);
   43|  7.89M|        if (r == nullptr)
  ------------------
  |  Branch (43:13): [True: 8.51k, False: 7.88M]
  ------------------
   44|  8.51k|            throw no_more_input{};
   45|  7.88M|        return next(size);
   46|  7.89M|    }
_ZN12fuzzer_input4nextEm:
   30|  7.88M|    {
   31|  7.88M|        if (size_ < size)
  ------------------
  |  Branch (31:13): [True: 0, False: 7.88M]
  ------------------
   32|      0|            throw no_more_input{};
   33|  7.88M|        auto r = data_;
   34|  7.88M|        data_ += size;
   35|  7.88M|        size_ -= size;
   36|  7.88M|        return r;
   37|  7.88M|    }
flex-vector.cpp:_Z4readIhZZ22LLVMFuzzerTestOneInputENK3$_2clIN5immer11flex_vectorIiNS2_13memory_policyINS2_21free_list_heap_policyINS2_8cpp_heapELm1024EEENS2_15refcount_policyENS2_15spinlock_policyENS2_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEDaRT_EUlSD_E_ESD_R12fuzzer_inputT0_:
   70|   199k|{
   71|   199k|    auto x = read<T>(fz);
   72|   359k|    while (!cond(x))
  ------------------
  |  Branch (72:12): [True: 160k, False: 199k]
  ------------------
   73|   160k|        x = read<T>(fz);
   74|   199k|    return x;
   75|   199k|}
_Z4readIhERKT_R12fuzzer_input:
   64|   480k|{
   65|   480k|    return *reinterpret_cast<const T*>(fz.next(sizeof(T), alignof(T)));
   66|   480k|}
flex-vector.cpp:_Z4readIhZZ22LLVMFuzzerTestOneInputENK3$_3clIN5immer11flex_vectorIiNS2_13memory_policyINS2_21free_list_heap_policyINS2_8cpp_heapELm1024EEENS2_15refcount_policyENS2_15spinlock_policyENS2_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEDaRT_EUlSD_E_ESD_R12fuzzer_inputT0_:
   70|   108k|{
   71|   108k|    auto x = read<T>(fz);
   72|   120k|    while (!cond(x))
  ------------------
  |  Branch (72:12): [True: 12.5k, False: 108k]
  ------------------
   73|  12.5k|        x = read<T>(fz);
   74|   108k|    return x;
   75|   108k|}
flex-vector.cpp:_Z4readIcZZ22LLVMFuzzerTestOneInputENK3$_1clIcEEDaT_EUlS2_E_ES2_R12fuzzer_inputT0_:
   70|   261k|{
   71|   261k|    auto x = read<T>(fz);
   72|   308k|    while (!cond(x))
  ------------------
  |  Branch (72:12): [True: 47.7k, False: 261k]
  ------------------
   73|  47.7k|        x = read<T>(fz);
   74|   261k|    return x;
   75|   261k|}

_ZN5immer3boxIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEEEC2IiviEEOT_:
   85|  19.1k|        : impl_{detail::make<heap, holder>(std::forward<Arg>(arg))}
   86|  19.1k|    {
   87|  19.1k|    }
_ZN5immer3boxIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEEE6holderC2IJiEEEDpOT_:
   47|  19.1k|            : value(std::forward<Args>(args)...)
   48|  19.1k|        {
   49|  19.1k|        }
_ZNK5immer3boxIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEEEcvRKiEv:
  142|  19.1k|    operator const T&() const { return get(); }
_ZNK5immer3boxIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEEE3getEv:
  139|  19.1k|    IMMER_NODISCARD const T& get() const { return impl_->value; }
_ZN5immer3boxIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEEED2Ev:
  131|  19.1k|    {
  132|  19.1k|        if (impl_ && impl_->dec()) {
  ------------------
  |  Branch (132:13): [True: 19.1k, False: 0]
  |  Branch (132:22): [True: 19.1k, False: 0]
  ------------------
  133|  19.1k|            impl_->~holder();
  134|  19.1k|            heap::deallocate(sizeof(holder), impl_);
  135|  19.1k|        }
  136|  19.1k|    }

_ZN5immer6detail3csl3getINS_15refcount_policyEEEDcRKNS1_10member_twoINS0_4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEES3_NS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE11impl_data_tENS1_6memberIS3_NS1_7inheritINSC_5applyISA_E4type5owneeEvE4typeEE4typeEE4typeE:
  170|  96.7M|        {
  171|  96.7M|            return x.get_(type_t<U>{});
  172|  96.7M|        }
_ZNK5immer6detail3csl10member_twoINS0_4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE11impl_data_tENS1_6memberIS9_NS1_7inheritINSB_5applyIS8_E4type5owneeEvE4typeEE4typeEE4type4get_IS9_EEDcNS1_6type_tIT_EE:
  184|  96.7M|        {
  185|  96.7M|            return n.get_(t);
  186|  96.7M|        }
_ZNK5immer6detail3csl6memberINS_15refcount_policyENS1_7inheritINS_20no_transience_policy5applyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEEE4type5owneeEvE4typeEE4type4get_ENS1_6type_tIS3_EE:
  128|   108M|        const T& get_(type_t<T>) const { return d; }
_ZN5immer6detail3csl3getINS_15refcount_policyEEEDcRKNS1_10member_twoINS0_4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEES3_NS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE14relaxed_data_tENS1_6memberIS3_NS1_7inheritINSC_5applyISA_E4type5owneeEvE4typeEE4typeEE4typeE:
  170|  11.3M|        {
  171|  11.3M|            return x.get_(type_t<U>{});
  172|  11.3M|        }
_ZNK5immer6detail3csl10member_twoINS0_4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE14relaxed_data_tENS1_6memberIS9_NS1_7inheritINSB_5applyIS8_E4type5owneeEvE4typeEE4typeEE4type4get_IS9_EEDcNS1_6type_tIT_EE:
  184|  11.3M|        {
  185|  11.3M|            return n.get_(t);
  186|  11.3M|        }
_ZN5immer6detail3csl3getINS_20no_transience_policy5applyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEEE4type5owneeEEEDcRNS1_10member_twoINS0_4rbts4nodeIiNS_13memory_policyIS7_NS_15refcount_policyENS_15spinlock_policyES3_Lb0ELb1EEELj2ELj2EE14relaxed_data_tENS1_6memberISF_NS1_7inheritISA_vE4typeEE4typeEE4typeE:
  165|  10.5M|        {
  166|  10.5M|            return x.get_(type_t<U>{});
  167|  10.5M|        }
_ZN5immer6detail3csl10member_twoINS0_4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE14relaxed_data_tENS1_6memberIS9_NS1_7inheritINSB_5applyIS8_E4type5owneeEvE4typeEE4typeEE4type4get_ISK_EEDcNS1_6type_tIT_EE:
  179|  10.5M|        {
  180|  10.5M|            return n.get_(t);
  181|  10.5M|        }
_ZN5immer6detail3csl7inheritINS_20no_transience_policy5applyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEEE4type5owneeEvE4type4get_ENS1_6type_tISA_EE:
  102|  26.0M|        T& get_(type_t<T>) { return *this; }
_ZN5immer6detail3csl3getINS_20no_transience_policy5applyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEEE4type5owneeEEEDcRNS1_10member_twoINS0_4rbts4nodeIiNS_13memory_policyIS7_NS_15refcount_policyENS_15spinlock_policyES3_Lb0ELb1EEELj2ELj2EE11impl_data_tENS1_6memberISF_NS1_7inheritISA_vE4typeEE4typeEE4typeE:
  165|  15.4M|        {
  166|  15.4M|            return x.get_(type_t<U>{});
  167|  15.4M|        }
_ZN5immer6detail3csl10member_twoINS0_4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE11impl_data_tENS1_6memberIS9_NS1_7inheritINSB_5applyIS8_E4type5owneeEvE4typeEE4typeEE4type4get_ISK_EEDcNS1_6type_tIT_EE:
  179|  15.4M|        {
  180|  15.4M|            return n.get_(t);
  181|  15.4M|        }
_ZN5immer6detail3csl3getINS_20no_transience_policy5applyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEEE4type5owneeEEEDcRKNS1_10member_twoINS0_4rbts4nodeIiNS_13memory_policyIS7_NS_15refcount_policyENS_15spinlock_policyES3_Lb0ELb1EEELj2ELj2EE11impl_data_tENS1_6memberISF_NS1_7inheritISA_vE4typeEE4typeEE4typeE:
  170|  97.1k|        {
  171|  97.1k|            return x.get_(type_t<U>{});
  172|  97.1k|        }
_ZNK5immer6detail3csl10member_twoINS0_4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE11impl_data_tENS1_6memberIS9_NS1_7inheritINSB_5applyIS8_E4type5owneeEvE4typeEE4typeEE4type4get_ISK_EEDcNS1_6type_tIT_EE:
  184|  97.1k|        {
  185|  97.1k|            return n.get_(t);
  186|  97.1k|        }
_ZNK5immer6detail3csl7inheritINS_20no_transience_policy5applyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEEE4type5owneeEvE4type4get_ENS1_6type_tISA_EE:
  103|  97.1k|        const T& get_(type_t<T>) const { return *this; }

_ZNK5immer6detail15iterator_facadeINS0_4rbts16rrbtree_iteratorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENSt3__126random_access_iterator_tagEiRKilPSF_EdeEv:
   99|  4.73M|    ReferenceT operator*() const { return access_t::dereference(derived()); }
_ZN5immer6detail20iterator_core_access11dereferenceIRKNS0_4rbts16rrbtree_iteratorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEDcOT_:
   22|  4.73M|    {
   23|  4.73M|        return x.dereference();
   24|  4.73M|    }
_ZNK5immer6detail15iterator_facadeINS0_4rbts16rrbtree_iteratorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENSt3__126random_access_iterator_tagEiRKilPSF_E7derivedEv:
   86|  4.77M|    {
   87|  4.77M|        static_assert(std::is_base_of<iterator_facade, DerivedT>::value,
   88|  4.77M|                      "must pass a derived thing");
   89|  4.77M|        return *static_cast<const DerivedT*>(this);
   90|  4.77M|    }
_ZN5immer6detail15iterator_facadeINS0_4rbts16rrbtree_iteratorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENSt3__126random_access_iterator_tagEiRKilPSF_EpLEl:
  151|   232k|    {
  152|   232k|        access_t::advance(derived(), n);
  153|   232k|        return derived();
  154|   232k|    }
_ZN5immer6detail20iterator_core_access7advanceIRNS0_4rbts16rrbtree_iteratorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEElEEDcOT_T0_:
   46|   232k|    {
   47|   232k|        return x.advance(d);
   48|   232k|    }
_ZN5immer6detail15iterator_facadeINS0_4rbts16rrbtree_iteratorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENSt3__126random_access_iterator_tagEiRKilPSF_E7derivedEv:
   92|  7.55M|    {
   93|  7.55M|        static_assert(std::is_base_of<iterator_facade, DerivedT>::value,
   94|  7.55M|                      "must pass a derived thing");
   95|  7.55M|        return *static_cast<DerivedT*>(this);
   96|  7.55M|    }
_ZN5immer6detail15iterator_facadeINS0_4rbts16rrbtree_iteratorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENSt3__126random_access_iterator_tagEiRKilPSF_EppEv:
  119|  3.54M|    {
  120|  3.54M|        access_t::increment(derived());
  121|  3.54M|        return derived();
  122|  3.54M|    }
_ZN5immer6detail20iterator_core_access9incrementIRNS0_4rbts16rrbtree_iteratorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEDcOT_:
   28|  3.54M|    {
   29|  3.54M|        return x.increment();
   30|  3.54M|    }
_ZNK5immer6detail15iterator_facadeINS0_4rbts16rrbtree_iteratorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENSt3__126random_access_iterator_tagEiRKilPSF_EplISI_TnNSD_9enable_ifIXsrT_16is_random_accessEbE4typeELb1EEESC_l:
  164|  41.3k|    {
  165|  41.3k|        auto tmp = derived();
  166|  41.3k|        return tmp += n;
  167|  41.3k|    }

_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE17make_inner_n_intoEPvmj:
  213|  2.82M|    {
  214|  2.82M|        assert(n <= branches<B>);
  ------------------
  |  Branch (214:9): [True: 2.82M, False: 0]
  ------------------
  215|  2.82M|        assert(size >= sizeof_inner_n(n));
  ------------------
  |  Branch (215:9): [True: 2.82M, False: 0]
  ------------------
  216|  2.82M|        auto p                       = new (buffer) node_t;
  217|  2.82M|        p->impl.d.data.inner.relaxed = nullptr;
  218|  2.82M|#if IMMER_TAGGED_NODE
  219|  2.82M|        p->impl.d.kind = node_t::kind_t::inner;
  220|  2.82M|#endif
  221|  2.82M|        return p;
  222|  2.82M|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE14sizeof_inner_nEj:
  145|  11.3M|    {
  146|  11.3M|        return keep_headroom ? max_sizeof_inner : sizeof_packed_inner_n(n);
  ------------------
  |  Branch (146:16): [True: 11.3M, Folded]
  ------------------
  147|  11.3M|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE3incEv:
  956|  26.2M|    {
  957|  26.2M|        refs(this).inc();
  958|  26.2M|        return this;
  959|  26.2M|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE4refsEPKSB_:
  203|  96.7M|    {
  204|  96.7M|        return auto_const_cast(get<refs_t>(x->impl));
  205|  96.7M|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE16make_leaf_n_intoEPvmj:
  330|  1.23M|    {
  331|  1.23M|        assert(n <= branches<BL>);
  ------------------
  |  Branch (331:9): [True: 1.23M, False: 0]
  ------------------
  332|  1.23M|        assert(size >= sizeof_leaf_n(n));
  ------------------
  |  Branch (332:9): [True: 1.23M, False: 0]
  ------------------
  333|  1.23M|        auto p = new (buffer) node_t;
  334|  1.23M|#if IMMER_TAGGED_NODE
  335|  1.23M|        p->impl.d.kind = node_t::kind_t::leaf;
  336|  1.23M|#endif
  337|  1.23M|        return p;
  338|  1.23M|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE13sizeof_leaf_nEj:
  160|  5.13M|    {
  161|  5.13M|        return keep_headroom ? max_sizeof_leaf : sizeof_packed_leaf_n(n);
  ------------------
  |  Branch (161:16): [True: 5.13M, Folded]
  ------------------
  162|  5.13M|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE7relaxedEv:
  172|   155M|    {
  173|   155M|        IMMER_ASSERT_TAGGED(kind() == kind_t::inner);
  ------------------
  |  |   68|   155M|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (173:9): [True: 155M, False: 0]
  ------------------
  174|   155M|        return impl.d.data.inner.relaxed;
  175|   155M|    }
_ZNK5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE4kindEv:
  168|   295M|    kind_t kind() const { return impl.d.kind; }
_ZNK5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE3decEv:
  967|  55.0M|    bool dec() const { return refs(this).dec(); }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE5innerEv:
  184|   101M|    {
  185|   101M|        IMMER_ASSERT_TAGGED(kind() == kind_t::inner);
  ------------------
  |  |   68|   101M|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (185:9): [True: 101M, False: 0]
  ------------------
  186|   101M|        return impl.d.data.inner.get_storage_ptr();
  187|   101M|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE14delete_inner_rEPSB_j:
  832|  10.7M|    {
  833|  10.7M|        IMMER_ASSERT_TAGGED(p->kind() == kind_t::inner);
  ------------------
  |  |   68|  10.7M|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (833:9): [True: 10.7M, False: 0]
  ------------------
  834|  10.7M|        auto r = p->relaxed();
  835|  10.7M|        assert(r);
  ------------------
  |  Branch (835:9): [True: 10.7M, False: 0]
  ------------------
  836|  10.7M|        static_if<!embed_relaxed>([&](auto) {
  837|  10.7M|            if (node_t::refs(r).dec())
  838|  10.7M|                heap::deallocate(node_t::ownee(r).owned()
  839|  10.7M|                                     ? node_t::max_sizeof_relaxed
  840|  10.7M|                                     : node_t::sizeof_relaxed_n(n),
  841|  10.7M|                                 r);
  842|  10.7M|        });
  843|  10.7M|        heap::deallocate(ownee(p).owned() ? node_t::max_sizeof_inner_r
  ------------------
  |  Branch (843:26): [True: 0, False: 10.7M]
  ------------------
  844|  10.7M|                                          : node_t::sizeof_inner_r_n(n),
  845|  10.7M|                         p);
  846|  10.7M|    }
_ZZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE14delete_inner_rEPSB_jENKUlT_E_clINS0_7empty_tEEEDaSD_:
  836|  10.7M|        static_if<!embed_relaxed>([&](auto) {
  837|  10.7M|            if (node_t::refs(r).dec())
  ------------------
  |  Branch (837:17): [True: 10.4M, False: 301k]
  ------------------
  838|  10.4M|                heap::deallocate(node_t::ownee(r).owned()
  ------------------
  |  Branch (838:34): [True: 0, False: 10.4M]
  ------------------
  839|  10.4M|                                     ? node_t::max_sizeof_relaxed
  840|  10.4M|                                     : node_t::sizeof_relaxed_n(n),
  841|  10.4M|                                 r);
  842|  10.7M|        });
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE4refsEPKNS0_3csl10member_twoINSB_14relaxed_data_tENSC_6memberIS7_NSC_7inheritINS9_5applyIS6_E4type5owneeEvE4typeEE4typeEE4typeE:
  196|  11.3M|    {
  197|  11.3M|        return auto_const_cast(get<refs_t>(*x));
  198|  11.3M|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE5owneeEPNS0_3csl10member_twoINSB_14relaxed_data_tENSC_6memberIS7_NSC_7inheritINS9_5applyIS6_E4type5owneeEvE4typeEE4typeEE4typeE:
  200|  10.5M|    static ownee_t& ownee(relaxed_t* x) { return get<ownee_t>(*x); }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE16sizeof_relaxed_nEj:
  155|  20.7M|    {
  156|  20.7M|        return keep_headroom ? max_sizeof_relaxed : sizeof_packed_relaxed_n(n);
  ------------------
  |  Branch (156:16): [True: 20.7M, Folded]
  ------------------
  157|  20.7M|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE5owneeEPSB_:
  210|  15.4M|    static ownee_t& ownee(node_t* x) { return get<ownee_t>(x->impl); }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE16sizeof_inner_r_nEj:
  150|  21.3M|    {
  151|  21.3M|        return keep_headroom ? max_sizeof_inner_r : sizeof_packed_inner_r_n(n);
  ------------------
  |  Branch (151:16): [True: 21.3M, Folded]
  ------------------
  152|  21.3M|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE11delete_leafEPSB_j:
  861|  1.43M|    {
  862|  1.43M|        IMMER_ASSERT_TAGGED(p->kind() == kind_t::leaf);
  ------------------
  |  |   68|  1.43M|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (862:9): [True: 1.43M, False: 0]
  ------------------
  863|  1.43M|        detail::destroy_n(p->leaf(), n);
  864|  1.43M|        heap::deallocate(ownee(p).owned() ? node_t::max_sizeof_leaf
  ------------------
  |  Branch (864:26): [True: 0, False: 1.43M]
  ------------------
  865|  1.43M|                                          : node_t::sizeof_leaf_n(n),
  866|  1.43M|                         p);
  867|  1.43M|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE4leafEv:
  190|  9.92M|    {
  191|  9.92M|        IMMER_ASSERT_TAGGED(kind() == kind_t::leaf);
  ------------------
  |  |   68|  9.92M|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (191:9): [True: 9.92M, False: 0]
  ------------------
  192|  9.92M|        return impl.d.data.leaf.get_storage_ptr();
  193|  9.92M|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE12delete_innerEPSB_j:
  808|  2.90M|    {
  809|  2.90M|        IMMER_ASSERT_TAGGED(p->kind() == kind_t::inner);
  ------------------
  |  |   68|  2.90M|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (809:9): [True: 2.90M, False: 0]
  ------------------
  810|  2.90M|        assert(!p->relaxed());
  ------------------
  |  Branch (810:9): [True: 2.90M, False: 0]
  ------------------
  811|  2.90M|        heap::deallocate(ownee(p).owned() ? node_t::max_sizeof_inner
  ------------------
  |  Branch (811:26): [True: 0, False: 2.90M]
  ------------------
  812|  2.90M|                                          : node_t::sizeof_inner_n(n),
  813|  2.90M|                         p);
  814|  2.90M|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE17copy_leaf_emplaceIiEEPSB_SD_jOT_:
  794|   337k|    {
  795|   337k|        auto dst = copy_leaf_n(n + 1, src, n);
  796|   337k|        IMMER_TRY {
  ------------------
  |  |   49|   337k|#define IMMER_TRY try
  ------------------
  797|   337k|            new (dst->leaf() + n) T(std::forward<U>(x));
  798|   337k|        }
  799|   337k|        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|   337k|        return dst;
  805|   337k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE11copy_leaf_nEjPSB_j:
  696|   337k|    {
  697|   337k|        assert(allocn >= n);
  ------------------
  |  Branch (697:9): [True: 337k, False: 0]
  ------------------
  698|   337k|        IMMER_ASSERT_TAGGED(src->kind() == kind_t::leaf);
  ------------------
  |  |   68|   337k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (698:9): [True: 337k, False: 0]
  ------------------
  699|   337k|        auto dst = make_leaf_n(allocn);
  700|   337k|        IMMER_TRY {
  ------------------
  |  |   49|   337k|#define IMMER_TRY try
  ------------------
  701|   337k|            detail::uninitialized_copy(
  702|   337k|                src->leaf(), src->leaf() + n, dst->leaf());
  703|   337k|        }
  704|   337k|        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|   337k|        return dst;
  709|   337k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE11make_leaf_nEj:
  341|  1.23M|    {
  342|  1.23M|        assert(n <= branches<BL>);
  ------------------
  |  Branch (342:9): [True: 1.23M, False: 0]
  ------------------
  343|  1.23M|        auto m = heap::allocate(sizeof_leaf_n(n));
  344|  1.23M|        return make_leaf_n_into(m, sizeof_leaf_n(n), n);
  345|  1.23M|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE11make_leaf_nIiEEPSB_jOT_:
  470|   122k|    {
  471|   122k|        assert(n >= 1);
  ------------------
  |  Branch (471:9): [True: 122k, False: 0]
  ------------------
  472|   122k|        auto p = make_leaf_n(n);
  473|   122k|        IMMER_TRY {
  ------------------
  |  |   49|   122k|#define IMMER_TRY try
  ------------------
  474|   122k|            new (p->leaf()) T(std::forward<U>(x));
  475|   122k|        }
  476|   122k|        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|   122k|        return p;
  481|   122k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE13do_copy_innerEPSB_SC_j:
  558|  2.59M|    {
  559|  2.59M|        IMMER_ASSERT_TAGGED(dst->kind() == kind_t::inner);
  ------------------
  |  |   68|  2.59M|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (559:9): [True: 2.59M, False: 0]
  ------------------
  560|  2.59M|        IMMER_ASSERT_TAGGED(src->kind() == kind_t::inner);
  ------------------
  |  |   68|  2.59M|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (560:9): [True: 2.59M, False: 0]
  ------------------
  561|  2.59M|        auto p = src->inner();
  562|  2.59M|        inc_nodes(p, n);
  563|  2.59M|        std::copy(p, p + n, dst->inner());
  564|  2.59M|        return dst;
  565|  2.59M|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE9inc_nodesEPPSB_j:
  970|  8.15M|    {
  971|  21.8M|        for (auto i = p, e = i + n; i != e; ++i)
  ------------------
  |  Branch (971:37): [True: 13.7M, False: 8.15M]
  ------------------
  972|  13.7M|            refs(*i).inc();
  973|  8.15M|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE14copy_inner_r_nEjPSB_j:
  588|   527k|    {
  589|   527k|        assert(allocn >= n);
  ------------------
  |  Branch (589:9): [True: 527k, False: 0]
  ------------------
  590|   527k|        IMMER_ASSERT_TAGGED(src->kind() == kind_t::inner);
  ------------------
  |  |   68|   527k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (590:9): [True: 527k, False: 0]
  ------------------
  591|   527k|        auto dst = make_inner_r_n(allocn);
  592|   527k|        return do_copy_inner_r(dst, src, n);
  593|   527k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE15do_copy_inner_rEPSB_SC_j:
  610|   551k|    {
  611|   551k|        IMMER_ASSERT_TAGGED(dst->kind() == kind_t::inner);
  ------------------
  |  |   68|   551k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (611:9): [True: 551k, False: 0]
  ------------------
  612|   551k|        IMMER_ASSERT_TAGGED(src->kind() == kind_t::inner);
  ------------------
  |  |   68|   551k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (612:9): [True: 551k, False: 0]
  ------------------
  613|   551k|        auto src_r = src->relaxed();
  614|   551k|        auto dst_r = dst->relaxed();
  615|   551k|        inc_nodes(src->inner(), n);
  616|   551k|        std::copy(src->inner(), src->inner() + n, dst->inner());
  617|   551k|        std::copy(src_r->d.sizes, src_r->d.sizes + n, dst_r->d.sizes);
  618|   551k|        dst_r->d.count = n;
  619|   551k|        return dst;
  620|   551k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE14make_inner_r_nEj:
  243|  10.2M|    {
  244|  10.2M|        assert(n <= branches<B>);
  ------------------
  |  Branch (244:9): [True: 10.2M, False: 0]
  ------------------
  245|  10.2M|        auto mp = heap::allocate(sizeof_inner_r_n(n));
  246|  10.2M|        auto mr = static_cast<void*>(nullptr);
  247|  10.2M|        if (embed_relaxed) {
  ------------------
  |  Branch (247:13): [Folded, False: 10.2M]
  ------------------
  248|      0|            mr = reinterpret_cast<unsigned char*>(mp) + sizeof_inner_n(n);
  249|  10.2M|        } else {
  250|  10.2M|            IMMER_TRY {
  ------------------
  |  |   49|  10.2M|#define IMMER_TRY try
  ------------------
  251|  10.2M|                mr = heap::allocate(sizeof_relaxed_n(n), norefs_tag{});
  252|  10.2M|            }
  253|  10.2M|            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|  10.2M|        }
  258|  10.2M|        auto p                       = new (mp) node_t;
  259|  10.2M|        auto r                       = new (mr) relaxed_t;
  260|  10.2M|        r->d.count                   = 0;
  261|  10.2M|        p->impl.d.data.inner.relaxed = r;
  262|  10.2M|#if IMMER_TAGGED_NODE
  263|  10.2M|        p->impl.d.kind = node_t::kind_t::inner;
  264|  10.2M|#endif
  265|  10.2M|        return p;
  266|  10.2M|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE9make_pathEjPSB_:
  498|   726k|    {
  499|   726k|        IMMER_ASSERT_TAGGED(node->kind() == kind_t::leaf);
  ------------------
  |  |   68|   726k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (499:9): [True: 726k, False: 0]
  ------------------
  500|   726k|        if (shift == endshift<B, BL>)
  ------------------
  |  Branch (500:13): [True: 535k, False: 190k]
  ------------------
  501|   535k|            return node;
  502|   190k|        else {
  503|   190k|            auto n = node_t::make_inner_n(1);
  504|   190k|            IMMER_TRY {
  ------------------
  |  |   49|   190k|#define IMMER_TRY try
  ------------------
  505|   190k|                n->inner()[0] = make_path(shift - B, node);
  506|   190k|            }
  507|   190k|            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|   190k|            return n;
  512|   190k|        }
  513|   726k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE12make_inner_nEj:
  224|  2.82M|    {
  225|  2.82M|        assert(n <= branches<B>);
  ------------------
  |  Branch (225:9): [True: 2.82M, False: 0]
  ------------------
  226|  2.82M|        auto m = heap::allocate(sizeof_inner_n(n));
  227|  2.82M|        return make_inner_n_into(m, sizeof_inner_n(n), n);
  228|  2.82M|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE9copy_leafEPSB_j:
  666|   129k|    {
  667|   129k|        IMMER_ASSERT_TAGGED(src->kind() == kind_t::leaf);
  ------------------
  |  |   68|   129k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (667:9): [True: 129k, False: 0]
  ------------------
  668|   129k|        auto dst = make_leaf_n(n);
  669|   129k|        IMMER_TRY {
  ------------------
  |  |   49|   129k|#define IMMER_TRY try
  ------------------
  670|   129k|            detail::uninitialized_copy(
  671|   129k|                src->leaf(), src->leaf() + n, dst->leaf());
  672|   129k|        }
  673|   129k|        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|   129k|        return dst;
  678|   129k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE15make_inner_sr_nEjPNS0_3csl10member_twoINSB_14relaxed_data_tENSC_6memberIS7_NSC_7inheritINS9_5applyIS6_E4type5owneeEvE4typeEE4typeEE4typeE:
  269|   312k|    {
  270|   312k|        return static_if<embed_relaxed, node_t*>(
  271|   312k|            [&](auto) { return node_t::make_inner_r_n(n); },
  272|   312k|            [&](auto) {
  273|   312k|                auto p =
  274|   312k|                    new (heap::allocate(node_t::sizeof_inner_r_n(n))) node_t;
  275|   312k|                assert(r->d.count >= n);
  276|   312k|                node_t::refs(r).inc();
  277|   312k|                p->impl.d.data.inner.relaxed = r;
  278|   312k|#if IMMER_TAGGED_NODE
  279|   312k|                p->impl.d.kind = node_t::kind_t::inner;
  280|   312k|#endif
  281|   312k|                return p;
  282|   312k|            });
  283|   312k|    }
_ZZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE15make_inner_sr_nEjPNS0_3csl10member_twoINSB_14relaxed_data_tENSC_6memberIS7_NSC_7inheritINS9_5applyIS6_E4type5owneeEvE4typeEE4typeEE4typeEENKUlT_E0_clINS0_7empty_tEEEDaSS_:
  272|   312k|            [&](auto) {
  273|   312k|                auto p =
  274|   312k|                    new (heap::allocate(node_t::sizeof_inner_r_n(n))) node_t;
  275|   312k|                assert(r->d.count >= n);
  ------------------
  |  Branch (275:17): [True: 312k, False: 0]
  ------------------
  276|   312k|                node_t::refs(r).inc();
  277|   312k|                p->impl.d.data.inner.relaxed = r;
  278|   312k|#if IMMER_TAGGED_NODE
  279|   312k|                p->impl.d.kind = node_t::kind_t::inner;
  280|   312k|#endif
  281|   312k|                return p;
  282|   312k|            });
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE24do_copy_inner_replace_srEPSB_SC_jjSC_:
  652|   312k|    {
  653|   312k|        if (embed_relaxed)
  ------------------
  |  Branch (653:13): [Folded, False: 312k]
  ------------------
  654|      0|            return do_copy_inner_replace_r(dst, src, n, offset, child);
  655|   312k|        else {
  656|   312k|            auto p = src->inner();
  657|   312k|            inc_nodes(p, offset);
  658|   312k|            inc_nodes(p + offset + 1, n - offset - 1);
  659|   312k|            std::copy(p, p + n, dst->inner());
  660|   312k|            dst->inner()[offset] = child;
  661|   312k|            return dst;
  662|   312k|        }
  663|   312k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE21do_copy_inner_replaceEPSB_SC_jjSC_:
  569|  50.0k|    {
  570|  50.0k|        IMMER_ASSERT_TAGGED(dst->kind() == kind_t::inner);
  ------------------
  |  |   68|  50.0k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (570:9): [True: 50.0k, False: 0]
  ------------------
  571|  50.0k|        IMMER_ASSERT_TAGGED(src->kind() == kind_t::inner);
  ------------------
  |  |   68|  50.0k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (571:9): [True: 50.0k, False: 0]
  ------------------
  572|  50.0k|        auto p = src->inner();
  573|  50.0k|        inc_nodes(p, offset);
  574|  50.0k|        inc_nodes(p + offset + 1, n - offset - 1);
  575|  50.0k|        std::copy(p, p + n, dst->inner());
  576|  50.0k|        dst->inner()[offset] = child;
  577|  50.0k|        return dst;
  578|  50.0k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE12copy_inner_nEjPSB_j:
  543|  8.66k|    {
  544|  8.66k|        assert(allocn >= n);
  ------------------
  |  Branch (544:9): [True: 8.66k, False: 0]
  ------------------
  545|  8.66k|        IMMER_ASSERT_TAGGED(src->kind() == kind_t::inner);
  ------------------
  |  |   68|  8.66k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (545:9): [True: 8.66k, False: 0]
  ------------------
  546|  8.66k|        auto dst = make_inner_n(allocn);
  547|  8.66k|        return do_copy_inner(dst, src, n);
  548|  8.66k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE12copy_inner_rEPSB_j:
  581|  4.72k|    {
  582|  4.72k|        IMMER_ASSERT_TAGGED(src->kind() == kind_t::inner);
  ------------------
  |  |   68|  4.72k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (582:9): [True: 4.72k, False: 0]
  ------------------
  583|  4.72k|        auto dst = make_inner_r_n(n);
  584|  4.72k|        return do_copy_inner_r(dst, src, n);
  585|  4.72k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE13compute_shiftEv:
  977|  4.40M|    {
  978|  4.40M|        if (kind() == kind_t::leaf)
  ------------------
  |  Branch (978:13): [True: 391k, False: 4.01M]
  ------------------
  979|   391k|            return endshift<B, BL>;
  980|  4.01M|        else
  981|  4.01M|            return B + inner()[0]->compute_shift();
  982|  4.40M|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE5checkEjm:
  986|   391k|    {
  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|   391k|        return true;
 1023|   391k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE9copy_leafEPSB_jj:
  778|   314k|    {
  779|   314k|        IMMER_ASSERT_TAGGED(src->kind() == kind_t::leaf);
  ------------------
  |  |   68|   314k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (779:9): [True: 314k, False: 0]
  ------------------
  780|   314k|        auto dst = make_leaf_n(last - idx);
  781|   314k|        IMMER_TRY {
  ------------------
  |  |   49|   314k|#define IMMER_TRY try
  ------------------
  782|   314k|            detail::uninitialized_copy(
  783|   314k|                src->leaf() + idx, src->leaf() + last, dst->leaf());
  784|   314k|        }
  785|   314k|        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|   314k|        return dst;
  790|   314k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE9copy_leafEPSB_jSC_j:
  712|   304k|    {
  713|   304k|        IMMER_ASSERT_TAGGED(src1->kind() == kind_t::leaf);
  ------------------
  |  |   68|   304k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (713:9): [True: 304k, False: 0]
  ------------------
  714|   304k|        IMMER_ASSERT_TAGGED(src2->kind() == kind_t::leaf);
  ------------------
  |  |   68|   304k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (714:9): [True: 304k, False: 0]
  ------------------
  715|   304k|        auto dst = make_leaf_n(n1 + n2);
  716|   304k|        IMMER_TRY {
  ------------------
  |  |   49|   304k|#define IMMER_TRY try
  ------------------
  717|   304k|            detail::uninitialized_copy(
  718|   304k|                src1->leaf(), src1->leaf() + n1, dst->leaf());
  719|   304k|        }
  720|   304k|        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|   304k|        IMMER_TRY {
  ------------------
  |  |   49|   304k|#define IMMER_TRY try
  ------------------
  725|   304k|            detail::uninitialized_copy(
  726|   304k|                src2->leaf(), src2->leaf() + n2, dst->leaf() + n1);
  727|   304k|        }
  728|   304k|        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|   304k|        return dst;
  734|   304k|    }
_ZNK5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE10can_mutateENS9_5applyIS6_E4type4editE:
  870|  1.70M|    {
  871|  1.70M|        return refs(this).unique() || ownee(this).can_mutate(e);
  ------------------
  |  Branch (871:16): [True: 1.60M, False: 97.1k]
  |  Branch (871:39): [True: 0, False: 97.1k]
  ------------------
  872|  1.70M|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE5owneeEPKSB_:
  207|  97.1k|    {
  208|  97.1k|        return get<ownee_t>(x->impl);
  209|  97.1k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE11copy_leaf_eENS9_5applyIS6_E4type4editEPSB_j:
  681|  32.2k|    {
  682|  32.2k|        IMMER_ASSERT_TAGGED(src->kind() == kind_t::leaf);
  ------------------
  |  |   68|  32.2k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (682:9): [True: 32.2k, False: 0]
  ------------------
  683|  32.2k|        auto dst = make_leaf_e(e);
  684|  32.2k|        IMMER_TRY {
  ------------------
  |  |   49|  32.2k|#define IMMER_TRY try
  ------------------
  685|  32.2k|            detail::uninitialized_copy(
  686|  32.2k|                src->leaf(), src->leaf() + n, dst->leaf());
  687|  32.2k|        }
  688|  32.2k|        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|  32.2k|        return dst;
  693|  32.2k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE11make_leaf_eENS9_5applyIS6_E4type4editE:
  348|   197k|    {
  349|   197k|        auto p   = new (heap::allocate(max_sizeof_leaf)) node_t;
  350|   197k|        ownee(p) = e;
  351|   197k|#if IMMER_TAGGED_NODE
  352|   197k|        p->impl.d.kind = node_t::kind_t::leaf;
  353|   197k|#endif
  354|   197k|        return p;
  355|   197k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE11make_leaf_eIiEEPSB_NS9_5applyIS6_E4type4editEOT_:
  485|  13.8k|    {
  486|  13.8k|        auto p = make_leaf_e(e);
  487|  13.8k|        IMMER_TRY {
  ------------------
  |  |   49|  13.8k|#define IMMER_TRY try
  ------------------
  488|  13.8k|            new (p->leaf()) T(std::forward<U>(x));
  489|  13.8k|        }
  490|  13.8k|        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|  13.8k|        return p;
  495|  13.8k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE24ensure_mutable_relaxed_nENS9_5applyIS6_E4type4editEj:
  930|  64.1k|    {
  931|  64.1k|        auto src_r = relaxed();
  932|  64.1k|        return static_if<embed_relaxed, relaxed_t*>(
  933|  64.1k|            [&](auto) { return src_r; },
  934|  64.1k|            [&](auto) {
  935|  64.1k|                if (node_t::refs(src_r).unique() ||
  936|  64.1k|                    node_t::ownee(src_r).can_mutate(e))
  937|  64.1k|                    return src_r;
  938|  64.1k|                else {
  939|  64.1k|                    auto dst_r =
  940|  64.1k|                        new (heap::allocate(max_sizeof_relaxed)) relaxed_t;
  941|  64.1k|                    if (src_r) {
  942|  64.1k|                        std::copy(
  943|  64.1k|                            src_r->d.sizes, src_r->d.sizes + n, dst_r->d.sizes);
  944|  64.1k|                        if (node_t::refs(src_r).dec())
  945|  64.1k|                            heap::deallocate(node_t::sizeof_inner_r_n(n),
  946|  64.1k|                                             src_r);
  947|  64.1k|                    }
  948|  64.1k|                    dst_r->d.count                   = n;
  949|  64.1k|                    node_t::ownee(dst_r)             = e;
  950|  64.1k|                    return impl.d.data.inner.relaxed = dst_r;
  951|  64.1k|                }
  952|  64.1k|            });
  953|  64.1k|    }
_ZZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE24ensure_mutable_relaxed_nENS9_5applyIS6_E4type4editEjENKUlT_E0_clINS0_7empty_tEEEDaSG_:
  934|  64.1k|            [&](auto) {
  935|  64.1k|                if (node_t::refs(src_r).unique() ||
  ------------------
  |  Branch (935:21): [True: 50.9k, False: 13.2k]
  ------------------
  936|  13.2k|                    node_t::ownee(src_r).can_mutate(e))
  ------------------
  |  Branch (936:21): [True: 0, False: 13.2k]
  ------------------
  937|  50.9k|                    return src_r;
  938|  13.2k|                else {
  939|  13.2k|                    auto dst_r =
  940|  13.2k|                        new (heap::allocate(max_sizeof_relaxed)) relaxed_t;
  941|  13.2k|                    if (src_r) {
  ------------------
  |  Branch (941:25): [True: 13.2k, False: 0]
  ------------------
  942|  13.2k|                        std::copy(
  943|  13.2k|                            src_r->d.sizes, src_r->d.sizes + n, dst_r->d.sizes);
  944|  13.2k|                        if (node_t::refs(src_r).dec())
  ------------------
  |  Branch (944:29): [True: 0, False: 13.2k]
  ------------------
  945|      0|                            heap::deallocate(node_t::sizeof_inner_r_n(n),
  946|      0|                                             src_r);
  947|  13.2k|                    }
  948|  13.2k|                    dst_r->d.count                   = n;
  949|  13.2k|                    node_t::ownee(dst_r)             = e;
  950|  13.2k|                    return impl.d.data.inner.relaxed = dst_r;
  951|  13.2k|                }
  952|  64.1k|            });
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE14copy_inner_r_eENS9_5applyIS6_E4type4editEPSB_j:
  596|  19.6k|    {
  597|  19.6k|        IMMER_ASSERT_TAGGED(src->kind() == kind_t::inner);
  ------------------
  |  |   68|  19.6k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (597:9): [True: 19.6k, False: 0]
  ------------------
  598|  19.6k|        auto dst = make_inner_r_e(e);
  599|  19.6k|        return do_copy_inner_r(dst, src, n);
  600|  19.6k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE14make_inner_r_eENS9_5applyIS6_E4type4editE:
  286|  99.5k|    {
  287|  99.5k|        auto mp = heap::allocate(max_sizeof_inner_r);
  288|  99.5k|        auto mr = static_cast<void*>(nullptr);
  289|  99.5k|        if (embed_relaxed) {
  ------------------
  |  Branch (289:13): [Folded, False: 99.5k]
  ------------------
  290|      0|            mr = reinterpret_cast<unsigned char*>(mp) + max_sizeof_inner;
  291|  99.5k|        } else {
  292|  99.5k|            IMMER_TRY {
  ------------------
  |  |   49|  99.5k|#define IMMER_TRY try
  ------------------
  293|  99.5k|                mr = heap::allocate(max_sizeof_relaxed, norefs_tag{});
  294|  99.5k|            }
  295|  99.5k|            IMMER_CATCH (...) {
  296|      0|                heap::deallocate(max_sizeof_inner_r, mp);
  297|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  298|      0|            }
  299|  99.5k|        }
  300|  99.5k|        auto p   = new (mp) node_t;
  301|  99.5k|        auto r   = new (mr) relaxed_t;
  302|  99.5k|        ownee(p) = e;
  303|  99.5k|        static_if<!embed_relaxed>([&](auto) { node_t::ownee(r) = e; });
  304|  99.5k|        r->d.count                   = 0;
  305|  99.5k|        p->impl.d.data.inner.relaxed = r;
  306|  99.5k|#if IMMER_TAGGED_NODE
  307|  99.5k|        p->impl.d.kind = node_t::kind_t::inner;
  308|  99.5k|#endif
  309|  99.5k|        return p;
  310|  99.5k|    }
_ZZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE14make_inner_r_eENS9_5applyIS6_E4type4editEENKUlT_E_clINS0_7empty_tEEEDaSG_:
  303|  99.5k|        static_if<!embed_relaxed>([&](auto) { node_t::ownee(r) = e; });
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE11make_path_eENS9_5applyIS6_E4type4editEjPSB_:
  516|   245k|    {
  517|   245k|        IMMER_ASSERT_TAGGED(node->kind() == kind_t::leaf);
  ------------------
  |  |   68|   245k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (517:9): [True: 245k, False: 0]
  ------------------
  518|   245k|        if (shift == endshift<B, BL>)
  ------------------
  |  Branch (518:13): [True: 182k, False: 62.3k]
  ------------------
  519|   182k|            return node;
  520|  62.3k|        else {
  521|  62.3k|            auto n = node_t::make_inner_e(e);
  522|  62.3k|            IMMER_TRY {
  ------------------
  |  |   49|  62.3k|#define IMMER_TRY try
  ------------------
  523|  62.3k|                n->inner()[0] = make_path_e(e, shift - B, node);
  524|  62.3k|            }
  525|  62.3k|            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|  62.3k|            return n;
  530|  62.3k|        }
  531|   245k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE12make_inner_eENS9_5applyIS6_E4type4editE:
  231|  87.4k|    {
  232|  87.4k|        auto m                       = heap::allocate(max_sizeof_inner);
  233|  87.4k|        auto p                       = new (m) node_t;
  234|  87.4k|        ownee(p)                     = e;
  235|  87.4k|        p->impl.d.data.inner.relaxed = nullptr;
  236|  87.4k|#if IMMER_TAGGED_NODE
  237|  87.4k|        p->impl.d.kind = node_t::kind_t::inner;
  238|  87.4k|#endif
  239|  87.4k|        return p;
  240|  87.4k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE12copy_inner_eENS9_5applyIS6_E4type4editEPSB_j:
  551|  16.4k|    {
  552|  16.4k|        IMMER_ASSERT_TAGGED(src->kind() == kind_t::inner);
  ------------------
  |  |   68|  16.4k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (552:9): [True: 16.4k, False: 0]
  ------------------
  553|  16.4k|        auto dst = make_inner_e(e);
  554|  16.4k|        return do_copy_inner(dst, src, n);
  555|  16.4k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE15copy_inner_sr_eENS9_5applyIS6_E4type4editEPSB_j:
  603|  11.5k|    {
  604|  11.5k|        IMMER_ASSERT_TAGGED(src->kind() == kind_t::inner);
  ------------------
  |  |   68|  11.5k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (604:9): [True: 11.5k, False: 0]
  ------------------
  605|  11.5k|        auto dst = make_inner_sr_e(e, src->relaxed());
  606|  11.5k|        return do_copy_inner_sr(dst, src, n);
  607|  11.5k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE15make_inner_sr_eENS9_5applyIS6_E4type4editEPNS0_3csl10member_twoINSB_14relaxed_data_tENSG_6memberIS7_NSG_7inheritINSE_5owneeEvE4typeEE4typeEE4typeE:
  313|  11.5k|    {
  314|  11.5k|        return static_if<embed_relaxed, node_t*>(
  315|  11.5k|            [&](auto) { return node_t::make_inner_r_e(e); },
  316|  11.5k|            [&](auto) {
  317|  11.5k|                auto p =
  318|  11.5k|                    new (heap::allocate(node_t::max_sizeof_inner_r)) node_t;
  319|  11.5k|                node_t::refs(r).inc();
  320|  11.5k|                p->impl.d.data.inner.relaxed = r;
  321|  11.5k|                node_t::ownee(p)             = e;
  322|  11.5k|#if IMMER_TAGGED_NODE
  323|  11.5k|                p->impl.d.kind = node_t::kind_t::inner;
  324|  11.5k|#endif
  325|  11.5k|                return p;
  326|  11.5k|            });
  327|  11.5k|    }
_ZZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE15make_inner_sr_eENS9_5applyIS6_E4type4editEPNS0_3csl10member_twoINSB_14relaxed_data_tENSG_6memberIS7_NSG_7inheritINSE_5owneeEvE4typeEE4typeEE4typeEENKUlT_E0_clINS0_7empty_tEEEDaST_:
  316|  11.5k|            [&](auto) {
  317|  11.5k|                auto p =
  318|  11.5k|                    new (heap::allocate(node_t::max_sizeof_inner_r)) node_t;
  319|  11.5k|                node_t::refs(r).inc();
  320|  11.5k|                p->impl.d.data.inner.relaxed = r;
  321|  11.5k|                node_t::ownee(p)             = e;
  322|  11.5k|#if IMMER_TAGGED_NODE
  323|  11.5k|                p->impl.d.kind = node_t::kind_t::inner;
  324|  11.5k|#endif
  325|  11.5k|                return p;
  326|  11.5k|            });
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE16do_copy_inner_srEPSB_SC_j:
  640|  11.5k|    {
  641|  11.5k|        if (embed_relaxed)
  ------------------
  |  Branch (641:13): [Folded, False: 11.5k]
  ------------------
  642|      0|            return do_copy_inner_r(dst, src, n);
  643|  11.5k|        else {
  644|  11.5k|            inc_nodes(src->inner(), n);
  645|  11.5k|            std::copy(src->inner(), src->inner() + n, dst->inner());
  646|  11.5k|            return dst;
  647|  11.5k|        }
  648|  11.5k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE11copy_leaf_eENS9_5applyIS6_E4type4editEPSB_jj:
  763|   150k|    {
  764|   150k|        IMMER_ASSERT_TAGGED(src->kind() == kind_t::leaf);
  ------------------
  |  |   68|   150k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (764:9): [True: 150k, False: 0]
  ------------------
  765|   150k|        auto dst = make_leaf_e(e);
  766|   150k|        IMMER_TRY {
  ------------------
  |  |   49|   150k|#define IMMER_TRY try
  ------------------
  767|   150k|            detail::uninitialized_copy(
  768|   150k|                src->leaf() + idx, src->leaf() + last, dst->leaf());
  769|   150k|        }
  770|   150k|        IMMER_CATCH (...) {
  771|      0|            heap::deallocate(max_sizeof_leaf, dst);
  772|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  773|      0|        }
  774|   150k|        return dst;
  775|   150k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE22ensure_mutable_relaxedENS9_5applyIS6_E4type4editE:
  877|   197k|    {
  878|   197k|        auto src_r = relaxed();
  879|   197k|        return static_if<embed_relaxed, relaxed_t*>(
  880|   197k|            [&](auto) { return src_r; },
  881|   197k|            [&](auto) {
  882|   197k|                if (node_t::refs(src_r).unique() ||
  883|   197k|                    node_t::ownee(src_r).can_mutate(e))
  884|   197k|                    return src_r;
  885|   197k|                else {
  886|   197k|                    auto dst_r = impl.d.data.inner.relaxed =
  887|   197k|                        new (heap::allocate(max_sizeof_relaxed)) relaxed_t;
  888|   197k|                    if (src_r) {
  889|   197k|                        auto n = dst_r->d.count = src_r->d.count;
  890|   197k|                        std::copy(
  891|   197k|                            src_r->d.sizes, src_r->d.sizes + n, dst_r->d.sizes);
  892|   197k|                        if (node_t::refs(src_r).dec())
  893|   197k|                            heap::deallocate(node_t::sizeof_inner_r_n(n),
  894|   197k|                                             src_r);
  895|   197k|                    }
  896|   197k|                    node_t::ownee(dst_r) = e;
  897|   197k|                    return dst_r;
  898|   197k|                }
  899|   197k|            });
  900|   197k|    }
_ZZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE22ensure_mutable_relaxedENS9_5applyIS6_E4type4editEENKUlT_E0_clINS0_7empty_tEEEDaSG_:
  881|   197k|            [&](auto) {
  882|   197k|                if (node_t::refs(src_r).unique() ||
  ------------------
  |  Branch (882:21): [True: 188k, False: 8.78k]
  ------------------
  883|  8.78k|                    node_t::ownee(src_r).can_mutate(e))
  ------------------
  |  Branch (883:21): [True: 0, False: 8.78k]
  ------------------
  884|   188k|                    return src_r;
  885|  8.78k|                else {
  886|  8.78k|                    auto dst_r = impl.d.data.inner.relaxed =
  887|  8.78k|                        new (heap::allocate(max_sizeof_relaxed)) relaxed_t;
  888|  8.78k|                    if (src_r) {
  ------------------
  |  Branch (888:25): [True: 8.78k, False: 0]
  ------------------
  889|  8.78k|                        auto n = dst_r->d.count = src_r->d.count;
  890|  8.78k|                        std::copy(
  891|  8.78k|                            src_r->d.sizes, src_r->d.sizes + n, dst_r->d.sizes);
  892|  8.78k|                        if (node_t::refs(src_r).dec())
  ------------------
  |  Branch (892:29): [True: 0, False: 8.78k]
  ------------------
  893|      0|                            heap::deallocate(node_t::sizeof_inner_r_n(n),
  894|      0|                                             src_r);
  895|  8.78k|                    }
  896|  8.78k|                    node_t::ownee(dst_r) = e;
  897|  8.78k|                    return dst_r;
  898|  8.78k|                }
  899|   197k|            });
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE11copy_leaf_eENS9_5applyIS6_E4type4editEPSB_jSG_j:
  738|    331|    {
  739|    331|        IMMER_ASSERT_TAGGED(src1->kind() == kind_t::leaf);
  ------------------
  |  |   68|    331|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (739:9): [True: 331, False: 0]
  ------------------
  740|    331|        IMMER_ASSERT_TAGGED(src2->kind() == kind_t::leaf);
  ------------------
  |  |   68|    331|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (740:9): [True: 331, False: 0]
  ------------------
  741|    331|        auto dst = make_leaf_e(e);
  742|    331|        IMMER_TRY {
  ------------------
  |  |   49|    331|#define IMMER_TRY try
  ------------------
  743|    331|            detail::uninitialized_copy(
  744|    331|                src1->leaf(), src1->leaf() + n1, dst->leaf());
  745|    331|        }
  746|    331|        IMMER_CATCH (...) {
  747|      0|            heap::deallocate(max_sizeof_leaf, dst);
  748|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  749|      0|        }
  750|    331|        IMMER_TRY {
  ------------------
  |  |   49|    331|#define IMMER_TRY try
  ------------------
  751|    331|            detail::uninitialized_copy(
  752|    331|                src2->leaf(), src2->leaf() + n2, dst->leaf() + n1);
  753|    331|        }
  754|    331|        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|    331|        return dst;
  760|    331|    }

_ZN5immer6detail4rbts11dec_visitor13visit_relaxedIRNS1_11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEEEvOT_:
  523|  32.9M|    {
  524|  32.9M|        using node_t = node_type<Pos>;
  525|  32.9M|        auto node    = p.node();
  526|  32.9M|        if (node->dec()) {
  ------------------
  |  Branch (526:13): [True: 10.6M, False: 22.2M]
  ------------------
  527|  10.6M|            p.each(this_t{});
  528|  10.6M|            node_t::delete_inner_r(node, p.count());
  529|  10.6M|        }
  530|  32.9M|    }
_ZN5immer6detail4rbts11dec_visitor13visit_regularIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEEEvOT_:
  534|  2.25M|    {
  535|  2.25M|        using node_t = node_type<Pos>;
  536|  2.25M|        auto node    = p.node();
  537|  2.25M|        if (node->dec()) {
  ------------------
  |  Branch (537:13): [True: 570k, False: 1.68M]
  ------------------
  538|   570k|            p.each(this_t{});
  539|   570k|            node_t::delete_inner(node, p.count());
  540|   570k|        }
  541|  2.25M|    }
_ZN5immer6detail4rbts11dec_visitor10visit_leafIRNS1_13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEEEvOT_:
  545|  1.14M|    {
  546|  1.14M|        using node_t = node_type<Pos>;
  547|  1.14M|        auto node    = p.node();
  548|  1.14M|        if (node->dec()) {
  ------------------
  |  Branch (548:13): [True: 511k, False: 634k]
  ------------------
  549|   511k|            node_t::delete_leaf(node, p.count());
  550|   511k|        }
  551|  1.14M|    }
_ZN5immer6detail4rbts11dec_visitor10visit_leafIRNS1_8leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEEEvOT_:
  545|   455k|    {
  546|   455k|        using node_t = node_type<Pos>;
  547|   455k|        auto node    = p.node();
  548|   455k|        if (node->dec()) {
  ------------------
  |  Branch (548:13): [True: 21.9k, False: 433k]
  ------------------
  549|  21.9k|            node_t::delete_leaf(node, p.count());
  550|  21.9k|        }
  551|   455k|    }
_ZN5immer6detail4rbts11dec_visitor13visit_regularIRNS1_8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEEEvOT_:
  534|  3.28M|    {
  535|  3.28M|        using node_t = node_type<Pos>;
  536|  3.28M|        auto node    = p.node();
  537|  3.28M|        if (node->dec()) {
  ------------------
  |  Branch (537:13): [True: 216k, False: 3.06M]
  ------------------
  538|   216k|            p.each(this_t{});
  539|   216k|            node_t::delete_inner(node, p.count());
  540|   216k|        }
  541|  3.28M|    }
_ZN5immer6detail4rbts11dec_visitor13visit_regularIRNS1_11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEEEvOT_:
  534|  2.22M|    {
  535|  2.22M|        using node_t = node_type<Pos>;
  536|  2.22M|        auto node    = p.node();
  537|  2.22M|        if (node->dec()) {
  ------------------
  |  Branch (537:13): [True: 2.09M, False: 130k]
  ------------------
  538|  2.09M|            p.each(this_t{});
  539|  2.09M|            node_t::delete_inner(node, p.count());
  540|  2.09M|        }
  541|  2.22M|    }
_ZN5immer6detail4rbts11dec_visitor13visit_regularIRNS1_17empty_regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEEEvOT_:
  534|  1.63M|    {
  535|  1.63M|        using node_t = node_type<Pos>;
  536|  1.63M|        auto node    = p.node();
  537|  1.63M|        if (node->dec()) {
  ------------------
  |  Branch (537:13): [True: 0, False: 1.63M]
  ------------------
  538|      0|            p.each(this_t{});
  539|      0|            node_t::delete_inner(node, p.count());
  540|      0|        }
  541|  1.63M|    }
_ZN5immer6detail4rbts11dec_visitor10visit_leafIRNS1_12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEEEvOT_:
  545|  9.46M|    {
  546|  9.46M|        using node_t = node_type<Pos>;
  547|  9.46M|        auto node    = p.node();
  548|  9.46M|        if (node->dec()) {
  ------------------
  |  Branch (548:13): [True: 898k, False: 8.56M]
  ------------------
  549|   898k|            node_t::delete_leaf(node, p.count());
  550|   898k|        }
  551|  9.46M|    }
_ZN5immer6detail4rbts11dec_visitor10visit_leafIRNS1_14empty_leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEEEvOT_:
  545|  1.53M|    {
  546|  1.53M|        using node_t = node_type<Pos>;
  547|  1.53M|        auto node    = p.node();
  548|  1.53M|        if (node->dec()) {
  ------------------
  |  Branch (548:13): [True: 0, False: 1.53M]
  ------------------
  549|      0|            node_t::delete_leaf(node, p.count());
  550|      0|        }
  551|  1.53M|    }
_ZN5immer6detail4rbts17push_tail_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE13visit_relaxedIRNS1_11relaxed_posISC_EEEEPSC_OT_SI_j:
  791|   523k|    {
  792|   523k|        auto level    = pos.shift();
  793|   523k|        auto idx      = pos.count() - 1;
  794|   523k|        auto children = pos.size(idx);
  795|   523k|        auto new_idx =
  796|   523k|            children == size_t{1} << level || level == BL ? idx + 1 : idx;
  ------------------
  |  Branch (796:13): [True: 13.9k, False: 509k]
  |  Branch (796:47): [True: 830, False: 508k]
  ------------------
  797|   523k|        auto new_child = static_cast<node_t*>(nullptr);
  798|   523k|        if (new_idx >= branches<B>)
  ------------------
  |  Branch (798:13): [True: 4.74k, False: 518k]
  ------------------
  799|  4.74k|            return nullptr;
  800|   518k|        else if (idx == new_idx) {
  ------------------
  |  Branch (800:18): [True: 508k, False: 10.0k]
  ------------------
  801|   508k|            new_child = pos.last_oh_csh(this_t{}, idx, children, tail, ts);
  802|   508k|            if (!new_child) {
  ------------------
  |  Branch (802:17): [True: 4.36k, False: 503k]
  ------------------
  803|  4.36k|                if (++new_idx < branches<B>)
  ------------------
  |  Branch (803:21): [True: 2.93k, False: 1.42k]
  ------------------
  804|  2.93k|                    new_child = node_t::make_path(level - B, tail);
  805|  1.42k|                else
  806|  1.42k|                    return nullptr;
  807|  4.36k|            }
  808|   508k|        } else
  809|  10.0k|            new_child = node_t::make_path(level - B, tail);
  810|   516k|        IMMER_TRY {
  ------------------
  |  |   49|   516k|#define IMMER_TRY try
  ------------------
  811|   516k|            auto count = new_idx + 1;
  812|   516k|            auto new_parent =
  813|   516k|                node_t::copy_inner_r_n(count, pos.node(), new_idx);
  814|   516k|            auto new_relaxed              = new_parent->relaxed();
  815|   516k|            new_parent->inner()[new_idx]  = new_child;
  816|   516k|            new_relaxed->d.sizes[new_idx] = pos.size() + ts;
  817|   516k|            new_relaxed->d.count          = count;
  818|   516k|            assert(new_relaxed->d.sizes[new_idx]);
  ------------------
  |  Branch (818:13): [True: 516k, False: 0]
  ------------------
  819|   516k|            return new_parent;
  820|   516k|        }
  821|   516k|        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|   516k|    }
_ZN5immer6detail4rbts17push_tail_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE13visit_regularIRNS1_15regular_sub_posISC_EEJRjEEEPSC_OT_SJ_DpOT0_:
  834|   200k|    {
  835|   200k|        assert((pos.size() & mask<BL>) == 0);
  ------------------
  |  Branch (835:9): [True: 200k, False: 0]
  ------------------
  836|   200k|        auto idx        = pos.index(pos.size() - 1);
  837|   200k|        auto new_idx    = pos.index(pos.size() + branches<BL> - 1);
  838|   200k|        auto count      = new_idx + 1;
  839|   200k|        auto new_parent = node_t::make_inner_n(count);
  840|   200k|        IMMER_TRY {
  ------------------
  |  |   49|   200k|#define IMMER_TRY try
  ------------------
  841|   200k|            new_parent->inner()[new_idx] =
  842|   200k|                idx == new_idx ? pos.last_oh(this_t{}, idx, tail)
  ------------------
  |  Branch (842:17): [True: 192k, False: 7.96k]
  ------------------
  843|       |                               /* otherwise */
  844|   200k|                               : node_t::make_path(pos.shift() - B, tail);
  845|   200k|        }
  846|   200k|        IMMER_CATCH (...) {
  847|      0|            node_t::delete_inner(new_parent, count);
  848|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  849|      0|        }
  850|   200k|        return node_t::do_copy_inner(new_parent, pos.node(), new_idx);
  851|   200k|    }
_ZN5immer6detail4rbts17push_tail_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE13visit_regularIRNS1_11regular_posISC_EEJEEEPSC_OT_SI_DpOT0_:
  834|  2.06M|    {
  835|  2.06M|        assert((pos.size() & mask<BL>) == 0);
  ------------------
  |  Branch (835:9): [True: 2.06M, False: 0]
  ------------------
  836|  2.06M|        auto idx        = pos.index(pos.size() - 1);
  837|  2.06M|        auto new_idx    = pos.index(pos.size() + branches<BL> - 1);
  838|  2.06M|        auto count      = new_idx + 1;
  839|  2.06M|        auto new_parent = node_t::make_inner_n(count);
  840|  2.06M|        IMMER_TRY {
  ------------------
  |  |   49|  2.06M|#define IMMER_TRY try
  ------------------
  841|  2.06M|            new_parent->inner()[new_idx] =
  842|  2.06M|                idx == new_idx ? pos.last_oh(this_t{}, idx, tail)
  ------------------
  |  Branch (842:17): [True: 1.57M, False: 483k]
  ------------------
  843|       |                               /* otherwise */
  844|  2.06M|                               : node_t::make_path(pos.shift() - B, tail);
  845|  2.06M|        }
  846|  2.06M|        IMMER_CATCH (...) {
  847|      0|            node_t::delete_inner(new_parent, count);
  848|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  849|      0|        }
  850|  2.06M|        return node_t::do_copy_inner(new_parent, pos.node(), new_idx);
  851|  2.06M|    }
_ZN5immer6detail4rbts9dec_innerINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEvPT_jm:
  562|    564|{
  563|    564|    visit_maybe_relaxed_sub(node, shift, size, dec_visitor());
  564|    564|}
_ZN5immer6detail4rbts17push_tail_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE13visit_regularIRNS1_15regular_sub_posISC_EEJEEEPSC_OT_SI_DpOT0_:
  834|   304k|    {
  835|   304k|        assert((pos.size() & mask<BL>) == 0);
  ------------------
  |  Branch (835:9): [True: 304k, False: 0]
  ------------------
  836|   304k|        auto idx        = pos.index(pos.size() - 1);
  837|   304k|        auto new_idx    = pos.index(pos.size() + branches<BL> - 1);
  838|   304k|        auto count      = new_idx + 1;
  839|   304k|        auto new_parent = node_t::make_inner_n(count);
  840|   304k|        IMMER_TRY {
  ------------------
  |  |   49|   304k|#define IMMER_TRY try
  ------------------
  841|   304k|            new_parent->inner()[new_idx] =
  842|   304k|                idx == new_idx ? pos.last_oh(this_t{}, idx, tail)
  ------------------
  |  Branch (842:17): [True: 290k, False: 14.5k]
  ------------------
  843|       |                               /* otherwise */
  844|   304k|                               : node_t::make_path(pos.shift() - B, tail);
  845|   304k|        }
  846|   304k|        IMMER_CATCH (...) {
  847|      0|            node_t::delete_inner(new_parent, count);
  848|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  849|      0|        }
  850|   304k|        return node_t::do_copy_inner(new_parent, pos.node(), new_idx);
  851|   304k|    }
flex-vector.cpp:_ZN5immer6detail4rbts14update_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10visit_leafIRNS1_12leaf_sub_posISC_EERZZ22LLVMFuzzerTestOneInputENK3$_6clI12fuzzer_inputEEDaRT_EUlSL_E_EEPSC_OSL_mOT0_:
  502|  91.2k|    {
  503|  91.2k|        auto offset = pos.index(idx);
  504|  91.2k|        auto node   = node_t::copy_leaf(pos.node(), pos.count());
  505|  91.2k|        IMMER_TRY {
  ------------------
  |  |   49|  91.2k|#define IMMER_TRY try
  ------------------
  506|  91.2k|            node->leaf()[offset] =
  507|  91.2k|                std::forward<Fn>(fn)(std::move(node->leaf()[offset]));
  508|  91.2k|            return node;
  509|  91.2k|        }
  510|  91.2k|        IMMER_CATCH (...) {
  511|      0|            node_t::delete_leaf(node, pos.count());
  512|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  513|      0|        }
  514|  91.2k|    }
flex-vector.cpp:_ZN5immer6detail4rbts14update_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE13visit_relaxedIRNS1_11relaxed_posISC_EERZZ22LLVMFuzzerTestOneInputENK3$_6clI12fuzzer_inputEEDaRT_EUlSL_E_EEPSC_OSL_mOT0_:
  466|   312k|    {
  467|   312k|        auto offset = pos.index(idx);
  468|   312k|        auto count  = pos.count();
  469|   312k|        auto node   = node_t::make_inner_sr_n(count, pos.relaxed());
  470|   312k|        IMMER_TRY {
  ------------------
  |  |   49|   312k|#define IMMER_TRY try
  ------------------
  471|   312k|            auto child = pos.towards_oh(this_t{}, idx, offset, fn);
  472|   312k|            node_t::do_copy_inner_replace_sr(
  473|   312k|                node, pos.node(), count, offset, child);
  474|   312k|            return node;
  475|   312k|        }
  476|   312k|        IMMER_CATCH (...) {
  477|      0|            node_t::delete_inner_r(node, count);
  478|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  479|      0|        }
  480|   312k|    }
flex-vector.cpp:_ZN5immer6detail4rbts14update_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE13visit_regularIRNS1_15regular_sub_posISC_EERZZ22LLVMFuzzerTestOneInputENK3$_6clI12fuzzer_inputEEDaRT_EUlSL_E_EEPSC_OSL_mOT0_:
  484|  28.6k|    {
  485|  28.6k|        auto offset = pos.index(idx);
  486|  28.6k|        auto count  = pos.count();
  487|  28.6k|        auto node   = node_t::make_inner_n(count);
  488|  28.6k|        IMMER_TRY {
  ------------------
  |  |   49|  28.6k|#define IMMER_TRY try
  ------------------
  489|  28.6k|            auto child = pos.towards_oh_ch(this_t{}, idx, offset, count, fn);
  490|  28.6k|            node_t::do_copy_inner_replace(
  491|  28.6k|                node, pos.node(), count, offset, child);
  492|  28.6k|            return node;
  493|  28.6k|        }
  494|  28.6k|        IMMER_CATCH (...) {
  495|      0|            node_t::delete_inner(node, count);
  496|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  497|      0|        }
  498|  28.6k|    }
flex-vector.cpp:_ZN5immer6detail4rbts14update_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10visit_leafIRNS1_13full_leaf_posISC_EERZZ22LLVMFuzzerTestOneInputENK3$_6clI12fuzzer_inputEEDaRT_EUlSL_E_EEPSC_OSL_mOT0_:
  502|  22.5k|    {
  503|  22.5k|        auto offset = pos.index(idx);
  504|  22.5k|        auto node   = node_t::copy_leaf(pos.node(), pos.count());
  505|  22.5k|        IMMER_TRY {
  ------------------
  |  |   49|  22.5k|#define IMMER_TRY try
  ------------------
  506|  22.5k|            node->leaf()[offset] =
  507|  22.5k|                std::forward<Fn>(fn)(std::move(node->leaf()[offset]));
  508|  22.5k|            return node;
  509|  22.5k|        }
  510|  22.5k|        IMMER_CATCH (...) {
  511|      0|            node_t::delete_leaf(node, pos.count());
  512|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  513|      0|        }
  514|  22.5k|    }
flex-vector.cpp:_ZN5immer6detail4rbts14update_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE13visit_regularIRNS1_8full_posISC_EERZZ22LLVMFuzzerTestOneInputENK3$_6clI12fuzzer_inputEEDaRT_EUlSL_E_EEPSC_OSL_mOT0_:
  484|  17.6k|    {
  485|  17.6k|        auto offset = pos.index(idx);
  486|  17.6k|        auto count  = pos.count();
  487|  17.6k|        auto node   = node_t::make_inner_n(count);
  488|  17.6k|        IMMER_TRY {
  ------------------
  |  |   49|  17.6k|#define IMMER_TRY try
  ------------------
  489|  17.6k|            auto child = pos.towards_oh_ch(this_t{}, idx, offset, count, fn);
  490|  17.6k|            node_t::do_copy_inner_replace(
  491|  17.6k|                node, pos.node(), count, offset, child);
  492|  17.6k|            return node;
  493|  17.6k|        }
  494|  17.6k|        IMMER_CATCH (...) {
  495|      0|            node_t::delete_inner(node, count);
  496|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  497|      0|        }
  498|  17.6k|    }
flex-vector.cpp:_ZN5immer6detail4rbts14update_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10visit_leafIRNS1_8leaf_posISC_EERZZ22LLVMFuzzerTestOneInputENK3$_6clI12fuzzer_inputEEDaRT_EUlSL_E_EEPSC_OSL_mOT0_:
  502|  6.08k|    {
  503|  6.08k|        auto offset = pos.index(idx);
  504|  6.08k|        auto node   = node_t::copy_leaf(pos.node(), pos.count());
  505|  6.08k|        IMMER_TRY {
  ------------------
  |  |   49|  6.08k|#define IMMER_TRY try
  ------------------
  506|  6.08k|            node->leaf()[offset] =
  507|  6.08k|                std::forward<Fn>(fn)(std::move(node->leaf()[offset]));
  508|  6.08k|            return node;
  509|  6.08k|        }
  510|  6.08k|        IMMER_CATCH (...) {
  511|      0|            node_t::delete_leaf(node, pos.count());
  512|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  513|      0|        }
  514|  6.08k|    }
flex-vector.cpp:_ZN5immer6detail4rbts14update_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE13visit_regularIRNS1_11regular_posISC_EERZZ22LLVMFuzzerTestOneInputENK3$_6clI12fuzzer_inputEEDaRT_EUlSL_E_EEPSC_OSL_mOT0_:
  484|  3.75k|    {
  485|  3.75k|        auto offset = pos.index(idx);
  486|  3.75k|        auto count  = pos.count();
  487|  3.75k|        auto node   = node_t::make_inner_n(count);
  488|  3.75k|        IMMER_TRY {
  ------------------
  |  |   49|  3.75k|#define IMMER_TRY try
  ------------------
  489|  3.75k|            auto child = pos.towards_oh_ch(this_t{}, idx, offset, count, fn);
  490|  3.75k|            node_t::do_copy_inner_replace(
  491|  3.75k|                node, pos.node(), count, offset, child);
  492|  3.75k|            return node;
  493|  3.75k|        }
  494|  3.75k|        IMMER_CATCH (...) {
  495|      0|            node_t::delete_inner(node, count);
  496|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  497|      0|        }
  498|  3.75k|    }
_ZN5immer6detail4rbts19slice_right_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb1EE13visit_relaxedIRNS1_11relaxed_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_m:
 1096|  35.8k|    {
 1097|  35.8k|        auto idx = pos.index(last);
 1098|  35.8k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (1098:13): [True: 35.8k, Folded]
  |  Branch (1098:25): [True: 27.0k, False: 8.86k]
  ------------------
 1099|  27.0k|            return pos.towards_oh(this_t{}, last, idx);
 1100|  27.0k|        } else {
 1101|  8.86k|            using std::get;
 1102|  8.86k|            auto subs = pos.towards_oh(no_collapse_t{}, last, idx);
 1103|  8.86k|            auto next = get<1>(subs);
 1104|  8.86k|            auto ts   = get<2>(subs);
 1105|  8.86k|            auto tail = get<3>(subs);
 1106|  8.86k|            IMMER_TRY {
  ------------------
  |  |   49|  8.86k|#define IMMER_TRY try
  ------------------
 1107|  8.86k|                if (next) {
  ------------------
  |  Branch (1107:21): [True: 4.98k, False: 3.87k]
  ------------------
 1108|  4.98k|                    auto count = idx + 1;
 1109|  4.98k|                    auto newn  = node_t::copy_inner_r_n(count, pos.node(), idx);
 1110|  4.98k|                    auto newr  = newn->relaxed();
 1111|  4.98k|                    newn->inner()[idx] = next;
 1112|  4.98k|                    newr->d.sizes[idx] = last + 1 - ts;
 1113|  4.98k|                    newr->d.count      = count;
 1114|  4.98k|                    assert(newr->d.sizes[idx]);
  ------------------
  |  Branch (1114:21): [True: 4.98k, False: 0]
  ------------------
 1115|  4.98k|                    return std::make_tuple(pos.shift(), newn, ts, tail);
 1116|  4.98k|                } else if (idx == 0) {
  ------------------
  |  Branch (1116:28): [True: 0, False: 3.87k]
  ------------------
 1117|      0|                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
 1118|  3.87k|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (1118:28): [True: 3.87k, Folded]
  |  Branch (1118:40): [True: 2.90k, False: 979]
  |  Branch (1118:52): [True: 2.11k, False: 789]
  ------------------
 1119|  2.11k|                    auto newn = pos.node()->inner()[0];
 1120|  2.11k|                    return std::make_tuple(
 1121|  2.11k|                        pos.shift() - B, newn->inc(), ts, tail);
 1122|  2.11k|                } else {
 1123|  1.76k|                    auto newn = node_t::copy_inner_r(pos.node(), idx);
 1124|  1.76k|                    return std::make_tuple(pos.shift(), newn, ts, tail);
 1125|  1.76k|                }
 1126|  8.86k|            }
 1127|  8.86k|            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|  8.86k|        }
 1138|  35.8k|    }
_ZN5immer6detail4rbts19slice_right_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb1EE10visit_leafIRNS1_12leaf_sub_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_m:
 1181|  1.98k|    {
 1182|  1.98k|        auto old_tail_size = pos.count();
 1183|  1.98k|        auto new_tail_size = pos.index(last) + 1;
 1184|  1.98k|        auto new_tail      = new_tail_size == old_tail_size
  ------------------
  |  Branch (1184:30): [True: 998, False: 989]
  ------------------
 1185|  1.98k|                                 ? pos.node()->inc()
 1186|  1.98k|                                 : node_t::copy_leaf(pos.node(), new_tail_size);
 1187|  1.98k|        return std::make_tuple(0, nullptr, new_tail_size, new_tail);
 1188|  1.98k|    }
_ZN5immer6detail4rbts19slice_right_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb0EE10visit_leafIRNS1_12leaf_sub_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_m:
 1181|  5.20k|    {
 1182|  5.20k|        auto old_tail_size = pos.count();
 1183|  5.20k|        auto new_tail_size = pos.index(last) + 1;
 1184|  5.20k|        auto new_tail      = new_tail_size == old_tail_size
  ------------------
  |  Branch (1184:30): [True: 2.60k, False: 2.59k]
  ------------------
 1185|  5.20k|                                 ? pos.node()->inc()
 1186|  5.20k|                                 : node_t::copy_leaf(pos.node(), new_tail_size);
 1187|  5.20k|        return std::make_tuple(0, nullptr, new_tail_size, new_tail);
 1188|  5.20k|    }
_ZN5immer6detail4rbts19slice_right_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb0EE13visit_relaxedIRNS1_11relaxed_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_m:
 1096|  11.1k|    {
 1097|  11.1k|        auto idx = pos.index(last);
 1098|  11.1k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (1098:13): [Folded, False: 11.1k]
  |  Branch (1098:25): [True: 0, False: 0]
  ------------------
 1099|      0|            return pos.towards_oh(this_t{}, last, idx);
 1100|  11.1k|        } else {
 1101|  11.1k|            using std::get;
 1102|  11.1k|            auto subs = pos.towards_oh(no_collapse_t{}, last, idx);
 1103|  11.1k|            auto next = get<1>(subs);
 1104|  11.1k|            auto ts   = get<2>(subs);
 1105|  11.1k|            auto tail = get<3>(subs);
 1106|  11.1k|            IMMER_TRY {
  ------------------
  |  |   49|  11.1k|#define IMMER_TRY try
  ------------------
 1107|  11.1k|                if (next) {
  ------------------
  |  Branch (1107:21): [True: 5.47k, False: 5.65k]
  ------------------
 1108|  5.47k|                    auto count = idx + 1;
 1109|  5.47k|                    auto newn  = node_t::copy_inner_r_n(count, pos.node(), idx);
 1110|  5.47k|                    auto newr  = newn->relaxed();
 1111|  5.47k|                    newn->inner()[idx] = next;
 1112|  5.47k|                    newr->d.sizes[idx] = last + 1 - ts;
 1113|  5.47k|                    newr->d.count      = count;
 1114|  5.47k|                    assert(newr->d.sizes[idx]);
  ------------------
  |  Branch (1114:21): [True: 5.47k, False: 0]
  ------------------
 1115|  5.47k|                    return std::make_tuple(pos.shift(), newn, ts, tail);
 1116|  5.65k|                } else if (idx == 0) {
  ------------------
  |  Branch (1116:28): [True: 2.70k, False: 2.95k]
  ------------------
 1117|  2.70k|                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
 1118|  2.95k|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (1118:28): [Folded, False: 2.95k]
  |  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|  2.95k|                } else {
 1123|  2.95k|                    auto newn = node_t::copy_inner_r(pos.node(), idx);
 1124|  2.95k|                    return std::make_tuple(pos.shift(), newn, ts, tail);
 1125|  2.95k|                }
 1126|  11.1k|            }
 1127|  11.1k|            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|  11.1k|        }
 1138|  11.1k|    }
_ZN5immer6detail4rbts19slice_right_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb0EE13visit_regularIRNS1_15regular_sub_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_m:
 1142|  3.65k|    {
 1143|  3.65k|        auto idx = pos.index(last);
 1144|  3.65k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (1144:13): [Folded, False: 3.65k]
  |  Branch (1144:25): [True: 0, False: 0]
  ------------------
 1145|      0|            return pos.towards_oh(this_t{}, last, idx);
 1146|  3.65k|        } else {
 1147|  3.65k|            using std::get;
 1148|  3.65k|            auto subs = pos.towards_oh(no_collapse_t{}, last, idx);
 1149|  3.65k|            auto next = get<1>(subs);
 1150|  3.65k|            auto ts   = get<2>(subs);
 1151|  3.65k|            auto tail = get<3>(subs);
 1152|  3.65k|            IMMER_TRY {
  ------------------
  |  |   49|  3.65k|#define IMMER_TRY try
  ------------------
 1153|  3.65k|                if (next) {
  ------------------
  |  Branch (1153:21): [True: 1.37k, False: 2.28k]
  ------------------
 1154|  1.37k|                    auto newn = node_t::copy_inner_n(idx + 1, pos.node(), idx);
 1155|  1.37k|                    newn->inner()[idx] = next;
 1156|  1.37k|                    return std::make_tuple(pos.shift(), newn, ts, tail);
 1157|  2.28k|                } else if (idx == 0) {
  ------------------
  |  Branch (1157:28): [True: 1.63k, False: 652]
  ------------------
 1158|  1.63k|                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
 1159|  1.63k|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (1159:28): [Folded, False: 652]
  |  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|    652|                } else {
 1164|    652|                    auto newn = node_t::copy_inner_n(idx, pos.node(), idx);
 1165|    652|                    return std::make_tuple(pos.shift(), newn, ts, tail);
 1166|    652|                }
 1167|  3.65k|            }
 1168|  3.65k|            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|  3.65k|        }
 1177|  3.65k|    }
_ZN5immer6detail4rbts19slice_right_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb0EE10visit_leafIRNS1_13full_leaf_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_m:
 1181|  6.41k|    {
 1182|  6.41k|        auto old_tail_size = pos.count();
 1183|  6.41k|        auto new_tail_size = pos.index(last) + 1;
 1184|  6.41k|        auto new_tail      = new_tail_size == old_tail_size
  ------------------
  |  Branch (1184:30): [True: 4.44k, False: 1.97k]
  ------------------
 1185|  6.41k|                                 ? pos.node()->inc()
 1186|  6.41k|                                 : node_t::copy_leaf(pos.node(), new_tail_size);
 1187|  6.41k|        return std::make_tuple(0, nullptr, new_tail_size, new_tail);
 1188|  6.41k|    }
_ZN5immer6detail4rbts19slice_right_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb0EE13visit_regularIRNS1_8full_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_m:
 1142|  2.80k|    {
 1143|  2.80k|        auto idx = pos.index(last);
 1144|  2.80k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (1144:13): [Folded, False: 2.80k]
  |  Branch (1144:25): [True: 0, False: 0]
  ------------------
 1145|      0|            return pos.towards_oh(this_t{}, last, idx);
 1146|  2.80k|        } else {
 1147|  2.80k|            using std::get;
 1148|  2.80k|            auto subs = pos.towards_oh(no_collapse_t{}, last, idx);
 1149|  2.80k|            auto next = get<1>(subs);
 1150|  2.80k|            auto ts   = get<2>(subs);
 1151|  2.80k|            auto tail = get<3>(subs);
 1152|  2.80k|            IMMER_TRY {
  ------------------
  |  |   49|  2.80k|#define IMMER_TRY try
  ------------------
 1153|  2.80k|                if (next) {
  ------------------
  |  Branch (1153:21): [True: 318, False: 2.48k]
  ------------------
 1154|    318|                    auto newn = node_t::copy_inner_n(idx + 1, pos.node(), idx);
 1155|    318|                    newn->inner()[idx] = next;
 1156|    318|                    return std::make_tuple(pos.shift(), newn, ts, tail);
 1157|  2.48k|                } else if (idx == 0) {
  ------------------
  |  Branch (1157:28): [True: 1.56k, False: 917]
  ------------------
 1158|  1.56k|                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
 1159|  1.56k|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (1159:28): [Folded, False: 917]
  |  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|    917|                } else {
 1164|    917|                    auto newn = node_t::copy_inner_n(idx, pos.node(), idx);
 1165|    917|                    return std::make_tuple(pos.shift(), newn, ts, tail);
 1166|    917|                }
 1167|  2.80k|            }
 1168|  2.80k|            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.80k|        }
 1177|  2.80k|    }
_ZN5immer6detail4rbts19slice_right_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb0EE10visit_leafIRNS1_8leaf_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_m:
 1181|  1.95k|    {
 1182|  1.95k|        auto old_tail_size = pos.count();
 1183|  1.95k|        auto new_tail_size = pos.index(last) + 1;
 1184|  1.95k|        auto new_tail      = new_tail_size == old_tail_size
  ------------------
  |  Branch (1184:30): [True: 1.01k, False: 943]
  ------------------
 1185|  1.95k|                                 ? pos.node()->inc()
 1186|  1.95k|                                 : node_t::copy_leaf(pos.node(), new_tail_size);
 1187|  1.95k|        return std::make_tuple(0, nullptr, new_tail_size, new_tail);
 1188|  1.95k|    }
_ZN5immer6detail4rbts19slice_right_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb0EE13visit_regularIRNS1_11regular_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_m:
 1142|  4.34k|    {
 1143|  4.34k|        auto idx = pos.index(last);
 1144|  4.34k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (1144:13): [Folded, False: 4.34k]
  |  Branch (1144:25): [True: 0, False: 0]
  ------------------
 1145|      0|            return pos.towards_oh(this_t{}, last, idx);
 1146|  4.34k|        } else {
 1147|  4.34k|            using std::get;
 1148|  4.34k|            auto subs = pos.towards_oh(no_collapse_t{}, last, idx);
 1149|  4.34k|            auto next = get<1>(subs);
 1150|  4.34k|            auto ts   = get<2>(subs);
 1151|  4.34k|            auto tail = get<3>(subs);
 1152|  4.34k|            IMMER_TRY {
  ------------------
  |  |   49|  4.34k|#define IMMER_TRY try
  ------------------
 1153|  4.34k|                if (next) {
  ------------------
  |  Branch (1153:21): [True: 811, False: 3.53k]
  ------------------
 1154|    811|                    auto newn = node_t::copy_inner_n(idx + 1, pos.node(), idx);
 1155|    811|                    newn->inner()[idx] = next;
 1156|    811|                    return std::make_tuple(pos.shift(), newn, ts, tail);
 1157|  3.53k|                } else if (idx == 0) {
  ------------------
  |  Branch (1157:28): [True: 1.80k, False: 1.73k]
  ------------------
 1158|  1.80k|                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
 1159|  1.80k|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (1159:28): [Folded, False: 1.73k]
  |  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|  1.73k|                } else {
 1164|  1.73k|                    auto newn = node_t::copy_inner_n(idx, pos.node(), idx);
 1165|  1.73k|                    return std::make_tuple(pos.shift(), newn, ts, tail);
 1166|  1.73k|                }
 1167|  4.34k|            }
 1168|  4.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|  4.34k|        }
 1177|  4.34k|    }
_ZN5immer6detail4rbts8dec_leafINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEvPT_j:
  556|  43.4k|{
  557|  43.4k|    make_leaf_sub_pos(node, n).visit(dec_visitor{});
  558|  43.4k|}
_ZN5immer6detail4rbts19slice_right_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb1EE13visit_regularIRNS1_15regular_sub_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_m:
 1142|  6.67k|    {
 1143|  6.67k|        auto idx = pos.index(last);
 1144|  6.67k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (1144:13): [True: 6.67k, Folded]
  |  Branch (1144:25): [True: 3.44k, False: 3.22k]
  ------------------
 1145|  3.44k|            return pos.towards_oh(this_t{}, last, idx);
 1146|  3.44k|        } else {
 1147|  3.22k|            using std::get;
 1148|  3.22k|            auto subs = pos.towards_oh(no_collapse_t{}, last, idx);
 1149|  3.22k|            auto next = get<1>(subs);
 1150|  3.22k|            auto ts   = get<2>(subs);
 1151|  3.22k|            auto tail = get<3>(subs);
 1152|  3.22k|            IMMER_TRY {
  ------------------
  |  |   49|  3.22k|#define IMMER_TRY try
  ------------------
 1153|  3.22k|                if (next) {
  ------------------
  |  Branch (1153:21): [True: 893, False: 2.33k]
  ------------------
 1154|    893|                    auto newn = node_t::copy_inner_n(idx + 1, pos.node(), idx);
 1155|    893|                    newn->inner()[idx] = next;
 1156|    893|                    return std::make_tuple(pos.shift(), newn, ts, tail);
 1157|  2.33k|                } else if (idx == 0) {
  ------------------
  |  Branch (1157:28): [True: 0, False: 2.33k]
  ------------------
 1158|      0|                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
 1159|  2.33k|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (1159:28): [True: 2.33k, Folded]
  |  Branch (1159:40): [True: 1.95k, False: 380]
  |  Branch (1159:52): [True: 1.53k, False: 418]
  ------------------
 1160|  1.53k|                    auto newn = pos.node()->inner()[0];
 1161|  1.53k|                    return std::make_tuple(
 1162|  1.53k|                        pos.shift() - B, newn->inc(), ts, tail);
 1163|  1.53k|                } else {
 1164|    798|                    auto newn = node_t::copy_inner_n(idx, pos.node(), idx);
 1165|    798|                    return std::make_tuple(pos.shift(), newn, ts, tail);
 1166|    798|                }
 1167|  3.22k|            }
 1168|  3.22k|            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|  3.22k|        }
 1177|  6.67k|    }
_ZN5immer6detail4rbts19slice_right_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb1EE10visit_leafIRNS1_13full_leaf_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_m:
 1181|  1.29k|    {
 1182|  1.29k|        auto old_tail_size = pos.count();
 1183|  1.29k|        auto new_tail_size = pos.index(last) + 1;
 1184|  1.29k|        auto new_tail      = new_tail_size == old_tail_size
  ------------------
  |  Branch (1184:30): [True: 521, False: 774]
  ------------------
 1185|  1.29k|                                 ? pos.node()->inc()
 1186|  1.29k|                                 : node_t::copy_leaf(pos.node(), new_tail_size);
 1187|  1.29k|        return std::make_tuple(0, nullptr, new_tail_size, new_tail);
 1188|  1.29k|    }
_ZN5immer6detail4rbts19slice_right_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb1EE13visit_regularIRNS1_8full_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_m:
 1142|  2.60k|    {
 1143|  2.60k|        auto idx = pos.index(last);
 1144|  2.60k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (1144:13): [True: 2.60k, Folded]
  |  Branch (1144:25): [True: 1.11k, False: 1.48k]
  ------------------
 1145|  1.11k|            return pos.towards_oh(this_t{}, last, idx);
 1146|  1.48k|        } else {
 1147|  1.48k|            using std::get;
 1148|  1.48k|            auto subs = pos.towards_oh(no_collapse_t{}, last, idx);
 1149|  1.48k|            auto next = get<1>(subs);
 1150|  1.48k|            auto ts   = get<2>(subs);
 1151|  1.48k|            auto tail = get<3>(subs);
 1152|  1.48k|            IMMER_TRY {
  ------------------
  |  |   49|  1.48k|#define IMMER_TRY try
  ------------------
 1153|  1.48k|                if (next) {
  ------------------
  |  Branch (1153:21): [True: 385, False: 1.10k]
  ------------------
 1154|    385|                    auto newn = node_t::copy_inner_n(idx + 1, pos.node(), idx);
 1155|    385|                    newn->inner()[idx] = next;
 1156|    385|                    return std::make_tuple(pos.shift(), newn, ts, tail);
 1157|  1.10k|                } else if (idx == 0) {
  ------------------
  |  Branch (1157:28): [True: 0, False: 1.10k]
  ------------------
 1158|      0|                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
 1159|  1.10k|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (1159:28): [True: 1.10k, Folded]
  |  Branch (1159:40): [True: 607, False: 497]
  |  Branch (1159:52): [True: 323, False: 284]
  ------------------
 1160|    323|                    auto newn = pos.node()->inner()[0];
 1161|    323|                    return std::make_tuple(
 1162|    323|                        pos.shift() - B, newn->inc(), ts, tail);
 1163|    781|                } else {
 1164|    781|                    auto newn = node_t::copy_inner_n(idx, pos.node(), idx);
 1165|    781|                    return std::make_tuple(pos.shift(), newn, ts, tail);
 1166|    781|                }
 1167|  1.48k|            }
 1168|  1.48k|            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.48k|        }
 1177|  2.60k|    }
_ZN5immer6detail4rbts19slice_right_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb1EE10visit_leafIRNS1_8leaf_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_m:
 1181|    665|    {
 1182|    665|        auto old_tail_size = pos.count();
 1183|    665|        auto new_tail_size = pos.index(last) + 1;
 1184|    665|        auto new_tail      = new_tail_size == old_tail_size
  ------------------
  |  Branch (1184:30): [True: 274, False: 391]
  ------------------
 1185|    665|                                 ? pos.node()->inc()
 1186|    665|                                 : node_t::copy_leaf(pos.node(), new_tail_size);
 1187|    665|        return std::make_tuple(0, nullptr, new_tail_size, new_tail);
 1188|    665|    }
_ZN5immer6detail4rbts18slice_left_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb1EE11visit_innerIRNS1_11relaxed_posISC_EEEENSt3__15tupleIJjPSC_EEEOT_m:
 1414|  14.9k|    {
 1415|  14.9k|        auto idx                = pos.subindex(first);
 1416|  14.9k|        auto count              = pos.count();
 1417|  14.9k|        auto left_size          = pos.size_before(idx);
 1418|  14.9k|        auto child_size         = pos.size_sbh(idx, left_size);
 1419|  14.9k|        auto dropped_size       = first;
 1420|  14.9k|        auto child_dropped_size = dropped_size - left_size;
 1421|  14.9k|        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
  ------------------
  |  Branch (1421:13): [True: 14.9k, Folded]
  |  Branch (1421:25): [True: 13.1k, False: 1.79k]
  |  Branch (1421:45): [True: 4.19k, False: 8.94k]
  ------------------
 1422|  4.19k|            return pos.towards_sub_oh(this_t{}, first, idx);
 1423|  10.7k|        } else {
 1424|  10.7k|            using std::get;
 1425|  10.7k|            auto n    = pos.node();
 1426|  10.7k|            auto newc = count - idx;
 1427|  10.7k|            auto newn = node_t::make_inner_r_n(newc);
 1428|  10.7k|            IMMER_TRY {
  ------------------
  |  |   49|  10.7k|#define IMMER_TRY try
  ------------------
 1429|  10.7k|                auto subs     = pos.towards_sub_oh(no_collapse_t{}, first, idx);
 1430|  10.7k|                auto newr     = newn->relaxed();
 1431|  10.7k|                newr->d.count = count - idx;
 1432|  10.7k|                newr->d.sizes[0] = child_size - child_dropped_size;
 1433|  10.7k|                assert(newr->d.sizes[0]);
  ------------------
  |  Branch (1433:17): [True: 10.7k, False: 0]
  ------------------
 1434|  10.7k|                pos.copy_sizes(idx + 1,
 1435|  10.7k|                               newr->d.count - 1,
 1436|  10.7k|                               newr->d.sizes[0],
 1437|  10.7k|                               newr->d.sizes + 1);
 1438|  10.7k|                assert(newr->d.sizes[newr->d.count - 1] ==
  ------------------
  |  Branch (1438:17): [True: 10.7k, False: 0]
  ------------------
 1439|  10.7k|                       pos.size() - dropped_size);
 1440|  10.7k|                newn->inner()[0] = get<1>(subs);
 1441|  10.7k|                std::copy(n->inner() + idx + 1,
 1442|  10.7k|                          n->inner() + count,
 1443|  10.7k|                          newn->inner() + 1);
 1444|  10.7k|                node_t::inc_nodes(newn->inner() + 1, newr->d.count - 1);
 1445|  10.7k|                return std::make_tuple(pos.shift(), newn);
 1446|  10.7k|            }
 1447|  10.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|  10.7k|        }
 1452|  14.9k|    }
_ZN5immer6detail4rbts18slice_left_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb0EE10visit_leafIRNS1_12leaf_sub_posISC_EEEENSt3__15tupleIJjPSC_EEEOT_m:
 1456|  8.19k|    {
 1457|  8.19k|        auto n = node_t::copy_leaf(pos.node(), pos.index(first), pos.count());
 1458|  8.19k|        return std::make_tuple(0, n);
 1459|  8.19k|    }
_ZN5immer6detail4rbts18slice_left_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb0EE11visit_innerIRNS1_11relaxed_posISC_EEEENSt3__15tupleIJjPSC_EEEOT_m:
 1414|  43.6k|    {
 1415|  43.6k|        auto idx                = pos.subindex(first);
 1416|  43.6k|        auto count              = pos.count();
 1417|  43.6k|        auto left_size          = pos.size_before(idx);
 1418|  43.6k|        auto child_size         = pos.size_sbh(idx, left_size);
 1419|  43.6k|        auto dropped_size       = first;
 1420|  43.6k|        auto child_dropped_size = dropped_size - left_size;
 1421|  43.6k|        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
  ------------------
  |  Branch (1421:13): [Folded, False: 43.6k]
  |  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|  43.6k|        } else {
 1424|  43.6k|            using std::get;
 1425|  43.6k|            auto n    = pos.node();
 1426|  43.6k|            auto newc = count - idx;
 1427|  43.6k|            auto newn = node_t::make_inner_r_n(newc);
 1428|  43.6k|            IMMER_TRY {
  ------------------
  |  |   49|  43.6k|#define IMMER_TRY try
  ------------------
 1429|  43.6k|                auto subs     = pos.towards_sub_oh(no_collapse_t{}, first, idx);
 1430|  43.6k|                auto newr     = newn->relaxed();
 1431|  43.6k|                newr->d.count = count - idx;
 1432|  43.6k|                newr->d.sizes[0] = child_size - child_dropped_size;
 1433|  43.6k|                assert(newr->d.sizes[0]);
  ------------------
  |  Branch (1433:17): [True: 43.6k, False: 0]
  ------------------
 1434|  43.6k|                pos.copy_sizes(idx + 1,
 1435|  43.6k|                               newr->d.count - 1,
 1436|  43.6k|                               newr->d.sizes[0],
 1437|  43.6k|                               newr->d.sizes + 1);
 1438|  43.6k|                assert(newr->d.sizes[newr->d.count - 1] ==
  ------------------
  |  Branch (1438:17): [True: 43.6k, False: 0]
  ------------------
 1439|  43.6k|                       pos.size() - dropped_size);
 1440|  43.6k|                newn->inner()[0] = get<1>(subs);
 1441|  43.6k|                std::copy(n->inner() + idx + 1,
 1442|  43.6k|                          n->inner() + count,
 1443|  43.6k|                          newn->inner() + 1);
 1444|  43.6k|                node_t::inc_nodes(newn->inner() + 1, newr->d.count - 1);
 1445|  43.6k|                return std::make_tuple(pos.shift(), newn);
 1446|  43.6k|            }
 1447|  43.6k|            IMMER_CATCH (...) {
 1448|      0|                node_t::delete_inner_r(newn, newc);
 1449|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1450|      0|            }
 1451|  43.6k|        }
 1452|  43.6k|    }
_ZN5immer6detail4rbts18slice_left_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb0EE11visit_innerIRNS1_15regular_sub_posISC_EEEENSt3__15tupleIJjPSC_EEEOT_m:
 1414|  2.53k|    {
 1415|  2.53k|        auto idx                = pos.subindex(first);
 1416|  2.53k|        auto count              = pos.count();
 1417|  2.53k|        auto left_size          = pos.size_before(idx);
 1418|  2.53k|        auto child_size         = pos.size_sbh(idx, left_size);
 1419|  2.53k|        auto dropped_size       = first;
 1420|  2.53k|        auto child_dropped_size = dropped_size - left_size;
 1421|  2.53k|        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
  ------------------
  |  Branch (1421:13): [Folded, False: 2.53k]
  |  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.53k|        } else {
 1424|  2.53k|            using std::get;
 1425|  2.53k|            auto n    = pos.node();
 1426|  2.53k|            auto newc = count - idx;
 1427|  2.53k|            auto newn = node_t::make_inner_r_n(newc);
 1428|  2.53k|            IMMER_TRY {
  ------------------
  |  |   49|  2.53k|#define IMMER_TRY try
  ------------------
 1429|  2.53k|                auto subs     = pos.towards_sub_oh(no_collapse_t{}, first, idx);
 1430|  2.53k|                auto newr     = newn->relaxed();
 1431|  2.53k|                newr->d.count = count - idx;
 1432|  2.53k|                newr->d.sizes[0] = child_size - child_dropped_size;
 1433|  2.53k|                assert(newr->d.sizes[0]);
  ------------------
  |  Branch (1433:17): [True: 2.53k, False: 0]
  ------------------
 1434|  2.53k|                pos.copy_sizes(idx + 1,
 1435|  2.53k|                               newr->d.count - 1,
 1436|  2.53k|                               newr->d.sizes[0],
 1437|  2.53k|                               newr->d.sizes + 1);
 1438|  2.53k|                assert(newr->d.sizes[newr->d.count - 1] ==
  ------------------
  |  Branch (1438:17): [True: 2.53k, False: 0]
  ------------------
 1439|  2.53k|                       pos.size() - dropped_size);
 1440|  2.53k|                newn->inner()[0] = get<1>(subs);
 1441|  2.53k|                std::copy(n->inner() + idx + 1,
 1442|  2.53k|                          n->inner() + count,
 1443|  2.53k|                          newn->inner() + 1);
 1444|  2.53k|                node_t::inc_nodes(newn->inner() + 1, newr->d.count - 1);
 1445|  2.53k|                return std::make_tuple(pos.shift(), newn);
 1446|  2.53k|            }
 1447|  2.53k|            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.53k|        }
 1452|  2.53k|    }
_ZN5immer6detail4rbts18slice_left_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb0EE10visit_leafIRNS1_13full_leaf_posISC_EEEENSt3__15tupleIJjPSC_EEEOT_m:
 1456|  9.34k|    {
 1457|  9.34k|        auto n = node_t::copy_leaf(pos.node(), pos.index(first), pos.count());
 1458|  9.34k|        return std::make_tuple(0, n);
 1459|  9.34k|    }
_ZN5immer6detail4rbts18slice_left_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb0EE11visit_innerIRNS1_8full_posISC_EEEENSt3__15tupleIJjPSC_EEEOT_m:
 1414|  6.02k|    {
 1415|  6.02k|        auto idx                = pos.subindex(first);
 1416|  6.02k|        auto count              = pos.count();
 1417|  6.02k|        auto left_size          = pos.size_before(idx);
 1418|  6.02k|        auto child_size         = pos.size_sbh(idx, left_size);
 1419|  6.02k|        auto dropped_size       = first;
 1420|  6.02k|        auto child_dropped_size = dropped_size - left_size;
 1421|  6.02k|        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
  ------------------
  |  Branch (1421:13): [Folded, False: 6.02k]
  |  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|  6.02k|        } else {
 1424|  6.02k|            using std::get;
 1425|  6.02k|            auto n    = pos.node();
 1426|  6.02k|            auto newc = count - idx;
 1427|  6.02k|            auto newn = node_t::make_inner_r_n(newc);
 1428|  6.02k|            IMMER_TRY {
  ------------------
  |  |   49|  6.02k|#define IMMER_TRY try
  ------------------
 1429|  6.02k|                auto subs     = pos.towards_sub_oh(no_collapse_t{}, first, idx);
 1430|  6.02k|                auto newr     = newn->relaxed();
 1431|  6.02k|                newr->d.count = count - idx;
 1432|  6.02k|                newr->d.sizes[0] = child_size - child_dropped_size;
 1433|  6.02k|                assert(newr->d.sizes[0]);
  ------------------
  |  Branch (1433:17): [True: 6.02k, False: 0]
  ------------------
 1434|  6.02k|                pos.copy_sizes(idx + 1,
 1435|  6.02k|                               newr->d.count - 1,
 1436|  6.02k|                               newr->d.sizes[0],
 1437|  6.02k|                               newr->d.sizes + 1);
 1438|  6.02k|                assert(newr->d.sizes[newr->d.count - 1] ==
  ------------------
  |  Branch (1438:17): [True: 6.02k, False: 0]
  ------------------
 1439|  6.02k|                       pos.size() - dropped_size);
 1440|  6.02k|                newn->inner()[0] = get<1>(subs);
 1441|  6.02k|                std::copy(n->inner() + idx + 1,
 1442|  6.02k|                          n->inner() + count,
 1443|  6.02k|                          newn->inner() + 1);
 1444|  6.02k|                node_t::inc_nodes(newn->inner() + 1, newr->d.count - 1);
 1445|  6.02k|                return std::make_tuple(pos.shift(), newn);
 1446|  6.02k|            }
 1447|  6.02k|            IMMER_CATCH (...) {
 1448|      0|                node_t::delete_inner_r(newn, newc);
 1449|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1450|      0|            }
 1451|  6.02k|        }
 1452|  6.02k|    }
_ZN5immer6detail4rbts18slice_left_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb1EE11visit_innerIRNS1_15regular_sub_posISC_EEEENSt3__15tupleIJjPSC_EEEOT_m:
 1414|  8.78k|    {
 1415|  8.78k|        auto idx                = pos.subindex(first);
 1416|  8.78k|        auto count              = pos.count();
 1417|  8.78k|        auto left_size          = pos.size_before(idx);
 1418|  8.78k|        auto child_size         = pos.size_sbh(idx, left_size);
 1419|  8.78k|        auto dropped_size       = first;
 1420|  8.78k|        auto child_dropped_size = dropped_size - left_size;
 1421|  8.78k|        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
  ------------------
  |  Branch (1421:13): [True: 8.78k, Folded]
  |  Branch (1421:25): [True: 6.08k, False: 2.70k]
  |  Branch (1421:45): [True: 3.24k, False: 2.83k]
  ------------------
 1422|  3.24k|            return pos.towards_sub_oh(this_t{}, first, idx);
 1423|  5.54k|        } else {
 1424|  5.54k|            using std::get;
 1425|  5.54k|            auto n    = pos.node();
 1426|  5.54k|            auto newc = count - idx;
 1427|  5.54k|            auto newn = node_t::make_inner_r_n(newc);
 1428|  5.54k|            IMMER_TRY {
  ------------------
  |  |   49|  5.54k|#define IMMER_TRY try
  ------------------
 1429|  5.54k|                auto subs     = pos.towards_sub_oh(no_collapse_t{}, first, idx);
 1430|  5.54k|                auto newr     = newn->relaxed();
 1431|  5.54k|                newr->d.count = count - idx;
 1432|  5.54k|                newr->d.sizes[0] = child_size - child_dropped_size;
 1433|  5.54k|                assert(newr->d.sizes[0]);
  ------------------
  |  Branch (1433:17): [True: 5.54k, False: 0]
  ------------------
 1434|  5.54k|                pos.copy_sizes(idx + 1,
 1435|  5.54k|                               newr->d.count - 1,
 1436|  5.54k|                               newr->d.sizes[0],
 1437|  5.54k|                               newr->d.sizes + 1);
 1438|  5.54k|                assert(newr->d.sizes[newr->d.count - 1] ==
  ------------------
  |  Branch (1438:17): [True: 5.54k, False: 0]
  ------------------
 1439|  5.54k|                       pos.size() - dropped_size);
 1440|  5.54k|                newn->inner()[0] = get<1>(subs);
 1441|  5.54k|                std::copy(n->inner() + idx + 1,
 1442|  5.54k|                          n->inner() + count,
 1443|  5.54k|                          newn->inner() + 1);
 1444|  5.54k|                node_t::inc_nodes(newn->inner() + 1, newr->d.count - 1);
 1445|  5.54k|                return std::make_tuple(pos.shift(), newn);
 1446|  5.54k|            }
 1447|  5.54k|            IMMER_CATCH (...) {
 1448|      0|                node_t::delete_inner_r(newn, newc);
 1449|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1450|      0|            }
 1451|  5.54k|        }
 1452|  8.78k|    }
_ZN5immer6detail4rbts18slice_left_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb1EE11visit_innerIRNS1_8full_posISC_EEEENSt3__15tupleIJjPSC_EEEOT_m:
 1414|  1.59k|    {
 1415|  1.59k|        auto idx                = pos.subindex(first);
 1416|  1.59k|        auto count              = pos.count();
 1417|  1.59k|        auto left_size          = pos.size_before(idx);
 1418|  1.59k|        auto child_size         = pos.size_sbh(idx, left_size);
 1419|  1.59k|        auto dropped_size       = first;
 1420|  1.59k|        auto child_dropped_size = dropped_size - left_size;
 1421|  1.59k|        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
  ------------------
  |  Branch (1421:13): [True: 1.59k, Folded]
  |  Branch (1421:25): [True: 572, False: 1.02k]
  |  Branch (1421:45): [True: 327, False: 245]
  ------------------
 1422|    327|            return pos.towards_sub_oh(this_t{}, first, idx);
 1423|  1.27k|        } else {
 1424|  1.27k|            using std::get;
 1425|  1.27k|            auto n    = pos.node();
 1426|  1.27k|            auto newc = count - idx;
 1427|  1.27k|            auto newn = node_t::make_inner_r_n(newc);
 1428|  1.27k|            IMMER_TRY {
  ------------------
  |  |   49|  1.27k|#define IMMER_TRY try
  ------------------
 1429|  1.27k|                auto subs     = pos.towards_sub_oh(no_collapse_t{}, first, idx);
 1430|  1.27k|                auto newr     = newn->relaxed();
 1431|  1.27k|                newr->d.count = count - idx;
 1432|  1.27k|                newr->d.sizes[0] = child_size - child_dropped_size;
 1433|  1.27k|                assert(newr->d.sizes[0]);
  ------------------
  |  Branch (1433:17): [True: 1.27k, False: 0]
  ------------------
 1434|  1.27k|                pos.copy_sizes(idx + 1,
 1435|  1.27k|                               newr->d.count - 1,
 1436|  1.27k|                               newr->d.sizes[0],
 1437|  1.27k|                               newr->d.sizes + 1);
 1438|  1.27k|                assert(newr->d.sizes[newr->d.count - 1] ==
  ------------------
  |  Branch (1438:17): [True: 1.27k, False: 0]
  ------------------
 1439|  1.27k|                       pos.size() - dropped_size);
 1440|  1.27k|                newn->inner()[0] = get<1>(subs);
 1441|  1.27k|                std::copy(n->inner() + idx + 1,
 1442|  1.27k|                          n->inner() + count,
 1443|  1.27k|                          newn->inner() + 1);
 1444|  1.27k|                node_t::inc_nodes(newn->inner() + 1, newr->d.count - 1);
 1445|  1.27k|                return std::make_tuple(pos.shift(), newn);
 1446|  1.27k|            }
 1447|  1.27k|            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.27k|        }
 1452|  1.59k|    }
_ZN5immer6detail4rbts12concat_treesINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_11relaxed_posIT_EEPSE_jSG_jm:
 2001|  7.64k|{
 2002|  7.64k|    return make_singleton_regular_sub_pos(ltail, ltcount)
 2003|  7.64k|        .visit(concat_trees_left_visitor<Node>{},
 2004|  7.64k|               empty_leaf_pos<Node>{},
 2005|  7.64k|               rroot,
 2006|  7.64k|               rshift,
 2007|  7.64k|               rsize)
 2008|  7.64k|        .realize();
 2009|  7.64k|}
_ZN5immer6detail4rbts25concat_trees_left_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10visit_nodeIRNS1_25singleton_regular_sub_posISC_EENS1_14empty_leaf_posISC_EEJRPSC_RjRmEEENS1_17concat_center_posISC_EEOT_OT0_DpOT1_:
 1971|  7.64k|    {
 1972|  7.64k|        return visit_maybe_relaxed_sub(
 1973|  7.64k|            args..., concat_trees_right_visitor<Node>{}, lpos, tpos);
 1974|  7.64k|    }
_ZN5immer6detail4rbts26concat_trees_right_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10visit_nodeIRNS1_11relaxed_posISC_EERNS1_25singleton_regular_sub_posISC_EERNS1_14empty_leaf_posISC_EEEENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1958|  5.37k|    {
 1959|  5.37k|        return concat_inners<Node>(lpos, tpos, rpos);
 1960|  5.37k|    }
_ZN5immer6detail4rbts13concat_innersINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEERNS1_25singleton_regular_sub_posISC_EERNS1_14empty_leaf_posISC_EERNS1_11relaxed_posISC_EEEENS1_17concat_center_posIT_EEOT0_OT1_OT2_:
 1872|  22.0k|{
 1873|  22.0k|    auto lshift = lpos.shift();
 1874|  22.0k|    auto rshift = rpos.shift();
 1875|  22.0k|    if (lshift > rshift) {
  ------------------
  |  Branch (1875:9): [True: 0, False: 22.0k]
  ------------------
 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|  22.0k|    } else if (lshift < rshift) {
  ------------------
  |  Branch (1878:16): [True: 17.0k, False: 4.98k]
  ------------------
 1879|  17.0k|        auto cpos = rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
 1880|  17.0k|        return concat_rebalance<Node>(null_sub_pos{}, cpos, rpos);
 1881|  17.0k|    } else {
 1882|  4.98k|        assert(lshift == rshift);
  ------------------
  |  Branch (1882:9): [True: 4.98k, False: 0]
  ------------------
 1883|  4.98k|        assert(Node::bits_leaf == 0u || lshift > 0);
  ------------------
  |  Branch (1883:9): [Folded, False: 4.98k]
  |  Branch (1883:9): [True: 4.98k, False: 0]
  |  Branch (1883:9): [True: 4.98k, False: 0]
  ------------------
 1884|  4.98k|        auto cpos = lpos.last_sub(concat_both_visitor<Node>{}, tpos, rpos);
 1885|  4.98k|        return concat_rebalance<Node>(lpos, cpos, rpos);
 1886|  4.98k|    }
 1887|  22.0k|}
_ZN5immer6detail4rbts17concat_center_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE8each_subINS1_34concat_rebalance_plan_fill_visitorEJRNS1_21concat_rebalance_planILj2ELj2EEEEEEvT_DpOT0_:
 1512|  5.04M|    {
 1513|  5.04M|        if (shift_ == BL) {
  ------------------
  |  Branch (1513:13): [True: 477k, False: 4.56M]
  ------------------
 1514|   477k|            auto s = size_t{};
 1515|  1.90M|            for (auto i = count_t{0}; i < count_; ++i) {
  ------------------
  |  Branch (1515:39): [True: 1.42M, False: 477k]
  ------------------
 1516|  1.42M|                make_leaf_sub_pos(nodes_[i], sizes_[i] - s).visit(v, args...);
 1517|  1.42M|                s = sizes_[i];
 1518|  1.42M|            }
 1519|  4.56M|        } else {
 1520|  11.6M|            for (auto i = count_t{0}; i < count_; ++i)
  ------------------
  |  Branch (1520:39): [True: 7.07M, False: 4.56M]
  ------------------
 1521|  7.07M|                make_relaxed_pos(nodes_[i], shift_ - B, nodes_[i]->relaxed())
 1522|  7.07M|                    .visit(v, args...);
 1523|  4.56M|        }
 1524|  5.04M|    }
_ZN5immer6detail4rbts34concat_rebalance_plan_fill_visitor10visit_nodeIRNS1_12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_21concat_rebalance_planILj2ELj2EEEEEvOT_RT0_:
 1733|  2.16M|    {
 1734|  2.16M|        auto count = p.count();
 1735|  2.16M|        assert(plan.n < Plan::max_children);
  ------------------
  |  Branch (1735:9): [True: 2.16M, False: 0]
  ------------------
 1736|  2.16M|        plan.counts[plan.n++] = count;
 1737|  2.16M|        plan.total += count;
 1738|  2.16M|    }
_ZN5immer6detail4rbts34concat_rebalance_plan_fill_visitor10visit_nodeIRNS1_11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_21concat_rebalance_planILj2ELj2EEEEEvOT_RT0_:
 1733|  18.9M|    {
 1734|  18.9M|        auto count = p.count();
 1735|  18.9M|        assert(plan.n < Plan::max_children);
  ------------------
  |  Branch (1735:9): [True: 18.9M, False: 0]
  ------------------
 1736|  18.9M|        plan.counts[plan.n++] = count;
 1737|  18.9M|        plan.total += count;
 1738|  18.9M|    }
_ZN5immer6detail4rbts21concat_rebalance_planILj2ELj2EE7shuffleEj:
 1762|  5.04M|    {
 1763|       |        // gcc seems to not really understand this code... :(
 1764|  5.04M|#if !defined(_MSC_VER)
 1765|  5.04M|#pragma GCC diagnostic push
 1766|  5.04M|#pragma GCC diagnostic ignored "-Warray-bounds"
 1767|  5.04M|#endif
 1768|  5.04M|        constexpr count_t rrb_extras    = 2;
 1769|  5.04M|        constexpr count_t rrb_invariant = 1;
 1770|  5.04M|        const auto bits                 = shift == BL ? BL : B;
  ------------------
  |  Branch (1770:43): [True: 477k, False: 4.56M]
  ------------------
 1771|  5.04M|        const auto branches             = count_t{1} << bits;
 1772|  5.04M|        const auto optimal              = ((total - 1) >> bits) + 1;
 1773|  5.04M|        count_t i                       = 0;
 1774|  5.90M|        while (n >= optimal + rrb_extras) {
  ------------------
  |  Branch (1774:16): [True: 859k, False: 5.04M]
  ------------------
 1775|       |            // skip ok nodes
 1776|  1.42M|            while (counts[i] > branches - rrb_invariant)
  ------------------
  |  Branch (1776:20): [True: 568k, False: 859k]
  ------------------
 1777|   568k|                i++;
 1778|   859k|            assert(i < n);
  ------------------
  |  Branch (1778:13): [True: 859k, False: 0]
  ------------------
 1779|       |            // short node, redistribute
 1780|   859k|            auto remaining = counts[i];
 1781|  2.09M|            do {
 1782|  2.09M|                auto next  = counts[i + 1];
 1783|  2.09M|                auto count = std::min(remaining + next, branches);
 1784|  2.09M|                counts[i]  = count;
 1785|  2.09M|                assert(counts[i]);
  ------------------
  |  Branch (1785:17): [True: 2.09M, False: 0]
  ------------------
 1786|  2.09M|                remaining += next - count;
 1787|  2.09M|                ++i;
 1788|  2.09M|            } while (remaining > 0);
  ------------------
  |  Branch (1788:22): [True: 1.23M, False: 859k]
  ------------------
 1789|       |            // remove node
 1790|   859k|            std::move(counts + i + 1, counts + n, counts + i);
 1791|   859k|            --n;
 1792|   859k|            --i;
 1793|   859k|        }
 1794|  5.04M|#if !defined(_MSC_VER)
 1795|  5.04M|#pragma GCC diagnostic pop
 1796|  5.04M|#endif
 1797|  5.04M|    }
_ZNK5immer6detail4rbts17concat_center_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5shiftEv:
 1478|  10.0M|    auto shift() const { return shift_; }
_ZN5immer6detail4rbts13concat_mergerINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEC2EjPjj:
 1577|  5.04M|        : curr_{counts}
 1578|  5.04M|        , n_{n}
 1579|  5.04M|        , result_{
 1580|  5.04M|              shift + B, node_t::make_inner_r_n(std::min(n_, branches<B>)), 0}
 1581|  5.04M|    {
 1582|  5.04M|    }
_ZN5immer6detail4rbts17concat_center_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEC2EjPSC_m:
 1481|  5.04M|        : shift_{s}
 1482|  5.04M|        , count_{1}
 1483|  5.04M|        , nodes_{n0}
 1484|  5.04M|        , sizes_{s0}
 1485|  5.04M|    {
 1486|  5.04M|    }
_ZN5immer6detail4rbts17concat_center_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE8each_subINS1_21concat_merger_visitorEJRNS1_13concat_mergerISC_EEEEEvT_DpOT0_:
 1512|  5.04M|    {
 1513|  5.04M|        if (shift_ == BL) {
  ------------------
  |  Branch (1513:13): [True: 477k, False: 4.56M]
  ------------------
 1514|   477k|            auto s = size_t{};
 1515|  1.90M|            for (auto i = count_t{0}; i < count_; ++i) {
  ------------------
  |  Branch (1515:39): [True: 1.42M, False: 477k]
  ------------------
 1516|  1.42M|                make_leaf_sub_pos(nodes_[i], sizes_[i] - s).visit(v, args...);
 1517|  1.42M|                s = sizes_[i];
 1518|  1.42M|            }
 1519|  4.56M|        } else {
 1520|  11.6M|            for (auto i = count_t{0}; i < count_; ++i)
  ------------------
  |  Branch (1520:39): [True: 7.07M, False: 4.56M]
  ------------------
 1521|  7.07M|                make_relaxed_pos(nodes_[i], shift_ - B, nodes_[i]->relaxed())
 1522|  7.07M|                    .visit(v, args...);
 1523|  4.56M|        }
 1524|  5.04M|    }
_ZN5immer6detail4rbts21concat_merger_visitor10visit_leafIRNS1_12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_13concat_mergerISE_EEEEvOT_RT0_:
 1721|  2.16M|    {
 1722|  2.16M|        merger.merge_leaf(p);
 1723|  2.16M|    }
_ZN5immer6detail4rbts13concat_mergerINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10merge_leafIRNS1_12leaf_sub_posISC_EEEEvOT_:
 1614|  2.16M|    {
 1615|  2.16M|        auto from       = p.node();
 1616|  2.16M|        auto from_size  = p.size();
 1617|  2.16M|        auto from_count = p.count();
 1618|  2.16M|        assert(from_size);
  ------------------
  |  Branch (1618:9): [True: 2.16M, False: 0]
  ------------------
 1619|  2.16M|        if (!to_ && *curr_ == from_count) {
  ------------------
  |  Branch (1619:13): [True: 2.13M, False: 27.1k]
  |  Branch (1619:21): [True: 2.11M, False: 15.8k]
  ------------------
 1620|  2.11M|            add_child(from, from_size);
 1621|  2.11M|            from->inc();
 1622|  2.11M|        } else {
 1623|  43.0k|            auto from_offset = count_t{};
 1624|  43.0k|            auto from_data   = from->leaf();
 1625|  53.3k|            do {
 1626|  53.3k|                if (!to_) {
  ------------------
  |  Branch (1626:21): [True: 26.1k, False: 27.1k]
  ------------------
 1627|  26.1k|                    to_        = node_t::make_leaf_n(*curr_);
 1628|  26.1k|                    to_offset_ = 0;
 1629|  26.1k|                }
 1630|  53.3k|                auto data = to_->leaf();
 1631|  53.3k|                auto to_copy =
 1632|  53.3k|                    std::min(from_count - from_offset, *curr_ - to_offset_);
 1633|  53.3k|                detail::uninitialized_copy(from_data + from_offset,
 1634|  53.3k|                                           from_data + from_offset + to_copy,
 1635|  53.3k|                                           data + to_offset_);
 1636|  53.3k|                to_offset_ += to_copy;
 1637|  53.3k|                from_offset += to_copy;
 1638|  53.3k|                if (*curr_ == to_offset_) {
  ------------------
  |  Branch (1638:21): [True: 26.1k, False: 27.1k]
  ------------------
 1639|  26.1k|                    add_child(to_, to_offset_);
 1640|  26.1k|                    to_ = nullptr;
 1641|  26.1k|                }
 1642|  53.3k|            } while (from_offset != from_count);
  ------------------
  |  Branch (1642:22): [True: 10.3k, False: 43.0k]
  ------------------
 1643|  43.0k|        }
 1644|  2.16M|    }
_ZN5immer6detail4rbts13concat_mergerINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE9add_childEPSC_m:
 1589|  22.4M|    {
 1590|  22.4M|        assert(size);
  ------------------
  |  Branch (1590:9): [True: 22.4M, False: 0]
  ------------------
 1591|  22.4M|        ++curr_;
 1592|  22.4M|        auto parent  = result_.nodes_[result_.count_ - 1];
 1593|  22.4M|        auto relaxed = parent->relaxed();
 1594|  22.4M|        if (relaxed->d.count == branches<B>) {
  ------------------
  |  Branch (1594:13): [True: 2.54M, False: 19.8M]
  ------------------
 1595|  2.54M|            assert(result_.count_ < result_t::max_children);
  ------------------
  |  Branch (1595:13): [True: 2.54M, False: 0]
  ------------------
 1596|  2.54M|            n_ -= branches<B>;
 1597|  2.54M|            parent  = node_t::make_inner_r_n(std::min(n_, branches<B>));
 1598|  2.54M|            relaxed = parent->relaxed();
 1599|  2.54M|            result_.nodes_[result_.count_] = parent;
 1600|  2.54M|            result_.sizes_[result_.count_] = result_.sizes_[result_.count_ - 1];
 1601|  2.54M|            assert(result_.sizes_[result_.count_]);
  ------------------
  |  Branch (1601:13): [True: 2.54M, False: 0]
  ------------------
 1602|  2.54M|            ++result_.count_;
 1603|  2.54M|        }
 1604|  22.4M|        auto idx = relaxed->d.count++;
 1605|  22.4M|        result_.sizes_[result_.count_ - 1] += size;
 1606|  22.4M|        assert(result_.sizes_[result_.count_ - 1]);
  ------------------
  |  Branch (1606:9): [True: 22.4M, False: 0]
  ------------------
 1607|  22.4M|        relaxed->d.sizes[idx] = size + (idx ? relaxed->d.sizes[idx - 1] : 0);
  ------------------
  |  Branch (1607:41): [True: 14.8M, False: 7.59M]
  ------------------
 1608|  22.4M|        assert(relaxed->d.sizes[idx]);
  ------------------
  |  Branch (1608:9): [True: 22.4M, False: 0]
  ------------------
 1609|  22.4M|        parent->inner()[idx] = p;
 1610|  22.4M|    };
_ZN5immer6detail4rbts21concat_merger_visitor11visit_innerIRNS1_11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_13concat_mergerISE_EEEEvOT_RT0_:
 1715|  18.9M|    {
 1716|  18.9M|        merger.merge_inner(p);
 1717|  18.9M|    }
_ZN5immer6detail4rbts13concat_mergerINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE11merge_innerIRNS1_11relaxed_posISC_EEEEvOT_:
 1648|  18.9M|    {
 1649|  18.9M|        auto from       = p.node();
 1650|  18.9M|        auto from_size  = p.size();
 1651|  18.9M|        auto from_count = p.count();
 1652|  18.9M|        assert(from_size);
  ------------------
  |  Branch (1652:9): [True: 18.9M, False: 0]
  ------------------
 1653|  18.9M|        if (!to_ && *curr_ == from_count) {
  ------------------
  |  Branch (1653:13): [True: 16.9M, False: 1.95M]
  |  Branch (1653:21): [True: 16.1M, False: 831k]
  ------------------
 1654|  16.1M|            add_child(from, from_size);
 1655|  16.1M|            from->inc();
 1656|  16.1M|        } else {
 1657|  2.78M|            auto from_offset = count_t{};
 1658|  2.78M|            auto from_data   = from->inner();
 1659|  3.88M|            do {
 1660|  3.88M|                if (!to_) {
  ------------------
  |  Branch (1660:21): [True: 1.93M, False: 1.95M]
  ------------------
 1661|  1.93M|                    to_        = node_t::make_inner_r_n(*curr_);
 1662|  1.93M|                    to_offset_ = 0;
 1663|  1.93M|                    to_size_   = 0;
 1664|  1.93M|                }
 1665|  3.88M|                auto data = to_->inner();
 1666|  3.88M|                auto to_copy =
 1667|  3.88M|                    std::min(from_count - from_offset, *curr_ - to_offset_);
 1668|  3.88M|                std::copy(from_data + from_offset,
 1669|  3.88M|                          from_data + from_offset + to_copy,
 1670|  3.88M|                          data + to_offset_);
 1671|  3.88M|                node_t::inc_nodes(from_data + from_offset, to_copy);
 1672|  3.88M|                auto sizes = to_->relaxed()->d.sizes;
 1673|  3.88M|                p.copy_sizes(
 1674|  3.88M|                    from_offset, to_copy, to_size_, sizes + to_offset_);
 1675|  3.88M|                to_offset_ += to_copy;
 1676|  3.88M|                from_offset += to_copy;
 1677|  3.88M|                to_size_ = sizes[to_offset_ - 1];
 1678|  3.88M|                assert(to_size_);
  ------------------
  |  Branch (1678:17): [True: 3.88M, False: 0]
  ------------------
 1679|  3.88M|                if (*curr_ == to_offset_) {
  ------------------
  |  Branch (1679:21): [True: 1.93M, False: 1.95M]
  ------------------
 1680|  1.93M|                    to_->relaxed()->d.count = to_offset_;
 1681|  1.93M|                    add_child(to_, to_size_);
 1682|  1.93M|                    to_ = nullptr;
 1683|  1.93M|                }
 1684|  3.88M|            } while (from_offset != from_count);
  ------------------
  |  Branch (1684:22): [True: 1.10M, False: 2.78M]
  ------------------
 1685|  2.78M|        }
 1686|  18.9M|    }
_ZNK5immer6detail4rbts13concat_mergerINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE6finishEv:
 1689|  5.04M|    {
 1690|  5.04M|        assert(!to_);
  ------------------
  |  Branch (1690:9): [True: 5.04M, False: 0]
  ------------------
 1691|  5.04M|        return result_;
 1692|  5.04M|    }
_ZN5immer6detail4rbts17concat_center_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE8each_subINS1_11dec_visitorEJEEEvT_DpOT0_:
 1512|  5.04M|    {
 1513|  5.04M|        if (shift_ == BL) {
  ------------------
  |  Branch (1513:13): [True: 477k, False: 4.56M]
  ------------------
 1514|   477k|            auto s = size_t{};
 1515|  1.90M|            for (auto i = count_t{0}; i < count_; ++i) {
  ------------------
  |  Branch (1515:39): [True: 1.42M, False: 477k]
  ------------------
 1516|  1.42M|                make_leaf_sub_pos(nodes_[i], sizes_[i] - s).visit(v, args...);
 1517|  1.42M|                s = sizes_[i];
 1518|  1.42M|            }
 1519|  4.56M|        } else {
 1520|  11.6M|            for (auto i = count_t{0}; i < count_; ++i)
  ------------------
  |  Branch (1520:39): [True: 7.07M, False: 4.56M]
  ------------------
 1521|  7.07M|                make_relaxed_pos(nodes_[i], shift_ - B, nodes_[i]->relaxed())
 1522|  7.07M|                    .visit(v, args...);
 1523|  4.56M|        }
 1524|  5.04M|    }
_ZN5immer6detail4rbts17concat_center_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEC2EjPSC_mSE_mSE_m:
 1503|   469k|        : shift_{s}
 1504|   469k|        , count_{3}
 1505|   469k|        , nodes_{n0, n1, n2}
 1506|   469k|        , sizes_{s0, s0 + s1, s0 + s1 + s2}
 1507|   469k|    {
 1508|   469k|    }
_ZN5immer6detail4rbts17concat_center_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEC2EjPSC_mSE_m:
 1489|  7.64k|        : shift_{s}
 1490|  7.64k|        , count_{2}
 1491|  7.64k|        , nodes_{n0, n1}
 1492|  7.64k|        , sizes_{s0, s0 + s1}
 1493|  7.64k|    {
 1494|  7.64k|    }
_ZN5immer6detail4rbts20concat_right_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE11visit_innerIRNS1_11relaxed_posISC_EERNS1_25singleton_regular_sub_posISC_EERNS1_14empty_leaf_posISC_EEEENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1917|  16.6k|    {
 1918|  16.6k|        return concat_inners<Node>(lpos, tpos, rpos);
 1919|  16.6k|    }
_ZN5immer6detail4rbts20concat_right_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE11visit_innerIRNS1_15regular_sub_posISC_EERNS1_25singleton_regular_sub_posISC_EERNS1_14empty_leaf_posISC_EEEENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1917|    396|    {
 1918|    396|        return concat_inners<Node>(lpos, tpos, rpos);
 1919|    396|    }
_ZN5immer6detail4rbts13concat_innersINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEERNS1_25singleton_regular_sub_posISC_EERNS1_14empty_leaf_posISC_EERNS1_15regular_sub_posISC_EEEENS1_17concat_center_posIT_EEOT0_OT1_OT2_:
 1872|  2.66k|{
 1873|  2.66k|    auto lshift = lpos.shift();
 1874|  2.66k|    auto rshift = rpos.shift();
 1875|  2.66k|    if (lshift > rshift) {
  ------------------
  |  Branch (1875:9): [True: 0, False: 2.66k]
  ------------------
 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|  2.66k|    } else if (lshift < rshift) {
  ------------------
  |  Branch (1878:16): [True: 652, False: 2.01k]
  ------------------
 1879|    652|        auto cpos = rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
 1880|    652|        return concat_rebalance<Node>(null_sub_pos{}, cpos, rpos);
 1881|  2.01k|    } else {
 1882|  2.01k|        assert(lshift == rshift);
  ------------------
  |  Branch (1882:9): [True: 2.01k, False: 0]
  ------------------
 1883|  2.01k|        assert(Node::bits_leaf == 0u || lshift > 0);
  ------------------
  |  Branch (1883:9): [Folded, False: 2.01k]
  |  Branch (1883:9): [True: 2.01k, False: 0]
  |  Branch (1883:9): [True: 2.01k, False: 0]
  ------------------
 1884|  2.01k|        auto cpos = lpos.last_sub(concat_both_visitor<Node>{}, tpos, rpos);
 1885|  2.01k|        return concat_rebalance<Node>(lpos, cpos, rpos);
 1886|  2.01k|    }
 1887|  2.66k|}
_ZN5immer6detail4rbts20concat_right_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE11visit_innerIRNS1_8full_posISC_EERNS1_25singleton_regular_sub_posISC_EERNS1_14empty_leaf_posISC_EEEENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1917|  1.01k|    {
 1918|  1.01k|        return concat_inners<Node>(lpos, tpos, rpos);
 1919|  1.01k|    }
_ZN5immer6detail4rbts13concat_innersINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEERNS1_25singleton_regular_sub_posISC_EERNS1_14empty_leaf_posISC_EERNS1_8full_posISC_EEEENS1_17concat_center_posIT_EEOT0_OT1_OT2_:
 1872|  1.01k|{
 1873|  1.01k|    auto lshift = lpos.shift();
 1874|  1.01k|    auto rshift = rpos.shift();
 1875|  1.01k|    if (lshift > rshift) {
  ------------------
  |  Branch (1875:9): [True: 0, False: 1.01k]
  ------------------
 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.01k|    } else if (lshift < rshift) {
  ------------------
  |  Branch (1878:16): [True: 365, False: 652]
  ------------------
 1879|    365|        auto cpos = rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
 1880|    365|        return concat_rebalance<Node>(null_sub_pos{}, cpos, rpos);
 1881|    652|    } else {
 1882|    652|        assert(lshift == rshift);
  ------------------
  |  Branch (1882:9): [True: 652, False: 0]
  ------------------
 1883|    652|        assert(Node::bits_leaf == 0u || lshift > 0);
  ------------------
  |  Branch (1883:9): [Folded, False: 652]
  |  Branch (1883:9): [True: 652, False: 0]
  |  Branch (1883:9): [True: 652, False: 0]
  ------------------
 1884|    652|        auto cpos = lpos.last_sub(concat_both_visitor<Node>{}, tpos, rpos);
 1885|    652|        return concat_rebalance<Node>(lpos, cpos, rpos);
 1886|    652|    }
 1887|  1.01k|}
_ZN5immer6detail4rbts16concat_rebalanceINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENS1_12null_sub_posERNS1_17concat_center_posISC_EERNS1_8full_posISC_EEEENSE_IT_EEOT0_OT1_OT2_:
 1823|    928|{
 1824|    928|    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
 1825|    928|    plan.fill(lpos, cpos, rpos);
 1826|    928|    plan.shuffle(cpos.shift());
 1827|    928|    IMMER_TRY {
  ------------------
  |  |   49|    928|#define IMMER_TRY try
  ------------------
 1828|    928|        return plan.merge(lpos, cpos, rpos);
 1829|    928|    }
 1830|    928|    IMMER_CATCH (...) {
 1831|      0|        cpos.each_sub(dec_visitor{});
 1832|      0|        IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1833|      0|    }
 1834|    928|}
_ZN5immer6detail4rbts21concat_rebalance_planILj2ELj2EE4fillIRNS1_12null_sub_posERNS1_17concat_center_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERNS1_8full_posISH_EEEEvOT_OT0_OT1_:
 1752|    928|    {
 1753|    928|        assert(n == 0u);
  ------------------
  |  Branch (1753:9): [True: 928, False: 0]
  ------------------
 1754|    928|        assert(total == 0u);
  ------------------
  |  Branch (1754:9): [True: 928, False: 0]
  ------------------
 1755|    928|        using visitor_t = concat_rebalance_plan_fill_visitor;
 1756|    928|        lpos.each_left_sub(visitor_t{}, *this);
 1757|    928|        cpos.each_sub(visitor_t{}, *this);
 1758|    928|        rpos.each_right_sub(visitor_t{}, *this);
 1759|    928|    }
_ZN5immer6detail4rbts34concat_rebalance_plan_fill_visitor10visit_nodeIRNS1_13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_21concat_rebalance_planILj2ELj2EEEEEvOT_RT0_:
 1733|   984k|    {
 1734|   984k|        auto count = p.count();
 1735|   984k|        assert(plan.n < Plan::max_children);
  ------------------
  |  Branch (1735:9): [True: 984k, False: 0]
  ------------------
 1736|   984k|        plan.counts[plan.n++] = count;
 1737|   984k|        plan.total += count;
 1738|   984k|    }
_ZN5immer6detail4rbts34concat_rebalance_plan_fill_visitor10visit_nodeIRNS1_8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_21concat_rebalance_planILj2ELj2EEEEEvOT_RT0_:
 1733|   582k|    {
 1734|   582k|        auto count = p.count();
 1735|   582k|        assert(plan.n < Plan::max_children);
  ------------------
  |  Branch (1735:9): [True: 582k, False: 0]
  ------------------
 1736|   582k|        plan.counts[plan.n++] = count;
 1737|   582k|        plan.total += count;
 1738|   582k|    }
_ZN5immer6detail4rbts21concat_rebalance_planILj2ELj2EE5mergeIRNS1_12null_sub_posERNS1_17concat_center_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERNS1_8full_posISH_EEEENS7_INSt3__15decayIT0_E4type6node_tEEEOT_OSP_OT1_:
 1802|    928|    {
 1803|    928|        using node_t    = node_type<CPos>;
 1804|    928|        using merger_t  = concat_merger<node_t>;
 1805|    928|        using visitor_t = concat_merger_visitor;
 1806|    928|        auto merger     = merger_t{cpos.shift(), counts, n};
 1807|    928|        IMMER_TRY {
  ------------------
  |  |   49|    928|#define IMMER_TRY try
  ------------------
 1808|    928|            lpos.each_left_sub(visitor_t{}, merger);
 1809|    928|            cpos.each_sub(visitor_t{}, merger);
 1810|    928|            rpos.each_right_sub(visitor_t{}, merger);
 1811|    928|            cpos.each_sub(dec_visitor{});
 1812|    928|            return merger.finish();
 1813|    928|        }
 1814|    928|        IMMER_CATCH (...) {
 1815|      0|            merger.abort();
 1816|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1817|      0|        }
 1818|    928|    }
_ZN5immer6detail4rbts21concat_merger_visitor10visit_leafIRNS1_13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_13concat_mergerISE_EEEEvOT_RT0_:
 1721|   984k|    {
 1722|   984k|        merger.merge_leaf(p);
 1723|   984k|    }
_ZN5immer6detail4rbts13concat_mergerINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10merge_leafIRNS1_13full_leaf_posISC_EEEEvOT_:
 1614|   984k|    {
 1615|   984k|        auto from       = p.node();
 1616|   984k|        auto from_size  = p.size();
 1617|   984k|        auto from_count = p.count();
 1618|   984k|        assert(from_size);
  ------------------
  |  Branch (1618:9): [True: 984k, False: 0]
  ------------------
 1619|   984k|        if (!to_ && *curr_ == from_count) {
  ------------------
  |  Branch (1619:13): [True: 984k, False: 0]
  |  Branch (1619:21): [True: 984k, False: 0]
  ------------------
 1620|   984k|            add_child(from, from_size);
 1621|   984k|            from->inc();
 1622|   984k|        } 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|   984k|    }
_ZN5immer6detail4rbts21concat_merger_visitor11visit_innerIRNS1_8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_13concat_mergerISE_EEEEvOT_RT0_:
 1715|   582k|    {
 1716|   582k|        merger.merge_inner(p);
 1717|   582k|    }
_ZN5immer6detail4rbts13concat_mergerINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE11merge_innerIRNS1_8full_posISC_EEEEvOT_:
 1648|   582k|    {
 1649|   582k|        auto from       = p.node();
 1650|   582k|        auto from_size  = p.size();
 1651|   582k|        auto from_count = p.count();
 1652|   582k|        assert(from_size);
  ------------------
  |  Branch (1652:9): [True: 582k, False: 0]
  ------------------
 1653|   582k|        if (!to_ && *curr_ == from_count) {
  ------------------
  |  Branch (1653:13): [True: 582k, False: 0]
  |  Branch (1653:21): [True: 582k, False: 0]
  ------------------
 1654|   582k|            add_child(from, from_size);
 1655|   582k|            from->inc();
 1656|   582k|        } 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|   582k|    }
_ZN5immer6detail4rbts19concat_both_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10visit_leafIRNS1_12leaf_sub_posISC_EERNS1_14empty_leaf_posISC_EERNS1_8full_posISC_EEEENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1944|    652|    {
 1945|    652|        return rpos.first_sub_leaf(concat_right_visitor<Node>{}, lpos, tpos);
 1946|    652|    }
_ZN5immer6detail4rbts20concat_right_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10visit_leafIRNS1_13full_leaf_posISC_EERNS1_12leaf_sub_posISC_EERNS1_14empty_leaf_posISC_EEEENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1924|  2.66k|    {
 1925|  2.66k|        return concat_leafs<Node>(lpos, tpos, rpos);
 1926|  2.66k|    }
_ZN5immer6detail4rbts12concat_leafsINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEERNS1_12leaf_sub_posISC_EERNS1_14empty_leaf_posISC_EERNS1_13full_leaf_posISC_EEEENS1_17concat_center_posIT_EEOT0_OT1_OT2_:
 1838|  2.66k|{
 1839|  2.66k|    static_assert(Node::bits >= 2, "");
 1840|  2.66k|    assert(lpos.shift() == tpos.shift());
  ------------------
  |  Branch (1840:5): [True: 2.66k, False: 0]
  ------------------
 1841|  2.66k|    assert(lpos.shift() == rpos.shift());
  ------------------
  |  Branch (1841:5): [True: 2.66k, False: 0]
  ------------------
 1842|  2.66k|    assert(lpos.shift() == 0);
  ------------------
  |  Branch (1842:5): [True: 2.66k, False: 0]
  ------------------
 1843|  2.66k|    if (tpos.count() > 0)
  ------------------
  |  Branch (1843:9): [True: 0, False: 2.66k]
  ------------------
 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|  2.66k|    else
 1854|  2.66k|        return {
 1855|  2.66k|            Node::bits_leaf,
 1856|  2.66k|            lpos.node()->inc(),
 1857|  2.66k|            lpos.count(),
 1858|  2.66k|            rpos.node()->inc(),
 1859|  2.66k|            rpos.count(),
 1860|  2.66k|        };
 1861|  2.66k|}
_ZN5immer6detail4rbts16concat_rebalanceINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEERNS1_25singleton_regular_sub_posISC_EERNS1_17concat_center_posISC_EERNS1_8full_posISC_EEEENSG_IT_EEOT0_OT1_OT2_:
 1823|    652|{
 1824|    652|    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
 1825|    652|    plan.fill(lpos, cpos, rpos);
 1826|    652|    plan.shuffle(cpos.shift());
 1827|    652|    IMMER_TRY {
  ------------------
  |  |   49|    652|#define IMMER_TRY try
  ------------------
 1828|    652|        return plan.merge(lpos, cpos, rpos);
 1829|    652|    }
 1830|    652|    IMMER_CATCH (...) {
 1831|      0|        cpos.each_sub(dec_visitor{});
 1832|      0|        IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1833|      0|    }
 1834|    652|}
_ZN5immer6detail4rbts21concat_rebalance_planILj2ELj2EE4fillIRNS1_25singleton_regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERNS1_17concat_center_posISF_EERNS1_8full_posISF_EEEEvOT_OT0_OT1_:
 1752|    652|    {
 1753|    652|        assert(n == 0u);
  ------------------
  |  Branch (1753:9): [True: 652, False: 0]
  ------------------
 1754|    652|        assert(total == 0u);
  ------------------
  |  Branch (1754:9): [True: 652, False: 0]
  ------------------
 1755|    652|        using visitor_t = concat_rebalance_plan_fill_visitor;
 1756|    652|        lpos.each_left_sub(visitor_t{}, *this);
 1757|    652|        cpos.each_sub(visitor_t{}, *this);
 1758|    652|        rpos.each_right_sub(visitor_t{}, *this);
 1759|    652|    }
_ZN5immer6detail4rbts21concat_rebalance_planILj2ELj2EE5mergeIRNS1_25singleton_regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERNS1_17concat_center_posISF_EERNS1_8full_posISF_EEEENSI_INSt3__15decayIT0_E4type6node_tEEEOT_OSQ_OT1_:
 1802|    652|    {
 1803|    652|        using node_t    = node_type<CPos>;
 1804|    652|        using merger_t  = concat_merger<node_t>;
 1805|    652|        using visitor_t = concat_merger_visitor;
 1806|    652|        auto merger     = merger_t{cpos.shift(), counts, n};
 1807|    652|        IMMER_TRY {
  ------------------
  |  |   49|    652|#define IMMER_TRY try
  ------------------
 1808|    652|            lpos.each_left_sub(visitor_t{}, merger);
 1809|    652|            cpos.each_sub(visitor_t{}, merger);
 1810|    652|            rpos.each_right_sub(visitor_t{}, merger);
 1811|    652|            cpos.each_sub(dec_visitor{});
 1812|    652|            return merger.finish();
 1813|    652|        }
 1814|    652|        IMMER_CATCH (...) {
 1815|      0|            merger.abort();
 1816|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1817|      0|        }
 1818|    652|    }
_ZN5immer6detail4rbts16concat_rebalanceINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENS1_12null_sub_posERNS1_17concat_center_posISC_EERNS1_15regular_sub_posISC_EEEENSE_IT_EEOT0_OT1_OT2_:
 1823|  1.91k|{
 1824|  1.91k|    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
 1825|  1.91k|    plan.fill(lpos, cpos, rpos);
 1826|  1.91k|    plan.shuffle(cpos.shift());
 1827|  1.91k|    IMMER_TRY {
  ------------------
  |  |   49|  1.91k|#define IMMER_TRY try
  ------------------
 1828|  1.91k|        return plan.merge(lpos, cpos, rpos);
 1829|  1.91k|    }
 1830|  1.91k|    IMMER_CATCH (...) {
 1831|      0|        cpos.each_sub(dec_visitor{});
 1832|      0|        IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1833|      0|    }
 1834|  1.91k|}
_ZN5immer6detail4rbts21concat_rebalance_planILj2ELj2EE4fillIRNS1_12null_sub_posERNS1_17concat_center_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERNS1_15regular_sub_posISH_EEEEvOT_OT0_OT1_:
 1752|  1.91k|    {
 1753|  1.91k|        assert(n == 0u);
  ------------------
  |  Branch (1753:9): [True: 1.91k, False: 0]
  ------------------
 1754|  1.91k|        assert(total == 0u);
  ------------------
  |  Branch (1754:9): [True: 1.91k, False: 0]
  ------------------
 1755|  1.91k|        using visitor_t = concat_rebalance_plan_fill_visitor;
 1756|  1.91k|        lpos.each_left_sub(visitor_t{}, *this);
 1757|  1.91k|        cpos.each_sub(visitor_t{}, *this);
 1758|  1.91k|        rpos.each_right_sub(visitor_t{}, *this);
 1759|  1.91k|    }
_ZN5immer6detail4rbts34concat_rebalance_plan_fill_visitor10visit_nodeIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_21concat_rebalance_planILj2ELj2EEEEEvOT_RT0_:
 1733|   622k|    {
 1734|   622k|        auto count = p.count();
 1735|   622k|        assert(plan.n < Plan::max_children);
  ------------------
  |  Branch (1735:9): [True: 622k, False: 0]
  ------------------
 1736|   622k|        plan.counts[plan.n++] = count;
 1737|   622k|        plan.total += count;
 1738|   622k|    }
_ZN5immer6detail4rbts21concat_rebalance_planILj2ELj2EE5mergeIRNS1_12null_sub_posERNS1_17concat_center_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERNS1_15regular_sub_posISH_EEEENS7_INSt3__15decayIT0_E4type6node_tEEEOT_OSP_OT1_:
 1802|  1.91k|    {
 1803|  1.91k|        using node_t    = node_type<CPos>;
 1804|  1.91k|        using merger_t  = concat_merger<node_t>;
 1805|  1.91k|        using visitor_t = concat_merger_visitor;
 1806|  1.91k|        auto merger     = merger_t{cpos.shift(), counts, n};
 1807|  1.91k|        IMMER_TRY {
  ------------------
  |  |   49|  1.91k|#define IMMER_TRY try
  ------------------
 1808|  1.91k|            lpos.each_left_sub(visitor_t{}, merger);
 1809|  1.91k|            cpos.each_sub(visitor_t{}, merger);
 1810|  1.91k|            rpos.each_right_sub(visitor_t{}, merger);
 1811|  1.91k|            cpos.each_sub(dec_visitor{});
 1812|  1.91k|            return merger.finish();
 1813|  1.91k|        }
 1814|  1.91k|        IMMER_CATCH (...) {
 1815|      0|            merger.abort();
 1816|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1817|      0|        }
 1818|  1.91k|    }
_ZN5immer6detail4rbts21concat_merger_visitor11visit_innerIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_13concat_mergerISE_EEEEvOT_RT0_:
 1715|   622k|    {
 1716|   622k|        merger.merge_inner(p);
 1717|   622k|    }
_ZN5immer6detail4rbts13concat_mergerINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE11merge_innerIRNS1_15regular_sub_posISC_EEEEvOT_:
 1648|   622k|    {
 1649|   622k|        auto from       = p.node();
 1650|   622k|        auto from_size  = p.size();
 1651|   622k|        auto from_count = p.count();
 1652|   622k|        assert(from_size);
  ------------------
  |  Branch (1652:9): [True: 622k, False: 0]
  ------------------
 1653|   622k|        if (!to_ && *curr_ == from_count) {
  ------------------
  |  Branch (1653:13): [True: 505k, False: 117k]
  |  Branch (1653:21): [True: 505k, False: 0]
  ------------------
 1654|   505k|            add_child(from, from_size);
 1655|   505k|            from->inc();
 1656|   505k|        } else {
 1657|   117k|            auto from_offset = count_t{};
 1658|   117k|            auto from_data   = from->inner();
 1659|   234k|            do {
 1660|   234k|                if (!to_) {
  ------------------
  |  Branch (1660:21): [True: 117k, False: 117k]
  ------------------
 1661|   117k|                    to_        = node_t::make_inner_r_n(*curr_);
 1662|   117k|                    to_offset_ = 0;
 1663|   117k|                    to_size_   = 0;
 1664|   117k|                }
 1665|   234k|                auto data = to_->inner();
 1666|   234k|                auto to_copy =
 1667|   234k|                    std::min(from_count - from_offset, *curr_ - to_offset_);
 1668|   234k|                std::copy(from_data + from_offset,
 1669|   234k|                          from_data + from_offset + to_copy,
 1670|   234k|                          data + to_offset_);
 1671|   234k|                node_t::inc_nodes(from_data + from_offset, to_copy);
 1672|   234k|                auto sizes = to_->relaxed()->d.sizes;
 1673|   234k|                p.copy_sizes(
 1674|   234k|                    from_offset, to_copy, to_size_, sizes + to_offset_);
 1675|   234k|                to_offset_ += to_copy;
 1676|   234k|                from_offset += to_copy;
 1677|   234k|                to_size_ = sizes[to_offset_ - 1];
 1678|   234k|                assert(to_size_);
  ------------------
  |  Branch (1678:17): [True: 234k, False: 0]
  ------------------
 1679|   234k|                if (*curr_ == to_offset_) {
  ------------------
  |  Branch (1679:21): [True: 117k, False: 117k]
  ------------------
 1680|   117k|                    to_->relaxed()->d.count = to_offset_;
 1681|   117k|                    add_child(to_, to_size_);
 1682|   117k|                    to_ = nullptr;
 1683|   117k|                }
 1684|   234k|            } while (from_offset != from_count);
  ------------------
  |  Branch (1684:22): [True: 117k, False: 117k]
  ------------------
 1685|   117k|        }
 1686|   622k|    }
_ZN5immer6detail4rbts19concat_both_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10visit_leafIRNS1_12leaf_sub_posISC_EERNS1_14empty_leaf_posISC_EERNS1_15regular_sub_posISC_EEEENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1944|  2.01k|    {
 1945|  2.01k|        return rpos.first_sub_leaf(concat_right_visitor<Node>{}, lpos, tpos);
 1946|  2.01k|    }
_ZN5immer6detail4rbts20concat_right_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10visit_leafIRNS1_12leaf_sub_posISC_EESH_RNS1_14empty_leaf_posISC_EEEENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1924|  4.98k|    {
 1925|  4.98k|        return concat_leafs<Node>(lpos, tpos, rpos);
 1926|  4.98k|    }
_ZN5immer6detail4rbts12concat_leafsINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEERNS1_12leaf_sub_posISC_EERNS1_14empty_leaf_posISC_EESF_EENS1_17concat_center_posIT_EEOT0_OT1_OT2_:
 1838|  4.98k|{
 1839|  4.98k|    static_assert(Node::bits >= 2, "");
 1840|  4.98k|    assert(lpos.shift() == tpos.shift());
  ------------------
  |  Branch (1840:5): [True: 4.98k, False: 0]
  ------------------
 1841|  4.98k|    assert(lpos.shift() == rpos.shift());
  ------------------
  |  Branch (1841:5): [True: 4.98k, False: 0]
  ------------------
 1842|  4.98k|    assert(lpos.shift() == 0);
  ------------------
  |  Branch (1842:5): [True: 4.98k, False: 0]
  ------------------
 1843|  4.98k|    if (tpos.count() > 0)
  ------------------
  |  Branch (1843:9): [True: 0, False: 4.98k]
  ------------------
 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|  4.98k|    else
 1854|  4.98k|        return {
 1855|  4.98k|            Node::bits_leaf,
 1856|  4.98k|            lpos.node()->inc(),
 1857|  4.98k|            lpos.count(),
 1858|  4.98k|            rpos.node()->inc(),
 1859|  4.98k|            rpos.count(),
 1860|  4.98k|        };
 1861|  4.98k|}
_ZN5immer6detail4rbts16concat_rebalanceINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEERNS1_25singleton_regular_sub_posISC_EERNS1_17concat_center_posISC_EERNS1_15regular_sub_posISC_EEEENSG_IT_EEOT0_OT1_OT2_:
 1823|  2.01k|{
 1824|  2.01k|    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
 1825|  2.01k|    plan.fill(lpos, cpos, rpos);
 1826|  2.01k|    plan.shuffle(cpos.shift());
 1827|  2.01k|    IMMER_TRY {
  ------------------
  |  |   49|  2.01k|#define IMMER_TRY try
  ------------------
 1828|  2.01k|        return plan.merge(lpos, cpos, rpos);
 1829|  2.01k|    }
 1830|  2.01k|    IMMER_CATCH (...) {
 1831|      0|        cpos.each_sub(dec_visitor{});
 1832|      0|        IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1833|      0|    }
 1834|  2.01k|}
_ZN5immer6detail4rbts21concat_rebalance_planILj2ELj2EE4fillIRNS1_25singleton_regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERNS1_17concat_center_posISF_EERNS1_15regular_sub_posISF_EEEEvOT_OT0_OT1_:
 1752|  2.01k|    {
 1753|  2.01k|        assert(n == 0u);
  ------------------
  |  Branch (1753:9): [True: 2.01k, False: 0]
  ------------------
 1754|  2.01k|        assert(total == 0u);
  ------------------
  |  Branch (1754:9): [True: 2.01k, False: 0]
  ------------------
 1755|  2.01k|        using visitor_t = concat_rebalance_plan_fill_visitor;
 1756|  2.01k|        lpos.each_left_sub(visitor_t{}, *this);
 1757|  2.01k|        cpos.each_sub(visitor_t{}, *this);
 1758|  2.01k|        rpos.each_right_sub(visitor_t{}, *this);
 1759|  2.01k|    }
_ZN5immer6detail4rbts21concat_rebalance_planILj2ELj2EE5mergeIRNS1_25singleton_regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERNS1_17concat_center_posISF_EERNS1_15regular_sub_posISF_EEEENSI_INSt3__15decayIT0_E4type6node_tEEEOT_OSQ_OT1_:
 1802|  2.01k|    {
 1803|  2.01k|        using node_t    = node_type<CPos>;
 1804|  2.01k|        using merger_t  = concat_merger<node_t>;
 1805|  2.01k|        using visitor_t = concat_merger_visitor;
 1806|  2.01k|        auto merger     = merger_t{cpos.shift(), counts, n};
 1807|  2.01k|        IMMER_TRY {
  ------------------
  |  |   49|  2.01k|#define IMMER_TRY try
  ------------------
 1808|  2.01k|            lpos.each_left_sub(visitor_t{}, merger);
 1809|  2.01k|            cpos.each_sub(visitor_t{}, merger);
 1810|  2.01k|            rpos.each_right_sub(visitor_t{}, merger);
 1811|  2.01k|            cpos.each_sub(dec_visitor{});
 1812|  2.01k|            return merger.finish();
 1813|  2.01k|        }
 1814|  2.01k|        IMMER_CATCH (...) {
 1815|      0|            merger.abort();
 1816|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1817|      0|        }
 1818|  2.01k|    }
_ZN5immer6detail4rbts16concat_rebalanceINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENS1_12null_sub_posERNS1_17concat_center_posISC_EERNS1_11relaxed_posISC_EEEENSE_IT_EEOT0_OT1_OT2_:
 1823|   110k|{
 1824|   110k|    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
 1825|   110k|    plan.fill(lpos, cpos, rpos);
 1826|   110k|    plan.shuffle(cpos.shift());
 1827|   110k|    IMMER_TRY {
  ------------------
  |  |   49|   110k|#define IMMER_TRY try
  ------------------
 1828|   110k|        return plan.merge(lpos, cpos, rpos);
 1829|   110k|    }
 1830|   110k|    IMMER_CATCH (...) {
 1831|      0|        cpos.each_sub(dec_visitor{});
 1832|      0|        IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1833|      0|    }
 1834|   110k|}
_ZN5immer6detail4rbts21concat_rebalance_planILj2ELj2EE4fillIRNS1_12null_sub_posERNS1_17concat_center_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERNS1_11relaxed_posISH_EEEEvOT_OT0_OT1_:
 1752|   110k|    {
 1753|   110k|        assert(n == 0u);
  ------------------
  |  Branch (1753:9): [True: 110k, False: 0]
  ------------------
 1754|   110k|        assert(total == 0u);
  ------------------
  |  Branch (1754:9): [True: 110k, False: 0]
  ------------------
 1755|   110k|        using visitor_t = concat_rebalance_plan_fill_visitor;
 1756|   110k|        lpos.each_left_sub(visitor_t{}, *this);
 1757|   110k|        cpos.each_sub(visitor_t{}, *this);
 1758|   110k|        rpos.each_right_sub(visitor_t{}, *this);
 1759|   110k|    }
_ZN5immer6detail4rbts21concat_rebalance_planILj2ELj2EE5mergeIRNS1_12null_sub_posERNS1_17concat_center_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERNS1_11relaxed_posISH_EEEENS7_INSt3__15decayIT0_E4type6node_tEEEOT_OSP_OT1_:
 1802|   110k|    {
 1803|   110k|        using node_t    = node_type<CPos>;
 1804|   110k|        using merger_t  = concat_merger<node_t>;
 1805|   110k|        using visitor_t = concat_merger_visitor;
 1806|   110k|        auto merger     = merger_t{cpos.shift(), counts, n};
 1807|   110k|        IMMER_TRY {
  ------------------
  |  |   49|   110k|#define IMMER_TRY try
  ------------------
 1808|   110k|            lpos.each_left_sub(visitor_t{}, merger);
 1809|   110k|            cpos.each_sub(visitor_t{}, merger);
 1810|   110k|            rpos.each_right_sub(visitor_t{}, merger);
 1811|   110k|            cpos.each_sub(dec_visitor{});
 1812|   110k|            return merger.finish();
 1813|   110k|        }
 1814|   110k|        IMMER_CATCH (...) {
 1815|      0|            merger.abort();
 1816|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1817|      0|        }
 1818|   110k|    }
_ZN5immer6detail4rbts19concat_both_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10visit_leafIRNS1_12leaf_sub_posISC_EERNS1_14empty_leaf_posISC_EERNS1_11relaxed_posISC_EEEENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1944|  4.98k|    {
 1945|  4.98k|        return rpos.first_sub_leaf(concat_right_visitor<Node>{}, lpos, tpos);
 1946|  4.98k|    }
_ZN5immer6detail4rbts16concat_rebalanceINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEERNS1_25singleton_regular_sub_posISC_EERNS1_17concat_center_posISC_EERNS1_11relaxed_posISC_EEEENSG_IT_EEOT0_OT1_OT2_:
 1823|  4.98k|{
 1824|  4.98k|    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
 1825|  4.98k|    plan.fill(lpos, cpos, rpos);
 1826|  4.98k|    plan.shuffle(cpos.shift());
 1827|  4.98k|    IMMER_TRY {
  ------------------
  |  |   49|  4.98k|#define IMMER_TRY try
  ------------------
 1828|  4.98k|        return plan.merge(lpos, cpos, rpos);
 1829|  4.98k|    }
 1830|  4.98k|    IMMER_CATCH (...) {
 1831|      0|        cpos.each_sub(dec_visitor{});
 1832|      0|        IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1833|      0|    }
 1834|  4.98k|}
_ZN5immer6detail4rbts21concat_rebalance_planILj2ELj2EE4fillIRNS1_25singleton_regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERNS1_17concat_center_posISF_EERNS1_11relaxed_posISF_EEEEvOT_OT0_OT1_:
 1752|  4.98k|    {
 1753|  4.98k|        assert(n == 0u);
  ------------------
  |  Branch (1753:9): [True: 4.98k, False: 0]
  ------------------
 1754|  4.98k|        assert(total == 0u);
  ------------------
  |  Branch (1754:9): [True: 4.98k, False: 0]
  ------------------
 1755|  4.98k|        using visitor_t = concat_rebalance_plan_fill_visitor;
 1756|  4.98k|        lpos.each_left_sub(visitor_t{}, *this);
 1757|  4.98k|        cpos.each_sub(visitor_t{}, *this);
 1758|  4.98k|        rpos.each_right_sub(visitor_t{}, *this);
 1759|  4.98k|    }
_ZN5immer6detail4rbts21concat_rebalance_planILj2ELj2EE5mergeIRNS1_25singleton_regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERNS1_17concat_center_posISF_EERNS1_11relaxed_posISF_EEEENSI_INSt3__15decayIT0_E4type6node_tEEEOT_OSQ_OT1_:
 1802|  4.98k|    {
 1803|  4.98k|        using node_t    = node_type<CPos>;
 1804|  4.98k|        using merger_t  = concat_merger<node_t>;
 1805|  4.98k|        using visitor_t = concat_merger_visitor;
 1806|  4.98k|        auto merger     = merger_t{cpos.shift(), counts, n};
 1807|  4.98k|        IMMER_TRY {
  ------------------
  |  |   49|  4.98k|#define IMMER_TRY try
  ------------------
 1808|  4.98k|            lpos.each_left_sub(visitor_t{}, merger);
 1809|  4.98k|            cpos.each_sub(visitor_t{}, merger);
 1810|  4.98k|            rpos.each_right_sub(visitor_t{}, merger);
 1811|  4.98k|            cpos.each_sub(dec_visitor{});
 1812|  4.98k|            return merger.finish();
 1813|  4.98k|        }
 1814|  4.98k|        IMMER_CATCH (...) {
 1815|      0|            merger.abort();
 1816|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1817|      0|        }
 1818|  4.98k|    }
_ZN5immer6detail4rbts26concat_trees_right_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10visit_nodeIRNS1_15regular_sub_posISC_EERNS1_25singleton_regular_sub_posISC_EERNS1_14empty_leaf_posISC_EEEENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1958|  2.27k|    {
 1959|  2.27k|        return concat_inners<Node>(lpos, tpos, rpos);
 1960|  2.27k|    }
_ZNO5immer6detail4rbts17concat_center_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE7realizeEv:
 1527|   477k|    {
 1528|   477k|        if (count_ > 1) {
  ------------------
  |  Branch (1528:13): [True: 36.6k, False: 440k]
  ------------------
 1529|  36.6k|            IMMER_TRY {
  ------------------
  |  |   49|  36.6k|#define IMMER_TRY try
  ------------------
 1530|  36.6k|                auto result = node_t::make_inner_r_n(count_);
 1531|  36.6k|                auto r      = result->relaxed();
 1532|  36.6k|                r->d.count  = count_;
 1533|  36.6k|                std::copy(nodes_, nodes_ + count_, result->inner());
 1534|  36.6k|                std::copy(sizes_, sizes_ + count_, r->d.sizes);
 1535|  36.6k|                return {result, shift_, r};
 1536|  36.6k|            }
 1537|  36.6k|            IMMER_CATCH (...) {
 1538|      0|                each_sub(dec_visitor{});
 1539|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1540|      0|            }
 1541|   440k|        } else {
 1542|   440k|            assert(shift_ >= B + BL);
  ------------------
  |  Branch (1542:13): [True: 440k, False: 0]
  ------------------
 1543|   440k|            return {nodes_[0], shift_ - B, nodes_[0]->relaxed()};
 1544|   440k|        }
 1545|   477k|    }
_ZN5immer6detail4rbts12concat_treesINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_11relaxed_posIT_EEPSE_jmSG_jSG_jm:
 1986|   469k|{
 1987|   469k|    return visit_maybe_relaxed_sub(lroot,
 1988|   469k|                                   lshift,
 1989|   469k|                                   lsize,
 1990|   469k|                                   concat_trees_left_visitor<Node>{},
 1991|   469k|                                   make_leaf_pos(ltail, ltcount),
 1992|   469k|                                   rroot,
 1993|   469k|                                   rshift,
 1994|   469k|                                   rsize)
 1995|   469k|        .realize();
 1996|   469k|}
_ZN5immer6detail4rbts25concat_trees_left_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10visit_nodeIRNS1_11relaxed_posISC_EENS1_8leaf_posISC_EEJRPSC_RjRmEEENS1_17concat_center_posISC_EEOT_OT0_DpOT1_:
 1971|   455k|    {
 1972|   455k|        return visit_maybe_relaxed_sub(
 1973|   455k|            args..., concat_trees_right_visitor<Node>{}, lpos, tpos);
 1974|   455k|    }
_ZN5immer6detail4rbts26concat_trees_right_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10visit_nodeIRNS1_11relaxed_posISC_EESH_RNS1_8leaf_posISC_EEEENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1958|   438k|    {
 1959|   438k|        return concat_inners<Node>(lpos, tpos, rpos);
 1960|   438k|    }
_ZN5immer6detail4rbts13concat_innersINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEERNS1_11relaxed_posISC_EERNS1_8leaf_posISC_EESF_EENS1_17concat_center_posIT_EEOT0_OT1_OT2_:
 1872|  4.10M|{
 1873|  4.10M|    auto lshift = lpos.shift();
 1874|  4.10M|    auto rshift = rpos.shift();
 1875|  4.10M|    if (lshift > rshift) {
  ------------------
  |  Branch (1875:9): [True: 1.99M, False: 2.11M]
  ------------------
 1876|  1.99M|        auto cpos = lpos.last_sub(concat_left_visitor<Node>{}, tpos, rpos);
 1877|  1.99M|        return concat_rebalance<Node>(lpos, cpos, null_sub_pos{});
 1878|  2.11M|    } else if (lshift < rshift) {
  ------------------
  |  Branch (1878:16): [True: 78.6k, False: 2.03M]
  ------------------
 1879|  78.6k|        auto cpos = rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
 1880|  78.6k|        return concat_rebalance<Node>(null_sub_pos{}, cpos, rpos);
 1881|  2.03M|    } else {
 1882|  2.03M|        assert(lshift == rshift);
  ------------------
  |  Branch (1882:9): [True: 2.03M, False: 0]
  ------------------
 1883|  2.03M|        assert(Node::bits_leaf == 0u || lshift > 0);
  ------------------
  |  Branch (1883:9): [Folded, False: 2.03M]
  |  Branch (1883:9): [True: 2.03M, False: 0]
  |  Branch (1883:9): [True: 2.03M, False: 0]
  ------------------
 1884|  2.03M|        auto cpos = lpos.last_sub(concat_both_visitor<Node>{}, tpos, rpos);
 1885|  2.03M|        return concat_rebalance<Node>(lpos, cpos, rpos);
 1886|  2.03M|    }
 1887|  4.10M|}
_ZN5immer6detail4rbts19concat_left_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE11visit_innerIRNS1_11relaxed_posISC_EERNS1_8leaf_posISC_EESH_EENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1897|  1.98M|    {
 1898|  1.98M|        return concat_inners<Node>(lpos, tpos, rpos);
 1899|  1.98M|    }
_ZN5immer6detail4rbts19concat_left_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE11visit_innerIRNS1_15regular_sub_posISC_EERNS1_8leaf_posISC_EERNS1_11relaxed_posISC_EEEENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1897|  5.06k|    {
 1898|  5.06k|        return concat_inners<Node>(lpos, tpos, rpos);
 1899|  5.06k|    }
_ZN5immer6detail4rbts13concat_innersINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEERNS1_15regular_sub_posISC_EERNS1_8leaf_posISC_EERNS1_11relaxed_posISC_EEEENS1_17concat_center_posIT_EEOT0_OT1_OT2_:
 1872|   609k|{
 1873|   609k|    auto lshift = lpos.shift();
 1874|   609k|    auto rshift = rpos.shift();
 1875|   609k|    if (lshift > rshift) {
  ------------------
  |  Branch (1875:9): [True: 3.06k, False: 606k]
  ------------------
 1876|  3.06k|        auto cpos = lpos.last_sub(concat_left_visitor<Node>{}, tpos, rpos);
 1877|  3.06k|        return concat_rebalance<Node>(lpos, cpos, null_sub_pos{});
 1878|   606k|    } else if (lshift < rshift) {
  ------------------
  |  Branch (1878:16): [True: 14.6k, False: 591k]
  ------------------
 1879|  14.6k|        auto cpos = rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
 1880|  14.6k|        return concat_rebalance<Node>(null_sub_pos{}, cpos, rpos);
 1881|   591k|    } else {
 1882|   591k|        assert(lshift == rshift);
  ------------------
  |  Branch (1882:9): [True: 591k, False: 0]
  ------------------
 1883|   591k|        assert(Node::bits_leaf == 0u || lshift > 0);
  ------------------
  |  Branch (1883:9): [Folded, False: 591k]
  |  Branch (1883:9): [True: 591k, False: 0]
  |  Branch (1883:9): [True: 591k, False: 0]
  ------------------
 1884|   591k|        auto cpos = lpos.last_sub(concat_both_visitor<Node>{}, tpos, rpos);
 1885|   591k|        return concat_rebalance<Node>(lpos, cpos, rpos);
 1886|   591k|    }
 1887|   609k|}
_ZN5immer6detail4rbts16concat_rebalanceINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEERNS1_15regular_sub_posISC_EERNS1_17concat_center_posISC_EENS1_12null_sub_posEEENSG_IT_EEOT0_OT1_OT2_:
 1823|  3.86k|{
 1824|  3.86k|    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
 1825|  3.86k|    plan.fill(lpos, cpos, rpos);
 1826|  3.86k|    plan.shuffle(cpos.shift());
 1827|  3.86k|    IMMER_TRY {
  ------------------
  |  |   49|  3.86k|#define IMMER_TRY try
  ------------------
 1828|  3.86k|        return plan.merge(lpos, cpos, rpos);
 1829|  3.86k|    }
 1830|  3.86k|    IMMER_CATCH (...) {
 1831|      0|        cpos.each_sub(dec_visitor{});
 1832|      0|        IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1833|      0|    }
 1834|  3.86k|}
_ZN5immer6detail4rbts21concat_rebalance_planILj2ELj2EE4fillIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERNS1_17concat_center_posISF_EERNS1_12null_sub_posEEEvOT_OT0_OT1_:
 1752|  3.86k|    {
 1753|  3.86k|        assert(n == 0u);
  ------------------
  |  Branch (1753:9): [True: 3.86k, False: 0]
  ------------------
 1754|  3.86k|        assert(total == 0u);
  ------------------
  |  Branch (1754:9): [True: 3.86k, False: 0]
  ------------------
 1755|  3.86k|        using visitor_t = concat_rebalance_plan_fill_visitor;
 1756|  3.86k|        lpos.each_left_sub(visitor_t{}, *this);
 1757|  3.86k|        cpos.each_sub(visitor_t{}, *this);
 1758|  3.86k|        rpos.each_right_sub(visitor_t{}, *this);
 1759|  3.86k|    }
_ZN5immer6detail4rbts21concat_rebalance_planILj2ELj2EE5mergeIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERNS1_17concat_center_posISF_EERNS1_12null_sub_posEEENSI_INSt3__15decayIT0_E4type6node_tEEEOT_OSP_OT1_:
 1802|  3.86k|    {
 1803|  3.86k|        using node_t    = node_type<CPos>;
 1804|  3.86k|        using merger_t  = concat_merger<node_t>;
 1805|  3.86k|        using visitor_t = concat_merger_visitor;
 1806|  3.86k|        auto merger     = merger_t{cpos.shift(), counts, n};
 1807|  3.86k|        IMMER_TRY {
  ------------------
  |  |   49|  3.86k|#define IMMER_TRY try
  ------------------
 1808|  3.86k|            lpos.each_left_sub(visitor_t{}, merger);
 1809|  3.86k|            cpos.each_sub(visitor_t{}, merger);
 1810|  3.86k|            rpos.each_right_sub(visitor_t{}, merger);
 1811|  3.86k|            cpos.each_sub(dec_visitor{});
 1812|  3.86k|            return merger.finish();
 1813|  3.86k|        }
 1814|  3.86k|        IMMER_CATCH (...) {
 1815|      0|            merger.abort();
 1816|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1817|      0|        }
 1818|  3.86k|    }
_ZN5immer6detail4rbts20concat_right_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE11visit_innerIRNS1_11relaxed_posISC_EERNS1_15regular_sub_posISC_EERNS1_8leaf_posISC_EEEENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1917|   597k|    {
 1918|   597k|        return concat_inners<Node>(lpos, tpos, rpos);
 1919|   597k|    }
_ZN5immer6detail4rbts20concat_right_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE11visit_innerIRNS1_15regular_sub_posISC_EESH_RNS1_8leaf_posISC_EEEENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1917|   107k|    {
 1918|   107k|        return concat_inners<Node>(lpos, tpos, rpos);
 1919|   107k|    }
_ZN5immer6detail4rbts13concat_innersINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEERNS1_15regular_sub_posISC_EERNS1_8leaf_posISC_EESF_EENS1_17concat_center_posIT_EEOT0_OT1_OT2_:
 1872|   115k|{
 1873|   115k|    auto lshift = lpos.shift();
 1874|   115k|    auto rshift = rpos.shift();
 1875|   115k|    if (lshift > rshift) {
  ------------------
  |  Branch (1875:9): [True: 799, False: 114k]
  ------------------
 1876|    799|        auto cpos = lpos.last_sub(concat_left_visitor<Node>{}, tpos, rpos);
 1877|    799|        return concat_rebalance<Node>(lpos, cpos, null_sub_pos{});
 1878|   114k|    } else if (lshift < rshift) {
  ------------------
  |  Branch (1878:16): [True: 563, False: 113k]
  ------------------
 1879|    563|        auto cpos = rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
 1880|    563|        return concat_rebalance<Node>(null_sub_pos{}, cpos, rpos);
 1881|   113k|    } else {
 1882|   113k|        assert(lshift == rshift);
  ------------------
  |  Branch (1882:9): [True: 113k, False: 0]
  ------------------
 1883|   113k|        assert(Node::bits_leaf == 0u || lshift > 0);
  ------------------
  |  Branch (1883:9): [Folded, False: 113k]
  |  Branch (1883:9): [True: 113k, False: 0]
  |  Branch (1883:9): [True: 113k, False: 0]
  ------------------
 1884|   113k|        auto cpos = lpos.last_sub(concat_both_visitor<Node>{}, tpos, rpos);
 1885|   113k|        return concat_rebalance<Node>(lpos, cpos, rpos);
 1886|   113k|    }
 1887|   115k|}
_ZN5immer6detail4rbts19concat_left_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE11visit_innerIRNS1_15regular_sub_posISC_EERNS1_8leaf_posISC_EESH_EENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1897|  1.27k|    {
 1898|  1.27k|        return concat_inners<Node>(lpos, tpos, rpos);
 1899|  1.27k|    }
_ZN5immer6detail4rbts20concat_right_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE11visit_innerIRNS1_8full_posISC_EERNS1_15regular_sub_posISC_EERNS1_8leaf_posISC_EEEENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1917|  98.9k|    {
 1918|  98.9k|        return concat_inners<Node>(lpos, tpos, rpos);
 1919|  98.9k|    }
_ZN5immer6detail4rbts13concat_innersINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEERNS1_15regular_sub_posISC_EERNS1_8leaf_posISC_EERNS1_8full_posISC_EEEENS1_17concat_center_posIT_EEOT0_OT1_OT2_:
 1872|  98.9k|{
 1873|  98.9k|    auto lshift = lpos.shift();
 1874|  98.9k|    auto rshift = rpos.shift();
 1875|  98.9k|    if (lshift > rshift) {
  ------------------
  |  Branch (1875:9): [True: 0, False: 98.9k]
  ------------------
 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|  98.9k|    } else if (lshift < rshift) {
  ------------------
  |  Branch (1878:16): [True: 298, False: 98.6k]
  ------------------
 1879|    298|        auto cpos = rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
 1880|    298|        return concat_rebalance<Node>(null_sub_pos{}, cpos, rpos);
 1881|  98.6k|    } else {
 1882|  98.6k|        assert(lshift == rshift);
  ------------------
  |  Branch (1882:9): [True: 98.6k, False: 0]
  ------------------
 1883|  98.6k|        assert(Node::bits_leaf == 0u || lshift > 0);
  ------------------
  |  Branch (1883:9): [Folded, False: 98.6k]
  |  Branch (1883:9): [True: 98.6k, False: 0]
  |  Branch (1883:9): [True: 98.6k, False: 0]
  ------------------
 1884|  98.6k|        auto cpos = lpos.last_sub(concat_both_visitor<Node>{}, tpos, rpos);
 1885|  98.6k|        return concat_rebalance<Node>(lpos, cpos, rpos);
 1886|  98.6k|    }
 1887|  98.9k|}
_ZN5immer6detail4rbts19concat_both_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10visit_leafIRNS1_12leaf_sub_posISC_EERNS1_8leaf_posISC_EERNS1_8full_posISC_EEEENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1944|  52.2k|    {
 1945|  52.2k|        return rpos.first_sub_leaf(concat_right_visitor<Node>{}, lpos, tpos);
 1946|  52.2k|    }
_ZN5immer6detail4rbts20concat_right_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10visit_leafIRNS1_13full_leaf_posISC_EERNS1_12leaf_sub_posISC_EERNS1_8leaf_posISC_EEEENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1924|   133k|    {
 1925|   133k|        return concat_leafs<Node>(lpos, tpos, rpos);
 1926|   133k|    }
_ZN5immer6detail4rbts12concat_leafsINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEERNS1_12leaf_sub_posISC_EERNS1_8leaf_posISC_EERNS1_13full_leaf_posISC_EEEENS1_17concat_center_posIT_EEOT0_OT1_OT2_:
 1838|   133k|{
 1839|   133k|    static_assert(Node::bits >= 2, "");
 1840|   133k|    assert(lpos.shift() == tpos.shift());
  ------------------
  |  Branch (1840:5): [True: 133k, False: 0]
  ------------------
 1841|   133k|    assert(lpos.shift() == rpos.shift());
  ------------------
  |  Branch (1841:5): [True: 133k, False: 0]
  ------------------
 1842|   133k|    assert(lpos.shift() == 0);
  ------------------
  |  Branch (1842:5): [True: 133k, False: 0]
  ------------------
 1843|   133k|    if (tpos.count() > 0)
  ------------------
  |  Branch (1843:9): [True: 133k, False: 0]
  ------------------
 1844|   133k|        return {
 1845|   133k|            Node::bits_leaf,
 1846|   133k|            lpos.node()->inc(),
 1847|   133k|            lpos.count(),
 1848|   133k|            tpos.node()->inc(),
 1849|   133k|            tpos.count(),
 1850|   133k|            rpos.node()->inc(),
 1851|   133k|            rpos.count(),
 1852|   133k|        };
 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|   133k|}
_ZN5immer6detail4rbts19concat_both_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE11visit_innerIRNS1_15regular_sub_posISC_EERNS1_8leaf_posISC_EERNS1_8full_posISC_EEEENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1937|  48.5k|    {
 1938|  48.5k|        return rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
 1939|  48.5k|    }
_ZN5immer6detail4rbts16concat_rebalanceINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEERNS1_15regular_sub_posISC_EERNS1_17concat_center_posISC_EERNS1_8full_posISC_EEEENSG_IT_EEOT0_OT1_OT2_:
 1823|  98.6k|{
 1824|  98.6k|    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
 1825|  98.6k|    plan.fill(lpos, cpos, rpos);
 1826|  98.6k|    plan.shuffle(cpos.shift());
 1827|  98.6k|    IMMER_TRY {
  ------------------
  |  |   49|  98.6k|#define IMMER_TRY try
  ------------------
 1828|  98.6k|        return plan.merge(lpos, cpos, rpos);
 1829|  98.6k|    }
 1830|  98.6k|    IMMER_CATCH (...) {
 1831|      0|        cpos.each_sub(dec_visitor{});
 1832|      0|        IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1833|      0|    }
 1834|  98.6k|}
_ZN5immer6detail4rbts21concat_rebalance_planILj2ELj2EE4fillIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERNS1_17concat_center_posISF_EERNS1_8full_posISF_EEEEvOT_OT0_OT1_:
 1752|  98.6k|    {
 1753|  98.6k|        assert(n == 0u);
  ------------------
  |  Branch (1753:9): [True: 98.6k, False: 0]
  ------------------
 1754|  98.6k|        assert(total == 0u);
  ------------------
  |  Branch (1754:9): [True: 98.6k, False: 0]
  ------------------
 1755|  98.6k|        using visitor_t = concat_rebalance_plan_fill_visitor;
 1756|  98.6k|        lpos.each_left_sub(visitor_t{}, *this);
 1757|  98.6k|        cpos.each_sub(visitor_t{}, *this);
 1758|  98.6k|        rpos.each_right_sub(visitor_t{}, *this);
 1759|  98.6k|    }
_ZN5immer6detail4rbts21concat_rebalance_planILj2ELj2EE5mergeIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERNS1_17concat_center_posISF_EERNS1_8full_posISF_EEEENSI_INSt3__15decayIT0_E4type6node_tEEEOT_OSQ_OT1_:
 1802|  98.6k|    {
 1803|  98.6k|        using node_t    = node_type<CPos>;
 1804|  98.6k|        using merger_t  = concat_merger<node_t>;
 1805|  98.6k|        using visitor_t = concat_merger_visitor;
 1806|  98.6k|        auto merger     = merger_t{cpos.shift(), counts, n};
 1807|  98.6k|        IMMER_TRY {
  ------------------
  |  |   49|  98.6k|#define IMMER_TRY try
  ------------------
 1808|  98.6k|            lpos.each_left_sub(visitor_t{}, merger);
 1809|  98.6k|            cpos.each_sub(visitor_t{}, merger);
 1810|  98.6k|            rpos.each_right_sub(visitor_t{}, merger);
 1811|  98.6k|            cpos.each_sub(dec_visitor{});
 1812|  98.6k|            return merger.finish();
 1813|  98.6k|        }
 1814|  98.6k|        IMMER_CATCH (...) {
 1815|      0|            merger.abort();
 1816|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1817|      0|        }
 1818|  98.6k|    }
_ZN5immer6detail4rbts19concat_both_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10visit_leafIRNS1_12leaf_sub_posISC_EERNS1_8leaf_posISC_EERNS1_15regular_sub_posISC_EEEENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1944|  80.9k|    {
 1945|  80.9k|        return rpos.first_sub_leaf(concat_right_visitor<Node>{}, lpos, tpos);
 1946|  80.9k|    }
_ZN5immer6detail4rbts20concat_right_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10visit_leafIRNS1_12leaf_sub_posISC_EESH_RNS1_8leaf_posISC_EEEENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1924|   336k|    {
 1925|   336k|        return concat_leafs<Node>(lpos, tpos, rpos);
 1926|   336k|    }
_ZN5immer6detail4rbts12concat_leafsINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEERNS1_12leaf_sub_posISC_EERNS1_8leaf_posISC_EESF_EENS1_17concat_center_posIT_EEOT0_OT1_OT2_:
 1838|   336k|{
 1839|   336k|    static_assert(Node::bits >= 2, "");
 1840|   336k|    assert(lpos.shift() == tpos.shift());
  ------------------
  |  Branch (1840:5): [True: 336k, False: 0]
  ------------------
 1841|   336k|    assert(lpos.shift() == rpos.shift());
  ------------------
  |  Branch (1841:5): [True: 336k, False: 0]
  ------------------
 1842|   336k|    assert(lpos.shift() == 0);
  ------------------
  |  Branch (1842:5): [True: 336k, False: 0]
  ------------------
 1843|   336k|    if (tpos.count() > 0)
  ------------------
  |  Branch (1843:9): [True: 336k, False: 0]
  ------------------
 1844|   336k|        return {
 1845|   336k|            Node::bits_leaf,
 1846|   336k|            lpos.node()->inc(),
 1847|   336k|            lpos.count(),
 1848|   336k|            tpos.node()->inc(),
 1849|   336k|            tpos.count(),
 1850|   336k|            rpos.node()->inc(),
 1851|   336k|            rpos.count(),
 1852|   336k|        };
 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|   336k|}
_ZN5immer6detail4rbts19concat_both_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE11visit_innerIRNS1_15regular_sub_posISC_EERNS1_8leaf_posISC_EESH_EENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1937|  49.5k|    {
 1938|  49.5k|        return rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
 1939|  49.5k|    }
_ZN5immer6detail4rbts16concat_rebalanceINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEERNS1_15regular_sub_posISC_EERNS1_17concat_center_posISC_EESF_EENSG_IT_EEOT0_OT1_OT2_:
 1823|   113k|{
 1824|   113k|    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
 1825|   113k|    plan.fill(lpos, cpos, rpos);
 1826|   113k|    plan.shuffle(cpos.shift());
 1827|   113k|    IMMER_TRY {
  ------------------
  |  |   49|   113k|#define IMMER_TRY try
  ------------------
 1828|   113k|        return plan.merge(lpos, cpos, rpos);
 1829|   113k|    }
 1830|   113k|    IMMER_CATCH (...) {
 1831|      0|        cpos.each_sub(dec_visitor{});
 1832|      0|        IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1833|      0|    }
 1834|   113k|}
_ZN5immer6detail4rbts21concat_rebalance_planILj2ELj2EE4fillIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERNS1_17concat_center_posISF_EESH_EEvOT_OT0_OT1_:
 1752|   113k|    {
 1753|   113k|        assert(n == 0u);
  ------------------
  |  Branch (1753:9): [True: 113k, False: 0]
  ------------------
 1754|   113k|        assert(total == 0u);
  ------------------
  |  Branch (1754:9): [True: 113k, False: 0]
  ------------------
 1755|   113k|        using visitor_t = concat_rebalance_plan_fill_visitor;
 1756|   113k|        lpos.each_left_sub(visitor_t{}, *this);
 1757|   113k|        cpos.each_sub(visitor_t{}, *this);
 1758|   113k|        rpos.each_right_sub(visitor_t{}, *this);
 1759|   113k|    }
_ZN5immer6detail4rbts21concat_rebalance_planILj2ELj2EE5mergeIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERNS1_17concat_center_posISF_EESH_EENSI_INSt3__15decayIT0_E4type6node_tEEEOT_OSN_OT1_:
 1802|   113k|    {
 1803|   113k|        using node_t    = node_type<CPos>;
 1804|   113k|        using merger_t  = concat_merger<node_t>;
 1805|   113k|        using visitor_t = concat_merger_visitor;
 1806|   113k|        auto merger     = merger_t{cpos.shift(), counts, n};
 1807|   113k|        IMMER_TRY {
  ------------------
  |  |   49|   113k|#define IMMER_TRY try
  ------------------
 1808|   113k|            lpos.each_left_sub(visitor_t{}, merger);
 1809|   113k|            cpos.each_sub(visitor_t{}, merger);
 1810|   113k|            rpos.each_right_sub(visitor_t{}, merger);
 1811|   113k|            cpos.each_sub(dec_visitor{});
 1812|   113k|            return merger.finish();
 1813|   113k|        }
 1814|   113k|        IMMER_CATCH (...) {
 1815|      0|            merger.abort();
 1816|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1817|      0|        }
 1818|   113k|    }
_ZN5immer6detail4rbts19concat_both_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10visit_leafIRNS1_12leaf_sub_posISC_EERNS1_8leaf_posISC_EERNS1_11relaxed_posISC_EEEENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1944|   336k|    {
 1945|   336k|        return rpos.first_sub_leaf(concat_right_visitor<Node>{}, lpos, tpos);
 1946|   336k|    }
_ZN5immer6detail4rbts19concat_both_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE11visit_innerIRNS1_15regular_sub_posISC_EERNS1_8leaf_posISC_EERNS1_11relaxed_posISC_EEEENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1937|   689k|    {
 1938|   689k|        return rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
 1939|   689k|    }
_ZN5immer6detail4rbts16concat_rebalanceINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEERNS1_15regular_sub_posISC_EERNS1_17concat_center_posISC_EERNS1_11relaxed_posISC_EEEENSG_IT_EEOT0_OT1_OT2_:
 1823|   591k|{
 1824|   591k|    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
 1825|   591k|    plan.fill(lpos, cpos, rpos);
 1826|   591k|    plan.shuffle(cpos.shift());
 1827|   591k|    IMMER_TRY {
  ------------------
  |  |   49|   591k|#define IMMER_TRY try
  ------------------
 1828|   591k|        return plan.merge(lpos, cpos, rpos);
 1829|   591k|    }
 1830|   591k|    IMMER_CATCH (...) {
 1831|      0|        cpos.each_sub(dec_visitor{});
 1832|      0|        IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1833|      0|    }
 1834|   591k|}
_ZN5immer6detail4rbts21concat_rebalance_planILj2ELj2EE4fillIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERNS1_17concat_center_posISF_EERNS1_11relaxed_posISF_EEEEvOT_OT0_OT1_:
 1752|   591k|    {
 1753|   591k|        assert(n == 0u);
  ------------------
  |  Branch (1753:9): [True: 591k, False: 0]
  ------------------
 1754|   591k|        assert(total == 0u);
  ------------------
  |  Branch (1754:9): [True: 591k, False: 0]
  ------------------
 1755|   591k|        using visitor_t = concat_rebalance_plan_fill_visitor;
 1756|   591k|        lpos.each_left_sub(visitor_t{}, *this);
 1757|   591k|        cpos.each_sub(visitor_t{}, *this);
 1758|   591k|        rpos.each_right_sub(visitor_t{}, *this);
 1759|   591k|    }
_ZN5immer6detail4rbts21concat_rebalance_planILj2ELj2EE5mergeIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERNS1_17concat_center_posISF_EERNS1_11relaxed_posISF_EEEENSI_INSt3__15decayIT0_E4type6node_tEEEOT_OSQ_OT1_:
 1802|   591k|    {
 1803|   591k|        using node_t    = node_type<CPos>;
 1804|   591k|        using merger_t  = concat_merger<node_t>;
 1805|   591k|        using visitor_t = concat_merger_visitor;
 1806|   591k|        auto merger     = merger_t{cpos.shift(), counts, n};
 1807|   591k|        IMMER_TRY {
  ------------------
  |  |   49|   591k|#define IMMER_TRY try
  ------------------
 1808|   591k|            lpos.each_left_sub(visitor_t{}, merger);
 1809|   591k|            cpos.each_sub(visitor_t{}, merger);
 1810|   591k|            rpos.each_right_sub(visitor_t{}, merger);
 1811|   591k|            cpos.each_sub(dec_visitor{});
 1812|   591k|            return merger.finish();
 1813|   591k|        }
 1814|   591k|        IMMER_CATCH (...) {
 1815|      0|            merger.abort();
 1816|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1817|      0|        }
 1818|   591k|    }
_ZN5immer6detail4rbts16concat_rebalanceINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEERNS1_11relaxed_posISC_EERNS1_17concat_center_posISC_EENS1_12null_sub_posEEENSG_IT_EEOT0_OT1_OT2_:
 1823|  2.06M|{
 1824|  2.06M|    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
 1825|  2.06M|    plan.fill(lpos, cpos, rpos);
 1826|  2.06M|    plan.shuffle(cpos.shift());
 1827|  2.06M|    IMMER_TRY {
  ------------------
  |  |   49|  2.06M|#define IMMER_TRY try
  ------------------
 1828|  2.06M|        return plan.merge(lpos, cpos, rpos);
 1829|  2.06M|    }
 1830|  2.06M|    IMMER_CATCH (...) {
 1831|      0|        cpos.each_sub(dec_visitor{});
 1832|      0|        IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1833|      0|    }
 1834|  2.06M|}
_ZN5immer6detail4rbts21concat_rebalance_planILj2ELj2EE4fillIRNS1_11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERNS1_17concat_center_posISF_EERNS1_12null_sub_posEEEvOT_OT0_OT1_:
 1752|  2.06M|    {
 1753|  2.06M|        assert(n == 0u);
  ------------------
  |  Branch (1753:9): [True: 2.06M, False: 0]
  ------------------
 1754|  2.06M|        assert(total == 0u);
  ------------------
  |  Branch (1754:9): [True: 2.06M, False: 0]
  ------------------
 1755|  2.06M|        using visitor_t = concat_rebalance_plan_fill_visitor;
 1756|  2.06M|        lpos.each_left_sub(visitor_t{}, *this);
 1757|  2.06M|        cpos.each_sub(visitor_t{}, *this);
 1758|  2.06M|        rpos.each_right_sub(visitor_t{}, *this);
 1759|  2.06M|    }
_ZN5immer6detail4rbts21concat_rebalance_planILj2ELj2EE5mergeIRNS1_11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERNS1_17concat_center_posISF_EERNS1_12null_sub_posEEENSI_INSt3__15decayIT0_E4type6node_tEEEOT_OSP_OT1_:
 1802|  2.06M|    {
 1803|  2.06M|        using node_t    = node_type<CPos>;
 1804|  2.06M|        using merger_t  = concat_merger<node_t>;
 1805|  2.06M|        using visitor_t = concat_merger_visitor;
 1806|  2.06M|        auto merger     = merger_t{cpos.shift(), counts, n};
 1807|  2.06M|        IMMER_TRY {
  ------------------
  |  |   49|  2.06M|#define IMMER_TRY try
  ------------------
 1808|  2.06M|            lpos.each_left_sub(visitor_t{}, merger);
 1809|  2.06M|            cpos.each_sub(visitor_t{}, merger);
 1810|  2.06M|            rpos.each_right_sub(visitor_t{}, merger);
 1811|  2.06M|            cpos.each_sub(dec_visitor{});
 1812|  2.06M|            return merger.finish();
 1813|  2.06M|        }
 1814|  2.06M|        IMMER_CATCH (...) {
 1815|      0|            merger.abort();
 1816|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1817|      0|        }
 1818|  2.06M|    }
_ZN5immer6detail4rbts20concat_right_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE11visit_innerIRNS1_11relaxed_posISC_EESH_RNS1_8leaf_posISC_EEEENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1917|  1.67M|    {
 1918|  1.67M|        return concat_inners<Node>(lpos, tpos, rpos);
 1919|  1.67M|    }
_ZN5immer6detail4rbts20concat_right_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE11visit_innerIRNS1_15regular_sub_posISC_EERNS1_11relaxed_posISC_EERNS1_8leaf_posISC_EEEENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1917|  2.21k|    {
 1918|  2.21k|        return concat_inners<Node>(lpos, tpos, rpos);
 1919|  2.21k|    }
_ZN5immer6detail4rbts13concat_innersINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEERNS1_11relaxed_posISC_EERNS1_8leaf_posISC_EERNS1_15regular_sub_posISC_EEEENS1_17concat_center_posIT_EEOT0_OT1_OT2_:
 1872|  89.0k|{
 1873|  89.0k|    auto lshift = lpos.shift();
 1874|  89.0k|    auto rshift = rpos.shift();
 1875|  89.0k|    if (lshift > rshift) {
  ------------------
  |  Branch (1875:9): [True: 70.3k, False: 18.7k]
  ------------------
 1876|  70.3k|        auto cpos = lpos.last_sub(concat_left_visitor<Node>{}, tpos, rpos);
 1877|  70.3k|        return concat_rebalance<Node>(lpos, cpos, null_sub_pos{});
 1878|  70.3k|    } else if (lshift < rshift) {
  ------------------
  |  Branch (1878:16): [True: 696, False: 18.0k]
  ------------------
 1879|    696|        auto cpos = rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
 1880|    696|        return concat_rebalance<Node>(null_sub_pos{}, cpos, rpos);
 1881|  18.0k|    } else {
 1882|  18.0k|        assert(lshift == rshift);
  ------------------
  |  Branch (1882:9): [True: 18.0k, False: 0]
  ------------------
 1883|  18.0k|        assert(Node::bits_leaf == 0u || lshift > 0);
  ------------------
  |  Branch (1883:9): [Folded, False: 18.0k]
  |  Branch (1883:9): [True: 18.0k, False: 0]
  |  Branch (1883:9): [True: 18.0k, False: 0]
  ------------------
 1884|  18.0k|        auto cpos = lpos.last_sub(concat_both_visitor<Node>{}, tpos, rpos);
 1885|  18.0k|        return concat_rebalance<Node>(lpos, cpos, rpos);
 1886|  18.0k|    }
 1887|  89.0k|}
_ZN5immer6detail4rbts19concat_left_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE11visit_innerIRNS1_11relaxed_posISC_EERNS1_8leaf_posISC_EERNS1_15regular_sub_posISC_EEEENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1897|  69.8k|    {
 1898|  69.8k|        return concat_inners<Node>(lpos, tpos, rpos);
 1899|  69.8k|    }
_ZN5immer6detail4rbts20concat_right_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE11visit_innerIRNS1_8full_posISC_EERNS1_11relaxed_posISC_EERNS1_8leaf_posISC_EEEENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1917|  4.07k|    {
 1918|  4.07k|        return concat_inners<Node>(lpos, tpos, rpos);
 1919|  4.07k|    }
_ZN5immer6detail4rbts13concat_innersINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEERNS1_11relaxed_posISC_EERNS1_8leaf_posISC_EERNS1_8full_posISC_EEEENS1_17concat_center_posIT_EEOT0_OT1_OT2_:
 1872|  4.07k|{
 1873|  4.07k|    auto lshift = lpos.shift();
 1874|  4.07k|    auto rshift = rpos.shift();
 1875|  4.07k|    if (lshift > rshift) {
  ------------------
  |  Branch (1875:9): [True: 0, False: 4.07k]
  ------------------
 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.07k|    } else if (lshift < rshift) {
  ------------------
  |  Branch (1878:16): [True: 265, False: 3.81k]
  ------------------
 1879|    265|        auto cpos = rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
 1880|    265|        return concat_rebalance<Node>(null_sub_pos{}, cpos, rpos);
 1881|  3.81k|    } else {
 1882|  3.81k|        assert(lshift == rshift);
  ------------------
  |  Branch (1882:9): [True: 3.81k, False: 0]
  ------------------
 1883|  3.81k|        assert(Node::bits_leaf == 0u || lshift > 0);
  ------------------
  |  Branch (1883:9): [Folded, False: 3.81k]
  |  Branch (1883:9): [True: 3.81k, False: 0]
  |  Branch (1883:9): [True: 3.81k, False: 0]
  ------------------
 1884|  3.81k|        auto cpos = lpos.last_sub(concat_both_visitor<Node>{}, tpos, rpos);
 1885|  3.81k|        return concat_rebalance<Node>(lpos, cpos, rpos);
 1886|  3.81k|    }
 1887|  4.07k|}
_ZN5immer6detail4rbts19concat_both_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE11visit_innerIRNS1_11relaxed_posISC_EERNS1_8leaf_posISC_EERNS1_8full_posISC_EEEENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1937|  1.68k|    {
 1938|  1.68k|        return rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
 1939|  1.68k|    }
_ZN5immer6detail4rbts16concat_rebalanceINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEERNS1_11relaxed_posISC_EERNS1_17concat_center_posISC_EERNS1_8full_posISC_EEEENSG_IT_EEOT0_OT1_OT2_:
 1823|  3.81k|{
 1824|  3.81k|    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
 1825|  3.81k|    plan.fill(lpos, cpos, rpos);
 1826|  3.81k|    plan.shuffle(cpos.shift());
 1827|  3.81k|    IMMER_TRY {
  ------------------
  |  |   49|  3.81k|#define IMMER_TRY try
  ------------------
 1828|  3.81k|        return plan.merge(lpos, cpos, rpos);
 1829|  3.81k|    }
 1830|  3.81k|    IMMER_CATCH (...) {
 1831|      0|        cpos.each_sub(dec_visitor{});
 1832|      0|        IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1833|      0|    }
 1834|  3.81k|}
_ZN5immer6detail4rbts21concat_rebalance_planILj2ELj2EE4fillIRNS1_11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERNS1_17concat_center_posISF_EERNS1_8full_posISF_EEEEvOT_OT0_OT1_:
 1752|  3.81k|    {
 1753|  3.81k|        assert(n == 0u);
  ------------------
  |  Branch (1753:9): [True: 3.81k, False: 0]
  ------------------
 1754|  3.81k|        assert(total == 0u);
  ------------------
  |  Branch (1754:9): [True: 3.81k, False: 0]
  ------------------
 1755|  3.81k|        using visitor_t = concat_rebalance_plan_fill_visitor;
 1756|  3.81k|        lpos.each_left_sub(visitor_t{}, *this);
 1757|  3.81k|        cpos.each_sub(visitor_t{}, *this);
 1758|  3.81k|        rpos.each_right_sub(visitor_t{}, *this);
 1759|  3.81k|    }
_ZN5immer6detail4rbts21concat_rebalance_planILj2ELj2EE5mergeIRNS1_11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERNS1_17concat_center_posISF_EERNS1_8full_posISF_EEEENSI_INSt3__15decayIT0_E4type6node_tEEEOT_OSQ_OT1_:
 1802|  3.81k|    {
 1803|  3.81k|        using node_t    = node_type<CPos>;
 1804|  3.81k|        using merger_t  = concat_merger<node_t>;
 1805|  3.81k|        using visitor_t = concat_merger_visitor;
 1806|  3.81k|        auto merger     = merger_t{cpos.shift(), counts, n};
 1807|  3.81k|        IMMER_TRY {
  ------------------
  |  |   49|  3.81k|#define IMMER_TRY try
  ------------------
 1808|  3.81k|            lpos.each_left_sub(visitor_t{}, merger);
 1809|  3.81k|            cpos.each_sub(visitor_t{}, merger);
 1810|  3.81k|            rpos.each_right_sub(visitor_t{}, merger);
 1811|  3.81k|            cpos.each_sub(dec_visitor{});
 1812|  3.81k|            return merger.finish();
 1813|  3.81k|        }
 1814|  3.81k|        IMMER_CATCH (...) {
 1815|      0|            merger.abort();
 1816|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1817|      0|        }
 1818|  3.81k|    }
_ZN5immer6detail4rbts19concat_both_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE11visit_innerIRNS1_11relaxed_posISC_EERNS1_8leaf_posISC_EERNS1_15regular_sub_posISC_EEEENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1937|  1.43k|    {
 1938|  1.43k|        return rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
 1939|  1.43k|    }
_ZN5immer6detail4rbts16concat_rebalanceINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEERNS1_11relaxed_posISC_EERNS1_17concat_center_posISC_EERNS1_15regular_sub_posISC_EEEENSG_IT_EEOT0_OT1_OT2_:
 1823|  18.0k|{
 1824|  18.0k|    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
 1825|  18.0k|    plan.fill(lpos, cpos, rpos);
 1826|  18.0k|    plan.shuffle(cpos.shift());
 1827|  18.0k|    IMMER_TRY {
  ------------------
  |  |   49|  18.0k|#define IMMER_TRY try
  ------------------
 1828|  18.0k|        return plan.merge(lpos, cpos, rpos);
 1829|  18.0k|    }
 1830|  18.0k|    IMMER_CATCH (...) {
 1831|      0|        cpos.each_sub(dec_visitor{});
 1832|      0|        IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1833|      0|    }
 1834|  18.0k|}
_ZN5immer6detail4rbts21concat_rebalance_planILj2ELj2EE4fillIRNS1_11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERNS1_17concat_center_posISF_EERNS1_15regular_sub_posISF_EEEEvOT_OT0_OT1_:
 1752|  18.0k|    {
 1753|  18.0k|        assert(n == 0u);
  ------------------
  |  Branch (1753:9): [True: 18.0k, False: 0]
  ------------------
 1754|  18.0k|        assert(total == 0u);
  ------------------
  |  Branch (1754:9): [True: 18.0k, False: 0]
  ------------------
 1755|  18.0k|        using visitor_t = concat_rebalance_plan_fill_visitor;
 1756|  18.0k|        lpos.each_left_sub(visitor_t{}, *this);
 1757|  18.0k|        cpos.each_sub(visitor_t{}, *this);
 1758|  18.0k|        rpos.each_right_sub(visitor_t{}, *this);
 1759|  18.0k|    }
_ZN5immer6detail4rbts21concat_rebalance_planILj2ELj2EE5mergeIRNS1_11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERNS1_17concat_center_posISF_EERNS1_15regular_sub_posISF_EEEENSI_INSt3__15decayIT0_E4type6node_tEEEOT_OSQ_OT1_:
 1802|  18.0k|    {
 1803|  18.0k|        using node_t    = node_type<CPos>;
 1804|  18.0k|        using merger_t  = concat_merger<node_t>;
 1805|  18.0k|        using visitor_t = concat_merger_visitor;
 1806|  18.0k|        auto merger     = merger_t{cpos.shift(), counts, n};
 1807|  18.0k|        IMMER_TRY {
  ------------------
  |  |   49|  18.0k|#define IMMER_TRY try
  ------------------
 1808|  18.0k|            lpos.each_left_sub(visitor_t{}, merger);
 1809|  18.0k|            cpos.each_sub(visitor_t{}, merger);
 1810|  18.0k|            rpos.each_right_sub(visitor_t{}, merger);
 1811|  18.0k|            cpos.each_sub(dec_visitor{});
 1812|  18.0k|            return merger.finish();
 1813|  18.0k|        }
 1814|  18.0k|        IMMER_CATCH (...) {
 1815|      0|            merger.abort();
 1816|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1817|      0|        }
 1818|  18.0k|    }
_ZN5immer6detail4rbts19concat_both_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE11visit_innerIRNS1_11relaxed_posISC_EERNS1_8leaf_posISC_EESH_EENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1937|  1.60M|    {
 1938|  1.60M|        return rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
 1939|  1.60M|    }
_ZN5immer6detail4rbts16concat_rebalanceINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEERNS1_11relaxed_posISC_EERNS1_17concat_center_posISC_EESF_EENSG_IT_EEOT0_OT1_OT2_:
 1823|  2.03M|{
 1824|  2.03M|    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
 1825|  2.03M|    plan.fill(lpos, cpos, rpos);
 1826|  2.03M|    plan.shuffle(cpos.shift());
 1827|  2.03M|    IMMER_TRY {
  ------------------
  |  |   49|  2.03M|#define IMMER_TRY try
  ------------------
 1828|  2.03M|        return plan.merge(lpos, cpos, rpos);
 1829|  2.03M|    }
 1830|  2.03M|    IMMER_CATCH (...) {
 1831|      0|        cpos.each_sub(dec_visitor{});
 1832|      0|        IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1833|      0|    }
 1834|  2.03M|}
_ZN5immer6detail4rbts21concat_rebalance_planILj2ELj2EE4fillIRNS1_11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERNS1_17concat_center_posISF_EESH_EEvOT_OT0_OT1_:
 1752|  2.03M|    {
 1753|  2.03M|        assert(n == 0u);
  ------------------
  |  Branch (1753:9): [True: 2.03M, False: 0]
  ------------------
 1754|  2.03M|        assert(total == 0u);
  ------------------
  |  Branch (1754:9): [True: 2.03M, False: 0]
  ------------------
 1755|  2.03M|        using visitor_t = concat_rebalance_plan_fill_visitor;
 1756|  2.03M|        lpos.each_left_sub(visitor_t{}, *this);
 1757|  2.03M|        cpos.each_sub(visitor_t{}, *this);
 1758|  2.03M|        rpos.each_right_sub(visitor_t{}, *this);
 1759|  2.03M|    }
_ZN5immer6detail4rbts21concat_rebalance_planILj2ELj2EE5mergeIRNS1_11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERNS1_17concat_center_posISF_EESH_EENSI_INSt3__15decayIT0_E4type6node_tEEEOT_OSN_OT1_:
 1802|  2.03M|    {
 1803|  2.03M|        using node_t    = node_type<CPos>;
 1804|  2.03M|        using merger_t  = concat_merger<node_t>;
 1805|  2.03M|        using visitor_t = concat_merger_visitor;
 1806|  2.03M|        auto merger     = merger_t{cpos.shift(), counts, n};
 1807|  2.03M|        IMMER_TRY {
  ------------------
  |  |   49|  2.03M|#define IMMER_TRY try
  ------------------
 1808|  2.03M|            lpos.each_left_sub(visitor_t{}, merger);
 1809|  2.03M|            cpos.each_sub(visitor_t{}, merger);
 1810|  2.03M|            rpos.each_right_sub(visitor_t{}, merger);
 1811|  2.03M|            cpos.each_sub(dec_visitor{});
 1812|  2.03M|            return merger.finish();
 1813|  2.03M|        }
 1814|  2.03M|        IMMER_CATCH (...) {
 1815|      0|            merger.abort();
 1816|      0|            IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1817|      0|        }
 1818|  2.03M|    }
_ZN5immer6detail4rbts26concat_trees_right_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10visit_nodeIRNS1_15regular_sub_posISC_EERNS1_11relaxed_posISC_EERNS1_8leaf_posISC_EEEENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1958|  16.9k|    {
 1959|  16.9k|        return concat_inners<Node>(lpos, tpos, rpos);
 1960|  16.9k|    }
_ZN5immer6detail4rbts25concat_trees_left_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10visit_nodeIRNS1_15regular_sub_posISC_EENS1_8leaf_posISC_EEJRPSC_RjRmEEENS1_17concat_center_posISC_EEOT_OT0_DpOT1_:
 1971|  14.0k|    {
 1972|  14.0k|        return visit_maybe_relaxed_sub(
 1973|  14.0k|            args..., concat_trees_right_visitor<Node>{}, lpos, tpos);
 1974|  14.0k|    }
_ZN5immer6detail4rbts26concat_trees_right_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10visit_nodeIRNS1_11relaxed_posISC_EERNS1_15regular_sub_posISC_EERNS1_8leaf_posISC_EEEENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1958|  7.17k|    {
 1959|  7.17k|        return concat_inners<Node>(lpos, tpos, rpos);
 1960|  7.17k|    }
_ZN5immer6detail4rbts26concat_trees_right_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10visit_nodeIRNS1_15regular_sub_posISC_EESH_RNS1_8leaf_posISC_EEEENS1_17concat_center_posISC_EEOT_OT0_OT1_:
 1958|  6.91k|    {
 1959|  6.91k|        return concat_inners<Node>(lpos, tpos, rpos);
 1960|  6.91k|    }
_ZN5immer6detail4rbts21push_tail_mut_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb1EE13visit_relaxedIRNS1_11relaxed_posISC_EEEEPSC_OT_NSA_5applyIS7_E4type4editESI_j:
  680|  49.3k|    {
  681|  49.3k|        auto node     = pos.node();
  682|  49.3k|        auto level    = pos.shift();
  683|  49.3k|        auto idx      = pos.count() - 1;
  684|  49.3k|        auto children = pos.size(idx);
  685|  49.3k|        auto new_idx =
  686|  49.3k|            children == size_t{1} << level || level == BL ? idx + 1 : idx;
  ------------------
  |  Branch (686:13): [True: 2.37k, False: 46.9k]
  |  Branch (686:47): [True: 603, False: 46.3k]
  ------------------
  687|  49.3k|        auto new_child = static_cast<node_t*>(nullptr);
  688|  49.3k|        auto mutate    = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (688:26): [True: 49.3k, Folded]
  |  Branch (688:38): [True: 45.4k, False: 3.91k]
  ------------------
  689|       |
  690|  49.3k|        if (new_idx >= branches<B>)
  ------------------
  |  Branch (690:13): [True: 1.20k, False: 48.1k]
  ------------------
  691|  1.20k|            return nullptr;
  692|  48.1k|        else if (idx == new_idx) {
  ------------------
  |  Branch (692:18): [True: 46.3k, False: 1.76k]
  ------------------
  693|  46.3k|            new_child =
  694|  46.3k|                mutate ? pos.last_oh_csh(this_t{}, idx, children, e, tail, ts)
  ------------------
  |  Branch (694:17): [True: 43.5k, False: 2.77k]
  ------------------
  695|  46.3k|                       : pos.last_oh_csh(
  696|  2.77k|                             this_no_mut_t{}, idx, children, e, tail, ts);
  697|  46.3k|            if (!new_child) {
  ------------------
  |  Branch (697:17): [True: 843, False: 45.5k]
  ------------------
  698|    843|                if (++new_idx < branches<B>)
  ------------------
  |  Branch (698:21): [True: 494, False: 349]
  ------------------
  699|    494|                    new_child = node_t::make_path_e(e, level - B, tail);
  700|    349|                else
  701|    349|                    return nullptr;
  702|    843|            }
  703|  46.3k|        } else
  704|  1.76k|            new_child = node_t::make_path_e(e, level - B, tail);
  705|       |
  706|  47.7k|        if (mutate) {
  ------------------
  |  Branch (706:13): [True: 45.0k, False: 2.66k]
  ------------------
  707|  45.0k|            auto count             = new_idx + 1;
  708|  45.0k|            auto relaxed           = node->ensure_mutable_relaxed_n(e, new_idx);
  709|  45.0k|            node->inner()[new_idx] = new_child;
  710|  45.0k|            relaxed->d.sizes[new_idx] = pos.size() + ts;
  711|  45.0k|            relaxed->d.count          = count;
  712|  45.0k|            assert(relaxed->d.sizes[new_idx]);
  ------------------
  |  Branch (712:13): [True: 45.0k, False: 0]
  ------------------
  713|  45.0k|            return node;
  714|  45.0k|        } else {
  715|  2.66k|            IMMER_TRY {
  ------------------
  |  |   49|  2.66k|#define IMMER_TRY try
  ------------------
  716|  2.66k|                auto count    = new_idx + 1;
  717|  2.66k|                auto new_node = node_t::copy_inner_r_e(e, pos.node(), new_idx);
  718|  2.66k|                auto relaxed  = new_node->relaxed();
  719|  2.66k|                new_node->inner()[new_idx] = new_child;
  720|  2.66k|                relaxed->d.sizes[new_idx]  = pos.size() + ts;
  721|  2.66k|                relaxed->d.count           = count;
  722|  2.66k|                assert(relaxed->d.sizes[new_idx]);
  ------------------
  |  Branch (722:17): [True: 2.66k, False: 0]
  ------------------
  723|  2.66k|                if (Mutating)
  ------------------
  |  Branch (723:21): [True: 2.66k, Folded]
  ------------------
  724|  2.66k|                    pos.visit(dec_visitor{});
  725|  2.66k|                return new_node;
  726|  2.66k|            }
  727|  2.66k|            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|  2.66k|        }
  737|  47.7k|    }
_ZN5immer6detail4rbts21push_tail_mut_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb1EE13visit_regularIRNS1_15regular_sub_posISC_EEJRjEEEPSC_OT_NSA_5applyIS7_E4type4editESJ_DpOT0_:
  741|  32.8k|    {
  742|  32.8k|        assert((pos.size() & mask<BL>) == 0);
  ------------------
  |  Branch (742:9): [True: 32.8k, False: 0]
  ------------------
  743|  32.8k|        auto node    = pos.node();
  744|  32.8k|        auto idx     = pos.index(pos.size() - 1);
  745|  32.8k|        auto new_idx = pos.index(pos.size() + branches<BL> - 1);
  746|  32.8k|        auto mutate  = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (746:24): [True: 32.8k, Folded]
  |  Branch (746:36): [True: 32.2k, False: 655]
  ------------------
  747|  32.8k|        if (mutate) {
  ------------------
  |  Branch (747:13): [True: 32.2k, False: 655]
  ------------------
  748|  32.2k|            node->inner()[new_idx] =
  749|  32.2k|                idx == new_idx ? pos.last_oh(this_t{}, idx, e, tail)
  ------------------
  |  Branch (749:17): [True: 31.3k, False: 813]
  ------------------
  750|       |                               /* otherwise */
  751|  32.2k|                               : node_t::make_path_e(e, pos.shift() - B, tail);
  752|  32.2k|            return node;
  753|  32.2k|        } else {
  754|    655|            auto new_parent = node_t::make_inner_e(e);
  755|    655|            IMMER_TRY {
  ------------------
  |  |   49|    655|#define IMMER_TRY try
  ------------------
  756|    655|                new_parent->inner()[new_idx] =
  757|    655|                    idx == new_idx
  ------------------
  |  Branch (757:21): [True: 328, False: 327]
  ------------------
  758|    655|                        ? pos.last_oh(this_no_mut_t{}, idx, e, tail)
  759|       |                        /* otherwise */
  760|    655|                        : node_t::make_path_e(e, pos.shift() - B, tail);
  761|    655|                node_t::do_copy_inner(new_parent, node, new_idx);
  762|    655|                if (Mutating)
  ------------------
  |  Branch (762:21): [True: 655, Folded]
  ------------------
  763|    655|                    pos.visit(dec_visitor{});
  764|    655|                return new_parent;
  765|    655|            }
  766|    655|            IMMER_CATCH (...) {
  767|      0|                node_t::delete_inner_e(new_parent);
  768|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  769|      0|            }
  770|    655|        }
  771|  32.8k|    }
_ZN5immer6detail4rbts21push_tail_mut_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb1EE13visit_regularIRNS1_11regular_posISC_EEJEEEPSC_OT_NSA_5applyIS7_E4type4editESI_DpOT0_:
  741|   744k|    {
  742|   744k|        assert((pos.size() & mask<BL>) == 0);
  ------------------
  |  Branch (742:9): [True: 744k, False: 0]
  ------------------
  743|   744k|        auto node    = pos.node();
  744|   744k|        auto idx     = pos.index(pos.size() - 1);
  745|   744k|        auto new_idx = pos.index(pos.size() + branches<BL> - 1);
  746|   744k|        auto mutate  = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (746:24): [True: 744k, Folded]
  |  Branch (746:36): [True: 744k, False: 530]
  ------------------
  747|   744k|        if (mutate) {
  ------------------
  |  Branch (747:13): [True: 744k, False: 530]
  ------------------
  748|   744k|            node->inner()[new_idx] =
  749|   744k|                idx == new_idx ? pos.last_oh(this_t{}, idx, e, tail)
  ------------------
  |  Branch (749:17): [True: 578k, False: 165k]
  ------------------
  750|       |                               /* otherwise */
  751|   744k|                               : node_t::make_path_e(e, pos.shift() - B, tail);
  752|   744k|            return node;
  753|   744k|        } else {
  754|    530|            auto new_parent = node_t::make_inner_e(e);
  755|    530|            IMMER_TRY {
  ------------------
  |  |   49|    530|#define IMMER_TRY try
  ------------------
  756|    530|                new_parent->inner()[new_idx] =
  757|    530|                    idx == new_idx
  ------------------
  |  Branch (757:21): [True: 222, False: 308]
  ------------------
  758|    530|                        ? pos.last_oh(this_no_mut_t{}, idx, e, tail)
  759|       |                        /* otherwise */
  760|    530|                        : node_t::make_path_e(e, pos.shift() - B, tail);
  761|    530|                node_t::do_copy_inner(new_parent, node, new_idx);
  762|    530|                if (Mutating)
  ------------------
  |  Branch (762:21): [True: 530, Folded]
  ------------------
  763|    530|                    pos.visit(dec_visitor{});
  764|    530|                return new_parent;
  765|    530|            }
  766|    530|            IMMER_CATCH (...) {
  767|      0|                node_t::delete_inner_e(new_parent);
  768|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  769|      0|            }
  770|    530|        }
  771|   744k|    }
_ZN5immer6detail4rbts21push_tail_mut_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb0EE13visit_regularIRNS1_11regular_posISC_EEJEEEPSC_OT_NSA_5applyIS7_E4type4editESI_DpOT0_:
  741|  2.67k|    {
  742|  2.67k|        assert((pos.size() & mask<BL>) == 0);
  ------------------
  |  Branch (742:9): [True: 2.67k, False: 0]
  ------------------
  743|  2.67k|        auto node    = pos.node();
  744|  2.67k|        auto idx     = pos.index(pos.size() - 1);
  745|  2.67k|        auto new_idx = pos.index(pos.size() + branches<BL> - 1);
  746|  2.67k|        auto mutate  = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (746:24): [Folded, False: 2.67k]
  |  Branch (746:36): [True: 0, False: 0]
  ------------------
  747|  2.67k|        if (mutate) {
  ------------------
  |  Branch (747:13): [True: 0, False: 2.67k]
  ------------------
  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.67k|        } else {
  754|  2.67k|            auto new_parent = node_t::make_inner_e(e);
  755|  2.67k|            IMMER_TRY {
  ------------------
  |  |   49|  2.67k|#define IMMER_TRY try
  ------------------
  756|  2.67k|                new_parent->inner()[new_idx] =
  757|  2.67k|                    idx == new_idx
  ------------------
  |  Branch (757:21): [True: 1.02k, False: 1.64k]
  ------------------
  758|  2.67k|                        ? pos.last_oh(this_no_mut_t{}, idx, e, tail)
  759|       |                        /* otherwise */
  760|  2.67k|                        : node_t::make_path_e(e, pos.shift() - B, tail);
  761|  2.67k|                node_t::do_copy_inner(new_parent, node, new_idx);
  762|  2.67k|                if (Mutating)
  ------------------
  |  Branch (762:21): [Folded, False: 2.67k]
  ------------------
  763|      0|                    pos.visit(dec_visitor{});
  764|  2.67k|                return new_parent;
  765|  2.67k|            }
  766|  2.67k|            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.67k|        }
  771|  2.67k|    }
_ZN5immer6detail4rbts21push_tail_mut_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb0EE13visit_relaxedIRNS1_11relaxed_posISC_EEEEPSC_OT_NSA_5applyIS7_E4type4editESI_j:
  680|  7.38k|    {
  681|  7.38k|        auto node     = pos.node();
  682|  7.38k|        auto level    = pos.shift();
  683|  7.38k|        auto idx      = pos.count() - 1;
  684|  7.38k|        auto children = pos.size(idx);
  685|  7.38k|        auto new_idx =
  686|  7.38k|            children == size_t{1} << level || level == BL ? idx + 1 : idx;
  ------------------
  |  Branch (686:13): [True: 1.27k, False: 6.11k]
  |  Branch (686:47): [True: 425, False: 5.68k]
  ------------------
  687|  7.38k|        auto new_child = static_cast<node_t*>(nullptr);
  688|  7.38k|        auto mutate    = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (688:26): [Folded, False: 7.38k]
  |  Branch (688:38): [True: 0, False: 0]
  ------------------
  689|       |
  690|  7.38k|        if (new_idx >= branches<B>)
  ------------------
  |  Branch (690:13): [True: 592, False: 6.79k]
  ------------------
  691|    592|            return nullptr;
  692|  6.79k|        else if (idx == new_idx) {
  ------------------
  |  Branch (692:18): [True: 5.68k, False: 1.10k]
  ------------------
  693|  5.68k|            new_child =
  694|  5.68k|                mutate ? pos.last_oh_csh(this_t{}, idx, children, e, tail, ts)
  ------------------
  |  Branch (694:17): [True: 0, False: 5.68k]
  ------------------
  695|  5.68k|                       : pos.last_oh_csh(
  696|  5.68k|                             this_no_mut_t{}, idx, children, e, tail, ts);
  697|  5.68k|            if (!new_child) {
  ------------------
  |  Branch (697:17): [True: 603, False: 5.08k]
  ------------------
  698|    603|                if (++new_idx < branches<B>)
  ------------------
  |  Branch (698:21): [True: 263, False: 340]
  ------------------
  699|    263|                    new_child = node_t::make_path_e(e, level - B, tail);
  700|    340|                else
  701|    340|                    return nullptr;
  702|    603|            }
  703|  5.68k|        } else
  704|  1.10k|            new_child = node_t::make_path_e(e, level - B, tail);
  705|       |
  706|  6.45k|        if (mutate) {
  ------------------
  |  Branch (706:13): [True: 0, False: 6.45k]
  ------------------
  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|  6.45k|        } else {
  715|  6.45k|            IMMER_TRY {
  ------------------
  |  |   49|  6.45k|#define IMMER_TRY try
  ------------------
  716|  6.45k|                auto count    = new_idx + 1;
  717|  6.45k|                auto new_node = node_t::copy_inner_r_e(e, pos.node(), new_idx);
  718|  6.45k|                auto relaxed  = new_node->relaxed();
  719|  6.45k|                new_node->inner()[new_idx] = new_child;
  720|  6.45k|                relaxed->d.sizes[new_idx]  = pos.size() + ts;
  721|  6.45k|                relaxed->d.count           = count;
  722|  6.45k|                assert(relaxed->d.sizes[new_idx]);
  ------------------
  |  Branch (722:17): [True: 6.45k, False: 0]
  ------------------
  723|  6.45k|                if (Mutating)
  ------------------
  |  Branch (723:21): [Folded, False: 6.45k]
  ------------------
  724|      0|                    pos.visit(dec_visitor{});
  725|  6.45k|                return new_node;
  726|  6.45k|            }
  727|  6.45k|            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|  6.45k|        }
  737|  6.45k|    }
_ZN5immer6detail4rbts21push_tail_mut_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb0EE13visit_regularIRNS1_15regular_sub_posISC_EEJRjEEEPSC_OT_NSA_5applyIS7_E4type4editESJ_DpOT0_:
  741|  1.08k|    {
  742|  1.08k|        assert((pos.size() & mask<BL>) == 0);
  ------------------
  |  Branch (742:9): [True: 1.08k, False: 0]
  ------------------
  743|  1.08k|        auto node    = pos.node();
  744|  1.08k|        auto idx     = pos.index(pos.size() - 1);
  745|  1.08k|        auto new_idx = pos.index(pos.size() + branches<BL> - 1);
  746|  1.08k|        auto mutate  = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (746:24): [Folded, False: 1.08k]
  |  Branch (746:36): [True: 0, False: 0]
  ------------------
  747|  1.08k|        if (mutate) {
  ------------------
  |  Branch (747:13): [True: 0, False: 1.08k]
  ------------------
  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|  1.08k|        } else {
  754|  1.08k|            auto new_parent = node_t::make_inner_e(e);
  755|  1.08k|            IMMER_TRY {
  ------------------
  |  |   49|  1.08k|#define IMMER_TRY try
  ------------------
  756|  1.08k|                new_parent->inner()[new_idx] =
  757|  1.08k|                    idx == new_idx
  ------------------
  |  Branch (757:21): [True: 659, False: 421]
  ------------------
  758|  1.08k|                        ? pos.last_oh(this_no_mut_t{}, idx, e, tail)
  759|       |                        /* otherwise */
  760|  1.08k|                        : node_t::make_path_e(e, pos.shift() - B, tail);
  761|  1.08k|                node_t::do_copy_inner(new_parent, node, new_idx);
  762|  1.08k|                if (Mutating)
  ------------------
  |  Branch (762:21): [Folded, False: 1.08k]
  ------------------
  763|      0|                    pos.visit(dec_visitor{});
  764|  1.08k|                return new_parent;
  765|  1.08k|            }
  766|  1.08k|            IMMER_CATCH (...) {
  767|      0|                node_t::delete_inner_e(new_parent);
  768|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  769|      0|            }
  770|  1.08k|        }
  771|  1.08k|    }
_ZN5immer6detail4rbts21push_tail_mut_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb1EE13visit_regularIRNS1_15regular_sub_posISC_EEJEEEPSC_OT_NSA_5applyIS7_E4type4editESI_DpOT0_:
  741|   139k|    {
  742|   139k|        assert((pos.size() & mask<BL>) == 0);
  ------------------
  |  Branch (742:9): [True: 139k, False: 0]
  ------------------
  743|   139k|        auto node    = pos.node();
  744|   139k|        auto idx     = pos.index(pos.size() - 1);
  745|   139k|        auto new_idx = pos.index(pos.size() + branches<BL> - 1);
  746|   139k|        auto mutate  = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (746:24): [True: 139k, Folded]
  |  Branch (746:36): [True: 138k, False: 694]
  ------------------
  747|   139k|        if (mutate) {
  ------------------
  |  Branch (747:13): [True: 138k, False: 694]
  ------------------
  748|   138k|            node->inner()[new_idx] =
  749|   138k|                idx == new_idx ? pos.last_oh(this_t{}, idx, e, tail)
  ------------------
  |  Branch (749:17): [True: 134k, False: 3.91k]
  ------------------
  750|       |                               /* otherwise */
  751|   138k|                               : node_t::make_path_e(e, pos.shift() - B, tail);
  752|   138k|            return node;
  753|   138k|        } else {
  754|    694|            auto new_parent = node_t::make_inner_e(e);
  755|    694|            IMMER_TRY {
  ------------------
  |  |   49|    694|#define IMMER_TRY try
  ------------------
  756|    694|                new_parent->inner()[new_idx] =
  757|    694|                    idx == new_idx
  ------------------
  |  Branch (757:21): [True: 439, False: 255]
  ------------------
  758|    694|                        ? pos.last_oh(this_no_mut_t{}, idx, e, tail)
  759|       |                        /* otherwise */
  760|    694|                        : node_t::make_path_e(e, pos.shift() - B, tail);
  761|    694|                node_t::do_copy_inner(new_parent, node, new_idx);
  762|    694|                if (Mutating)
  ------------------
  |  Branch (762:21): [True: 694, Folded]
  ------------------
  763|    694|                    pos.visit(dec_visitor{});
  764|    694|                return new_parent;
  765|    694|            }
  766|    694|            IMMER_CATCH (...) {
  767|      0|                node_t::delete_inner_e(new_parent);
  768|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  769|      0|            }
  770|    694|        }
  771|   139k|    }
_ZN5immer6detail4rbts17dec_empty_regularINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEvPT_:
  580|  2.02k|{
  581|  2.02k|    make_empty_regular_pos(node).visit(dec_visitor());
  582|  2.02k|}
_ZN5immer6detail4rbts15get_mut_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE13visit_relaxedIRNS1_11relaxed_posISC_EEEERiOT_mNSA_5applyIS7_E4type4editEPPSC_:
  595|   122k|    {
  596|   122k|        auto offset = pos.index(idx);
  597|   122k|        auto count  = pos.count();
  598|   122k|        auto node   = pos.node();
  599|   122k|        if (node->can_mutate(e)) {
  ------------------
  |  Branch (599:13): [True: 111k, False: 11.5k]
  ------------------
  600|   111k|            return pos.towards_oh(
  601|   111k|                this_t{}, idx, offset, e, &node->inner()[offset]);
  602|   111k|        } else {
  603|  11.5k|            auto new_node = node_t::copy_inner_sr_e(e, node, count);
  604|  11.5k|            IMMER_TRY {
  ------------------
  |  |   49|  11.5k|#define IMMER_TRY try
  ------------------
  605|  11.5k|                auto& res = pos.towards_oh(
  606|  11.5k|                    this_t{}, idx, offset, e, &new_node->inner()[offset]);
  607|  11.5k|                pos.visit(dec_visitor{});
  608|  11.5k|                *location = new_node;
  609|  11.5k|                return res;
  610|  11.5k|            }
  611|  11.5k|            IMMER_CATCH (...) {
  612|      0|                dec_relaxed(new_node, pos.shift());
  613|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  614|      0|            }
  615|  11.5k|        }
  616|   122k|    }
_ZN5immer6detail4rbts15get_mut_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10visit_leafIRNS1_12leaf_sub_posISC_EEEERiOT_mNSA_5applyIS7_E4type4editEPPSC_:
  652|  35.6k|    {
  653|  35.6k|        assert(pos.node() == *location);
  ------------------
  |  Branch (653:9): [True: 35.6k, False: 0]
  ------------------
  654|  35.6k|        auto node = pos.node();
  655|  35.6k|        if (node->can_mutate(e)) {
  ------------------
  |  Branch (655:13): [True: 33.0k, False: 2.57k]
  ------------------
  656|  33.0k|            return node->leaf()[pos.index(idx)];
  657|  33.0k|        } else {
  658|  2.57k|            auto new_node = node_t::copy_leaf_e(e, pos.node(), pos.count());
  659|  2.57k|            pos.visit(dec_visitor{});
  660|  2.57k|            *location = new_node;
  661|  2.57k|            return new_node->leaf()[pos.index(idx)];
  662|  2.57k|        }
  663|  35.6k|    }
_ZN5immer6detail4rbts15get_mut_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE13visit_regularIRNS1_15regular_sub_posISC_EEEERiOT_mNSA_5applyIS7_E4type4editEPPSC_:
  621|  6.95k|    {
  622|  6.95k|        assert(pos.node() == *location);
  ------------------
  |  Branch (622:9): [True: 6.95k, False: 0]
  ------------------
  623|  6.95k|        auto offset = pos.index(idx);
  624|  6.95k|        auto count  = pos.count();
  625|  6.95k|        auto node   = pos.node();
  626|  6.95k|        if (node->can_mutate(e)) {
  ------------------
  |  Branch (626:13): [True: 5.28k, False: 1.66k]
  ------------------
  627|  5.28k|            return pos.towards_oh_ch(
  628|  5.28k|                this_t{}, idx, offset, count, e, &node->inner()[offset]);
  629|  5.28k|        } else {
  630|  1.66k|            auto new_node = node_t::copy_inner_e(e, node, count);
  631|  1.66k|            IMMER_TRY {
  ------------------
  |  |   49|  1.66k|#define IMMER_TRY try
  ------------------
  632|  1.66k|                auto& res = pos.towards_oh_ch(this_t{},
  633|  1.66k|                                              idx,
  634|  1.66k|                                              offset,
  635|  1.66k|                                              count,
  636|  1.66k|                                              e,
  637|  1.66k|                                              &new_node->inner()[offset]);
  638|  1.66k|                pos.visit(dec_visitor{});
  639|  1.66k|                *location = new_node;
  640|  1.66k|                return res;
  641|  1.66k|            }
  642|  1.66k|            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|  1.66k|        }
  647|  6.95k|    }
_ZN5immer6detail4rbts15get_mut_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10visit_leafIRNS1_13full_leaf_posISC_EEEERiOT_mNSA_5applyIS7_E4type4editEPPSC_:
  652|  5.75k|    {
  653|  5.75k|        assert(pos.node() == *location);
  ------------------
  |  Branch (653:9): [True: 5.75k, False: 0]
  ------------------
  654|  5.75k|        auto node = pos.node();
  655|  5.75k|        if (node->can_mutate(e)) {
  ------------------
  |  Branch (655:13): [True: 3.89k, False: 1.85k]
  ------------------
  656|  3.89k|            return node->leaf()[pos.index(idx)];
  657|  3.89k|        } else {
  658|  1.85k|            auto new_node = node_t::copy_leaf_e(e, pos.node(), pos.count());
  659|  1.85k|            pos.visit(dec_visitor{});
  660|  1.85k|            *location = new_node;
  661|  1.85k|            return new_node->leaf()[pos.index(idx)];
  662|  1.85k|        }
  663|  5.75k|    }
_ZN5immer6detail4rbts15get_mut_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE13visit_regularIRNS1_8full_posISC_EEEERiOT_mNSA_5applyIS7_E4type4editEPPSC_:
  621|  4.79k|    {
  622|  4.79k|        assert(pos.node() == *location);
  ------------------
  |  Branch (622:9): [True: 4.79k, False: 0]
  ------------------
  623|  4.79k|        auto offset = pos.index(idx);
  624|  4.79k|        auto count  = pos.count();
  625|  4.79k|        auto node   = pos.node();
  626|  4.79k|        if (node->can_mutate(e)) {
  ------------------
  |  Branch (626:13): [True: 3.38k, False: 1.41k]
  ------------------
  627|  3.38k|            return pos.towards_oh_ch(
  628|  3.38k|                this_t{}, idx, offset, count, e, &node->inner()[offset]);
  629|  3.38k|        } else {
  630|  1.41k|            auto new_node = node_t::copy_inner_e(e, node, count);
  631|  1.41k|            IMMER_TRY {
  ------------------
  |  |   49|  1.41k|#define IMMER_TRY try
  ------------------
  632|  1.41k|                auto& res = pos.towards_oh_ch(this_t{},
  633|  1.41k|                                              idx,
  634|  1.41k|                                              offset,
  635|  1.41k|                                              count,
  636|  1.41k|                                              e,
  637|  1.41k|                                              &new_node->inner()[offset]);
  638|  1.41k|                pos.visit(dec_visitor{});
  639|  1.41k|                *location = new_node;
  640|  1.41k|                return res;
  641|  1.41k|            }
  642|  1.41k|            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|  1.41k|        }
  647|  4.79k|    }
_ZN5immer6detail4rbts15get_mut_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10visit_leafIRNS1_8leaf_posISC_EEEERiOT_mNSA_5applyIS7_E4type4editEPPSC_:
  652|  1.19k|    {
  653|  1.19k|        assert(pos.node() == *location);
  ------------------
  |  Branch (653:9): [True: 1.19k, False: 0]
  ------------------
  654|  1.19k|        auto node = pos.node();
  655|  1.19k|        if (node->can_mutate(e)) {
  ------------------
  |  Branch (655:13): [True: 859, False: 338]
  ------------------
  656|    859|            return node->leaf()[pos.index(idx)];
  657|    859|        } else {
  658|    338|            auto new_node = node_t::copy_leaf_e(e, pos.node(), pos.count());
  659|    338|            pos.visit(dec_visitor{});
  660|    338|            *location = new_node;
  661|    338|            return new_node->leaf()[pos.index(idx)];
  662|    338|        }
  663|  1.19k|    }
_ZN5immer6detail4rbts15get_mut_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE13visit_regularIRNS1_11regular_posISC_EEEERiOT_mNSA_5applyIS7_E4type4editEPPSC_:
  621|  3.19k|    {
  622|  3.19k|        assert(pos.node() == *location);
  ------------------
  |  Branch (622:9): [True: 3.19k, False: 0]
  ------------------
  623|  3.19k|        auto offset = pos.index(idx);
  624|  3.19k|        auto count  = pos.count();
  625|  3.19k|        auto node   = pos.node();
  626|  3.19k|        if (node->can_mutate(e)) {
  ------------------
  |  Branch (626:13): [True: 2.89k, False: 299]
  ------------------
  627|  2.89k|            return pos.towards_oh_ch(
  628|  2.89k|                this_t{}, idx, offset, count, e, &node->inner()[offset]);
  629|  2.89k|        } else {
  630|    299|            auto new_node = node_t::copy_inner_e(e, node, count);
  631|    299|            IMMER_TRY {
  ------------------
  |  |   49|    299|#define IMMER_TRY try
  ------------------
  632|    299|                auto& res = pos.towards_oh_ch(this_t{},
  633|    299|                                              idx,
  634|    299|                                              offset,
  635|    299|                                              count,
  636|    299|                                              e,
  637|    299|                                              &new_node->inner()[offset]);
  638|    299|                pos.visit(dec_visitor{});
  639|    299|                *location = new_node;
  640|    299|                return res;
  641|    299|            }
  642|    299|            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|    299|        }
  647|  3.19k|    }
_ZN5immer6detail4rbts23slice_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb1ELb1EE13visit_relaxedIRNS1_11relaxed_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_mNSA_5applyIS7_E4type4editE:
  913|  64.7k|    {
  914|  64.7k|        auto idx    = pos.index(last);
  915|  64.7k|        auto node   = pos.node();
  916|  64.7k|        auto mutate = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (916:23): [True: 64.7k, Folded]
  |  Branch (916:35): [True: 55.7k, False: 9.02k]
  ------------------
  917|  64.7k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (917:13): [True: 64.7k, Folded]
  |  Branch (917:25): [True: 45.1k, False: 19.6k]
  ------------------
  918|  45.1k|            auto res = mutate ? pos.towards_oh(this_t{}, last, idx, e)
  ------------------
  |  Branch (918:24): [True: 39.9k, False: 5.20k]
  ------------------
  919|  45.1k|                              : pos.towards_oh(no_mut_t{}, last, idx, e);
  920|  45.1k|            if (Mutating)
  ------------------
  |  Branch (920:17): [True: 45.1k, Folded]
  ------------------
  921|  45.1k|                pos.visit(dec_right_visitor{}, count_t{1});
  922|  45.1k|            return res;
  923|  45.1k|        } else {
  924|  19.6k|            using std::get;
  925|  19.6k|            auto subs =
  926|  19.6k|                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
  ------------------
  |  Branch (926:17): [True: 15.8k, False: 3.81k]
  ------------------
  927|  19.6k|                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
  928|  19.6k|            auto next = get<1>(subs);
  929|  19.6k|            auto ts   = get<2>(subs);
  930|  19.6k|            auto tail = get<3>(subs);
  931|  19.6k|            IMMER_TRY {
  ------------------
  |  |   49|  19.6k|#define IMMER_TRY try
  ------------------
  932|  19.6k|                if (next) {
  ------------------
  |  Branch (932:21): [True: 13.4k, False: 6.21k]
  ------------------
  933|  13.4k|                    if (mutate) {
  ------------------
  |  Branch (933:25): [True: 11.1k, False: 2.25k]
  ------------------
  934|  11.1k|                        auto nodr = node->ensure_mutable_relaxed_n(e, idx);
  935|  11.1k|                        pos.each_right(dec_visitor{}, idx + 1);
  936|  11.1k|                        node->inner()[idx] = next;
  937|  11.1k|                        nodr->d.sizes[idx] = last + 1 - ts;
  938|  11.1k|                        nodr->d.count      = idx + 1;
  939|  11.1k|                        assert(nodr->d.sizes[idx]);
  ------------------
  |  Branch (939:25): [True: 11.1k, False: 0]
  ------------------
  940|  11.1k|                        return std::make_tuple(pos.shift(), node, ts, tail);
  941|  11.1k|                    } else {
  942|  2.25k|                        auto newn = node_t::copy_inner_r_e(e, node, idx);
  943|  2.25k|                        auto newr = newn->relaxed();
  944|  2.25k|                        newn->inner()[idx] = next;
  945|  2.25k|                        newr->d.sizes[idx] = last + 1 - ts;
  946|  2.25k|                        newr->d.count      = idx + 1;
  947|  2.25k|                        assert(newr->d.sizes[idx]);
  ------------------
  |  Branch (947:25): [True: 2.25k, False: 0]
  ------------------
  948|  2.25k|                        if (Mutating)
  ------------------
  |  Branch (948:29): [True: 2.25k, Folded]
  ------------------
  949|  2.25k|                            pos.visit(dec_visitor{});
  950|  2.25k|                        return std::make_tuple(pos.shift(), newn, ts, tail);
  951|  2.25k|                    }
  952|  13.4k|                } else if (idx == 0) {
  ------------------
  |  Branch (952:28): [True: 0, False: 6.21k]
  ------------------
  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|  6.21k|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (956:28): [True: 6.21k, Folded]
  |  Branch (956:40): [True: 5.22k, False: 988]
  |  Branch (956:52): [True: 4.36k, False: 858]
  ------------------
  957|  4.36k|                    auto newn = pos.node()->inner()[0];
  958|  4.36k|                    if (!mutate)
  ------------------
  |  Branch (958:25): [True: 839, False: 3.52k]
  ------------------
  959|    839|                        newn->inc();
  960|  4.36k|                    if (Mutating)
  ------------------
  |  Branch (960:25): [True: 4.36k, Folded]
  ------------------
  961|  4.36k|                        pos.visit(dec_right_visitor{}, count_t{2});
  962|  4.36k|                    return std::make_tuple(pos.shift() - B, newn, ts, tail);
  963|  4.36k|                } else {
  964|  1.84k|                    if (mutate) {
  ------------------
  |  Branch (964:25): [True: 1.12k, False: 719]
  ------------------
  965|  1.12k|                        pos.each_right(dec_visitor{}, idx + 1);
  966|  1.12k|                        node->ensure_mutable_relaxed_n(e, idx)->d.count = idx;
  967|  1.12k|                        return std::make_tuple(pos.shift(), node, ts, tail);
  968|  1.12k|                    } else {
  969|    719|                        auto newn = node_t::copy_inner_r_e(e, node, idx);
  970|    719|                        if (Mutating)
  ------------------
  |  Branch (970:29): [True: 719, Folded]
  ------------------
  971|    719|                            pos.visit(dec_visitor{});
  972|    719|                        return std::make_tuple(pos.shift(), newn, ts, tail);
  973|    719|                    }
  974|  1.84k|                }
  975|  19.6k|            }
  976|  19.6k|            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|  19.6k|        }
  987|  64.7k|    }
_ZN5immer6detail4rbts23slice_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb1ELb1EE10visit_leafIRNS1_12leaf_sub_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_mNSA_5applyIS7_E4type4editE:
 1059|  1.12k|    {
 1060|  1.12k|        auto old_tail_size = pos.count();
 1061|  1.12k|        auto new_tail_size = pos.index(last) + 1;
 1062|  1.12k|        auto node          = pos.node();
 1063|  1.12k|        auto mutate        = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (1063:30): [True: 1.12k, Folded]
  |  Branch (1063:42): [True: 323, False: 797]
  ------------------
 1064|  1.12k|        if (new_tail_size == old_tail_size) {
  ------------------
  |  Branch (1064:13): [True: 296, False: 824]
  ------------------
 1065|    296|            if (!Mutating)
  ------------------
  |  Branch (1065:17): [Folded, False: 296]
  ------------------
 1066|      0|                node->inc();
 1067|    296|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1068|    824|        } else if (mutate) {
  ------------------
  |  Branch (1068:20): [True: 287, False: 537]
  ------------------
 1069|    287|            detail::destroy_n(node->leaf() + new_tail_size,
 1070|    287|                              old_tail_size - new_tail_size);
 1071|    287|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1072|    537|        } else {
 1073|    537|            auto new_tail = node_t::copy_leaf_e(e, node, new_tail_size);
 1074|    537|            if (Mutating)
  ------------------
  |  Branch (1074:17): [True: 537, Folded]
  ------------------
 1075|    537|                pos.visit(dec_visitor{});
 1076|    537|            return std::make_tuple(0, nullptr, new_tail_size, new_tail);
 1077|    537|        }
 1078|  1.12k|    }
_ZN5immer6detail4rbts23slice_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb1ELb0EE10visit_leafIRNS1_12leaf_sub_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_mNSA_5applyIS7_E4type4editE:
 1059|    930|    {
 1060|    930|        auto old_tail_size = pos.count();
 1061|    930|        auto new_tail_size = pos.index(last) + 1;
 1062|    930|        auto node          = pos.node();
 1063|    930|        auto mutate        = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (1063:30): [Folded, False: 930]
  |  Branch (1063:42): [True: 0, False: 0]
  ------------------
 1064|    930|        if (new_tail_size == old_tail_size) {
  ------------------
  |  Branch (1064:13): [True: 590, False: 340]
  ------------------
 1065|    590|            if (!Mutating)
  ------------------
  |  Branch (1065:17): [True: 590, Folded]
  ------------------
 1066|    590|                node->inc();
 1067|    590|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1068|    590|        } else if (mutate) {
  ------------------
  |  Branch (1068:20): [True: 0, False: 340]
  ------------------
 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|    340|        } else {
 1073|    340|            auto new_tail = node_t::copy_leaf_e(e, node, new_tail_size);
 1074|    340|            if (Mutating)
  ------------------
  |  Branch (1074:17): [Folded, False: 340]
  ------------------
 1075|      0|                pos.visit(dec_visitor{});
 1076|    340|            return std::make_tuple(0, nullptr, new_tail_size, new_tail);
 1077|    340|        }
 1078|    930|    }
_ZN5immer6detail4rbts23slice_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb1ELb0EE13visit_relaxedIRNS1_11relaxed_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_mNSA_5applyIS7_E4type4editE:
  913|  19.4k|    {
  914|  19.4k|        auto idx    = pos.index(last);
  915|  19.4k|        auto node   = pos.node();
  916|  19.4k|        auto mutate = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (916:23): [Folded, False: 19.4k]
  |  Branch (916:35): [True: 0, False: 0]
  ------------------
  917|  19.4k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (917:13): [True: 19.4k, Folded]
  |  Branch (917:25): [True: 17.0k, False: 2.41k]
  ------------------
  918|  17.0k|            auto res = mutate ? pos.towards_oh(this_t{}, last, idx, e)
  ------------------
  |  Branch (918:24): [True: 0, False: 17.0k]
  ------------------
  919|  17.0k|                              : pos.towards_oh(no_mut_t{}, last, idx, e);
  920|  17.0k|            if (Mutating)
  ------------------
  |  Branch (920:17): [Folded, False: 17.0k]
  ------------------
  921|      0|                pos.visit(dec_right_visitor{}, count_t{1});
  922|  17.0k|            return res;
  923|  17.0k|        } else {
  924|  2.41k|            using std::get;
  925|  2.41k|            auto subs =
  926|  2.41k|                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
  ------------------
  |  Branch (926:17): [True: 0, False: 2.41k]
  ------------------
  927|  2.41k|                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
  928|  2.41k|            auto next = get<1>(subs);
  929|  2.41k|            auto ts   = get<2>(subs);
  930|  2.41k|            auto tail = get<3>(subs);
  931|  2.41k|            IMMER_TRY {
  ------------------
  |  |   49|  2.41k|#define IMMER_TRY try
  ------------------
  932|  2.41k|                if (next) {
  ------------------
  |  Branch (932:21): [True: 694, False: 1.72k]
  ------------------
  933|    694|                    if (mutate) {
  ------------------
  |  Branch (933:25): [True: 0, False: 694]
  ------------------
  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|    694|                    } else {
  942|    694|                        auto newn = node_t::copy_inner_r_e(e, node, idx);
  943|    694|                        auto newr = newn->relaxed();
  944|    694|                        newn->inner()[idx] = next;
  945|    694|                        newr->d.sizes[idx] = last + 1 - ts;
  946|    694|                        newr->d.count      = idx + 1;
  947|    694|                        assert(newr->d.sizes[idx]);
  ------------------
  |  Branch (947:25): [True: 694, False: 0]
  ------------------
  948|    694|                        if (Mutating)
  ------------------
  |  Branch (948:29): [Folded, False: 694]
  ------------------
  949|      0|                            pos.visit(dec_visitor{});
  950|    694|                        return std::make_tuple(pos.shift(), newn, ts, tail);
  951|    694|                    }
  952|  1.72k|                } else if (idx == 0) {
  ------------------
  |  Branch (952:28): [True: 0, False: 1.72k]
  ------------------
  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.72k|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (956:28): [True: 1.72k, Folded]
  |  Branch (956:40): [True: 716, False: 1.00k]
  |  Branch (956:52): [True: 388, False: 328]
  ------------------
  957|    388|                    auto newn = pos.node()->inner()[0];
  958|    388|                    if (!mutate)
  ------------------
  |  Branch (958:25): [True: 388, False: 0]
  ------------------
  959|    388|                        newn->inc();
  960|    388|                    if (Mutating)
  ------------------
  |  Branch (960:25): [Folded, False: 388]
  ------------------
  961|      0|                        pos.visit(dec_right_visitor{}, count_t{2});
  962|    388|                    return std::make_tuple(pos.shift() - B, newn, ts, tail);
  963|  1.33k|                } else {
  964|  1.33k|                    if (mutate) {
  ------------------
  |  Branch (964:25): [True: 0, False: 1.33k]
  ------------------
  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|  1.33k|                    } else {
  969|  1.33k|                        auto newn = node_t::copy_inner_r_e(e, node, idx);
  970|  1.33k|                        if (Mutating)
  ------------------
  |  Branch (970:29): [Folded, False: 1.33k]
  ------------------
  971|      0|                            pos.visit(dec_visitor{});
  972|  1.33k|                        return std::make_tuple(pos.shift(), newn, ts, tail);
  973|  1.33k|                    }
  974|  1.33k|                }
  975|  2.41k|            }
  976|  2.41k|            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|  2.41k|        }
  987|  19.4k|    }
_ZN5immer6detail4rbts23slice_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb1ELb0EE13visit_regularIRNS1_15regular_sub_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_mNSA_5applyIS7_E4type4editE:
  991|  1.86k|    {
  992|  1.86k|        auto idx    = pos.index(last);
  993|  1.86k|        auto node   = pos.node();
  994|  1.86k|        auto mutate = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (994:23): [Folded, False: 1.86k]
  |  Branch (994:35): [True: 0, False: 0]
  ------------------
  995|  1.86k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (995:13): [True: 1.86k, Folded]
  |  Branch (995:25): [True: 618, False: 1.24k]
  ------------------
  996|    618|            auto res = mutate ? pos.towards_oh(this_t{}, last, idx, e)
  ------------------
  |  Branch (996:24): [True: 0, False: 618]
  ------------------
  997|    618|                              : pos.towards_oh(no_mut_t{}, last, idx, e);
  998|    618|            if (Mutating)
  ------------------
  |  Branch (998:17): [Folded, False: 618]
  ------------------
  999|      0|                pos.visit(dec_right_visitor{}, count_t{1});
 1000|    618|            return res;
 1001|  1.24k|        } else {
 1002|  1.24k|            using std::get;
 1003|  1.24k|            auto subs =
 1004|  1.24k|                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
  ------------------
  |  Branch (1004:17): [True: 0, False: 1.24k]
  ------------------
 1005|  1.24k|                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
 1006|  1.24k|            auto next = get<1>(subs);
 1007|  1.24k|            auto ts   = get<2>(subs);
 1008|  1.24k|            auto tail = get<3>(subs);
 1009|  1.24k|            IMMER_TRY {
  ------------------
  |  |   49|  1.24k|#define IMMER_TRY try
  ------------------
 1010|  1.24k|                if (next) {
  ------------------
  |  Branch (1010:21): [True: 241, False: 1.00k]
  ------------------
 1011|    241|                    if (mutate) {
  ------------------
  |  Branch (1011:25): [True: 0, False: 241]
  ------------------
 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|    241|                    } else {
 1016|    241|                        auto newn          = node_t::copy_inner_e(e, node, idx);
 1017|    241|                        newn->inner()[idx] = next;
 1018|    241|                        if (Mutating)
  ------------------
  |  Branch (1018:29): [Folded, False: 241]
  ------------------
 1019|      0|                            pos.visit(dec_visitor{});
 1020|    241|                        return std::make_tuple(pos.shift(), newn, ts, tail);
 1021|    241|                    }
 1022|  1.00k|                } else if (idx == 0) {
  ------------------
  |  Branch (1022:28): [True: 0, False: 1.00k]
  ------------------
 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|  1.00k|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (1026:28): [True: 1.00k, Folded]
  |  Branch (1026:40): [True: 767, False: 238]
  |  Branch (1026:52): [True: 240, False: 527]
  ------------------
 1027|    240|                    auto newn = pos.node()->inner()[0];
 1028|    240|                    if (!mutate)
  ------------------
  |  Branch (1028:25): [True: 240, False: 0]
  ------------------
 1029|    240|                        newn->inc();
 1030|    240|                    if (Mutating)
  ------------------
  |  Branch (1030:25): [Folded, False: 240]
  ------------------
 1031|      0|                        pos.visit(dec_right_visitor{}, count_t{2});
 1032|    240|                    return std::make_tuple(pos.shift() - B, newn, ts, tail);
 1033|    765|                } else {
 1034|    765|                    if (mutate) {
  ------------------
  |  Branch (1034:25): [True: 0, False: 765]
  ------------------
 1035|      0|                        pos.each_right(dec_visitor{}, idx + 1);
 1036|      0|                        return std::make_tuple(pos.shift(), node, ts, tail);
 1037|    765|                    } else {
 1038|    765|                        auto newn = node_t::copy_inner_e(e, node, idx);
 1039|    765|                        if (Mutating)
  ------------------
  |  Branch (1039:29): [Folded, False: 765]
  ------------------
 1040|      0|                            pos.visit(dec_visitor{});
 1041|    765|                        return std::make_tuple(pos.shift(), newn, ts, tail);
 1042|    765|                    }
 1043|    765|                }
 1044|  1.24k|            }
 1045|  1.24k|            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.24k|        }
 1055|  1.86k|    }
_ZN5immer6detail4rbts23slice_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb1ELb0EE10visit_leafIRNS1_13full_leaf_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_mNSA_5applyIS7_E4type4editE:
 1059|  1.59k|    {
 1060|  1.59k|        auto old_tail_size = pos.count();
 1061|  1.59k|        auto new_tail_size = pos.index(last) + 1;
 1062|  1.59k|        auto node          = pos.node();
 1063|  1.59k|        auto mutate        = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (1063:30): [Folded, False: 1.59k]
  |  Branch (1063:42): [True: 0, False: 0]
  ------------------
 1064|  1.59k|        if (new_tail_size == old_tail_size) {
  ------------------
  |  Branch (1064:13): [True: 823, False: 773]
  ------------------
 1065|    823|            if (!Mutating)
  ------------------
  |  Branch (1065:17): [True: 823, Folded]
  ------------------
 1066|    823|                node->inc();
 1067|    823|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1068|    823|        } else if (mutate) {
  ------------------
  |  Branch (1068:20): [True: 0, False: 773]
  ------------------
 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|    773|        } else {
 1073|    773|            auto new_tail = node_t::copy_leaf_e(e, node, new_tail_size);
 1074|    773|            if (Mutating)
  ------------------
  |  Branch (1074:17): [Folded, False: 773]
  ------------------
 1075|      0|                pos.visit(dec_visitor{});
 1076|    773|            return std::make_tuple(0, nullptr, new_tail_size, new_tail);
 1077|    773|        }
 1078|  1.59k|    }
_ZN5immer6detail4rbts23slice_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb1ELb0EE13visit_regularIRNS1_8full_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_mNSA_5applyIS7_E4type4editE:
  991|  2.20k|    {
  992|  2.20k|        auto idx    = pos.index(last);
  993|  2.20k|        auto node   = pos.node();
  994|  2.20k|        auto mutate = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (994:23): [Folded, False: 2.20k]
  |  Branch (994:35): [True: 0, False: 0]
  ------------------
  995|  2.20k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (995:13): [True: 2.20k, Folded]
  |  Branch (995:25): [True: 881, False: 1.32k]
  ------------------
  996|    881|            auto res = mutate ? pos.towards_oh(this_t{}, last, idx, e)
  ------------------
  |  Branch (996:24): [True: 0, False: 881]
  ------------------
  997|    881|                              : pos.towards_oh(no_mut_t{}, last, idx, e);
  998|    881|            if (Mutating)
  ------------------
  |  Branch (998:17): [Folded, False: 881]
  ------------------
  999|      0|                pos.visit(dec_right_visitor{}, count_t{1});
 1000|    881|            return res;
 1001|  1.32k|        } else {
 1002|  1.32k|            using std::get;
 1003|  1.32k|            auto subs =
 1004|  1.32k|                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
  ------------------
  |  Branch (1004:17): [True: 0, False: 1.32k]
  ------------------
 1005|  1.32k|                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
 1006|  1.32k|            auto next = get<1>(subs);
 1007|  1.32k|            auto ts   = get<2>(subs);
 1008|  1.32k|            auto tail = get<3>(subs);
 1009|  1.32k|            IMMER_TRY {
  ------------------
  |  |   49|  1.32k|#define IMMER_TRY try
  ------------------
 1010|  1.32k|                if (next) {
  ------------------
  |  Branch (1010:21): [True: 251, False: 1.07k]
  ------------------
 1011|    251|                    if (mutate) {
  ------------------
  |  Branch (1011:25): [True: 0, False: 251]
  ------------------
 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|    251|                    } else {
 1016|    251|                        auto newn          = node_t::copy_inner_e(e, node, idx);
 1017|    251|                        newn->inner()[idx] = next;
 1018|    251|                        if (Mutating)
  ------------------
  |  Branch (1018:29): [Folded, False: 251]
  ------------------
 1019|      0|                            pos.visit(dec_visitor{});
 1020|    251|                        return std::make_tuple(pos.shift(), newn, ts, tail);
 1021|    251|                    }
 1022|  1.07k|                } else if (idx == 0) {
  ------------------
  |  Branch (1022:28): [True: 0, False: 1.07k]
  ------------------
 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|  1.07k|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (1026:28): [True: 1.07k, Folded]
  |  Branch (1026:40): [True: 738, False: 332]
  |  Branch (1026:52): [True: 262, False: 476]
  ------------------
 1027|    262|                    auto newn = pos.node()->inner()[0];
 1028|    262|                    if (!mutate)
  ------------------
  |  Branch (1028:25): [True: 262, False: 0]
  ------------------
 1029|    262|                        newn->inc();
 1030|    262|                    if (Mutating)
  ------------------
  |  Branch (1030:25): [Folded, False: 262]
  ------------------
 1031|      0|                        pos.visit(dec_right_visitor{}, count_t{2});
 1032|    262|                    return std::make_tuple(pos.shift() - B, newn, ts, tail);
 1033|    808|                } else {
 1034|    808|                    if (mutate) {
  ------------------
  |  Branch (1034:25): [True: 0, False: 808]
  ------------------
 1035|      0|                        pos.each_right(dec_visitor{}, idx + 1);
 1036|      0|                        return std::make_tuple(pos.shift(), node, ts, tail);
 1037|    808|                    } else {
 1038|    808|                        auto newn = node_t::copy_inner_e(e, node, idx);
 1039|    808|                        if (Mutating)
  ------------------
  |  Branch (1039:29): [Folded, False: 808]
  ------------------
 1040|      0|                            pos.visit(dec_visitor{});
 1041|    808|                        return std::make_tuple(pos.shift(), newn, ts, tail);
 1042|    808|                    }
 1043|    808|                }
 1044|  1.32k|            }
 1045|  1.32k|            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.32k|        }
 1055|  2.20k|    }
_ZN5immer6detail4rbts23slice_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb0ELb1EE10visit_leafIRNS1_13full_leaf_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_mNSA_5applyIS7_E4type4editE:
 1059|  5.67k|    {
 1060|  5.67k|        auto old_tail_size = pos.count();
 1061|  5.67k|        auto new_tail_size = pos.index(last) + 1;
 1062|  5.67k|        auto node          = pos.node();
 1063|  5.67k|        auto mutate        = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (1063:30): [True: 5.67k, Folded]
  |  Branch (1063:42): [True: 1.20k, False: 4.47k]
  ------------------
 1064|  5.67k|        if (new_tail_size == old_tail_size) {
  ------------------
  |  Branch (1064:13): [True: 1.25k, False: 4.42k]
  ------------------
 1065|  1.25k|            if (!Mutating)
  ------------------
  |  Branch (1065:17): [Folded, False: 1.25k]
  ------------------
 1066|      0|                node->inc();
 1067|  1.25k|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1068|  4.42k|        } else if (mutate) {
  ------------------
  |  Branch (1068:20): [True: 1.13k, False: 3.29k]
  ------------------
 1069|  1.13k|            detail::destroy_n(node->leaf() + new_tail_size,
 1070|  1.13k|                              old_tail_size - new_tail_size);
 1071|  1.13k|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1072|  3.29k|        } else {
 1073|  3.29k|            auto new_tail = node_t::copy_leaf_e(e, node, new_tail_size);
 1074|  3.29k|            if (Mutating)
  ------------------
  |  Branch (1074:17): [True: 3.29k, Folded]
  ------------------
 1075|  3.29k|                pos.visit(dec_visitor{});
 1076|  3.29k|            return std::make_tuple(0, nullptr, new_tail_size, new_tail);
 1077|  3.29k|        }
 1078|  5.67k|    }
_ZN5immer6detail4rbts23slice_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb0ELb1EE13visit_regularIRNS1_8full_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_mNSA_5applyIS7_E4type4editE:
  991|  4.49k|    {
  992|  4.49k|        auto idx    = pos.index(last);
  993|  4.49k|        auto node   = pos.node();
  994|  4.49k|        auto mutate = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (994:23): [True: 4.49k, Folded]
  |  Branch (994:35): [True: 2.19k, False: 2.30k]
  ------------------
  995|  4.49k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (995:13): [Folded, False: 4.49k]
  |  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|  4.49k|        } else {
 1002|  4.49k|            using std::get;
 1003|  4.49k|            auto subs =
 1004|  4.49k|                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
  ------------------
  |  Branch (1004:17): [True: 2.19k, False: 2.30k]
  ------------------
 1005|  4.49k|                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
 1006|  4.49k|            auto next = get<1>(subs);
 1007|  4.49k|            auto ts   = get<2>(subs);
 1008|  4.49k|            auto tail = get<3>(subs);
 1009|  4.49k|            IMMER_TRY {
  ------------------
  |  |   49|  4.49k|#define IMMER_TRY try
  ------------------
 1010|  4.49k|                if (next) {
  ------------------
  |  Branch (1010:21): [True: 756, False: 3.73k]
  ------------------
 1011|    756|                    if (mutate) {
  ------------------
  |  Branch (1011:25): [True: 518, False: 238]
  ------------------
 1012|    518|                        node->inner()[idx] = next;
 1013|    518|                        pos.each_right(dec_visitor{}, idx + 1);
 1014|    518|                        return std::make_tuple(pos.shift(), node, ts, tail);
 1015|    518|                    } else {
 1016|    238|                        auto newn          = node_t::copy_inner_e(e, node, idx);
 1017|    238|                        newn->inner()[idx] = next;
 1018|    238|                        if (Mutating)
  ------------------
  |  Branch (1018:29): [True: 238, Folded]
  ------------------
 1019|    238|                            pos.visit(dec_visitor{});
 1020|    238|                        return std::make_tuple(pos.shift(), newn, ts, tail);
 1021|    238|                    }
 1022|  3.73k|                } else if (idx == 0) {
  ------------------
  |  Branch (1022:28): [True: 1.38k, False: 2.35k]
  ------------------
 1023|  1.38k|                    if (Mutating)
  ------------------
  |  Branch (1023:25): [True: 1.38k, Folded]
  ------------------
 1024|  1.38k|                        pos.visit(dec_right_visitor{}, count_t{1});
 1025|  1.38k|                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
 1026|  2.35k|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (1026:28): [Folded, False: 2.35k]
  |  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|  2.35k|                } else {
 1034|  2.35k|                    if (mutate) {
  ------------------
  |  Branch (1034:25): [True: 1.13k, False: 1.22k]
  ------------------
 1035|  1.13k|                        pos.each_right(dec_visitor{}, idx + 1);
 1036|  1.13k|                        return std::make_tuple(pos.shift(), node, ts, tail);
 1037|  1.22k|                    } else {
 1038|  1.22k|                        auto newn = node_t::copy_inner_e(e, node, idx);
 1039|  1.22k|                        if (Mutating)
  ------------------
  |  Branch (1039:29): [True: 1.22k, Folded]
  ------------------
 1040|  1.22k|                            pos.visit(dec_visitor{});
 1041|  1.22k|                        return std::make_tuple(pos.shift(), newn, ts, tail);
 1042|  1.22k|                    }
 1043|  2.35k|                }
 1044|  4.49k|            }
 1045|  4.49k|            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.49k|        }
 1055|  4.49k|    }
_ZN5immer6detail4rbts17dec_right_visitor13visit_regularIRNS1_8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEEEvOT_j:
  878|  3.36k|    {
  879|  3.36k|        using node_t = node_type<Pos>;
  880|  3.36k|        auto node    = p.node();
  881|  3.36k|        if (node->dec()) {
  ------------------
  |  Branch (881:13): [True: 1.86k, False: 1.50k]
  ------------------
  882|  1.86k|            p.each_right(dec_t{}, idx);
  883|  1.86k|            node_t::delete_inner(node, p.count());
  884|  1.86k|        }
  885|  3.36k|    }
_ZN5immer6detail4rbts23slice_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb0ELb0EE10visit_leafIRNS1_13full_leaf_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_mNSA_5applyIS7_E4type4editE:
 1059|  10.3k|    {
 1060|  10.3k|        auto old_tail_size = pos.count();
 1061|  10.3k|        auto new_tail_size = pos.index(last) + 1;
 1062|  10.3k|        auto node          = pos.node();
 1063|  10.3k|        auto mutate        = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (1063:30): [Folded, False: 10.3k]
  |  Branch (1063:42): [True: 0, False: 0]
  ------------------
 1064|  10.3k|        if (new_tail_size == old_tail_size) {
  ------------------
  |  Branch (1064:13): [True: 2.97k, False: 7.40k]
  ------------------
 1065|  2.97k|            if (!Mutating)
  ------------------
  |  Branch (1065:17): [True: 2.97k, Folded]
  ------------------
 1066|  2.97k|                node->inc();
 1067|  2.97k|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1068|  7.40k|        } else if (mutate) {
  ------------------
  |  Branch (1068:20): [True: 0, False: 7.40k]
  ------------------
 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|  7.40k|        } else {
 1073|  7.40k|            auto new_tail = node_t::copy_leaf_e(e, node, new_tail_size);
 1074|  7.40k|            if (Mutating)
  ------------------
  |  Branch (1074:17): [Folded, False: 7.40k]
  ------------------
 1075|      0|                pos.visit(dec_visitor{});
 1076|  7.40k|            return std::make_tuple(0, nullptr, new_tail_size, new_tail);
 1077|  7.40k|        }
 1078|  10.3k|    }
_ZN5immer6detail4rbts23slice_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb0ELb0EE13visit_regularIRNS1_8full_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_mNSA_5applyIS7_E4type4editE:
  991|  3.27k|    {
  992|  3.27k|        auto idx    = pos.index(last);
  993|  3.27k|        auto node   = pos.node();
  994|  3.27k|        auto mutate = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (994:23): [Folded, False: 3.27k]
  |  Branch (994:35): [True: 0, False: 0]
  ------------------
  995|  3.27k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (995:13): [Folded, False: 3.27k]
  |  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|  3.27k|        } else {
 1002|  3.27k|            using std::get;
 1003|  3.27k|            auto subs =
 1004|  3.27k|                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
  ------------------
  |  Branch (1004:17): [True: 0, False: 3.27k]
  ------------------
 1005|  3.27k|                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
 1006|  3.27k|            auto next = get<1>(subs);
 1007|  3.27k|            auto ts   = get<2>(subs);
 1008|  3.27k|            auto tail = get<3>(subs);
 1009|  3.27k|            IMMER_TRY {
  ------------------
  |  |   49|  3.27k|#define IMMER_TRY try
  ------------------
 1010|  3.27k|                if (next) {
  ------------------
  |  Branch (1010:21): [True: 341, False: 2.93k]
  ------------------
 1011|    341|                    if (mutate) {
  ------------------
  |  Branch (1011:25): [True: 0, False: 341]
  ------------------
 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|    341|                    } else {
 1016|    341|                        auto newn          = node_t::copy_inner_e(e, node, idx);
 1017|    341|                        newn->inner()[idx] = next;
 1018|    341|                        if (Mutating)
  ------------------
  |  Branch (1018:29): [Folded, False: 341]
  ------------------
 1019|      0|                            pos.visit(dec_visitor{});
 1020|    341|                        return std::make_tuple(pos.shift(), newn, ts, tail);
 1021|    341|                    }
 1022|  2.93k|                } else if (idx == 0) {
  ------------------
  |  Branch (1022:28): [True: 1.18k, False: 1.74k]
  ------------------
 1023|  1.18k|                    if (Mutating)
  ------------------
  |  Branch (1023:25): [Folded, False: 1.18k]
  ------------------
 1024|      0|                        pos.visit(dec_right_visitor{}, count_t{1});
 1025|  1.18k|                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
 1026|  1.74k|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (1026:28): [Folded, False: 1.74k]
  |  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|  1.74k|                } else {
 1034|  1.74k|                    if (mutate) {
  ------------------
  |  Branch (1034:25): [True: 0, False: 1.74k]
  ------------------
 1035|      0|                        pos.each_right(dec_visitor{}, idx + 1);
 1036|      0|                        return std::make_tuple(pos.shift(), node, ts, tail);
 1037|  1.74k|                    } else {
 1038|  1.74k|                        auto newn = node_t::copy_inner_e(e, node, idx);
 1039|  1.74k|                        if (Mutating)
  ------------------
  |  Branch (1039:29): [Folded, False: 1.74k]
  ------------------
 1040|      0|                            pos.visit(dec_visitor{});
 1041|  1.74k|                        return std::make_tuple(pos.shift(), newn, ts, tail);
 1042|  1.74k|                    }
 1043|  1.74k|                }
 1044|  3.27k|            }
 1045|  3.27k|            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.27k|        }
 1055|  3.27k|    }
_ZN5immer6detail4rbts23slice_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb1ELb0EE10visit_leafIRNS1_8leaf_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_mNSA_5applyIS7_E4type4editE:
 1059|    417|    {
 1060|    417|        auto old_tail_size = pos.count();
 1061|    417|        auto new_tail_size = pos.index(last) + 1;
 1062|    417|        auto node          = pos.node();
 1063|    417|        auto mutate        = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (1063:30): [Folded, False: 417]
  |  Branch (1063:42): [True: 0, False: 0]
  ------------------
 1064|    417|        if (new_tail_size == old_tail_size) {
  ------------------
  |  Branch (1064:13): [True: 201, False: 216]
  ------------------
 1065|    201|            if (!Mutating)
  ------------------
  |  Branch (1065:17): [True: 201, Folded]
  ------------------
 1066|    201|                node->inc();
 1067|    201|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1068|    216|        } else if (mutate) {
  ------------------
  |  Branch (1068:20): [True: 0, False: 216]
  ------------------
 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|    216|        } else {
 1073|    216|            auto new_tail = node_t::copy_leaf_e(e, node, new_tail_size);
 1074|    216|            if (Mutating)
  ------------------
  |  Branch (1074:17): [Folded, False: 216]
  ------------------
 1075|      0|                pos.visit(dec_visitor{});
 1076|    216|            return std::make_tuple(0, nullptr, new_tail_size, new_tail);
 1077|    216|        }
 1078|    417|    }
_ZN5immer6detail4rbts23slice_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb0ELb1EE10visit_leafIRNS1_8leaf_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_mNSA_5applyIS7_E4type4editE:
 1059|  2.52k|    {
 1060|  2.52k|        auto old_tail_size = pos.count();
 1061|  2.52k|        auto new_tail_size = pos.index(last) + 1;
 1062|  2.52k|        auto node          = pos.node();
 1063|  2.52k|        auto mutate        = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (1063:30): [True: 2.52k, Folded]
  |  Branch (1063:42): [True: 318, False: 2.20k]
  ------------------
 1064|  2.52k|        if (new_tail_size == old_tail_size) {
  ------------------
  |  Branch (1064:13): [True: 237, False: 2.28k]
  ------------------
 1065|    237|            if (!Mutating)
  ------------------
  |  Branch (1065:17): [Folded, False: 237]
  ------------------
 1066|      0|                node->inc();
 1067|    237|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1068|  2.28k|        } else if (mutate) {
  ------------------
  |  Branch (1068:20): [True: 300, False: 1.98k]
  ------------------
 1069|    300|            detail::destroy_n(node->leaf() + new_tail_size,
 1070|    300|                              old_tail_size - new_tail_size);
 1071|    300|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1072|  1.98k|        } else {
 1073|  1.98k|            auto new_tail = node_t::copy_leaf_e(e, node, new_tail_size);
 1074|  1.98k|            if (Mutating)
  ------------------
  |  Branch (1074:17): [True: 1.98k, Folded]
  ------------------
 1075|  1.98k|                pos.visit(dec_visitor{});
 1076|  1.98k|            return std::make_tuple(0, nullptr, new_tail_size, new_tail);
 1077|  1.98k|        }
 1078|  2.52k|    }
_ZN5immer6detail4rbts23slice_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb0ELb1EE13visit_regularIRNS1_11regular_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_mNSA_5applyIS7_E4type4editE:
  991|  5.95k|    {
  992|  5.95k|        auto idx    = pos.index(last);
  993|  5.95k|        auto node   = pos.node();
  994|  5.95k|        auto mutate = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (994:23): [True: 5.95k, Folded]
  |  Branch (994:35): [True: 5.32k, False: 622]
  ------------------
  995|  5.95k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (995:13): [Folded, False: 5.95k]
  |  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|  5.95k|        } else {
 1002|  5.95k|            using std::get;
 1003|  5.95k|            auto subs =
 1004|  5.95k|                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
  ------------------
  |  Branch (1004:17): [True: 5.32k, False: 622]
  ------------------
 1005|  5.95k|                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
 1006|  5.95k|            auto next = get<1>(subs);
 1007|  5.95k|            auto ts   = get<2>(subs);
 1008|  5.95k|            auto tail = get<3>(subs);
 1009|  5.95k|            IMMER_TRY {
  ------------------
  |  |   49|  5.95k|#define IMMER_TRY try
  ------------------
 1010|  5.95k|                if (next) {
  ------------------
  |  Branch (1010:21): [True: 1.62k, False: 4.33k]
  ------------------
 1011|  1.62k|                    if (mutate) {
  ------------------
  |  Branch (1011:25): [True: 1.41k, False: 202]
  ------------------
 1012|  1.41k|                        node->inner()[idx] = next;
 1013|  1.41k|                        pos.each_right(dec_visitor{}, idx + 1);
 1014|  1.41k|                        return std::make_tuple(pos.shift(), node, ts, tail);
 1015|  1.41k|                    } else {
 1016|    202|                        auto newn          = node_t::copy_inner_e(e, node, idx);
 1017|    202|                        newn->inner()[idx] = next;
 1018|    202|                        if (Mutating)
  ------------------
  |  Branch (1018:29): [True: 202, Folded]
  ------------------
 1019|    202|                            pos.visit(dec_visitor{});
 1020|    202|                        return std::make_tuple(pos.shift(), newn, ts, tail);
 1021|    202|                    }
 1022|  4.33k|                } else if (idx == 0) {
  ------------------
  |  Branch (1022:28): [True: 3.57k, False: 753]
  ------------------
 1023|  3.57k|                    if (Mutating)
  ------------------
  |  Branch (1023:25): [True: 3.57k, Folded]
  ------------------
 1024|  3.57k|                        pos.visit(dec_right_visitor{}, count_t{1});
 1025|  3.57k|                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
 1026|  3.57k|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (1026:28): [Folded, False: 753]
  |  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|    753|                } else {
 1034|    753|                    if (mutate) {
  ------------------
  |  Branch (1034:25): [True: 538, False: 215]
  ------------------
 1035|    538|                        pos.each_right(dec_visitor{}, idx + 1);
 1036|    538|                        return std::make_tuple(pos.shift(), node, ts, tail);
 1037|    538|                    } else {
 1038|    215|                        auto newn = node_t::copy_inner_e(e, node, idx);
 1039|    215|                        if (Mutating)
  ------------------
  |  Branch (1039:29): [True: 215, Folded]
  ------------------
 1040|    215|                            pos.visit(dec_visitor{});
 1041|    215|                        return std::make_tuple(pos.shift(), newn, ts, tail);
 1042|    215|                    }
 1043|    753|                }
 1044|  5.95k|            }
 1045|  5.95k|            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|  5.95k|        }
 1055|  5.95k|    }
_ZN5immer6detail4rbts17dec_right_visitor13visit_regularIRNS1_11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEEEvOT_j:
  878|  3.57k|    {
  879|  3.57k|        using node_t = node_type<Pos>;
  880|  3.57k|        auto node    = p.node();
  881|  3.57k|        if (node->dec()) {
  ------------------
  |  Branch (881:13): [True: 3.37k, False: 205]
  ------------------
  882|  3.37k|            p.each_right(dec_t{}, idx);
  883|  3.37k|            node_t::delete_inner(node, p.count());
  884|  3.37k|        }
  885|  3.57k|    }
_ZN5immer6detail4rbts23slice_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb0ELb0EE10visit_leafIRNS1_8leaf_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): [Folded, False: 2.51k]
  |  Branch (1063:42): [True: 0, False: 0]
  ------------------
 1064|  2.51k|        if (new_tail_size == old_tail_size) {
  ------------------
  |  Branch (1064:13): [True: 743, False: 1.76k]
  ------------------
 1065|    743|            if (!Mutating)
  ------------------
  |  Branch (1065:17): [True: 743, Folded]
  ------------------
 1066|    743|                node->inc();
 1067|    743|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1068|  1.76k|        } else if (mutate) {
  ------------------
  |  Branch (1068:20): [True: 0, False: 1.76k]
  ------------------
 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.76k|        } else {
 1073|  1.76k|            auto new_tail = node_t::copy_leaf_e(e, node, new_tail_size);
 1074|  1.76k|            if (Mutating)
  ------------------
  |  Branch (1074:17): [Folded, False: 1.76k]
  ------------------
 1075|      0|                pos.visit(dec_visitor{});
 1076|  1.76k|            return std::make_tuple(0, nullptr, new_tail_size, new_tail);
 1077|  1.76k|        }
 1078|  2.51k|    }
_ZN5immer6detail4rbts23slice_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb0ELb0EE13visit_regularIRNS1_11regular_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_mNSA_5applyIS7_E4type4editE:
  991|  3.31k|    {
  992|  3.31k|        auto idx    = pos.index(last);
  993|  3.31k|        auto node   = pos.node();
  994|  3.31k|        auto mutate = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (994:23): [Folded, False: 3.31k]
  |  Branch (994:35): [True: 0, False: 0]
  ------------------
  995|  3.31k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (995:13): [Folded, False: 3.31k]
  |  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|  3.31k|        } else {
 1002|  3.31k|            using std::get;
 1003|  3.31k|            auto subs =
 1004|  3.31k|                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
  ------------------
  |  Branch (1004:17): [True: 0, False: 3.31k]
  ------------------
 1005|  3.31k|                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
 1006|  3.31k|            auto next = get<1>(subs);
 1007|  3.31k|            auto ts   = get<2>(subs);
 1008|  3.31k|            auto tail = get<3>(subs);
 1009|  3.31k|            IMMER_TRY {
  ------------------
  |  |   49|  3.31k|#define IMMER_TRY try
  ------------------
 1010|  3.31k|                if (next) {
  ------------------
  |  Branch (1010:21): [True: 396, False: 2.91k]
  ------------------
 1011|    396|                    if (mutate) {
  ------------------
  |  Branch (1011:25): [True: 0, False: 396]
  ------------------
 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|    396|                    } else {
 1016|    396|                        auto newn          = node_t::copy_inner_e(e, node, idx);
 1017|    396|                        newn->inner()[idx] = next;
 1018|    396|                        if (Mutating)
  ------------------
  |  Branch (1018:29): [Folded, False: 396]
  ------------------
 1019|      0|                            pos.visit(dec_visitor{});
 1020|    396|                        return std::make_tuple(pos.shift(), newn, ts, tail);
 1021|    396|                    }
 1022|  2.91k|                } else if (idx == 0) {
  ------------------
  |  Branch (1022:28): [True: 1.86k, False: 1.05k]
  ------------------
 1023|  1.86k|                    if (Mutating)
  ------------------
  |  Branch (1023:25): [Folded, False: 1.86k]
  ------------------
 1024|      0|                        pos.visit(dec_right_visitor{}, count_t{1});
 1025|  1.86k|                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
 1026|  1.86k|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (1026:28): [Folded, False: 1.05k]
  |  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|  1.05k|                } else {
 1034|  1.05k|                    if (mutate) {
  ------------------
  |  Branch (1034:25): [True: 0, False: 1.05k]
  ------------------
 1035|      0|                        pos.each_right(dec_visitor{}, idx + 1);
 1036|      0|                        return std::make_tuple(pos.shift(), node, ts, tail);
 1037|  1.05k|                    } else {
 1038|  1.05k|                        auto newn = node_t::copy_inner_e(e, node, idx);
 1039|  1.05k|                        if (Mutating)
  ------------------
  |  Branch (1039:29): [Folded, False: 1.05k]
  ------------------
 1040|      0|                            pos.visit(dec_visitor{});
 1041|  1.05k|                        return std::make_tuple(pos.shift(), newn, ts, tail);
 1042|  1.05k|                    }
 1043|  1.05k|                }
 1044|  3.31k|            }
 1045|  3.31k|            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.31k|        }
 1055|  3.31k|    }
_ZN5immer6detail4rbts17dec_right_visitor13visit_relaxedIRNS1_11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEEEvOT_j:
  867|  53.3k|    {
  868|  53.3k|        using node_t = node_type<Pos>;
  869|  53.3k|        auto node    = p.node();
  870|  53.3k|        if (node->dec()) {
  ------------------
  |  Branch (870:13): [True: 45.9k, False: 7.37k]
  ------------------
  871|  45.9k|            p.each_right(dec_t{}, idx);
  872|  45.9k|            node_t::delete_inner_r(node, p.count());
  873|  45.9k|        }
  874|  53.3k|    }
_ZN5immer6detail4rbts23slice_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb0ELb1EE10visit_leafIRNS1_12leaf_sub_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_mNSA_5applyIS7_E4type4editE:
 1059|  4.58k|    {
 1060|  4.58k|        auto old_tail_size = pos.count();
 1061|  4.58k|        auto new_tail_size = pos.index(last) + 1;
 1062|  4.58k|        auto node          = pos.node();
 1063|  4.58k|        auto mutate        = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (1063:30): [True: 4.58k, Folded]
  |  Branch (1063:42): [True: 1.26k, False: 3.31k]
  ------------------
 1064|  4.58k|        if (new_tail_size == old_tail_size) {
  ------------------
  |  Branch (1064:13): [True: 2.03k, False: 2.54k]
  ------------------
 1065|  2.03k|            if (!Mutating)
  ------------------
  |  Branch (1065:17): [Folded, False: 2.03k]
  ------------------
 1066|      0|                node->inc();
 1067|  2.03k|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1068|  2.54k|        } else if (mutate) {
  ------------------
  |  Branch (1068:20): [True: 1.14k, False: 1.39k]
  ------------------
 1069|  1.14k|            detail::destroy_n(node->leaf() + new_tail_size,
 1070|  1.14k|                              old_tail_size - new_tail_size);
 1071|  1.14k|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1072|  1.39k|        } else {
 1073|  1.39k|            auto new_tail = node_t::copy_leaf_e(e, node, new_tail_size);
 1074|  1.39k|            if (Mutating)
  ------------------
  |  Branch (1074:17): [True: 1.39k, Folded]
  ------------------
 1075|  1.39k|                pos.visit(dec_visitor{});
 1076|  1.39k|            return std::make_tuple(0, nullptr, new_tail_size, new_tail);
 1077|  1.39k|        }
 1078|  4.58k|    }
_ZN5immer6detail4rbts23slice_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb0ELb1EE13visit_relaxedIRNS1_11relaxed_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_mNSA_5applyIS7_E4type4editE:
  913|  12.9k|    {
  914|  12.9k|        auto idx    = pos.index(last);
  915|  12.9k|        auto node   = pos.node();
  916|  12.9k|        auto mutate = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (916:23): [True: 12.9k, Folded]
  |  Branch (916:35): [True: 9.29k, False: 3.67k]
  ------------------
  917|  12.9k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (917:13): [Folded, False: 12.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|  12.9k|        } else {
  924|  12.9k|            using std::get;
  925|  12.9k|            auto subs =
  926|  12.9k|                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
  ------------------
  |  Branch (926:17): [True: 9.29k, False: 3.67k]
  ------------------
  927|  12.9k|                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
  928|  12.9k|            auto next = get<1>(subs);
  929|  12.9k|            auto ts   = get<2>(subs);
  930|  12.9k|            auto tail = get<3>(subs);
  931|  12.9k|            IMMER_TRY {
  ------------------
  |  |   49|  12.9k|#define IMMER_TRY try
  ------------------
  932|  12.9k|                if (next) {
  ------------------
  |  Branch (932:21): [True: 6.06k, False: 6.90k]
  ------------------
  933|  6.06k|                    if (mutate) {
  ------------------
  |  Branch (933:25): [True: 4.34k, False: 1.72k]
  ------------------
  934|  4.34k|                        auto nodr = node->ensure_mutable_relaxed_n(e, idx);
  935|  4.34k|                        pos.each_right(dec_visitor{}, idx + 1);
  936|  4.34k|                        node->inner()[idx] = next;
  937|  4.34k|                        nodr->d.sizes[idx] = last + 1 - ts;
  938|  4.34k|                        nodr->d.count      = idx + 1;
  939|  4.34k|                        assert(nodr->d.sizes[idx]);
  ------------------
  |  Branch (939:25): [True: 4.34k, False: 0]
  ------------------
  940|  4.34k|                        return std::make_tuple(pos.shift(), node, ts, tail);
  941|  4.34k|                    } else {
  942|  1.72k|                        auto newn = node_t::copy_inner_r_e(e, node, idx);
  943|  1.72k|                        auto newr = newn->relaxed();
  944|  1.72k|                        newn->inner()[idx] = next;
  945|  1.72k|                        newr->d.sizes[idx] = last + 1 - ts;
  946|  1.72k|                        newr->d.count      = idx + 1;
  947|  1.72k|                        assert(newr->d.sizes[idx]);
  ------------------
  |  Branch (947:25): [True: 1.72k, False: 0]
  ------------------
  948|  1.72k|                        if (Mutating)
  ------------------
  |  Branch (948:29): [True: 1.72k, Folded]
  ------------------
  949|  1.72k|                            pos.visit(dec_visitor{});
  950|  1.72k|                        return std::make_tuple(pos.shift(), newn, ts, tail);
  951|  1.72k|                    }
  952|  6.90k|                } else if (idx == 0) {
  ------------------
  |  Branch (952:28): [True: 3.83k, False: 3.07k]
  ------------------
  953|  3.83k|                    if (Mutating)
  ------------------
  |  Branch (953:25): [True: 3.83k, Folded]
  ------------------
  954|  3.83k|                        pos.visit(dec_right_visitor{}, count_t{1});
  955|  3.83k|                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
  956|  3.83k|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (956:28): [Folded, False: 3.07k]
  |  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.07k|                } else {
  964|  3.07k|                    if (mutate) {
  ------------------
  |  Branch (964:25): [True: 2.44k, False: 630]
  ------------------
  965|  2.44k|                        pos.each_right(dec_visitor{}, idx + 1);
  966|  2.44k|                        node->ensure_mutable_relaxed_n(e, idx)->d.count = idx;
  967|  2.44k|                        return std::make_tuple(pos.shift(), node, ts, tail);
  968|  2.44k|                    } else {
  969|    630|                        auto newn = node_t::copy_inner_r_e(e, node, idx);
  970|    630|                        if (Mutating)
  ------------------
  |  Branch (970:29): [True: 630, Folded]
  ------------------
  971|    630|                            pos.visit(dec_visitor{});
  972|    630|                        return std::make_tuple(pos.shift(), newn, ts, tail);
  973|    630|                    }
  974|  3.07k|                }
  975|  12.9k|            }
  976|  12.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|  12.9k|        }
  987|  12.9k|    }
_ZN5immer6detail4rbts23slice_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb0ELb1EE13visit_regularIRNS1_15regular_sub_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_mNSA_5applyIS7_E4type4editE:
  991|  7.55k|    {
  992|  7.55k|        auto idx    = pos.index(last);
  993|  7.55k|        auto node   = pos.node();
  994|  7.55k|        auto mutate = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (994:23): [True: 7.55k, Folded]
  |  Branch (994:35): [True: 6.50k, False: 1.04k]
  ------------------
  995|  7.55k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (995:13): [Folded, False: 7.55k]
  |  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|  7.55k|        } else {
 1002|  7.55k|            using std::get;
 1003|  7.55k|            auto subs =
 1004|  7.55k|                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
  ------------------
  |  Branch (1004:17): [True: 6.50k, False: 1.04k]
  ------------------
 1005|  7.55k|                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
 1006|  7.55k|            auto next = get<1>(subs);
 1007|  7.55k|            auto ts   = get<2>(subs);
 1008|  7.55k|            auto tail = get<3>(subs);
 1009|  7.55k|            IMMER_TRY {
  ------------------
  |  |   49|  7.55k|#define IMMER_TRY try
  ------------------
 1010|  7.55k|                if (next) {
  ------------------
  |  Branch (1010:21): [True: 2.78k, False: 4.76k]
  ------------------
 1011|  2.78k|                    if (mutate) {
  ------------------
  |  Branch (1011:25): [True: 2.47k, False: 319]
  ------------------
 1012|  2.47k|                        node->inner()[idx] = next;
 1013|  2.47k|                        pos.each_right(dec_visitor{}, idx + 1);
 1014|  2.47k|                        return std::make_tuple(pos.shift(), node, ts, tail);
 1015|  2.47k|                    } else {
 1016|    319|                        auto newn          = node_t::copy_inner_e(e, node, idx);
 1017|    319|                        newn->inner()[idx] = next;
 1018|    319|                        if (Mutating)
  ------------------
  |  Branch (1018:29): [True: 319, Folded]
  ------------------
 1019|    319|                            pos.visit(dec_visitor{});
 1020|    319|                        return std::make_tuple(pos.shift(), newn, ts, tail);
 1021|    319|                    }
 1022|  4.76k|                } else if (idx == 0) {
  ------------------
  |  Branch (1022:28): [True: 1.18k, False: 3.57k]
  ------------------
 1023|  1.18k|                    if (Mutating)
  ------------------
  |  Branch (1023:25): [True: 1.18k, Folded]
  ------------------
 1024|  1.18k|                        pos.visit(dec_right_visitor{}, count_t{1});
 1025|  1.18k|                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
 1026|  3.57k|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (1026:28): [Folded, False: 3.57k]
  |  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|  3.57k|                } else {
 1034|  3.57k|                    if (mutate) {
  ------------------
  |  Branch (1034:25): [True: 3.20k, False: 374]
  ------------------
 1035|  3.20k|                        pos.each_right(dec_visitor{}, idx + 1);
 1036|  3.20k|                        return std::make_tuple(pos.shift(), node, ts, tail);
 1037|  3.20k|                    } else {
 1038|    374|                        auto newn = node_t::copy_inner_e(e, node, idx);
 1039|    374|                        if (Mutating)
  ------------------
  |  Branch (1039:29): [True: 374, Folded]
  ------------------
 1040|    374|                            pos.visit(dec_visitor{});
 1041|    374|                        return std::make_tuple(pos.shift(), newn, ts, tail);
 1042|    374|                    }
 1043|  3.57k|                }
 1044|  7.55k|            }
 1045|  7.55k|            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.55k|        }
 1055|  7.55k|    }
_ZN5immer6detail4rbts17dec_right_visitor13visit_regularIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEEEvOT_j:
  878|  10.6k|    {
  879|  10.6k|        using node_t = node_type<Pos>;
  880|  10.6k|        auto node    = p.node();
  881|  10.6k|        if (node->dec()) {
  ------------------
  |  Branch (881:13): [True: 7.51k, False: 3.17k]
  ------------------
  882|  7.51k|            p.each_right(dec_t{}, idx);
  883|  7.51k|            node_t::delete_inner(node, p.count());
  884|  7.51k|        }
  885|  10.6k|    }
_ZN5immer6detail4rbts23slice_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb0ELb0EE10visit_leafIRNS1_12leaf_sub_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_mNSA_5applyIS7_E4type4editE:
 1059|  6.54k|    {
 1060|  6.54k|        auto old_tail_size = pos.count();
 1061|  6.54k|        auto new_tail_size = pos.index(last) + 1;
 1062|  6.54k|        auto node          = pos.node();
 1063|  6.54k|        auto mutate        = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (1063:30): [Folded, False: 6.54k]
  |  Branch (1063:42): [True: 0, False: 0]
  ------------------
 1064|  6.54k|        if (new_tail_size == old_tail_size) {
  ------------------
  |  Branch (1064:13): [True: 2.47k, False: 4.07k]
  ------------------
 1065|  2.47k|            if (!Mutating)
  ------------------
  |  Branch (1065:17): [True: 2.47k, Folded]
  ------------------
 1066|  2.47k|                node->inc();
 1067|  2.47k|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1068|  4.07k|        } else if (mutate) {
  ------------------
  |  Branch (1068:20): [True: 0, False: 4.07k]
  ------------------
 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.07k|        } else {
 1073|  4.07k|            auto new_tail = node_t::copy_leaf_e(e, node, new_tail_size);
 1074|  4.07k|            if (Mutating)
  ------------------
  |  Branch (1074:17): [Folded, False: 4.07k]
  ------------------
 1075|      0|                pos.visit(dec_visitor{});
 1076|  4.07k|            return std::make_tuple(0, nullptr, new_tail_size, new_tail);
 1077|  4.07k|        }
 1078|  6.54k|    }
_ZN5immer6detail4rbts23slice_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb0ELb0EE13visit_relaxedIRNS1_11relaxed_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_mNSA_5applyIS7_E4type4editE:
  913|  7.04k|    {
  914|  7.04k|        auto idx    = pos.index(last);
  915|  7.04k|        auto node   = pos.node();
  916|  7.04k|        auto mutate = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (916:23): [Folded, False: 7.04k]
  |  Branch (916:35): [True: 0, False: 0]
  ------------------
  917|  7.04k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (917:13): [Folded, False: 7.04k]
  |  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.04k|        } else {
  924|  7.04k|            using std::get;
  925|  7.04k|            auto subs =
  926|  7.04k|                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
  ------------------
  |  Branch (926:17): [True: 0, False: 7.04k]
  ------------------
  927|  7.04k|                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
  928|  7.04k|            auto next = get<1>(subs);
  929|  7.04k|            auto ts   = get<2>(subs);
  930|  7.04k|            auto tail = get<3>(subs);
  931|  7.04k|            IMMER_TRY {
  ------------------
  |  |   49|  7.04k|#define IMMER_TRY try
  ------------------
  932|  7.04k|                if (next) {
  ------------------
  |  Branch (932:21): [True: 1.17k, False: 5.86k]
  ------------------
  933|  1.17k|                    if (mutate) {
  ------------------
  |  Branch (933:25): [True: 0, False: 1.17k]
  ------------------
  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.17k|                    } else {
  942|  1.17k|                        auto newn = node_t::copy_inner_r_e(e, node, idx);
  943|  1.17k|                        auto newr = newn->relaxed();
  944|  1.17k|                        newn->inner()[idx] = next;
  945|  1.17k|                        newr->d.sizes[idx] = last + 1 - ts;
  946|  1.17k|                        newr->d.count      = idx + 1;
  947|  1.17k|                        assert(newr->d.sizes[idx]);
  ------------------
  |  Branch (947:25): [True: 1.17k, False: 0]
  ------------------
  948|  1.17k|                        if (Mutating)
  ------------------
  |  Branch (948:29): [Folded, False: 1.17k]
  ------------------
  949|      0|                            pos.visit(dec_visitor{});
  950|  1.17k|                        return std::make_tuple(pos.shift(), newn, ts, tail);
  951|  1.17k|                    }
  952|  5.86k|                } else if (idx == 0) {
  ------------------
  |  Branch (952:28): [True: 3.89k, False: 1.97k]
  ------------------
  953|  3.89k|                    if (Mutating)
  ------------------
  |  Branch (953:25): [Folded, False: 3.89k]
  ------------------
  954|      0|                        pos.visit(dec_right_visitor{}, count_t{1});
  955|  3.89k|                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
  956|  3.89k|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (956:28): [Folded, False: 1.97k]
  |  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|  1.97k|                } else {
  964|  1.97k|                    if (mutate) {
  ------------------
  |  Branch (964:25): [True: 0, False: 1.97k]
  ------------------
  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|  1.97k|                    } else {
  969|  1.97k|                        auto newn = node_t::copy_inner_r_e(e, node, idx);
  970|  1.97k|                        if (Mutating)
  ------------------
  |  Branch (970:29): [Folded, False: 1.97k]
  ------------------
  971|      0|                            pos.visit(dec_visitor{});
  972|  1.97k|                        return std::make_tuple(pos.shift(), newn, ts, tail);
  973|  1.97k|                    }
  974|  1.97k|                }
  975|  7.04k|            }
  976|  7.04k|            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.04k|        }
  987|  7.04k|    }
_ZN5immer6detail4rbts23slice_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb0ELb0EE13visit_regularIRNS1_15regular_sub_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_mNSA_5applyIS7_E4type4editE:
  991|  3.36k|    {
  992|  3.36k|        auto idx    = pos.index(last);
  993|  3.36k|        auto node   = pos.node();
  994|  3.36k|        auto mutate = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (994:23): [Folded, False: 3.36k]
  |  Branch (994:35): [True: 0, False: 0]
  ------------------
  995|  3.36k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (995:13): [Folded, False: 3.36k]
  |  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|  3.36k|        } else {
 1002|  3.36k|            using std::get;
 1003|  3.36k|            auto subs =
 1004|  3.36k|                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
  ------------------
  |  Branch (1004:17): [True: 0, False: 3.36k]
  ------------------
 1005|  3.36k|                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
 1006|  3.36k|            auto next = get<1>(subs);
 1007|  3.36k|            auto ts   = get<2>(subs);
 1008|  3.36k|            auto tail = get<3>(subs);
 1009|  3.36k|            IMMER_TRY {
  ------------------
  |  |   49|  3.36k|#define IMMER_TRY try
  ------------------
 1010|  3.36k|                if (next) {
  ------------------
  |  Branch (1010:21): [True: 889, False: 2.47k]
  ------------------
 1011|    889|                    if (mutate) {
  ------------------
  |  Branch (1011:25): [True: 0, False: 889]
  ------------------
 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|    889|                    } else {
 1016|    889|                        auto newn          = node_t::copy_inner_e(e, node, idx);
 1017|    889|                        newn->inner()[idx] = next;
 1018|    889|                        if (Mutating)
  ------------------
  |  Branch (1018:29): [Folded, False: 889]
  ------------------
 1019|      0|                            pos.visit(dec_visitor{});
 1020|    889|                        return std::make_tuple(pos.shift(), newn, ts, tail);
 1021|    889|                    }
 1022|  2.47k|                } else if (idx == 0) {
  ------------------
  |  Branch (1022:28): [True: 661, False: 1.81k]
  ------------------
 1023|    661|                    if (Mutating)
  ------------------
  |  Branch (1023:25): [Folded, False: 661]
  ------------------
 1024|      0|                        pos.visit(dec_right_visitor{}, count_t{1});
 1025|    661|                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
 1026|  1.81k|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (1026:28): [Folded, False: 1.81k]
  |  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|  1.81k|                } else {
 1034|  1.81k|                    if (mutate) {
  ------------------
  |  Branch (1034:25): [True: 0, False: 1.81k]
  ------------------
 1035|      0|                        pos.each_right(dec_visitor{}, idx + 1);
 1036|      0|                        return std::make_tuple(pos.shift(), node, ts, tail);
 1037|  1.81k|                    } else {
 1038|  1.81k|                        auto newn = node_t::copy_inner_e(e, node, idx);
 1039|  1.81k|                        if (Mutating)
  ------------------
  |  Branch (1039:29): [Folded, False: 1.81k]
  ------------------
 1040|      0|                            pos.visit(dec_visitor{});
 1041|  1.81k|                        return std::make_tuple(pos.shift(), newn, ts, tail);
 1042|  1.81k|                    }
 1043|  1.81k|                }
 1044|  3.36k|            }
 1045|  3.36k|            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.36k|        }
 1055|  3.36k|    }
_ZN5immer6detail4rbts23slice_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb1ELb1EE13visit_regularIRNS1_15regular_sub_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_mNSA_5applyIS7_E4type4editE:
  991|  12.4k|    {
  992|  12.4k|        auto idx    = pos.index(last);
  993|  12.4k|        auto node   = pos.node();
  994|  12.4k|        auto mutate = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (994:23): [True: 12.4k, Folded]
  |  Branch (994:35): [True: 8.67k, False: 3.80k]
  ------------------
  995|  12.4k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (995:13): [True: 12.4k, Folded]
  |  Branch (995:25): [True: 7.33k, False: 5.14k]
  ------------------
  996|  7.33k|            auto res = mutate ? pos.towards_oh(this_t{}, last, idx, e)
  ------------------
  |  Branch (996:24): [True: 5.08k, False: 2.24k]
  ------------------
  997|  7.33k|                              : pos.towards_oh(no_mut_t{}, last, idx, e);
  998|  7.33k|            if (Mutating)
  ------------------
  |  Branch (998:17): [True: 7.33k, Folded]
  ------------------
  999|  7.33k|                pos.visit(dec_right_visitor{}, count_t{1});
 1000|  7.33k|            return res;
 1001|  7.33k|        } else {
 1002|  5.14k|            using std::get;
 1003|  5.14k|            auto subs =
 1004|  5.14k|                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
  ------------------
  |  Branch (1004:17): [True: 3.59k, False: 1.55k]
  ------------------
 1005|  5.14k|                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
 1006|  5.14k|            auto next = get<1>(subs);
 1007|  5.14k|            auto ts   = get<2>(subs);
 1008|  5.14k|            auto tail = get<3>(subs);
 1009|  5.14k|            IMMER_TRY {
  ------------------
  |  |   49|  5.14k|#define IMMER_TRY try
  ------------------
 1010|  5.14k|                if (next) {
  ------------------
  |  Branch (1010:21): [True: 1.21k, False: 3.92k]
  ------------------
 1011|  1.21k|                    if (mutate) {
  ------------------
  |  Branch (1011:25): [True: 754, False: 465]
  ------------------
 1012|    754|                        node->inner()[idx] = next;
 1013|    754|                        pos.each_right(dec_visitor{}, idx + 1);
 1014|    754|                        return std::make_tuple(pos.shift(), node, ts, tail);
 1015|    754|                    } else {
 1016|    465|                        auto newn          = node_t::copy_inner_e(e, node, idx);
 1017|    465|                        newn->inner()[idx] = next;
 1018|    465|                        if (Mutating)
  ------------------
  |  Branch (1018:29): [True: 465, Folded]
  ------------------
 1019|    465|                            pos.visit(dec_visitor{});
 1020|    465|                        return std::make_tuple(pos.shift(), newn, ts, tail);
 1021|    465|                    }
 1022|  3.92k|                } else if (idx == 0) {
  ------------------
  |  Branch (1022:28): [True: 0, False: 3.92k]
  ------------------
 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|  3.92k|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (1026:28): [True: 3.92k, Folded]
  |  Branch (1026:40): [True: 3.38k, False: 548]
  |  Branch (1026:52): [True: 2.16k, False: 1.21k]
  ------------------
 1027|  2.16k|                    auto newn = pos.node()->inner()[0];
 1028|  2.16k|                    if (!mutate)
  ------------------
  |  Branch (1028:25): [True: 573, False: 1.59k]
  ------------------
 1029|    573|                        newn->inc();
 1030|  2.16k|                    if (Mutating)
  ------------------
  |  Branch (1030:25): [True: 2.16k, Folded]
  ------------------
 1031|  2.16k|                        pos.visit(dec_right_visitor{}, count_t{2});
 1032|  2.16k|                    return std::make_tuple(pos.shift() - B, newn, ts, tail);
 1033|  2.16k|                } else {
 1034|  1.76k|                    if (mutate) {
  ------------------
  |  Branch (1034:25): [True: 1.24k, False: 515]
  ------------------
 1035|  1.24k|                        pos.each_right(dec_visitor{}, idx + 1);
 1036|  1.24k|                        return std::make_tuple(pos.shift(), node, ts, tail);
 1037|  1.24k|                    } else {
 1038|    515|                        auto newn = node_t::copy_inner_e(e, node, idx);
 1039|    515|                        if (Mutating)
  ------------------
  |  Branch (1039:29): [True: 515, Folded]
  ------------------
 1040|    515|                            pos.visit(dec_visitor{});
 1041|    515|                        return std::make_tuple(pos.shift(), newn, ts, tail);
 1042|    515|                    }
 1043|  1.76k|                }
 1044|  5.14k|            }
 1045|  5.14k|            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|  5.14k|        }
 1055|  12.4k|    }
_ZN5immer6detail4rbts23slice_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb1ELb1EE10visit_leafIRNS1_13full_leaf_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_mNSA_5applyIS7_E4type4editE:
 1059|  1.43k|    {
 1060|  1.43k|        auto old_tail_size = pos.count();
 1061|  1.43k|        auto new_tail_size = pos.index(last) + 1;
 1062|  1.43k|        auto node          = pos.node();
 1063|  1.43k|        auto mutate        = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (1063:30): [True: 1.43k, Folded]
  |  Branch (1063:42): [True: 588, False: 849]
  ------------------
 1064|  1.43k|        if (new_tail_size == old_tail_size) {
  ------------------
  |  Branch (1064:13): [True: 490, False: 947]
  ------------------
 1065|    490|            if (!Mutating)
  ------------------
  |  Branch (1065:17): [Folded, False: 490]
  ------------------
 1066|      0|                node->inc();
 1067|    490|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1068|    947|        } else if (mutate) {
  ------------------
  |  Branch (1068:20): [True: 510, False: 437]
  ------------------
 1069|    510|            detail::destroy_n(node->leaf() + new_tail_size,
 1070|    510|                              old_tail_size - new_tail_size);
 1071|    510|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1072|    510|        } else {
 1073|    437|            auto new_tail = node_t::copy_leaf_e(e, node, new_tail_size);
 1074|    437|            if (Mutating)
  ------------------
  |  Branch (1074:17): [True: 437, Folded]
  ------------------
 1075|    437|                pos.visit(dec_visitor{});
 1076|    437|            return std::make_tuple(0, nullptr, new_tail_size, new_tail);
 1077|    437|        }
 1078|  1.43k|    }
_ZN5immer6detail4rbts23slice_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb1ELb1EE13visit_regularIRNS1_8full_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_mNSA_5applyIS7_E4type4editE:
  991|  3.93k|    {
  992|  3.93k|        auto idx    = pos.index(last);
  993|  3.93k|        auto node   = pos.node();
  994|  3.93k|        auto mutate = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (994:23): [True: 3.93k, Folded]
  |  Branch (994:35): [True: 2.02k, False: 1.91k]
  ------------------
  995|  3.93k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (995:13): [True: 3.93k, Folded]
  |  Branch (995:25): [True: 1.46k, False: 2.46k]
  ------------------
  996|  1.46k|            auto res = mutate ? pos.towards_oh(this_t{}, last, idx, e)
  ------------------
  |  Branch (996:24): [True: 1.00k, False: 467]
  ------------------
  997|  1.46k|                              : pos.towards_oh(no_mut_t{}, last, idx, e);
  998|  1.46k|            if (Mutating)
  ------------------
  |  Branch (998:17): [True: 1.46k, Folded]
  ------------------
  999|  1.46k|                pos.visit(dec_right_visitor{}, count_t{1});
 1000|  1.46k|            return res;
 1001|  2.46k|        } else {
 1002|  2.46k|            using std::get;
 1003|  2.46k|            auto subs =
 1004|  2.46k|                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
  ------------------
  |  Branch (1004:17): [True: 1.01k, False: 1.44k]
  ------------------
 1005|  2.46k|                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
 1006|  2.46k|            auto next = get<1>(subs);
 1007|  2.46k|            auto ts   = get<2>(subs);
 1008|  2.46k|            auto tail = get<3>(subs);
 1009|  2.46k|            IMMER_TRY {
  ------------------
  |  |   49|  2.46k|#define IMMER_TRY try
  ------------------
 1010|  2.46k|                if (next) {
  ------------------
  |  Branch (1010:21): [True: 521, False: 1.94k]
  ------------------
 1011|    521|                    if (mutate) {
  ------------------
  |  Branch (1011:25): [True: 322, False: 199]
  ------------------
 1012|    322|                        node->inner()[idx] = next;
 1013|    322|                        pos.each_right(dec_visitor{}, idx + 1);
 1014|    322|                        return std::make_tuple(pos.shift(), node, ts, tail);
 1015|    322|                    } else {
 1016|    199|                        auto newn          = node_t::copy_inner_e(e, node, idx);
 1017|    199|                        newn->inner()[idx] = next;
 1018|    199|                        if (Mutating)
  ------------------
  |  Branch (1018:29): [True: 199, Folded]
  ------------------
 1019|    199|                            pos.visit(dec_visitor{});
 1020|    199|                        return std::make_tuple(pos.shift(), newn, ts, tail);
 1021|    199|                    }
 1022|  1.94k|                } else if (idx == 0) {
  ------------------
  |  Branch (1022:28): [True: 0, False: 1.94k]
  ------------------
 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|  1.94k|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (1026:28): [True: 1.94k, Folded]
  |  Branch (1026:40): [True: 1.26k, False: 678]
  |  Branch (1026:52): [True: 516, False: 752]
  ------------------
 1027|    516|                    auto newn = pos.node()->inner()[0];
 1028|    516|                    if (!mutate)
  ------------------
  |  Branch (1028:25): [True: 198, False: 318]
  ------------------
 1029|    198|                        newn->inc();
 1030|    516|                    if (Mutating)
  ------------------
  |  Branch (1030:25): [True: 516, Folded]
  ------------------
 1031|    516|                        pos.visit(dec_right_visitor{}, count_t{2});
 1032|    516|                    return std::make_tuple(pos.shift() - B, newn, ts, tail);
 1033|  1.43k|                } else {
 1034|  1.43k|                    if (mutate) {
  ------------------
  |  Branch (1034:25): [True: 378, False: 1.05k]
  ------------------
 1035|    378|                        pos.each_right(dec_visitor{}, idx + 1);
 1036|    378|                        return std::make_tuple(pos.shift(), node, ts, tail);
 1037|  1.05k|                    } else {
 1038|  1.05k|                        auto newn = node_t::copy_inner_e(e, node, idx);
 1039|  1.05k|                        if (Mutating)
  ------------------
  |  Branch (1039:29): [True: 1.05k, Folded]
  ------------------
 1040|  1.05k|                            pos.visit(dec_visitor{});
 1041|  1.05k|                        return std::make_tuple(pos.shift(), newn, ts, tail);
 1042|  1.05k|                    }
 1043|  1.43k|                }
 1044|  2.46k|            }
 1045|  2.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|  2.46k|        }
 1055|  3.93k|    }
_ZN5immer6detail4rbts23slice_right_mut_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb1ELb1EE10visit_leafIRNS1_8leaf_posISC_EEEENSt3__15tupleIJjPSC_jSK_EEEOT_mNSA_5applyIS7_E4type4editE:
 1059|    713|    {
 1060|    713|        auto old_tail_size = pos.count();
 1061|    713|        auto new_tail_size = pos.index(last) + 1;
 1062|    713|        auto node          = pos.node();
 1063|    713|        auto mutate        = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (1063:30): [True: 713, Folded]
  |  Branch (1063:42): [True: 217, False: 496]
  ------------------
 1064|    713|        if (new_tail_size == old_tail_size) {
  ------------------
  |  Branch (1064:13): [True: 291, False: 422]
  ------------------
 1065|    291|            if (!Mutating)
  ------------------
  |  Branch (1065:17): [Folded, False: 291]
  ------------------
 1066|      0|                node->inc();
 1067|    291|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1068|    422|        } else if (mutate) {
  ------------------
  |  Branch (1068:20): [True: 203, False: 219]
  ------------------
 1069|    203|            detail::destroy_n(node->leaf() + new_tail_size,
 1070|    203|                              old_tail_size - new_tail_size);
 1071|    203|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1072|    219|        } else {
 1073|    219|            auto new_tail = node_t::copy_leaf_e(e, node, new_tail_size);
 1074|    219|            if (Mutating)
  ------------------
  |  Branch (1074:17): [True: 219, Folded]
  ------------------
 1075|    219|                pos.visit(dec_visitor{});
 1076|    219|            return std::make_tuple(0, nullptr, new_tail_size, new_tail);
 1077|    219|        }
 1078|    713|    }
_ZN5immer6detail4rbts22slice_left_mut_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb1ELb1EE10visit_leafIRNS1_12leaf_sub_posISC_EEEENSt3__15tupleIJjPSC_EEEOT_mNSA_5applyIS7_E4type4editE:
 1377|    724|    {
 1378|    724|        auto node   = pos.node();
 1379|    724|        auto idx    = pos.index(first);
 1380|    724|        auto count  = pos.count();
 1381|    724|        auto mutate = Mutating &&
  ------------------
  |  Branch (1381:23): [True: 0, Folded]
  ------------------
 1382|      0|                      std::is_nothrow_move_constructible<value_t>::value &&
  ------------------
  |  Branch (1382:23): [True: 0, Folded]
  ------------------
 1383|    724|                      node->can_mutate(e);
  ------------------
  |  Branch (1383:23): [True: 418, False: 306]
  ------------------
 1384|    724|        if (mutate) {
  ------------------
  |  Branch (1384:13): [True: 418, False: 306]
  ------------------
 1385|    418|            auto data     = node->leaf();
 1386|    418|            auto newcount = count - idx;
 1387|    418|            std::move(data + idx, data + count, data);
 1388|    418|            detail::destroy_n(data + newcount, idx);
 1389|    418|            return std::make_tuple(0, node);
 1390|    418|        } else {
 1391|    306|            auto newn = node_t::copy_leaf_e(e, node, idx, count);
 1392|    306|            if (Mutating)
  ------------------
  |  Branch (1392:17): [True: 306, Folded]
  ------------------
 1393|    306|                pos.visit(dec_visitor{});
 1394|    306|            return std::make_tuple(0, newn);
 1395|    306|        }
 1396|    724|    }
_ZN5immer6detail4rbts22slice_left_mut_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb1ELb1EE13visit_relaxedIRNS1_11relaxed_posISC_EEEENSt3__15tupleIJjPSC_EEEOT_mNSA_5applyIS7_E4type4editE:
 1246|  36.6k|    {
 1247|  36.6k|        auto idx                = pos.subindex(first);
 1248|  36.6k|        auto count              = pos.count();
 1249|  36.6k|        auto node               = pos.node();
 1250|  36.6k|        auto mutate             = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (1250:35): [True: 36.6k, Folded]
  |  Branch (1250:47): [True: 27.3k, False: 9.25k]
  ------------------
 1251|  36.6k|        auto left_size          = pos.size_before(idx);
 1252|  36.6k|        auto child_size         = pos.size_sbh(idx, left_size);
 1253|  36.6k|        auto dropped_size       = first;
 1254|  36.6k|        auto child_dropped_size = dropped_size - left_size;
 1255|  36.6k|        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
  ------------------
  |  Branch (1255:13): [True: 36.6k, Folded]
  |  Branch (1255:25): [True: 35.2k, False: 1.42k]
  |  Branch (1255:45): [True: 9.31k, False: 25.8k]
  ------------------
 1256|  9.31k|            auto r = mutate ? pos.towards_sub_oh(this_t{}, first, idx, e)
  ------------------
  |  Branch (1256:22): [True: 6.18k, False: 3.12k]
  ------------------
 1257|  9.31k|                            : pos.towards_sub_oh(no_mut_t{}, first, idx, e);
 1258|  9.31k|            if (mutate)
  ------------------
  |  Branch (1258:17): [True: 6.18k, False: 3.12k]
  ------------------
 1259|  6.18k|                pos.visit(dec_left_visitor{}, idx);
 1260|  3.12k|            else if (Mutating)
  ------------------
  |  Branch (1260:22): [True: 3.12k, Folded]
  ------------------
 1261|  3.12k|                pos.visit(dec_visitor{});
 1262|  9.31k|            return r;
 1263|  27.3k|        } else {
 1264|  27.3k|            using std::get;
 1265|  27.3k|            auto newn     = mutate ? (node->ensure_mutable_relaxed(e), node)
  ------------------
  |  Branch (1265:29): [True: 21.1k, False: 6.12k]
  ------------------
 1266|  27.3k|                                   : node_t::make_inner_r_e(e);
 1267|  27.3k|            auto newr     = newn->relaxed();
 1268|  27.3k|            auto newcount = count - idx;
 1269|  27.3k|            auto new_child_size = child_size - child_dropped_size;
 1270|  27.3k|            IMMER_TRY {
  ------------------
  |  |   49|  27.3k|#define IMMER_TRY try
  ------------------
 1271|  27.3k|                auto subs =
 1272|  27.3k|                    mutate ? pos.towards_sub_oh(no_collapse_t{}, first, idx, e)
  ------------------
  |  Branch (1272:21): [True: 21.1k, False: 6.12k]
  ------------------
 1273|  27.3k|                           : pos.towards_sub_oh(
 1274|  6.12k|                                 no_collapse_no_mut_t{}, first, idx, e);
 1275|  27.3k|                if (mutate)
  ------------------
  |  Branch (1275:21): [True: 21.1k, False: 6.12k]
  ------------------
 1276|  21.1k|                    pos.each_left(dec_visitor{}, idx);
 1277|  27.3k|                pos.copy_sizes(
 1278|  27.3k|                    idx + 1, newcount - 1, new_child_size, newr->d.sizes + 1);
 1279|  27.3k|                std::copy(node->inner() + idx + 1,
 1280|  27.3k|                          node->inner() + count,
 1281|  27.3k|                          newn->inner() + 1);
 1282|  27.3k|                newn->inner()[0] = get<1>(subs);
 1283|  27.3k|                newr->d.sizes[0] = new_child_size;
 1284|  27.3k|                newr->d.count    = newcount;
 1285|  27.3k|                assert(new_child_size);
  ------------------
  |  Branch (1285:17): [True: 27.3k, False: 0]
  ------------------
 1286|  27.3k|                if (!mutate) {
  ------------------
  |  Branch (1286:21): [True: 6.12k, False: 21.1k]
  ------------------
 1287|  6.12k|                    node_t::inc_nodes(newn->inner() + 1, newcount - 1);
 1288|  6.12k|                    if (Mutating)
  ------------------
  |  Branch (1288:25): [True: 6.12k, Folded]
  ------------------
 1289|  6.12k|                        pos.visit(dec_visitor{});
 1290|  6.12k|                }
 1291|  27.3k|                return std::make_tuple(pos.shift(), newn);
 1292|  27.3k|            }
 1293|  27.3k|            IMMER_CATCH (...) {
 1294|      0|                if (!mutate)
  ------------------
  |  Branch (1294:21): [True: 0, False: 0]
  ------------------
 1295|      0|                    node_t::delete_inner_r_e(newn);
 1296|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1297|      0|            }
 1298|  27.3k|        }
 1299|  36.6k|    }
_ZN5immer6detail4rbts22slice_left_mut_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb1ELb0EE13visit_relaxedIRNS1_11relaxed_posISC_EEEENSt3__15tupleIJjPSC_EEEOT_mNSA_5applyIS7_E4type4editE:
 1246|  2.53k|    {
 1247|  2.53k|        auto idx                = pos.subindex(first);
 1248|  2.53k|        auto count              = pos.count();
 1249|  2.53k|        auto node               = pos.node();
 1250|  2.53k|        auto mutate             = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (1250:35): [Folded, False: 2.53k]
  |  Branch (1250:47): [True: 0, False: 0]
  ------------------
 1251|  2.53k|        auto left_size          = pos.size_before(idx);
 1252|  2.53k|        auto child_size         = pos.size_sbh(idx, left_size);
 1253|  2.53k|        auto dropped_size       = first;
 1254|  2.53k|        auto child_dropped_size = dropped_size - left_size;
 1255|  2.53k|        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
  ------------------
  |  Branch (1255:13): [True: 2.53k, Folded]
  |  Branch (1255:25): [True: 1.36k, False: 1.16k]
  |  Branch (1255:45): [True: 911, False: 458]
  ------------------
 1256|    911|            auto r = mutate ? pos.towards_sub_oh(this_t{}, first, idx, e)
  ------------------
  |  Branch (1256:22): [True: 0, False: 911]
  ------------------
 1257|    911|                            : pos.towards_sub_oh(no_mut_t{}, first, idx, e);
 1258|    911|            if (mutate)
  ------------------
  |  Branch (1258:17): [True: 0, False: 911]
  ------------------
 1259|      0|                pos.visit(dec_left_visitor{}, idx);
 1260|    911|            else if (Mutating)
  ------------------
  |  Branch (1260:22): [Folded, False: 911]
  ------------------
 1261|      0|                pos.visit(dec_visitor{});
 1262|    911|            return r;
 1263|  1.62k|        } else {
 1264|  1.62k|            using std::get;
 1265|  1.62k|            auto newn     = mutate ? (node->ensure_mutable_relaxed(e), node)
  ------------------
  |  Branch (1265:29): [True: 0, False: 1.62k]
  ------------------
 1266|  1.62k|                                   : node_t::make_inner_r_e(e);
 1267|  1.62k|            auto newr     = newn->relaxed();
 1268|  1.62k|            auto newcount = count - idx;
 1269|  1.62k|            auto new_child_size = child_size - child_dropped_size;
 1270|  1.62k|            IMMER_TRY {
  ------------------
  |  |   49|  1.62k|#define IMMER_TRY try
  ------------------
 1271|  1.62k|                auto subs =
 1272|  1.62k|                    mutate ? pos.towards_sub_oh(no_collapse_t{}, first, idx, e)
  ------------------
  |  Branch (1272:21): [True: 0, False: 1.62k]
  ------------------
 1273|  1.62k|                           : pos.towards_sub_oh(
 1274|  1.62k|                                 no_collapse_no_mut_t{}, first, idx, e);
 1275|  1.62k|                if (mutate)
  ------------------
  |  Branch (1275:21): [True: 0, False: 1.62k]
  ------------------
 1276|      0|                    pos.each_left(dec_visitor{}, idx);
 1277|  1.62k|                pos.copy_sizes(
 1278|  1.62k|                    idx + 1, newcount - 1, new_child_size, newr->d.sizes + 1);
 1279|  1.62k|                std::copy(node->inner() + idx + 1,
 1280|  1.62k|                          node->inner() + count,
 1281|  1.62k|                          newn->inner() + 1);
 1282|  1.62k|                newn->inner()[0] = get<1>(subs);
 1283|  1.62k|                newr->d.sizes[0] = new_child_size;
 1284|  1.62k|                newr->d.count    = newcount;
 1285|  1.62k|                assert(new_child_size);
  ------------------
  |  Branch (1285:17): [True: 1.62k, False: 0]
  ------------------
 1286|  1.62k|                if (!mutate) {
  ------------------
  |  Branch (1286:21): [True: 1.62k, False: 0]
  ------------------
 1287|  1.62k|                    node_t::inc_nodes(newn->inner() + 1, newcount - 1);
 1288|  1.62k|                    if (Mutating)
  ------------------
  |  Branch (1288:25): [Folded, False: 1.62k]
  ------------------
 1289|      0|                        pos.visit(dec_visitor{});
 1290|  1.62k|                }
 1291|  1.62k|                return std::make_tuple(pos.shift(), newn);
 1292|  1.62k|            }
 1293|  1.62k|            IMMER_CATCH (...) {
 1294|      0|                if (!mutate)
  ------------------
  |  Branch (1294:21): [True: 0, False: 0]
  ------------------
 1295|      0|                    node_t::delete_inner_r_e(newn);
 1296|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1297|      0|            }
 1298|  1.62k|        }
 1299|  2.53k|    }
_ZN5immer6detail4rbts22slice_left_mut_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb1ELb0EE13visit_regularIRNS1_15regular_sub_posISC_EEEENSt3__15tupleIJjPSC_EEEOT_mNSA_5applyIS7_E4type4editE:
 1303|  2.52k|    {
 1304|  2.52k|        auto idx    = pos.subindex(first);
 1305|  2.52k|        auto count  = pos.count();
 1306|  2.52k|        auto node   = pos.node();
 1307|  2.52k|        auto mutate = Mutating
  ------------------
  |  Branch (1307:23): [Folded, False: 2.52k]
  ------------------
 1308|       |                      // this is more restrictive than actually needed because
 1309|       |                      // it causes the algorithm to also avoid mutating the leaf
 1310|       |                      // in place
 1311|      0|                      && !node_t::embed_relaxed && node->can_mutate(e);
  ------------------
  |  Branch (1311:26): [True: 0, Folded]
  |  Branch (1311:52): [True: 0, False: 0]
  ------------------
 1312|  2.52k|        auto left_size          = pos.size_before(idx);
 1313|  2.52k|        auto child_size         = pos.size_sbh(idx, left_size);
 1314|  2.52k|        auto dropped_size       = first;
 1315|  2.52k|        auto child_dropped_size = dropped_size - left_size;
 1316|  2.52k|        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
  ------------------
  |  Branch (1316:13): [True: 2.52k, Folded]
  |  Branch (1316:25): [True: 1.41k, False: 1.11k]
  |  Branch (1316:45): [True: 1.07k, False: 342]
  ------------------
 1317|  1.07k|            auto r = mutate ? pos.towards_sub_oh(this_t{}, first, idx, e)
  ------------------
  |  Branch (1317:22): [True: 0, False: 1.07k]
  ------------------
 1318|  1.07k|                            : pos.towards_sub_oh(no_mut_t{}, first, idx, e);
 1319|  1.07k|            if (mutate)
  ------------------
  |  Branch (1319:17): [True: 0, False: 1.07k]
  ------------------
 1320|      0|                pos.visit(dec_left_visitor{}, idx);
 1321|  1.07k|            else if (Mutating)
  ------------------
  |  Branch (1321:22): [Folded, False: 1.07k]
  ------------------
 1322|      0|                pos.visit(dec_visitor{});
 1323|  1.07k|            return r;
 1324|  1.45k|        } else {
 1325|  1.45k|            using std::get;
 1326|       |            // if possible, we convert the node to a relaxed one simply by
 1327|       |            // allocating a `relaxed_t` size table for it... maybe some of this
 1328|       |            // magic should be moved as a `node<...>` static method...
 1329|  1.45k|            auto newcount = count - idx;
 1330|  1.45k|            auto newn =
 1331|  1.45k|                mutate ? (node->impl.d.data.inner.relaxed = new (
  ------------------
  |  Branch (1331:17): [True: 0, False: 1.45k]
  ------------------
 1332|      0|                              node_t::heap::allocate(node_t::max_sizeof_relaxed,
 1333|      0|                                                     norefs_tag{})) relaxed_t,
 1334|      0|                          node)
 1335|  1.45k|                       : node_t::make_inner_r_e(e);
 1336|  1.45k|            auto newr = newn->relaxed();
 1337|  1.45k|            IMMER_TRY {
  ------------------
  |  |   49|  1.45k|#define IMMER_TRY try
  ------------------
 1338|  1.45k|                auto subs =
 1339|  1.45k|                    mutate ? pos.towards_sub_oh(no_collapse_t{}, first, idx, e)
  ------------------
  |  Branch (1339:21): [True: 0, False: 1.45k]
  ------------------
 1340|  1.45k|                           : pos.towards_sub_oh(
 1341|  1.45k|                                 no_collapse_no_mut_t{}, first, idx, e);
 1342|  1.45k|                if (mutate)
  ------------------
  |  Branch (1342:21): [True: 0, False: 1.45k]
  ------------------
 1343|      0|                    pos.each_left(dec_visitor{}, idx);
 1344|  1.45k|                newr->d.sizes[0] = child_size - child_dropped_size;
 1345|  1.45k|                assert(newr->d.sizes[0]);
  ------------------
  |  Branch (1345:17): [True: 1.45k, False: 0]
  ------------------
 1346|  1.45k|                pos.copy_sizes(
 1347|  1.45k|                    idx + 1, newcount - 1, newr->d.sizes[0], newr->d.sizes + 1);
 1348|  1.45k|                newr->d.count    = newcount;
 1349|  1.45k|                newn->inner()[0] = get<1>(subs);
 1350|  1.45k|                std::copy(node->inner() + idx + 1,
 1351|  1.45k|                          node->inner() + count,
 1352|  1.45k|                          newn->inner() + 1);
 1353|  1.45k|                if (!mutate) {
  ------------------
  |  Branch (1353:21): [True: 1.45k, False: 0]
  ------------------
 1354|  1.45k|                    node_t::inc_nodes(newn->inner() + 1, newcount - 1);
 1355|  1.45k|                    if (Mutating)
  ------------------
  |  Branch (1355:25): [Folded, False: 1.45k]
  ------------------
 1356|      0|                        pos.visit(dec_visitor{});
 1357|  1.45k|                }
 1358|  1.45k|                return std::make_tuple(pos.shift(), newn);
 1359|  1.45k|            }
 1360|  1.45k|            IMMER_CATCH (...) {
 1361|      0|                if (!mutate)
  ------------------
  |  Branch (1361:21): [True: 0, False: 0]
  ------------------
 1362|      0|                    node_t::delete_inner_r_e(newn);
 1363|      0|                else {
 1364|       |                    // restore the regular node that we were
 1365|       |                    // attempting to relax...
 1366|      0|                    node_t::heap::deallocate(node_t::max_sizeof_relaxed,
 1367|      0|                                             node->impl.d.data.inner.relaxed);
 1368|      0|                    node->impl.d.data.inner.relaxed = nullptr;
 1369|      0|                }
 1370|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1371|      0|            }
 1372|  1.45k|        }
 1373|  2.52k|    }
_ZN5immer6detail4rbts22slice_left_mut_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb1ELb0EE13visit_regularIRNS1_8full_posISC_EEEENSt3__15tupleIJjPSC_EEEOT_mNSA_5applyIS7_E4type4editE:
 1303|  3.07k|    {
 1304|  3.07k|        auto idx    = pos.subindex(first);
 1305|  3.07k|        auto count  = pos.count();
 1306|  3.07k|        auto node   = pos.node();
 1307|  3.07k|        auto mutate = Mutating
  ------------------
  |  Branch (1307:23): [Folded, False: 3.07k]
  ------------------
 1308|       |                      // this is more restrictive than actually needed because
 1309|       |                      // it causes the algorithm to also avoid mutating the leaf
 1310|       |                      // in place
 1311|      0|                      && !node_t::embed_relaxed && node->can_mutate(e);
  ------------------
  |  Branch (1311:26): [True: 0, Folded]
  |  Branch (1311:52): [True: 0, False: 0]
  ------------------
 1312|  3.07k|        auto left_size          = pos.size_before(idx);
 1313|  3.07k|        auto child_size         = pos.size_sbh(idx, left_size);
 1314|  3.07k|        auto dropped_size       = first;
 1315|  3.07k|        auto child_dropped_size = dropped_size - left_size;
 1316|  3.07k|        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
  ------------------
  |  Branch (1316:13): [True: 3.07k, Folded]
  |  Branch (1316:25): [True: 552, False: 2.51k]
  |  Branch (1316:45): [True: 325, False: 227]
  ------------------
 1317|    325|            auto r = mutate ? pos.towards_sub_oh(this_t{}, first, idx, e)
  ------------------
  |  Branch (1317:22): [True: 0, False: 325]
  ------------------
 1318|    325|                            : pos.towards_sub_oh(no_mut_t{}, first, idx, e);
 1319|    325|            if (mutate)
  ------------------
  |  Branch (1319:17): [True: 0, False: 325]
  ------------------
 1320|      0|                pos.visit(dec_left_visitor{}, idx);
 1321|    325|            else if (Mutating)
  ------------------
  |  Branch (1321:22): [Folded, False: 325]
  ------------------
 1322|      0|                pos.visit(dec_visitor{});
 1323|    325|            return r;
 1324|  2.74k|        } else {
 1325|  2.74k|            using std::get;
 1326|       |            // if possible, we convert the node to a relaxed one simply by
 1327|       |            // allocating a `relaxed_t` size table for it... maybe some of this
 1328|       |            // magic should be moved as a `node<...>` static method...
 1329|  2.74k|            auto newcount = count - idx;
 1330|  2.74k|            auto newn =
 1331|  2.74k|                mutate ? (node->impl.d.data.inner.relaxed = new (
  ------------------
  |  Branch (1331:17): [True: 0, False: 2.74k]
  ------------------
 1332|      0|                              node_t::heap::allocate(node_t::max_sizeof_relaxed,
 1333|      0|                                                     norefs_tag{})) relaxed_t,
 1334|      0|                          node)
 1335|  2.74k|                       : node_t::make_inner_r_e(e);
 1336|  2.74k|            auto newr = newn->relaxed();
 1337|  2.74k|            IMMER_TRY {
  ------------------
  |  |   49|  2.74k|#define IMMER_TRY try
  ------------------
 1338|  2.74k|                auto subs =
 1339|  2.74k|                    mutate ? pos.towards_sub_oh(no_collapse_t{}, first, idx, e)
  ------------------
  |  Branch (1339:21): [True: 0, False: 2.74k]
  ------------------
 1340|  2.74k|                           : pos.towards_sub_oh(
 1341|  2.74k|                                 no_collapse_no_mut_t{}, first, idx, e);
 1342|  2.74k|                if (mutate)
  ------------------
  |  Branch (1342:21): [True: 0, False: 2.74k]
  ------------------
 1343|      0|                    pos.each_left(dec_visitor{}, idx);
 1344|  2.74k|                newr->d.sizes[0] = child_size - child_dropped_size;
 1345|  2.74k|                assert(newr->d.sizes[0]);
  ------------------
  |  Branch (1345:17): [True: 2.74k, False: 0]
  ------------------
 1346|  2.74k|                pos.copy_sizes(
 1347|  2.74k|                    idx + 1, newcount - 1, newr->d.sizes[0], newr->d.sizes + 1);
 1348|  2.74k|                newr->d.count    = newcount;
 1349|  2.74k|                newn->inner()[0] = get<1>(subs);
 1350|  2.74k|                std::copy(node->inner() + idx + 1,
 1351|  2.74k|                          node->inner() + count,
 1352|  2.74k|                          newn->inner() + 1);
 1353|  2.74k|                if (!mutate) {
  ------------------
  |  Branch (1353:21): [True: 2.74k, False: 0]
  ------------------
 1354|  2.74k|                    node_t::inc_nodes(newn->inner() + 1, newcount - 1);
 1355|  2.74k|                    if (Mutating)
  ------------------
  |  Branch (1355:25): [Folded, False: 2.74k]
  ------------------
 1356|      0|                        pos.visit(dec_visitor{});
 1357|  2.74k|                }
 1358|  2.74k|                return std::make_tuple(pos.shift(), newn);
 1359|  2.74k|            }
 1360|  2.74k|            IMMER_CATCH (...) {
 1361|      0|                if (!mutate)
  ------------------
  |  Branch (1361:21): [True: 0, False: 0]
  ------------------
 1362|      0|                    node_t::delete_inner_r_e(newn);
 1363|      0|                else {
 1364|       |                    // restore the regular node that we were
 1365|       |                    // attempting to relax...
 1366|      0|                    node_t::heap::deallocate(node_t::max_sizeof_relaxed,
 1367|      0|                                             node->impl.d.data.inner.relaxed);
 1368|      0|                    node->impl.d.data.inner.relaxed = nullptr;
 1369|      0|                }
 1370|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1371|      0|            }
 1372|  2.74k|        }
 1373|  3.07k|    }
_ZN5immer6detail4rbts16dec_left_visitor13visit_regularIRNS1_8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEEEvOT_j:
 1209|    323|    {
 1210|    323|        using node_t = node_type<Pos>;
 1211|    323|        auto node    = p.node();
 1212|    323|        if (node->dec()) {
  ------------------
  |  Branch (1212:13): [True: 323, False: 0]
  ------------------
 1213|    323|            p.each_left(dec_t{}, idx);
 1214|    323|            node_t::delete_inner(node, p.count());
 1215|    323|        }
 1216|    323|    }
_ZN5immer6detail4rbts22slice_left_mut_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb0ELb1EE10visit_leafIRNS1_13full_leaf_posISC_EEEENSt3__15tupleIJjPSC_EEEOT_mNSA_5applyIS7_E4type4editE:
 1377|  3.32k|    {
 1378|  3.32k|        auto node   = pos.node();
 1379|  3.32k|        auto idx    = pos.index(first);
 1380|  3.32k|        auto count  = pos.count();
 1381|  3.32k|        auto mutate = Mutating &&
  ------------------
  |  Branch (1381:23): [True: 0, Folded]
  ------------------
 1382|      0|                      std::is_nothrow_move_constructible<value_t>::value &&
  ------------------
  |  Branch (1382:23): [True: 0, Folded]
  ------------------
 1383|  3.32k|                      node->can_mutate(e);
  ------------------
  |  Branch (1383:23): [True: 624, False: 2.70k]
  ------------------
 1384|  3.32k|        if (mutate) {
  ------------------
  |  Branch (1384:13): [True: 624, False: 2.70k]
  ------------------
 1385|    624|            auto data     = node->leaf();
 1386|    624|            auto newcount = count - idx;
 1387|    624|            std::move(data + idx, data + count, data);
 1388|    624|            detail::destroy_n(data + newcount, idx);
 1389|    624|            return std::make_tuple(0, node);
 1390|  2.70k|        } else {
 1391|  2.70k|            auto newn = node_t::copy_leaf_e(e, node, idx, count);
 1392|  2.70k|            if (Mutating)
  ------------------
  |  Branch (1392:17): [True: 2.70k, Folded]
  ------------------
 1393|  2.70k|                pos.visit(dec_visitor{});
 1394|  2.70k|            return std::make_tuple(0, newn);
 1395|  2.70k|        }
 1396|  3.32k|    }
_ZN5immer6detail4rbts22slice_left_mut_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb0ELb1EE13visit_regularIRNS1_8full_posISC_EEEENSt3__15tupleIJjPSC_EEEOT_mNSA_5applyIS7_E4type4editE:
 1303|  2.30k|    {
 1304|  2.30k|        auto idx    = pos.subindex(first);
 1305|  2.30k|        auto count  = pos.count();
 1306|  2.30k|        auto node   = pos.node();
 1307|  2.30k|        auto mutate = Mutating
  ------------------
  |  Branch (1307:23): [True: 0, Folded]
  ------------------
 1308|       |                      // this is more restrictive than actually needed because
 1309|       |                      // it causes the algorithm to also avoid mutating the leaf
 1310|       |                      // in place
 1311|  2.30k|                      && !node_t::embed_relaxed && node->can_mutate(e);
  ------------------
  |  Branch (1311:26): [True: 0, Folded]
  |  Branch (1311:52): [True: 1.05k, False: 1.24k]
  ------------------
 1312|  2.30k|        auto left_size          = pos.size_before(idx);
 1313|  2.30k|        auto child_size         = pos.size_sbh(idx, left_size);
 1314|  2.30k|        auto dropped_size       = first;
 1315|  2.30k|        auto child_dropped_size = dropped_size - left_size;
 1316|  2.30k|        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
  ------------------
  |  Branch (1316:13): [Folded, False: 2.30k]
  |  Branch (1316:25): [True: 0, False: 0]
  |  Branch (1316:45): [True: 0, False: 0]
  ------------------
 1317|      0|            auto r = mutate ? pos.towards_sub_oh(this_t{}, first, idx, e)
  ------------------
  |  Branch (1317:22): [True: 0, False: 0]
  ------------------
 1318|      0|                            : pos.towards_sub_oh(no_mut_t{}, first, idx, e);
 1319|      0|            if (mutate)
  ------------------
  |  Branch (1319:17): [True: 0, False: 0]
  ------------------
 1320|      0|                pos.visit(dec_left_visitor{}, idx);
 1321|      0|            else if (Mutating)
  ------------------
  |  Branch (1321:22): [True: 0, Folded]
  ------------------
 1322|      0|                pos.visit(dec_visitor{});
 1323|      0|            return r;
 1324|  2.30k|        } else {
 1325|  2.30k|            using std::get;
 1326|       |            // if possible, we convert the node to a relaxed one simply by
 1327|       |            // allocating a `relaxed_t` size table for it... maybe some of this
 1328|       |            // magic should be moved as a `node<...>` static method...
 1329|  2.30k|            auto newcount = count - idx;
 1330|  2.30k|            auto newn =
 1331|  2.30k|                mutate ? (node->impl.d.data.inner.relaxed = new (
  ------------------
  |  Branch (1331:17): [True: 1.05k, False: 1.24k]
  ------------------
 1332|  1.05k|                              node_t::heap::allocate(node_t::max_sizeof_relaxed,
 1333|  1.05k|                                                     norefs_tag{})) relaxed_t,
 1334|  1.05k|                          node)
 1335|  2.30k|                       : node_t::make_inner_r_e(e);
 1336|  2.30k|            auto newr = newn->relaxed();
 1337|  2.30k|            IMMER_TRY {
  ------------------
  |  |   49|  2.30k|#define IMMER_TRY try
  ------------------
 1338|  2.30k|                auto subs =
 1339|  2.30k|                    mutate ? pos.towards_sub_oh(no_collapse_t{}, first, idx, e)
  ------------------
  |  Branch (1339:21): [True: 1.05k, False: 1.24k]
  ------------------
 1340|  2.30k|                           : pos.towards_sub_oh(
 1341|  1.24k|                                 no_collapse_no_mut_t{}, first, idx, e);
 1342|  2.30k|                if (mutate)
  ------------------
  |  Branch (1342:21): [True: 1.05k, False: 1.24k]
  ------------------
 1343|  1.05k|                    pos.each_left(dec_visitor{}, idx);
 1344|  2.30k|                newr->d.sizes[0] = child_size - child_dropped_size;
 1345|  2.30k|                assert(newr->d.sizes[0]);
  ------------------
  |  Branch (1345:17): [True: 2.30k, False: 0]
  ------------------
 1346|  2.30k|                pos.copy_sizes(
 1347|  2.30k|                    idx + 1, newcount - 1, newr->d.sizes[0], newr->d.sizes + 1);
 1348|  2.30k|                newr->d.count    = newcount;
 1349|  2.30k|                newn->inner()[0] = get<1>(subs);
 1350|  2.30k|                std::copy(node->inner() + idx + 1,
 1351|  2.30k|                          node->inner() + count,
 1352|  2.30k|                          newn->inner() + 1);
 1353|  2.30k|                if (!mutate) {
  ------------------
  |  Branch (1353:21): [True: 1.24k, False: 1.05k]
  ------------------
 1354|  1.24k|                    node_t::inc_nodes(newn->inner() + 1, newcount - 1);
 1355|  1.24k|                    if (Mutating)
  ------------------
  |  Branch (1355:25): [True: 1.24k, Folded]
  ------------------
 1356|  1.24k|                        pos.visit(dec_visitor{});
 1357|  1.24k|                }
 1358|  2.30k|                return std::make_tuple(pos.shift(), newn);
 1359|  2.30k|            }
 1360|  2.30k|            IMMER_CATCH (...) {
 1361|      0|                if (!mutate)
  ------------------
  |  Branch (1361:21): [True: 0, False: 0]
  ------------------
 1362|      0|                    node_t::delete_inner_r_e(newn);
 1363|      0|                else {
 1364|       |                    // restore the regular node that we were
 1365|       |                    // attempting to relax...
 1366|      0|                    node_t::heap::deallocate(node_t::max_sizeof_relaxed,
 1367|      0|                                             node->impl.d.data.inner.relaxed);
 1368|      0|                    node->impl.d.data.inner.relaxed = nullptr;
 1369|      0|                }
 1370|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1371|      0|            }
 1372|  2.30k|        }
 1373|  2.30k|    }
_ZN5immer6detail4rbts22slice_left_mut_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb0ELb0EE10visit_leafIRNS1_13full_leaf_posISC_EEEENSt3__15tupleIJjPSC_EEEOT_mNSA_5applyIS7_E4type4editE:
 1377|  10.3k|    {
 1378|  10.3k|        auto node   = pos.node();
 1379|  10.3k|        auto idx    = pos.index(first);
 1380|  10.3k|        auto count  = pos.count();
 1381|  10.3k|        auto mutate = Mutating &&
  ------------------
  |  Branch (1381:23): [Folded, False: 10.3k]
  ------------------
 1382|      0|                      std::is_nothrow_move_constructible<value_t>::value &&
  ------------------
  |  Branch (1382:23): [True: 0, Folded]
  ------------------
 1383|      0|                      node->can_mutate(e);
  ------------------
  |  Branch (1383:23): [True: 0, False: 0]
  ------------------
 1384|  10.3k|        if (mutate) {
  ------------------
  |  Branch (1384:13): [True: 0, False: 10.3k]
  ------------------
 1385|      0|            auto data     = node->leaf();
 1386|      0|            auto newcount = count - idx;
 1387|      0|            std::move(data + idx, data + count, data);
 1388|      0|            detail::destroy_n(data + newcount, idx);
 1389|      0|            return std::make_tuple(0, node);
 1390|  10.3k|        } else {
 1391|  10.3k|            auto newn = node_t::copy_leaf_e(e, node, idx, count);
 1392|  10.3k|            if (Mutating)
  ------------------
  |  Branch (1392:17): [Folded, False: 10.3k]
  ------------------
 1393|      0|                pos.visit(dec_visitor{});
 1394|  10.3k|            return std::make_tuple(0, newn);
 1395|  10.3k|        }
 1396|  10.3k|    }
_ZN5immer6detail4rbts22slice_left_mut_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb0ELb0EE13visit_regularIRNS1_8full_posISC_EEEENSt3__15tupleIJjPSC_EEEOT_mNSA_5applyIS7_E4type4editE:
 1303|  3.26k|    {
 1304|  3.26k|        auto idx    = pos.subindex(first);
 1305|  3.26k|        auto count  = pos.count();
 1306|  3.26k|        auto node   = pos.node();
 1307|  3.26k|        auto mutate = Mutating
  ------------------
  |  Branch (1307:23): [Folded, False: 3.26k]
  ------------------
 1308|       |                      // this is more restrictive than actually needed because
 1309|       |                      // it causes the algorithm to also avoid mutating the leaf
 1310|       |                      // in place
 1311|      0|                      && !node_t::embed_relaxed && node->can_mutate(e);
  ------------------
  |  Branch (1311:26): [True: 0, Folded]
  |  Branch (1311:52): [True: 0, False: 0]
  ------------------
 1312|  3.26k|        auto left_size          = pos.size_before(idx);
 1313|  3.26k|        auto child_size         = pos.size_sbh(idx, left_size);
 1314|  3.26k|        auto dropped_size       = first;
 1315|  3.26k|        auto child_dropped_size = dropped_size - left_size;
 1316|  3.26k|        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
  ------------------
  |  Branch (1316:13): [Folded, False: 3.26k]
  |  Branch (1316:25): [True: 0, False: 0]
  |  Branch (1316:45): [True: 0, False: 0]
  ------------------
 1317|      0|            auto r = mutate ? pos.towards_sub_oh(this_t{}, first, idx, e)
  ------------------
  |  Branch (1317:22): [True: 0, False: 0]
  ------------------
 1318|      0|                            : pos.towards_sub_oh(no_mut_t{}, first, idx, e);
 1319|      0|            if (mutate)
  ------------------
  |  Branch (1319:17): [True: 0, False: 0]
  ------------------
 1320|      0|                pos.visit(dec_left_visitor{}, idx);
 1321|      0|            else if (Mutating)
  ------------------
  |  Branch (1321:22): [Folded, False: 0]
  ------------------
 1322|      0|                pos.visit(dec_visitor{});
 1323|      0|            return r;
 1324|  3.26k|        } else {
 1325|  3.26k|            using std::get;
 1326|       |            // if possible, we convert the node to a relaxed one simply by
 1327|       |            // allocating a `relaxed_t` size table for it... maybe some of this
 1328|       |            // magic should be moved as a `node<...>` static method...
 1329|  3.26k|            auto newcount = count - idx;
 1330|  3.26k|            auto newn =
 1331|  3.26k|                mutate ? (node->impl.d.data.inner.relaxed = new (
  ------------------
  |  Branch (1331:17): [True: 0, False: 3.26k]
  ------------------
 1332|      0|                              node_t::heap::allocate(node_t::max_sizeof_relaxed,
 1333|      0|                                                     norefs_tag{})) relaxed_t,
 1334|      0|                          node)
 1335|  3.26k|                       : node_t::make_inner_r_e(e);
 1336|  3.26k|            auto newr = newn->relaxed();
 1337|  3.26k|            IMMER_TRY {
  ------------------
  |  |   49|  3.26k|#define IMMER_TRY try
  ------------------
 1338|  3.26k|                auto subs =
 1339|  3.26k|                    mutate ? pos.towards_sub_oh(no_collapse_t{}, first, idx, e)
  ------------------
  |  Branch (1339:21): [True: 0, False: 3.26k]
  ------------------
 1340|  3.26k|                           : pos.towards_sub_oh(
 1341|  3.26k|                                 no_collapse_no_mut_t{}, first, idx, e);
 1342|  3.26k|                if (mutate)
  ------------------
  |  Branch (1342:21): [True: 0, False: 3.26k]
  ------------------
 1343|      0|                    pos.each_left(dec_visitor{}, idx);
 1344|  3.26k|                newr->d.sizes[0] = child_size - child_dropped_size;
 1345|  3.26k|                assert(newr->d.sizes[0]);
  ------------------
  |  Branch (1345:17): [True: 3.26k, False: 0]
  ------------------
 1346|  3.26k|                pos.copy_sizes(
 1347|  3.26k|                    idx + 1, newcount - 1, newr->d.sizes[0], newr->d.sizes + 1);
 1348|  3.26k|                newr->d.count    = newcount;
 1349|  3.26k|                newn->inner()[0] = get<1>(subs);
 1350|  3.26k|                std::copy(node->inner() + idx + 1,
 1351|  3.26k|                          node->inner() + count,
 1352|  3.26k|                          newn->inner() + 1);
 1353|  3.26k|                if (!mutate) {
  ------------------
  |  Branch (1353:21): [True: 3.26k, False: 0]
  ------------------
 1354|  3.26k|                    node_t::inc_nodes(newn->inner() + 1, newcount - 1);
 1355|  3.26k|                    if (Mutating)
  ------------------
  |  Branch (1355:25): [Folded, False: 3.26k]
  ------------------
 1356|      0|                        pos.visit(dec_visitor{});
 1357|  3.26k|                }
 1358|  3.26k|                return std::make_tuple(pos.shift(), newn);
 1359|  3.26k|            }
 1360|  3.26k|            IMMER_CATCH (...) {
 1361|      0|                if (!mutate)
  ------------------
  |  Branch (1361:21): [True: 0, False: 0]
  ------------------
 1362|      0|                    node_t::delete_inner_r_e(newn);
 1363|      0|                else {
 1364|       |                    // restore the regular node that we were
 1365|       |                    // attempting to relax...
 1366|      0|                    node_t::heap::deallocate(node_t::max_sizeof_relaxed,
 1367|      0|                                             node->impl.d.data.inner.relaxed);
 1368|      0|                    node->impl.d.data.inner.relaxed = nullptr;
 1369|      0|                }
 1370|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1371|      0|            }
 1372|  3.26k|        }
 1373|  3.26k|    }
_ZN5immer6detail4rbts16dec_left_visitor13visit_regularIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEEEvOT_j:
 1209|  4.21k|    {
 1210|  4.21k|        using node_t = node_type<Pos>;
 1211|  4.21k|        auto node    = p.node();
 1212|  4.21k|        if (node->dec()) {
  ------------------
  |  Branch (1212:13): [True: 4.21k, False: 0]
  ------------------
 1213|  4.21k|            p.each_left(dec_t{}, idx);
 1214|  4.21k|            node_t::delete_inner(node, p.count());
 1215|  4.21k|        }
 1216|  4.21k|    }
_ZN5immer6detail4rbts22slice_left_mut_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb0ELb1EE10visit_leafIRNS1_12leaf_sub_posISC_EEEENSt3__15tupleIJjPSC_EEEOT_mNSA_5applyIS7_E4type4editE:
 1377|  12.4k|    {
 1378|  12.4k|        auto node   = pos.node();
 1379|  12.4k|        auto idx    = pos.index(first);
 1380|  12.4k|        auto count  = pos.count();
 1381|  12.4k|        auto mutate = Mutating &&
  ------------------
  |  Branch (1381:23): [True: 0, Folded]
  ------------------
 1382|      0|                      std::is_nothrow_move_constructible<value_t>::value &&
  ------------------
  |  Branch (1382:23): [True: 0, Folded]
  ------------------
 1383|  12.4k|                      node->can_mutate(e);
  ------------------
  |  Branch (1383:23): [True: 8.62k, False: 3.84k]
  ------------------
 1384|  12.4k|        if (mutate) {
  ------------------
  |  Branch (1384:13): [True: 8.62k, False: 3.84k]
  ------------------
 1385|  8.62k|            auto data     = node->leaf();
 1386|  8.62k|            auto newcount = count - idx;
 1387|  8.62k|            std::move(data + idx, data + count, data);
 1388|  8.62k|            detail::destroy_n(data + newcount, idx);
 1389|  8.62k|            return std::make_tuple(0, node);
 1390|  8.62k|        } else {
 1391|  3.84k|            auto newn = node_t::copy_leaf_e(e, node, idx, count);
 1392|  3.84k|            if (Mutating)
  ------------------
  |  Branch (1392:17): [True: 3.84k, Folded]
  ------------------
 1393|  3.84k|                pos.visit(dec_visitor{});
 1394|  3.84k|            return std::make_tuple(0, newn);
 1395|  3.84k|        }
 1396|  12.4k|    }
_ZN5immer6detail4rbts22slice_left_mut_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb0ELb1EE13visit_regularIRNS1_15regular_sub_posISC_EEEENSt3__15tupleIJjPSC_EEEOT_mNSA_5applyIS7_E4type4editE:
 1303|  1.80k|    {
 1304|  1.80k|        auto idx    = pos.subindex(first);
 1305|  1.80k|        auto count  = pos.count();
 1306|  1.80k|        auto node   = pos.node();
 1307|  1.80k|        auto mutate = Mutating
  ------------------
  |  Branch (1307:23): [True: 0, Folded]
  ------------------
 1308|       |                      // this is more restrictive than actually needed because
 1309|       |                      // it causes the algorithm to also avoid mutating the leaf
 1310|       |                      // in place
 1311|  1.80k|                      && !node_t::embed_relaxed && node->can_mutate(e);
  ------------------
  |  Branch (1311:26): [True: 0, Folded]
  |  Branch (1311:52): [True: 726, False: 1.07k]
  ------------------
 1312|  1.80k|        auto left_size          = pos.size_before(idx);
 1313|  1.80k|        auto child_size         = pos.size_sbh(idx, left_size);
 1314|  1.80k|        auto dropped_size       = first;
 1315|  1.80k|        auto child_dropped_size = dropped_size - left_size;
 1316|  1.80k|        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
  ------------------
  |  Branch (1316:13): [Folded, False: 1.80k]
  |  Branch (1316:25): [True: 0, False: 0]
  |  Branch (1316:45): [True: 0, False: 0]
  ------------------
 1317|      0|            auto r = mutate ? pos.towards_sub_oh(this_t{}, first, idx, e)
  ------------------
  |  Branch (1317:22): [True: 0, False: 0]
  ------------------
 1318|      0|                            : pos.towards_sub_oh(no_mut_t{}, first, idx, e);
 1319|      0|            if (mutate)
  ------------------
  |  Branch (1319:17): [True: 0, False: 0]
  ------------------
 1320|      0|                pos.visit(dec_left_visitor{}, idx);
 1321|      0|            else if (Mutating)
  ------------------
  |  Branch (1321:22): [True: 0, Folded]
  ------------------
 1322|      0|                pos.visit(dec_visitor{});
 1323|      0|            return r;
 1324|  1.80k|        } else {
 1325|  1.80k|            using std::get;
 1326|       |            // if possible, we convert the node to a relaxed one simply by
 1327|       |            // allocating a `relaxed_t` size table for it... maybe some of this
 1328|       |            // magic should be moved as a `node<...>` static method...
 1329|  1.80k|            auto newcount = count - idx;
 1330|  1.80k|            auto newn =
 1331|  1.80k|                mutate ? (node->impl.d.data.inner.relaxed = new (
  ------------------
  |  Branch (1331:17): [True: 726, False: 1.07k]
  ------------------
 1332|    726|                              node_t::heap::allocate(node_t::max_sizeof_relaxed,
 1333|    726|                                                     norefs_tag{})) relaxed_t,
 1334|    726|                          node)
 1335|  1.80k|                       : node_t::make_inner_r_e(e);
 1336|  1.80k|            auto newr = newn->relaxed();
 1337|  1.80k|            IMMER_TRY {
  ------------------
  |  |   49|  1.80k|#define IMMER_TRY try
  ------------------
 1338|  1.80k|                auto subs =
 1339|  1.80k|                    mutate ? pos.towards_sub_oh(no_collapse_t{}, first, idx, e)
  ------------------
  |  Branch (1339:21): [True: 726, False: 1.07k]
  ------------------
 1340|  1.80k|                           : pos.towards_sub_oh(
 1341|  1.07k|                                 no_collapse_no_mut_t{}, first, idx, e);
 1342|  1.80k|                if (mutate)
  ------------------
  |  Branch (1342:21): [True: 726, False: 1.07k]
  ------------------
 1343|    726|                    pos.each_left(dec_visitor{}, idx);
 1344|  1.80k|                newr->d.sizes[0] = child_size - child_dropped_size;
 1345|  1.80k|                assert(newr->d.sizes[0]);
  ------------------
  |  Branch (1345:17): [True: 1.80k, False: 0]
  ------------------
 1346|  1.80k|                pos.copy_sizes(
 1347|  1.80k|                    idx + 1, newcount - 1, newr->d.sizes[0], newr->d.sizes + 1);
 1348|  1.80k|                newr->d.count    = newcount;
 1349|  1.80k|                newn->inner()[0] = get<1>(subs);
 1350|  1.80k|                std::copy(node->inner() + idx + 1,
 1351|  1.80k|                          node->inner() + count,
 1352|  1.80k|                          newn->inner() + 1);
 1353|  1.80k|                if (!mutate) {
  ------------------
  |  Branch (1353:21): [True: 1.07k, False: 726]
  ------------------
 1354|  1.07k|                    node_t::inc_nodes(newn->inner() + 1, newcount - 1);
 1355|  1.07k|                    if (Mutating)
  ------------------
  |  Branch (1355:25): [True: 1.07k, Folded]
  ------------------
 1356|  1.07k|                        pos.visit(dec_visitor{});
 1357|  1.07k|                }
 1358|  1.80k|                return std::make_tuple(pos.shift(), newn);
 1359|  1.80k|            }
 1360|  1.80k|            IMMER_CATCH (...) {
 1361|      0|                if (!mutate)
  ------------------
  |  Branch (1361:21): [True: 0, False: 0]
  ------------------
 1362|      0|                    node_t::delete_inner_r_e(newn);
 1363|      0|                else {
 1364|       |                    // restore the regular node that we were
 1365|       |                    // attempting to relax...
 1366|      0|                    node_t::heap::deallocate(node_t::max_sizeof_relaxed,
 1367|      0|                                             node->impl.d.data.inner.relaxed);
 1368|      0|                    node->impl.d.data.inner.relaxed = nullptr;
 1369|      0|                }
 1370|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1371|      0|            }
 1372|  1.80k|        }
 1373|  1.80k|    }
_ZN5immer6detail4rbts22slice_left_mut_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb0ELb0EE10visit_leafIRNS1_12leaf_sub_posISC_EEEENSt3__15tupleIJjPSC_EEEOT_mNSA_5applyIS7_E4type4editE:
 1377|  12.6k|    {
 1378|  12.6k|        auto node   = pos.node();
 1379|  12.6k|        auto idx    = pos.index(first);
 1380|  12.6k|        auto count  = pos.count();
 1381|  12.6k|        auto mutate = Mutating &&
  ------------------
  |  Branch (1381:23): [Folded, False: 12.6k]
  ------------------
 1382|      0|                      std::is_nothrow_move_constructible<value_t>::value &&
  ------------------
  |  Branch (1382:23): [True: 0, Folded]
  ------------------
 1383|      0|                      node->can_mutate(e);
  ------------------
  |  Branch (1383:23): [True: 0, False: 0]
  ------------------
 1384|  12.6k|        if (mutate) {
  ------------------
  |  Branch (1384:13): [True: 0, False: 12.6k]
  ------------------
 1385|      0|            auto data     = node->leaf();
 1386|      0|            auto newcount = count - idx;
 1387|      0|            std::move(data + idx, data + count, data);
 1388|      0|            detail::destroy_n(data + newcount, idx);
 1389|      0|            return std::make_tuple(0, node);
 1390|  12.6k|        } else {
 1391|  12.6k|            auto newn = node_t::copy_leaf_e(e, node, idx, count);
 1392|  12.6k|            if (Mutating)
  ------------------
  |  Branch (1392:17): [Folded, False: 12.6k]
  ------------------
 1393|      0|                pos.visit(dec_visitor{});
 1394|  12.6k|            return std::make_tuple(0, newn);
 1395|  12.6k|        }
 1396|  12.6k|    }
_ZN5immer6detail4rbts22slice_left_mut_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb0ELb0EE13visit_regularIRNS1_15regular_sub_posISC_EEEENSt3__15tupleIJjPSC_EEEOT_mNSA_5applyIS7_E4type4editE:
 1303|  1.99k|    {
 1304|  1.99k|        auto idx    = pos.subindex(first);
 1305|  1.99k|        auto count  = pos.count();
 1306|  1.99k|        auto node   = pos.node();
 1307|  1.99k|        auto mutate = Mutating
  ------------------
  |  Branch (1307:23): [Folded, False: 1.99k]
  ------------------
 1308|       |                      // this is more restrictive than actually needed because
 1309|       |                      // it causes the algorithm to also avoid mutating the leaf
 1310|       |                      // in place
 1311|      0|                      && !node_t::embed_relaxed && node->can_mutate(e);
  ------------------
  |  Branch (1311:26): [True: 0, Folded]
  |  Branch (1311:52): [True: 0, False: 0]
  ------------------
 1312|  1.99k|        auto left_size          = pos.size_before(idx);
 1313|  1.99k|        auto child_size         = pos.size_sbh(idx, left_size);
 1314|  1.99k|        auto dropped_size       = first;
 1315|  1.99k|        auto child_dropped_size = dropped_size - left_size;
 1316|  1.99k|        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
  ------------------
  |  Branch (1316:13): [Folded, False: 1.99k]
  |  Branch (1316:25): [True: 0, False: 0]
  |  Branch (1316:45): [True: 0, False: 0]
  ------------------
 1317|      0|            auto r = mutate ? pos.towards_sub_oh(this_t{}, first, idx, e)
  ------------------
  |  Branch (1317:22): [True: 0, False: 0]
  ------------------
 1318|      0|                            : pos.towards_sub_oh(no_mut_t{}, first, idx, e);
 1319|      0|            if (mutate)
  ------------------
  |  Branch (1319:17): [True: 0, False: 0]
  ------------------
 1320|      0|                pos.visit(dec_left_visitor{}, idx);
 1321|      0|            else if (Mutating)
  ------------------
  |  Branch (1321:22): [Folded, False: 0]
  ------------------
 1322|      0|                pos.visit(dec_visitor{});
 1323|      0|            return r;
 1324|  1.99k|        } else {
 1325|  1.99k|            using std::get;
 1326|       |            // if possible, we convert the node to a relaxed one simply by
 1327|       |            // allocating a `relaxed_t` size table for it... maybe some of this
 1328|       |            // magic should be moved as a `node<...>` static method...
 1329|  1.99k|            auto newcount = count - idx;
 1330|  1.99k|            auto newn =
 1331|  1.99k|                mutate ? (node->impl.d.data.inner.relaxed = new (
  ------------------
  |  Branch (1331:17): [True: 0, False: 1.99k]
  ------------------
 1332|      0|                              node_t::heap::allocate(node_t::max_sizeof_relaxed,
 1333|      0|                                                     norefs_tag{})) relaxed_t,
 1334|      0|                          node)
 1335|  1.99k|                       : node_t::make_inner_r_e(e);
 1336|  1.99k|            auto newr = newn->relaxed();
 1337|  1.99k|            IMMER_TRY {
  ------------------
  |  |   49|  1.99k|#define IMMER_TRY try
  ------------------
 1338|  1.99k|                auto subs =
 1339|  1.99k|                    mutate ? pos.towards_sub_oh(no_collapse_t{}, first, idx, e)
  ------------------
  |  Branch (1339:21): [True: 0, False: 1.99k]
  ------------------
 1340|  1.99k|                           : pos.towards_sub_oh(
 1341|  1.99k|                                 no_collapse_no_mut_t{}, first, idx, e);
 1342|  1.99k|                if (mutate)
  ------------------
  |  Branch (1342:21): [True: 0, False: 1.99k]
  ------------------
 1343|      0|                    pos.each_left(dec_visitor{}, idx);
 1344|  1.99k|                newr->d.sizes[0] = child_size - child_dropped_size;
 1345|  1.99k|                assert(newr->d.sizes[0]);
  ------------------
  |  Branch (1345:17): [True: 1.99k, False: 0]
  ------------------
 1346|  1.99k|                pos.copy_sizes(
 1347|  1.99k|                    idx + 1, newcount - 1, newr->d.sizes[0], newr->d.sizes + 1);
 1348|  1.99k|                newr->d.count    = newcount;
 1349|  1.99k|                newn->inner()[0] = get<1>(subs);
 1350|  1.99k|                std::copy(node->inner() + idx + 1,
 1351|  1.99k|                          node->inner() + count,
 1352|  1.99k|                          newn->inner() + 1);
 1353|  1.99k|                if (!mutate) {
  ------------------
  |  Branch (1353:21): [True: 1.99k, False: 0]
  ------------------
 1354|  1.99k|                    node_t::inc_nodes(newn->inner() + 1, newcount - 1);
 1355|  1.99k|                    if (Mutating)
  ------------------
  |  Branch (1355:25): [Folded, False: 1.99k]
  ------------------
 1356|      0|                        pos.visit(dec_visitor{});
 1357|  1.99k|                }
 1358|  1.99k|                return std::make_tuple(pos.shift(), newn);
 1359|  1.99k|            }
 1360|  1.99k|            IMMER_CATCH (...) {
 1361|      0|                if (!mutate)
  ------------------
  |  Branch (1361:21): [True: 0, False: 0]
  ------------------
 1362|      0|                    node_t::delete_inner_r_e(newn);
 1363|      0|                else {
 1364|       |                    // restore the regular node that we were
 1365|       |                    // attempting to relax...
 1366|      0|                    node_t::heap::deallocate(node_t::max_sizeof_relaxed,
 1367|      0|                                             node->impl.d.data.inner.relaxed);
 1368|      0|                    node->impl.d.data.inner.relaxed = nullptr;
 1369|      0|                }
 1370|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1371|      0|            }
 1372|  1.99k|        }
 1373|  1.99k|    }
_ZN5immer6detail4rbts16dec_left_visitor13visit_relaxedIRNS1_11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEEEvOT_j:
 1198|  6.18k|    {
 1199|  6.18k|        using node_t = node_type<Pos>;
 1200|  6.18k|        auto node    = p.node();
 1201|  6.18k|        if (node->dec()) {
  ------------------
  |  Branch (1201:13): [True: 6.18k, False: 0]
  ------------------
 1202|  6.18k|            p.each_left(dec_t{}, idx);
 1203|  6.18k|            node_t::delete_inner_r(node, p.count());
 1204|  6.18k|        }
 1205|  6.18k|    }
_ZN5immer6detail4rbts22slice_left_mut_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb0ELb1EE13visit_relaxedIRNS1_11relaxed_posISC_EEEENSt3__15tupleIJjPSC_EEEOT_mNSA_5applyIS7_E4type4editE:
 1246|   183k|    {
 1247|   183k|        auto idx                = pos.subindex(first);
 1248|   183k|        auto count              = pos.count();
 1249|   183k|        auto node               = pos.node();
 1250|   183k|        auto mutate             = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (1250:35): [True: 183k, Folded]
  |  Branch (1250:47): [True: 176k, False: 6.92k]
  ------------------
 1251|   183k|        auto left_size          = pos.size_before(idx);
 1252|   183k|        auto child_size         = pos.size_sbh(idx, left_size);
 1253|   183k|        auto dropped_size       = first;
 1254|   183k|        auto child_dropped_size = dropped_size - left_size;
 1255|   183k|        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
  ------------------
  |  Branch (1255:13): [Folded, False: 183k]
  |  Branch (1255:25): [True: 0, False: 0]
  |  Branch (1255:45): [True: 0, False: 0]
  ------------------
 1256|      0|            auto r = mutate ? pos.towards_sub_oh(this_t{}, first, idx, e)
  ------------------
  |  Branch (1256:22): [True: 0, False: 0]
  ------------------
 1257|      0|                            : pos.towards_sub_oh(no_mut_t{}, first, idx, e);
 1258|      0|            if (mutate)
  ------------------
  |  Branch (1258:17): [True: 0, False: 0]
  ------------------
 1259|      0|                pos.visit(dec_left_visitor{}, idx);
 1260|      0|            else if (Mutating)
  ------------------
  |  Branch (1260:22): [True: 0, Folded]
  ------------------
 1261|      0|                pos.visit(dec_visitor{});
 1262|      0|            return r;
 1263|   183k|        } else {
 1264|   183k|            using std::get;
 1265|   183k|            auto newn     = mutate ? (node->ensure_mutable_relaxed(e), node)
  ------------------
  |  Branch (1265:29): [True: 176k, False: 6.92k]
  ------------------
 1266|   183k|                                   : node_t::make_inner_r_e(e);
 1267|   183k|            auto newr     = newn->relaxed();
 1268|   183k|            auto newcount = count - idx;
 1269|   183k|            auto new_child_size = child_size - child_dropped_size;
 1270|   183k|            IMMER_TRY {
  ------------------
  |  |   49|   183k|#define IMMER_TRY try
  ------------------
 1271|   183k|                auto subs =
 1272|   183k|                    mutate ? pos.towards_sub_oh(no_collapse_t{}, first, idx, e)
  ------------------
  |  Branch (1272:21): [True: 176k, False: 6.92k]
  ------------------
 1273|   183k|                           : pos.towards_sub_oh(
 1274|  6.92k|                                 no_collapse_no_mut_t{}, first, idx, e);
 1275|   183k|                if (mutate)
  ------------------
  |  Branch (1275:21): [True: 176k, False: 6.92k]
  ------------------
 1276|   176k|                    pos.each_left(dec_visitor{}, idx);
 1277|   183k|                pos.copy_sizes(
 1278|   183k|                    idx + 1, newcount - 1, new_child_size, newr->d.sizes + 1);
 1279|   183k|                std::copy(node->inner() + idx + 1,
 1280|   183k|                          node->inner() + count,
 1281|   183k|                          newn->inner() + 1);
 1282|   183k|                newn->inner()[0] = get<1>(subs);
 1283|   183k|                newr->d.sizes[0] = new_child_size;
 1284|   183k|                newr->d.count    = newcount;
 1285|   183k|                assert(new_child_size);
  ------------------
  |  Branch (1285:17): [True: 183k, False: 0]
  ------------------
 1286|   183k|                if (!mutate) {
  ------------------
  |  Branch (1286:21): [True: 6.92k, False: 176k]
  ------------------
 1287|  6.92k|                    node_t::inc_nodes(newn->inner() + 1, newcount - 1);
 1288|  6.92k|                    if (Mutating)
  ------------------
  |  Branch (1288:25): [True: 6.92k, Folded]
  ------------------
 1289|  6.92k|                        pos.visit(dec_visitor{});
 1290|  6.92k|                }
 1291|   183k|                return std::make_tuple(pos.shift(), newn);
 1292|   183k|            }
 1293|   183k|            IMMER_CATCH (...) {
 1294|      0|                if (!mutate)
  ------------------
  |  Branch (1294:21): [True: 0, False: 0]
  ------------------
 1295|      0|                    node_t::delete_inner_r_e(newn);
 1296|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1297|      0|            }
 1298|   183k|        }
 1299|   183k|    }
_ZN5immer6detail4rbts22slice_left_mut_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb0ELb0EE13visit_relaxedIRNS1_11relaxed_posISC_EEEENSt3__15tupleIJjPSC_EEEOT_mNSA_5applyIS7_E4type4editE:
 1246|  50.5k|    {
 1247|  50.5k|        auto idx                = pos.subindex(first);
 1248|  50.5k|        auto count              = pos.count();
 1249|  50.5k|        auto node               = pos.node();
 1250|  50.5k|        auto mutate             = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (1250:35): [Folded, False: 50.5k]
  |  Branch (1250:47): [True: 0, False: 0]
  ------------------
 1251|  50.5k|        auto left_size          = pos.size_before(idx);
 1252|  50.5k|        auto child_size         = pos.size_sbh(idx, left_size);
 1253|  50.5k|        auto dropped_size       = first;
 1254|  50.5k|        auto child_dropped_size = dropped_size - left_size;
 1255|  50.5k|        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
  ------------------
  |  Branch (1255:13): [Folded, False: 50.5k]
  |  Branch (1255:25): [True: 0, False: 0]
  |  Branch (1255:45): [True: 0, False: 0]
  ------------------
 1256|      0|            auto r = mutate ? pos.towards_sub_oh(this_t{}, first, idx, e)
  ------------------
  |  Branch (1256:22): [True: 0, False: 0]
  ------------------
 1257|      0|                            : pos.towards_sub_oh(no_mut_t{}, first, idx, e);
 1258|      0|            if (mutate)
  ------------------
  |  Branch (1258:17): [True: 0, False: 0]
  ------------------
 1259|      0|                pos.visit(dec_left_visitor{}, idx);
 1260|      0|            else if (Mutating)
  ------------------
  |  Branch (1260:22): [Folded, False: 0]
  ------------------
 1261|      0|                pos.visit(dec_visitor{});
 1262|      0|            return r;
 1263|  50.5k|        } else {
 1264|  50.5k|            using std::get;
 1265|  50.5k|            auto newn     = mutate ? (node->ensure_mutable_relaxed(e), node)
  ------------------
  |  Branch (1265:29): [True: 0, False: 50.5k]
  ------------------
 1266|  50.5k|                                   : node_t::make_inner_r_e(e);
 1267|  50.5k|            auto newr     = newn->relaxed();
 1268|  50.5k|            auto newcount = count - idx;
 1269|  50.5k|            auto new_child_size = child_size - child_dropped_size;
 1270|  50.5k|            IMMER_TRY {
  ------------------
  |  |   49|  50.5k|#define IMMER_TRY try
  ------------------
 1271|  50.5k|                auto subs =
 1272|  50.5k|                    mutate ? pos.towards_sub_oh(no_collapse_t{}, first, idx, e)
  ------------------
  |  Branch (1272:21): [True: 0, False: 50.5k]
  ------------------
 1273|  50.5k|                           : pos.towards_sub_oh(
 1274|  50.5k|                                 no_collapse_no_mut_t{}, first, idx, e);
 1275|  50.5k|                if (mutate)
  ------------------
  |  Branch (1275:21): [True: 0, False: 50.5k]
  ------------------
 1276|      0|                    pos.each_left(dec_visitor{}, idx);
 1277|  50.5k|                pos.copy_sizes(
 1278|  50.5k|                    idx + 1, newcount - 1, new_child_size, newr->d.sizes + 1);
 1279|  50.5k|                std::copy(node->inner() + idx + 1,
 1280|  50.5k|                          node->inner() + count,
 1281|  50.5k|                          newn->inner() + 1);
 1282|  50.5k|                newn->inner()[0] = get<1>(subs);
 1283|  50.5k|                newr->d.sizes[0] = new_child_size;
 1284|  50.5k|                newr->d.count    = newcount;
 1285|  50.5k|                assert(new_child_size);
  ------------------
  |  Branch (1285:17): [True: 50.5k, False: 0]
  ------------------
 1286|  50.5k|                if (!mutate) {
  ------------------
  |  Branch (1286:21): [True: 50.5k, False: 0]
  ------------------
 1287|  50.5k|                    node_t::inc_nodes(newn->inner() + 1, newcount - 1);
 1288|  50.5k|                    if (Mutating)
  ------------------
  |  Branch (1288:25): [Folded, False: 50.5k]
  ------------------
 1289|      0|                        pos.visit(dec_visitor{});
 1290|  50.5k|                }
 1291|  50.5k|                return std::make_tuple(pos.shift(), newn);
 1292|  50.5k|            }
 1293|  50.5k|            IMMER_CATCH (...) {
 1294|      0|                if (!mutate)
  ------------------
  |  Branch (1294:21): [True: 0, False: 0]
  ------------------
 1295|      0|                    node_t::delete_inner_r_e(newn);
 1296|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1297|      0|            }
 1298|  50.5k|        }
 1299|  50.5k|    }
_ZN5immer6detail4rbts22slice_left_mut_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb1ELb1EE13visit_regularIRNS1_15regular_sub_posISC_EEEENSt3__15tupleIJjPSC_EEEOT_mNSA_5applyIS7_E4type4editE:
 1303|  9.57k|    {
 1304|  9.57k|        auto idx    = pos.subindex(first);
 1305|  9.57k|        auto count  = pos.count();
 1306|  9.57k|        auto node   = pos.node();
 1307|  9.57k|        auto mutate = Mutating
  ------------------
  |  Branch (1307:23): [True: 0, Folded]
  ------------------
 1308|       |                      // this is more restrictive than actually needed because
 1309|       |                      // it causes the algorithm to also avoid mutating the leaf
 1310|       |                      // in place
 1311|  9.57k|                      && !node_t::embed_relaxed && node->can_mutate(e);
  ------------------
  |  Branch (1311:26): [True: 0, Folded]
  |  Branch (1311:52): [True: 6.96k, False: 2.60k]
  ------------------
 1312|  9.57k|        auto left_size          = pos.size_before(idx);
 1313|  9.57k|        auto child_size         = pos.size_sbh(idx, left_size);
 1314|  9.57k|        auto dropped_size       = first;
 1315|  9.57k|        auto child_dropped_size = dropped_size - left_size;
 1316|  9.57k|        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
  ------------------
  |  Branch (1316:13): [True: 9.57k, Folded]
  |  Branch (1316:25): [True: 7.44k, False: 2.13k]
  |  Branch (1316:45): [True: 5.56k, False: 1.87k]
  ------------------
 1317|  5.56k|            auto r = mutate ? pos.towards_sub_oh(this_t{}, first, idx, e)
  ------------------
  |  Branch (1317:22): [True: 4.21k, False: 1.35k]
  ------------------
 1318|  5.56k|                            : pos.towards_sub_oh(no_mut_t{}, first, idx, e);
 1319|  5.56k|            if (mutate)
  ------------------
  |  Branch (1319:17): [True: 4.21k, False: 1.35k]
  ------------------
 1320|  4.21k|                pos.visit(dec_left_visitor{}, idx);
 1321|  1.35k|            else if (Mutating)
  ------------------
  |  Branch (1321:22): [True: 1.35k, Folded]
  ------------------
 1322|  1.35k|                pos.visit(dec_visitor{});
 1323|  5.56k|            return r;
 1324|  5.56k|        } else {
 1325|  4.00k|            using std::get;
 1326|       |            // if possible, we convert the node to a relaxed one simply by
 1327|       |            // allocating a `relaxed_t` size table for it... maybe some of this
 1328|       |            // magic should be moved as a `node<...>` static method...
 1329|  4.00k|            auto newcount = count - idx;
 1330|  4.00k|            auto newn =
 1331|  4.00k|                mutate ? (node->impl.d.data.inner.relaxed = new (
  ------------------
  |  Branch (1331:17): [True: 2.74k, False: 1.25k]
  ------------------
 1332|  2.74k|                              node_t::heap::allocate(node_t::max_sizeof_relaxed,
 1333|  2.74k|                                                     norefs_tag{})) relaxed_t,
 1334|  2.74k|                          node)
 1335|  4.00k|                       : node_t::make_inner_r_e(e);
 1336|  4.00k|            auto newr = newn->relaxed();
 1337|  4.00k|            IMMER_TRY {
  ------------------
  |  |   49|  4.00k|#define IMMER_TRY try
  ------------------
 1338|  4.00k|                auto subs =
 1339|  4.00k|                    mutate ? pos.towards_sub_oh(no_collapse_t{}, first, idx, e)
  ------------------
  |  Branch (1339:21): [True: 2.74k, False: 1.25k]
  ------------------
 1340|  4.00k|                           : pos.towards_sub_oh(
 1341|  1.25k|                                 no_collapse_no_mut_t{}, first, idx, e);
 1342|  4.00k|                if (mutate)
  ------------------
  |  Branch (1342:21): [True: 2.74k, False: 1.25k]
  ------------------
 1343|  2.74k|                    pos.each_left(dec_visitor{}, idx);
 1344|  4.00k|                newr->d.sizes[0] = child_size - child_dropped_size;
 1345|  4.00k|                assert(newr->d.sizes[0]);
  ------------------
  |  Branch (1345:17): [True: 4.00k, False: 0]
  ------------------
 1346|  4.00k|                pos.copy_sizes(
 1347|  4.00k|                    idx + 1, newcount - 1, newr->d.sizes[0], newr->d.sizes + 1);
 1348|  4.00k|                newr->d.count    = newcount;
 1349|  4.00k|                newn->inner()[0] = get<1>(subs);
 1350|  4.00k|                std::copy(node->inner() + idx + 1,
 1351|  4.00k|                          node->inner() + count,
 1352|  4.00k|                          newn->inner() + 1);
 1353|  4.00k|                if (!mutate) {
  ------------------
  |  Branch (1353:21): [True: 1.25k, False: 2.74k]
  ------------------
 1354|  1.25k|                    node_t::inc_nodes(newn->inner() + 1, newcount - 1);
 1355|  1.25k|                    if (Mutating)
  ------------------
  |  Branch (1355:25): [True: 1.25k, Folded]
  ------------------
 1356|  1.25k|                        pos.visit(dec_visitor{});
 1357|  1.25k|                }
 1358|  4.00k|                return std::make_tuple(pos.shift(), newn);
 1359|  4.00k|            }
 1360|  4.00k|            IMMER_CATCH (...) {
 1361|      0|                if (!mutate)
  ------------------
  |  Branch (1361:21): [True: 0, False: 0]
  ------------------
 1362|      0|                    node_t::delete_inner_r_e(newn);
 1363|      0|                else {
 1364|       |                    // restore the regular node that we were
 1365|       |                    // attempting to relax...
 1366|      0|                    node_t::heap::deallocate(node_t::max_sizeof_relaxed,
 1367|      0|                                             node->impl.d.data.inner.relaxed);
 1368|      0|                    node->impl.d.data.inner.relaxed = nullptr;
 1369|      0|                }
 1370|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1371|      0|            }
 1372|  4.00k|        }
 1373|  9.57k|    }
_ZN5immer6detail4rbts22slice_left_mut_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb1ELb1EE13visit_regularIRNS1_8full_posISC_EEEENSt3__15tupleIJjPSC_EEEOT_mNSA_5applyIS7_E4type4editE:
 1303|  3.38k|    {
 1304|  3.38k|        auto idx    = pos.subindex(first);
 1305|  3.38k|        auto count  = pos.count();
 1306|  3.38k|        auto node   = pos.node();
 1307|  3.38k|        auto mutate = Mutating
  ------------------
  |  Branch (1307:23): [True: 0, Folded]
  ------------------
 1308|       |                      // this is more restrictive than actually needed because
 1309|       |                      // it causes the algorithm to also avoid mutating the leaf
 1310|       |                      // in place
 1311|  3.38k|                      && !node_t::embed_relaxed && node->can_mutate(e);
  ------------------
  |  Branch (1311:26): [True: 0, Folded]
  |  Branch (1311:52): [True: 1.42k, False: 1.96k]
  ------------------
 1312|  3.38k|        auto left_size          = pos.size_before(idx);
 1313|  3.38k|        auto child_size         = pos.size_sbh(idx, left_size);
 1314|  3.38k|        auto dropped_size       = first;
 1315|  3.38k|        auto child_dropped_size = dropped_size - left_size;
 1316|  3.38k|        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
  ------------------
  |  Branch (1316:13): [True: 3.38k, Folded]
  |  Branch (1316:25): [True: 1.88k, False: 1.50k]
  |  Branch (1316:45): [True: 1.67k, False: 215]
  ------------------
 1317|  1.67k|            auto r = mutate ? pos.towards_sub_oh(this_t{}, first, idx, e)
  ------------------
  |  Branch (1317:22): [True: 323, False: 1.34k]
  ------------------
 1318|  1.67k|                            : pos.towards_sub_oh(no_mut_t{}, first, idx, e);
 1319|  1.67k|            if (mutate)
  ------------------
  |  Branch (1319:17): [True: 323, False: 1.34k]
  ------------------
 1320|    323|                pos.visit(dec_left_visitor{}, idx);
 1321|  1.34k|            else if (Mutating)
  ------------------
  |  Branch (1321:22): [True: 1.34k, Folded]
  ------------------
 1322|  1.34k|                pos.visit(dec_visitor{});
 1323|  1.67k|            return r;
 1324|  1.71k|        } else {
 1325|  1.71k|            using std::get;
 1326|       |            // if possible, we convert the node to a relaxed one simply by
 1327|       |            // allocating a `relaxed_t` size table for it... maybe some of this
 1328|       |            // magic should be moved as a `node<...>` static method...
 1329|  1.71k|            auto newcount = count - idx;
 1330|  1.71k|            auto newn =
 1331|  1.71k|                mutate ? (node->impl.d.data.inner.relaxed = new (
  ------------------
  |  Branch (1331:17): [True: 1.09k, False: 616]
  ------------------
 1332|  1.09k|                              node_t::heap::allocate(node_t::max_sizeof_relaxed,
 1333|  1.09k|                                                     norefs_tag{})) relaxed_t,
 1334|  1.09k|                          node)
 1335|  1.71k|                       : node_t::make_inner_r_e(e);
 1336|  1.71k|            auto newr = newn->relaxed();
 1337|  1.71k|            IMMER_TRY {
  ------------------
  |  |   49|  1.71k|#define IMMER_TRY try
  ------------------
 1338|  1.71k|                auto subs =
 1339|  1.71k|                    mutate ? pos.towards_sub_oh(no_collapse_t{}, first, idx, e)
  ------------------
  |  Branch (1339:21): [True: 1.09k, False: 616]
  ------------------
 1340|  1.71k|                           : pos.towards_sub_oh(
 1341|    616|                                 no_collapse_no_mut_t{}, first, idx, e);
 1342|  1.71k|                if (mutate)
  ------------------
  |  Branch (1342:21): [True: 1.09k, False: 616]
  ------------------
 1343|  1.09k|                    pos.each_left(dec_visitor{}, idx);
 1344|  1.71k|                newr->d.sizes[0] = child_size - child_dropped_size;
 1345|  1.71k|                assert(newr->d.sizes[0]);
  ------------------
  |  Branch (1345:17): [True: 1.71k, False: 0]
  ------------------
 1346|  1.71k|                pos.copy_sizes(
 1347|  1.71k|                    idx + 1, newcount - 1, newr->d.sizes[0], newr->d.sizes + 1);
 1348|  1.71k|                newr->d.count    = newcount;
 1349|  1.71k|                newn->inner()[0] = get<1>(subs);
 1350|  1.71k|                std::copy(node->inner() + idx + 1,
 1351|  1.71k|                          node->inner() + count,
 1352|  1.71k|                          newn->inner() + 1);
 1353|  1.71k|                if (!mutate) {
  ------------------
  |  Branch (1353:21): [True: 616, False: 1.09k]
  ------------------
 1354|    616|                    node_t::inc_nodes(newn->inner() + 1, newcount - 1);
 1355|    616|                    if (Mutating)
  ------------------
  |  Branch (1355:25): [True: 616, Folded]
  ------------------
 1356|    616|                        pos.visit(dec_visitor{});
 1357|    616|                }
 1358|  1.71k|                return std::make_tuple(pos.shift(), newn);
 1359|  1.71k|            }
 1360|  1.71k|            IMMER_CATCH (...) {
 1361|      0|                if (!mutate)
  ------------------
  |  Branch (1361:21): [True: 0, False: 0]
  ------------------
 1362|      0|                    node_t::delete_inner_r_e(newn);
 1363|      0|                else {
 1364|       |                    // restore the regular node that we were
 1365|       |                    // attempting to relax...
 1366|      0|                    node_t::heap::deallocate(node_t::max_sizeof_relaxed,
 1367|      0|                                             node->impl.d.data.inner.relaxed);
 1368|      0|                    node->impl.d.data.inner.relaxed = nullptr;
 1369|      0|                }
 1370|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
 1371|      0|            }
 1372|  1.71k|        }
 1373|  3.38k|    }
_ZN5immer6detail4rbts14equals_visitor3rrb10visit_nodeIRNS1_11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_16rrbtree_iteratorIiSE_Lj2ELj2EEESF_EEbOT_OT0_PT1_jm:
  349|  12.0k|        {
  350|  12.0k|            assert(shiftl <= posr.shift());
  ------------------
  |  Branch (350:13): [True: 12.0k, False: 0]
  ------------------
  351|  12.0k|            return shiftl == posr.shift()
  ------------------
  |  Branch (351:20): [True: 10.9k, False: 1.08k]
  ------------------
  352|  12.0k|                       ? visit_maybe_relaxed_sub(rootl,
  353|  10.9k|                                                 shiftl,
  354|  10.9k|                                                 sizel,
  355|  10.9k|                                                 this_t{},
  356|  10.9k|                                                 posr,
  357|  10.9k|                                                 first,
  358|  10.9k|                                                 size_t{})
  359|  12.0k|                       : posr.first_sub_inner(
  360|  1.08k|                             rrb{}, first, rootl, shiftl, sizel);
  361|  12.0k|        }
_ZN5immer6detail4rbts14equals_visitor13visit_relaxedIRNS1_11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEESG_RNS1_16rrbtree_iteratorIiSD_Lj2ELj2EEEEEbOT_OT0_OT1_m:
  382|  29.7k|    {
  383|  29.7k|        auto nl = posl.node();
  384|  29.7k|        auto nr = posr.node();
  385|  29.7k|        if (nl == nr)
  ------------------
  |  Branch (385:13): [True: 8.93k, False: 20.8k]
  ------------------
  386|  8.93k|            return true;
  387|  20.8k|        auto cl = posl.count();
  388|  20.8k|        auto cr = posr.count();
  389|  20.8k|        assert(cr > 0);
  ------------------
  |  Branch (389:9): [True: 20.8k, False: 0]
  ------------------
  390|  20.8k|        auto sbr = size_t{};
  391|  20.8k|        auto i   = count_t{};
  392|  20.8k|        auto j   = count_t{};
  393|  62.2k|        for (; i < cl; ++i) {
  ------------------
  |  Branch (393:16): [True: 51.6k, False: 10.5k]
  ------------------
  394|  51.6k|            auto sbl = posl.size_before(i);
  395|  80.9k|            for (; j + 1 < cr && (sbr = posr.size_before(j)) < sbl; ++j)
  ------------------
  |  Branch (395:20): [True: 65.5k, False: 15.3k]
  |  Branch (395:34): [True: 29.2k, False: 36.3k]
  ------------------
  396|  29.2k|                ;
  397|  51.6k|            auto res =
  398|  51.6k|                sbl == sbr
  ------------------
  |  Branch (398:17): [True: 33.3k, False: 18.2k]
  ------------------
  399|  51.6k|                    ? posr.nth_sub(j, this_aux_t{}, i, posl, first, idx + sbl)
  400|  51.6k|                    : posl.nth_sub(i,
  401|  18.2k|                                   for_each_chunk_p_visitor{},
  402|  18.2k|                                   this_t::equal_chunk_p(first + (idx + sbl)));
  403|  51.6k|            if (!res)
  ------------------
  |  Branch (403:17): [True: 10.2k, False: 41.4k]
  ------------------
  404|  10.2k|                return false;
  405|  51.6k|        }
  406|  10.5k|        return true;
  407|  20.8k|    }
_ZN5immer6detail4rbts14equals_visitor10this_aux_t10visit_leafIRNS1_12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERNS1_11relaxed_posISF_EERNS1_16rrbtree_iteratorIiSE_Lj2ELj2EEEEEbOT_jOT0_OT1_m:
  336|  9.28k|        {
  337|  9.28k|            return posl.nth_sub_leaf(i, this_t{}, posr, first, idx);
  338|  9.28k|        }
_ZN5immer6detail4rbts14equals_visitor10visit_leafIRNS1_12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEESG_RNS1_16rrbtree_iteratorIiSD_Lj2ELj2EEEEEbOT_OT0_OT1_m:
  427|  9.85k|    {
  428|  9.85k|        if (posl.node() == posr.node())
  ------------------
  |  Branch (428:13): [True: 4.61k, False: 5.24k]
  ------------------
  429|  4.61k|            return true;
  430|  5.24k|        auto cl = posl.count();
  431|  5.24k|        auto cr = posr.count();
  432|  5.24k|        auto mp = std::min(cl, cr);
  433|  5.24k|        return std::equal(posl.node()->leaf(),
  ------------------
  |  Branch (433:16): [True: 3.78k, False: 1.45k]
  ------------------
  434|  5.24k|                          posl.node()->leaf() + mp,
  435|  5.24k|                          posr.node()->leaf()) &&
  436|  3.78k|               std::equal(posl.node()->leaf() + mp,
  ------------------
  |  Branch (436:16): [True: 3.33k, False: 447]
  ------------------
  437|  3.78k|                          posl.node()->leaf() + posl.count(),
  438|  3.78k|                          first + (idx + mp));
  439|  9.85k|    }
_ZN5immer6detail4rbts14equals_visitor10this_aux_t11visit_innerIRNS1_11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEESH_RNS1_16rrbtree_iteratorIiSE_Lj2ELj2EEEEEbOT_jOT0_OT1_m:
  329|  21.7k|        {
  330|  21.7k|            return posl.nth_sub(i, this_t{}, posr, first, idx);
  331|  21.7k|        }
_ZN5immer6detail4rbts14equals_visitor13visit_regularIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERNS1_11relaxed_posISE_EERNS1_16rrbtree_iteratorIiSD_Lj2ELj2EEEEENSt3__19enable_ifIX12is_relaxed_vIT0_EEbE4typeEOT_OSP_OT1_m:
  412|  4.38k|    {
  413|  4.38k|        return this_t::visit_relaxed(posl, posr, first, idx);
  414|  4.38k|    }
_ZN5immer6detail4rbts14equals_visitor13visit_relaxedIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERNS1_11relaxed_posISE_EERNS1_16rrbtree_iteratorIiSD_Lj2ELj2EEEEEbOT_OT0_OT1_m:
  382|  4.38k|    {
  383|  4.38k|        auto nl = posl.node();
  384|  4.38k|        auto nr = posr.node();
  385|  4.38k|        if (nl == nr)
  ------------------
  |  Branch (385:13): [True: 0, False: 4.38k]
  ------------------
  386|      0|            return true;
  387|  4.38k|        auto cl = posl.count();
  388|  4.38k|        auto cr = posr.count();
  389|  4.38k|        assert(cr > 0);
  ------------------
  |  Branch (389:9): [True: 4.38k, False: 0]
  ------------------
  390|  4.38k|        auto sbr = size_t{};
  391|  4.38k|        auto i   = count_t{};
  392|  4.38k|        auto j   = count_t{};
  393|  12.7k|        for (; i < cl; ++i) {
  ------------------
  |  Branch (393:16): [True: 10.6k, False: 2.10k]
  ------------------
  394|  10.6k|            auto sbl = posl.size_before(i);
  395|  16.7k|            for (; j + 1 < cr && (sbr = posr.size_before(j)) < sbl; ++j)
  ------------------
  |  Branch (395:20): [True: 12.4k, False: 4.21k]
  |  Branch (395:34): [True: 6.03k, False: 6.45k]
  ------------------
  396|  6.03k|                ;
  397|  10.6k|            auto res =
  398|  10.6k|                sbl == sbr
  ------------------
  |  Branch (398:17): [True: 6.51k, False: 4.15k]
  ------------------
  399|  10.6k|                    ? posr.nth_sub(j, this_aux_t{}, i, posl, first, idx + sbl)
  400|  10.6k|                    : posl.nth_sub(i,
  401|  4.15k|                                   for_each_chunk_p_visitor{},
  402|  4.15k|                                   this_t::equal_chunk_p(first + (idx + sbl)));
  403|  10.6k|            if (!res)
  ------------------
  |  Branch (403:17): [True: 2.28k, False: 8.38k]
  ------------------
  404|  2.28k|                return false;
  405|  10.6k|        }
  406|  2.10k|        return true;
  407|  4.38k|    }
_ZN5immer6detail4rbts14equals_visitor10this_aux_t10visit_leafIRNS1_12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERNS1_15regular_sub_posISF_EERNS1_16rrbtree_iteratorIiSE_Lj2ELj2EEEEEbOT_jOT0_OT1_m:
  336|  3.55k|        {
  337|  3.55k|            return posl.nth_sub_leaf(i, this_t{}, posr, first, idx);
  338|  3.55k|        }
_ZN5immer6detail4rbts14equals_visitor10visit_leafIRNS1_13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERNS1_12leaf_sub_posISE_EERNS1_16rrbtree_iteratorIiSD_Lj2ELj2EEEEEbOT_OT0_OT1_m:
  427|  6.93k|    {
  428|  6.93k|        if (posl.node() == posr.node())
  ------------------
  |  Branch (428:13): [True: 4.17k, False: 2.75k]
  ------------------
  429|  4.17k|            return true;
  430|  2.75k|        auto cl = posl.count();
  431|  2.75k|        auto cr = posr.count();
  432|  2.75k|        auto mp = std::min(cl, cr);
  433|  2.75k|        return std::equal(posl.node()->leaf(),
  ------------------
  |  Branch (433:16): [True: 2.52k, False: 236]
  ------------------
  434|  2.75k|                          posl.node()->leaf() + mp,
  435|  2.75k|                          posr.node()->leaf()) &&
  436|  2.52k|               std::equal(posl.node()->leaf() + mp,
  ------------------
  |  Branch (436:16): [True: 2.27k, False: 245]
  ------------------
  437|  2.52k|                          posl.node()->leaf() + posl.count(),
  438|  2.52k|                          first + (idx + mp));
  439|  6.93k|    }
_ZN5immer6detail4rbts14equals_visitor10this_aux_t11visit_innerIRNS1_11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERNS1_15regular_sub_posISF_EERNS1_16rrbtree_iteratorIiSE_Lj2ELj2EEEEEbOT_jOT0_OT1_m:
  329|  2.16k|        {
  330|  2.16k|            return posl.nth_sub(i, this_t{}, posr, first, idx);
  331|  2.16k|        }
_ZN5immer6detail4rbts14equals_visitor13visit_regularIRNS1_8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERNS1_11relaxed_posISE_EERNS1_16rrbtree_iteratorIiSD_Lj2ELj2EEEEENSt3__19enable_ifIX12is_relaxed_vIT0_EEbE4typeEOT_OSP_OT1_m:
  412|  2.74k|    {
  413|  2.74k|        return this_t::visit_relaxed(posl, posr, first, idx);
  414|  2.74k|    }
_ZN5immer6detail4rbts14equals_visitor13visit_relaxedIRNS1_8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERNS1_11relaxed_posISE_EERNS1_16rrbtree_iteratorIiSD_Lj2ELj2EEEEEbOT_OT0_OT1_m:
  382|  2.74k|    {
  383|  2.74k|        auto nl = posl.node();
  384|  2.74k|        auto nr = posr.node();
  385|  2.74k|        if (nl == nr)
  ------------------
  |  Branch (385:13): [True: 0, False: 2.74k]
  ------------------
  386|      0|            return true;
  387|  2.74k|        auto cl = posl.count();
  388|  2.74k|        auto cr = posr.count();
  389|  2.74k|        assert(cr > 0);
  ------------------
  |  Branch (389:9): [True: 2.74k, False: 0]
  ------------------
  390|  2.74k|        auto sbr = size_t{};
  391|  2.74k|        auto i   = count_t{};
  392|  2.74k|        auto j   = count_t{};
  393|  12.6k|        for (; i < cl; ++i) {
  ------------------
  |  Branch (393:16): [True: 10.3k, False: 2.36k]
  ------------------
  394|  10.3k|            auto sbl = posl.size_before(i);
  395|  17.6k|            for (; j + 1 < cr && (sbr = posr.size_before(j)) < sbl; ++j)
  ------------------
  |  Branch (395:20): [True: 13.6k, False: 3.99k]
  |  Branch (395:34): [True: 7.32k, False: 6.34k]
  ------------------
  396|  7.32k|                ;
  397|  10.3k|            auto res =
  398|  10.3k|                sbl == sbr
  ------------------
  |  Branch (398:17): [True: 5.82k, False: 4.51k]
  ------------------
  399|  10.3k|                    ? posr.nth_sub(j, this_aux_t{}, i, posl, first, idx + sbl)
  400|  10.3k|                    : posl.nth_sub(i,
  401|  4.51k|                                   for_each_chunk_p_visitor{},
  402|  4.51k|                                   this_t::equal_chunk_p(first + (idx + sbl)));
  403|  10.3k|            if (!res)
  ------------------
  |  Branch (403:17): [True: 380, False: 9.95k]
  ------------------
  404|    380|                return false;
  405|  10.3k|        }
  406|  2.36k|        return true;
  407|  2.74k|    }
_ZN5immer6detail4rbts14equals_visitor10this_aux_t10visit_leafIRNS1_12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERNS1_8full_posISF_EERNS1_16rrbtree_iteratorIiSE_Lj2ELj2EEEEEbOT_jOT0_OT1_m:
  336|  3.94k|        {
  337|  3.94k|            return posl.nth_sub_leaf(i, this_t{}, posr, first, idx);
  338|  3.94k|        }
_ZN5immer6detail4rbts14equals_visitor10this_aux_t11visit_innerIRNS1_11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERNS1_8full_posISF_EERNS1_16rrbtree_iteratorIiSE_Lj2ELj2EEEEEbOT_jOT0_OT1_m:
  329|    880|        {
  330|    880|            return posl.nth_sub(i, this_t{}, posr, first, idx);
  331|    880|        }
_ZN5immer6detail4rbts14equals_visitor10this_aux_t11visit_innerIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERNS1_8full_posISF_EERNS1_16rrbtree_iteratorIiSE_Lj2ELj2EEEEEbOT_jOT0_OT1_m:
  329|  1.00k|        {
  330|  1.00k|            return posl.nth_sub(i, this_t{}, posr, first, idx);
  331|  1.00k|        }
_ZN5immer6detail4rbts14equals_visitor13visit_regularIRNS1_8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERNS1_15regular_sub_posISE_EERNS1_16rrbtree_iteratorIiSD_Lj2ELj2EEEEENSt3__19enable_ifIXnt12is_relaxed_vIT0_EEbE4typeEOT_OSP_OT1_m:
  419|  1.78k|    {
  420|  1.78k|        return posl.count() >= posr.count()
  ------------------
  |  Branch (420:16): [True: 1.78k, False: 0]
  ------------------
  421|  1.78k|                   ? this_t::visit_regular(posl, posr.node())
  422|  1.78k|                   : this_t::visit_regular(posr, posl.node());
  423|  1.78k|    }
_ZN5immer6detail4rbts14equals_visitor13visit_regularIRNS1_8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEESE_EEbOT_PT0_:
  443|  8.81k|    {
  444|  8.81k|        auto node = pos.node();
  445|  8.81k|        return node == other || pos.each_pred_zip(this_t{}, other);
  ------------------
  |  Branch (445:16): [True: 5.87k, False: 2.93k]
  |  Branch (445:33): [True: 1.51k, False: 1.42k]
  ------------------
  446|  8.81k|    }
_ZN5immer6detail4rbts14equals_visitor10visit_leafIRNS1_13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEESE_EEbOT_PT0_:
  450|  11.5k|    {
  451|  11.5k|        auto node = pos.node();
  452|  11.5k|        return node == other || std::equal(node->leaf(),
  ------------------
  |  Branch (452:16): [True: 7.54k, False: 3.98k]
  |  Branch (452:33): [True: 2.20k, False: 1.77k]
  ------------------
  453|  3.98k|                                           node->leaf() + pos.count(),
  454|  3.98k|                                           other->leaf());
  455|  11.5k|    }
_ZN5immer6detail4rbts14equals_visitor13visit_regularIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEESE_EEbOT_PT0_:
  443|  7.30k|    {
  444|  7.30k|        auto node = pos.node();
  445|  7.30k|        return node == other || pos.each_pred_zip(this_t{}, other);
  ------------------
  |  Branch (445:16): [True: 2.61k, False: 4.69k]
  |  Branch (445:33): [True: 2.45k, False: 2.23k]
  ------------------
  446|  7.30k|    }
_ZN5immer6detail4rbts14equals_visitor10visit_leafIRNS1_8leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEESE_EEbOT_PT0_:
  450|  2.81k|    {
  451|  2.81k|        auto node = pos.node();
  452|  2.81k|        return node == other || std::equal(node->leaf(),
  ------------------
  |  Branch (452:16): [True: 1.50k, False: 1.31k]
  |  Branch (452:33): [True: 612, False: 701]
  ------------------
  453|  1.31k|                                           node->leaf() + pos.count(),
  454|  1.31k|                                           other->leaf());
  455|  2.81k|    }
_ZN5immer6detail4rbts14equals_visitor13visit_regularIRNS1_11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEESE_EEbOT_PT0_:
  443|  3.45k|    {
  444|  3.45k|        auto node = pos.node();
  445|  3.45k|        return node == other || pos.each_pred_zip(this_t{}, other);
  ------------------
  |  Branch (445:16): [True: 339, False: 3.12k]
  |  Branch (445:33): [True: 2.10k, False: 1.02k]
  ------------------
  446|  3.45k|    }
_ZN5immer6detail4rbts24for_each_chunk_p_visitor10visit_leafIRNS1_13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERZNS1_14equals_visitor13equal_chunk_pINS1_16rrbtree_iteratorIiSD_Lj2ELj2EEEEEDaOT_EUlSL_T0_E_EEbSM_OSN_:
  112|   303k|    {
  113|   303k|        auto data = as_const(pos.node()->leaf());
  114|   303k|        return fn(data, data + pos.count());
  115|   303k|    }
_ZZN5immer6detail4rbts14equals_visitor13equal_chunk_pINS1_16rrbtree_iteratorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEDaOT_ENUlSE_T0_E_clIPKiSK_EEDaSE_SG_:
  367|  1.18M|        return [iter](auto f, auto e) mutable {
  368|  1.18M|            if (f == &*iter) {
  ------------------
  |  Branch (368:17): [True: 191k, False: 996k]
  ------------------
  369|   191k|                iter += e - f;
  370|   191k|                return true;
  371|   191k|            }
  372|  4.52M|            for (; f != e; ++f, ++iter)
  ------------------
  |  Branch (372:20): [True: 3.53M, False: 992k]
  ------------------
  373|  3.53M|                if (*f != *iter)
  ------------------
  |  Branch (373:21): [True: 3.61k, False: 3.53M]
  ------------------
  374|  3.61k|                    return false;
  375|   992k|            return true;
  376|   996k|        };
_ZN5immer6detail4rbts18region_for_visitorIiE11visit_innerIRNS1_11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEEENSt3__15tupleIJPimmEEEOT_m:
   53|  8.34M|    {
   54|  8.34M|        return pos.towards(this_t{}, idx);
   55|  8.34M|    }
_ZN5immer6detail4rbts18region_for_visitorIiE10visit_leafIRNS1_12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEEENSt3__15tupleIJPimmEEEOT_m:
   59|   881k|    {
   60|   881k|        return std::make_tuple(pos.node()->leaf(), pos.index(idx), pos.count());
   61|   881k|    }
_ZN5immer6detail4rbts18region_for_visitorIiE11visit_innerIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEEENSt3__15tupleIJPimmEEEOT_m:
   53|   327k|    {
   54|   327k|        return pos.towards(this_t{}, idx);
   55|   327k|    }
_ZN5immer6detail4rbts18region_for_visitorIiE10visit_leafIRNS1_13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEEENSt3__15tupleIJPimmEEEOT_m:
   59|   305k|    {
   60|   305k|        return std::make_tuple(pos.node()->leaf(), pos.index(idx), pos.count());
   61|   305k|    }
_ZN5immer6detail4rbts18region_for_visitorIiE11visit_innerIRNS1_8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEEENSt3__15tupleIJPimmEEEOT_m:
   53|   846k|    {
   54|   846k|        return pos.towards(this_t{}, idx);
   55|   846k|    }
_ZN5immer6detail4rbts18region_for_visitorIiE10visit_leafIRNS1_8leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEEENSt3__15tupleIJPimmEEEOT_m:
   59|  21.9k|    {
   60|  21.9k|        return std::make_tuple(pos.node()->leaf(), pos.index(idx), pos.count());
   61|  21.9k|    }
_ZN5immer6detail4rbts18region_for_visitorIiE11visit_innerIRNS1_11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEEENSt3__15tupleIJPimmEEEOT_m:
   53|  95.2k|    {
   54|  95.2k|        return pos.towards(this_t{}, idx);
   55|  95.2k|    }
_ZN5immer6detail4rbts24for_each_chunk_p_visitor11visit_innerIRNS1_8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERZNS1_14equals_visitor13equal_chunk_pINS1_16rrbtree_iteratorIiSD_Lj2ELj2EEEEEDaOT_EUlSL_T0_E_EEbSM_OSN_:
  106|  81.1k|    {
  107|  81.1k|        return pos.each_pred(this_t{}, fn);
  108|  81.1k|    }
_ZN5immer6detail4rbts14equals_visitor10this_aux_t11visit_innerIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEESH_RNS1_16rrbtree_iteratorIiSE_Lj2ELj2EEEEEbOT_jOT0_OT1_m:
  329|    789|        {
  330|    789|            return posl.nth_sub(i, this_t{}, posr, first, idx);
  331|    789|        }
_ZN5immer6detail4rbts14equals_visitor13visit_regularIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEESG_RNS1_16rrbtree_iteratorIiSD_Lj2ELj2EEEEENSt3__19enable_ifIXnt12is_relaxed_vIT0_EEbE4typeEOT_OSM_OT1_m:
  419|  6.24k|    {
  420|  6.24k|        return posl.count() >= posr.count()
  ------------------
  |  Branch (420:16): [True: 6.24k, False: 0]
  ------------------
  421|  6.24k|                   ? this_t::visit_regular(posl, posr.node())
  422|  6.24k|                   : this_t::visit_regular(posr, posl.node());
  423|  6.24k|    }
_ZN5immer6detail4rbts24for_each_chunk_p_visitor10visit_leafIRNS1_12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERZNS1_14equals_visitor13equal_chunk_pINS1_16rrbtree_iteratorIiSD_Lj2ELj2EEEEEDaOT_EUlSL_T0_E_EEbSM_OSN_:
  112|   866k|    {
  113|   866k|        auto data = as_const(pos.node()->leaf());
  114|   866k|        return fn(data, data + pos.count());
  115|   866k|    }
_ZN5immer6detail4rbts24for_each_chunk_p_visitor11visit_innerIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERZNS1_14equals_visitor13equal_chunk_pINS1_16rrbtree_iteratorIiSD_Lj2ELj2EEEEEDaOT_EUlSL_T0_E_EEbSM_OSN_:
  106|  18.8k|    {
  107|  18.8k|        return pos.each_pred(this_t{}, fn);
  108|  18.8k|    }
_ZN5immer6detail4rbts24for_each_chunk_p_visitor10visit_leafIRNS1_8leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERZNS1_14equals_visitor13equal_chunk_pINS1_16rrbtree_iteratorIiSD_Lj2ELj2EEEEEDaOT_EUlSL_T0_E_EEbSM_OSN_:
  112|  17.3k|    {
  113|  17.3k|        auto data = as_const(pos.node()->leaf());
  114|  17.3k|        return fn(data, data + pos.count());
  115|  17.3k|    }
_ZN5immer6detail4rbts24for_each_chunk_p_visitor11visit_innerIRNS1_11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERZNS1_14equals_visitor13equal_chunk_pINS1_16rrbtree_iteratorIiSD_Lj2ELj2EEEEEDaOT_EUlSL_T0_E_EEbSM_OSN_:
  106|  6.03k|    {
  107|  6.03k|        return pos.each_pred(this_t{}, fn);
  108|  6.03k|    }
_ZN5immer6detail4rbts14equals_visitor10this_aux_t11visit_innerIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERNS1_11relaxed_posISF_EERNS1_16rrbtree_iteratorIiSE_Lj2ELj2EEEEEbOT_jOT0_OT1_m:
  329|  2.65k|        {
  330|  2.65k|            return posl.nth_sub(i, this_t{}, posr, first, idx);
  331|  2.65k|        }
_ZN5immer6detail4rbts14equals_visitor13visit_relaxedIRNS1_11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERNS1_15regular_sub_posISE_EERNS1_16rrbtree_iteratorIiSD_Lj2ELj2EEEEEbOT_OT0_OT1_m:
  382|  2.37k|    {
  383|  2.37k|        auto nl = posl.node();
  384|  2.37k|        auto nr = posr.node();
  385|  2.37k|        if (nl == nr)
  ------------------
  |  Branch (385:13): [True: 0, False: 2.37k]
  ------------------
  386|      0|            return true;
  387|  2.37k|        auto cl = posl.count();
  388|  2.37k|        auto cr = posr.count();
  389|  2.37k|        assert(cr > 0);
  ------------------
  |  Branch (389:9): [True: 2.37k, False: 0]
  ------------------
  390|  2.37k|        auto sbr = size_t{};
  391|  2.37k|        auto i   = count_t{};
  392|  2.37k|        auto j   = count_t{};
  393|  7.98k|        for (; i < cl; ++i) {
  ------------------
  |  Branch (393:16): [True: 6.39k, False: 1.58k]
  ------------------
  394|  6.39k|            auto sbl = posl.size_before(i);
  395|  9.95k|            for (; j + 1 < cr && (sbr = posr.size_before(j)) < sbl; ++j)
  ------------------
  |  Branch (395:20): [True: 7.98k, False: 1.96k]
  |  Branch (395:34): [True: 3.55k, False: 4.43k]
  ------------------
  396|  3.55k|                ;
  397|  6.39k|            auto res =
  398|  6.39k|                sbl == sbr
  ------------------
  |  Branch (398:17): [True: 4.06k, False: 2.32k]
  ------------------
  399|  6.39k|                    ? posr.nth_sub(j, this_aux_t{}, i, posl, first, idx + sbl)
  400|  6.39k|                    : posl.nth_sub(i,
  401|  2.32k|                                   for_each_chunk_p_visitor{},
  402|  2.32k|                                   this_t::equal_chunk_p(first + (idx + sbl)));
  403|  6.39k|            if (!res)
  ------------------
  |  Branch (403:17): [True: 790, False: 5.60k]
  ------------------
  404|    790|                return false;
  405|  6.39k|        }
  406|  1.58k|        return true;
  407|  2.37k|    }
_ZN5immer6detail4rbts14equals_visitor10this_aux_t10visit_leafIRNS1_13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERNS1_11relaxed_posISF_EERNS1_16rrbtree_iteratorIiSE_Lj2ELj2EEEEEbOT_jOT0_OT1_m:
  336|  4.79k|        {
  337|  4.79k|            return posl.nth_sub_leaf(i, this_t{}, posr, first, idx);
  338|  4.79k|        }
_ZN5immer6detail4rbts14equals_visitor10visit_leafIRNS1_12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERNS1_13full_leaf_posISE_EERNS1_16rrbtree_iteratorIiSD_Lj2ELj2EEEEEbOT_OT0_OT1_m:
  427|  4.79k|    {
  428|  4.79k|        if (posl.node() == posr.node())
  ------------------
  |  Branch (428:13): [True: 2.84k, False: 1.94k]
  ------------------
  429|  2.84k|            return true;
  430|  1.94k|        auto cl = posl.count();
  431|  1.94k|        auto cr = posr.count();
  432|  1.94k|        auto mp = std::min(cl, cr);
  433|  1.94k|        return std::equal(posl.node()->leaf(),
  ------------------
  |  Branch (433:16): [True: 1.52k, False: 417]
  ------------------
  434|  1.94k|                          posl.node()->leaf() + mp,
  435|  1.94k|                          posr.node()->leaf()) &&
  436|  1.52k|               std::equal(posl.node()->leaf() + mp,
  ------------------
  |  Branch (436:16): [True: 1.52k, False: 0]
  ------------------
  437|  1.52k|                          posl.node()->leaf() + posl.count(),
  438|  1.52k|                          first + (idx + mp));
  439|  4.79k|    }
_ZN5immer6detail4rbts14equals_visitor10this_aux_t11visit_innerIRNS1_8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERNS1_11relaxed_posISF_EERNS1_16rrbtree_iteratorIiSE_Lj2ELj2EEEEEbOT_jOT0_OT1_m:
  329|  2.68k|        {
  330|  2.68k|            return posl.nth_sub(i, this_t{}, posr, first, idx);
  331|  2.68k|        }
_ZN5immer6detail4rbts14equals_visitor13visit_relaxedIRNS1_11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERNS1_8full_posISE_EERNS1_16rrbtree_iteratorIiSD_Lj2ELj2EEEEEbOT_OT0_OT1_m:
  382|  1.62k|    {
  383|  1.62k|        auto nl = posl.node();
  384|  1.62k|        auto nr = posr.node();
  385|  1.62k|        if (nl == nr)
  ------------------
  |  Branch (385:13): [True: 0, False: 1.62k]
  ------------------
  386|      0|            return true;
  387|  1.62k|        auto cl = posl.count();
  388|  1.62k|        auto cr = posr.count();
  389|  1.62k|        assert(cr > 0);
  ------------------
  |  Branch (389:9): [True: 1.62k, False: 0]
  ------------------
  390|  1.62k|        auto sbr = size_t{};
  391|  1.62k|        auto i   = count_t{};
  392|  1.62k|        auto j   = count_t{};
  393|  7.06k|        for (; i < cl; ++i) {
  ------------------
  |  Branch (393:16): [True: 5.86k, False: 1.20k]
  ------------------
  394|  5.86k|            auto sbl = posl.size_before(i);
  395|  10.0k|            for (; j + 1 < cr && (sbr = posr.size_before(j)) < sbl; ++j)
  ------------------
  |  Branch (395:20): [True: 8.88k, False: 1.15k]
  |  Branch (395:34): [True: 4.17k, False: 4.71k]
  ------------------
  396|  4.17k|                ;
  397|  5.86k|            auto res =
  398|  5.86k|                sbl == sbr
  ------------------
  |  Branch (398:17): [True: 3.71k, False: 2.14k]
  ------------------
  399|  5.86k|                    ? posr.nth_sub(j, this_aux_t{}, i, posl, first, idx + sbl)
  400|  5.86k|                    : posl.nth_sub(i,
  401|  2.14k|                                   for_each_chunk_p_visitor{},
  402|  2.14k|                                   this_t::equal_chunk_p(first + (idx + sbl)));
  403|  5.86k|            if (!res)
  ------------------
  |  Branch (403:17): [True: 420, False: 5.44k]
  ------------------
  404|    420|                return false;
  405|  5.86k|        }
  406|  1.20k|        return true;
  407|  1.62k|    }
_ZN5immer6detail4rbts14equals_visitor13visit_regularIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERNS1_8full_posISE_EERNS1_16rrbtree_iteratorIiSD_Lj2ELj2EEEEENSt3__19enable_ifIXnt12is_relaxed_vIT0_EEbE4typeEOT_OSP_OT1_m:
  419|  1.05k|    {
  420|  1.05k|        return posl.count() >= posr.count()
  ------------------
  |  Branch (420:16): [True: 1.05k, False: 0]
  ------------------
  421|  1.05k|                   ? this_t::visit_regular(posl, posr.node())
  422|  1.05k|                   : this_t::visit_regular(posr, posl.node());
  423|  1.05k|    }
_ZN5immer6detail4rbts24for_each_chunk_p_visitor11visit_innerIRNS1_11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERZNS1_14equals_visitor13equal_chunk_pINS1_16rrbtree_iteratorIiSD_Lj2ELj2EEEEEDaOT_EUlSL_T0_E_EEbSM_OSN_:
  106|   569k|    {
  107|   569k|        return pos.each_pred(this_t{}, fn);
  108|   569k|    }
_ZN5immer6detail4rbts14equals_visitor13equal_chunk_pINS1_16rrbtree_iteratorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEDaOT_:
  366|  31.3k|    {
  367|  31.3k|        return [iter](auto f, auto e) mutable {
  368|  31.3k|            if (f == &*iter) {
  369|  31.3k|                iter += e - f;
  370|  31.3k|                return true;
  371|  31.3k|            }
  372|  31.3k|            for (; f != e; ++f, ++iter)
  373|  31.3k|                if (*f != *iter)
  374|  31.3k|                    return false;
  375|  31.3k|            return true;
  376|  31.3k|        };
  377|  31.3k|    }
_ZN5immer6detail4rbts14equals_visitor3rrb10visit_nodeIRNS1_11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERNS1_16rrbtree_iteratorIiSE_Lj2ELj2EEESF_EEbOT_OT0_PT1_jm:
  349|  1.40k|        {
  350|  1.40k|            assert(shiftl <= posr.shift());
  ------------------
  |  Branch (350:13): [True: 1.40k, False: 0]
  ------------------
  351|  1.40k|            return shiftl == posr.shift()
  ------------------
  |  Branch (351:20): [True: 1.08k, False: 318]
  ------------------
  352|  1.40k|                       ? visit_maybe_relaxed_sub(rootl,
  353|  1.08k|                                                 shiftl,
  354|  1.08k|                                                 sizel,
  355|  1.08k|                                                 this_t{},
  356|  1.08k|                                                 posr,
  357|  1.08k|                                                 first,
  358|  1.08k|                                                 size_t{})
  359|  1.40k|                       : posr.first_sub_inner(
  360|    318|                             rrb{}, first, rootl, shiftl, sizel);
  361|  1.40k|        }
_ZN5immer6detail4rbts14equals_visitor3rrb10visit_nodeIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_16rrbtree_iteratorIiSE_Lj2ELj2EEESF_EEbOT_OT0_PT1_jm:
  349|  5.97k|        {
  350|  5.97k|            assert(shiftl <= posr.shift());
  ------------------
  |  Branch (350:13): [True: 5.97k, False: 0]
  ------------------
  351|  5.97k|            return shiftl == posr.shift()
  ------------------
  |  Branch (351:20): [True: 5.97k, False: 0]
  ------------------
  352|  5.97k|                       ? visit_maybe_relaxed_sub(rootl,
  353|  5.97k|                                                 shiftl,
  354|  5.97k|                                                 sizel,
  355|  5.97k|                                                 this_t{},
  356|  5.97k|                                                 posr,
  357|  5.97k|                                                 first,
  358|  5.97k|                                                 size_t{})
  359|  5.97k|                       : posr.first_sub_inner(
  360|      0|                             rrb{}, first, rootl, shiftl, sizel);
  361|  5.97k|        }
_ZN5immer6detail4rbts14equals_visitor10visit_leafIRNS1_12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEESE_EEbOT_PT0_:
  450|  6.59k|    {
  451|  6.59k|        auto node = pos.node();
  452|  6.59k|        return node == other || std::equal(node->leaf(),
  ------------------
  |  Branch (452:16): [True: 3.48k, False: 3.10k]
  |  Branch (452:33): [True: 977, False: 2.12k]
  ------------------
  453|  3.10k|                                           node->leaf() + pos.count(),
  454|  3.10k|                                           other->leaf());
  455|  6.59k|    }

_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENS1_11dec_visitorEJEEEDcPT_jmT0_DpOT1_:
 1838|  28.0M|{
 1839|  28.0M|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 28.0M, False: 0]
  ------------------
 1840|  28.0M|    auto relaxed = node->relaxed();
 1841|  28.0M|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 25.8M, False: 2.24M]
  ------------------
 1842|  25.8M|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 25.8M, False: 0]
  ------------------
 1843|  25.8M|        return make_relaxed_pos(node, shift, relaxed)
 1844|  25.8M|            .visit(v, std::forward<Args>(args)...);
 1845|  25.8M|    } else {
 1846|  2.24M|        return make_regular_sub_pos(node, shift, size)
 1847|  2.24M|            .visit(v, std::forward<Args>(args)...);
 1848|  2.24M|    }
 1849|  28.0M|}
_ZN5immer6detail4rbts16make_relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_11relaxed_posIT_EEPSE_jPNSE_9relaxed_tE:
 1828|  88.1M|{
 1829|  88.1M|    assert(node);
  ------------------
  |  Branch (1829:5): [True: 88.1M, False: 0]
  ------------------
 1830|  88.1M|    assert(relaxed);
  ------------------
  |  Branch (1830:5): [True: 88.1M, False: 0]
  ------------------
 1831|  88.1M|    assert(shift >= NodeT::bits_leaf);
  ------------------
  |  Branch (1831:5): [True: 88.1M, False: 0]
  ------------------
 1832|  88.1M|    return {node, shift, relaxed};
 1833|  88.1M|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_11dec_visitorEJEEEDcT_DpOT0_:
 1813|  32.9M|    {
 1814|  32.9M|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  32.9M|    }
_ZNK5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE4nodeEv:
 1431|  53.9M|    node_t* node() const { return node_; }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE4eachINS1_11dec_visitorEJEEEvT_DpOT0_:
 1476|  10.6M|    {
 1477|  10.6M|        each_left(v, relaxed_->d.count, args...);
 1478|  10.6M|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE9each_leftINS1_11dec_visitorEJEEEvT_jDpOT0_:
 1623|  10.8M|    {
 1624|  10.8M|        auto p = node_->inner();
 1625|  10.8M|        auto s = size_t{};
 1626|  10.8M|        if (shift_ == BL) {
  ------------------
  |  Branch (1626:13): [True: 1.92M, False: 8.94M]
  ------------------
 1627|  8.37M|            for (auto i = count_t{0}; i < n; ++i) {
  ------------------
  |  Branch (1627:39): [True: 6.44M, False: 1.92M]
  ------------------
 1628|  6.44M|                IMMER_PREFETCH(p + i + 1);
 1629|  6.44M|                make_leaf_sub_pos(p[i], relaxed_->d.sizes[i] - s)
 1630|  6.44M|                    .visit(v, args...);
 1631|  6.44M|                s = relaxed_->d.sizes[i];
 1632|  6.44M|                assert(s);
  ------------------
  |  Branch (1632:17): [True: 6.44M, False: 0]
  ------------------
 1633|  6.44M|            }
 1634|  8.94M|        } else {
 1635|  8.94M|            auto ss = shift_ - B;
 1636|  35.4M|            for (auto i = count_t{0}; i < n; ++i) {
  ------------------
  |  Branch (1636:39): [True: 26.5M, False: 8.94M]
  ------------------
 1637|  26.5M|                visit_maybe_relaxed_sub(
 1638|  26.5M|                    p[i], ss, relaxed_->d.sizes[i] - s, v, args...);
 1639|  26.5M|                s = relaxed_->d.sizes[i];
 1640|       |                assert(s);
  ------------------
  |  Branch (1640:17): [True: 26.5M, False: 0]
  ------------------
 1641|  26.5M|            }
 1642|  8.94M|        }
 1643|  10.8M|    }
_ZNK5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5countEv:
 1430|  51.1M|    count_t count() const { return relaxed_->d.count; }
_ZN5immer6detail4rbts20make_regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_15regular_sub_posIT_EEPSE_jm:
 1044|  5.58M|{
 1045|  5.58M|    assert(node);
  ------------------
  |  Branch (1045:5): [True: 5.58M, False: 0]
  ------------------
 1046|  5.58M|    assert(shift >= NodeT::bits_leaf);
  ------------------
  |  Branch (1046:5): [True: 5.58M, False: 0]
  ------------------
 1047|  5.58M|    assert(size > 0);
  ------------------
  |  Branch (1047:5): [True: 5.58M, False: 0]
  ------------------
 1048|  5.58M|    assert(size <= (branches<NodeT::bits, size_t> << shift));
  ------------------
  |  Branch (1048:5): [True: 5.58M, False: 0]
  ------------------
 1049|  5.58M|    return {node, shift, size};
 1050|  5.58M|}
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_11dec_visitorEJEEEDcT_DpOT0_:
 1036|  2.25M|    {
 1037|  2.25M|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  2.25M|    }
_ZNK5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE4nodeEv:
  785|  7.52M|    node_t* node() const { return node_; }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE4eachINS1_11dec_visitorEJEEEvT_DpOT0_:
  825|   570k|    {
  826|   570k|        return each_regular(*this, v, args...);
  827|   570k|    }
_ZN5immer6detail4rbts12each_regularIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_11dec_visitorEJEEEvOT_T0_DpOT1_:
  343|   570k|{
  344|   570k|    constexpr auto B  = bits<Pos>;
  345|   570k|    constexpr auto BL = bits_leaf<Pos>;
  346|   570k|    auto n            = p.node()->inner();
  347|   570k|    auto last         = p.count() - 1;
  348|   570k|    auto e            = n + last;
  349|   570k|    if (p.shift() == BL) {
  ------------------
  |  Branch (349:9): [True: 53.1k, False: 517k]
  ------------------
  350|   114k|        for (; n != e; ++n) {
  ------------------
  |  Branch (350:16): [True: 61.1k, False: 53.1k]
  ------------------
  351|  61.1k|            IMMER_PREFETCH(n + 1);
  352|  61.1k|            make_full_leaf_pos(*n).visit(v, args...);
  353|  61.1k|        }
  354|  53.1k|        make_leaf_pos(*n, p.size()).visit(v, args...);
  355|   517k|    } else {
  356|   517k|        auto ss = p.shift() - B;
  357|  1.21M|        for (; n != e; ++n)
  ------------------
  |  Branch (357:16): [True: 695k, False: 517k]
  ------------------
  358|   695k|            make_full_pos(*n, ss).visit(v, args...);
  359|   517k|        make_regular_pos(*n, ss, p.size()).visit(v, args...);
  360|   517k|    }
  361|   570k|}
_ZNK5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5shiftEv:
  787|  7.10M|    shift_t shift() const { return shift_; }
_ZN5immer6detail4rbts18make_full_leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_13full_leaf_posIT_EEPSE_:
  214|  3.95M|{
  215|  3.95M|    assert(node);
  ------------------
  |  Branch (215:5): [True: 3.95M, False: 0]
  ------------------
  216|  3.95M|    return {node};
  217|  3.95M|}
_ZN5immer6detail4rbts13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_11dec_visitorEJEEEDcT_DpOT0_:
  207|  1.14M|    {
  208|  1.14M|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  209|  1.14M|    }
_ZNK5immer6detail4rbts13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE4nodeEv:
  199|  2.99M|    node_t* node() const { return node_; }
_ZNK5immer6detail4rbts13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5countEv:
  198|  3.31M|    count_t count() const { return branches<BL>; }
_ZN5immer6detail4rbts13make_leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_8leaf_posIT_EEPSE_m:
  119|   980k|{
  120|   980k|    assert(node);
  ------------------
  |  Branch (120:5): [True: 980k, False: 0]
  ------------------
  121|   980k|    assert(size > 0);
  ------------------
  |  Branch (121:5): [True: 980k, False: 0]
  ------------------
  122|   980k|    return {node, size};
  123|   980k|}
_ZNK5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE4sizeEv:
  786|  4.03M|    size_t size() const { return size_; }
_ZN5immer6detail4rbts8leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_11dec_visitorEJEEEDcT_DpOT0_:
  112|   455k|    {
  113|   455k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  114|   455k|    }
_ZNK5immer6detail4rbts8leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE4nodeEv:
  104|   984k|    node_t* node() const { return node_; }
_ZNK5immer6detail4rbts8leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5countEv:
  103|  1.01M|    count_t count() const { return index(size_ - 1) + 1; }
_ZNK5immer6detail4rbts8leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5indexEm:
  107|  1.05M|    count_t index(size_t idx) const { return idx & mask<BL>; }
_ZN5immer6detail4rbts13make_full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_8full_posIT_EEPSE_j:
 1412|  5.54M|{
 1413|  5.54M|    assert(node);
  ------------------
  |  Branch (1413:5): [True: 5.54M, False: 0]
  ------------------
 1414|  5.54M|    assert(shift >= NodeT::bits_leaf);
  ------------------
  |  Branch (1414:5): [True: 5.54M, False: 0]
  ------------------
 1415|  5.54M|    return {node, shift};
 1416|  5.54M|}
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_11dec_visitorEJEEEDcT_DpOT0_:
 1405|  3.28M|    {
 1406|  3.28M|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1407|  3.28M|    }
_ZNK5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE4nodeEv:
 1159|  3.94M|    node_t* node() const { return node_; }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE4eachINS1_11dec_visitorEJEEEvT_DpOT0_:
 1185|   216k|    {
 1186|   216k|        auto p = node_->inner();
 1187|   216k|        auto e = p + branches<B>;
 1188|   216k|        if (shift_ == BL) {
  ------------------
  |  Branch (1188:13): [True: 166k, False: 50.1k]
  ------------------
 1189|   830k|            for (; p != e; ++p) {
  ------------------
  |  Branch (1189:20): [True: 664k, False: 166k]
  ------------------
 1190|   664k|                IMMER_PREFETCH(p + 1);
 1191|   664k|                make_full_leaf_pos(*p).visit(v, args...);
 1192|   664k|            }
 1193|   166k|        } else {
 1194|  50.1k|            auto ss = shift_ - B;
 1195|   250k|            for (; p != e; ++p)
  ------------------
  |  Branch (1195:20): [True: 200k, False: 50.1k]
  ------------------
 1196|   200k|                make_full_pos(*p, ss).visit(v, args...);
 1197|  50.1k|        }
 1198|   216k|    }
_ZNK5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5countEv:
 1158|  1.44M|    count_t count() const { return branches<B>; }
_ZN5immer6detail4rbts16make_regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_11regular_posIT_EEPSE_jm:
  690|  5.16M|{
  691|  5.16M|    assert(node);
  ------------------
  |  Branch (691:5): [True: 5.16M, False: 0]
  ------------------
  692|  5.16M|    assert(shift >= NodeT::bits_leaf);
  ------------------
  |  Branch (692:5): [True: 5.16M, False: 0]
  ------------------
  693|  5.16M|    assert(size > 0);
  ------------------
  |  Branch (693:5): [True: 5.16M, False: 0]
  ------------------
  694|  5.16M|    return {node, shift, size};
  695|  5.16M|}
_ZN5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_11dec_visitorEJEEEDcT_DpOT0_:
  336|  2.22M|    {
  337|  2.22M|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
  338|  2.22M|    }
_ZNK5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE4nodeEv:
  231|  9.45M|    node_t* node() const { return node_; }
_ZN5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE4eachINS1_11dec_visitorEJEEEvT_DpOT0_:
  243|  2.09M|    {
  244|  2.09M|        return each_regular(*this, v, args...);
  245|  2.09M|    }
_ZN5immer6detail4rbts12each_regularIRNS1_11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_11dec_visitorEJEEEvOT_T0_DpOT1_:
  343|  2.09M|{
  344|  2.09M|    constexpr auto B  = bits<Pos>;
  345|  2.09M|    constexpr auto BL = bits_leaf<Pos>;
  346|  2.09M|    auto n            = p.node()->inner();
  347|  2.09M|    auto last         = p.count() - 1;
  348|  2.09M|    auto e            = n + last;
  349|  2.09M|    if (p.shift() == BL) {
  ------------------
  |  Branch (349:9): [True: 394k, False: 1.70M]
  ------------------
  350|   792k|        for (; n != e; ++n) {
  ------------------
  |  Branch (350:16): [True: 398k, False: 394k]
  ------------------
  351|   398k|            IMMER_PREFETCH(n + 1);
  352|   398k|            make_full_leaf_pos(*n).visit(v, args...);
  353|   398k|        }
  354|   394k|        make_leaf_pos(*n, p.size()).visit(v, args...);
  355|  1.70M|    } else {
  356|  1.70M|        auto ss = p.shift() - B;
  357|  4.07M|        for (; n != e; ++n)
  ------------------
  |  Branch (357:16): [True: 2.36M, False: 1.70M]
  ------------------
  358|  2.36M|            make_full_pos(*n, ss).visit(v, args...);
  359|  1.70M|        make_regular_pos(*n, ss, p.size()).visit(v, args...);
  360|  1.70M|    }
  361|  2.09M|}
_ZNK5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5shiftEv:
  233|  9.00M|    shift_t shift() const { return shift_; }
_ZNK5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE4sizeEv:
  232|  12.7M|    size_t size() const { return size_; }
_ZNK5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5countEv:
  230|  6.61M|    count_t count() const { return index(size_ - 1) + 1; }
_ZNK5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5indexEm:
  234|  12.4M|    count_t index(size_t idx) const { return (idx >> shift_) & mask<B>; }
_ZNK5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5countEv:
  784|  8.58M|    count_t count() const { return subindex(size_ - 1) + 1; }
_ZNK5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE8subindexEm:
  789|  8.90M|    count_t subindex(size_t idx) const { return idx >> shift_; }
_ZN5immer6detail4rbts22make_empty_regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_17empty_regular_posIT_EEPSE_:
   64|  1.63M|{
   65|  1.63M|    return {node};
   66|  1.63M|}
_ZN5immer6detail4rbts17empty_regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_11dec_visitorEJEEEDcT_DpOT0_:
   57|  1.63M|    {
   58|  1.63M|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
   59|  1.63M|    }
_ZNK5immer6detail4rbts17empty_regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE4nodeEv:
   41|  1.63M|    node_t* node() const { return node_; }
_ZN5immer6detail4rbts17make_leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_12leaf_sub_posIT_EEPSE_j:
  151|  16.5M|{
  152|  16.5M|    assert(node);
  ------------------
  |  Branch (152:5): [True: 16.5M, False: 0]
  ------------------
  153|  16.5M|    assert(count <= branches<NodeT::bits_leaf>);
  ------------------
  |  Branch (153:5): [True: 16.5M, False: 0]
  ------------------
  154|  16.5M|    return {node, count};
  155|  16.5M|}
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_11dec_visitorEJEEEDcT_DpOT0_:
  144|  9.46M|    {
  145|  9.46M|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  146|  9.46M|    }
_ZNK5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE4nodeEv:
  136|  14.4M|    node_t* node() const { return node_; }
_ZNK5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5countEv:
  135|  7.95M|    count_t count() const { return count_; }
_ZN5immer6detail4rbts19make_empty_leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_14empty_leaf_posIT_EEPSE_:
   88|  1.53M|{
   89|  1.53M|    assert(node);
  ------------------
  |  Branch (89:5): [True: 1.53M, False: 0]
  ------------------
   90|  1.53M|    return {node};
   91|  1.53M|}
_ZN5immer6detail4rbts14empty_leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_11dec_visitorEJEEEDcT_DpOT0_:
   81|  1.53M|    {
   82|  1.53M|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
   83|  1.53M|    }
_ZNK5immer6detail4rbts14empty_leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE4nodeEv:
   75|  1.53M|    node_t* node() const { return node_; }
_ZNK5immer6detail4rbts14empty_leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5countEv:
   74|  7.64k|    count_t count() const { return 0; }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_17push_tail_visitorISC_EEJRPSC_RjEEEDcT_DpOT0_:
 1813|   523k|    {
 1814|   523k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|   523k|    }
_ZNK5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5shiftEv:
 1433|  10.4M|    shift_t shift() const { return shift_; }
_ZNK5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE4sizeEj:
 1443|  5.36M|    {
 1444|  5.36M|        return size_sbh(offset, size_before(offset));
 1445|  5.36M|    }
_ZNK5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE8size_sbhEjm:
 1448|  5.69M|    {
 1449|  5.69M|        assert(size_before_hint == size_before(offset));
  ------------------
  |  Branch (1449:9): [True: 5.69M, False: 0]
  ------------------
 1450|  5.69M|        return relaxed_->d.sizes[offset] - size_before_hint;
 1451|  5.69M|    }
_ZNK5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE11size_beforeEj:
 1438|  15.7M|    {
 1439|  15.7M|        return offset ? relaxed_->d.sizes[offset - 1] : 0;
  ------------------
  |  Branch (1439:16): [True: 10.1M, False: 5.61M]
  ------------------
 1440|  15.7M|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE11last_oh_cshINS1_17push_tail_visitorISC_EEJRPSC_RjEEEDcT_jmDpOT0_:
 1737|   508k|    {
 1738|   508k|        assert(offset_hint == count() - 1);
  ------------------
  |  Branch (1738:9): [True: 508k, False: 0]
  ------------------
 1739|   508k|        assert(child_size_hint == size(offset_hint));
  ------------------
  |  Branch (1739:9): [True: 508k, False: 0]
  ------------------
 1740|   508k|        auto child   = node_->inner()[offset_hint];
 1741|   508k|        auto is_leaf = shift_ == BL;
 1742|   508k|        return is_leaf
  ------------------
  |  Branch (1742:16): [True: 0, False: 508k]
  ------------------
 1743|   508k|                   ? make_leaf_sub_pos(child, child_size_hint).visit(v, args...)
 1744|   508k|                   : visit_maybe_relaxed_sub(
 1745|   508k|                         child, shift_ - B, child_size_hint, v, args...);
 1746|   508k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENS1_17push_tail_visitorISC_EEJRPSC_RjEEEDcPT_jmT0_DpOT1_:
 1838|   508k|{
 1839|   508k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 508k, False: 0]
  ------------------
 1840|   508k|    auto relaxed = node->relaxed();
 1841|   508k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 307k, False: 200k]
  ------------------
 1842|   307k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 307k, False: 0]
  ------------------
 1843|   307k|        return make_relaxed_pos(node, shift, relaxed)
 1844|   307k|            .visit(v, std::forward<Args>(args)...);
 1845|   307k|    } else {
 1846|   200k|        return make_regular_sub_pos(node, shift, size)
 1847|   200k|            .visit(v, std::forward<Args>(args)...);
 1848|   200k|    }
 1849|   508k|}
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_17push_tail_visitorISC_EEJRPSC_RjEEEDcT_DpOT0_:
 1036|   200k|    {
 1037|   200k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|   200k|    }
_ZNK5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5indexEm:
  788|  2.18M|    count_t index(size_t idx) const { return (idx >> shift_) & mask<B>; }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE7last_ohINS1_17push_tail_visitorISC_EEJRPSC_EEEDcT_jDpOT0_:
  952|   483k|    {
  953|   483k|        return last_oh_regular(*this, v, offset_hint, args...);
  954|   483k|    }
_ZN5immer6detail4rbts15last_oh_regularIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_17push_tail_visitorISD_EEJRPSD_EEEDcOT_T0_jDpOT1_:
  677|   483k|{
  678|   483k|    assert(offset_hint == p.count() - 1);
  ------------------
  |  Branch (678:5): [True: 483k, False: 0]
  ------------------
  679|   483k|    constexpr auto B  = bits<Pos>;
  680|   483k|    constexpr auto BL = bits_leaf<Pos>;
  681|   483k|    auto child        = p.node()->inner()[offset_hint];
  682|   483k|    auto is_leaf      = p.shift() == BL;
  683|   483k|    return is_leaf ? make_leaf_pos(child, p.size()).visit(v, args...)
  ------------------
  |  Branch (683:12): [True: 0, False: 483k]
  ------------------
  684|   483k|                   : make_regular_pos(child, p.shift() - B, p.size())
  685|   483k|                         .visit(v, args...);
  686|   483k|}
_ZN5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_17push_tail_visitorISC_EEJRPSC_EEEDcT_DpOT0_:
  336|  2.06M|    {
  337|  2.06M|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
  338|  2.06M|    }
_ZN5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE7last_ohINS1_17push_tail_visitorISC_EEJRPSC_EEEDcT_jDpOT0_:
  330|  1.57M|    {
  331|  1.57M|        return last_oh_regular(*this, v, offset_hint, args...);
  332|  1.57M|    }
_ZN5immer6detail4rbts15last_oh_regularIRNS1_11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_17push_tail_visitorISD_EEJRPSD_EEEDcOT_T0_jDpOT1_:
  677|  1.57M|{
  678|  1.57M|    assert(offset_hint == p.count() - 1);
  ------------------
  |  Branch (678:5): [True: 1.57M, False: 0]
  ------------------
  679|  1.57M|    constexpr auto B  = bits<Pos>;
  680|  1.57M|    constexpr auto BL = bits_leaf<Pos>;
  681|  1.57M|    auto child        = p.node()->inner()[offset_hint];
  682|  1.57M|    auto is_leaf      = p.shift() == BL;
  683|  1.57M|    return is_leaf ? make_leaf_pos(child, p.size()).visit(v, args...)
  ------------------
  |  Branch (683:12): [True: 0, False: 1.57M]
  ------------------
  684|  1.57M|                   : make_regular_pos(child, p.shift() - B, p.size())
  685|  1.57M|                         .visit(v, args...);
  686|  1.57M|}
_ZNK5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE4sizeEv:
 1432|  19.5M|    size_t size() const { return relaxed_->d.sizes[relaxed_->d.count - 1]; }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_17push_tail_visitorISC_EEJRPSC_EEEDcT_DpOT0_:
 1036|   304k|    {
 1037|   304k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|   304k|    }
flex-vector.cpp:_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_14update_visitorISC_EEJmRZZ22LLVMFuzzerTestOneInputENK3$_6clI12fuzzer_inputEEDaRT_EUlSK_E_EEEDcSK_DpOT0_:
  144|  46.0k|    {
  145|  46.0k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  146|  46.0k|    }
_ZNK5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5indexEm:
  139|  1.06M|    count_t index(size_t idx) const { return idx & mask<BL>; }
flex-vector.cpp:_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENS1_14update_visitorISC_EEJRmRZZ22LLVMFuzzerTestOneInputENK3$_6clI12fuzzer_inputEEDaRT_EUlSJ_E_EEEDcPSJ_jmT0_DpOT1_:
 1838|   341k|{
 1839|   341k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 341k, False: 0]
  ------------------
 1840|   341k|    auto relaxed = node->relaxed();
 1841|   341k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 312k, False: 28.6k]
  ------------------
 1842|   312k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 312k, False: 0]
  ------------------
 1843|   312k|        return make_relaxed_pos(node, shift, relaxed)
 1844|   312k|            .visit(v, std::forward<Args>(args)...);
 1845|   312k|    } else {
 1846|  28.6k|        return make_regular_sub_pos(node, shift, size)
 1847|  28.6k|            .visit(v, std::forward<Args>(args)...);
 1848|  28.6k|    }
 1849|   341k|}
flex-vector.cpp:_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_14update_visitorISC_EEJRmRZZ22LLVMFuzzerTestOneInputENK3$_6clI12fuzzer_inputEEDaRT_EUlSL_E_EEEDcSL_DpOT0_:
 1813|   312k|    {
 1814|   312k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|   312k|    }
_ZNK5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5indexEm:
 1454|  27.7M|    {
 1455|  27.7M|        auto offset = idx >> shift_;
 1456|  38.1M|        while (relaxed_->d.sizes[offset] <= idx)
  ------------------
  |  Branch (1456:16): [True: 10.3M, False: 27.7M]
  ------------------
 1457|  10.3M|            ++offset;
 1458|  27.7M|        return offset;
 1459|  27.7M|    }
_ZNK5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE7relaxedEv:
 1435|   312k|    relaxed_t* relaxed() const { return relaxed_; }
flex-vector.cpp:_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10towards_ohINS1_14update_visitorISC_EEJRZZ22LLVMFuzzerTestOneInputENK3$_6clI12fuzzer_inputEEDaRT_EUlSK_E_EEEDcSK_mjDpOT0_:
 1686|   312k|    {
 1687|   312k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1687:9): [True: 312k, False: 0]
  ------------------
 1688|   312k|        auto left_size = offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0;
  ------------------
  |  Branch (1688:26): [True: 59.5k, False: 252k]
  ------------------
 1689|   312k|        return towards_oh_sbh(v, idx, offset_hint, left_size, args...);
 1690|   312k|    }
flex-vector.cpp:_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE14towards_oh_sbhINS1_14update_visitorISC_EEJRZZ22LLVMFuzzerTestOneInputENK3$_6clI12fuzzer_inputEEDaRT_EUlSK_E_EEEDcSK_mjmDpOT0_:
 1698|   312k|    {
 1699|   312k|        return towards_sub_oh_sbh(v, idx, offset_hint, left_size_hint, args...);
 1700|   312k|    }
flex-vector.cpp:_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE18towards_sub_oh_sbhINS1_14update_visitorISC_EEJRZZ22LLVMFuzzerTestOneInputENK3$_6clI12fuzzer_inputEEDaRT_EUlSK_E_EEEDcSK_mjmDpOT0_:
 1717|   312k|    {
 1718|   312k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1718:9): [True: 312k, False: 0]
  ------------------
 1719|   312k|        assert(left_size_hint ==
  ------------------
  |  Branch (1719:9): [True: 59.5k, False: 252k]
  |  Branch (1719:9): [True: 312k, False: 0]
  ------------------
 1720|   312k|               (offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0));
 1721|   312k|        auto child     = node_->inner()[offset_hint];
 1722|   312k|        auto is_leaf   = shift_ == BL;
 1723|   312k|        auto next_size = relaxed_->d.sizes[offset_hint] - left_size_hint;
 1724|   312k|        auto next_idx  = idx - left_size_hint;
 1725|   312k|        return is_leaf
  ------------------
  |  Branch (1725:16): [True: 45.1k, False: 267k]
  ------------------
 1726|   312k|                   ? make_leaf_sub_pos(child, next_size)
 1727|  45.1k|                         .visit(v, next_idx, args...)
 1728|   312k|                   : visit_maybe_relaxed_sub(
 1729|   267k|                         child, shift_ - B, next_size, v, next_idx, args...);
 1730|   312k|    }
flex-vector.cpp:_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_14update_visitorISC_EEJRmRZZ22LLVMFuzzerTestOneInputENK3$_6clI12fuzzer_inputEEDaRT_EUlSL_E_EEEDcSL_DpOT0_:
  144|  45.1k|    {
  145|  45.1k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  146|  45.1k|    }
flex-vector.cpp:_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_14update_visitorISC_EEJRmRZZ22LLVMFuzzerTestOneInputENK3$_6clI12fuzzer_inputEEDaRT_EUlSL_E_EEEDcSL_DpOT0_:
 1036|  28.6k|    {
 1037|  28.6k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  28.6k|    }
flex-vector.cpp:_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE13towards_oh_chINS1_14update_visitorISC_EEJRZZ22LLVMFuzzerTestOneInputENK3$_6clI12fuzzer_inputEEDaRT_EUlSK_E_EEEDcSK_mjjDpOT0_:
  938|  28.6k|    {
  939|  28.6k|        return towards_oh_ch_regular(
  940|  28.6k|            *this, v, idx, offset_hint, count(), args...);
  941|  28.6k|    }
flex-vector.cpp:_ZN5immer6detail4rbts21towards_oh_ch_regularIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_14update_visitorISD_EEJRZZ22LLVMFuzzerTestOneInputENK3$_6clI12fuzzer_inputEEDaRT_EUlSL_E_EEEDcOSL_T0_mjjDpOT1_:
  632|  28.6k|{
  633|  28.6k|    constexpr auto B  = bits<Pos>;
  634|  28.6k|    constexpr auto BL = bits_leaf<Pos>;
  635|  28.6k|    assert(offset_hint == p.index(idx));
  ------------------
  |  Branch (635:5): [True: 28.6k, False: 0]
  ------------------
  636|  28.6k|    assert(count_hint == p.count());
  ------------------
  |  Branch (636:5): [True: 28.6k, False: 0]
  ------------------
  637|  28.6k|    auto is_leaf = p.shift() == BL;
  638|  28.6k|    auto child   = p.node()->inner()[offset_hint];
  639|  28.6k|    auto is_full = offset_hint + 1 != count_hint;
  640|  28.6k|    return is_full
  ------------------
  |  Branch (640:12): [True: 20.3k, False: 8.25k]
  ------------------
  641|  28.6k|               ? (is_leaf ? make_full_leaf_pos(child).visit(v, idx, args...)
  ------------------
  |  Branch (641:19): [True: 9.28k, False: 11.1k]
  ------------------
  642|  20.3k|                          : make_full_pos(child, p.shift() - B)
  643|  11.1k|                                .visit(v, idx, args...))
  644|  28.6k|               : (is_leaf
  ------------------
  |  Branch (644:19): [True: 4.86k, False: 3.38k]
  ------------------
  645|  8.25k|                      ? make_leaf_pos(child, p.size()).visit(v, idx, args...)
  646|  8.25k|                      : make_regular_pos(child, p.shift() - B, p.size())
  647|  3.38k|                            .visit(v, idx, args...));
  648|  28.6k|}
flex-vector.cpp:_ZN5immer6detail4rbts13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_14update_visitorISC_EEJRmRZZ22LLVMFuzzerTestOneInputENK3$_6clI12fuzzer_inputEEDaRT_EUlSL_E_EEEDcSL_DpOT0_:
  207|  22.5k|    {
  208|  22.5k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  209|  22.5k|    }
_ZNK5immer6detail4rbts13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5indexEm:
  202|   384k|    count_t index(size_t idx) const { return idx & mask<BL>; }
flex-vector.cpp:_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_14update_visitorISC_EEJRmRZZ22LLVMFuzzerTestOneInputENK3$_6clI12fuzzer_inputEEDaRT_EUlSL_E_EEEDcSL_DpOT0_:
 1405|  17.6k|    {
 1406|  17.6k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1407|  17.6k|    }
_ZNK5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5indexEm:
 1162|  1.79M|    count_t index(size_t idx) const { return (idx >> shift_) & mask<B>; }
flex-vector.cpp:_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE13towards_oh_chINS1_14update_visitorISC_EEJRZZ22LLVMFuzzerTestOneInputENK3$_6clI12fuzzer_inputEEDaRT_EUlSK_E_EEEDcSK_mjjDpOT0_:
 1329|  17.6k|    {
 1330|  17.6k|        return towards_oh(v, idx, offset_hint, args...);
 1331|  17.6k|    }
flex-vector.cpp:_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10towards_ohINS1_14update_visitorISC_EEJRZZ22LLVMFuzzerTestOneInputENK3$_6clI12fuzzer_inputEEDaRT_EUlSK_E_EEEDcSK_mjDpOT0_:
 1336|  17.6k|    {
 1337|  17.6k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1337:9): [True: 17.6k, False: 0]
  ------------------
 1338|  17.6k|        auto is_leaf = shift_ == BL;
 1339|  17.6k|        auto child   = node_->inner()[offset_hint];
 1340|  17.6k|        return is_leaf
  ------------------
  |  Branch (1340:16): [True: 12.2k, False: 5.41k]
  ------------------
 1341|  17.6k|                   ? make_full_leaf_pos(child).visit(v, idx, args...)
 1342|  17.6k|                   : make_full_pos(child, shift_ - B).visit(v, idx, args...);
 1343|  17.6k|    }
flex-vector.cpp:_ZN5immer6detail4rbts8leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_14update_visitorISC_EEJRmRZZ22LLVMFuzzerTestOneInputENK3$_6clI12fuzzer_inputEEDaRT_EUlSL_E_EEEDcSL_DpOT0_:
  112|  6.08k|    {
  113|  6.08k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  114|  6.08k|    }
flex-vector.cpp:_ZN5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_14update_visitorISC_EEJRmRZZ22LLVMFuzzerTestOneInputENK3$_6clI12fuzzer_inputEEDaRT_EUlSL_E_EEEDcSL_DpOT0_:
  336|  3.75k|    {
  337|  3.75k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
  338|  3.75k|    }
flex-vector.cpp:_ZN5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE13towards_oh_chINS1_14update_visitorISC_EEJRZZ22LLVMFuzzerTestOneInputENK3$_6clI12fuzzer_inputEEDaRT_EUlSK_E_EEEDcSK_mjjDpOT0_:
  316|  3.75k|    {
  317|  3.75k|        return towards_oh_ch_regular(
  318|  3.75k|            *this, v, idx, offset_hint, count(), args...);
  319|  3.75k|    }
flex-vector.cpp:_ZN5immer6detail4rbts21towards_oh_ch_regularIRNS1_11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_14update_visitorISD_EEJRZZ22LLVMFuzzerTestOneInputENK3$_6clI12fuzzer_inputEEDaRT_EUlSL_E_EEEDcOSL_T0_mjjDpOT1_:
  632|  3.75k|{
  633|  3.75k|    constexpr auto B  = bits<Pos>;
  634|  3.75k|    constexpr auto BL = bits_leaf<Pos>;
  635|  3.75k|    assert(offset_hint == p.index(idx));
  ------------------
  |  Branch (635:5): [True: 3.75k, False: 0]
  ------------------
  636|  3.75k|    assert(count_hint == p.count());
  ------------------
  |  Branch (636:5): [True: 3.75k, False: 0]
  ------------------
  637|  3.75k|    auto is_leaf = p.shift() == BL;
  638|  3.75k|    auto child   = p.node()->inner()[offset_hint];
  639|  3.75k|    auto is_full = offset_hint + 1 != count_hint;
  640|  3.75k|    return is_full
  ------------------
  |  Branch (640:12): [True: 2.17k, False: 1.58k]
  ------------------
  641|  3.75k|               ? (is_leaf ? make_full_leaf_pos(child).visit(v, idx, args...)
  ------------------
  |  Branch (641:19): [True: 1.07k, False: 1.10k]
  ------------------
  642|  2.17k|                          : make_full_pos(child, p.shift() - B)
  643|  1.10k|                                .visit(v, idx, args...))
  644|  3.75k|               : (is_leaf
  ------------------
  |  Branch (644:19): [True: 1.21k, False: 368]
  ------------------
  645|  1.58k|                      ? make_leaf_pos(child, p.size()).visit(v, idx, args...)
  646|  1.58k|                      : make_regular_pos(child, p.shift() - B, p.size())
  647|    368|                            .visit(v, idx, args...));
  648|  3.75k|}
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENS1_19slice_right_visitorISC_Lb1EEEJRmEEEDcPT_jmT0_DpOT1_:
 1838|  42.5k|{
 1839|  42.5k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 42.5k, False: 0]
  ------------------
 1840|  42.5k|    auto relaxed = node->relaxed();
 1841|  42.5k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 35.8k, False: 6.67k]
  ------------------
 1842|  35.8k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 35.8k, False: 0]
  ------------------
 1843|  35.8k|        return make_relaxed_pos(node, shift, relaxed)
 1844|  35.8k|            .visit(v, std::forward<Args>(args)...);
 1845|  35.8k|    } else {
 1846|  6.67k|        return make_regular_sub_pos(node, shift, size)
 1847|  6.67k|            .visit(v, std::forward<Args>(args)...);
 1848|  6.67k|    }
 1849|  42.5k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_19slice_right_visitorISC_Lb1EEEJRmEEEDcT_DpOT0_:
 1813|  35.8k|    {
 1814|  35.8k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  35.8k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10towards_ohINS1_19slice_right_visitorISC_Lb1EEEJEEEDcT_mjDpOT0_:
 1686|  27.0k|    {
 1687|  27.0k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1687:9): [True: 27.0k, False: 0]
  ------------------
 1688|  27.0k|        auto left_size = offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0;
  ------------------
  |  Branch (1688:26): [True: 0, False: 27.0k]
  ------------------
 1689|  27.0k|        return towards_oh_sbh(v, idx, offset_hint, left_size, args...);
 1690|  27.0k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE14towards_oh_sbhINS1_19slice_right_visitorISC_Lb1EEEJEEEDcT_mjmDpOT0_:
 1698|  27.0k|    {
 1699|  27.0k|        return towards_sub_oh_sbh(v, idx, offset_hint, left_size_hint, args...);
 1700|  27.0k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE18towards_sub_oh_sbhINS1_19slice_right_visitorISC_Lb1EEEJEEEDcT_mjmDpOT0_:
 1717|  27.0k|    {
 1718|  27.0k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1718:9): [True: 27.0k, False: 0]
  ------------------
 1719|  27.0k|        assert(left_size_hint ==
  ------------------
  |  Branch (1719:9): [True: 0, False: 27.0k]
  |  Branch (1719:9): [True: 27.0k, False: 0]
  ------------------
 1720|  27.0k|               (offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0));
 1721|  27.0k|        auto child     = node_->inner()[offset_hint];
 1722|  27.0k|        auto is_leaf   = shift_ == BL;
 1723|  27.0k|        auto next_size = relaxed_->d.sizes[offset_hint] - left_size_hint;
 1724|  27.0k|        auto next_idx  = idx - left_size_hint;
 1725|  27.0k|        return is_leaf
  ------------------
  |  Branch (1725:16): [True: 1.98k, False: 25.0k]
  ------------------
 1726|  27.0k|                   ? make_leaf_sub_pos(child, next_size)
 1727|  1.98k|                         .visit(v, next_idx, args...)
 1728|  27.0k|                   : visit_maybe_relaxed_sub(
 1729|  25.0k|                         child, shift_ - B, next_size, v, next_idx, args...);
 1730|  27.0k|    }
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_19slice_right_visitorISC_Lb1EEEJRmEEEDcT_DpOT0_:
  144|  1.98k|    {
  145|  1.98k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  146|  1.98k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10towards_ohINS1_19slice_right_visitorISC_Lb0EEEJEEEDcT_mjDpOT0_:
 1686|  19.9k|    {
 1687|  19.9k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1687:9): [True: 19.9k, False: 0]
  ------------------
 1688|  19.9k|        auto left_size = offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0;
  ------------------
  |  Branch (1688:26): [True: 13.5k, False: 6.48k]
  ------------------
 1689|  19.9k|        return towards_oh_sbh(v, idx, offset_hint, left_size, args...);
 1690|  19.9k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE14towards_oh_sbhINS1_19slice_right_visitorISC_Lb0EEEJEEEDcT_mjmDpOT0_:
 1698|  19.9k|    {
 1699|  19.9k|        return towards_sub_oh_sbh(v, idx, offset_hint, left_size_hint, args...);
 1700|  19.9k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE18towards_sub_oh_sbhINS1_19slice_right_visitorISC_Lb0EEEJEEEDcT_mjmDpOT0_:
 1717|  19.9k|    {
 1718|  19.9k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1718:9): [True: 19.9k, False: 0]
  ------------------
 1719|  19.9k|        assert(left_size_hint ==
  ------------------
  |  Branch (1719:9): [True: 13.5k, False: 6.48k]
  |  Branch (1719:9): [True: 19.9k, False: 0]
  ------------------
 1720|  19.9k|               (offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0));
 1721|  19.9k|        auto child     = node_->inner()[offset_hint];
 1722|  19.9k|        auto is_leaf   = shift_ == BL;
 1723|  19.9k|        auto next_size = relaxed_->d.sizes[offset_hint] - left_size_hint;
 1724|  19.9k|        auto next_idx  = idx - left_size_hint;
 1725|  19.9k|        return is_leaf
  ------------------
  |  Branch (1725:16): [True: 5.20k, False: 14.7k]
  ------------------
 1726|  19.9k|                   ? make_leaf_sub_pos(child, next_size)
 1727|  5.20k|                         .visit(v, next_idx, args...)
 1728|  19.9k|                   : visit_maybe_relaxed_sub(
 1729|  14.7k|                         child, shift_ - B, next_size, v, next_idx, args...);
 1730|  19.9k|    }
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_19slice_right_visitorISC_Lb0EEEJRmEEEDcT_DpOT0_:
  144|  5.20k|    {
  145|  5.20k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  146|  5.20k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENS1_19slice_right_visitorISC_Lb0EEEJRmEEEDcPT_jmT0_DpOT1_:
 1838|  14.7k|{
 1839|  14.7k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 14.7k, False: 0]
  ------------------
 1840|  14.7k|    auto relaxed = node->relaxed();
 1841|  14.7k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 11.1k, False: 3.65k]
  ------------------
 1842|  11.1k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 11.1k, False: 0]
  ------------------
 1843|  11.1k|        return make_relaxed_pos(node, shift, relaxed)
 1844|  11.1k|            .visit(v, std::forward<Args>(args)...);
 1845|  11.1k|    } else {
 1846|  3.65k|        return make_regular_sub_pos(node, shift, size)
 1847|  3.65k|            .visit(v, std::forward<Args>(args)...);
 1848|  3.65k|    }
 1849|  14.7k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_19slice_right_visitorISC_Lb0EEEJRmEEEDcT_DpOT0_:
 1813|  11.1k|    {
 1814|  11.1k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  11.1k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_19slice_right_visitorISC_Lb0EEEJRmEEEDcT_DpOT0_:
 1036|  3.65k|    {
 1037|  3.65k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  3.65k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10towards_ohINS1_19slice_right_visitorISC_Lb0EEEJEEEDcT_mjDpOT0_:
  927|  6.88k|    {
  928|  6.88k|        return towards_oh_ch_regular(
  929|  6.88k|            *this, v, idx, offset_hint, count(), args...);
  930|  6.88k|    }
_ZN5immer6detail4rbts21towards_oh_ch_regularIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_19slice_right_visitorISD_Lb0EEEJEEEDcOT_T0_mjjDpOT1_:
  632|  6.88k|{
  633|  6.88k|    constexpr auto B  = bits<Pos>;
  634|  6.88k|    constexpr auto BL = bits_leaf<Pos>;
  635|  6.88k|    assert(offset_hint == p.index(idx));
  ------------------
  |  Branch (635:5): [True: 6.88k, False: 0]
  ------------------
  636|  6.88k|    assert(count_hint == p.count());
  ------------------
  |  Branch (636:5): [True: 6.88k, False: 0]
  ------------------
  637|  6.88k|    auto is_leaf = p.shift() == BL;
  638|  6.88k|    auto child   = p.node()->inner()[offset_hint];
  639|  6.88k|    auto is_full = offset_hint + 1 != count_hint;
  640|  6.88k|    return is_full
  ------------------
  |  Branch (640:12): [True: 2.77k, False: 4.10k]
  ------------------
  641|  6.88k|               ? (is_leaf ? make_full_leaf_pos(child).visit(v, idx, args...)
  ------------------
  |  Branch (641:19): [True: 1.66k, False: 1.11k]
  ------------------
  642|  2.77k|                          : make_full_pos(child, p.shift() - B)
  643|  1.11k|                                .visit(v, idx, args...))
  644|  6.88k|               : (is_leaf
  ------------------
  |  Branch (644:19): [True: 875, False: 3.23k]
  ------------------
  645|  4.10k|                      ? make_leaf_pos(child, p.size()).visit(v, idx, args...)
  646|  4.10k|                      : make_regular_pos(child, p.shift() - B, p.size())
  647|  3.23k|                            .visit(v, idx, args...));
  648|  6.88k|}
_ZN5immer6detail4rbts13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_19slice_right_visitorISC_Lb0EEEJRmEEEDcT_DpOT0_:
  207|  6.41k|    {
  208|  6.41k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  209|  6.41k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_19slice_right_visitorISC_Lb0EEEJRmEEEDcT_DpOT0_:
 1405|  2.80k|    {
 1406|  2.80k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1407|  2.80k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10towards_ohINS1_19slice_right_visitorISC_Lb0EEEJEEEDcT_mjDpOT0_:
 1336|  4.29k|    {
 1337|  4.29k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1337:9): [True: 4.29k, False: 0]
  ------------------
 1338|  4.29k|        auto is_leaf = shift_ == BL;
 1339|  4.29k|        auto child   = node_->inner()[offset_hint];
 1340|  4.29k|        return is_leaf
  ------------------
  |  Branch (1340:16): [True: 3.09k, False: 1.19k]
  ------------------
 1341|  4.29k|                   ? make_full_leaf_pos(child).visit(v, idx, args...)
 1342|  4.29k|                   : make_full_pos(child, shift_ - B).visit(v, idx, args...);
 1343|  4.29k|    }
_ZNK5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5shiftEv:
 1161|   147k|    shift_t shift() const { return shift_; }
_ZN5immer6detail4rbts8leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_19slice_right_visitorISC_Lb0EEEJRmEEEDcT_DpOT0_:
  112|  1.95k|    {
  113|  1.95k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  114|  1.95k|    }
_ZN5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_19slice_right_visitorISC_Lb0EEEJRmEEEDcT_DpOT0_:
  336|  4.34k|    {
  337|  4.34k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
  338|  4.34k|    }
_ZN5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10towards_ohINS1_19slice_right_visitorISC_Lb0EEEJEEEDcT_mjDpOT0_:
  305|  4.34k|    {
  306|  4.34k|        return towards_oh_ch_regular(
  307|  4.34k|            *this, v, idx, offset_hint, count(), args...);
  308|  4.34k|    }
_ZN5immer6detail4rbts21towards_oh_ch_regularIRNS1_11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_19slice_right_visitorISD_Lb0EEEJEEEDcOT_T0_mjjDpOT1_:
  632|  4.34k|{
  633|  4.34k|    constexpr auto B  = bits<Pos>;
  634|  4.34k|    constexpr auto BL = bits_leaf<Pos>;
  635|  4.34k|    assert(offset_hint == p.index(idx));
  ------------------
  |  Branch (635:5): [True: 4.34k, False: 0]
  ------------------
  636|  4.34k|    assert(count_hint == p.count());
  ------------------
  |  Branch (636:5): [True: 4.34k, False: 0]
  ------------------
  637|  4.34k|    auto is_leaf = p.shift() == BL;
  638|  4.34k|    auto child   = p.node()->inner()[offset_hint];
  639|  4.34k|    auto is_full = offset_hint + 1 != count_hint;
  640|  4.34k|    return is_full
  ------------------
  |  Branch (640:12): [True: 2.14k, False: 2.19k]
  ------------------
  641|  4.34k|               ? (is_leaf ? make_full_leaf_pos(child).visit(v, idx, args...)
  ------------------
  |  Branch (641:19): [True: 1.65k, False: 491]
  ------------------
  642|  2.14k|                          : make_full_pos(child, p.shift() - B)
  643|    491|                                .visit(v, idx, args...))
  644|  4.34k|               : (is_leaf
  ------------------
  |  Branch (644:19): [True: 1.08k, False: 1.11k]
  ------------------
  645|  2.19k|                      ? make_leaf_pos(child, p.size()).visit(v, idx, args...)
  646|  2.19k|                      : make_regular_pos(child, p.shift() - B, p.size())
  647|  1.11k|                            .visit(v, idx, args...));
  648|  4.34k|}
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_19slice_right_visitorISC_Lb1EEEJRmEEEDcT_DpOT0_:
 1036|  6.67k|    {
 1037|  6.67k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  6.67k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10towards_ohINS1_19slice_right_visitorISC_Lb1EEEJEEEDcT_mjDpOT0_:
  927|  3.44k|    {
  928|  3.44k|        return towards_oh_ch_regular(
  929|  3.44k|            *this, v, idx, offset_hint, count(), args...);
  930|  3.44k|    }
_ZN5immer6detail4rbts21towards_oh_ch_regularIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_19slice_right_visitorISD_Lb1EEEJEEEDcOT_T0_mjjDpOT1_:
  632|  3.44k|{
  633|  3.44k|    constexpr auto B  = bits<Pos>;
  634|  3.44k|    constexpr auto BL = bits_leaf<Pos>;
  635|  3.44k|    assert(offset_hint == p.index(idx));
  ------------------
  |  Branch (635:5): [True: 3.44k, False: 0]
  ------------------
  636|  3.44k|    assert(count_hint == p.count());
  ------------------
  |  Branch (636:5): [True: 3.44k, False: 0]
  ------------------
  637|  3.44k|    auto is_leaf = p.shift() == BL;
  638|  3.44k|    auto child   = p.node()->inner()[offset_hint];
  639|  3.44k|    auto is_full = offset_hint + 1 != count_hint;
  640|  3.44k|    return is_full
  ------------------
  |  Branch (640:12): [True: 2.78k, False: 665]
  ------------------
  641|  3.44k|               ? (is_leaf ? make_full_leaf_pos(child).visit(v, idx, args...)
  ------------------
  |  Branch (641:19): [True: 772, False: 2.01k]
  ------------------
  642|  2.78k|                          : make_full_pos(child, p.shift() - B)
  643|  2.01k|                                .visit(v, idx, args...))
  644|  3.44k|               : (is_leaf
  ------------------
  |  Branch (644:19): [True: 665, False: 0]
  ------------------
  645|    665|                      ? make_leaf_pos(child, p.size()).visit(v, idx, args...)
  646|    665|                      : make_regular_pos(child, p.shift() - B, p.size())
  647|      0|                            .visit(v, idx, args...));
  648|  3.44k|}
_ZN5immer6detail4rbts13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_19slice_right_visitorISC_Lb1EEEJRmEEEDcT_DpOT0_:
  207|  1.29k|    {
  208|  1.29k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  209|  1.29k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_19slice_right_visitorISC_Lb1EEEJRmEEEDcT_DpOT0_:
 1405|  2.60k|    {
 1406|  2.60k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1407|  2.60k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10towards_ohINS1_19slice_right_visitorISC_Lb1EEEJEEEDcT_mjDpOT0_:
 1336|  1.11k|    {
 1337|  1.11k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1337:9): [True: 1.11k, False: 0]
  ------------------
 1338|  1.11k|        auto is_leaf = shift_ == BL;
 1339|  1.11k|        auto child   = node_->inner()[offset_hint];
 1340|  1.11k|        return is_leaf
  ------------------
  |  Branch (1340:16): [True: 523, False: 589]
  ------------------
 1341|  1.11k|                   ? make_full_leaf_pos(child).visit(v, idx, args...)
 1342|  1.11k|                   : make_full_pos(child, shift_ - B).visit(v, idx, args...);
 1343|  1.11k|    }
_ZN5immer6detail4rbts8leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_19slice_right_visitorISC_Lb1EEEJRmEEEDcT_DpOT0_:
  112|    665|    {
  113|    665|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  114|    665|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENS1_18slice_left_visitorISC_Lb1EEEJRmEEEDcPT_jmT0_DpOT1_:
 1838|  21.7k|{
 1839|  21.7k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 21.7k, False: 0]
  ------------------
 1840|  21.7k|    auto relaxed = node->relaxed();
 1841|  21.7k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 14.9k, False: 6.81k]
  ------------------
 1842|  14.9k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 14.9k, False: 0]
  ------------------
 1843|  14.9k|        return make_relaxed_pos(node, shift, relaxed)
 1844|  14.9k|            .visit(v, std::forward<Args>(args)...);
 1845|  14.9k|    } else {
 1846|  6.81k|        return make_regular_sub_pos(node, shift, size)
 1847|  6.81k|            .visit(v, std::forward<Args>(args)...);
 1848|  6.81k|    }
 1849|  21.7k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_18slice_left_visitorISC_Lb1EEEJRmEEEDcT_DpOT0_:
 1813|  14.9k|    {
 1814|  14.9k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  14.9k|    }
_ZNK5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE8subindexEm:
 1434|  8.67M|    count_t subindex(size_t idx) const { return index(idx); }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE14towards_sub_ohINS1_18slice_left_visitorISC_Lb1EEEJEEEDcT_mjDpOT0_:
 1705|  4.19k|    {
 1706|  4.19k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1706:9): [True: 4.19k, False: 0]
  ------------------
 1707|  4.19k|        auto left_size = offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0;
  ------------------
  |  Branch (1707:26): [True: 3.55k, False: 635]
  ------------------
 1708|  4.19k|        return towards_sub_oh_sbh(v, idx, offset_hint, left_size, args...);
 1709|  4.19k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE18towards_sub_oh_sbhINS1_18slice_left_visitorISC_Lb1EEEJEEEDcT_mjmDpOT0_:
 1717|  4.19k|    {
 1718|  4.19k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1718:9): [True: 4.19k, False: 0]
  ------------------
 1719|  4.19k|        assert(left_size_hint ==
  ------------------
  |  Branch (1719:9): [True: 3.55k, False: 635]
  |  Branch (1719:9): [True: 4.19k, False: 0]
  ------------------
 1720|  4.19k|               (offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0));
 1721|  4.19k|        auto child     = node_->inner()[offset_hint];
 1722|  4.19k|        auto is_leaf   = shift_ == BL;
 1723|  4.19k|        auto next_size = relaxed_->d.sizes[offset_hint] - left_size_hint;
 1724|  4.19k|        auto next_idx  = idx - left_size_hint;
 1725|  4.19k|        return is_leaf
  ------------------
  |  Branch (1725:16): [True: 0, False: 4.19k]
  ------------------
 1726|  4.19k|                   ? make_leaf_sub_pos(child, next_size)
 1727|      0|                         .visit(v, next_idx, args...)
 1728|  4.19k|                   : visit_maybe_relaxed_sub(
 1729|  4.19k|                         child, shift_ - B, next_size, v, next_idx, args...);
 1730|  4.19k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE14towards_sub_ohINS1_18slice_left_visitorISC_Lb0EEEJEEEDcT_mjDpOT0_:
 1705|  54.3k|    {
 1706|  54.3k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1706:9): [True: 54.3k, False: 0]
  ------------------
 1707|  54.3k|        auto left_size = offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0;
  ------------------
  |  Branch (1707:26): [True: 15.1k, False: 39.2k]
  ------------------
 1708|  54.3k|        return towards_sub_oh_sbh(v, idx, offset_hint, left_size, args...);
 1709|  54.3k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE18towards_sub_oh_sbhINS1_18slice_left_visitorISC_Lb0EEEJEEEDcT_mjmDpOT0_:
 1717|  54.3k|    {
 1718|  54.3k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1718:9): [True: 54.3k, False: 0]
  ------------------
 1719|  54.3k|        assert(left_size_hint ==
  ------------------
  |  Branch (1719:9): [True: 15.1k, False: 39.2k]
  |  Branch (1719:9): [True: 54.3k, False: 0]
  ------------------
 1720|  54.3k|               (offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0));
 1721|  54.3k|        auto child     = node_->inner()[offset_hint];
 1722|  54.3k|        auto is_leaf   = shift_ == BL;
 1723|  54.3k|        auto next_size = relaxed_->d.sizes[offset_hint] - left_size_hint;
 1724|  54.3k|        auto next_idx  = idx - left_size_hint;
 1725|  54.3k|        return is_leaf
  ------------------
  |  Branch (1725:16): [True: 8.19k, False: 46.1k]
  ------------------
 1726|  54.3k|                   ? make_leaf_sub_pos(child, next_size)
 1727|  8.19k|                         .visit(v, next_idx, args...)
 1728|  54.3k|                   : visit_maybe_relaxed_sub(
 1729|  46.1k|                         child, shift_ - B, next_size, v, next_idx, args...);
 1730|  54.3k|    }
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_18slice_left_visitorISC_Lb0EEEJRmEEEDcT_DpOT0_:
  144|  8.19k|    {
  145|  8.19k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  146|  8.19k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENS1_18slice_left_visitorISC_Lb0EEEJRmEEEDcPT_jmT0_DpOT1_:
 1838|  46.1k|{
 1839|  46.1k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 46.1k, False: 0]
  ------------------
 1840|  46.1k|    auto relaxed = node->relaxed();
 1841|  46.1k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 43.6k, False: 2.53k]
  ------------------
 1842|  43.6k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 43.6k, False: 0]
  ------------------
 1843|  43.6k|        return make_relaxed_pos(node, shift, relaxed)
 1844|  43.6k|            .visit(v, std::forward<Args>(args)...);
 1845|  43.6k|    } 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|  46.1k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_18slice_left_visitorISC_Lb0EEEJRmEEEDcT_DpOT0_:
 1813|  43.6k|    {
 1814|  43.6k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  43.6k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_18slice_left_visitorISC_Lb0EEEJRmEEEDcT_DpOT0_:
 1036|  2.53k|    {
 1037|  2.53k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  2.53k|    }
_ZNK5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE11size_beforeEj:
  791|   206k|    {
  792|   206k|        return size_t{offset} << shift_;
  793|   206k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE8size_sbhEjm:
  803|  27.2k|    {
  804|  27.2k|        assert(size_before_hint == size_before(offset));
  ------------------
  |  Branch (804:9): [True: 27.2k, False: 0]
  ------------------
  805|  27.2k|        return offset == subindex(size_ - 1) ? size_ - size_before_hint
  ------------------
  |  Branch (805:16): [True: 15.1k, False: 12.0k]
  ------------------
  806|  27.2k|                                             : size_t{1} << shift_;
  807|  27.2k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE14towards_sub_ohINS1_18slice_left_visitorISC_Lb0EEEJEEEDcT_mjDpOT0_:
  946|  8.07k|    {
  947|  8.07k|        return towards_sub_oh_regular(*this, v, idx, offset_hint, args...);
  948|  8.07k|    }
_ZN5immer6detail4rbts22towards_sub_oh_regularIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_18slice_left_visitorISD_Lb0EEEJEEEDcOT_T0_mjDpOT1_:
  653|  8.07k|{
  654|  8.07k|    constexpr auto B  = bits<Pos>;
  655|  8.07k|    constexpr auto BL = bits_leaf<Pos>;
  656|  8.07k|    assert(offset_hint == p.index(idx));
  ------------------
  |  Branch (656:5): [True: 8.07k, False: 0]
  ------------------
  657|  8.07k|    auto is_leaf = p.shift() == BL;
  658|  8.07k|    auto child   = p.node()->inner()[offset_hint];
  659|  8.07k|    auto lsize   = offset_hint << p.shift();
  660|  8.07k|    auto size    = p.this_size();
  661|  8.07k|    auto is_full = (size - lsize) >= (size_t{1} << p.shift());
  662|  8.07k|    return is_full
  ------------------
  |  Branch (662:12): [True: 8.07k, False: 0]
  ------------------
  663|  8.07k|               ? (is_leaf
  ------------------
  |  Branch (663:19): [True: 4.27k, False: 3.79k]
  ------------------
  664|  8.07k|                      ? make_full_leaf_pos(child).visit(v, idx - lsize, args...)
  665|  8.07k|                      : make_full_pos(child, p.shift() - B)
  666|  3.79k|                            .visit(v, idx - lsize, args...))
  667|  8.07k|               : (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|  8.07k|}
_ZNK5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE9this_sizeEv:
  794|  27.2k|    size_t this_size() const { return size_; }
_ZN5immer6detail4rbts13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_18slice_left_visitorISC_Lb0EEEJmEEEDcT_DpOT0_:
  207|  9.34k|    {
  208|  9.34k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  209|  9.34k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_18slice_left_visitorISC_Lb0EEEJmEEEDcT_DpOT0_:
 1405|  6.02k|    {
 1406|  6.02k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1407|  6.02k|    }
_ZNK5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE8subindexEm:
 1163|  19.6k|    count_t subindex(size_t idx) const { return idx >> shift_; }
_ZNK5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE11size_beforeEj:
 1170|  38.8k|    {
 1171|  38.8k|        return size_t{offset} << shift_;
 1172|  38.8k|    }
_ZNK5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE8size_sbhEjm:
 1166|  19.6k|    {
 1167|  19.6k|        return size_t{1} << shift_;
 1168|  19.6k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE14towards_sub_ohINS1_18slice_left_visitorISC_Lb0EEEJEEEDcT_mjDpOT0_:
 1348|  7.29k|    {
 1349|  7.29k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1349:9): [True: 7.29k, False: 0]
  ------------------
 1350|  7.29k|        auto is_leaf = shift_ == BL;
 1351|  7.29k|        auto child   = node_->inner()[offset_hint];
 1352|  7.29k|        auto lsize   = size_t{offset_hint} << shift_;
 1353|  7.29k|        return is_leaf
  ------------------
  |  Branch (1353:16): [True: 5.06k, False: 2.23k]
  ------------------
 1354|  7.29k|                   ? make_full_leaf_pos(child).visit(v, idx - lsize, args...)
 1355|  7.29k|                   : make_full_pos(child, shift_ - B)
 1356|  2.23k|                         .visit(v, idx - lsize, args...);
 1357|  7.29k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10copy_sizesEjjmPm:
 1175|  17.3k|    {
 1176|  17.3k|        auto e = sizes + n;
 1177|  42.4k|        for (; sizes != e; ++sizes) {
  ------------------
  |  Branch (1177:16): [True: 25.1k, False: 17.3k]
  ------------------
 1178|  25.1k|            init = *sizes = init + (size_t{1} << shift_);
 1179|       |            assert(init);
  ------------------
  |  Branch (1179:13): [True: 25.1k, False: 0]
  ------------------
 1180|  25.1k|        }
 1181|  17.3k|    }
_ZNK5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE4sizeEv:
 1160|   589k|    size_t size() const { return branches<B, size_t> << shift_; }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10copy_sizesEjjmPm:
  810|   252k|    {
  811|   252k|        if (n) {
  ------------------
  |  Branch (811:13): [True: 246k, False: 5.27k]
  ------------------
  812|   246k|            auto last = offset + n - 1;
  813|   246k|            auto e    = sizes + n - 1;
  814|   491k|            for (; sizes != e; ++sizes) {
  ------------------
  |  Branch (814:20): [True: 244k, False: 246k]
  ------------------
  815|   244k|                init = *sizes = init + (size_t{1} << shift_);
  816|   244k|                assert(init);
  ------------------
  |  Branch (816:17): [True: 244k, False: 0]
  ------------------
  817|   244k|            }
  818|   246k|            *sizes = init + size(last);
  819|       |            assert(*sizes);
  ------------------
  |  Branch (819:13): [True: 246k, False: 0]
  ------------------
  820|   246k|        }
  821|   252k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE4sizeEj:
  797|   261k|    {
  798|   261k|        return offset == subindex(size_ - 1) ? size_ - size_before(offset)
  ------------------
  |  Branch (798:16): [True: 133k, False: 128k]
  ------------------
  799|   261k|                                             : size_t{1} << shift_;
  800|   261k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10copy_sizesEjjmPm:
 1462|  4.20M|    {
 1463|  4.20M|        auto e     = sizes + n;
 1464|  4.20M|        auto prev  = size_before(offset);
 1465|  4.20M|        auto these = relaxed_->d.sizes + offset;
 1466|  12.0M|        for (; sizes != e; ++sizes, ++these) {
  ------------------
  |  Branch (1466:16): [True: 7.82M, False: 4.20M]
  ------------------
 1467|  7.82M|            auto this_size = *these;
 1468|  7.82M|            init = *sizes = init + (this_size - prev);
 1469|  7.82M|            assert(init);
  ------------------
  |  Branch (1469:13): [True: 7.82M, False: 0]
  ------------------
 1470|  7.82M|            prev = this_size;
 1471|  7.82M|        }
 1472|  4.20M|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_18slice_left_visitorISC_Lb1EEEJRmEEEDcT_DpOT0_:
 1036|  6.81k|    {
 1037|  6.81k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  6.81k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE14towards_sub_ohINS1_18slice_left_visitorISC_Lb1EEEJEEEDcT_mjDpOT0_:
  946|  3.24k|    {
  947|  3.24k|        return towards_sub_oh_regular(*this, v, idx, offset_hint, args...);
  948|  3.24k|    }
_ZN5immer6detail4rbts22towards_sub_oh_regularIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_18slice_left_visitorISD_Lb1EEEJEEEDcOT_T0_mjDpOT1_:
  653|  3.24k|{
  654|  3.24k|    constexpr auto B  = bits<Pos>;
  655|  3.24k|    constexpr auto BL = bits_leaf<Pos>;
  656|  3.24k|    assert(offset_hint == p.index(idx));
  ------------------
  |  Branch (656:5): [True: 3.24k, False: 0]
  ------------------
  657|  3.24k|    auto is_leaf = p.shift() == BL;
  658|  3.24k|    auto child   = p.node()->inner()[offset_hint];
  659|  3.24k|    auto lsize   = offset_hint << p.shift();
  660|  3.24k|    auto size    = p.this_size();
  661|  3.24k|    auto is_full = (size - lsize) >= (size_t{1} << p.shift());
  662|  3.24k|    return is_full
  ------------------
  |  Branch (662:12): [True: 1.27k, False: 1.97k]
  ------------------
  663|  3.24k|               ? (is_leaf
  ------------------
  |  Branch (663:19): [True: 0, False: 1.27k]
  ------------------
  664|  1.27k|                      ? make_full_leaf_pos(child).visit(v, idx - lsize, args...)
  665|  1.27k|                      : make_full_pos(child, p.shift() - B)
  666|  1.27k|                            .visit(v, idx - lsize, args...))
  667|  3.24k|               : (is_leaf
  ------------------
  |  Branch (667:19): [True: 0, False: 1.97k]
  ------------------
  668|  1.97k|                      ? make_leaf_sub_pos(child, size - lsize)
  669|      0|                            .visit(v, idx - lsize, args...)
  670|  1.97k|                      : make_regular_sub_pos(child, p.shift() - B, size - lsize)
  671|  1.97k|                            .visit(v, idx - lsize, args...));
  672|  3.24k|}
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_18slice_left_visitorISC_Lb1EEEJmEEEDcT_DpOT0_:
 1405|  1.59k|    {
 1406|  1.59k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1407|  1.59k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE14towards_sub_ohINS1_18slice_left_visitorISC_Lb1EEEJEEEDcT_mjDpOT0_:
 1348|    327|    {
 1349|    327|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1349:9): [True: 327, False: 0]
  ------------------
 1350|    327|        auto is_leaf = shift_ == BL;
 1351|    327|        auto child   = node_->inner()[offset_hint];
 1352|    327|        auto lsize   = size_t{offset_hint} << shift_;
 1353|    327|        return is_leaf
  ------------------
  |  Branch (1353:16): [True: 0, False: 327]
  ------------------
 1354|    327|                   ? make_full_leaf_pos(child).visit(v, idx - lsize, args...)
 1355|    327|                   : make_full_pos(child, shift_ - B)
 1356|    327|                         .visit(v, idx - lsize, args...);
 1357|    327|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_18slice_left_visitorISC_Lb1EEEJmEEEDcT_DpOT0_:
 1036|  1.97k|    {
 1037|  1.97k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  1.97k|    }
_ZN5immer6detail4rbts30make_singleton_regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEDaPT_j:
  766|  7.64k|{
  767|  7.64k|    assert(leaf);
  ------------------
  |  Branch (767:5): [True: 7.64k, False: 0]
  ------------------
  768|  7.64k|    IMMER_ASSERT_TAGGED(leaf->kind() == NodeT::kind_t::leaf);
  ------------------
  |  |   68|  7.64k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (768:5): [True: 7.64k, False: 0]
  ------------------
  769|  7.64k|    assert(count > 0);
  ------------------
  |  Branch (769:5): [True: 7.64k, False: 0]
  ------------------
  770|  7.64k|    return singleton_regular_sub_pos<NodeT>{leaf, count};
  771|  7.64k|}
_ZN5immer6detail4rbts25singleton_regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_25concat_trees_left_visitorISC_EEJNS1_14empty_leaf_posISC_EERPSC_RjRmEEEDcT_DpOT0_:
  759|  7.64k|    {
  760|  7.64k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
  761|  7.64k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENS1_26concat_trees_right_visitorISC_EEJRNS1_25singleton_regular_sub_posISC_EERNS1_14empty_leaf_posISC_EEEEEDcPT_jmT0_DpOT1_:
 1838|  7.64k|{
 1839|  7.64k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 7.64k, False: 0]
  ------------------
 1840|  7.64k|    auto relaxed = node->relaxed();
 1841|  7.64k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 5.37k, False: 2.27k]
  ------------------
 1842|  5.37k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 5.37k, False: 0]
  ------------------
 1843|  5.37k|        return make_relaxed_pos(node, shift, relaxed)
 1844|  5.37k|            .visit(v, std::forward<Args>(args)...);
 1845|  5.37k|    } else {
 1846|  2.27k|        return make_regular_sub_pos(node, shift, size)
 1847|  2.27k|            .visit(v, std::forward<Args>(args)...);
 1848|  2.27k|    }
 1849|  7.64k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_26concat_trees_right_visitorISC_EEJRNS1_25singleton_regular_sub_posISC_EERNS1_14empty_leaf_posISC_EEEEEDcT_DpOT0_:
 1813|  5.37k|    {
 1814|  5.37k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  5.37k|    }
_ZNK5immer6detail4rbts25singleton_regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5shiftEv:
  735|  25.7k|    shift_t shift() const { return BL; }
_ZN5immer6detail4rbts25singleton_regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE13each_left_subINS1_34concat_rebalance_plan_fill_visitorEJRNS1_21concat_rebalance_planILj2ELj2EEEEEEvT_DpOT0_:
  744|  7.64k|    {
  745|  7.64k|    }
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_34concat_rebalance_plan_fill_visitorEJRNS1_21concat_rebalance_planILj2ELj2EEEEEEDcT_DpOT0_:
  144|  2.16M|    {
  145|  2.16M|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  146|  2.16M|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_34concat_rebalance_plan_fill_visitorEJRNS1_21concat_rebalance_planILj2ELj2EEEEEEDcT_DpOT0_:
 1813|  18.9M|    {
 1814|  18.9M|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  18.9M|    }
_ZN5immer6detail4rbts12null_sub_pos14each_right_subINS1_34concat_rebalance_plan_fill_visitorEJRNS1_21concat_rebalance_planILj2ELj2EEEEEEvT_DpOT0_:
  707|  2.06M|    {
  708|  2.06M|    }
_ZN5immer6detail4rbts25singleton_regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE13each_left_subINS1_21concat_merger_visitorEJRNS1_13concat_mergerISC_EEEEEvT_DpOT0_:
  744|  7.64k|    {
  745|  7.64k|    }
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_21concat_merger_visitorEJRNS1_13concat_mergerISC_EEEEEDcT_DpOT0_:
  144|  2.16M|    {
  145|  2.16M|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  146|  2.16M|    }
_ZNK5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE4sizeEv:
  137|  2.16M|    size_t size() const { return count_; }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_21concat_merger_visitorEJRNS1_13concat_mergerISC_EEEEEDcT_DpOT0_:
 1813|  18.9M|    {
 1814|  18.9M|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  18.9M|    }
_ZN5immer6detail4rbts12null_sub_pos14each_right_subINS1_21concat_merger_visitorEJRNS1_13concat_mergerINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEEEEvT_DpOT0_:
  707|  2.06M|    {
  708|  2.06M|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE9first_subINS1_20concat_right_visitorISC_EEJRNS1_25singleton_regular_sub_posISC_EERNS1_14empty_leaf_posISC_EEEEEDcT_DpOT0_:
 1762|  17.0k|    {
 1763|  17.0k|        auto child      = node_->inner()[0];
 1764|  17.0k|        auto child_size = relaxed_->d.sizes[0];
 1765|  17.0k|        auto is_leaf    = shift_ == BL;
 1766|  17.0k|        assert(child_size);
  ------------------
  |  Branch (1766:9): [True: 17.0k, False: 0]
  ------------------
 1767|  17.0k|        return is_leaf ? make_leaf_sub_pos(child, child_size).visit(v, args...)
  ------------------
  |  Branch (1767:16): [True: 0, False: 17.0k]
  ------------------
 1768|  17.0k|                       : visit_maybe_relaxed_sub(
 1769|  17.0k|                             child, shift_ - B, child_size, v, args...);
 1770|  17.0k|    }
_ZNK5immer6detail4rbts14empty_leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5shiftEv:
   76|  7.64k|    shift_t shift() const { return 0; }
_ZNK5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5shiftEv:
  138|  1.77M|    shift_t shift() const { return 0; }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENS1_20concat_right_visitorISC_EEJRNS1_25singleton_regular_sub_posISC_EERNS1_14empty_leaf_posISC_EEEEEDcPT_jmT0_DpOT1_:
 1838|  17.0k|{
 1839|  17.0k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 17.0k, False: 0]
  ------------------
 1840|  17.0k|    auto relaxed = node->relaxed();
 1841|  17.0k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 16.6k, False: 396]
  ------------------
 1842|  16.6k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 16.6k, False: 0]
  ------------------
 1843|  16.6k|        return make_relaxed_pos(node, shift, relaxed)
 1844|  16.6k|            .visit(v, std::forward<Args>(args)...);
 1845|  16.6k|    } else {
 1846|    396|        return make_regular_sub_pos(node, shift, size)
 1847|    396|            .visit(v, std::forward<Args>(args)...);
 1848|    396|    }
 1849|  17.0k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_20concat_right_visitorISC_EEJRNS1_25singleton_regular_sub_posISC_EERNS1_14empty_leaf_posISC_EEEEEDcT_DpOT0_:
 1813|  16.6k|    {
 1814|  16.6k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  16.6k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_20concat_right_visitorISC_EEJRNS1_25singleton_regular_sub_posISC_EERNS1_14empty_leaf_posISC_EEEEEDcT_DpOT0_:
 1036|    396|    {
 1037|    396|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|    396|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE9first_subINS1_20concat_right_visitorISC_EEJRNS1_25singleton_regular_sub_posISC_EERNS1_14empty_leaf_posISC_EEEEEDcT_DpOT0_:
  970|    652|    {
  971|    652|        auto is_leaf = shift_ == BL;
  972|    652|        auto child   = node_->inner()[0];
  973|    652|        auto is_full = size_ >= (size_t{1} << shift_);
  974|    652|        return is_full
  ------------------
  |  Branch (974:16): [True: 652, False: 0]
  ------------------
  975|    652|                   ? (is_leaf
  ------------------
  |  Branch (975:23): [True: 0, False: 652]
  ------------------
  976|    652|                          ? make_full_leaf_pos(child).visit(v, args...)
  977|    652|                          : make_full_pos(child, shift_ - B).visit(v, args...))
  978|    652|                   : (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|    652|    }
_ZNK5immer6detail4rbts13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5shiftEv:
  201|   135k|    shift_t shift() const { return 0; }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_20concat_right_visitorISC_EEJRNS1_25singleton_regular_sub_posISC_EERNS1_14empty_leaf_posISC_EEEEEDcT_DpOT0_:
 1405|  1.01k|    {
 1406|  1.01k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1407|  1.01k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE9first_subINS1_20concat_right_visitorISC_EEJRNS1_25singleton_regular_sub_posISC_EERNS1_14empty_leaf_posISC_EEEEEDcT_DpOT0_:
 1361|    365|    {
 1362|    365|        auto is_leaf = shift_ == BL;
 1363|    365|        auto child   = node_->inner()[0];
 1364|    365|        return is_leaf ? make_full_leaf_pos(child).visit(v, args...)
  ------------------
  |  Branch (1364:16): [True: 0, False: 365]
  ------------------
 1365|    365|                       : make_full_pos(child, shift_ - B).visit(v, args...);
 1366|    365|    }
_ZN5immer6detail4rbts12null_sub_pos13each_left_subINS1_34concat_rebalance_plan_fill_visitorEJRNS1_21concat_rebalance_planILj2ELj2EEEEEEvT_DpOT0_:
  711|   113k|    {
  712|   113k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE14each_right_subINS1_34concat_rebalance_plan_fill_visitorEJRNS1_21concat_rebalance_planILj2ELj2EEEEEEvT_DpOT0_:
 1304|   103k|    {
 1305|   103k|        each_i(v, 1, branches<B>, args...);
 1306|   103k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE6each_iINS1_34concat_rebalance_plan_fill_visitorEJRNS1_21concat_rebalance_planILj2ELj2EEEEEEvT_jjDpOT0_:
 1263|   103k|    {
 1264|   103k|        auto p = node_->inner() + i;
 1265|   103k|        auto e = node_->inner() + n;
 1266|   103k|        if (shift_ == BL) {
  ------------------
  |  Branch (1266:13): [True: 52.8k, False: 51.1k]
  ------------------
 1267|   211k|            for (; p != e; ++p) {
  ------------------
  |  Branch (1267:20): [True: 158k, False: 52.8k]
  ------------------
 1268|   158k|                IMMER_PREFETCH(p + 1);
 1269|   158k|                make_full_leaf_pos(*p).visit(v, args...);
 1270|   158k|            }
 1271|  52.8k|        } else {
 1272|  51.1k|            auto ss = shift_ - B;
 1273|   204k|            for (; p != e; ++p)
  ------------------
  |  Branch (1273:20): [True: 153k, False: 51.1k]
  ------------------
 1274|   153k|                make_full_pos(*p, ss).visit(v, args...);
 1275|  51.1k|        }
 1276|   103k|    }
_ZN5immer6detail4rbts13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_34concat_rebalance_plan_fill_visitorEJRNS1_21concat_rebalance_planILj2ELj2EEEEEEDcT_DpOT0_:
  207|   984k|    {
  208|   984k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  209|   984k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_34concat_rebalance_plan_fill_visitorEJRNS1_21concat_rebalance_planILj2ELj2EEEEEEDcT_DpOT0_:
 1405|   582k|    {
 1406|   582k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1407|   582k|    }
_ZN5immer6detail4rbts12null_sub_pos13each_left_subINS1_21concat_merger_visitorEJRNS1_13concat_mergerINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEEEEvT_DpOT0_:
  711|   113k|    {
  712|   113k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE14each_right_subINS1_21concat_merger_visitorEJRNS1_13concat_mergerISC_EEEEEvT_DpOT0_:
 1304|   103k|    {
 1305|   103k|        each_i(v, 1, branches<B>, args...);
 1306|   103k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE6each_iINS1_21concat_merger_visitorEJRNS1_13concat_mergerISC_EEEEEvT_jjDpOT0_:
 1263|   103k|    {
 1264|   103k|        auto p = node_->inner() + i;
 1265|   103k|        auto e = node_->inner() + n;
 1266|   103k|        if (shift_ == BL) {
  ------------------
  |  Branch (1266:13): [True: 52.8k, False: 51.1k]
  ------------------
 1267|   211k|            for (; p != e; ++p) {
  ------------------
  |  Branch (1267:20): [True: 158k, False: 52.8k]
  ------------------
 1268|   158k|                IMMER_PREFETCH(p + 1);
 1269|   158k|                make_full_leaf_pos(*p).visit(v, args...);
 1270|   158k|            }
 1271|  52.8k|        } else {
 1272|  51.1k|            auto ss = shift_ - B;
 1273|   204k|            for (; p != e; ++p)
  ------------------
  |  Branch (1273:20): [True: 153k, False: 51.1k]
  ------------------
 1274|   153k|                make_full_pos(*p, ss).visit(v, args...);
 1275|  51.1k|        }
 1276|   103k|    }
_ZN5immer6detail4rbts13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_21concat_merger_visitorEJRNS1_13concat_mergerISC_EEEEEDcT_DpOT0_:
  207|   984k|    {
  208|   984k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  209|   984k|    }
_ZNK5immer6detail4rbts13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE4sizeEv:
  200|   984k|    size_t size() const { return branches<BL>; }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_21concat_merger_visitorEJRNS1_13concat_mergerISC_EEEEEDcT_DpOT0_:
 1405|   582k|    {
 1406|   582k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1407|   582k|    }
_ZN5immer6detail4rbts25singleton_regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE8last_subINS1_19concat_both_visitorISC_EEJRNS1_14empty_leaf_posISC_EERNS1_8full_posISC_EEEEEDcT_DpOT0_:
  753|    652|    {
  754|    652|        return make_leaf_sub_pos(leaf_, count_).visit(v, args...);
  755|    652|    }
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_19concat_both_visitorISC_EEJRNS1_14empty_leaf_posISC_EERNS1_8full_posISC_EEEEEDcT_DpOT0_:
  144|    652|    {
  145|    652|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  146|    652|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE14first_sub_leafINS1_20concat_right_visitorISC_EEJRNS1_12leaf_sub_posISC_EERNS1_14empty_leaf_posISC_EEEEEDcT_DpOT0_:
 1370|    652|    {
 1371|    652|        assert(shift_ == BL);
  ------------------
  |  Branch (1371:9): [True: 652, False: 0]
  ------------------
 1372|    652|        auto child = node_->inner()[0];
 1373|    652|        return make_full_leaf_pos(child).visit(v, args...);
 1374|    652|    }
_ZN5immer6detail4rbts13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_20concat_right_visitorISC_EEJRNS1_12leaf_sub_posISC_EERNS1_14empty_leaf_posISC_EEEEEDcT_DpOT0_:
  207|  2.66k|    {
  208|  2.66k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  209|  2.66k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE14each_right_subINS1_34concat_rebalance_plan_fill_visitorEJRNS1_21concat_rebalance_planILj2ELj2EEEEEEvT_DpOT0_:
  906|   135k|    {
  907|   135k|        if (count() > 1)
  ------------------
  |  Branch (907:13): [True: 126k, False: 8.97k]
  ------------------
  908|   126k|            each_right_sub_(v, 1, args...);
  909|   135k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE15each_right_sub_INS1_34concat_rebalance_plan_fill_visitorEJRNS1_21concat_rebalance_planILj2ELj2EEEEEEvT_jDpOT0_:
  879|   126k|    {
  880|   126k|        auto last  = count() - 1;
  881|   126k|        auto lsize = size_ - (last << shift_);
  882|   126k|        auto n     = node()->inner() + i;
  883|   126k|        auto e     = node()->inner() + last;
  884|   126k|        if (shift() == BL) {
  ------------------
  |  Branch (884:13): [True: 73.9k, False: 52.8k]
  ------------------
  885|   216k|            for (; n != e; ++n) {
  ------------------
  |  Branch (885:20): [True: 142k, False: 73.9k]
  ------------------
  886|   142k|                IMMER_PREFETCH(n + 1);
  887|   142k|                make_full_leaf_pos(*n).visit(v, args...);
  888|   142k|            }
  889|  73.9k|            make_leaf_sub_pos(*n, lsize).visit(v, args...);
  890|  73.9k|        } else {
  891|  52.8k|            auto ss = shift_ - B;
  892|   134k|            for (; n != e; ++n)
  ------------------
  |  Branch (892:20): [True: 82.0k, False: 52.8k]
  ------------------
  893|  82.0k|                make_full_pos(*n, ss).visit(v, args...);
  894|  52.8k|            make_regular_sub_pos(*n, ss, lsize).visit(v, args...);
  895|  52.8k|        }
  896|   126k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_34concat_rebalance_plan_fill_visitorEJRNS1_21concat_rebalance_planILj2ELj2EEEEEEDcT_DpOT0_:
 1036|   622k|    {
 1037|   622k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|   622k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE14each_right_subINS1_21concat_merger_visitorEJRNS1_13concat_mergerISC_EEEEEvT_DpOT0_:
  906|   135k|    {
  907|   135k|        if (count() > 1)
  ------------------
  |  Branch (907:13): [True: 126k, False: 8.97k]
  ------------------
  908|   126k|            each_right_sub_(v, 1, args...);
  909|   135k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE15each_right_sub_INS1_21concat_merger_visitorEJRNS1_13concat_mergerISC_EEEEEvT_jDpOT0_:
  879|   126k|    {
  880|   126k|        auto last  = count() - 1;
  881|   126k|        auto lsize = size_ - (last << shift_);
  882|   126k|        auto n     = node()->inner() + i;
  883|   126k|        auto e     = node()->inner() + last;
  884|   126k|        if (shift() == BL) {
  ------------------
  |  Branch (884:13): [True: 73.9k, False: 52.8k]
  ------------------
  885|   216k|            for (; n != e; ++n) {
  ------------------
  |  Branch (885:20): [True: 142k, False: 73.9k]
  ------------------
  886|   142k|                IMMER_PREFETCH(n + 1);
  887|   142k|                make_full_leaf_pos(*n).visit(v, args...);
  888|   142k|            }
  889|  73.9k|            make_leaf_sub_pos(*n, lsize).visit(v, args...);
  890|  73.9k|        } else {
  891|  52.8k|            auto ss = shift_ - B;
  892|   134k|            for (; n != e; ++n)
  ------------------
  |  Branch (892:20): [True: 82.0k, False: 52.8k]
  ------------------
  893|  82.0k|                make_full_pos(*n, ss).visit(v, args...);
  894|  52.8k|            make_regular_sub_pos(*n, ss, lsize).visit(v, args...);
  895|  52.8k|        }
  896|   126k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_21concat_merger_visitorEJRNS1_13concat_mergerISC_EEEEEDcT_DpOT0_:
 1036|   622k|    {
 1037|   622k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|   622k|    }
_ZN5immer6detail4rbts25singleton_regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE8last_subINS1_19concat_both_visitorISC_EEJRNS1_14empty_leaf_posISC_EERNS1_15regular_sub_posISC_EEEEEDcT_DpOT0_:
  753|  2.01k|    {
  754|  2.01k|        return make_leaf_sub_pos(leaf_, count_).visit(v, args...);
  755|  2.01k|    }
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_19concat_both_visitorISC_EEJRNS1_14empty_leaf_posISC_EERNS1_15regular_sub_posISC_EEEEEDcT_DpOT0_:
  144|  2.01k|    {
  145|  2.01k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  146|  2.01k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE14first_sub_leafINS1_20concat_right_visitorISC_EEJRNS1_12leaf_sub_posISC_EERNS1_14empty_leaf_posISC_EEEEEDcT_DpOT0_:
  986|  2.01k|    {
  987|  2.01k|        assert(shift_ == BL);
  ------------------
  |  Branch (987:9): [True: 2.01k, False: 0]
  ------------------
  988|  2.01k|        auto child   = node_->inner()[0];
  989|  2.01k|        auto is_full = size_ >= branches<BL>;
  990|  2.01k|        return is_full ? make_full_leaf_pos(child).visit(v, args...)
  ------------------
  |  Branch (990:16): [True: 2.01k, False: 0]
  ------------------
  991|  2.01k|                       : make_leaf_sub_pos(child, size_).visit(v, args...);
  992|  2.01k|    }
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_20concat_right_visitorISC_EEJRSD_RNS1_14empty_leaf_posISC_EEEEEDcT_DpOT0_:
  144|  4.98k|    {
  145|  4.98k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  146|  4.98k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE14each_right_subINS1_34concat_rebalance_plan_fill_visitorEJRNS1_21concat_rebalance_planILj2ELj2EEEEEEvT_DpOT0_:
 1647|  2.74M|    {
 1648|  2.74M|        each_right(v, 1, std::forward<Args>(args)...);
 1649|  2.74M|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10each_rightINS1_34concat_rebalance_plan_fill_visitorEJRNS1_21concat_rebalance_planILj2ELj2EEEEEEvT_jDpOT0_:
 1653|  2.74M|    {
 1654|  2.74M|        assert(start > 0);
  ------------------
  |  Branch (1654:9): [True: 2.74M, False: 0]
  ------------------
 1655|  2.74M|        assert(start <= relaxed_->d.count);
  ------------------
  |  Branch (1655:9): [True: 2.74M, False: 0]
  ------------------
 1656|  2.74M|        auto s = relaxed_->d.sizes[start - 1];
 1657|  2.74M|        auto p = node_->inner();
 1658|  2.74M|        if (shift_ == BL) {
  ------------------
  |  Branch (1658:13): [True: 341k, False: 2.40M]
  ------------------
 1659|   862k|            for (auto i = start; i < relaxed_->d.count; ++i) {
  ------------------
  |  Branch (1659:34): [True: 521k, False: 341k]
  ------------------
 1660|   521k|                IMMER_PREFETCH(p + i + 1);
 1661|   521k|                make_leaf_sub_pos(p[i], relaxed_->d.sizes[i] - s)
 1662|   521k|                    .visit(v, args...);
 1663|   521k|                s = relaxed_->d.sizes[i];
 1664|   521k|                assert(s);
  ------------------
  |  Branch (1664:17): [True: 521k, False: 0]
  ------------------
 1665|   521k|            }
 1666|  2.40M|        } else {
 1667|  2.40M|            auto ss = shift_ - B;
 1668|  8.48M|            for (auto i = start; i < relaxed_->d.count; ++i) {
  ------------------
  |  Branch (1668:34): [True: 6.08M, False: 2.40M]
  ------------------
 1669|  6.08M|                visit_maybe_relaxed_sub(
 1670|  6.08M|                    p[i], ss, relaxed_->d.sizes[i] - s, v, args...);
 1671|  6.08M|                s = relaxed_->d.sizes[i];
 1672|       |                assert(s);
  ------------------
  |  Branch (1672:17): [True: 6.08M, False: 0]
  ------------------
 1673|  6.08M|            }
 1674|  2.40M|        }
 1675|  2.74M|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENS1_34concat_rebalance_plan_fill_visitorEJRNS1_21concat_rebalance_planILj2ELj2EEEEEEDcPT_jmT0_DpOT1_:
 1838|  12.4M|{
 1839|  12.4M|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 12.4M, False: 0]
  ------------------
 1840|  12.4M|    auto relaxed = node->relaxed();
 1841|  12.4M|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 11.8M, False: 569k]
  ------------------
 1842|  11.8M|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 11.8M, False: 0]
  ------------------
 1843|  11.8M|        return make_relaxed_pos(node, shift, relaxed)
 1844|  11.8M|            .visit(v, std::forward<Args>(args)...);
 1845|  11.8M|    } else {
 1846|   569k|        return make_regular_sub_pos(node, shift, size)
 1847|   569k|            .visit(v, std::forward<Args>(args)...);
 1848|   569k|    }
 1849|  12.4M|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE14each_right_subINS1_21concat_merger_visitorEJRNS1_13concat_mergerISC_EEEEEvT_DpOT0_:
 1647|  2.74M|    {
 1648|  2.74M|        each_right(v, 1, std::forward<Args>(args)...);
 1649|  2.74M|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10each_rightINS1_21concat_merger_visitorEJRNS1_13concat_mergerISC_EEEEEvT_jDpOT0_:
 1653|  2.74M|    {
 1654|  2.74M|        assert(start > 0);
  ------------------
  |  Branch (1654:9): [True: 2.74M, False: 0]
  ------------------
 1655|  2.74M|        assert(start <= relaxed_->d.count);
  ------------------
  |  Branch (1655:9): [True: 2.74M, False: 0]
  ------------------
 1656|  2.74M|        auto s = relaxed_->d.sizes[start - 1];
 1657|  2.74M|        auto p = node_->inner();
 1658|  2.74M|        if (shift_ == BL) {
  ------------------
  |  Branch (1658:13): [True: 341k, False: 2.40M]
  ------------------
 1659|   862k|            for (auto i = start; i < relaxed_->d.count; ++i) {
  ------------------
  |  Branch (1659:34): [True: 521k, False: 341k]
  ------------------
 1660|   521k|                IMMER_PREFETCH(p + i + 1);
 1661|   521k|                make_leaf_sub_pos(p[i], relaxed_->d.sizes[i] - s)
 1662|   521k|                    .visit(v, args...);
 1663|   521k|                s = relaxed_->d.sizes[i];
 1664|   521k|                assert(s);
  ------------------
  |  Branch (1664:17): [True: 521k, False: 0]
  ------------------
 1665|   521k|            }
 1666|  2.40M|        } else {
 1667|  2.40M|            auto ss = shift_ - B;
 1668|  8.48M|            for (auto i = start; i < relaxed_->d.count; ++i) {
  ------------------
  |  Branch (1668:34): [True: 6.08M, False: 2.40M]
  ------------------
 1669|  6.08M|                visit_maybe_relaxed_sub(
 1670|  6.08M|                    p[i], ss, relaxed_->d.sizes[i] - s, v, args...);
 1671|  6.08M|                s = relaxed_->d.sizes[i];
 1672|       |                assert(s);
  ------------------
  |  Branch (1672:17): [True: 6.08M, False: 0]
  ------------------
 1673|  6.08M|            }
 1674|  2.40M|        }
 1675|  2.74M|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENS1_21concat_merger_visitorEJRNS1_13concat_mergerISC_EEEEEDcPT_jmT0_DpOT1_:
 1838|  12.4M|{
 1839|  12.4M|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 12.4M, False: 0]
  ------------------
 1840|  12.4M|    auto relaxed = node->relaxed();
 1841|  12.4M|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 11.8M, False: 569k]
  ------------------
 1842|  11.8M|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 11.8M, False: 0]
  ------------------
 1843|  11.8M|        return make_relaxed_pos(node, shift, relaxed)
 1844|  11.8M|            .visit(v, std::forward<Args>(args)...);
 1845|  11.8M|    } else {
 1846|   569k|        return make_regular_sub_pos(node, shift, size)
 1847|   569k|            .visit(v, std::forward<Args>(args)...);
 1848|   569k|    }
 1849|  12.4M|}
_ZN5immer6detail4rbts25singleton_regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE8last_subINS1_19concat_both_visitorISC_EEJRNS1_14empty_leaf_posISC_EERNS1_11relaxed_posISC_EEEEEDcT_DpOT0_:
  753|  4.98k|    {
  754|  4.98k|        return make_leaf_sub_pos(leaf_, count_).visit(v, args...);
  755|  4.98k|    }
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_19concat_both_visitorISC_EEJRNS1_14empty_leaf_posISC_EERNS1_11relaxed_posISC_EEEEEDcT_DpOT0_:
  144|  4.98k|    {
  145|  4.98k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  146|  4.98k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE14first_sub_leafINS1_20concat_right_visitorISC_EEJRNS1_12leaf_sub_posISC_EERNS1_14empty_leaf_posISC_EEEEEDcT_DpOT0_:
 1774|  4.98k|    {
 1775|  4.98k|        assert(shift_ == BL);
  ------------------
  |  Branch (1775:9): [True: 4.98k, False: 0]
  ------------------
 1776|  4.98k|        auto child      = node_->inner()[0];
 1777|  4.98k|        auto child_size = relaxed_->d.sizes[0];
 1778|  4.98k|        return make_leaf_sub_pos(child, child_size).visit(v, args...);
 1779|  4.98k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_26concat_trees_right_visitorISC_EEJRNS1_25singleton_regular_sub_posISC_EERNS1_14empty_leaf_posISC_EEEEEDcT_DpOT0_:
 1036|  2.27k|    {
 1037|  2.27k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  2.27k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENS1_25concat_trees_left_visitorISC_EEJNS1_8leaf_posISC_EERPSC_RjRmEEEDcPT_jmT0_DpOT1_:
 1838|   469k|{
 1839|   469k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 469k, False: 0]
  ------------------
 1840|   469k|    auto relaxed = node->relaxed();
 1841|   469k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 455k, False: 14.0k]
  ------------------
 1842|   455k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 455k, False: 0]
  ------------------
 1843|   455k|        return make_relaxed_pos(node, shift, relaxed)
 1844|   455k|            .visit(v, std::forward<Args>(args)...);
 1845|   455k|    } else {
 1846|  14.0k|        return make_regular_sub_pos(node, shift, size)
 1847|  14.0k|            .visit(v, std::forward<Args>(args)...);
 1848|  14.0k|    }
 1849|   469k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_25concat_trees_left_visitorISC_EEJNS1_8leaf_posISC_EERPSC_RjRmEEEDcT_DpOT0_:
 1813|   455k|    {
 1814|   455k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|   455k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENS1_26concat_trees_right_visitorISC_EEJRNS1_11relaxed_posISC_EERNS1_8leaf_posISC_EEEEEDcPT_jmT0_DpOT1_:
 1838|   455k|{
 1839|   455k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 455k, False: 0]
  ------------------
 1840|   455k|    auto relaxed = node->relaxed();
 1841|   455k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 438k, False: 16.9k]
  ------------------
 1842|   438k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 438k, False: 0]
  ------------------
 1843|   438k|        return make_relaxed_pos(node, shift, relaxed)
 1844|   438k|            .visit(v, std::forward<Args>(args)...);
 1845|   438k|    } else {
 1846|  16.9k|        return make_regular_sub_pos(node, shift, size)
 1847|  16.9k|            .visit(v, std::forward<Args>(args)...);
 1848|  16.9k|    }
 1849|   455k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_26concat_trees_right_visitorISC_EEJRSD_RNS1_8leaf_posISC_EEEEEDcT_DpOT0_:
 1813|   438k|    {
 1814|   438k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|   438k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE8last_subINS1_19concat_left_visitorISC_EEJRNS1_8leaf_posISC_EERSD_EEEDcT_DpOT0_:
 1750|  1.99M|    {
 1751|  1.99M|        auto offset     = relaxed_->d.count - 1;
 1752|  1.99M|        auto child      = node_->inner()[offset];
 1753|  1.99M|        auto child_size = size(offset);
 1754|  1.99M|        auto is_leaf    = shift_ == BL;
 1755|  1.99M|        return is_leaf ? make_leaf_sub_pos(child, child_size).visit(v, args...)
  ------------------
  |  Branch (1755:16): [True: 0, False: 1.99M]
  ------------------
 1756|  1.99M|                       : visit_maybe_relaxed_sub(
 1757|  1.99M|                             child, shift_ - B, child_size, v, args...);
 1758|  1.99M|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENS1_19concat_left_visitorISC_EEJRNS1_8leaf_posISC_EERNS1_11relaxed_posISC_EEEEEDcPT_jmT0_DpOT1_:
 1838|  1.99M|{
 1839|  1.99M|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 1.99M, False: 0]
  ------------------
 1840|  1.99M|    auto relaxed = node->relaxed();
 1841|  1.99M|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 1.98M, False: 1.99k]
  ------------------
 1842|  1.98M|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 1.98M, False: 0]
  ------------------
 1843|  1.98M|        return make_relaxed_pos(node, shift, relaxed)
 1844|  1.98M|            .visit(v, std::forward<Args>(args)...);
 1845|  1.98M|    } else {
 1846|  1.99k|        return make_regular_sub_pos(node, shift, size)
 1847|  1.99k|            .visit(v, std::forward<Args>(args)...);
 1848|  1.99k|    }
 1849|  1.99M|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_19concat_left_visitorISC_EEJRNS1_8leaf_posISC_EERSD_EEEDcT_DpOT0_:
 1813|  1.98M|    {
 1814|  1.98M|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  1.98M|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_19concat_left_visitorISC_EEJRNS1_8leaf_posISC_EERNS1_11relaxed_posISC_EEEEEDcT_DpOT0_:
 1036|  5.06k|    {
 1037|  5.06k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  5.06k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE8last_subINS1_19concat_left_visitorISC_EEJRNS1_8leaf_posISC_EERNS1_11relaxed_posISC_EEEEEDcT_DpOT0_:
  958|  3.06k|    {
  959|  3.06k|        auto offset  = count() - 1;
  960|  3.06k|        auto child   = node_->inner()[offset];
  961|  3.06k|        auto is_leaf = shift_ == BL;
  962|  3.06k|        auto lsize   = size_ - (size_t{offset} << shift_);
  963|  3.06k|        return is_leaf ? make_leaf_sub_pos(child, lsize).visit(v, args...)
  ------------------
  |  Branch (963:16): [True: 0, False: 3.06k]
  ------------------
  964|  3.06k|                       : make_regular_sub_pos(child, shift_ - B, lsize)
  965|  3.06k|                             .visit(v, args...);
  966|  3.06k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE13each_left_subINS1_34concat_rebalance_plan_fill_visitorEJRNS1_21concat_rebalance_planILj2ELj2EEEEEEvT_DpOT0_:
  913|   808k|    {
  914|   808k|        each_left(v, count() - 1, args...);
  915|   808k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE9each_leftINS1_34concat_rebalance_plan_fill_visitorEJRNS1_21concat_rebalance_planILj2ELj2EEEEEEvT_jDpOT0_:
  873|   808k|    {
  874|   808k|        return each_left_regular(*this, v, last, args...);
  875|   808k|    }
_ZN5immer6detail4rbts17each_left_regularIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_34concat_rebalance_plan_fill_visitorEJRNS1_21concat_rebalance_planILj2ELj2EEEEEEvOT_T0_jDpOT1_:
  575|   808k|{
  576|   808k|    constexpr auto B  = bits<Pos>;
  577|   808k|    constexpr auto BL = bits_leaf<Pos>;
  578|   808k|    assert(last < p.count());
  ------------------
  |  Branch (578:5): [True: 808k, False: 0]
  ------------------
  579|   808k|    if (p.shift() == BL) {
  ------------------
  |  Branch (579:9): [True: 394k, False: 413k]
  ------------------
  580|   394k|        auto n = p.node()->inner();
  581|   394k|        auto e = n + last;
  582|  1.07M|        for (; n != e; ++n) {
  ------------------
  |  Branch (582:16): [True: 682k, False: 394k]
  ------------------
  583|   682k|            IMMER_PREFETCH(n + 1);
  584|   682k|            make_full_leaf_pos(*n).visit(v, args...);
  585|   682k|        }
  586|   413k|    } else {
  587|   413k|        auto n  = p.node()->inner();
  588|   413k|        auto e  = n + last;
  589|   413k|        auto ss = p.shift() - B;
  590|   760k|        for (; n != e; ++n)
  ------------------
  |  Branch (590:16): [True: 346k, False: 413k]
  ------------------
  591|   346k|            make_full_pos(*n, ss).visit(v, args...);
  592|   413k|    }
  593|   808k|}
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE13each_left_subINS1_21concat_merger_visitorEJRNS1_13concat_mergerISC_EEEEEvT_DpOT0_:
  913|   808k|    {
  914|   808k|        each_left(v, count() - 1, args...);
  915|   808k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE9each_leftINS1_21concat_merger_visitorEJRNS1_13concat_mergerISC_EEEEEvT_jDpOT0_:
  873|   808k|    {
  874|   808k|        return each_left_regular(*this, v, last, args...);
  875|   808k|    }
_ZN5immer6detail4rbts17each_left_regularIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_21concat_merger_visitorEJRNS1_13concat_mergerISD_EEEEEvOT_T0_jDpOT1_:
  575|   808k|{
  576|   808k|    constexpr auto B  = bits<Pos>;
  577|   808k|    constexpr auto BL = bits_leaf<Pos>;
  578|   808k|    assert(last < p.count());
  ------------------
  |  Branch (578:5): [True: 808k, False: 0]
  ------------------
  579|   808k|    if (p.shift() == BL) {
  ------------------
  |  Branch (579:9): [True: 394k, False: 413k]
  ------------------
  580|   394k|        auto n = p.node()->inner();
  581|   394k|        auto e = n + last;
  582|  1.07M|        for (; n != e; ++n) {
  ------------------
  |  Branch (582:16): [True: 682k, False: 394k]
  ------------------
  583|   682k|            IMMER_PREFETCH(n + 1);
  584|   682k|            make_full_leaf_pos(*n).visit(v, args...);
  585|   682k|        }
  586|   413k|    } else {
  587|   413k|        auto n  = p.node()->inner();
  588|   413k|        auto e  = n + last;
  589|   413k|        auto ss = p.shift() - B;
  590|   760k|        for (; n != e; ++n)
  ------------------
  |  Branch (590:16): [True: 346k, False: 413k]
  ------------------
  591|   346k|            make_full_pos(*n, ss).visit(v, args...);
  592|   413k|    }
  593|   808k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE9first_subINS1_20concat_right_visitorISC_EEJRNS1_15regular_sub_posISC_EERNS1_8leaf_posISC_EEEEEDcT_DpOT0_:
 1762|   704k|    {
 1763|   704k|        auto child      = node_->inner()[0];
 1764|   704k|        auto child_size = relaxed_->d.sizes[0];
 1765|   704k|        auto is_leaf    = shift_ == BL;
 1766|   704k|        assert(child_size);
  ------------------
  |  Branch (1766:9): [True: 704k, False: 0]
  ------------------
 1767|   704k|        return is_leaf ? make_leaf_sub_pos(child, child_size).visit(v, args...)
  ------------------
  |  Branch (1767:16): [True: 0, False: 704k]
  ------------------
 1768|   704k|                       : visit_maybe_relaxed_sub(
 1769|   704k|                             child, shift_ - B, child_size, v, args...);
 1770|   704k|    }
_ZNK5immer6detail4rbts8leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5shiftEv:
  106|   469k|    shift_t shift() const { return 0; }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENS1_20concat_right_visitorISC_EEJRNS1_15regular_sub_posISC_EERNS1_8leaf_posISC_EEEEEDcPT_jmT0_DpOT1_:
 1838|   704k|{
 1839|   704k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 704k, False: 0]
  ------------------
 1840|   704k|    auto relaxed = node->relaxed();
 1841|   704k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 597k, False: 107k]
  ------------------
 1842|   597k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 597k, False: 0]
  ------------------
 1843|   597k|        return make_relaxed_pos(node, shift, relaxed)
 1844|   597k|            .visit(v, std::forward<Args>(args)...);
 1845|   597k|    } else {
 1846|   107k|        return make_regular_sub_pos(node, shift, size)
 1847|   107k|            .visit(v, std::forward<Args>(args)...);
 1848|   107k|    }
 1849|   704k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_20concat_right_visitorISC_EEJRNS1_15regular_sub_posISC_EERNS1_8leaf_posISC_EEEEEDcT_DpOT0_:
 1813|   597k|    {
 1814|   597k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|   597k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_20concat_right_visitorISC_EEJRSD_RNS1_8leaf_posISC_EEEEEDcT_DpOT0_:
 1036|   107k|    {
 1037|   107k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|   107k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE8last_subINS1_19concat_left_visitorISC_EEJRNS1_8leaf_posISC_EERSD_EEEDcT_DpOT0_:
  958|    799|    {
  959|    799|        auto offset  = count() - 1;
  960|    799|        auto child   = node_->inner()[offset];
  961|    799|        auto is_leaf = shift_ == BL;
  962|    799|        auto lsize   = size_ - (size_t{offset} << shift_);
  963|    799|        return is_leaf ? make_leaf_sub_pos(child, lsize).visit(v, args...)
  ------------------
  |  Branch (963:16): [True: 0, False: 799]
  ------------------
  964|    799|                       : make_regular_sub_pos(child, shift_ - B, lsize)
  965|    799|                             .visit(v, args...);
  966|    799|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_19concat_left_visitorISC_EEJRNS1_8leaf_posISC_EERSD_EEEDcT_DpOT0_:
 1036|  1.27k|    {
 1037|  1.27k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  1.27k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE9first_subINS1_20concat_right_visitorISC_EEJRSD_RNS1_8leaf_posISC_EEEEEDcT_DpOT0_:
  970|  50.0k|    {
  971|  50.0k|        auto is_leaf = shift_ == BL;
  972|  50.0k|        auto child   = node_->inner()[0];
  973|  50.0k|        auto is_full = size_ >= (size_t{1} << shift_);
  974|  50.0k|        return is_full
  ------------------
  |  Branch (974:16): [True: 50.0k, False: 0]
  ------------------
  975|  50.0k|                   ? (is_leaf
  ------------------
  |  Branch (975:23): [True: 0, False: 50.0k]
  ------------------
  976|  50.0k|                          ? make_full_leaf_pos(child).visit(v, args...)
  977|  50.0k|                          : make_full_pos(child, shift_ - B).visit(v, args...))
  978|  50.0k|                   : (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|  50.0k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_20concat_right_visitorISC_EEJRNS1_15regular_sub_posISC_EERNS1_8leaf_posISC_EEEEEDcT_DpOT0_:
 1405|  98.9k|    {
 1406|  98.9k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1407|  98.9k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE9first_subINS1_20concat_right_visitorISC_EEJRNS1_15regular_sub_posISC_EERNS1_8leaf_posISC_EEEEEDcT_DpOT0_:
 1361|  48.8k|    {
 1362|  48.8k|        auto is_leaf = shift_ == BL;
 1363|  48.8k|        auto child   = node_->inner()[0];
 1364|  48.8k|        return is_leaf ? make_full_leaf_pos(child).visit(v, args...)
  ------------------
  |  Branch (1364:16): [True: 0, False: 48.8k]
  ------------------
 1365|  48.8k|                       : make_full_pos(child, shift_ - B).visit(v, args...);
 1366|  48.8k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE8last_subINS1_19concat_both_visitorISC_EEJRNS1_8leaf_posISC_EERNS1_8full_posISC_EEEEEDcT_DpOT0_:
  958|  98.6k|    {
  959|  98.6k|        auto offset  = count() - 1;
  960|  98.6k|        auto child   = node_->inner()[offset];
  961|  98.6k|        auto is_leaf = shift_ == BL;
  962|  98.6k|        auto lsize   = size_ - (size_t{offset} << shift_);
  963|  98.6k|        return is_leaf ? make_leaf_sub_pos(child, lsize).visit(v, args...)
  ------------------
  |  Branch (963:16): [True: 50.9k, False: 47.6k]
  ------------------
  964|  98.6k|                       : make_regular_sub_pos(child, shift_ - B, lsize)
  965|  47.6k|                             .visit(v, args...);
  966|  98.6k|    }
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_19concat_both_visitorISC_EEJRNS1_8leaf_posISC_EERNS1_8full_posISC_EEEEEDcT_DpOT0_:
  144|  52.2k|    {
  145|  52.2k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  146|  52.2k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE14first_sub_leafINS1_20concat_right_visitorISC_EEJRNS1_12leaf_sub_posISC_EERNS1_8leaf_posISC_EEEEEDcT_DpOT0_:
 1370|  52.2k|    {
 1371|  52.2k|        assert(shift_ == BL);
  ------------------
  |  Branch (1371:9): [True: 52.2k, False: 0]
  ------------------
 1372|  52.2k|        auto child = node_->inner()[0];
 1373|  52.2k|        return make_full_leaf_pos(child).visit(v, args...);
 1374|  52.2k|    }
_ZN5immer6detail4rbts13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_20concat_right_visitorISC_EEJRNS1_12leaf_sub_posISC_EERNS1_8leaf_posISC_EEEEEDcT_DpOT0_:
  207|   133k|    {
  208|   133k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  209|   133k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_19concat_both_visitorISC_EEJRNS1_8leaf_posISC_EERNS1_8full_posISC_EEEEEDcT_DpOT0_:
 1036|  48.5k|    {
 1037|  48.5k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  48.5k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE8last_subINS1_19concat_both_visitorISC_EEJRNS1_8leaf_posISC_EERSD_EEEDcT_DpOT0_:
  958|   113k|    {
  959|   113k|        auto offset  = count() - 1;
  960|   113k|        auto child   = node_->inner()[offset];
  961|   113k|        auto is_leaf = shift_ == BL;
  962|   113k|        auto lsize   = size_ - (size_t{offset} << shift_);
  963|   113k|        return is_leaf ? make_leaf_sub_pos(child, lsize).visit(v, args...)
  ------------------
  |  Branch (963:16): [True: 74.8k, False: 39.0k]
  ------------------
  964|   113k|                       : make_regular_sub_pos(child, shift_ - B, lsize)
  965|  39.0k|                             .visit(v, args...);
  966|   113k|    }
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_19concat_both_visitorISC_EEJRNS1_8leaf_posISC_EERNS1_15regular_sub_posISC_EEEEEDcT_DpOT0_:
  144|  80.9k|    {
  145|  80.9k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  146|  80.9k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE14first_sub_leafINS1_20concat_right_visitorISC_EEJRNS1_12leaf_sub_posISC_EERNS1_8leaf_posISC_EEEEEDcT_DpOT0_:
  986|  80.9k|    {
  987|  80.9k|        assert(shift_ == BL);
  ------------------
  |  Branch (987:9): [True: 80.9k, False: 0]
  ------------------
  988|  80.9k|        auto child   = node_->inner()[0];
  989|  80.9k|        auto is_full = size_ >= branches<BL>;
  990|  80.9k|        return is_full ? make_full_leaf_pos(child).visit(v, args...)
  ------------------
  |  Branch (990:16): [True: 80.9k, False: 0]
  ------------------
  991|  80.9k|                       : make_leaf_sub_pos(child, size_).visit(v, args...);
  992|  80.9k|    }
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_20concat_right_visitorISC_EEJRSD_RNS1_8leaf_posISC_EEEEEDcT_DpOT0_:
  144|   336k|    {
  145|   336k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  146|   336k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_19concat_both_visitorISC_EEJRNS1_8leaf_posISC_EERSD_EEEDcT_DpOT0_:
 1036|  49.5k|    {
 1037|  49.5k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  49.5k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE8last_subINS1_19concat_both_visitorISC_EEJRNS1_8leaf_posISC_EERNS1_11relaxed_posISC_EEEEEDcT_DpOT0_:
  958|   591k|    {
  959|   591k|        auto offset  = count() - 1;
  960|   591k|        auto child   = node_->inner()[offset];
  961|   591k|        auto is_leaf = shift_ == BL;
  962|   591k|        auto lsize   = size_ - (size_t{offset} << shift_);
  963|   591k|        return is_leaf ? make_leaf_sub_pos(child, lsize).visit(v, args...)
  ------------------
  |  Branch (963:16): [True: 268k, False: 323k]
  ------------------
  964|   591k|                       : make_regular_sub_pos(child, shift_ - B, lsize)
  965|   323k|                             .visit(v, args...);
  966|   591k|    }
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_19concat_both_visitorISC_EEJRNS1_8leaf_posISC_EERNS1_11relaxed_posISC_EEEEEDcT_DpOT0_:
  144|   336k|    {
  145|   336k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  146|   336k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE14first_sub_leafINS1_20concat_right_visitorISC_EEJRNS1_12leaf_sub_posISC_EERNS1_8leaf_posISC_EEEEEDcT_DpOT0_:
 1774|   336k|    {
 1775|   336k|        assert(shift_ == BL);
  ------------------
  |  Branch (1775:9): [True: 336k, False: 0]
  ------------------
 1776|   336k|        auto child      = node_->inner()[0];
 1777|   336k|        auto child_size = relaxed_->d.sizes[0];
 1778|   336k|        return make_leaf_sub_pos(child, child_size).visit(v, args...);
 1779|   336k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_19concat_both_visitorISC_EEJRNS1_8leaf_posISC_EERNS1_11relaxed_posISC_EEEEEDcT_DpOT0_:
 1036|   689k|    {
 1037|   689k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|   689k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE13each_left_subINS1_34concat_rebalance_plan_fill_visitorEJRNS1_21concat_rebalance_planILj2ELj2EEEEEEvT_DpOT0_:
 1617|  4.11M|    {
 1618|  4.11M|        each_left(v, relaxed_->d.count - 1, args...);
 1619|  4.11M|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE9each_leftINS1_34concat_rebalance_plan_fill_visitorEJRNS1_21concat_rebalance_planILj2ELj2EEEEEEvT_jDpOT0_:
 1623|  4.11M|    {
 1624|  4.11M|        auto p = node_->inner();
 1625|  4.11M|        auto s = size_t{};
 1626|  4.11M|        if (shift_ == BL) {
  ------------------
  |  Branch (1626:13): [True: 75.7k, False: 4.04M]
  ------------------
 1627|   216k|            for (auto i = count_t{0}; i < n; ++i) {
  ------------------
  |  Branch (1627:39): [True: 141k, False: 75.7k]
  ------------------
 1628|   141k|                IMMER_PREFETCH(p + i + 1);
 1629|   141k|                make_leaf_sub_pos(p[i], relaxed_->d.sizes[i] - s)
 1630|   141k|                    .visit(v, args...);
 1631|   141k|                s = relaxed_->d.sizes[i];
 1632|   141k|                assert(s);
  ------------------
  |  Branch (1632:17): [True: 141k, False: 0]
  ------------------
 1633|   141k|            }
 1634|  4.04M|        } else {
 1635|  4.04M|            auto ss = shift_ - B;
 1636|  10.3M|            for (auto i = count_t{0}; i < n; ++i) {
  ------------------
  |  Branch (1636:39): [True: 6.32M, False: 4.04M]
  ------------------
 1637|  6.32M|                visit_maybe_relaxed_sub(
 1638|  6.32M|                    p[i], ss, relaxed_->d.sizes[i] - s, v, args...);
 1639|  6.32M|                s = relaxed_->d.sizes[i];
 1640|       |                assert(s);
  ------------------
  |  Branch (1640:17): [True: 6.32M, False: 0]
  ------------------
 1641|  6.32M|            }
 1642|  4.04M|        }
 1643|  4.11M|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE13each_left_subINS1_21concat_merger_visitorEJRNS1_13concat_mergerISC_EEEEEvT_DpOT0_:
 1617|  4.11M|    {
 1618|  4.11M|        each_left(v, relaxed_->d.count - 1, args...);
 1619|  4.11M|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE9each_leftINS1_21concat_merger_visitorEJRNS1_13concat_mergerISC_EEEEEvT_jDpOT0_:
 1623|  4.11M|    {
 1624|  4.11M|        auto p = node_->inner();
 1625|  4.11M|        auto s = size_t{};
 1626|  4.11M|        if (shift_ == BL) {
  ------------------
  |  Branch (1626:13): [True: 75.7k, False: 4.04M]
  ------------------
 1627|   216k|            for (auto i = count_t{0}; i < n; ++i) {
  ------------------
  |  Branch (1627:39): [True: 141k, False: 75.7k]
  ------------------
 1628|   141k|                IMMER_PREFETCH(p + i + 1);
 1629|   141k|                make_leaf_sub_pos(p[i], relaxed_->d.sizes[i] - s)
 1630|   141k|                    .visit(v, args...);
 1631|   141k|                s = relaxed_->d.sizes[i];
 1632|   141k|                assert(s);
  ------------------
  |  Branch (1632:17): [True: 141k, False: 0]
  ------------------
 1633|   141k|            }
 1634|  4.04M|        } else {
 1635|  4.04M|            auto ss = shift_ - B;
 1636|  10.3M|            for (auto i = count_t{0}; i < n; ++i) {
  ------------------
  |  Branch (1636:39): [True: 6.32M, False: 4.04M]
  ------------------
 1637|  6.32M|                visit_maybe_relaxed_sub(
 1638|  6.32M|                    p[i], ss, relaxed_->d.sizes[i] - s, v, args...);
 1639|  6.32M|                s = relaxed_->d.sizes[i];
 1640|       |                assert(s);
  ------------------
  |  Branch (1640:17): [True: 6.32M, False: 0]
  ------------------
 1641|  6.32M|            }
 1642|  4.04M|        }
 1643|  4.11M|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE9first_subINS1_20concat_right_visitorISC_EEJRSD_RNS1_8leaf_posISC_EEEEEDcT_DpOT0_:
 1762|  1.67M|    {
 1763|  1.67M|        auto child      = node_->inner()[0];
 1764|  1.67M|        auto child_size = relaxed_->d.sizes[0];
 1765|  1.67M|        auto is_leaf    = shift_ == BL;
 1766|  1.67M|        assert(child_size);
  ------------------
  |  Branch (1766:9): [True: 1.67M, False: 0]
  ------------------
 1767|  1.67M|        return is_leaf ? make_leaf_sub_pos(child, child_size).visit(v, args...)
  ------------------
  |  Branch (1767:16): [True: 0, False: 1.67M]
  ------------------
 1768|  1.67M|                       : visit_maybe_relaxed_sub(
 1769|  1.67M|                             child, shift_ - B, child_size, v, args...);
 1770|  1.67M|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENS1_20concat_right_visitorISC_EEJRNS1_11relaxed_posISC_EERNS1_8leaf_posISC_EEEEEDcPT_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.67M, False: 2.21k]
  ------------------
 1842|  1.67M|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 1.67M, False: 0]
  ------------------
 1843|  1.67M|        return make_relaxed_pos(node, shift, relaxed)
 1844|  1.67M|            .visit(v, std::forward<Args>(args)...);
 1845|  1.67M|    } else {
 1846|  2.21k|        return make_regular_sub_pos(node, shift, size)
 1847|  2.21k|            .visit(v, std::forward<Args>(args)...);
 1848|  2.21k|    }
 1849|  1.67M|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_20concat_right_visitorISC_EEJRSD_RNS1_8leaf_posISC_EEEEEDcT_DpOT0_:
 1813|  1.67M|    {
 1814|  1.67M|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  1.67M|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_20concat_right_visitorISC_EEJRNS1_11relaxed_posISC_EERNS1_8leaf_posISC_EEEEEDcT_DpOT0_:
 1036|  2.21k|    {
 1037|  2.21k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  2.21k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE8last_subINS1_19concat_left_visitorISC_EEJRNS1_8leaf_posISC_EERNS1_15regular_sub_posISC_EEEEEDcT_DpOT0_:
 1750|  70.3k|    {
 1751|  70.3k|        auto offset     = relaxed_->d.count - 1;
 1752|  70.3k|        auto child      = node_->inner()[offset];
 1753|  70.3k|        auto child_size = size(offset);
 1754|  70.3k|        auto is_leaf    = shift_ == BL;
 1755|  70.3k|        return is_leaf ? make_leaf_sub_pos(child, child_size).visit(v, args...)
  ------------------
  |  Branch (1755:16): [True: 0, False: 70.3k]
  ------------------
 1756|  70.3k|                       : visit_maybe_relaxed_sub(
 1757|  70.3k|                             child, shift_ - B, child_size, v, args...);
 1758|  70.3k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENS1_19concat_left_visitorISC_EEJRNS1_8leaf_posISC_EERNS1_15regular_sub_posISC_EEEEEDcPT_jmT0_DpOT1_:
 1838|  70.3k|{
 1839|  70.3k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 70.3k, False: 0]
  ------------------
 1840|  70.3k|    auto relaxed = node->relaxed();
 1841|  70.3k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 69.8k, False: 473]
  ------------------
 1842|  69.8k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 69.8k, False: 0]
  ------------------
 1843|  69.8k|        return make_relaxed_pos(node, shift, relaxed)
 1844|  69.8k|            .visit(v, std::forward<Args>(args)...);
 1845|  69.8k|    } else {
 1846|    473|        return make_regular_sub_pos(node, shift, size)
 1847|    473|            .visit(v, std::forward<Args>(args)...);
 1848|    473|    }
 1849|  70.3k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_19concat_left_visitorISC_EEJRNS1_8leaf_posISC_EERNS1_15regular_sub_posISC_EEEEEDcT_DpOT0_:
 1813|  69.8k|    {
 1814|  69.8k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  69.8k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE9first_subINS1_20concat_right_visitorISC_EEJRNS1_11relaxed_posISC_EERNS1_8leaf_posISC_EEEEEDcT_DpOT0_:
  970|  2.12k|    {
  971|  2.12k|        auto is_leaf = shift_ == BL;
  972|  2.12k|        auto child   = node_->inner()[0];
  973|  2.12k|        auto is_full = size_ >= (size_t{1} << shift_);
  974|  2.12k|        return is_full
  ------------------
  |  Branch (974:16): [True: 2.12k, False: 0]
  ------------------
  975|  2.12k|                   ? (is_leaf
  ------------------
  |  Branch (975:23): [True: 0, False: 2.12k]
  ------------------
  976|  2.12k|                          ? make_full_leaf_pos(child).visit(v, args...)
  977|  2.12k|                          : make_full_pos(child, shift_ - B).visit(v, args...))
  978|  2.12k|                   : (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.12k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_20concat_right_visitorISC_EEJRNS1_11relaxed_posISC_EERNS1_8leaf_posISC_EEEEEDcT_DpOT0_:
 1405|  4.07k|    {
 1406|  4.07k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1407|  4.07k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE9first_subINS1_20concat_right_visitorISC_EEJRNS1_11relaxed_posISC_EERNS1_8leaf_posISC_EEEEEDcT_DpOT0_:
 1361|  1.94k|    {
 1362|  1.94k|        auto is_leaf = shift_ == BL;
 1363|  1.94k|        auto child   = node_->inner()[0];
 1364|  1.94k|        return is_leaf ? make_full_leaf_pos(child).visit(v, args...)
  ------------------
  |  Branch (1364:16): [True: 0, False: 1.94k]
  ------------------
 1365|  1.94k|                       : make_full_pos(child, shift_ - B).visit(v, args...);
 1366|  1.94k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE8last_subINS1_19concat_both_visitorISC_EEJRNS1_8leaf_posISC_EERNS1_8full_posISC_EEEEEDcT_DpOT0_:
 1750|  3.81k|    {
 1751|  3.81k|        auto offset     = relaxed_->d.count - 1;
 1752|  3.81k|        auto child      = node_->inner()[offset];
 1753|  3.81k|        auto child_size = size(offset);
 1754|  3.81k|        auto is_leaf    = shift_ == BL;
 1755|  3.81k|        return is_leaf ? make_leaf_sub_pos(child, child_size).visit(v, args...)
  ------------------
  |  Branch (1755:16): [True: 1.28k, False: 2.52k]
  ------------------
 1756|  3.81k|                       : visit_maybe_relaxed_sub(
 1757|  2.52k|                             child, shift_ - B, child_size, v, args...);
 1758|  3.81k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENS1_19concat_both_visitorISC_EEJRNS1_8leaf_posISC_EERNS1_8full_posISC_EEEEEDcPT_jmT0_DpOT1_:
 1838|  2.52k|{
 1839|  2.52k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 2.52k, False: 0]
  ------------------
 1840|  2.52k|    auto relaxed = node->relaxed();
 1841|  2.52k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 1.68k, False: 844]
  ------------------
 1842|  1.68k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 1.68k, False: 0]
  ------------------
 1843|  1.68k|        return make_relaxed_pos(node, shift, relaxed)
 1844|  1.68k|            .visit(v, std::forward<Args>(args)...);
 1845|  1.68k|    } else {
 1846|    844|        return make_regular_sub_pos(node, shift, size)
 1847|    844|            .visit(v, std::forward<Args>(args)...);
 1848|    844|    }
 1849|  2.52k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_19concat_both_visitorISC_EEJRNS1_8leaf_posISC_EERNS1_8full_posISC_EEEEEDcT_DpOT0_:
 1813|  1.68k|    {
 1814|  1.68k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  1.68k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE8last_subINS1_19concat_both_visitorISC_EEJRNS1_8leaf_posISC_EERNS1_15regular_sub_posISC_EEEEEDcT_DpOT0_:
 1750|  18.0k|    {
 1751|  18.0k|        auto offset     = relaxed_->d.count - 1;
 1752|  18.0k|        auto child      = node_->inner()[offset];
 1753|  18.0k|        auto child_size = size(offset);
 1754|  18.0k|        auto is_leaf    = shift_ == BL;
 1755|  18.0k|        return is_leaf ? make_leaf_sub_pos(child, child_size).visit(v, args...)
  ------------------
  |  Branch (1755:16): [True: 6.12k, False: 11.8k]
  ------------------
 1756|  18.0k|                       : visit_maybe_relaxed_sub(
 1757|  11.8k|                             child, shift_ - B, child_size, v, args...);
 1758|  18.0k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENS1_19concat_both_visitorISC_EEJRNS1_8leaf_posISC_EERNS1_15regular_sub_posISC_EEEEEDcPT_jmT0_DpOT1_:
 1838|  11.8k|{
 1839|  11.8k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 11.8k, False: 0]
  ------------------
 1840|  11.8k|    auto relaxed = node->relaxed();
 1841|  11.8k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 1.43k, False: 10.4k]
  ------------------
 1842|  1.43k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 1.43k, False: 0]
  ------------------
 1843|  1.43k|        return make_relaxed_pos(node, shift, relaxed)
 1844|  1.43k|            .visit(v, std::forward<Args>(args)...);
 1845|  10.4k|    } else {
 1846|  10.4k|        return make_regular_sub_pos(node, shift, size)
 1847|  10.4k|            .visit(v, std::forward<Args>(args)...);
 1848|  10.4k|    }
 1849|  11.8k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_19concat_both_visitorISC_EEJRNS1_8leaf_posISC_EERNS1_15regular_sub_posISC_EEEEEDcT_DpOT0_:
 1813|  1.43k|    {
 1814|  1.43k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  1.43k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE8last_subINS1_19concat_both_visitorISC_EEJRNS1_8leaf_posISC_EERSD_EEEDcT_DpOT0_:
 1750|  2.03M|    {
 1751|  2.03M|        auto offset     = relaxed_->d.count - 1;
 1752|  2.03M|        auto child      = node_->inner()[offset];
 1753|  2.03M|        auto child_size = size(offset);
 1754|  2.03M|        auto is_leaf    = shift_ == BL;
 1755|  2.03M|        return is_leaf ? make_leaf_sub_pos(child, child_size).visit(v, args...)
  ------------------
  |  Branch (1755:16): [True: 68.3k, False: 1.96M]
  ------------------
 1756|  2.03M|                       : visit_maybe_relaxed_sub(
 1757|  1.96M|                             child, shift_ - B, child_size, v, args...);
 1758|  2.03M|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENS1_19concat_both_visitorISC_EEJRNS1_8leaf_posISC_EERNS1_11relaxed_posISC_EEEEEDcPT_jmT0_DpOT1_:
 1838|  1.96M|{
 1839|  1.96M|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 1.96M, False: 0]
  ------------------
 1840|  1.96M|    auto relaxed = node->relaxed();
 1841|  1.96M|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 1.60M, False: 366k]
  ------------------
 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|   366k|        return make_regular_sub_pos(node, shift, size)
 1847|   366k|            .visit(v, std::forward<Args>(args)...);
 1848|   366k|    }
 1849|  1.96M|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_19concat_both_visitorISC_EEJRNS1_8leaf_posISC_EERSD_EEEDcT_DpOT0_:
 1813|  1.60M|    {
 1814|  1.60M|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  1.60M|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_26concat_trees_right_visitorISC_EEJRNS1_11relaxed_posISC_EERNS1_8leaf_posISC_EEEEEDcT_DpOT0_:
 1036|  16.9k|    {
 1037|  16.9k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  16.9k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_25concat_trees_left_visitorISC_EEJNS1_8leaf_posISC_EERPSC_RjRmEEEDcT_DpOT0_:
 1036|  14.0k|    {
 1037|  14.0k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  14.0k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENS1_26concat_trees_right_visitorISC_EEJRNS1_15regular_sub_posISC_EERNS1_8leaf_posISC_EEEEEDcPT_jmT0_DpOT1_:
 1838|  14.0k|{
 1839|  14.0k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 14.0k, False: 0]
  ------------------
 1840|  14.0k|    auto relaxed = node->relaxed();
 1841|  14.0k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 7.17k, False: 6.91k]
  ------------------
 1842|  7.17k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 7.17k, False: 0]
  ------------------
 1843|  7.17k|        return make_relaxed_pos(node, shift, relaxed)
 1844|  7.17k|            .visit(v, std::forward<Args>(args)...);
 1845|  7.17k|    } else {
 1846|  6.91k|        return make_regular_sub_pos(node, shift, size)
 1847|  6.91k|            .visit(v, std::forward<Args>(args)...);
 1848|  6.91k|    }
 1849|  14.0k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_26concat_trees_right_visitorISC_EEJRNS1_15regular_sub_posISC_EERNS1_8leaf_posISC_EEEEEDcT_DpOT0_:
 1813|  7.17k|    {
 1814|  7.17k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  7.17k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_26concat_trees_right_visitorISC_EEJRSD_RNS1_8leaf_posISC_EEEEEDcT_DpOT0_:
 1036|  6.91k|    {
 1037|  6.91k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  6.91k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_21push_tail_mut_visitorISC_Lb1EEEJRNSA_5applyIS7_E4type4editERPSC_RjEEEDcT_DpOT0_:
 1813|  49.3k|    {
 1814|  49.3k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  49.3k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE11last_oh_cshINS1_21push_tail_mut_visitorISC_Lb1EEEJRNSA_5applyIS7_E4type4editERPSC_RjEEEDcT_jmDpOT0_:
 1737|  43.5k|    {
 1738|  43.5k|        assert(offset_hint == count() - 1);
  ------------------
  |  Branch (1738:9): [True: 43.5k, False: 0]
  ------------------
 1739|  43.5k|        assert(child_size_hint == size(offset_hint));
  ------------------
  |  Branch (1739:9): [True: 43.5k, False: 0]
  ------------------
 1740|  43.5k|        auto child   = node_->inner()[offset_hint];
 1741|  43.5k|        auto is_leaf = shift_ == BL;
 1742|  43.5k|        return is_leaf
  ------------------
  |  Branch (1742:16): [True: 0, False: 43.5k]
  ------------------
 1743|  43.5k|                   ? make_leaf_sub_pos(child, child_size_hint).visit(v, args...)
 1744|  43.5k|                   : visit_maybe_relaxed_sub(
 1745|  43.5k|                         child, shift_ - B, child_size_hint, v, args...);
 1746|  43.5k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENS1_21push_tail_mut_visitorISC_Lb1EEEJRNSA_5applyIS7_E4type4editERPSC_RjEEEDcPT_jmT0_DpOT1_:
 1838|  43.5k|{
 1839|  43.5k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 43.5k, False: 0]
  ------------------
 1840|  43.5k|    auto relaxed = node->relaxed();
 1841|  43.5k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 10.6k, False: 32.8k]
  ------------------
 1842|  10.6k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 10.6k, False: 0]
  ------------------
 1843|  10.6k|        return make_relaxed_pos(node, shift, relaxed)
 1844|  10.6k|            .visit(v, std::forward<Args>(args)...);
 1845|  32.8k|    } else {
 1846|  32.8k|        return make_regular_sub_pos(node, shift, size)
 1847|  32.8k|            .visit(v, std::forward<Args>(args)...);
 1848|  32.8k|    }
 1849|  43.5k|}
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_21push_tail_mut_visitorISC_Lb1EEEJRNSA_5applyIS7_E4type4editERPSC_RjEEEDcT_DpOT0_:
 1036|  32.8k|    {
 1037|  32.8k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  32.8k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE7last_ohINS1_21push_tail_mut_visitorISC_Lb1EEEJRNSA_5applyIS7_E4type4editERPSC_EEEDcT_jDpOT0_:
  952|   165k|    {
  953|   165k|        return last_oh_regular(*this, v, offset_hint, args...);
  954|   165k|    }
_ZN5immer6detail4rbts15last_oh_regularIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_21push_tail_mut_visitorISD_Lb1EEEJRNSB_5applyIS8_E4type4editERPSD_EEEDcOT_T0_jDpOT1_:
  677|   165k|{
  678|   165k|    assert(offset_hint == p.count() - 1);
  ------------------
  |  Branch (678:5): [True: 165k, False: 0]
  ------------------
  679|   165k|    constexpr auto B  = bits<Pos>;
  680|   165k|    constexpr auto BL = bits_leaf<Pos>;
  681|   165k|    auto child        = p.node()->inner()[offset_hint];
  682|   165k|    auto is_leaf      = p.shift() == BL;
  683|   165k|    return is_leaf ? make_leaf_pos(child, p.size()).visit(v, args...)
  ------------------
  |  Branch (683:12): [True: 0, False: 165k]
  ------------------
  684|   165k|                   : make_regular_pos(child, p.shift() - B, p.size())
  685|   165k|                         .visit(v, args...);
  686|   165k|}
_ZN5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_21push_tail_mut_visitorISC_Lb1EEEJRNSA_5applyIS7_E4type4editERPSC_EEEDcT_DpOT0_:
  336|   744k|    {
  337|   744k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
  338|   744k|    }
_ZN5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE7last_ohINS1_21push_tail_mut_visitorISC_Lb1EEEJRNSA_5applyIS7_E4type4editERPSC_EEEDcT_jDpOT0_:
  330|   578k|    {
  331|   578k|        return last_oh_regular(*this, v, offset_hint, args...);
  332|   578k|    }
_ZN5immer6detail4rbts15last_oh_regularIRNS1_11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_21push_tail_mut_visitorISD_Lb1EEEJRNSB_5applyIS8_E4type4editERPSD_EEEDcOT_T0_jDpOT1_:
  677|   578k|{
  678|   578k|    assert(offset_hint == p.count() - 1);
  ------------------
  |  Branch (678:5): [True: 578k, False: 0]
  ------------------
  679|   578k|    constexpr auto B  = bits<Pos>;
  680|   578k|    constexpr auto BL = bits_leaf<Pos>;
  681|   578k|    auto child        = p.node()->inner()[offset_hint];
  682|   578k|    auto is_leaf      = p.shift() == BL;
  683|   578k|    return is_leaf ? make_leaf_pos(child, p.size()).visit(v, args...)
  ------------------
  |  Branch (683:12): [True: 0, False: 578k]
  ------------------
  684|   578k|                   : make_regular_pos(child, p.shift() - B, p.size())
  685|   578k|                         .visit(v, args...);
  686|   578k|}
_ZN5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE7last_ohINS1_21push_tail_mut_visitorISC_Lb0EEEJRNSA_5applyIS7_E4type4editERPSC_EEEDcT_jDpOT0_:
  330|  1.24k|    {
  331|  1.24k|        return last_oh_regular(*this, v, offset_hint, args...);
  332|  1.24k|    }
_ZN5immer6detail4rbts15last_oh_regularIRNS1_11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_21push_tail_mut_visitorISD_Lb0EEEJRNSB_5applyIS8_E4type4editERPSD_EEEDcOT_T0_jDpOT1_:
  677|  1.24k|{
  678|  1.24k|    assert(offset_hint == p.count() - 1);
  ------------------
  |  Branch (678:5): [True: 1.24k, False: 0]
  ------------------
  679|  1.24k|    constexpr auto B  = bits<Pos>;
  680|  1.24k|    constexpr auto BL = bits_leaf<Pos>;
  681|  1.24k|    auto child        = p.node()->inner()[offset_hint];
  682|  1.24k|    auto is_leaf      = p.shift() == BL;
  683|  1.24k|    return is_leaf ? make_leaf_pos(child, p.size()).visit(v, args...)
  ------------------
  |  Branch (683:12): [True: 0, False: 1.24k]
  ------------------
  684|  1.24k|                   : make_regular_pos(child, p.shift() - B, p.size())
  685|  1.24k|                         .visit(v, args...);
  686|  1.24k|}
_ZN5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_21push_tail_mut_visitorISC_Lb0EEEJRNSA_5applyIS7_E4type4editERPSC_EEEDcT_DpOT0_:
  336|  2.67k|    {
  337|  2.67k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
  338|  2.67k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE7last_ohINS1_21push_tail_mut_visitorISC_Lb0EEEJRNSA_5applyIS7_E4type4editERPSC_EEEDcT_jDpOT0_:
  952|  1.42k|    {
  953|  1.42k|        return last_oh_regular(*this, v, offset_hint, args...);
  954|  1.42k|    }
_ZN5immer6detail4rbts15last_oh_regularIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_21push_tail_mut_visitorISD_Lb0EEEJRNSB_5applyIS8_E4type4editERPSD_EEEDcOT_T0_jDpOT1_:
  677|  1.42k|{
  678|  1.42k|    assert(offset_hint == p.count() - 1);
  ------------------
  |  Branch (678:5): [True: 1.42k, False: 0]
  ------------------
  679|  1.42k|    constexpr auto B  = bits<Pos>;
  680|  1.42k|    constexpr auto BL = bits_leaf<Pos>;
  681|  1.42k|    auto child        = p.node()->inner()[offset_hint];
  682|  1.42k|    auto is_leaf      = p.shift() == BL;
  683|  1.42k|    return is_leaf ? make_leaf_pos(child, p.size()).visit(v, args...)
  ------------------
  |  Branch (683:12): [True: 0, False: 1.42k]
  ------------------
  684|  1.42k|                   : make_regular_pos(child, p.shift() - B, p.size())
  685|  1.42k|                         .visit(v, args...);
  686|  1.42k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE11last_oh_cshINS1_21push_tail_mut_visitorISC_Lb0EEEJRNSA_5applyIS7_E4type4editERPSC_RjEEEDcT_jmDpOT0_:
 1737|  8.46k|    {
 1738|  8.46k|        assert(offset_hint == count() - 1);
  ------------------
  |  Branch (1738:9): [True: 8.46k, False: 0]
  ------------------
 1739|  8.46k|        assert(child_size_hint == size(offset_hint));
  ------------------
  |  Branch (1739:9): [True: 8.46k, False: 0]
  ------------------
 1740|  8.46k|        auto child   = node_->inner()[offset_hint];
 1741|  8.46k|        auto is_leaf = shift_ == BL;
 1742|  8.46k|        return is_leaf
  ------------------
  |  Branch (1742:16): [True: 0, False: 8.46k]
  ------------------
 1743|  8.46k|                   ? make_leaf_sub_pos(child, child_size_hint).visit(v, args...)
 1744|  8.46k|                   : visit_maybe_relaxed_sub(
 1745|  8.46k|                         child, shift_ - B, child_size_hint, v, args...);
 1746|  8.46k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENS1_21push_tail_mut_visitorISC_Lb0EEEJRNSA_5applyIS7_E4type4editERPSC_RjEEEDcPT_jmT0_DpOT1_:
 1838|  8.46k|{
 1839|  8.46k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 8.46k, False: 0]
  ------------------
 1840|  8.46k|    auto relaxed = node->relaxed();
 1841|  8.46k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 7.38k, False: 1.08k]
  ------------------
 1842|  7.38k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 7.38k, False: 0]
  ------------------
 1843|  7.38k|        return make_relaxed_pos(node, shift, relaxed)
 1844|  7.38k|            .visit(v, std::forward<Args>(args)...);
 1845|  7.38k|    } else {
 1846|  1.08k|        return make_regular_sub_pos(node, shift, size)
 1847|  1.08k|            .visit(v, std::forward<Args>(args)...);
 1848|  1.08k|    }
 1849|  8.46k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_21push_tail_mut_visitorISC_Lb0EEEJRNSA_5applyIS7_E4type4editERPSC_RjEEEDcT_DpOT0_:
 1813|  7.38k|    {
 1814|  7.38k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  7.38k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_21push_tail_mut_visitorISC_Lb0EEEJRNSA_5applyIS7_E4type4editERPSC_RjEEEDcT_DpOT0_:
 1036|  1.08k|    {
 1037|  1.08k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  1.08k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_21push_tail_mut_visitorISC_Lb1EEEJRNSA_5applyIS7_E4type4editERPSC_EEEDcT_DpOT0_:
 1036|   139k|    {
 1037|   139k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|   139k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENS1_15get_mut_visitorISC_EEJRmRNSA_5applyIS7_E4type4editEPPSC_EEEDcPT_jmT0_DpOT1_:
 1838|  42.5k|{
 1839|  42.5k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 42.5k, False: 0]
  ------------------
 1840|  42.5k|    auto relaxed = node->relaxed();
 1841|  42.5k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 39.7k, False: 2.83k]
  ------------------
 1842|  39.7k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 39.7k, False: 0]
  ------------------
 1843|  39.7k|        return make_relaxed_pos(node, shift, relaxed)
 1844|  39.7k|            .visit(v, std::forward<Args>(args)...);
 1845|  39.7k|    } else {
 1846|  2.83k|        return make_regular_sub_pos(node, shift, size)
 1847|  2.83k|            .visit(v, std::forward<Args>(args)...);
 1848|  2.83k|    }
 1849|  42.5k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_15get_mut_visitorISC_EEJRmRNSA_5applyIS7_E4type4editEPPSC_EEEDcT_DpOT0_:
 1813|  39.7k|    {
 1814|  39.7k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  39.7k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10towards_ohINS1_15get_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editEPPSC_EEEDcT_mjDpOT0_:
 1686|   122k|    {
 1687|   122k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1687:9): [True: 122k, False: 0]
  ------------------
 1688|   122k|        auto left_size = offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0;
  ------------------
  |  Branch (1688:26): [True: 39.0k, False: 83.5k]
  ------------------
 1689|   122k|        return towards_oh_sbh(v, idx, offset_hint, left_size, args...);
 1690|   122k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE14towards_oh_sbhINS1_15get_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editERPPSC_EEEDcT_mjmDpOT0_:
 1698|   122k|    {
 1699|   122k|        return towards_sub_oh_sbh(v, idx, offset_hint, left_size_hint, args...);
 1700|   122k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE18towards_sub_oh_sbhINS1_15get_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editERPPSC_EEEDcT_mjmDpOT0_:
 1717|   122k|    {
 1718|   122k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1718:9): [True: 122k, False: 0]
  ------------------
 1719|   122k|        assert(left_size_hint ==
  ------------------
  |  Branch (1719:9): [True: 39.0k, False: 83.5k]
  |  Branch (1719:9): [True: 122k, False: 0]
  ------------------
 1720|   122k|               (offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0));
 1721|   122k|        auto child     = node_->inner()[offset_hint];
 1722|   122k|        auto is_leaf   = shift_ == BL;
 1723|   122k|        auto next_size = relaxed_->d.sizes[offset_hint] - left_size_hint;
 1724|   122k|        auto next_idx  = idx - left_size_hint;
 1725|   122k|        return is_leaf
  ------------------
  |  Branch (1725:16): [True: 35.6k, False: 86.9k]
  ------------------
 1726|   122k|                   ? make_leaf_sub_pos(child, next_size)
 1727|  35.6k|                         .visit(v, next_idx, args...)
 1728|   122k|                   : visit_maybe_relaxed_sub(
 1729|  86.9k|                         child, shift_ - B, next_size, v, next_idx, args...);
 1730|   122k|    }
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_15get_mut_visitorISC_EEJRmRNSA_5applyIS7_E4type4editERPPSC_EEEDcT_DpOT0_:
  144|  35.6k|    {
  145|  35.6k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  146|  35.6k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENS1_15get_mut_visitorISC_EEJRmRNSA_5applyIS7_E4type4editERPPSC_EEEDcPT_jmT0_DpOT1_:
 1838|  86.9k|{
 1839|  86.9k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 86.9k, False: 0]
  ------------------
 1840|  86.9k|    auto relaxed = node->relaxed();
 1841|  86.9k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 82.8k, False: 4.12k]
  ------------------
 1842|  82.8k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 82.8k, False: 0]
  ------------------
 1843|  82.8k|        return make_relaxed_pos(node, shift, relaxed)
 1844|  82.8k|            .visit(v, std::forward<Args>(args)...);
 1845|  82.8k|    } else {
 1846|  4.12k|        return make_regular_sub_pos(node, shift, size)
 1847|  4.12k|            .visit(v, std::forward<Args>(args)...);
 1848|  4.12k|    }
 1849|  86.9k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_15get_mut_visitorISC_EEJRmRNSA_5applyIS7_E4type4editERPPSC_EEEDcT_DpOT0_:
 1813|  82.8k|    {
 1814|  82.8k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  82.8k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_15get_mut_visitorISC_EEJRmRNSA_5applyIS7_E4type4editERPPSC_EEEDcT_DpOT0_:
 1036|  4.12k|    {
 1037|  4.12k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  4.12k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE13towards_oh_chINS1_15get_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editEPPSC_EEEDcT_mjjDpOT0_:
  938|  6.95k|    {
  939|  6.95k|        return towards_oh_ch_regular(
  940|  6.95k|            *this, v, idx, offset_hint, count(), args...);
  941|  6.95k|    }
_ZN5immer6detail4rbts21towards_oh_ch_regularIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_15get_mut_visitorISD_EEJRNSB_5applyIS8_E4type4editERPPSD_EEEDcOT_T0_mjjDpOT1_:
  632|  6.95k|{
  633|  6.95k|    constexpr auto B  = bits<Pos>;
  634|  6.95k|    constexpr auto BL = bits_leaf<Pos>;
  635|  6.95k|    assert(offset_hint == p.index(idx));
  ------------------
  |  Branch (635:5): [True: 6.95k, False: 0]
  ------------------
  636|  6.95k|    assert(count_hint == p.count());
  ------------------
  |  Branch (636:5): [True: 6.95k, False: 0]
  ------------------
  637|  6.95k|    auto is_leaf = p.shift() == BL;
  638|  6.95k|    auto child   = p.node()->inner()[offset_hint];
  639|  6.95k|    auto is_full = offset_hint + 1 != count_hint;
  640|  6.95k|    return is_full
  ------------------
  |  Branch (640:12): [True: 4.31k, False: 2.64k]
  ------------------
  641|  6.95k|               ? (is_leaf ? make_full_leaf_pos(child).visit(v, idx, args...)
  ------------------
  |  Branch (641:19): [True: 825, False: 3.48k]
  ------------------
  642|  4.31k|                          : make_full_pos(child, p.shift() - B)
  643|  3.48k|                                .visit(v, idx, args...))
  644|  6.95k|               : (is_leaf
  ------------------
  |  Branch (644:19): [True: 563, False: 2.07k]
  ------------------
  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|  2.07k|                            .visit(v, idx, args...));
  648|  6.95k|}
_ZN5immer6detail4rbts13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_15get_mut_visitorISC_EEJRmRNSA_5applyIS7_E4type4editERPPSC_EEEDcT_DpOT0_:
  207|  5.75k|    {
  208|  5.75k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  209|  5.75k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_15get_mut_visitorISC_EEJRmRNSA_5applyIS7_E4type4editERPPSC_EEEDcT_DpOT0_:
 1405|  4.79k|    {
 1406|  4.79k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1407|  4.79k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE13towards_oh_chINS1_15get_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editEPPSC_EEEDcT_mjjDpOT0_:
 1329|  4.79k|    {
 1330|  4.79k|        return towards_oh(v, idx, offset_hint, args...);
 1331|  4.79k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10towards_ohINS1_15get_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editERPPSC_EEEDcT_mjDpOT0_:
 1336|  4.79k|    {
 1337|  4.79k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1337:9): [True: 4.79k, False: 0]
  ------------------
 1338|  4.79k|        auto is_leaf = shift_ == BL;
 1339|  4.79k|        auto child   = node_->inner()[offset_hint];
 1340|  4.79k|        return is_leaf
  ------------------
  |  Branch (1340:16): [True: 3.87k, False: 924]
  ------------------
 1341|  4.79k|                   ? make_full_leaf_pos(child).visit(v, idx, args...)
 1342|  4.79k|                   : make_full_pos(child, shift_ - B).visit(v, idx, args...);
 1343|  4.79k|    }
_ZN5immer6detail4rbts8leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_15get_mut_visitorISC_EEJRmRNSA_5applyIS7_E4type4editERPPSC_EEEDcT_DpOT0_:
  112|  1.19k|    {
  113|  1.19k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  114|  1.19k|    }
_ZN5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_15get_mut_visitorISC_EEJRmRNSA_5applyIS7_E4type4editERPPSC_EEEDcT_DpOT0_:
  336|  3.19k|    {
  337|  3.19k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
  338|  3.19k|    }
_ZN5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE13towards_oh_chINS1_15get_mut_visitorISC_EEJRNSA_5applyIS7_E4type4editEPPSC_EEEDcT_mjjDpOT0_:
  316|  3.19k|    {
  317|  3.19k|        return towards_oh_ch_regular(
  318|  3.19k|            *this, v, idx, offset_hint, count(), args...);
  319|  3.19k|    }
_ZN5immer6detail4rbts21towards_oh_ch_regularIRNS1_11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_15get_mut_visitorISD_EEJRNSB_5applyIS8_E4type4editERPPSD_EEEDcOT_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: 1.44k, False: 1.75k]
  ------------------
  641|  3.19k|               ? (is_leaf ? make_full_leaf_pos(child).visit(v, idx, args...)
  ------------------
  |  Branch (641:19): [True: 1.05k, False: 387]
  ------------------
  642|  1.44k|                          : make_full_pos(child, p.shift() - B)
  643|    387|                                .visit(v, idx, args...))
  644|  3.19k|               : (is_leaf
  ------------------
  |  Branch (644:19): [True: 634, False: 1.11k]
  ------------------
  645|  1.75k|                      ? make_leaf_pos(child, p.size()).visit(v, idx, args...)
  646|  1.75k|                      : make_regular_pos(child, p.shift() - B, p.size())
  647|  1.11k|                            .visit(v, idx, args...));
  648|  3.19k|}
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_15get_mut_visitorISC_EEJRmRNSA_5applyIS7_E4type4editEPPSC_EEEDcT_DpOT0_:
 1036|  2.83k|    {
 1037|  2.83k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  2.83k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENS1_23slice_right_mut_visitorISC_Lb1ELb1EEEJRmRNSA_5applyIS7_E4type4editEEEEDcPT_jmT0_DpOT1_:
 1838|  77.2k|{
 1839|  77.2k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 77.2k, False: 0]
  ------------------
 1840|  77.2k|    auto relaxed = node->relaxed();
 1841|  77.2k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 64.7k, False: 12.4k]
  ------------------
 1842|  64.7k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 64.7k, False: 0]
  ------------------
 1843|  64.7k|        return make_relaxed_pos(node, shift, relaxed)
 1844|  64.7k|            .visit(v, std::forward<Args>(args)...);
 1845|  64.7k|    } else {
 1846|  12.4k|        return make_regular_sub_pos(node, shift, size)
 1847|  12.4k|            .visit(v, std::forward<Args>(args)...);
 1848|  12.4k|    }
 1849|  77.2k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_23slice_right_mut_visitorISC_Lb1ELb1EEEJRmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
 1813|  64.7k|    {
 1814|  64.7k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  64.7k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10towards_ohINS1_23slice_right_mut_visitorISC_Lb1ELb1EEEJRNSA_5applyIS7_E4type4editEEEEDcT_mjDpOT0_:
 1686|  39.9k|    {
 1687|  39.9k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1687:9): [True: 39.9k, False: 0]
  ------------------
 1688|  39.9k|        auto left_size = offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0;
  ------------------
  |  Branch (1688:26): [True: 0, False: 39.9k]
  ------------------
 1689|  39.9k|        return towards_oh_sbh(v, idx, offset_hint, left_size, args...);
 1690|  39.9k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE14towards_oh_sbhINS1_23slice_right_mut_visitorISC_Lb1ELb1EEEJRNSA_5applyIS7_E4type4editEEEEDcT_mjmDpOT0_:
 1698|  39.9k|    {
 1699|  39.9k|        return towards_sub_oh_sbh(v, idx, offset_hint, left_size_hint, args...);
 1700|  39.9k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE18towards_sub_oh_sbhINS1_23slice_right_mut_visitorISC_Lb1ELb1EEEJRNSA_5applyIS7_E4type4editEEEEDcT_mjmDpOT0_:
 1717|  39.9k|    {
 1718|  39.9k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1718:9): [True: 39.9k, False: 0]
  ------------------
 1719|  39.9k|        assert(left_size_hint ==
  ------------------
  |  Branch (1719:9): [True: 0, False: 39.9k]
  |  Branch (1719:9): [True: 39.9k, False: 0]
  ------------------
 1720|  39.9k|               (offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0));
 1721|  39.9k|        auto child     = node_->inner()[offset_hint];
 1722|  39.9k|        auto is_leaf   = shift_ == BL;
 1723|  39.9k|        auto next_size = relaxed_->d.sizes[offset_hint] - left_size_hint;
 1724|  39.9k|        auto next_idx  = idx - left_size_hint;
 1725|  39.9k|        return is_leaf
  ------------------
  |  Branch (1725:16): [True: 1.12k, False: 38.8k]
  ------------------
 1726|  39.9k|                   ? make_leaf_sub_pos(child, next_size)
 1727|  1.12k|                         .visit(v, next_idx, args...)
 1728|  39.9k|                   : visit_maybe_relaxed_sub(
 1729|  38.8k|                         child, shift_ - B, next_size, v, next_idx, args...);
 1730|  39.9k|    }
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_23slice_right_mut_visitorISC_Lb1ELb1EEEJRmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
  144|  1.12k|    {
  145|  1.12k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  146|  1.12k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10towards_ohINS1_23slice_right_mut_visitorISC_Lb1ELb0EEEJRNSA_5applyIS7_E4type4editEEEEDcT_mjDpOT0_:
 1686|  22.2k|    {
 1687|  22.2k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1687:9): [True: 22.2k, False: 0]
  ------------------
 1688|  22.2k|        auto left_size = offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0;
  ------------------
  |  Branch (1688:26): [True: 0, False: 22.2k]
  ------------------
 1689|  22.2k|        return towards_oh_sbh(v, idx, offset_hint, left_size, args...);
 1690|  22.2k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE14towards_oh_sbhINS1_23slice_right_mut_visitorISC_Lb1ELb0EEEJRNSA_5applyIS7_E4type4editEEEEDcT_mjmDpOT0_:
 1698|  22.2k|    {
 1699|  22.2k|        return towards_sub_oh_sbh(v, idx, offset_hint, left_size_hint, args...);
 1700|  22.2k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE18towards_sub_oh_sbhINS1_23slice_right_mut_visitorISC_Lb1ELb0EEEJRNSA_5applyIS7_E4type4editEEEEDcT_mjmDpOT0_:
 1717|  22.2k|    {
 1718|  22.2k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1718:9): [True: 22.2k, False: 0]
  ------------------
 1719|  22.2k|        assert(left_size_hint ==
  ------------------
  |  Branch (1719:9): [True: 0, False: 22.2k]
  |  Branch (1719:9): [True: 22.2k, False: 0]
  ------------------
 1720|  22.2k|               (offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0));
 1721|  22.2k|        auto child     = node_->inner()[offset_hint];
 1722|  22.2k|        auto is_leaf   = shift_ == BL;
 1723|  22.2k|        auto next_size = relaxed_->d.sizes[offset_hint] - left_size_hint;
 1724|  22.2k|        auto next_idx  = idx - left_size_hint;
 1725|  22.2k|        return is_leaf
  ------------------
  |  Branch (1725:16): [True: 930, False: 21.3k]
  ------------------
 1726|  22.2k|                   ? make_leaf_sub_pos(child, next_size)
 1727|    930|                         .visit(v, next_idx, args...)
 1728|  22.2k|                   : visit_maybe_relaxed_sub(
 1729|  21.3k|                         child, shift_ - B, next_size, v, next_idx, args...);
 1730|  22.2k|    }
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_23slice_right_mut_visitorISC_Lb1ELb0EEEJRmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
  144|    930|    {
  145|    930|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  146|    930|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENS1_23slice_right_mut_visitorISC_Lb1ELb0EEEJRmRNSA_5applyIS7_E4type4editEEEEDcPT_jmT0_DpOT1_:
 1838|  21.3k|{
 1839|  21.3k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 21.3k, False: 0]
  ------------------
 1840|  21.3k|    auto relaxed = node->relaxed();
 1841|  21.3k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 19.4k, False: 1.86k]
  ------------------
 1842|  19.4k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 19.4k, False: 0]
  ------------------
 1843|  19.4k|        return make_relaxed_pos(node, shift, relaxed)
 1844|  19.4k|            .visit(v, std::forward<Args>(args)...);
 1845|  19.4k|    } else {
 1846|  1.86k|        return make_regular_sub_pos(node, shift, size)
 1847|  1.86k|            .visit(v, std::forward<Args>(args)...);
 1848|  1.86k|    }
 1849|  21.3k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_23slice_right_mut_visitorISC_Lb1ELb0EEEJRmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
 1813|  19.4k|    {
 1814|  19.4k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  19.4k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_23slice_right_mut_visitorISC_Lb1ELb0EEEJRmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
 1036|  1.86k|    {
 1037|  1.86k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  1.86k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10towards_ohINS1_23slice_right_mut_visitorISC_Lb1ELb0EEEJRNSA_5applyIS7_E4type4editEEEEDcT_mjDpOT0_:
  927|  2.86k|    {
  928|  2.86k|        return towards_oh_ch_regular(
  929|  2.86k|            *this, v, idx, offset_hint, count(), args...);
  930|  2.86k|    }
_ZN5immer6detail4rbts21towards_oh_ch_regularIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_23slice_right_mut_visitorISD_Lb1ELb0EEEJRNSB_5applyIS8_E4type4editEEEEDcOT_T0_mjjDpOT1_:
  632|  2.86k|{
  633|  2.86k|    constexpr auto B  = bits<Pos>;
  634|  2.86k|    constexpr auto BL = bits_leaf<Pos>;
  635|  2.86k|    assert(offset_hint == p.index(idx));
  ------------------
  |  Branch (635:5): [True: 2.86k, False: 0]
  ------------------
  636|  2.86k|    assert(count_hint == p.count());
  ------------------
  |  Branch (636:5): [True: 2.86k, False: 0]
  ------------------
  637|  2.86k|    auto is_leaf = p.shift() == BL;
  638|  2.86k|    auto child   = p.node()->inner()[offset_hint];
  639|  2.86k|    auto is_full = offset_hint + 1 != count_hint;
  640|  2.86k|    return is_full
  ------------------
  |  Branch (640:12): [True: 2.45k, False: 417]
  ------------------
  641|  2.86k|               ? (is_leaf ? make_full_leaf_pos(child).visit(v, idx, args...)
  ------------------
  |  Branch (641:19): [True: 743, False: 1.70k]
  ------------------
  642|  2.45k|                          : make_full_pos(child, p.shift() - B)
  643|  1.70k|                                .visit(v, idx, args...))
  644|  2.86k|               : (is_leaf
  ------------------
  |  Branch (644:19): [True: 417, False: 0]
  ------------------
  645|    417|                      ? make_leaf_pos(child, p.size()).visit(v, idx, args...)
  646|    417|                      : make_regular_pos(child, p.shift() - B, p.size())
  647|      0|                            .visit(v, idx, args...));
  648|  2.86k|}
_ZN5immer6detail4rbts13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_23slice_right_mut_visitorISC_Lb1ELb0EEEJRmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
  207|  1.59k|    {
  208|  1.59k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  209|  1.59k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_23slice_right_mut_visitorISC_Lb1ELb0EEEJRmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
 1405|  2.20k|    {
 1406|  2.20k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1407|  2.20k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10towards_ohINS1_23slice_right_mut_visitorISC_Lb1ELb0EEEJRNSA_5applyIS7_E4type4editEEEEDcT_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: 853, False: 495]
  ------------------
 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|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10towards_ohINS1_23slice_right_mut_visitorISC_Lb0ELb1EEEJRNSA_5applyIS7_E4type4editEEEEDcT_mjDpOT0_:
 1336|  3.20k|    {
 1337|  3.20k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1337:9): [True: 3.20k, False: 0]
  ------------------
 1338|  3.20k|        auto is_leaf = shift_ == BL;
 1339|  3.20k|        auto child   = node_->inner()[offset_hint];
 1340|  3.20k|        return is_leaf
  ------------------
  |  Branch (1340:16): [True: 1.90k, False: 1.30k]
  ------------------
 1341|  3.20k|                   ? make_full_leaf_pos(child).visit(v, idx, args...)
 1342|  3.20k|                   : make_full_pos(child, shift_ - B).visit(v, idx, args...);
 1343|  3.20k|    }
_ZN5immer6detail4rbts13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_23slice_right_mut_visitorISC_Lb0ELb1EEEJRmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
  207|  5.67k|    {
  208|  5.67k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  209|  5.67k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_23slice_right_mut_visitorISC_Lb0ELb1EEEJRmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
 1405|  4.49k|    {
 1406|  4.49k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1407|  4.49k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_17dec_right_visitorEJjEEEDcT_DpOT0_:
 1405|  3.36k|    {
 1406|  3.36k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1407|  3.36k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10towards_ohINS1_23slice_right_mut_visitorISC_Lb0ELb0EEEJRNSA_5applyIS7_E4type4editEEEEDcT_mjDpOT0_:
 1336|  8.34k|    {
 1337|  8.34k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1337:9): [True: 8.34k, False: 0]
  ------------------
 1338|  8.34k|        auto is_leaf = shift_ == BL;
 1339|  8.34k|        auto child   = node_->inner()[offset_hint];
 1340|  8.34k|        return is_leaf
  ------------------
  |  Branch (1340:16): [True: 6.80k, False: 1.53k]
  ------------------
 1341|  8.34k|                   ? make_full_leaf_pos(child).visit(v, idx, args...)
 1342|  8.34k|                   : make_full_pos(child, shift_ - B).visit(v, idx, args...);
 1343|  8.34k|    }
_ZN5immer6detail4rbts13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_23slice_right_mut_visitorISC_Lb0ELb0EEEJRmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
  207|  10.3k|    {
  208|  10.3k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  209|  10.3k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_23slice_right_mut_visitorISC_Lb0ELb0EEEJRmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
 1405|  3.27k|    {
 1406|  3.27k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1407|  3.27k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10each_rightINS1_11dec_visitorEJEEEvT_jDpOT0_:
 1310|  4.21k|    {
 1311|  4.21k|        each_i(v, start, branches<B>, args...);
 1312|  4.21k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE6each_iINS1_11dec_visitorEJEEEvT_jjDpOT0_:
 1263|  6.68k|    {
 1264|  6.68k|        auto p = node_->inner() + i;
 1265|  6.68k|        auto e = node_->inner() + n;
 1266|  6.68k|        if (shift_ == BL) {
  ------------------
  |  Branch (1266:13): [True: 3.74k, False: 2.94k]
  ------------------
 1267|  11.2k|            for (; p != e; ++p) {
  ------------------
  |  Branch (1267:20): [True: 7.52k, False: 3.74k]
  ------------------
 1268|  7.52k|                IMMER_PREFETCH(p + 1);
 1269|  7.52k|                make_full_leaf_pos(*p).visit(v, args...);
 1270|  7.52k|            }
 1271|  3.74k|        } else {
 1272|  2.94k|            auto ss = shift_ - B;
 1273|  8.74k|            for (; p != e; ++p)
  ------------------
  |  Branch (1273:20): [True: 5.79k, False: 2.94k]
  ------------------
 1274|  5.79k|                make_full_pos(*p, ss).visit(v, args...);
 1275|  2.94k|        }
 1276|  6.68k|    }
_ZN5immer6detail4rbts8leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_23slice_right_mut_visitorISC_Lb1ELb0EEEJRmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
  112|    417|    {
  113|    417|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  114|    417|    }
_ZN5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10towards_ohINS1_23slice_right_mut_visitorISC_Lb0ELb1EEEJRNSA_5applyIS7_E4type4editEEEEDcT_mjDpOT0_:
  305|  5.32k|    {
  306|  5.32k|        return towards_oh_ch_regular(
  307|  5.32k|            *this, v, idx, offset_hint, count(), args...);
  308|  5.32k|    }
_ZN5immer6detail4rbts21towards_oh_ch_regularIRNS1_11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_23slice_right_mut_visitorISD_Lb0ELb1EEEJRNSB_5applyIS8_E4type4editEEEEDcOT_T0_mjjDpOT1_:
  632|  5.32k|{
  633|  5.32k|    constexpr auto B  = bits<Pos>;
  634|  5.32k|    constexpr auto BL = bits_leaf<Pos>;
  635|  5.32k|    assert(offset_hint == p.index(idx));
  ------------------
  |  Branch (635:5): [True: 5.32k, False: 0]
  ------------------
  636|  5.32k|    assert(count_hint == p.count());
  ------------------
  |  Branch (636:5): [True: 5.32k, False: 0]
  ------------------
  637|  5.32k|    auto is_leaf = p.shift() == BL;
  638|  5.32k|    auto child   = p.node()->inner()[offset_hint];
  639|  5.32k|    auto is_full = offset_hint + 1 != count_hint;
  640|  5.32k|    return is_full
  ------------------
  |  Branch (640:12): [True: 2.66k, False: 2.66k]
  ------------------
  641|  5.32k|               ? (is_leaf ? make_full_leaf_pos(child).visit(v, idx, args...)
  ------------------
  |  Branch (641:19): [True: 1.46k, False: 1.19k]
  ------------------
  642|  2.66k|                          : make_full_pos(child, p.shift() - B)
  643|  1.19k|                                .visit(v, idx, args...))
  644|  5.32k|               : (is_leaf
  ------------------
  |  Branch (644:19): [True: 1.26k, False: 1.39k]
  ------------------
  645|  2.66k|                      ? make_leaf_pos(child, p.size()).visit(v, idx, args...)
  646|  2.66k|                      : make_regular_pos(child, p.shift() - B, p.size())
  647|  1.39k|                            .visit(v, idx, args...));
  648|  5.32k|}
_ZN5immer6detail4rbts8leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_23slice_right_mut_visitorISC_Lb0ELb1EEEJRmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
  112|  2.52k|    {
  113|  2.52k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  114|  2.52k|    }
_ZN5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_23slice_right_mut_visitorISC_Lb0ELb1EEEJRmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
  336|  5.95k|    {
  337|  5.95k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
  338|  5.95k|    }
_ZN5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_17dec_right_visitorEJjEEEDcT_DpOT0_:
  336|  3.57k|    {
  337|  3.57k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
  338|  3.57k|    }
_ZN5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10towards_ohINS1_23slice_right_mut_visitorISC_Lb0ELb0EEEJRNSA_5applyIS7_E4type4editEEEEDcT_mjDpOT0_:
  305|  3.93k|    {
  306|  3.93k|        return towards_oh_ch_regular(
  307|  3.93k|            *this, v, idx, offset_hint, count(), args...);
  308|  3.93k|    }
_ZN5immer6detail4rbts21towards_oh_ch_regularIRNS1_11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_23slice_right_mut_visitorISD_Lb0ELb0EEEJRNSB_5applyIS8_E4type4editEEEEDcOT_T0_mjjDpOT1_:
  632|  3.93k|{
  633|  3.93k|    constexpr auto B  = bits<Pos>;
  634|  3.93k|    constexpr auto BL = bits_leaf<Pos>;
  635|  3.93k|    assert(offset_hint == p.index(idx));
  ------------------
  |  Branch (635:5): [True: 3.93k, False: 0]
  ------------------
  636|  3.93k|    assert(count_hint == p.count());
  ------------------
  |  Branch (636:5): [True: 3.93k, False: 0]
  ------------------
  637|  3.93k|    auto is_leaf = p.shift() == BL;
  638|  3.93k|    auto child   = p.node()->inner()[offset_hint];
  639|  3.93k|    auto is_full = offset_hint + 1 != count_hint;
  640|  3.93k|    return is_full
  ------------------
  |  Branch (640:12): [True: 1.09k, False: 2.84k]
  ------------------
  641|  3.93k|               ? (is_leaf ? make_full_leaf_pos(child).visit(v, idx, args...)
  ------------------
  |  Branch (641:19): [True: 778, False: 317]
  ------------------
  642|  1.09k|                          : make_full_pos(child, p.shift() - B)
  643|    317|                                .visit(v, idx, args...))
  644|  3.93k|               : (is_leaf
  ------------------
  |  Branch (644:19): [True: 1.83k, False: 1.00k]
  ------------------
  645|  2.84k|                      ? make_leaf_pos(child, p.size()).visit(v, idx, args...)
  646|  2.84k|                      : make_regular_pos(child, p.shift() - B, p.size())
  647|  1.00k|                            .visit(v, idx, args...));
  648|  3.93k|}
_ZN5immer6detail4rbts8leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_23slice_right_mut_visitorISC_Lb0ELb0EEEJRmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
  112|  2.51k|    {
  113|  2.51k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  114|  2.51k|    }
_ZN5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_23slice_right_mut_visitorISC_Lb0ELb0EEEJRmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
  336|  3.31k|    {
  337|  3.31k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
  338|  3.31k|    }
_ZN5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10each_rightINS1_11dec_visitorEJEEEvT_jDpOT0_:
  285|  5.32k|    {
  286|  5.32k|        return each_right_regular(*this, v, start, args...);
  287|  5.32k|    }
_ZN5immer6detail4rbts18each_right_regularIRNS1_11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_11dec_visitorEJEEEvOT_T0_jDpOT1_:
  597|  5.32k|{
  598|  5.32k|    constexpr auto B  = bits<Pos>;
  599|  5.32k|    constexpr auto BL = bits_leaf<Pos>;
  600|       |
  601|  5.32k|    if (p.shift() == BL) {
  ------------------
  |  Branch (601:9): [True: 2.73k, False: 2.59k]
  ------------------
  602|  2.73k|        auto n    = p.node()->inner() + start;
  603|  2.73k|        auto last = p.count() - 1;
  604|  2.73k|        auto e    = p.node()->inner() + last;
  605|  2.73k|        if (n <= e) {
  ------------------
  |  Branch (605:13): [True: 1.46k, False: 1.26k]
  ------------------
  606|  2.60k|            for (; n != e; ++n) {
  ------------------
  |  Branch (606:20): [True: 1.14k, False: 1.46k]
  ------------------
  607|  1.14k|                IMMER_PREFETCH(n + 1);
  608|  1.14k|                make_full_leaf_pos(*n).visit(v, args...);
  609|  1.14k|            }
  610|  1.46k|            make_leaf_pos(*n, p.size()).visit(v, args...);
  611|  1.46k|        }
  612|  2.73k|    } else {
  613|  2.59k|        auto n    = p.node()->inner() + start;
  614|  2.59k|        auto last = p.count() - 1;
  615|  2.59k|        auto e    = p.node()->inner() + last;
  616|  2.59k|        auto ss   = p.shift() - B;
  617|  2.59k|        if (n <= e) {
  ------------------
  |  Branch (617:13): [True: 1.19k, False: 1.39k]
  ------------------
  618|  2.48k|            for (; n != e; ++n)
  ------------------
  |  Branch (618:20): [True: 1.29k, False: 1.19k]
  ------------------
  619|  1.29k|                make_full_pos(*n, ss).visit(v, args...);
  620|  1.19k|            make_regular_pos(*n, ss, p.size()).visit(v, args...);
  621|  1.19k|        }
  622|  2.59k|    }
  623|  5.32k|}
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10towards_ohINS1_23slice_right_mut_visitorISC_Lb0ELb1EEEJRNSA_5applyIS7_E4type4editEEEEDcT_mjDpOT0_:
  927|  10.1k|    {
  928|  10.1k|        return towards_oh_ch_regular(
  929|  10.1k|            *this, v, idx, offset_hint, count(), args...);
  930|  10.1k|    }
_ZN5immer6detail4rbts21towards_oh_ch_regularIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_23slice_right_mut_visitorISD_Lb0ELb1EEEJRNSB_5applyIS8_E4type4editEEEEDcOT_T0_mjjDpOT1_:
  632|  10.1k|{
  633|  10.1k|    constexpr auto B  = bits<Pos>;
  634|  10.1k|    constexpr auto BL = bits_leaf<Pos>;
  635|  10.1k|    assert(offset_hint == p.index(idx));
  ------------------
  |  Branch (635:5): [True: 10.1k, False: 0]
  ------------------
  636|  10.1k|    assert(count_hint == p.count());
  ------------------
  |  Branch (636:5): [True: 10.1k, False: 0]
  ------------------
  637|  10.1k|    auto is_leaf = p.shift() == BL;
  638|  10.1k|    auto child   = p.node()->inner()[offset_hint];
  639|  10.1k|    auto is_full = offset_hint + 1 != count_hint;
  640|  10.1k|    return is_full
  ------------------
  |  Branch (640:12): [True: 4.29k, False: 5.81k]
  ------------------
  641|  10.1k|               ? (is_leaf ? make_full_leaf_pos(child).visit(v, idx, args...)
  ------------------
  |  Branch (641:19): [True: 2.30k, False: 1.99k]
  ------------------
  642|  4.29k|                          : make_full_pos(child, p.shift() - B)
  643|  1.99k|                                .visit(v, idx, args...))
  644|  10.1k|               : (is_leaf
  ------------------
  |  Branch (644:19): [True: 1.25k, False: 4.55k]
  ------------------
  645|  5.81k|                      ? make_leaf_pos(child, p.size()).visit(v, idx, args...)
  646|  5.81k|                      : make_regular_pos(child, p.shift() - B, p.size())
  647|  4.55k|                            .visit(v, idx, args...));
  648|  10.1k|}
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10towards_ohINS1_23slice_right_mut_visitorISC_Lb0ELb0EEEJRNSA_5applyIS7_E4type4editEEEEDcT_mjDpOT0_:
  927|  7.20k|    {
  928|  7.20k|        return towards_oh_ch_regular(
  929|  7.20k|            *this, v, idx, offset_hint, count(), args...);
  930|  7.20k|    }
_ZN5immer6detail4rbts21towards_oh_ch_regularIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_23slice_right_mut_visitorISD_Lb0ELb0EEEJRNSB_5applyIS8_E4type4editEEEEDcOT_T0_mjjDpOT1_:
  632|  7.20k|{
  633|  7.20k|    constexpr auto B  = bits<Pos>;
  634|  7.20k|    constexpr auto BL = bits_leaf<Pos>;
  635|  7.20k|    assert(offset_hint == p.index(idx));
  ------------------
  |  Branch (635:5): [True: 7.20k, False: 0]
  ------------------
  636|  7.20k|    assert(count_hint == p.count());
  ------------------
  |  Branch (636:5): [True: 7.20k, False: 0]
  ------------------
  637|  7.20k|    auto is_leaf = p.shift() == BL;
  638|  7.20k|    auto child   = p.node()->inner()[offset_hint];
  639|  7.20k|    auto is_full = offset_hint + 1 != count_hint;
  640|  7.20k|    return is_full
  ------------------
  |  Branch (640:12): [True: 4.22k, False: 2.98k]
  ------------------
  641|  7.20k|               ? (is_leaf ? make_full_leaf_pos(child).visit(v, idx, args...)
  ------------------
  |  Branch (641:19): [True: 2.80k, False: 1.42k]
  ------------------
  642|  4.22k|                          : make_full_pos(child, p.shift() - B)
  643|  1.42k|                                .visit(v, idx, args...))
  644|  7.20k|               : (is_leaf
  ------------------
  |  Branch (644:19): [True: 674, False: 2.31k]
  ------------------
  645|  2.98k|                      ? make_leaf_pos(child, p.size()).visit(v, idx, args...)
  646|  2.98k|                      : make_regular_pos(child, p.shift() - B, p.size())
  647|  2.31k|                            .visit(v, idx, args...));
  648|  7.20k|}
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10each_rightINS1_11dec_visitorEJEEEvT_jDpOT0_:
  867|  15.1k|    {
  868|  15.1k|        return each_right_regular(*this, v, start, args...);
  869|  15.1k|    }
_ZN5immer6detail4rbts18each_right_regularIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_11dec_visitorEJEEEvOT_T0_jDpOT1_:
  597|  15.1k|{
  598|  15.1k|    constexpr auto B  = bits<Pos>;
  599|  15.1k|    constexpr auto BL = bits_leaf<Pos>;
  600|       |
  601|  15.1k|    if (p.shift() == BL) {
  ------------------
  |  Branch (601:9): [True: 5.13k, False: 10.0k]
  ------------------
  602|  5.13k|        auto n    = p.node()->inner() + start;
  603|  5.13k|        auto last = p.count() - 1;
  604|  5.13k|        auto e    = p.node()->inner() + last;
  605|  5.13k|        if (n <= e) {
  ------------------
  |  Branch (605:13): [True: 3.16k, False: 1.97k]
  ------------------
  606|  5.94k|            for (; n != e; ++n) {
  ------------------
  |  Branch (606:20): [True: 2.78k, False: 3.16k]
  ------------------
  607|  2.78k|                IMMER_PREFETCH(n + 1);
  608|  2.78k|                make_full_leaf_pos(*n).visit(v, args...);
  609|  2.78k|            }
  610|  3.16k|            make_leaf_pos(*n, p.size()).visit(v, args...);
  611|  3.16k|        }
  612|  10.0k|    } else {
  613|  10.0k|        auto n    = p.node()->inner() + start;
  614|  10.0k|        auto last = p.count() - 1;
  615|  10.0k|        auto e    = p.node()->inner() + last;
  616|  10.0k|        auto ss   = p.shift() - B;
  617|  10.0k|        if (n <= e) {
  ------------------
  |  Branch (617:13): [True: 5.50k, False: 4.55k]
  ------------------
  618|  8.44k|            for (; n != e; ++n)
  ------------------
  |  Branch (618:20): [True: 2.94k, False: 5.50k]
  ------------------
  619|  2.94k|                make_full_pos(*n, ss).visit(v, args...);
  620|  5.50k|            make_regular_pos(*n, ss, p.size()).visit(v, args...);
  621|  5.50k|        }
  622|  10.0k|    }
  623|  15.1k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_17dec_right_visitorEJjEEEDcT_DpOT0_:
 1813|  53.3k|    {
 1814|  53.3k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  53.3k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10towards_ohINS1_23slice_right_mut_visitorISC_Lb0ELb1EEEJRNSA_5applyIS7_E4type4editEEEEDcT_mjDpOT0_:
 1686|  25.1k|    {
 1687|  25.1k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1687:9): [True: 25.1k, False: 0]
  ------------------
 1688|  25.1k|        auto left_size = offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0;
  ------------------
  |  Branch (1688:26): [True: 19.6k, False: 5.49k]
  ------------------
 1689|  25.1k|        return towards_oh_sbh(v, idx, offset_hint, left_size, args...);
 1690|  25.1k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE14towards_oh_sbhINS1_23slice_right_mut_visitorISC_Lb0ELb1EEEJRNSA_5applyIS7_E4type4editEEEEDcT_mjmDpOT0_:
 1698|  25.1k|    {
 1699|  25.1k|        return towards_sub_oh_sbh(v, idx, offset_hint, left_size_hint, args...);
 1700|  25.1k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE18towards_sub_oh_sbhINS1_23slice_right_mut_visitorISC_Lb0ELb1EEEJRNSA_5applyIS7_E4type4editEEEEDcT_mjmDpOT0_:
 1717|  25.1k|    {
 1718|  25.1k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1718:9): [True: 25.1k, False: 0]
  ------------------
 1719|  25.1k|        assert(left_size_hint ==
  ------------------
  |  Branch (1719:9): [True: 19.6k, False: 5.49k]
  |  Branch (1719:9): [True: 25.1k, False: 0]
  ------------------
 1720|  25.1k|               (offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0));
 1721|  25.1k|        auto child     = node_->inner()[offset_hint];
 1722|  25.1k|        auto is_leaf   = shift_ == BL;
 1723|  25.1k|        auto next_size = relaxed_->d.sizes[offset_hint] - left_size_hint;
 1724|  25.1k|        auto next_idx  = idx - left_size_hint;
 1725|  25.1k|        return is_leaf
  ------------------
  |  Branch (1725:16): [True: 4.58k, False: 20.5k]
  ------------------
 1726|  25.1k|                   ? make_leaf_sub_pos(child, next_size)
 1727|  4.58k|                         .visit(v, next_idx, args...)
 1728|  25.1k|                   : visit_maybe_relaxed_sub(
 1729|  20.5k|                         child, shift_ - B, next_size, v, next_idx, args...);
 1730|  25.1k|    }
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_23slice_right_mut_visitorISC_Lb0ELb1EEEJRmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
  144|  4.58k|    {
  145|  4.58k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  146|  4.58k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENS1_23slice_right_mut_visitorISC_Lb0ELb1EEEJRmRNSA_5applyIS7_E4type4editEEEEDcPT_jmT0_DpOT1_:
 1838|  20.5k|{
 1839|  20.5k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 20.5k, False: 0]
  ------------------
 1840|  20.5k|    auto relaxed = node->relaxed();
 1841|  20.5k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 12.9k, False: 7.55k]
  ------------------
 1842|  12.9k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 12.9k, False: 0]
  ------------------
 1843|  12.9k|        return make_relaxed_pos(node, shift, relaxed)
 1844|  12.9k|            .visit(v, std::forward<Args>(args)...);
 1845|  12.9k|    } else {
 1846|  7.55k|        return make_regular_sub_pos(node, shift, size)
 1847|  7.55k|            .visit(v, std::forward<Args>(args)...);
 1848|  7.55k|    }
 1849|  20.5k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_23slice_right_mut_visitorISC_Lb0ELb1EEEJRmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
 1813|  12.9k|    {
 1814|  12.9k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  12.9k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_23slice_right_mut_visitorISC_Lb0ELb1EEEJRmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
 1036|  7.55k|    {
 1037|  7.55k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  7.55k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_17dec_right_visitorEJjEEEDcT_DpOT0_:
 1036|  10.6k|    {
 1037|  10.6k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  10.6k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10towards_ohINS1_23slice_right_mut_visitorISC_Lb0ELb0EEEJRNSA_5applyIS7_E4type4editEEEEDcT_mjDpOT0_:
 1686|  16.9k|    {
 1687|  16.9k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1687:9): [True: 16.9k, False: 0]
  ------------------
 1688|  16.9k|        auto left_size = offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0;
  ------------------
  |  Branch (1688:26): [True: 9.86k, False: 7.08k]
  ------------------
 1689|  16.9k|        return towards_oh_sbh(v, idx, offset_hint, left_size, args...);
 1690|  16.9k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE14towards_oh_sbhINS1_23slice_right_mut_visitorISC_Lb0ELb0EEEJRNSA_5applyIS7_E4type4editEEEEDcT_mjmDpOT0_:
 1698|  16.9k|    {
 1699|  16.9k|        return towards_sub_oh_sbh(v, idx, offset_hint, left_size_hint, args...);
 1700|  16.9k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE18towards_sub_oh_sbhINS1_23slice_right_mut_visitorISC_Lb0ELb0EEEJRNSA_5applyIS7_E4type4editEEEEDcT_mjmDpOT0_:
 1717|  16.9k|    {
 1718|  16.9k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1718:9): [True: 16.9k, False: 0]
  ------------------
 1719|  16.9k|        assert(left_size_hint ==
  ------------------
  |  Branch (1719:9): [True: 9.86k, False: 7.08k]
  |  Branch (1719:9): [True: 16.9k, False: 0]
  ------------------
 1720|  16.9k|               (offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0));
 1721|  16.9k|        auto child     = node_->inner()[offset_hint];
 1722|  16.9k|        auto is_leaf   = shift_ == BL;
 1723|  16.9k|        auto next_size = relaxed_->d.sizes[offset_hint] - left_size_hint;
 1724|  16.9k|        auto next_idx  = idx - left_size_hint;
 1725|  16.9k|        return is_leaf
  ------------------
  |  Branch (1725:16): [True: 6.54k, False: 10.4k]
  ------------------
 1726|  16.9k|                   ? make_leaf_sub_pos(child, next_size)
 1727|  6.54k|                         .visit(v, next_idx, args...)
 1728|  16.9k|                   : visit_maybe_relaxed_sub(
 1729|  10.4k|                         child, shift_ - B, next_size, v, next_idx, args...);
 1730|  16.9k|    }
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_23slice_right_mut_visitorISC_Lb0ELb0EEEJRmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
  144|  6.54k|    {
  145|  6.54k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  146|  6.54k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENS1_23slice_right_mut_visitorISC_Lb0ELb0EEEJRmRNSA_5applyIS7_E4type4editEEEEDcPT_jmT0_DpOT1_:
 1838|  10.4k|{
 1839|  10.4k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 10.4k, False: 0]
  ------------------
 1840|  10.4k|    auto relaxed = node->relaxed();
 1841|  10.4k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 7.04k, False: 3.36k]
  ------------------
 1842|  7.04k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 7.04k, False: 0]
  ------------------
 1843|  7.04k|        return make_relaxed_pos(node, shift, relaxed)
 1844|  7.04k|            .visit(v, std::forward<Args>(args)...);
 1845|  7.04k|    } else {
 1846|  3.36k|        return make_regular_sub_pos(node, shift, size)
 1847|  3.36k|            .visit(v, std::forward<Args>(args)...);
 1848|  3.36k|    }
 1849|  10.4k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_23slice_right_mut_visitorISC_Lb0ELb0EEEJRmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
 1813|  7.04k|    {
 1814|  7.04k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  7.04k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_23slice_right_mut_visitorISC_Lb0ELb0EEEJRmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
 1036|  3.36k|    {
 1037|  3.36k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  3.36k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10each_rightINS1_11dec_visitorEJEEEvT_jDpOT0_:
 1653|  65.0k|    {
 1654|  65.0k|        assert(start > 0);
  ------------------
  |  Branch (1654:9): [True: 65.0k, False: 0]
  ------------------
 1655|  65.0k|        assert(start <= relaxed_->d.count);
  ------------------
  |  Branch (1655:9): [True: 65.0k, False: 0]
  ------------------
 1656|  65.0k|        auto s = relaxed_->d.sizes[start - 1];
 1657|  65.0k|        auto p = node_->inner();
 1658|  65.0k|        if (shift_ == BL) {
  ------------------
  |  Branch (1658:13): [True: 5.70k, False: 59.3k]
  ------------------
 1659|  15.9k|            for (auto i = start; i < relaxed_->d.count; ++i) {
  ------------------
  |  Branch (1659:34): [True: 10.2k, False: 5.70k]
  ------------------
 1660|  10.2k|                IMMER_PREFETCH(p + i + 1);
 1661|  10.2k|                make_leaf_sub_pos(p[i], relaxed_->d.sizes[i] - s)
 1662|  10.2k|                    .visit(v, args...);
 1663|  10.2k|                s = relaxed_->d.sizes[i];
 1664|  10.2k|                assert(s);
  ------------------
  |  Branch (1664:17): [True: 10.2k, False: 0]
  ------------------
 1665|  10.2k|            }
 1666|  59.3k|        } else {
 1667|  59.3k|            auto ss = shift_ - B;
 1668|   185k|            for (auto i = start; i < relaxed_->d.count; ++i) {
  ------------------
  |  Branch (1668:34): [True: 126k, False: 59.3k]
  ------------------
 1669|   126k|                visit_maybe_relaxed_sub(
 1670|   126k|                    p[i], ss, relaxed_->d.sizes[i] - s, v, args...);
 1671|   126k|                s = relaxed_->d.sizes[i];
 1672|       |                assert(s);
  ------------------
  |  Branch (1672:17): [True: 126k, False: 0]
  ------------------
 1673|   126k|            }
 1674|  59.3k|        }
 1675|  65.0k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_23slice_right_mut_visitorISC_Lb1ELb1EEEJRmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
 1036|  12.4k|    {
 1037|  12.4k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  12.4k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10towards_ohINS1_23slice_right_mut_visitorISC_Lb1ELb1EEEJRNSA_5applyIS7_E4type4editEEEEDcT_mjDpOT0_:
  927|  5.08k|    {
  928|  5.08k|        return towards_oh_ch_regular(
  929|  5.08k|            *this, v, idx, offset_hint, count(), args...);
  930|  5.08k|    }
_ZN5immer6detail4rbts21towards_oh_ch_regularIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_23slice_right_mut_visitorISD_Lb1ELb1EEEJRNSB_5applyIS8_E4type4editEEEEDcOT_T0_mjjDpOT1_:
  632|  5.08k|{
  633|  5.08k|    constexpr auto B  = bits<Pos>;
  634|  5.08k|    constexpr auto BL = bits_leaf<Pos>;
  635|  5.08k|    assert(offset_hint == p.index(idx));
  ------------------
  |  Branch (635:5): [True: 5.08k, False: 0]
  ------------------
  636|  5.08k|    assert(count_hint == p.count());
  ------------------
  |  Branch (636:5): [True: 5.08k, False: 0]
  ------------------
  637|  5.08k|    auto is_leaf = p.shift() == BL;
  638|  5.08k|    auto child   = p.node()->inner()[offset_hint];
  639|  5.08k|    auto is_full = offset_hint + 1 != count_hint;
  640|  5.08k|    return is_full
  ------------------
  |  Branch (640:12): [True: 4.37k, False: 713]
  ------------------
  641|  5.08k|               ? (is_leaf ? make_full_leaf_pos(child).visit(v, idx, args...)
  ------------------
  |  Branch (641:19): [True: 857, False: 3.51k]
  ------------------
  642|  4.37k|                          : make_full_pos(child, p.shift() - B)
  643|  3.51k|                                .visit(v, idx, args...))
  644|  5.08k|               : (is_leaf
  ------------------
  |  Branch (644:19): [True: 713, False: 0]
  ------------------
  645|    713|                      ? make_leaf_pos(child, p.size()).visit(v, idx, args...)
  646|    713|                      : make_regular_pos(child, p.shift() - B, p.size())
  647|      0|                            .visit(v, idx, args...));
  648|  5.08k|}
_ZN5immer6detail4rbts13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_23slice_right_mut_visitorISC_Lb1ELb1EEEJRmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
  207|  1.43k|    {
  208|  1.43k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  209|  1.43k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_23slice_right_mut_visitorISC_Lb1ELb1EEEJRmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
 1405|  3.93k|    {
 1406|  3.93k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1407|  3.93k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10towards_ohINS1_23slice_right_mut_visitorISC_Lb1ELb1EEEJRNSA_5applyIS7_E4type4editEEEEDcT_mjDpOT0_:
 1336|  1.00k|    {
 1337|  1.00k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1337:9): [True: 1.00k, False: 0]
  ------------------
 1338|  1.00k|        auto is_leaf = shift_ == BL;
 1339|  1.00k|        auto child   = node_->inner()[offset_hint];
 1340|  1.00k|        return is_leaf
  ------------------
  |  Branch (1340:16): [True: 580, False: 422]
  ------------------
 1341|  1.00k|                   ? make_full_leaf_pos(child).visit(v, idx, args...)
 1342|  1.00k|                   : make_full_pos(child, shift_ - B).visit(v, idx, args...);
 1343|  1.00k|    }
_ZN5immer6detail4rbts8leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_23slice_right_mut_visitorISC_Lb1ELb1EEEJRmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
  112|    713|    {
  113|    713|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  114|    713|    }
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_22slice_left_mut_visitorISC_Lb1ELb1EEEJmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
  144|    724|    {
  145|    724|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  146|    724|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENS1_22slice_left_mut_visitorISC_Lb1ELb1EEEJRmRNSA_5applyIS7_E4type4editEEEEDcPT_jmT0_DpOT1_:
 1838|  45.0k|{
 1839|  45.0k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 45.0k, False: 0]
  ------------------
 1840|  45.0k|    auto relaxed = node->relaxed();
 1841|  45.0k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 36.6k, False: 8.42k]
  ------------------
 1842|  36.6k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 36.6k, False: 0]
  ------------------
 1843|  36.6k|        return make_relaxed_pos(node, shift, relaxed)
 1844|  36.6k|            .visit(v, std::forward<Args>(args)...);
 1845|  36.6k|    } else {
 1846|  8.42k|        return make_regular_sub_pos(node, shift, size)
 1847|  8.42k|            .visit(v, std::forward<Args>(args)...);
 1848|  8.42k|    }
 1849|  45.0k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_22slice_left_mut_visitorISC_Lb1ELb1EEEJRmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
 1813|  36.6k|    {
 1814|  36.6k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  36.6k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE14towards_sub_ohINS1_22slice_left_mut_visitorISC_Lb1ELb1EEEJRNSA_5applyIS7_E4type4editEEEEDcT_mjDpOT0_:
 1705|  6.18k|    {
 1706|  6.18k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1706:9): [True: 6.18k, False: 0]
  ------------------
 1707|  6.18k|        auto left_size = offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0;
  ------------------
  |  Branch (1707:26): [True: 5.24k, False: 943]
  ------------------
 1708|  6.18k|        return towards_sub_oh_sbh(v, idx, offset_hint, left_size, args...);
 1709|  6.18k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE18towards_sub_oh_sbhINS1_22slice_left_mut_visitorISC_Lb1ELb1EEEJRNSA_5applyIS7_E4type4editEEEEDcT_mjmDpOT0_:
 1717|  6.18k|    {
 1718|  6.18k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1718:9): [True: 6.18k, False: 0]
  ------------------
 1719|  6.18k|        assert(left_size_hint ==
  ------------------
  |  Branch (1719:9): [True: 5.24k, False: 943]
  |  Branch (1719:9): [True: 6.18k, False: 0]
  ------------------
 1720|  6.18k|               (offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0));
 1721|  6.18k|        auto child     = node_->inner()[offset_hint];
 1722|  6.18k|        auto is_leaf   = shift_ == BL;
 1723|  6.18k|        auto next_size = relaxed_->d.sizes[offset_hint] - left_size_hint;
 1724|  6.18k|        auto next_idx  = idx - left_size_hint;
 1725|  6.18k|        return is_leaf
  ------------------
  |  Branch (1725:16): [True: 0, False: 6.18k]
  ------------------
 1726|  6.18k|                   ? make_leaf_sub_pos(child, next_size)
 1727|      0|                         .visit(v, next_idx, args...)
 1728|  6.18k|                   : visit_maybe_relaxed_sub(
 1729|  6.18k|                         child, shift_ - B, next_size, v, next_idx, args...);
 1730|  6.18k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE14towards_sub_ohINS1_22slice_left_mut_visitorISC_Lb1ELb0EEEJRNSA_5applyIS7_E4type4editEEEEDcT_mjDpOT0_:
 1705|  4.03k|    {
 1706|  4.03k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1706:9): [True: 4.03k, False: 0]
  ------------------
 1707|  4.03k|        auto left_size = offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0;
  ------------------
  |  Branch (1707:26): [True: 3.37k, False: 661]
  ------------------
 1708|  4.03k|        return towards_sub_oh_sbh(v, idx, offset_hint, left_size, args...);
 1709|  4.03k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE18towards_sub_oh_sbhINS1_22slice_left_mut_visitorISC_Lb1ELb0EEEJRNSA_5applyIS7_E4type4editEEEEDcT_mjmDpOT0_:
 1717|  4.03k|    {
 1718|  4.03k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1718:9): [True: 4.03k, False: 0]
  ------------------
 1719|  4.03k|        assert(left_size_hint ==
  ------------------
  |  Branch (1719:9): [True: 3.37k, False: 661]
  |  Branch (1719:9): [True: 4.03k, False: 0]
  ------------------
 1720|  4.03k|               (offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0));
 1721|  4.03k|        auto child     = node_->inner()[offset_hint];
 1722|  4.03k|        auto is_leaf   = shift_ == BL;
 1723|  4.03k|        auto next_size = relaxed_->d.sizes[offset_hint] - left_size_hint;
 1724|  4.03k|        auto next_idx  = idx - left_size_hint;
 1725|  4.03k|        return is_leaf
  ------------------
  |  Branch (1725:16): [True: 0, False: 4.03k]
  ------------------
 1726|  4.03k|                   ? make_leaf_sub_pos(child, next_size)
 1727|      0|                         .visit(v, next_idx, args...)
 1728|  4.03k|                   : visit_maybe_relaxed_sub(
 1729|  4.03k|                         child, shift_ - B, next_size, v, next_idx, args...);
 1730|  4.03k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENS1_22slice_left_mut_visitorISC_Lb1ELb0EEEJRmRNSA_5applyIS7_E4type4editEEEEDcPT_jmT0_DpOT1_:
 1838|  4.03k|{
 1839|  4.03k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 4.03k, False: 0]
  ------------------
 1840|  4.03k|    auto relaxed = node->relaxed();
 1841|  4.03k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 2.53k, False: 1.49k]
  ------------------
 1842|  2.53k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 2.53k, False: 0]
  ------------------
 1843|  2.53k|        return make_relaxed_pos(node, shift, relaxed)
 1844|  2.53k|            .visit(v, std::forward<Args>(args)...);
 1845|  2.53k|    } else {
 1846|  1.49k|        return make_regular_sub_pos(node, shift, size)
 1847|  1.49k|            .visit(v, std::forward<Args>(args)...);
 1848|  1.49k|    }
 1849|  4.03k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_22slice_left_mut_visitorISC_Lb1ELb0EEEJRmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
 1813|  2.53k|    {
 1814|  2.53k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  2.53k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_22slice_left_mut_visitorISC_Lb1ELb0EEEJRmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
 1036|  1.49k|    {
 1037|  1.49k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  1.49k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE14towards_sub_ohINS1_22slice_left_mut_visitorISC_Lb1ELb0EEEJRNSA_5applyIS7_E4type4editEEEEDcT_mjDpOT0_:
  946|  2.42k|    {
  947|  2.42k|        return towards_sub_oh_regular(*this, v, idx, offset_hint, args...);
  948|  2.42k|    }
_ZN5immer6detail4rbts22towards_sub_oh_regularIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_22slice_left_mut_visitorISD_Lb1ELb0EEEJRNSB_5applyIS8_E4type4editEEEEDcOT_T0_mjDpOT1_:
  653|  2.42k|{
  654|  2.42k|    constexpr auto B  = bits<Pos>;
  655|  2.42k|    constexpr auto BL = bits_leaf<Pos>;
  656|  2.42k|    assert(offset_hint == p.index(idx));
  ------------------
  |  Branch (656:5): [True: 2.42k, False: 0]
  ------------------
  657|  2.42k|    auto is_leaf = p.shift() == BL;
  658|  2.42k|    auto child   = p.node()->inner()[offset_hint];
  659|  2.42k|    auto lsize   = offset_hint << p.shift();
  660|  2.42k|    auto size    = p.this_size();
  661|  2.42k|    auto is_full = (size - lsize) >= (size_t{1} << p.shift());
  662|  2.42k|    return is_full
  ------------------
  |  Branch (662:12): [True: 1.39k, False: 1.02k]
  ------------------
  663|  2.42k|               ? (is_leaf
  ------------------
  |  Branch (663:19): [True: 0, False: 1.39k]
  ------------------
  664|  1.39k|                      ? make_full_leaf_pos(child).visit(v, idx - lsize, args...)
  665|  1.39k|                      : make_full_pos(child, p.shift() - B)
  666|  1.39k|                            .visit(v, idx - lsize, args...))
  667|  2.42k|               : (is_leaf
  ------------------
  |  Branch (667:19): [True: 0, False: 1.02k]
  ------------------
  668|  1.02k|                      ? make_leaf_sub_pos(child, size - lsize)
  669|      0|                            .visit(v, idx - lsize, args...)
  670|  1.02k|                      : make_regular_sub_pos(child, p.shift() - B, size - lsize)
  671|  1.02k|                            .visit(v, idx - lsize, args...));
  672|  2.42k|}
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_22slice_left_mut_visitorISC_Lb1ELb0EEEJmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
 1405|  3.07k|    {
 1406|  3.07k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1407|  3.07k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE14towards_sub_ohINS1_22slice_left_mut_visitorISC_Lb1ELb0EEEJRNSA_5applyIS7_E4type4editEEEEDcT_mjDpOT0_:
 1348|  1.67k|    {
 1349|  1.67k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1349:9): [True: 1.67k, False: 0]
  ------------------
 1350|  1.67k|        auto is_leaf = shift_ == BL;
 1351|  1.67k|        auto child   = node_->inner()[offset_hint];
 1352|  1.67k|        auto lsize   = size_t{offset_hint} << shift_;
 1353|  1.67k|        return is_leaf
  ------------------
  |  Branch (1353:16): [True: 0, False: 1.67k]
  ------------------
 1354|  1.67k|                   ? make_full_leaf_pos(child).visit(v, idx - lsize, args...)
 1355|  1.67k|                   : make_full_pos(child, shift_ - B)
 1356|  1.67k|                         .visit(v, idx - lsize, args...);
 1357|  1.67k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_16dec_left_visitorEJRjEEEDcT_DpOT0_:
 1405|    323|    {
 1406|    323|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1407|    323|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE14towards_sub_ohINS1_22slice_left_mut_visitorISC_Lb0ELb1EEEJRNSA_5applyIS7_E4type4editEEEEDcT_mjDpOT0_:
 1348|  2.15k|    {
 1349|  2.15k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1349:9): [True: 2.15k, False: 0]
  ------------------
 1350|  2.15k|        auto is_leaf = shift_ == BL;
 1351|  2.15k|        auto child   = node_->inner()[offset_hint];
 1352|  2.15k|        auto lsize   = size_t{offset_hint} << shift_;
 1353|  2.15k|        return is_leaf
  ------------------
  |  Branch (1353:16): [True: 1.25k, False: 897]
  ------------------
 1354|  2.15k|                   ? make_full_leaf_pos(child).visit(v, idx - lsize, args...)
 1355|  2.15k|                   : make_full_pos(child, shift_ - B)
 1356|    897|                         .visit(v, idx - lsize, args...);
 1357|  2.15k|    }
_ZN5immer6detail4rbts13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_22slice_left_mut_visitorISC_Lb0ELb1EEEJmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
  207|  3.32k|    {
  208|  3.32k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  209|  3.32k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_22slice_left_mut_visitorISC_Lb0ELb1EEEJmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
 1405|  2.30k|    {
 1406|  2.30k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1407|  2.30k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE14towards_sub_ohINS1_22slice_left_mut_visitorISC_Lb0ELb0EEEJRNSA_5applyIS7_E4type4editEEEEDcT_mjDpOT0_:
 1348|  7.87k|    {
 1349|  7.87k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1349:9): [True: 7.87k, False: 0]
  ------------------
 1350|  7.87k|        auto is_leaf = shift_ == BL;
 1351|  7.87k|        auto child   = node_->inner()[offset_hint];
 1352|  7.87k|        auto lsize   = size_t{offset_hint} << shift_;
 1353|  7.87k|        return is_leaf
  ------------------
  |  Branch (1353:16): [True: 6.35k, False: 1.52k]
  ------------------
 1354|  7.87k|                   ? make_full_leaf_pos(child).visit(v, idx - lsize, args...)
 1355|  7.87k|                   : make_full_pos(child, shift_ - B)
 1356|  1.52k|                         .visit(v, idx - lsize, args...);
 1357|  7.87k|    }
_ZN5immer6detail4rbts13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_22slice_left_mut_visitorISC_Lb0ELb0EEEJmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
  207|  10.3k|    {
  208|  10.3k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  209|  10.3k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_22slice_left_mut_visitorISC_Lb0ELb0EEEJmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
 1405|  3.26k|    {
 1406|  3.26k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1407|  3.26k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE9each_leftINS1_11dec_visitorEJEEEvT_jDpOT0_:
 1316|  2.47k|    {
 1317|  2.47k|        each_i(v, 0, last, args...);
 1318|  2.47k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_22slice_left_mut_visitorISC_Lb1ELb0EEEJmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
 1036|  1.02k|    {
 1037|  1.02k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  1.02k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_16dec_left_visitorEJRjEEEDcT_DpOT0_:
 1036|  4.21k|    {
 1037|  4.21k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  4.21k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE14towards_sub_ohINS1_22slice_left_mut_visitorISC_Lb0ELb1EEEJRNSA_5applyIS7_E4type4editEEEEDcT_mjDpOT0_:
  946|  3.47k|    {
  947|  3.47k|        return towards_sub_oh_regular(*this, v, idx, offset_hint, args...);
  948|  3.47k|    }
_ZN5immer6detail4rbts22towards_sub_oh_regularIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_22slice_left_mut_visitorISD_Lb0ELb1EEEJRNSB_5applyIS8_E4type4editEEEEDcOT_T0_mjDpOT1_:
  653|  3.47k|{
  654|  3.47k|    constexpr auto B  = bits<Pos>;
  655|  3.47k|    constexpr auto BL = bits_leaf<Pos>;
  656|  3.47k|    assert(offset_hint == p.index(idx));
  ------------------
  |  Branch (656:5): [True: 3.47k, False: 0]
  ------------------
  657|  3.47k|    auto is_leaf = p.shift() == BL;
  658|  3.47k|    auto child   = p.node()->inner()[offset_hint];
  659|  3.47k|    auto lsize   = offset_hint << p.shift();
  660|  3.47k|    auto size    = p.this_size();
  661|  3.47k|    auto is_full = (size - lsize) >= (size_t{1} << p.shift());
  662|  3.47k|    return is_full
  ------------------
  |  Branch (662:12): [True: 3.47k, False: 0]
  ------------------
  663|  3.47k|               ? (is_leaf
  ------------------
  |  Branch (663:19): [True: 2.06k, False: 1.40k]
  ------------------
  664|  3.47k|                      ? make_full_leaf_pos(child).visit(v, idx - lsize, args...)
  665|  3.47k|                      : make_full_pos(child, p.shift() - B)
  666|  1.40k|                            .visit(v, idx - lsize, args...))
  667|  3.47k|               : (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|  3.47k|}
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE14towards_sub_ohINS1_22slice_left_mut_visitorISC_Lb0ELb0EEEJRNSA_5applyIS7_E4type4editEEEEDcT_mjDpOT0_:
  946|  5.77k|    {
  947|  5.77k|        return towards_sub_oh_regular(*this, v, idx, offset_hint, args...);
  948|  5.77k|    }
_ZN5immer6detail4rbts22towards_sub_oh_regularIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_22slice_left_mut_visitorISD_Lb0ELb0EEEJRNSB_5applyIS8_E4type4editEEEEDcOT_T0_mjDpOT1_:
  653|  5.77k|{
  654|  5.77k|    constexpr auto B  = bits<Pos>;
  655|  5.77k|    constexpr auto BL = bits_leaf<Pos>;
  656|  5.77k|    assert(offset_hint == p.index(idx));
  ------------------
  |  Branch (656:5): [True: 5.77k, False: 0]
  ------------------
  657|  5.77k|    auto is_leaf = p.shift() == BL;
  658|  5.77k|    auto child   = p.node()->inner()[offset_hint];
  659|  5.77k|    auto lsize   = offset_hint << p.shift();
  660|  5.77k|    auto size    = p.this_size();
  661|  5.77k|    auto is_full = (size - lsize) >= (size_t{1} << p.shift());
  662|  5.77k|    return is_full
  ------------------
  |  Branch (662:12): [True: 5.77k, False: 0]
  ------------------
  663|  5.77k|               ? (is_leaf
  ------------------
  |  Branch (663:19): [True: 4.03k, False: 1.74k]
  ------------------
  664|  5.77k|                      ? make_full_leaf_pos(child).visit(v, idx - lsize, args...)
  665|  5.77k|                      : make_full_pos(child, p.shift() - B)
  666|  1.74k|                            .visit(v, idx - lsize, args...))
  667|  5.77k|               : (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|  5.77k|}
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE9each_leftINS1_11dec_visitorEJEEEvT_jDpOT0_:
  873|  7.69k|    {
  874|  7.69k|        return each_left_regular(*this, v, last, args...);
  875|  7.69k|    }
_ZN5immer6detail4rbts17each_left_regularIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_11dec_visitorEJEEEvOT_T0_jDpOT1_:
  575|  7.69k|{
  576|  7.69k|    constexpr auto B  = bits<Pos>;
  577|  7.69k|    constexpr auto BL = bits_leaf<Pos>;
  578|  7.69k|    assert(last < p.count());
  ------------------
  |  Branch (578:5): [True: 7.69k, False: 0]
  ------------------
  579|  7.69k|    if (p.shift() == BL) {
  ------------------
  |  Branch (579:9): [True: 2.06k, False: 5.62k]
  ------------------
  580|  2.06k|        auto n = p.node()->inner();
  581|  2.06k|        auto e = n + last;
  582|  4.45k|        for (; n != e; ++n) {
  ------------------
  |  Branch (582:16): [True: 2.38k, False: 2.06k]
  ------------------
  583|  2.38k|            IMMER_PREFETCH(n + 1);
  584|  2.38k|            make_full_leaf_pos(*n).visit(v, args...);
  585|  2.38k|        }
  586|  5.62k|    } else {
  587|  5.62k|        auto n  = p.node()->inner();
  588|  5.62k|        auto e  = n + last;
  589|  5.62k|        auto ss = p.shift() - B;
  590|  7.74k|        for (; n != e; ++n)
  ------------------
  |  Branch (590:16): [True: 2.12k, False: 5.62k]
  ------------------
  591|  2.12k|            make_full_pos(*n, ss).visit(v, args...);
  592|  5.62k|    }
  593|  7.69k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_16dec_left_visitorEJRjEEEDcT_DpOT0_:
 1813|  6.18k|    {
 1814|  6.18k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  6.18k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE14towards_sub_ohINS1_22slice_left_mut_visitorISC_Lb0ELb1EEEJRNSA_5applyIS7_E4type4editEEEEDcT_mjDpOT0_:
 1705|   197k|    {
 1706|   197k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1706:9): [True: 197k, False: 0]
  ------------------
 1707|   197k|        auto left_size = offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0;
  ------------------
  |  Branch (1707:26): [True: 8.44k, False: 188k]
  ------------------
 1708|   197k|        return towards_sub_oh_sbh(v, idx, offset_hint, left_size, args...);
 1709|   197k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE18towards_sub_oh_sbhINS1_22slice_left_mut_visitorISC_Lb0ELb1EEEJRNSA_5applyIS7_E4type4editEEEEDcT_mjmDpOT0_:
 1717|   197k|    {
 1718|   197k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1718:9): [True: 197k, False: 0]
  ------------------
 1719|   197k|        assert(left_size_hint ==
  ------------------
  |  Branch (1719:9): [True: 8.44k, False: 188k]
  |  Branch (1719:9): [True: 197k, False: 0]
  ------------------
 1720|   197k|               (offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0));
 1721|   197k|        auto child     = node_->inner()[offset_hint];
 1722|   197k|        auto is_leaf   = shift_ == BL;
 1723|   197k|        auto next_size = relaxed_->d.sizes[offset_hint] - left_size_hint;
 1724|   197k|        auto next_idx  = idx - left_size_hint;
 1725|   197k|        return is_leaf
  ------------------
  |  Branch (1725:16): [True: 12.4k, False: 184k]
  ------------------
 1726|   197k|                   ? make_leaf_sub_pos(child, next_size)
 1727|  12.4k|                         .visit(v, next_idx, args...)
 1728|   197k|                   : visit_maybe_relaxed_sub(
 1729|   184k|                         child, shift_ - B, next_size, v, next_idx, args...);
 1730|   197k|    }
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_22slice_left_mut_visitorISC_Lb0ELb1EEEJRmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
  144|  12.4k|    {
  145|  12.4k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  146|  12.4k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENS1_22slice_left_mut_visitorISC_Lb0ELb1EEEJRmRNSA_5applyIS7_E4type4editEEEEDcPT_jmT0_DpOT1_:
 1838|   184k|{
 1839|   184k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 184k, False: 0]
  ------------------
 1840|   184k|    auto relaxed = node->relaxed();
 1841|   184k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 183k, False: 1.80k]
  ------------------
 1842|   183k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 183k, False: 0]
  ------------------
 1843|   183k|        return make_relaxed_pos(node, shift, relaxed)
 1844|   183k|            .visit(v, std::forward<Args>(args)...);
 1845|   183k|    } else {
 1846|  1.80k|        return make_regular_sub_pos(node, shift, size)
 1847|  1.80k|            .visit(v, std::forward<Args>(args)...);
 1848|  1.80k|    }
 1849|   184k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_22slice_left_mut_visitorISC_Lb0ELb1EEEJRmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
 1813|   183k|    {
 1814|   183k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|   183k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_22slice_left_mut_visitorISC_Lb0ELb1EEEJRmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
 1036|  1.80k|    {
 1037|  1.80k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  1.80k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE14towards_sub_ohINS1_22slice_left_mut_visitorISC_Lb0ELb0EEEJRNSA_5applyIS7_E4type4editEEEEDcT_mjDpOT0_:
 1705|  65.2k|    {
 1706|  65.2k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1706:9): [True: 65.2k, False: 0]
  ------------------
 1707|  65.2k|        auto left_size = offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0;
  ------------------
  |  Branch (1707:26): [True: 19.8k, False: 45.3k]
  ------------------
 1708|  65.2k|        return towards_sub_oh_sbh(v, idx, offset_hint, left_size, args...);
 1709|  65.2k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE18towards_sub_oh_sbhINS1_22slice_left_mut_visitorISC_Lb0ELb0EEEJRNSA_5applyIS7_E4type4editEEEEDcT_mjmDpOT0_:
 1717|  65.2k|    {
 1718|  65.2k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1718:9): [True: 65.2k, False: 0]
  ------------------
 1719|  65.2k|        assert(left_size_hint ==
  ------------------
  |  Branch (1719:9): [True: 19.8k, False: 45.3k]
  |  Branch (1719:9): [True: 65.2k, False: 0]
  ------------------
 1720|  65.2k|               (offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0));
 1721|  65.2k|        auto child     = node_->inner()[offset_hint];
 1722|  65.2k|        auto is_leaf   = shift_ == BL;
 1723|  65.2k|        auto next_size = relaxed_->d.sizes[offset_hint] - left_size_hint;
 1724|  65.2k|        auto next_idx  = idx - left_size_hint;
 1725|  65.2k|        return is_leaf
  ------------------
  |  Branch (1725:16): [True: 12.6k, False: 52.5k]
  ------------------
 1726|  65.2k|                   ? make_leaf_sub_pos(child, next_size)
 1727|  12.6k|                         .visit(v, next_idx, args...)
 1728|  65.2k|                   : visit_maybe_relaxed_sub(
 1729|  52.5k|                         child, shift_ - B, next_size, v, next_idx, args...);
 1730|  65.2k|    }
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_22slice_left_mut_visitorISC_Lb0ELb0EEEJRmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
  144|  12.6k|    {
  145|  12.6k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  146|  12.6k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENS1_22slice_left_mut_visitorISC_Lb0ELb0EEEJRmRNSA_5applyIS7_E4type4editEEEEDcPT_jmT0_DpOT1_:
 1838|  52.5k|{
 1839|  52.5k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 52.5k, False: 0]
  ------------------
 1840|  52.5k|    auto relaxed = node->relaxed();
 1841|  52.5k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 50.5k, False: 1.99k]
  ------------------
 1842|  50.5k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 50.5k, False: 0]
  ------------------
 1843|  50.5k|        return make_relaxed_pos(node, shift, relaxed)
 1844|  50.5k|            .visit(v, std::forward<Args>(args)...);
 1845|  50.5k|    } else {
 1846|  1.99k|        return make_regular_sub_pos(node, shift, size)
 1847|  1.99k|            .visit(v, std::forward<Args>(args)...);
 1848|  1.99k|    }
 1849|  52.5k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_22slice_left_mut_visitorISC_Lb0ELb0EEEJRmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
 1813|  50.5k|    {
 1814|  50.5k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  50.5k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_22slice_left_mut_visitorISC_Lb0ELb0EEEJRmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
 1036|  1.99k|    {
 1037|  1.99k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  1.99k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_22slice_left_mut_visitorISC_Lb1ELb1EEEJRmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
 1036|  8.42k|    {
 1037|  8.42k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  8.42k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE14towards_sub_ohINS1_22slice_left_mut_visitorISC_Lb1ELb1EEEJRNSA_5applyIS7_E4type4editEEEEDcT_mjDpOT0_:
  946|  4.21k|    {
  947|  4.21k|        return towards_sub_oh_regular(*this, v, idx, offset_hint, args...);
  948|  4.21k|    }
_ZN5immer6detail4rbts22towards_sub_oh_regularIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_22slice_left_mut_visitorISD_Lb1ELb1EEEJRNSB_5applyIS8_E4type4editEEEEDcOT_T0_mjDpOT1_:
  653|  4.21k|{
  654|  4.21k|    constexpr auto B  = bits<Pos>;
  655|  4.21k|    constexpr auto BL = bits_leaf<Pos>;
  656|  4.21k|    assert(offset_hint == p.index(idx));
  ------------------
  |  Branch (656:5): [True: 4.21k, False: 0]
  ------------------
  657|  4.21k|    auto is_leaf = p.shift() == BL;
  658|  4.21k|    auto child   = p.node()->inner()[offset_hint];
  659|  4.21k|    auto lsize   = offset_hint << p.shift();
  660|  4.21k|    auto size    = p.this_size();
  661|  4.21k|    auto is_full = (size - lsize) >= (size_t{1} << p.shift());
  662|  4.21k|    return is_full
  ------------------
  |  Branch (662:12): [True: 3.06k, False: 1.15k]
  ------------------
  663|  4.21k|               ? (is_leaf
  ------------------
  |  Branch (663:19): [True: 0, False: 3.06k]
  ------------------
  664|  3.06k|                      ? make_full_leaf_pos(child).visit(v, idx - lsize, args...)
  665|  3.06k|                      : make_full_pos(child, p.shift() - B)
  666|  3.06k|                            .visit(v, idx - lsize, args...))
  667|  4.21k|               : (is_leaf
  ------------------
  |  Branch (667:19): [True: 0, False: 1.15k]
  ------------------
  668|  1.15k|                      ? make_leaf_sub_pos(child, size - lsize)
  669|      0|                            .visit(v, idx - lsize, args...)
  670|  1.15k|                      : make_regular_sub_pos(child, p.shift() - B, size - lsize)
  671|  1.15k|                            .visit(v, idx - lsize, args...));
  672|  4.21k|}
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_22slice_left_mut_visitorISC_Lb1ELb1EEEJmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
 1405|  3.38k|    {
 1406|  3.38k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1407|  3.38k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE14towards_sub_ohINS1_22slice_left_mut_visitorISC_Lb1ELb1EEEJRNSA_5applyIS7_E4type4editEEEEDcT_mjDpOT0_:
 1348|    323|    {
 1349|    323|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1349:9): [True: 323, False: 0]
  ------------------
 1350|    323|        auto is_leaf = shift_ == BL;
 1351|    323|        auto child   = node_->inner()[offset_hint];
 1352|    323|        auto lsize   = size_t{offset_hint} << shift_;
 1353|    323|        return is_leaf
  ------------------
  |  Branch (1353:16): [True: 0, False: 323]
  ------------------
 1354|    323|                   ? make_full_leaf_pos(child).visit(v, idx - lsize, args...)
 1355|    323|                   : make_full_pos(child, shift_ - B)
 1356|    323|                         .visit(v, idx - lsize, args...);
 1357|    323|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_22slice_left_mut_visitorISC_Lb1ELb1EEEJmRNSA_5applyIS7_E4type4editEEEEDcT_DpOT0_:
 1036|  1.15k|    {
 1037|  1.15k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  1.15k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENS1_14equals_visitor3rrbEJNS1_16rrbtree_iteratorIiSB_Lj2ELj2EEERKPSC_RKjRmEEEDcPT_jmT0_DpOT1_:
 1838|  18.0k|{
 1839|  18.0k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 18.0k, False: 0]
  ------------------
 1840|  18.0k|    auto relaxed = node->relaxed();
 1841|  18.0k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 12.0k, False: 5.97k]
  ------------------
 1842|  12.0k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 12.0k, False: 0]
  ------------------
 1843|  12.0k|        return make_relaxed_pos(node, shift, relaxed)
 1844|  12.0k|            .visit(v, std::forward<Args>(args)...);
 1845|  12.0k|    } else {
 1846|  5.97k|        return make_regular_sub_pos(node, shift, size)
 1847|  5.97k|            .visit(v, std::forward<Args>(args)...);
 1848|  5.97k|    }
 1849|  18.0k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_14equals_visitor3rrbEJNS1_16rrbtree_iteratorIiSB_Lj2ELj2EEERKPSC_RKjRmEEEDcT_DpOT0_:
 1813|  12.0k|    {
 1814|  12.0k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  12.0k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENS1_14equals_visitorEJRNS1_11relaxed_posISC_EERNS1_16rrbtree_iteratorIiSB_Lj2ELj2EEEmEEEDcPT_jmT0_DpOT1_:
 1838|  12.0k|{
 1839|  12.0k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 12.0k, False: 0]
  ------------------
 1840|  12.0k|    auto relaxed = node->relaxed();
 1841|  12.0k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 8.99k, False: 3.06k]
  ------------------
 1842|  8.99k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 8.99k, False: 0]
  ------------------
 1843|  8.99k|        return make_relaxed_pos(node, shift, relaxed)
 1844|  8.99k|            .visit(v, std::forward<Args>(args)...);
 1845|  8.99k|    } else {
 1846|  3.06k|        return make_regular_sub_pos(node, shift, size)
 1847|  3.06k|            .visit(v, std::forward<Args>(args)...);
 1848|  3.06k|    }
 1849|  12.0k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_14equals_visitorEJRSD_RNS1_16rrbtree_iteratorIiSB_Lj2ELj2EEEmEEEDcT_DpOT0_:
 1813|  8.99k|    {
 1814|  8.99k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  8.99k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE7nth_subINS1_14equals_visitor10this_aux_tEJRjRSD_RNS1_16rrbtree_iteratorIiSB_Lj2ELj2EEEmEEEDcjT_DpOT0_:
 1793|  33.3k|    {
 1794|  33.3k|        auto child      = node_->inner()[offset];
 1795|  33.3k|        auto child_size = size(offset);
 1796|  33.3k|        auto is_leaf    = shift_ == BL;
 1797|  33.3k|        return is_leaf ? make_leaf_sub_pos(child, child_size).visit(v, args...)
  ------------------
  |  Branch (1797:16): [True: 8.97k, False: 24.4k]
  ------------------
 1798|  33.3k|                       : visit_maybe_relaxed_sub(
 1799|  24.4k|                             child, shift_ - B, child_size, v, args...);
 1800|  33.3k|    }
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_14equals_visitor10this_aux_tEJRjRNS1_11relaxed_posISC_EERNS1_16rrbtree_iteratorIiSB_Lj2ELj2EEERmEEEDcT_DpOT0_:
  144|  9.28k|    {
  145|  9.28k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  146|  9.28k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE12nth_sub_leafINS1_14equals_visitorEJRNS1_12leaf_sub_posISC_EERNS1_16rrbtree_iteratorIiSB_Lj2ELj2EEERmEEEDcjT_DpOT0_:
 1804|  9.28k|    {
 1805|  9.28k|        assert(shift_ == BL);
  ------------------
  |  Branch (1805:9): [True: 9.28k, False: 0]
  ------------------
 1806|  9.28k|        auto child      = node_->inner()[offset];
 1807|  9.28k|        auto child_size = size(offset);
 1808|  9.28k|        return make_leaf_sub_pos(child, child_size).visit(v, args...);
 1809|  9.28k|    }
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_14equals_visitorEJRSD_RNS1_16rrbtree_iteratorIiSB_Lj2ELj2EEERmEEEDcT_DpOT0_:
  144|  9.85k|    {
  145|  9.85k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  146|  9.85k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENS1_14equals_visitor10this_aux_tEJRjRNS1_11relaxed_posISC_EERNS1_16rrbtree_iteratorIiSB_Lj2ELj2EEERmEEEDcPT_jmT0_DpOT1_:
 1838|  24.4k|{
 1839|  24.4k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 24.4k, False: 0]
  ------------------
 1840|  24.4k|    auto relaxed = node->relaxed();
 1841|  24.4k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 21.7k, False: 2.65k]
  ------------------
 1842|  21.7k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 21.7k, False: 0]
  ------------------
 1843|  21.7k|        return make_relaxed_pos(node, shift, relaxed)
 1844|  21.7k|            .visit(v, std::forward<Args>(args)...);
 1845|  21.7k|    } else {
 1846|  2.65k|        return make_regular_sub_pos(node, shift, size)
 1847|  2.65k|            .visit(v, std::forward<Args>(args)...);
 1848|  2.65k|    }
 1849|  24.4k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_14equals_visitor10this_aux_tEJRjRSD_RNS1_16rrbtree_iteratorIiSB_Lj2ELj2EEERmEEEDcT_DpOT0_:
 1813|  21.7k|    {
 1814|  21.7k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  21.7k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE7nth_subINS1_14equals_visitorEJRSD_RNS1_16rrbtree_iteratorIiSB_Lj2ELj2EEERmEEEDcjT_DpOT0_:
 1793|  21.7k|    {
 1794|  21.7k|        auto child      = node_->inner()[offset];
 1795|  21.7k|        auto child_size = size(offset);
 1796|  21.7k|        auto is_leaf    = shift_ == BL;
 1797|  21.7k|        return is_leaf ? make_leaf_sub_pos(child, child_size).visit(v, args...)
  ------------------
  |  Branch (1797:16): [True: 0, False: 21.7k]
  ------------------
 1798|  21.7k|                       : visit_maybe_relaxed_sub(
 1799|  21.7k|                             child, shift_ - B, child_size, v, args...);
 1800|  21.7k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENS1_14equals_visitorEJRNS1_11relaxed_posISC_EERNS1_16rrbtree_iteratorIiSB_Lj2ELj2EEERmEEEDcPT_jmT0_DpOT1_:
 1838|  21.7k|{
 1839|  21.7k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 21.7k, False: 0]
  ------------------
 1840|  21.7k|    auto relaxed = node->relaxed();
 1841|  21.7k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 20.7k, False: 1.01k]
  ------------------
 1842|  20.7k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 20.7k, False: 0]
  ------------------
 1843|  20.7k|        return make_relaxed_pos(node, shift, relaxed)
 1844|  20.7k|            .visit(v, std::forward<Args>(args)...);
 1845|  20.7k|    } else {
 1846|  1.01k|        return make_regular_sub_pos(node, shift, size)
 1847|  1.01k|            .visit(v, std::forward<Args>(args)...);
 1848|  1.01k|    }
 1849|  21.7k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_14equals_visitorEJRSD_RNS1_16rrbtree_iteratorIiSB_Lj2ELj2EEERmEEEDcT_DpOT0_:
 1813|  20.7k|    {
 1814|  20.7k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  20.7k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_14equals_visitorEJRNS1_11relaxed_posISC_EERNS1_16rrbtree_iteratorIiSB_Lj2ELj2EEERmEEEDcT_DpOT0_:
 1036|  1.32k|    {
 1037|  1.32k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  1.32k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE7nth_subINS1_14equals_visitor10this_aux_tEJRjRNS1_15regular_sub_posISC_EERNS1_16rrbtree_iteratorIiSB_Lj2ELj2EEEmEEEDcjT_DpOT0_:
 1793|  6.51k|    {
 1794|  6.51k|        auto child      = node_->inner()[offset];
 1795|  6.51k|        auto child_size = size(offset);
 1796|  6.51k|        auto is_leaf    = shift_ == BL;
 1797|  6.51k|        return is_leaf ? make_leaf_sub_pos(child, child_size).visit(v, args...)
  ------------------
  |  Branch (1797:16): [True: 3.55k, False: 2.95k]
  ------------------
 1798|  6.51k|                       : visit_maybe_relaxed_sub(
 1799|  2.95k|                             child, shift_ - B, child_size, v, args...);
 1800|  6.51k|    }
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_14equals_visitor10this_aux_tEJRjRNS1_15regular_sub_posISC_EERNS1_16rrbtree_iteratorIiSB_Lj2ELj2EEERmEEEDcT_DpOT0_:
  144|  3.55k|    {
  145|  3.55k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  146|  3.55k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE12nth_sub_leafINS1_14equals_visitorEJRNS1_12leaf_sub_posISC_EERNS1_16rrbtree_iteratorIiSB_Lj2ELj2EEERmEEEDcjT_DpOT0_:
 1025|  3.55k|    {
 1026|  3.55k|        assert(shift_ == BL);
  ------------------
  |  Branch (1026:9): [True: 3.55k, False: 0]
  ------------------
 1027|  3.55k|        auto child   = node_->inner()[idx];
 1028|  3.55k|        auto lsize   = size(idx);
 1029|  3.55k|        auto is_full = idx + 1 < count();
 1030|  3.55k|        return is_full ? make_full_leaf_pos(child).visit(v, args...)
  ------------------
  |  Branch (1030:16): [True: 2.98k, False: 572]
  ------------------
 1031|  3.55k|                       : make_leaf_sub_pos(child, lsize).visit(v, args...);
 1032|  3.55k|    }
_ZN5immer6detail4rbts13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_14equals_visitorEJRNS1_12leaf_sub_posISC_EERNS1_16rrbtree_iteratorIiSB_Lj2ELj2EEERmEEEDcT_DpOT0_:
  207|  6.93k|    {
  208|  6.93k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  209|  6.93k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENS1_14equals_visitor10this_aux_tEJRjRNS1_15regular_sub_posISC_EERNS1_16rrbtree_iteratorIiSB_Lj2ELj2EEERmEEEDcPT_jmT0_DpOT1_:
 1838|  2.95k|{
 1839|  2.95k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 2.95k, False: 0]
  ------------------
 1840|  2.95k|    auto relaxed = node->relaxed();
 1841|  2.95k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 2.16k, False: 789]
  ------------------
 1842|  2.16k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 2.16k, False: 0]
  ------------------
 1843|  2.16k|        return make_relaxed_pos(node, shift, relaxed)
 1844|  2.16k|            .visit(v, std::forward<Args>(args)...);
 1845|  2.16k|    } else {
 1846|    789|        return make_regular_sub_pos(node, shift, size)
 1847|    789|            .visit(v, std::forward<Args>(args)...);
 1848|    789|    }
 1849|  2.95k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_14equals_visitor10this_aux_tEJRjRNS1_15regular_sub_posISC_EERNS1_16rrbtree_iteratorIiSB_Lj2ELj2EEERmEEEDcT_DpOT0_:
 1813|  2.16k|    {
 1814|  2.16k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  2.16k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE7nth_subINS1_14equals_visitorEJRNS1_11relaxed_posISC_EERNS1_16rrbtree_iteratorIiSB_Lj2ELj2EEERmEEEDcjT_DpOT0_:
 1007|  2.16k|    {
 1008|  2.16k|        assert(idx < count());
  ------------------
  |  Branch (1008:9): [True: 2.16k, False: 0]
  ------------------
 1009|  2.16k|        auto is_leaf = shift_ == BL;
 1010|  2.16k|        auto child   = node_->inner()[idx];
 1011|  2.16k|        auto lsize   = size(idx);
 1012|  2.16k|        auto is_full = idx + 1 < count();
 1013|  2.16k|        return is_full
  ------------------
  |  Branch (1013:16): [True: 1.86k, False: 309]
  ------------------
 1014|  2.16k|                   ? (is_leaf
  ------------------
  |  Branch (1014:23): [True: 0, False: 1.86k]
  ------------------
 1015|  1.86k|                          ? make_full_leaf_pos(child).visit(v, args...)
 1016|  1.86k|                          : make_full_pos(child, shift_ - B).visit(v, args...))
 1017|  2.16k|                   : (is_leaf
  ------------------
  |  Branch (1017:23): [True: 0, False: 309]
  ------------------
 1018|    309|                          ? make_leaf_sub_pos(child, lsize).visit(v, args...)
 1019|    309|                          : make_regular_sub_pos(child, shift_ - B, lsize)
 1020|    309|                                .visit(v, args...));
 1021|  2.16k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_14equals_visitorEJRNS1_11relaxed_posISC_EERNS1_16rrbtree_iteratorIiSB_Lj2ELj2EEERmEEEDcT_DpOT0_:
 1405|  2.74k|    {
 1406|  2.74k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1407|  2.74k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE7nth_subINS1_14equals_visitor10this_aux_tEJRjRNS1_8full_posISC_EERNS1_16rrbtree_iteratorIiSB_Lj2ELj2EEEmEEEDcjT_DpOT0_:
 1793|  5.82k|    {
 1794|  5.82k|        auto child      = node_->inner()[offset];
 1795|  5.82k|        auto child_size = size(offset);
 1796|  5.82k|        auto is_leaf    = shift_ == BL;
 1797|  5.82k|        return is_leaf ? make_leaf_sub_pos(child, child_size).visit(v, args...)
  ------------------
  |  Branch (1797:16): [True: 3.94k, False: 1.88k]
  ------------------
 1798|  5.82k|                       : visit_maybe_relaxed_sub(
 1799|  1.88k|                             child, shift_ - B, child_size, v, args...);
 1800|  5.82k|    }
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_14equals_visitor10this_aux_tEJRjRNS1_8full_posISC_EERNS1_16rrbtree_iteratorIiSB_Lj2ELj2EEERmEEEDcT_DpOT0_:
  144|  3.94k|    {
  145|  3.94k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  146|  3.94k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE12nth_sub_leafINS1_14equals_visitorEJRNS1_12leaf_sub_posISC_EERNS1_16rrbtree_iteratorIiSB_Lj2ELj2EEERmEEEDcjT_DpOT0_:
 1396|  3.94k|    {
 1397|  3.94k|        assert(shift_ == BL);
  ------------------
  |  Branch (1397:9): [True: 3.94k, False: 0]
  ------------------
 1398|  3.94k|        assert(idx < count());
  ------------------
  |  Branch (1398:9): [True: 3.94k, False: 0]
  ------------------
 1399|  3.94k|        auto child = node_->inner()[idx];
 1400|  3.94k|        return make_full_leaf_pos(child).visit(v, args...);
 1401|  3.94k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENS1_14equals_visitor10this_aux_tEJRjRNS1_8full_posISC_EERNS1_16rrbtree_iteratorIiSB_Lj2ELj2EEERmEEEDcPT_jmT0_DpOT1_:
 1838|  1.88k|{
 1839|  1.88k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 1.88k, False: 0]
  ------------------
 1840|  1.88k|    auto relaxed = node->relaxed();
 1841|  1.88k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 880, False: 1.00k]
  ------------------
 1842|    880|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 880, False: 0]
  ------------------
 1843|    880|        return make_relaxed_pos(node, shift, relaxed)
 1844|    880|            .visit(v, std::forward<Args>(args)...);
 1845|  1.00k|    } 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|  1.88k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_14equals_visitor10this_aux_tEJRjRNS1_8full_posISC_EERNS1_16rrbtree_iteratorIiSB_Lj2ELj2EEERmEEEDcT_DpOT0_:
 1813|    880|    {
 1814|    880|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|    880|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE7nth_subINS1_14equals_visitorEJRNS1_11relaxed_posISC_EERNS1_16rrbtree_iteratorIiSB_Lj2ELj2EEERmEEEDcjT_DpOT0_:
 1386|    880|    {
 1387|    880|        assert(idx < count());
  ------------------
  |  Branch (1387:9): [True: 880, False: 0]
  ------------------
 1388|    880|        auto is_leaf = shift_ == BL;
 1389|    880|        auto child   = node_->inner()[idx];
 1390|    880|        return is_leaf ? make_full_leaf_pos(child).visit(v, args...)
  ------------------
  |  Branch (1390:16): [True: 0, False: 880]
  ------------------
 1391|    880|                       : make_full_pos(child, shift_ - B).visit(v, args...);
 1392|    880|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_14equals_visitor10this_aux_tEJRjRNS1_8full_posISC_EERNS1_16rrbtree_iteratorIiSB_Lj2ELj2EEERmEEEDcT_DpOT0_:
 1036|  1.00k|    {
 1037|  1.00k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  1.00k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE7nth_subINS1_14equals_visitorEJRNS1_15regular_sub_posISC_EERNS1_16rrbtree_iteratorIiSB_Lj2ELj2EEERmEEEDcjT_DpOT0_:
 1386|  1.00k|    {
 1387|  1.00k|        assert(idx < count());
  ------------------
  |  Branch (1387:9): [True: 1.00k, False: 0]
  ------------------
 1388|  1.00k|        auto is_leaf = shift_ == BL;
 1389|  1.00k|        auto child   = node_->inner()[idx];
 1390|  1.00k|        return is_leaf ? make_full_leaf_pos(child).visit(v, args...)
  ------------------
  |  Branch (1390:16): [True: 0, False: 1.00k]
  ------------------
 1391|  1.00k|                       : make_full_pos(child, shift_ - B).visit(v, args...);
 1392|  1.00k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_14equals_visitorEJRNS1_15regular_sub_posISC_EERNS1_16rrbtree_iteratorIiSB_Lj2ELj2EEERmEEEDcT_DpOT0_:
 1405|  1.78k|    {
 1406|  1.78k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1407|  1.78k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE13each_pred_zipINS1_14equals_visitorEJEEEbT_PSC_DpOT0_:
 1222|  2.93k|    {
 1223|  2.93k|        auto p  = node_->inner();
 1224|  2.93k|        auto p2 = other->inner();
 1225|  2.93k|        auto e  = p + branches<B>;
 1226|  2.93k|        if (shift_ == BL) {
  ------------------
  |  Branch (1226:13): [True: 2.24k, False: 695]
  ------------------
 1227|  8.46k|            for (; p != e; ++p, ++p2) {
  ------------------
  |  Branch (1227:20): [True: 7.25k, False: 1.21k]
  ------------------
 1228|  7.25k|                IMMER_PREFETCH(p + 1);
 1229|  7.25k|                if (!make_full_leaf_pos(*p).visit(v, *p2, args...))
  ------------------
  |  Branch (1229:21): [True: 1.03k, False: 6.22k]
  ------------------
 1230|  1.03k|                    return false;
 1231|  7.25k|            }
 1232|  2.24k|        } else {
 1233|    695|            auto ss = shift_ - B;
 1234|  2.40k|            for (; p != e; ++p, ++p2)
  ------------------
  |  Branch (1234:20): [True: 2.09k, False: 304]
  ------------------
 1235|  2.09k|                if (!make_full_pos(*p, ss).visit(v, *p2, args...))
  ------------------
  |  Branch (1235:21): [True: 391, False: 1.70k]
  ------------------
 1236|    391|                    return false;
 1237|    695|        }
 1238|  1.51k|        return true;
 1239|  2.93k|    }
_ZN5immer6detail4rbts13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_14equals_visitorEJRPSC_EEEDcT_DpOT0_:
  207|  11.5k|    {
  208|  11.5k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  209|  11.5k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_14equals_visitorEJRPSC_EEEDcT_DpOT0_:
 1405|  7.02k|    {
 1406|  7.02k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1407|  7.02k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE13each_pred_zipINS1_14equals_visitorEJEEEbT_PSC_DpOT0_:
  837|  4.69k|    {
  838|  4.69k|        return each_pred_zip_regular(*this, v, other, args...);
  839|  4.69k|    }
_ZN5immer6detail4rbts21each_pred_zip_regularIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_14equals_visitorEJEEEbOT_T0_PNSt3__15decayISH_E4type6node_tEDpOT1_:
  392|  4.69k|{
  393|  4.69k|    constexpr auto B  = bits<Pos>;
  394|  4.69k|    constexpr auto BL = bits_leaf<Pos>;
  395|       |
  396|  4.69k|    auto n    = p.node()->inner();
  397|  4.69k|    auto n2   = other->inner();
  398|  4.69k|    auto last = p.count() - 1;
  399|  4.69k|    auto e    = n + last;
  400|  4.69k|    if (p.shift() == BL) {
  ------------------
  |  Branch (400:9): [True: 1.68k, False: 3.01k]
  ------------------
  401|  4.13k|        for (; n != e; ++n, ++n2) {
  ------------------
  |  Branch (401:16): [True: 2.95k, False: 1.17k]
  ------------------
  402|  2.95k|            IMMER_PREFETCH(n + 1);
  403|  2.95k|            IMMER_PREFETCH(n2 + 1);
  404|  2.95k|            if (!make_full_leaf_pos(*n).visit(v, *n2, args...))
  ------------------
  |  Branch (404:17): [True: 506, False: 2.45k]
  ------------------
  405|    506|                return false;
  406|  2.95k|        }
  407|  1.17k|        return make_leaf_pos(*n, p.size()).visit(v, *n2, args...);
  408|  3.01k|    } else {
  409|  3.01k|        auto ss = p.shift() - B;
  410|  6.09k|        for (; n != e; ++n, ++n2)
  ------------------
  |  Branch (410:16): [True: 3.67k, False: 2.42k]
  ------------------
  411|  3.67k|            if (!make_full_pos(*n, ss).visit(v, *n2, args...))
  ------------------
  |  Branch (411:17): [True: 587, False: 3.08k]
  ------------------
  412|    587|                return false;
  413|  2.42k|        return make_regular_pos(*n, ss, p.size()).visit(v, *n2, args...);
  414|  3.01k|    }
  415|  4.69k|}
_ZN5immer6detail4rbts8leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_14equals_visitorEJRPSC_EEEDcT_DpOT0_:
  112|  2.81k|    {
  113|  2.81k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  114|  2.81k|    }
_ZN5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_14equals_visitorEJRPSC_EEEDcT_DpOT0_:
  336|  3.45k|    {
  337|  3.45k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
  338|  3.45k|    }
_ZN5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE13each_pred_zipINS1_14equals_visitorEJEEEbT_PSC_DpOT0_:
  255|  3.12k|    {
  256|  3.12k|        return each_pred_zip_regular(*this, v, other, args...);
  257|  3.12k|    }
_ZN5immer6detail4rbts21each_pred_zip_regularIRNS1_11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_14equals_visitorEJEEEbOT_T0_PNSt3__15decayISH_E4type6node_tEDpOT1_:
  392|  3.12k|{
  393|  3.12k|    constexpr auto B  = bits<Pos>;
  394|  3.12k|    constexpr auto BL = bits_leaf<Pos>;
  395|       |
  396|  3.12k|    auto n    = p.node()->inner();
  397|  3.12k|    auto n2   = other->inner();
  398|  3.12k|    auto last = p.count() - 1;
  399|  3.12k|    auto e    = n + last;
  400|  3.12k|    if (p.shift() == BL) {
  ------------------
  |  Branch (400:9): [True: 1.87k, False: 1.24k]
  ------------------
  401|  2.94k|        for (; n != e; ++n, ++n2) {
  ------------------
  |  Branch (401:16): [True: 1.30k, False: 1.64k]
  ------------------
  402|  1.30k|            IMMER_PREFETCH(n + 1);
  403|  1.30k|            IMMER_PREFETCH(n2 + 1);
  404|  1.30k|            if (!make_full_leaf_pos(*n).visit(v, *n2, args...))
  ------------------
  |  Branch (404:17): [True: 239, False: 1.06k]
  ------------------
  405|    239|                return false;
  406|  1.30k|        }
  407|  1.64k|        return make_leaf_pos(*n, p.size()).visit(v, *n2, args...);
  408|  1.87k|    } else {
  409|  1.24k|        auto ss = p.shift() - B;
  410|  2.29k|        for (; n != e; ++n, ++n2)
  ------------------
  |  Branch (410:16): [True: 1.25k, False: 1.03k]
  ------------------
  411|  1.25k|            if (!make_full_pos(*n, ss).visit(v, *n2, args...))
  ------------------
  |  Branch (411:17): [True: 205, False: 1.05k]
  ------------------
  412|    205|                return false;
  413|  1.03k|        return make_regular_pos(*n, ss, p.size()).visit(v, *n2, args...);
  414|  1.24k|    }
  415|  3.12k|}
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE7nth_subINS1_24for_each_chunk_p_visitorEJZNS1_14equals_visitor13equal_chunk_pINS1_16rrbtree_iteratorIiSB_Lj2ELj2EEEEEDaOT_EUlSK_T0_E_EEEDcjSK_DpOT0_:
 1386|  4.51k|    {
 1387|  4.51k|        assert(idx < count());
  ------------------
  |  Branch (1387:9): [True: 4.51k, False: 0]
  ------------------
 1388|  4.51k|        auto is_leaf = shift_ == BL;
 1389|  4.51k|        auto child   = node_->inner()[idx];
 1390|  4.51k|        return is_leaf ? make_full_leaf_pos(child).visit(v, args...)
  ------------------
  |  Branch (1390:16): [True: 3.18k, False: 1.32k]
  ------------------
 1391|  4.51k|                       : make_full_pos(child, shift_ - B).visit(v, args...);
 1392|  4.51k|    }
_ZN5immer6detail4rbts13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_24for_each_chunk_p_visitorEJRZNS1_14equals_visitor13equal_chunk_pINS1_16rrbtree_iteratorIiSB_Lj2ELj2EEEEEDaOT_EUlSK_T0_E_EEEDcSK_DpOT0_:
  207|   303k|    {
  208|   303k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  209|   303k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENS1_18region_for_visitorIiEEJRmEEEDcPT_jmT0_DpOT1_:
 1838|  8.67M|{
 1839|  8.67M|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 8.67M, False: 0]
  ------------------
 1840|  8.67M|    auto relaxed = node->relaxed();
 1841|  8.67M|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 8.34M, False: 327k]
  ------------------
 1842|  8.34M|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 8.34M, False: 0]
  ------------------
 1843|  8.34M|        return make_relaxed_pos(node, shift, relaxed)
 1844|  8.34M|            .visit(v, std::forward<Args>(args)...);
 1845|  8.34M|    } else {
 1846|   327k|        return make_regular_sub_pos(node, shift, size)
 1847|   327k|            .visit(v, std::forward<Args>(args)...);
 1848|   327k|    }
 1849|  8.67M|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_18region_for_visitorIiEEJRmEEEDcT_DpOT0_:
 1813|  8.34M|    {
 1814|  8.34M|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  8.34M|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE7towardsINS1_18region_for_visitorIiEEJEEEDcT_mDpOT0_:
 1679|  8.34M|    {
 1680|  8.34M|        return towards_oh(v, idx, subindex(idx), args...);
 1681|  8.34M|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10towards_ohINS1_18region_for_visitorIiEEJEEEDcT_mjDpOT0_:
 1686|  8.34M|    {
 1687|  8.34M|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1687:9): [True: 8.34M, False: 0]
  ------------------
 1688|  8.34M|        auto left_size = offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0;
  ------------------
  |  Branch (1688:26): [True: 4.45M, False: 3.88M]
  ------------------
 1689|  8.34M|        return towards_oh_sbh(v, idx, offset_hint, left_size, args...);
 1690|  8.34M|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE14towards_oh_sbhINS1_18region_for_visitorIiEEJEEEDcT_mjmDpOT0_:
 1698|  8.34M|    {
 1699|  8.34M|        return towards_sub_oh_sbh(v, idx, offset_hint, left_size_hint, args...);
 1700|  8.34M|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE18towards_sub_oh_sbhINS1_18region_for_visitorIiEEJEEEDcT_mjmDpOT0_:
 1717|  8.34M|    {
 1718|  8.34M|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1718:9): [True: 8.34M, False: 0]
  ------------------
 1719|  8.34M|        assert(left_size_hint ==
  ------------------
  |  Branch (1719:9): [True: 4.45M, False: 3.88M]
  |  Branch (1719:9): [True: 8.34M, False: 0]
  ------------------
 1720|  8.34M|               (offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0));
 1721|  8.34M|        auto child     = node_->inner()[offset_hint];
 1722|  8.34M|        auto is_leaf   = shift_ == BL;
 1723|  8.34M|        auto next_size = relaxed_->d.sizes[offset_hint] - left_size_hint;
 1724|  8.34M|        auto next_idx  = idx - left_size_hint;
 1725|  8.34M|        return is_leaf
  ------------------
  |  Branch (1725:16): [True: 881k, False: 7.46M]
  ------------------
 1726|  8.34M|                   ? make_leaf_sub_pos(child, next_size)
 1727|   881k|                         .visit(v, next_idx, args...)
 1728|  8.34M|                   : visit_maybe_relaxed_sub(
 1729|  7.46M|                         child, shift_ - B, next_size, v, next_idx, args...);
 1730|  8.34M|    }
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_18region_for_visitorIiEEJRmEEEDcT_DpOT0_:
  144|   881k|    {
  145|   881k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  146|   881k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_18region_for_visitorIiEEJRmEEEDcT_DpOT0_:
 1036|   327k|    {
 1037|   327k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|   327k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE7towardsINS1_18region_for_visitorIiEEJEEEDcT_mDpOT0_:
  919|   327k|    {
  920|   327k|        return towards_oh_ch_regular(
  921|   327k|            *this, v, idx, index(idx), count(), args...);
  922|   327k|    }
_ZN5immer6detail4rbts21towards_oh_ch_regularIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_18region_for_visitorIiEEJEEEDcOT_T0_mjjDpOT1_:
  632|   327k|{
  633|   327k|    constexpr auto B  = bits<Pos>;
  634|   327k|    constexpr auto BL = bits_leaf<Pos>;
  635|   327k|    assert(offset_hint == p.index(idx));
  ------------------
  |  Branch (635:5): [True: 327k, False: 0]
  ------------------
  636|   327k|    assert(count_hint == p.count());
  ------------------
  |  Branch (636:5): [True: 327k, False: 0]
  ------------------
  637|   327k|    auto is_leaf = p.shift() == BL;
  638|   327k|    auto child   = p.node()->inner()[offset_hint];
  639|   327k|    auto is_full = offset_hint + 1 != count_hint;
  640|   327k|    return is_full
  ------------------
  |  Branch (640:12): [True: 238k, False: 89.1k]
  ------------------
  641|   327k|               ? (is_leaf ? make_full_leaf_pos(child).visit(v, idx, args...)
  ------------------
  |  Branch (641:19): [True: 43.2k, False: 195k]
  ------------------
  642|   238k|                          : make_full_pos(child, p.shift() - B)
  643|   195k|                                .visit(v, idx, args...))
  644|   327k|               : (is_leaf
  ------------------
  |  Branch (644:19): [True: 16.4k, False: 72.6k]
  ------------------
  645|  89.1k|                      ? make_leaf_pos(child, p.size()).visit(v, idx, args...)
  646|  89.1k|                      : make_regular_pos(child, p.shift() - B, p.size())
  647|  72.6k|                            .visit(v, idx, args...));
  648|   327k|}
_ZN5immer6detail4rbts13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_18region_for_visitorIiEEJRmEEEDcT_DpOT0_:
  207|   305k|    {
  208|   305k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  209|   305k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_18region_for_visitorIiEEJRmEEEDcT_DpOT0_:
 1405|   846k|    {
 1406|   846k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1407|   846k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE7towardsINS1_18region_for_visitorIiEEJEEEDcT_mDpOT0_:
 1322|   846k|    {
 1323|   846k|        return towards_oh(v, idx, index(idx), args...);
 1324|   846k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10towards_ohINS1_18region_for_visitorIiEEJEEEDcT_mjDpOT0_:
 1336|   846k|    {
 1337|   846k|        assert(offset_hint == index(idx));
  ------------------
  |  Branch (1337:9): [True: 846k, False: 0]
  ------------------
 1338|   846k|        auto is_leaf = shift_ == BL;
 1339|   846k|        auto child   = node_->inner()[offset_hint];
 1340|   846k|        return is_leaf
  ------------------
  |  Branch (1340:16): [True: 254k, False: 592k]
  ------------------
 1341|   846k|                   ? make_full_leaf_pos(child).visit(v, idx, args...)
 1342|   846k|                   : make_full_pos(child, shift_ - B).visit(v, idx, args...);
 1343|   846k|    }
_ZN5immer6detail4rbts8leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_18region_for_visitorIiEEJRmEEEDcT_DpOT0_:
  112|  21.9k|    {
  113|  21.9k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  114|  21.9k|    }
_ZN5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_18region_for_visitorIiEEJRmEEEDcT_DpOT0_:
  336|  95.2k|    {
  337|  95.2k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
  338|  95.2k|    }
_ZN5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE7towardsINS1_18region_for_visitorIiEEJEEEDcT_mDpOT0_:
  297|  95.2k|    {
  298|  95.2k|        return towards_oh_ch_regular(
  299|  95.2k|            *this, v, idx, index(idx), count(), args...);
  300|  95.2k|    }
_ZN5immer6detail4rbts21towards_oh_ch_regularIRNS1_11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_18region_for_visitorIiEEJEEEDcOT_T0_mjjDpOT1_:
  632|  95.2k|{
  633|  95.2k|    constexpr auto B  = bits<Pos>;
  634|  95.2k|    constexpr auto BL = bits_leaf<Pos>;
  635|  95.2k|    assert(offset_hint == p.index(idx));
  ------------------
  |  Branch (635:5): [True: 95.2k, False: 0]
  ------------------
  636|  95.2k|    assert(count_hint == p.count());
  ------------------
  |  Branch (636:5): [True: 95.2k, False: 0]
  ------------------
  637|  95.2k|    auto is_leaf = p.shift() == BL;
  638|  95.2k|    auto child   = p.node()->inner()[offset_hint];
  639|  95.2k|    auto is_full = offset_hint + 1 != count_hint;
  640|  95.2k|    return is_full
  ------------------
  |  Branch (640:12): [True: 67.2k, False: 27.9k]
  ------------------
  641|  95.2k|               ? (is_leaf ? make_full_leaf_pos(child).visit(v, idx, args...)
  ------------------
  |  Branch (641:19): [True: 8.45k, False: 58.8k]
  ------------------
  642|  67.2k|                          : make_full_pos(child, p.shift() - B)
  643|  58.8k|                                .visit(v, idx, args...))
  644|  95.2k|               : (is_leaf
  ------------------
  |  Branch (644:19): [True: 5.40k, False: 22.5k]
  ------------------
  645|  27.9k|                      ? make_leaf_pos(child, p.size()).visit(v, idx, args...)
  646|  27.9k|                      : make_regular_pos(child, p.shift() - B, p.size())
  647|  22.5k|                            .visit(v, idx, args...));
  648|  95.2k|}
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_24for_each_chunk_p_visitorEJRZNS1_14equals_visitor13equal_chunk_pINS1_16rrbtree_iteratorIiSB_Lj2ELj2EEEEEDaOT_EUlSK_T0_E_EEEDcSK_DpOT0_:
 1405|  81.1k|    {
 1406|  81.1k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1407|  81.1k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE9each_predINS1_24for_each_chunk_p_visitorEJRZNS1_14equals_visitor13equal_chunk_pINS1_16rrbtree_iteratorIiSB_Lj2ELj2EEEEEDaOT_EUlSK_T0_E_EEEbSK_DpOT0_:
 1202|  81.1k|    {
 1203|  81.1k|        auto p = node_->inner();
 1204|  81.1k|        auto e = p + branches<B>;
 1205|  81.1k|        if (shift_ == BL) {
  ------------------
  |  Branch (1205:13): [True: 63.8k, False: 17.3k]
  ------------------
 1206|   316k|            for (; p != e; ++p) {
  ------------------
  |  Branch (1206:20): [True: 254k, False: 62.7k]
  ------------------
 1207|   254k|                IMMER_PREFETCH(p + 1);
 1208|   254k|                if (!make_full_leaf_pos(*p).visit(v, args...))
  ------------------
  |  Branch (1208:21): [True: 1.06k, False: 253k]
  ------------------
 1209|  1.06k|                    return false;
 1210|   254k|            }
 1211|  63.8k|        } else {
 1212|  17.3k|            auto ss = shift_ - B;
 1213|  85.7k|            for (; p != e; ++p)
  ------------------
  |  Branch (1213:20): [True: 68.8k, False: 16.8k]
  ------------------
 1214|  68.8k|                if (!make_full_pos(*p, ss).visit(v, args...))
  ------------------
  |  Branch (1214:21): [True: 443, False: 68.3k]
  ------------------
 1215|    443|                    return false;
 1216|  17.3k|        }
 1217|  79.6k|        return true;
 1218|  81.1k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_14equals_visitor10this_aux_tEJRjRSD_RNS1_16rrbtree_iteratorIiSB_Lj2ELj2EEERmEEEDcT_DpOT0_:
 1036|    789|    {
 1037|    789|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|    789|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE7nth_subINS1_14equals_visitorEJRSD_RNS1_16rrbtree_iteratorIiSB_Lj2ELj2EEERmEEEDcjT_DpOT0_:
 1007|    789|    {
 1008|    789|        assert(idx < count());
  ------------------
  |  Branch (1008:9): [True: 789, False: 0]
  ------------------
 1009|    789|        auto is_leaf = shift_ == BL;
 1010|    789|        auto child   = node_->inner()[idx];
 1011|    789|        auto lsize   = size(idx);
 1012|    789|        auto is_full = idx + 1 < count();
 1013|    789|        return is_full
  ------------------
  |  Branch (1013:16): [True: 789, False: 0]
  ------------------
 1014|    789|                   ? (is_leaf
  ------------------
  |  Branch (1014:23): [True: 0, False: 789]
  ------------------
 1015|    789|                          ? make_full_leaf_pos(child).visit(v, args...)
 1016|    789|                          : make_full_pos(child, shift_ - B).visit(v, args...))
 1017|    789|                   : (is_leaf
  ------------------
  |  Branch (1017:23): [True: 0, False: 0]
  ------------------
 1018|      0|                          ? make_leaf_sub_pos(child, lsize).visit(v, args...)
 1019|      0|                          : make_regular_sub_pos(child, shift_ - B, lsize)
 1020|      0|                                .visit(v, args...));
 1021|    789|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_14equals_visitorEJRSD_RNS1_16rrbtree_iteratorIiSB_Lj2ELj2EEERmEEEDcT_DpOT0_:
 1036|  1.86k|    {
 1037|  1.86k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  1.86k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE7nth_subINS1_24for_each_chunk_p_visitorEJZNS1_14equals_visitor13equal_chunk_pINS1_16rrbtree_iteratorIiSB_Lj2ELj2EEEEEDaOT_EUlSK_T0_E_EEEDcjSK_DpOT0_:
 1007|  4.15k|    {
 1008|  4.15k|        assert(idx < count());
  ------------------
  |  Branch (1008:9): [True: 4.15k, False: 0]
  ------------------
 1009|  4.15k|        auto is_leaf = shift_ == BL;
 1010|  4.15k|        auto child   = node_->inner()[idx];
 1011|  4.15k|        auto lsize   = size(idx);
 1012|  4.15k|        auto is_full = idx + 1 < count();
 1013|  4.15k|        return is_full
  ------------------
  |  Branch (1013:16): [True: 1.46k, False: 2.69k]
  ------------------
 1014|  4.15k|                   ? (is_leaf
  ------------------
  |  Branch (1014:23): [True: 848, False: 616]
  ------------------
 1015|  1.46k|                          ? make_full_leaf_pos(child).visit(v, args...)
 1016|  1.46k|                          : make_full_pos(child, shift_ - B).visit(v, args...))
 1017|  4.15k|                   : (is_leaf
  ------------------
  |  Branch (1017:23): [True: 1.39k, False: 1.29k]
  ------------------
 1018|  2.69k|                          ? make_leaf_sub_pos(child, lsize).visit(v, args...)
 1019|  2.69k|                          : make_regular_sub_pos(child, shift_ - B, lsize)
 1020|  1.29k|                                .visit(v, args...));
 1021|  4.15k|    }
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_24for_each_chunk_p_visitorEJRZNS1_14equals_visitor13equal_chunk_pINS1_16rrbtree_iteratorIiSB_Lj2ELj2EEEEEDaOT_EUlSK_T0_E_EEEDcSK_DpOT0_:
  144|   866k|    {
  145|   866k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  146|   866k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_24for_each_chunk_p_visitorEJRZNS1_14equals_visitor13equal_chunk_pINS1_16rrbtree_iteratorIiSB_Lj2ELj2EEEEEDaOT_EUlSK_T0_E_EEEDcSK_DpOT0_:
 1036|  18.8k|    {
 1037|  18.8k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  18.8k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE9each_predINS1_24for_each_chunk_p_visitorEJRZNS1_14equals_visitor13equal_chunk_pINS1_16rrbtree_iteratorIiSB_Lj2ELj2EEEEEDaOT_EUlSK_T0_E_EEEbSK_DpOT0_:
  831|  18.8k|    {
  832|  18.8k|        return each_pred_regular(*this, v, args...);
  833|  18.8k|    }
_ZN5immer6detail4rbts17each_pred_regularIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_24for_each_chunk_p_visitorEJRZNS1_14equals_visitor13equal_chunk_pINS1_16rrbtree_iteratorIiSC_Lj2ELj2EEEEEDaOT_EUlSL_T0_E_EEEbSM_SN_DpOT1_:
  365|  18.8k|{
  366|  18.8k|    constexpr auto B  = bits<Pos>;
  367|  18.8k|    constexpr auto BL = bits_leaf<Pos>;
  368|  18.8k|    auto n            = p.node()->inner();
  369|  18.8k|    auto last         = p.count() - 1;
  370|  18.8k|    auto e            = n + last;
  371|  18.8k|    if (p.shift() == BL) {
  ------------------
  |  Branch (371:9): [True: 14.0k, False: 4.78k]
  ------------------
  372|  52.2k|        for (; n != e; ++n) {
  ------------------
  |  Branch (372:16): [True: 38.4k, False: 13.8k]
  ------------------
  373|  38.4k|            IMMER_PREFETCH(n + 1);
  374|  38.4k|            if (!make_full_leaf_pos(*n).visit(v, args...))
  ------------------
  |  Branch (374:17): [True: 210, False: 38.1k]
  ------------------
  375|    210|                return false;
  376|  38.4k|        }
  377|  13.8k|        return make_leaf_pos(*n, p.size()).visit(v, args...);
  378|  14.0k|    } else {
  379|  4.78k|        auto ss = p.shift() - B;
  380|  11.3k|        for (; n != e; ++n)
  ------------------
  |  Branch (380:16): [True: 7.12k, False: 4.18k]
  ------------------
  381|  7.12k|            if (!make_full_pos(*n, ss).visit(v, args...))
  ------------------
  |  Branch (381:17): [True: 596, False: 6.52k]
  ------------------
  382|    596|                return false;
  383|  4.18k|        return make_regular_pos(*n, ss, p.size()).visit(v, args...);
  384|  4.78k|    }
  385|  18.8k|}
_ZN5immer6detail4rbts8leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_24for_each_chunk_p_visitorEJRZNS1_14equals_visitor13equal_chunk_pINS1_16rrbtree_iteratorIiSB_Lj2ELj2EEEEEDaOT_EUlSK_T0_E_EEEDcSK_DpOT0_:
  112|  17.3k|    {
  113|  17.3k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  114|  17.3k|    }
_ZN5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_24for_each_chunk_p_visitorEJRZNS1_14equals_visitor13equal_chunk_pINS1_16rrbtree_iteratorIiSB_Lj2ELj2EEEEEDaOT_EUlSK_T0_E_EEEDcSK_DpOT0_:
  336|  6.03k|    {
  337|  6.03k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
  338|  6.03k|    }
_ZN5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE9each_predINS1_24for_each_chunk_p_visitorEJRZNS1_14equals_visitor13equal_chunk_pINS1_16rrbtree_iteratorIiSB_Lj2ELj2EEEEEDaOT_EUlSK_T0_E_EEEbSK_DpOT0_:
  249|  6.03k|    {
  250|  6.03k|        return each_pred_regular(*this, v, args...);
  251|  6.03k|    }
_ZN5immer6detail4rbts17each_pred_regularIRNS1_11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_24for_each_chunk_p_visitorEJRZNS1_14equals_visitor13equal_chunk_pINS1_16rrbtree_iteratorIiSC_Lj2ELj2EEEEEDaOT_EUlSL_T0_E_EEEbSM_SN_DpOT1_:
  365|  6.03k|{
  366|  6.03k|    constexpr auto B  = bits<Pos>;
  367|  6.03k|    constexpr auto BL = bits_leaf<Pos>;
  368|  6.03k|    auto n            = p.node()->inner();
  369|  6.03k|    auto last         = p.count() - 1;
  370|  6.03k|    auto e            = n + last;
  371|  6.03k|    if (p.shift() == BL) {
  ------------------
  |  Branch (371:9): [True: 3.74k, False: 2.29k]
  ------------------
  372|  10.5k|        for (; n != e; ++n) {
  ------------------
  |  Branch (372:16): [True: 7.07k, False: 3.46k]
  ------------------
  373|  7.07k|            IMMER_PREFETCH(n + 1);
  374|  7.07k|            if (!make_full_leaf_pos(*n).visit(v, args...))
  ------------------
  |  Branch (374:17): [True: 278, False: 6.80k]
  ------------------
  375|    278|                return false;
  376|  7.07k|        }
  377|  3.46k|        return make_leaf_pos(*n, p.size()).visit(v, args...);
  378|  3.74k|    } else {
  379|  2.29k|        auto ss = p.shift() - B;
  380|  5.09k|        for (; n != e; ++n)
  ------------------
  |  Branch (380:16): [True: 3.24k, False: 1.85k]
  ------------------
  381|  3.24k|            if (!make_full_pos(*n, ss).visit(v, args...))
  ------------------
  |  Branch (381:17): [True: 442, False: 2.80k]
  ------------------
  382|    442|                return false;
  383|  1.85k|        return make_regular_pos(*n, ss, p.size()).visit(v, args...);
  384|  2.29k|    }
  385|  6.03k|}
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_14equals_visitor10this_aux_tEJRjRNS1_11relaxed_posISC_EERNS1_16rrbtree_iteratorIiSB_Lj2ELj2EEERmEEEDcT_DpOT0_:
 1036|  2.65k|    {
 1037|  2.65k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  2.65k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE7nth_subINS1_14equals_visitorEJRNS1_15regular_sub_posISC_EERNS1_16rrbtree_iteratorIiSB_Lj2ELj2EEERmEEEDcjT_DpOT0_:
 1793|  2.65k|    {
 1794|  2.65k|        auto child      = node_->inner()[offset];
 1795|  2.65k|        auto child_size = size(offset);
 1796|  2.65k|        auto is_leaf    = shift_ == BL;
 1797|  2.65k|        return is_leaf ? make_leaf_sub_pos(child, child_size).visit(v, args...)
  ------------------
  |  Branch (1797:16): [True: 0, False: 2.65k]
  ------------------
 1798|  2.65k|                       : visit_maybe_relaxed_sub(
 1799|  2.65k|                             child, shift_ - B, child_size, v, args...);
 1800|  2.65k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENS1_14equals_visitorEJRNS1_15regular_sub_posISC_EERNS1_16rrbtree_iteratorIiSB_Lj2ELj2EEERmEEEDcPT_jmT0_DpOT1_:
 1838|  2.65k|{
 1839|  2.65k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 2.65k, False: 0]
  ------------------
 1840|  2.65k|    auto relaxed = node->relaxed();
 1841|  2.65k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 784, False: 1.86k]
  ------------------
 1842|    784|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 784, False: 0]
  ------------------
 1843|    784|        return make_relaxed_pos(node, shift, relaxed)
 1844|    784|            .visit(v, std::forward<Args>(args)...);
 1845|  1.86k|    } else {
 1846|  1.86k|        return make_regular_sub_pos(node, shift, size)
 1847|  1.86k|            .visit(v, std::forward<Args>(args)...);
 1848|  1.86k|    }
 1849|  2.65k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_14equals_visitorEJRNS1_15regular_sub_posISC_EERNS1_16rrbtree_iteratorIiSB_Lj2ELj2EEERmEEEDcT_DpOT0_:
 1813|    784|    {
 1814|    784|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|    784|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE7nth_subINS1_14equals_visitor10this_aux_tEJRjRNS1_11relaxed_posISC_EERNS1_16rrbtree_iteratorIiSB_Lj2ELj2EEEmEEEDcjT_DpOT0_:
 1007|  4.06k|    {
 1008|  4.06k|        assert(idx < count());
  ------------------
  |  Branch (1008:9): [True: 4.06k, False: 0]
  ------------------
 1009|  4.06k|        auto is_leaf = shift_ == BL;
 1010|  4.06k|        auto child   = node_->inner()[idx];
 1011|  4.06k|        auto lsize   = size(idx);
 1012|  4.06k|        auto is_full = idx + 1 < count();
 1013|  4.06k|        return is_full
  ------------------
  |  Branch (1013:16): [True: 3.75k, False: 312]
  ------------------
 1014|  4.06k|                   ? (is_leaf
  ------------------
  |  Branch (1014:23): [True: 2.25k, False: 1.49k]
  ------------------
 1015|  3.75k|                          ? make_full_leaf_pos(child).visit(v, args...)
 1016|  3.75k|                          : make_full_pos(child, shift_ - B).visit(v, args...))
 1017|  4.06k|                   : (is_leaf
  ------------------
  |  Branch (1017:23): [True: 312, False: 0]
  ------------------
 1018|    312|                          ? make_leaf_sub_pos(child, lsize).visit(v, args...)
 1019|    312|                          : make_regular_sub_pos(child, shift_ - B, lsize)
 1020|      0|                                .visit(v, args...));
 1021|  4.06k|    }
_ZN5immer6detail4rbts13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_14equals_visitor10this_aux_tEJRjRNS1_11relaxed_posISC_EERNS1_16rrbtree_iteratorIiSB_Lj2ELj2EEERmEEEDcT_DpOT0_:
  207|  4.79k|    {
  208|  4.79k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  209|  4.79k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE12nth_sub_leafINS1_14equals_visitorEJRNS1_13full_leaf_posISC_EERNS1_16rrbtree_iteratorIiSB_Lj2ELj2EEERmEEEDcjT_DpOT0_:
 1804|  4.79k|    {
 1805|  4.79k|        assert(shift_ == BL);
  ------------------
  |  Branch (1805:9): [True: 4.79k, False: 0]
  ------------------
 1806|  4.79k|        auto child      = node_->inner()[offset];
 1807|  4.79k|        auto child_size = size(offset);
 1808|  4.79k|        return make_leaf_sub_pos(child, child_size).visit(v, args...);
 1809|  4.79k|    }
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_14equals_visitorEJRNS1_13full_leaf_posISC_EERNS1_16rrbtree_iteratorIiSB_Lj2ELj2EEERmEEEDcT_DpOT0_:
  144|  4.79k|    {
  145|  4.79k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  146|  4.79k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_14equals_visitor10this_aux_tEJRjRNS1_11relaxed_posISC_EERNS1_16rrbtree_iteratorIiSB_Lj2ELj2EEERmEEEDcT_DpOT0_:
 1405|  2.68k|    {
 1406|  2.68k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1407|  2.68k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE7nth_subINS1_14equals_visitorEJRNS1_8full_posISC_EERNS1_16rrbtree_iteratorIiSB_Lj2ELj2EEERmEEEDcjT_DpOT0_:
 1793|  2.68k|    {
 1794|  2.68k|        auto child      = node_->inner()[offset];
 1795|  2.68k|        auto child_size = size(offset);
 1796|  2.68k|        auto is_leaf    = shift_ == BL;
 1797|  2.68k|        return is_leaf ? make_leaf_sub_pos(child, child_size).visit(v, args...)
  ------------------
  |  Branch (1797:16): [True: 0, False: 2.68k]
  ------------------
 1798|  2.68k|                       : visit_maybe_relaxed_sub(
 1799|  2.68k|                             child, shift_ - B, child_size, v, args...);
 1800|  2.68k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENS1_14equals_visitorEJRNS1_8full_posISC_EERNS1_16rrbtree_iteratorIiSB_Lj2ELj2EEERmEEEDcPT_jmT0_DpOT1_:
 1838|  2.68k|{
 1839|  2.68k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 2.68k, False: 0]
  ------------------
 1840|  2.68k|    auto relaxed = node->relaxed();
 1841|  2.68k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 1.62k, False: 1.05k]
  ------------------
 1842|  1.62k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 1.62k, False: 0]
  ------------------
 1843|  1.62k|        return make_relaxed_pos(node, shift, relaxed)
 1844|  1.62k|            .visit(v, std::forward<Args>(args)...);
 1845|  1.62k|    } else {
 1846|  1.05k|        return make_regular_sub_pos(node, shift, size)
 1847|  1.05k|            .visit(v, std::forward<Args>(args)...);
 1848|  1.05k|    }
 1849|  2.68k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_14equals_visitorEJRNS1_8full_posISC_EERNS1_16rrbtree_iteratorIiSB_Lj2ELj2EEERmEEEDcT_DpOT0_:
 1813|  1.62k|    {
 1814|  1.62k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  1.62k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE7nth_subINS1_14equals_visitor10this_aux_tEJRjRNS1_11relaxed_posISC_EERNS1_16rrbtree_iteratorIiSB_Lj2ELj2EEEmEEEDcjT_DpOT0_:
 1386|  3.71k|    {
 1387|  3.71k|        assert(idx < count());
  ------------------
  |  Branch (1387:9): [True: 3.71k, False: 0]
  ------------------
 1388|  3.71k|        auto is_leaf = shift_ == BL;
 1389|  3.71k|        auto child   = node_->inner()[idx];
 1390|  3.71k|        return is_leaf ? make_full_leaf_pos(child).visit(v, args...)
  ------------------
  |  Branch (1390:16): [True: 2.53k, False: 1.18k]
  ------------------
 1391|  3.71k|                       : make_full_pos(child, shift_ - B).visit(v, args...);
 1392|  3.71k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_14equals_visitorEJRNS1_8full_posISC_EERNS1_16rrbtree_iteratorIiSB_Lj2ELj2EEERmEEEDcT_DpOT0_:
 1036|  1.05k|    {
 1037|  1.05k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  1.05k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE7nth_subINS1_24for_each_chunk_p_visitorEJZNS1_14equals_visitor13equal_chunk_pINS1_16rrbtree_iteratorIiSB_Lj2ELj2EEEEEDaOT_EUlSK_T0_E_EEEDcjSK_DpOT0_:
 1793|  22.7k|    {
 1794|  22.7k|        auto child      = node_->inner()[offset];
 1795|  22.7k|        auto child_size = size(offset);
 1796|  22.7k|        auto is_leaf    = shift_ == BL;
 1797|  22.7k|        return is_leaf ? make_leaf_sub_pos(child, child_size).visit(v, args...)
  ------------------
  |  Branch (1797:16): [True: 7.97k, False: 14.7k]
  ------------------
 1798|  22.7k|                       : visit_maybe_relaxed_sub(
 1799|  14.7k|                             child, shift_ - B, child_size, v, args...);
 1800|  22.7k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENS1_24for_each_chunk_p_visitorEJRZNS1_14equals_visitor13equal_chunk_pINS1_16rrbtree_iteratorIiSB_Lj2ELj2EEEEEDaOT_EUlSI_T0_E_EEEDcPSI_jmSK_DpOT1_:
 1838|   587k|{
 1839|   587k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 587k, False: 0]
  ------------------
 1840|   587k|    auto relaxed = node->relaxed();
 1841|   587k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 569k, False: 17.5k]
  ------------------
 1842|   569k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 569k, False: 0]
  ------------------
 1843|   569k|        return make_relaxed_pos(node, shift, relaxed)
 1844|   569k|            .visit(v, std::forward<Args>(args)...);
 1845|   569k|    } else {
 1846|  17.5k|        return make_regular_sub_pos(node, shift, size)
 1847|  17.5k|            .visit(v, std::forward<Args>(args)...);
 1848|  17.5k|    }
 1849|   587k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_24for_each_chunk_p_visitorEJRZNS1_14equals_visitor13equal_chunk_pINS1_16rrbtree_iteratorIiSB_Lj2ELj2EEEEEDaOT_EUlSK_T0_E_EEEDcSK_DpOT0_:
 1813|   569k|    {
 1814|   569k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|   569k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE9each_predINS1_24for_each_chunk_p_visitorEJRZNS1_14equals_visitor13equal_chunk_pINS1_16rrbtree_iteratorIiSB_Lj2ELj2EEEEEDaOT_EUlSK_T0_E_EEEbSK_DpOT0_:
 1482|   569k|    {
 1483|   569k|        auto p = node_->inner();
 1484|   569k|        auto s = size_t{};
 1485|   569k|        auto n = count();
 1486|   569k|        if (shift_ == BL) {
  ------------------
  |  Branch (1486:13): [True: 257k, False: 311k]
  ------------------
 1487|  1.11M|            for (auto i = count_t{0}; i < n; ++i) {
  ------------------
  |  Branch (1487:39): [True: 856k, False: 257k]
  ------------------
 1488|   856k|                IMMER_PREFETCH(p + i + 1);
 1489|   856k|                if (!make_leaf_sub_pos(p[i], relaxed_->d.sizes[i] - s)
  ------------------
  |  Branch (1489:21): [True: 350, False: 856k]
  ------------------
 1490|   856k|                         .visit(v, args...))
 1491|    350|                    return false;
 1492|   856k|                s = relaxed_->d.sizes[i];
 1493|   856k|            }
 1494|   311k|        } else {
 1495|   311k|            auto ss = shift_ - B;
 1496|   884k|            for (auto i = count_t{0}; i < n; ++i) {
  ------------------
  |  Branch (1496:39): [True: 572k, False: 311k]
  ------------------
 1497|   572k|                if (!visit_maybe_relaxed_sub(
  ------------------
  |  Branch (1497:21): [True: 444, False: 572k]
  ------------------
 1498|   572k|                        p[i], ss, relaxed_->d.sizes[i] - s, v, args...))
 1499|    444|                    return false;
 1500|   572k|                s = relaxed_->d.sizes[i];
 1501|   572k|            }
 1502|   311k|        }
 1503|   569k|        return true;
 1504|   569k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_14equals_visitorEJRNS1_11relaxed_posISC_EERNS1_16rrbtree_iteratorIiSB_Lj2ELj2EEEmEEEDcT_DpOT0_:
 1036|  3.06k|    {
 1037|  3.06k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  3.06k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE15first_sub_innerINS1_14equals_visitor3rrbEJRNS1_16rrbtree_iteratorIiSB_Lj2ELj2EEERPSC_RjRmEEEDcT_DpOT0_:
 1783|  1.40k|    {
 1784|  1.40k|        assert(shift_ > BL);
  ------------------
  |  Branch (1784:9): [True: 1.40k, False: 0]
  ------------------
 1785|  1.40k|        auto child      = node_->inner()[0];
 1786|  1.40k|        auto child_size = relaxed_->d.sizes[0];
 1787|  1.40k|        return visit_maybe_relaxed_sub(
 1788|  1.40k|            child, shift_ - B, child_size, v, args...);
 1789|  1.40k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENS1_14equals_visitor3rrbEJRNS1_16rrbtree_iteratorIiSB_Lj2ELj2EEERPSC_RjRmEEEDcPT_jmT0_DpOT1_:
 1838|  1.40k|{
 1839|  1.40k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 1.40k, False: 0]
  ------------------
 1840|  1.40k|    auto relaxed = node->relaxed();
 1841|  1.40k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 1.40k, False: 0]
  ------------------
 1842|  1.40k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 1.40k, False: 0]
  ------------------
 1843|  1.40k|        return make_relaxed_pos(node, shift, relaxed)
 1844|  1.40k|            .visit(v, std::forward<Args>(args)...);
 1845|  1.40k|    } else {
 1846|      0|        return make_regular_sub_pos(node, shift, size)
 1847|      0|            .visit(v, std::forward<Args>(args)...);
 1848|      0|    }
 1849|  1.40k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_14equals_visitor3rrbEJRNS1_16rrbtree_iteratorIiSB_Lj2ELj2EEERPSC_RjRmEEEDcT_DpOT0_:
 1813|  1.40k|    {
 1814|  1.40k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  1.40k|    }
_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENS1_14equals_visitorEJRNS1_15regular_sub_posISC_EERNS1_16rrbtree_iteratorIiSB_Lj2ELj2EEEmEEEDcPT_jmT0_DpOT1_:
 1838|  5.97k|{
 1839|  5.97k|    assert(node);
  ------------------
  |  Branch (1839:5): [True: 5.97k, False: 0]
  ------------------
 1840|  5.97k|    auto relaxed = node->relaxed();
 1841|  5.97k|    if (relaxed) {
  ------------------
  |  Branch (1841:9): [True: 1.59k, False: 4.37k]
  ------------------
 1842|  1.59k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
  ------------------
  |  Branch (1842:9): [True: 1.59k, False: 0]
  ------------------
 1843|  1.59k|        return make_relaxed_pos(node, shift, relaxed)
 1844|  1.59k|            .visit(v, std::forward<Args>(args)...);
 1845|  4.37k|    } else {
 1846|  4.37k|        return make_regular_sub_pos(node, shift, size)
 1847|  4.37k|            .visit(v, std::forward<Args>(args)...);
 1848|  4.37k|    }
 1849|  5.97k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_14equals_visitorEJRNS1_15regular_sub_posISC_EERNS1_16rrbtree_iteratorIiSB_Lj2ELj2EEEmEEEDcT_DpOT0_:
 1813|  1.59k|    {
 1814|  1.59k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1815|  1.59k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_14equals_visitorEJRSD_RNS1_16rrbtree_iteratorIiSB_Lj2ELj2EEEmEEEDcT_DpOT0_:
 1036|  4.37k|    {
 1037|  4.37k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  4.37k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_14equals_visitor3rrbEJNS1_16rrbtree_iteratorIiSB_Lj2ELj2EEERKPSC_RKjRmEEEDcT_DpOT0_:
 1036|  5.97k|    {
 1037|  5.97k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1038|  5.97k|    }
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_14equals_visitorEJRKPSC_EEEDcT_DpOT0_:
  144|  6.59k|    {
  145|  6.59k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  146|  6.59k|    }

_ZN5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEC2Ev:
  114|  1.53M|        : size{0}
  115|  1.53M|        , shift{BL}
  116|  1.53M|        , root{empty_root()}
  117|  1.53M|        , tail{empty_tail()}
  118|  1.53M|    {
  119|       |        assert(check_tree());
  ------------------
  |  Branch (119:9): [True: 1.53M, False: 0]
  ------------------
  120|  1.53M|    }
_ZN5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE10empty_rootEv:
   61|  1.55M|    {
   62|  1.55M|        static const auto empty_ = [] {
   63|  1.55M|            constexpr auto size = node_t::sizeof_inner_n(0);
   64|  1.55M|            static std::aligned_storage_t<size, alignof(std::max_align_t)>
   65|  1.55M|                storage;
   66|  1.55M|            return node_t::make_inner_n_into(&storage, size, 0u);
   67|  1.55M|        }();
   68|  1.55M|        return empty_->inc();
   69|  1.55M|    }
_ZZN5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE10empty_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_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE10empty_tailEv:
   72|  1.53M|    {
   73|  1.53M|        static const auto empty_ = [] {
   74|  1.53M|            constexpr auto size = node_t::sizeof_leaf_n(0);
   75|  1.53M|            static std::aligned_storage_t<size, alignof(std::max_align_t)>
   76|  1.53M|                storage;
   77|  1.53M|            return node_t::make_leaf_n_into(&storage, size, 0u);
   78|  1.53M|        }();
   79|  1.53M|        return empty_->inc();
   80|  1.53M|    }
_ZZN5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE10empty_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_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE10check_treeEv:
 1372|  3.06M|    {
 1373|  3.06M|        IMMER_INVALID_STATE_ASSERT(shift <= sizeof(size_t) * 8 - BL);
  ------------------
  |  |   32|  3.06M|    if (!(expr))                                                               \
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 3.06M]
  |  |  ------------------
  |  |   33|  3.06M|    IMMER_THROW(invalid_tree{})
  |  |  ------------------
  |  |  |  |   51|      0|#define IMMER_THROW(expr) throw expr
  |  |  ------------------
  ------------------
 1374|  3.06M|        IMMER_INVALID_STATE_ASSERT(shift >= BL);
  ------------------
  |  |   32|  3.06M|    if (!(expr))                                                               \
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 3.06M]
  |  |  ------------------
  |  |   33|  3.06M|    IMMER_THROW(invalid_tree{})
  |  |  ------------------
  |  |  |  |   51|      0|#define IMMER_THROW(expr) throw expr
  |  |  ------------------
  ------------------
 1375|  3.06M|        IMMER_INVALID_STATE_ASSERT(tail_offset() <= size);
  ------------------
  |  |   32|  3.06M|    if (!(expr))                                                               \
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 3.06M]
  |  |  ------------------
  |  |   33|  3.06M|    IMMER_THROW(invalid_tree{})
  |  |  ------------------
  |  |  |  |   51|      0|#define IMMER_THROW(expr) throw expr
  |  |  ------------------
  ------------------
 1376|  3.06M|        IMMER_INVALID_STATE_ASSERT(tail_size() <= branches<BL>);
  ------------------
  |  |   32|  3.06M|    if (!(expr))                                                               \
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 3.06M]
  |  |  ------------------
  |  |   33|  3.06M|    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|  3.06M|        return true;
 1382|  3.06M|    }
_ZNK5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE11tail_offsetEv:
  197|  14.9M|    {
  198|  14.9M|        auto r = root->relaxed();
  199|  14.9M|        assert(r == nullptr || r->d.count);
  ------------------
  |  Branch (199:9): [True: 7.52M, False: 7.40M]
  |  Branch (199:9): [True: 7.40M, False: 0]
  |  Branch (199:9): [True: 14.9M, False: 0]
  ------------------
  200|  14.9M|        return r      ? r->d.sizes[r->d.count - 1]
  ------------------
  |  Branch (200:16): [True: 7.40M, False: 7.52M]
  ------------------
  201|  14.9M|               : size ? (size - 1) & ~mask<BL>
  ------------------
  |  Branch (201:18): [True: 2.89M, False: 4.63M]
  ------------------
  202|       |                      /* otherwise */
  203|  7.52M|                      : 0;
  204|  14.9M|    }
_ZNK5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE9tail_sizeEv:
  194|  3.56M|    auto tail_size() const { return size - tail_offset(); }
_ZN5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EED2Ev:
  184|  3.06M|    ~rrbtree() { dec(); }
_ZNK5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE3decEv:
  192|  3.06M|    void dec() const { traverse(dec_visitor()); }
_ZNK5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE8traverseINS1_11dec_visitorEJEEEvT_DpOT0_:
  208|  3.06M|    {
  209|  3.06M|        auto tail_off  = tail_offset();
  210|  3.06M|        auto tail_size = size - tail_off;
  211|       |
  212|  3.06M|        if (tail_off)
  ------------------
  |  Branch (212:13): [True: 1.43M, False: 1.63M]
  ------------------
  213|  1.43M|            visit_maybe_relaxed_sub(root, shift, tail_off, v, args...);
  214|  1.63M|        else
  215|  1.63M|            make_empty_regular_pos(root).visit(v, args...);
  216|       |
  217|  3.06M|        if (tail_size)
  ------------------
  |  Branch (217:13): [True: 1.52M, False: 1.53M]
  ------------------
  218|  1.52M|            make_leaf_sub_pos(tail, tail_size).visit(v, args...);
  219|  1.53M|        else
  220|  1.53M|            make_empty_leaf_pos(tail).visit(v, args...);
  221|  3.06M|    }
_ZNK5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE9push_backEi:
  500|   460k|    {
  501|   460k|        auto ts = tail_size();
  502|   460k|        if (ts < branches<BL>) {
  ------------------
  |  Branch (502:13): [True: 337k, False: 122k]
  ------------------
  503|   337k|            auto new_tail =
  504|   337k|                node_t::copy_leaf_emplace(tail, ts, std::move(value));
  505|   337k|            return {size + 1, shift, root->inc(), new_tail};
  506|   337k|        } else {
  507|   122k|            using std::get;
  508|   122k|            auto new_tail = node_t::make_leaf_n(1u, std::move(value));
  509|   122k|            auto tail_off = tail_offset();
  510|   122k|            IMMER_TRY {
  ------------------
  |  |   49|   122k|#define IMMER_TRY try
  ------------------
  511|   122k|                auto new_root =
  512|   122k|                    push_tail(root, shift, tail_off, tail, size - tail_off);
  513|   122k|                tail->inc();
  514|   122k|                return {size + 1, get<0>(new_root), get<1>(new_root), new_tail};
  515|   122k|            }
  516|   122k|            IMMER_CATCH (...) {
  517|      0|                node_t::delete_leaf(new_tail, 1u);
  518|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  519|      0|            }
  520|   122k|        }
  521|   460k|    }
_ZN5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEC2EmjPNS1_4nodeIiSA_Lj2ELj2EEESE_:
  127|  1.53M|        : size{sz}
  128|  1.53M|        , shift{sh}
  129|  1.53M|        , root{r}
  130|  1.53M|        , tail{t}
  131|  1.53M|    {
  132|  1.53M|#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|  1.53M|        try {
  137|  1.53M|            check_tree();
  138|  1.53M|        } 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|  1.53M|    }
_ZNK5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE9push_tailEPNS1_4nodeIiSA_Lj2ELj2EEEjmSE_j:
  369|   535k|    {
  370|   535k|        if (auto r = root->relaxed()) {
  ------------------
  |  Branch (370:18): [True: 215k, False: 320k]
  ------------------
  371|   215k|            auto new_root =
  372|   215k|                make_relaxed_pos(root, shift, r)
  373|   215k|                    .visit(push_tail_visitor<node_t>{}, tail, tail_size);
  374|   215k|            if (new_root)
  ------------------
  |  Branch (374:17): [True: 213k, False: 1.80k]
  ------------------
  375|   213k|                return std::make_tuple(shift, new_root);
  376|  1.80k|            else {
  377|  1.80k|                auto new_root = node_t::make_inner_r_n(2);
  378|  1.80k|                IMMER_TRY {
  ------------------
  |  |   49|  1.80k|#define IMMER_TRY try
  ------------------
  379|  1.80k|                    auto new_path        = node_t::make_path(shift, tail);
  380|  1.80k|                    new_root->inner()[0] = root->inc();
  381|  1.80k|                    new_root->inner()[1] = new_path;
  382|  1.80k|                    new_root->relaxed()->d.sizes[0] = size;
  383|  1.80k|                    new_root->relaxed()->d.sizes[1] = size + tail_size;
  384|  1.80k|                    assert(size);
  ------------------
  |  Branch (384:21): [True: 1.80k, False: 0]
  ------------------
  385|  1.80k|                    assert(tail_size);
  ------------------
  |  Branch (385:21): [True: 1.80k, False: 0]
  ------------------
  386|  1.80k|                    new_root->relaxed()->d.count = 2u;
  387|  1.80k|                }
  388|  1.80k|                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|  1.80k|                return std::make_tuple(shift + B, new_root);
  393|  1.80k|            }
  394|   320k|        } else if (size == size_t{branches<B>} << shift) {
  ------------------
  |  Branch (394:20): [True: 4.85k, False: 315k]
  ------------------
  395|  4.85k|            auto new_root = node_t::make_inner_n(2);
  396|  4.85k|            IMMER_TRY {
  ------------------
  |  |   49|  4.85k|#define IMMER_TRY try
  ------------------
  397|  4.85k|                auto new_path        = node_t::make_path(shift, tail);
  398|  4.85k|                new_root->inner()[0] = root->inc();
  399|  4.85k|                new_root->inner()[1] = new_path;
  400|  4.85k|            }
  401|  4.85k|            IMMER_CATCH (...) {
  402|      0|                node_t::delete_inner(new_root, 2);
  403|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  404|      0|            }
  405|  4.85k|            return std::make_tuple(shift + B, new_root);
  406|   315k|        } else if (size) {
  ------------------
  |  Branch (406:20): [True: 304k, False: 10.4k]
  ------------------
  407|   304k|            auto new_root = make_regular_sub_pos(root, shift, size)
  408|   304k|                                .visit(push_tail_visitor<node_t>{}, tail);
  409|   304k|            return std::make_tuple(shift, new_root);
  410|   304k|        } else {
  411|  10.4k|            return std::make_tuple(shift, node_t::make_path(shift, tail));
  412|  10.4k|        }
  413|   535k|    }
_ZN5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEC2EOSB_:
  157|  1.46M|        : rrbtree{}
  158|  1.46M|    {
  159|  1.46M|        swap(*this, other);
  160|  1.46M|    }
_ZN5immer6detail4rbts4swapERNS1_7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEESC_:
  176|  3.41M|    {
  177|  3.41M|        using std::swap;
  178|  3.41M|        swap(x.size, y.size);
  179|  3.41M|        swap(x.shift, y.shift);
  180|  3.41M|        swap(x.root, y.root);
  181|  3.41M|        swap(x.tail, y.tail);
  182|  3.41M|    }
_ZN5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEaSEOSB_:
  170|  1.95M|    {
  171|  1.95M|        swap(*this, other);
  172|  1.95M|        return *this;
  173|  1.95M|    }
flex-vector.cpp:_ZNK5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE6updateIZZ22LLVMFuzzerTestOneInputENK3$_6clI12fuzzer_inputEEDaRT_EUlSG_E_EESB_mOSG_:
  580|   119k|    {
  581|   119k|        auto tail_off = tail_offset();
  582|   119k|        if (idx >= tail_off) {
  ------------------
  |  Branch (582:13): [True: 46.0k, False: 73.8k]
  ------------------
  583|  46.0k|            auto tail_size = size - tail_off;
  584|  46.0k|            auto new_tail =
  585|  46.0k|                make_leaf_sub_pos(tail, tail_size)
  586|  46.0k|                    .visit(update_visitor<node_t>{}, idx - tail_off, fn);
  587|  46.0k|            return {size, shift, root->inc(), new_tail};
  588|  73.8k|        } else {
  589|  73.8k|            auto new_root = visit_maybe_relaxed_sub(
  590|  73.8k|                root, shift, tail_off, update_visitor<node_t>{}, idx, fn);
  591|  73.8k|            return {size, shift, new_root, tail->inc()};
  592|  73.8k|        }
  593|   119k|    }
_ZNK5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE4takeEm:
  647|  24.1k|    {
  648|  24.1k|        auto tail_off = tail_offset();
  649|  24.1k|        if (new_size == 0) {
  ------------------
  |  Branch (649:13): [True: 3.32k, False: 20.7k]
  ------------------
  650|  3.32k|            return {};
  651|  20.7k|        } else if (new_size >= size) {
  ------------------
  |  Branch (651:20): [True: 1.43k, False: 19.3k]
  ------------------
  652|  1.43k|            return *this;
  653|  19.3k|        } else if (new_size > tail_off) {
  ------------------
  |  Branch (653:20): [True: 1.82k, False: 17.5k]
  ------------------
  654|  1.82k|            auto new_tail = node_t::copy_leaf(tail, new_size - tail_off);
  655|  1.82k|            return {new_size, shift, root->inc(), new_tail};
  656|  17.5k|        } else {
  657|  17.5k|            using std::get;
  658|  17.5k|            auto l = new_size - 1;
  659|  17.5k|            auto v = slice_right_visitor<node_t>();
  660|  17.5k|            auto r = visit_maybe_relaxed_sub(root, shift, tail_off, v, l);
  661|  17.5k|            auto new_shift = get<0>(r);
  662|  17.5k|            auto new_root  = get<1>(r);
  663|  17.5k|            auto new_tail  = get<3>(r);
  664|  17.5k|            if (new_root) {
  ------------------
  |  Branch (664:17): [True: 13.5k, False: 3.94k]
  ------------------
  665|  13.5k|                IMMER_ASSERT_TAGGED(new_root->compute_shift() == get<0>(r));
  ------------------
  |  |   68|  13.5k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (665:17): [True: 13.5k, False: 0]
  ------------------
  666|  13.5k|                assert(new_root->check(new_shift, new_size - get<2>(r)));
  ------------------
  |  Branch (666:17): [True: 13.5k, False: 0]
  ------------------
  667|  13.5k|                return {new_size, new_shift, new_root, new_tail};
  668|  13.5k|            } else {
  669|  3.94k|                return {new_size, BL, empty_root(), new_tail};
  670|  3.94k|            }
  671|  17.5k|        }
  672|  24.1k|    }
_ZN5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEC2ERKSB_:
  151|  10.2k|        : rrbtree{other.size, other.shift, other.root, other.tail}
  152|  10.2k|    {
  153|  10.2k|        inc();
  154|  10.2k|    }
_ZNK5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE3incEv:
  187|  10.2k|    {
  188|  10.2k|        root->inc();
  189|  10.2k|        tail->inc();
  190|  10.2k|    }
_ZNK5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE4dropEm:
  711|  25.6k|    {
  712|  25.6k|        if (elems == 0) {
  ------------------
  |  Branch (712:13): [True: 2.32k, False: 23.3k]
  ------------------
  713|  2.32k|            return *this;
  714|  23.3k|        } else if (elems >= size) {
  ------------------
  |  Branch (714:20): [True: 2.15k, False: 21.2k]
  ------------------
  715|  2.15k|            return {};
  716|  21.2k|        } else if (elems == tail_offset()) {
  ------------------
  |  Branch (716:20): [True: 1.67k, False: 19.5k]
  ------------------
  717|  1.67k|            return {size - elems, BL, empty_root(), tail->inc()};
  718|  19.5k|        } else if (elems > tail_offset()) {
  ------------------
  |  Branch (718:20): [True: 2.00k, False: 17.5k]
  ------------------
  719|  2.00k|            auto tail_off = tail_offset();
  720|  2.00k|            auto new_tail =
  721|  2.00k|                node_t::copy_leaf(tail, elems - tail_off, size - tail_off);
  722|  2.00k|            return {size - elems, BL, empty_root(), new_tail};
  723|  17.5k|        } else {
  724|  17.5k|            using std::get;
  725|  17.5k|            auto v = slice_left_visitor<node_t>();
  726|  17.5k|            auto r =
  727|  17.5k|                visit_maybe_relaxed_sub(root, shift, tail_offset(), v, elems);
  728|  17.5k|            auto new_root  = get<1>(r);
  729|  17.5k|            auto new_shift = get<0>(r);
  730|  17.5k|            return {size - elems, new_shift, new_root, tail->inc()};
  731|  17.5k|        }
  732|  25.6k|    }
_ZN5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE8max_sizeEv:
   54|  1.91M|    {
   55|  1.91M|        auto S = sizeof(size_t) * 8;
   56|  1.91M|        return ((size_t{1} << BL) - std::min(size_t{BL}, size_t{2})) *
   57|  1.91M|               ipow((size_t{1} << B) - 2, (S - BL) / B);
   58|  1.91M|    }
_ZNK5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE6concatERKSB_:
  735|   803k|    {
  736|   803k|        assert(r.size + size <= max_size());
  ------------------
  |  Branch (736:9): [True: 803k, False: 0]
  ------------------
  737|   803k|        using std::get;
  738|   803k|        if (size == 0)
  ------------------
  |  Branch (738:13): [True: 2.49k, False: 800k]
  ------------------
  739|  2.49k|            return r;
  740|   800k|        else if (r.size == 0)
  ------------------
  |  Branch (740:18): [True: 1.65k, False: 798k]
  ------------------
  741|  1.65k|            return *this;
  742|   798k|        else if (r.tail_offset() == 0) {
  ------------------
  |  Branch (742:18): [True: 420k, False: 378k]
  ------------------
  743|       |            // just concat the tail, similar to push_back
  744|   420k|            auto tail_offst = tail_offset();
  745|   420k|            auto tail_size  = size - tail_offst;
  746|   420k|            if (tail_size == branches<BL>) {
  ------------------
  |  Branch (746:17): [True: 116k, False: 304k]
  ------------------
  747|   116k|                auto new_root =
  748|   116k|                    push_tail(root, shift, tail_offst, tail, tail_size);
  749|   116k|                tail->inc();
  750|   116k|                return {size + r.size,
  751|   116k|                        get<0>(new_root),
  752|   116k|                        get<1>(new_root),
  753|   116k|                        r.tail->inc()};
  754|   304k|            } else if (tail_size + r.size <= branches<BL>) {
  ------------------
  |  Branch (754:24): [True: 8.82k, False: 295k]
  ------------------
  755|  8.82k|                auto new_tail =
  756|  8.82k|                    node_t::copy_leaf(tail, tail_size, r.tail, r.size);
  757|  8.82k|                return {size + r.size, shift, root->inc(), new_tail};
  758|   295k|            } else {
  759|   295k|                auto remaining = branches<BL> - tail_size;
  760|   295k|                auto add_tail =
  761|   295k|                    node_t::copy_leaf(tail, tail_size, r.tail, remaining);
  762|   295k|                IMMER_TRY {
  ------------------
  |  |   49|   295k|#define IMMER_TRY try
  ------------------
  763|   295k|                    auto new_tail =
  764|   295k|                        node_t::copy_leaf(r.tail, remaining, r.size);
  765|   295k|                    IMMER_TRY {
  ------------------
  |  |   49|   295k|#define IMMER_TRY try
  ------------------
  766|   295k|                        auto new_root = push_tail(
  767|   295k|                            root, shift, tail_offst, add_tail, branches<BL>);
  768|   295k|                        return {size + r.size,
  769|   295k|                                get<0>(new_root),
  770|   295k|                                get<1>(new_root),
  771|   295k|                                new_tail};
  772|   295k|                    }
  773|   295k|                    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|   295k|                }
  778|   295k|                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|   295k|            }
  783|   420k|        } else if (tail_offset() == 0) {
  ------------------
  |  Branch (783:20): [True: 3.44k, False: 374k]
  ------------------
  784|  3.44k|            auto tail_offst = tail_offset();
  785|  3.44k|            auto tail_size  = size - tail_offst;
  786|  3.44k|            auto concated =
  787|  3.44k|                concat_trees(tail, tail_size, r.root, r.shift, r.tail_offset());
  788|  3.44k|            auto new_shift = concated.shift();
  789|  3.44k|            auto new_root  = concated.node();
  790|  3.44k|            IMMER_ASSERT_TAGGED(new_shift == new_root->compute_shift());
  ------------------
  |  |   68|  3.44k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (790:13): [True: 3.44k, False: 0]
  ------------------
  791|  3.44k|            assert(new_root->check(new_shift, size + r.tail_offset()));
  ------------------
  |  Branch (791:13): [True: 3.44k, False: 0]
  ------------------
  792|  3.44k|            return {size + r.size, new_shift, new_root, r.tail->inc()};
  793|   374k|        } else {
  794|   374k|            auto tail_offst = tail_offset();
  795|   374k|            auto tail_size  = size - tail_offst;
  796|   374k|            auto concated   = concat_trees(root,
  797|   374k|                                         shift,
  798|   374k|                                         tail_offst,
  799|   374k|                                         tail,
  800|   374k|                                         tail_size,
  801|   374k|                                         r.root,
  802|   374k|                                         r.shift,
  803|   374k|                                         r.tail_offset());
  804|   374k|            auto new_shift  = concated.shift();
  805|   374k|            auto new_root   = concated.node();
  806|   374k|            IMMER_ASSERT_TAGGED(new_shift == new_root->compute_shift());
  ------------------
  |  |   68|   374k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (806:13): [True: 374k, False: 0]
  ------------------
  807|   374k|            assert(new_root->check(new_shift, size + r.tail_offset()));
  ------------------
  |  Branch (807:13): [True: 374k, False: 0]
  ------------------
  808|   374k|            return {size + r.size, new_shift, new_root, r.tail->inc()};
  809|   374k|        }
  810|   803k|    }
_ZN5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE13push_back_mutENS9_5applyIS6_E4type4editEi:
  478|  31.9k|    {
  479|  31.9k|        auto ts = tail_size();
  480|  31.9k|        if (ts < branches<BL>) {
  ------------------
  |  Branch (480:13): [True: 18.0k, False: 13.8k]
  ------------------
  481|  18.0k|            ensure_mutable_tail(e, ts);
  482|  18.0k|            new (&tail->leaf()[ts]) T(std::move(value));
  483|  18.0k|        } else {
  484|  13.8k|            using std::get;
  485|  13.8k|            auto new_tail = node_t::make_leaf_e(e, std::move(value));
  486|  13.8k|            auto tail_off = tail_offset();
  487|  13.8k|            IMMER_TRY {
  ------------------
  |  |   49|  13.8k|#define IMMER_TRY try
  ------------------
  488|  13.8k|                push_tail_mut(e, tail_off, tail, ts);
  489|  13.8k|                tail = new_tail;
  490|  13.8k|            }
  491|  13.8k|            IMMER_CATCH (...) {
  492|      0|                node_t::delete_leaf(new_tail, 1u);
  493|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  494|      0|            }
  495|  13.8k|        }
  496|  31.9k|        ++size;
  497|  31.9k|    }
_ZN5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE19ensure_mutable_tailENS9_5applyIS6_E4type4editEj:
  469|   174k|    {
  470|   174k|        if (!tail->can_mutate(e)) {
  ------------------
  |  Branch (470:13): [True: 4.71k, False: 169k]
  ------------------
  471|  4.71k|            auto new_tail = node_t::copy_leaf_e(e, tail, n);
  472|  4.71k|            dec_leaf(tail, n);
  473|  4.71k|            tail = new_tail;
  474|  4.71k|        }
  475|   174k|    }
_ZN5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE13push_tail_mutENS9_5applyIS6_E4type4editEmPNS1_4nodeIiSA_Lj2ELj2EEEj:
  417|   182k|    {
  418|   182k|        if (auto r = root->relaxed()) {
  ------------------
  |  Branch (418:18): [True: 38.6k, False: 144k]
  ------------------
  419|  38.6k|            auto new_root =
  420|  38.6k|                make_relaxed_pos(root, shift, r)
  421|  38.6k|                    .visit(push_tail_mut_visitor<node_t>{}, e, tail, tail_size);
  422|  38.6k|            if (new_root) {
  ------------------
  |  Branch (422:17): [True: 37.5k, False: 1.04k]
  ------------------
  423|  37.5k|                root = new_root;
  424|  37.5k|            } else {
  425|  1.04k|                auto new_root = node_t::make_inner_r_e(e);
  426|  1.04k|                IMMER_TRY {
  ------------------
  |  |   49|  1.04k|#define IMMER_TRY try
  ------------------
  427|  1.04k|                    auto new_path        = node_t::make_path_e(e, shift, tail);
  428|  1.04k|                    new_root->inner()[0] = root;
  429|  1.04k|                    new_root->inner()[1] = new_path;
  430|  1.04k|                    new_root->relaxed()->d.sizes[0] = tail_off;
  431|  1.04k|                    new_root->relaxed()->d.sizes[1] = tail_off + tail_size;
  432|  1.04k|                    assert(tail_off);
  ------------------
  |  Branch (432:21): [True: 1.04k, False: 0]
  ------------------
  433|  1.04k|                    assert(tail_size);
  ------------------
  |  Branch (433:21): [True: 1.04k, False: 0]
  ------------------
  434|  1.04k|                    new_root->relaxed()->d.count = 2u;
  435|  1.04k|                    root                         = new_root;
  436|  1.04k|                    shift += B;
  437|  1.04k|                }
  438|  1.04k|                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.04k|            }
  443|   144k|        } else if (tail_off == size_t{branches<B>} << shift) {
  ------------------
  |  Branch (443:20): [True: 2.91k, False: 141k]
  ------------------
  444|  2.91k|            auto new_root = node_t::make_inner_e(e);
  445|  2.91k|            IMMER_TRY {
  ------------------
  |  |   49|  2.91k|#define IMMER_TRY try
  ------------------
  446|  2.91k|                auto new_path        = node_t::make_path_e(e, shift, tail);
  447|  2.91k|                new_root->inner()[0] = root;
  448|  2.91k|                new_root->inner()[1] = new_path;
  449|  2.91k|                root                 = new_root;
  450|  2.91k|                shift += B;
  451|  2.91k|            }
  452|  2.91k|            IMMER_CATCH (...) {
  453|      0|                node_t::delete_inner_e(new_root);
  454|      0|                IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  455|      0|            }
  456|   141k|        } else if (tail_off) {
  ------------------
  |  Branch (456:20): [True: 139k, False: 2.02k]
  ------------------
  457|   139k|            auto new_root =
  458|   139k|                make_regular_sub_pos(root, shift, tail_off)
  459|   139k|                    .visit(push_tail_mut_visitor<node_t>{}, e, tail);
  460|   139k|            root = new_root;
  461|   139k|        } else {
  462|  2.02k|            auto new_root = node_t::make_path_e(e, shift, tail);
  463|  2.02k|            dec_empty_regular(root);
  464|  2.02k|            root = new_root;
  465|  2.02k|        }
  466|   182k|    }
flex-vector.cpp:_ZN5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE10update_mutIZZ22LLVMFuzzerTestOneInputENK3$_6clI12fuzzer_inputEEDaRT_EUlSG_E0_EEvNS9_5applyIS6_E4type4editEmOSG_:
  573|  76.1k|    {
  574|  76.1k|        auto& elem = get_mut(e, idx);
  575|  76.1k|        elem       = std::forward<FnT>(fn)(std::move(elem));
  576|  76.1k|    }
_ZN5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE7get_mutENS9_5applyIS6_E4type4editEm:
  539|  76.1k|    {
  540|  76.1k|        auto tail_off = tail_offset();
  541|  76.1k|        if (idx >= tail_off) {
  ------------------
  |  Branch (541:13): [True: 33.6k, False: 42.5k]
  ------------------
  542|  33.6k|            ensure_mutable_tail(e, size - tail_off);
  543|  33.6k|            return tail->leaf()[(idx - tail_off) & mask<BL>];
  544|  42.5k|        } else {
  545|  42.5k|            return visit_maybe_relaxed_sub(root,
  546|  42.5k|                                           shift,
  547|  42.5k|                                           tail_off,
  548|  42.5k|                                           get_mut_visitor<node_t>{},
  549|  42.5k|                                           idx,
  550|  42.5k|                                           e,
  551|  42.5k|                                           &root);
  552|  42.5k|        }
  553|  76.1k|    }
_ZN5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE8take_mutENS9_5applyIS6_E4type4editEm:
  606|  41.4k|    {
  607|  41.4k|        auto tail_off = tail_offset();
  608|  41.4k|        if (new_size == 0) {
  ------------------
  |  Branch (608:13): [True: 697, False: 40.7k]
  ------------------
  609|    697|            *this = {};
  610|  40.7k|        } else if (new_size >= size) {
  ------------------
  |  Branch (610:20): [True: 1.48k, False: 39.2k]
  ------------------
  611|  1.48k|            return;
  612|  39.2k|        } else if (new_size > tail_off) {
  ------------------
  |  Branch (612:20): [True: 855, False: 38.4k]
  ------------------
  613|    855|            auto ts    = size - tail_off;
  614|    855|            auto newts = new_size - tail_off;
  615|    855|            if (tail->can_mutate(e)) {
  ------------------
  |  Branch (615:17): [True: 567, False: 288]
  ------------------
  616|    567|                detail::destroy_n(tail->leaf() + newts, ts - newts);
  617|    567|            } else {
  618|    288|                auto new_tail = node_t::copy_leaf_e(e, tail, newts);
  619|    288|                dec_leaf(tail, ts);
  620|    288|                tail = new_tail;
  621|    288|            }
  622|    855|            size = new_size;
  623|    855|            return;
  624|  38.4k|        } else {
  625|  38.4k|            using std::get;
  626|  38.4k|            auto l = new_size - 1;
  627|  38.4k|            auto v = slice_right_mut_visitor<node_t>();
  628|  38.4k|            auto r = visit_maybe_relaxed_sub(root, shift, tail_off, v, l, e);
  629|  38.4k|            auto new_shift = get<0>(r);
  630|  38.4k|            auto new_root  = get<1>(r);
  631|  38.4k|            auto new_tail  = get<3>(r);
  632|  38.4k|            if (new_root) {
  ------------------
  |  Branch (632:17): [True: 32.2k, False: 6.21k]
  ------------------
  633|  32.2k|                root  = new_root;
  634|  32.2k|                shift = new_shift;
  635|  32.2k|            } else {
  636|  6.21k|                root  = empty_root();
  637|  6.21k|                shift = BL;
  638|  6.21k|            }
  639|  38.4k|            dec_leaf(tail, size - tail_off);
  640|  38.4k|            size = new_size;
  641|  38.4k|            tail = new_tail;
  642|  38.4k|            return;
  643|  38.4k|        }
  644|  41.4k|    }
_ZN5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE8drop_mutENS9_5applyIS6_E4type4editEm:
  675|  42.4k|    {
  676|  42.4k|        using std::get;
  677|  42.4k|        auto tail_off = tail_offset();
  678|  42.4k|        if (elems == 0) {
  ------------------
  |  Branch (678:13): [True: 2.33k, False: 40.1k]
  ------------------
  679|  2.33k|            return;
  680|  40.1k|        } else if (elems >= size) {
  ------------------
  |  Branch (680:20): [True: 301, False: 39.8k]
  ------------------
  681|    301|            *this = {};
  682|  39.8k|        } else if (elems == tail_off) {
  ------------------
  |  Branch (682:20): [True: 265, False: 39.5k]
  ------------------
  683|    265|            dec_inner(root, shift, tail_off);
  684|    265|            shift = BL;
  685|    265|            root  = empty_root();
  686|    265|            size -= elems;
  687|    265|            return;
  688|  39.5k|        } else if (elems > tail_off) {
  ------------------
  |  Branch (688:20): [True: 724, False: 38.8k]
  ------------------
  689|    724|            auto v = slice_left_mut_visitor<node_t>();
  690|    724|            tail   = get<1>(make_leaf_sub_pos(tail, size - tail_off)
  691|    724|                              .visit(v, elems - tail_off, e));
  692|    724|            if (tail_off) {
  ------------------
  |  Branch (692:17): [True: 299, False: 425]
  ------------------
  693|    299|                dec_inner(root, shift, tail_off);
  694|    299|                shift = BL;
  695|    299|                root  = empty_root();
  696|    299|            }
  697|    724|            size -= elems;
  698|    724|            return;
  699|  38.8k|        } else {
  700|  38.8k|            auto v = slice_left_mut_visitor<node_t>();
  701|  38.8k|            auto r =
  702|  38.8k|                visit_maybe_relaxed_sub(root, shift, tail_off, v, elems, e);
  703|  38.8k|            shift = get<0>(r);
  704|  38.8k|            root  = get<1>(r);
  705|  38.8k|            size -= elems;
  706|  38.8k|            return;
  707|  38.8k|        }
  708|  42.4k|    }
_ZN5immer6detail4rbts12concat_mut_lERNS1_7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENS9_5applyIS6_E4type4editERKSB_:
  816|   248k|    {
  817|   248k|        assert(&l != &r);
  ------------------
  |  Branch (817:9): [True: 248k, False: 0]
  ------------------
  818|   248k|        assert(r.size < (std::numeric_limits<size_t>::max() - l.size));
  ------------------
  |  Branch (818:9): [True: 248k, False: 0]
  ------------------
  819|   248k|        using std::get;
  820|   248k|        if (l.size == 0)
  ------------------
  |  Branch (820:13): [True: 777, False: 247k]
  ------------------
  821|    777|            l = r;
  822|   247k|        else if (r.size == 0)
  ------------------
  |  Branch (822:18): [True: 602, False: 247k]
  ------------------
  823|    602|            return;
  824|   247k|        else if (r.tail_offset() == 0) {
  ------------------
  |  Branch (824:18): [True: 166k, False: 80.5k]
  ------------------
  825|       |            // just concat the tail, similar to push_back
  826|   166k|            auto tail_offst = l.tail_offset();
  827|   166k|            auto tail_size  = l.size - tail_offst;
  828|   166k|            if (tail_size == branches<BL>) {
  ------------------
  |  Branch (828:17): [True: 47.4k, False: 119k]
  ------------------
  829|  47.4k|                l.push_tail_mut(el, tail_offst, l.tail, tail_size);
  830|  47.4k|                l.tail = r.tail->inc();
  831|  47.4k|                l.size += r.size;
  832|  47.4k|                return;
  833|   119k|            } else if (tail_size + r.size <= branches<BL>) {
  ------------------
  |  Branch (833:24): [True: 804, False: 118k]
  ------------------
  834|    804|                l.ensure_mutable_tail(el, tail_size);
  835|    804|                detail::uninitialized_copy(r.tail->leaf(),
  836|    804|                                           r.tail->leaf() + r.size,
  837|    804|                                           l.tail->leaf() + tail_size);
  838|    804|                l.size += r.size;
  839|    804|                return;
  840|   118k|            } else {
  841|   118k|                auto remaining = branches<BL> - tail_size;
  842|   118k|                l.ensure_mutable_tail(el, tail_size);
  843|   118k|                detail::uninitialized_copy(r.tail->leaf(),
  844|   118k|                                           r.tail->leaf() + remaining,
  845|   118k|                                           l.tail->leaf() + tail_size);
  846|   118k|                IMMER_TRY {
  ------------------
  |  |   49|   118k|#define IMMER_TRY try
  ------------------
  847|   118k|                    auto new_tail =
  848|   118k|                        node_t::copy_leaf_e(el, r.tail, remaining, r.size);
  849|   118k|                    IMMER_TRY {
  ------------------
  |  |   49|   118k|#define IMMER_TRY try
  ------------------
  850|   118k|                        l.push_tail_mut(el, tail_offst, l.tail, branches<BL>);
  851|   118k|                        l.tail = new_tail;
  852|   118k|                        l.size += r.size;
  853|   118k|                        return;
  854|   118k|                    }
  855|   118k|                    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|   118k|                }
  860|   118k|                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|   118k|            }
  865|   166k|        } else if (l.tail_offset() == 0) {
  ------------------
  |  Branch (865:20): [True: 489, False: 80.0k]
  ------------------
  866|    489|            if (supports_transient_concat) {
  ------------------
  |  Branch (866:17): [Folded, False: 489]
  ------------------
  867|      0|                auto tail_offst = l.tail_offset();
  868|      0|                auto tail_size  = l.size - tail_offst;
  869|      0|                auto concated =
  870|      0|                    concat_trees_mut(el,
  871|      0|                                     el,
  872|      0|                                     l.tail,
  873|      0|                                     tail_size,
  874|      0|                                     MemoryPolicy::transience_t::noone,
  875|      0|                                     r.root,
  876|      0|                                     r.shift,
  877|      0|                                     r.tail_offset());
  878|      0|                IMMER_ASSERT_TAGGED(concated.shift() ==
  ------------------
  |  |   68|      0|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (878:17): [True: 0, False: 0]
  ------------------
  879|      0|                                    concated.node()->compute_shift());
  880|      0|                l.size += r.size;
  881|      0|                l.shift = concated.shift();
  882|      0|                l.root  = concated.node();
  883|      0|                l.tail  = r.tail;
  884|      0|                assert(l.check_tree());
  ------------------
  |  Branch (884:17): [True: 0, False: 0]
  ------------------
  885|    489|            } else {
  886|    489|                auto tail_offst = l.tail_offset();
  887|    489|                auto tail_size  = l.size - tail_offst;
  888|    489|                auto concated   = concat_trees(
  889|    489|                    l.tail, tail_size, r.root, r.shift, r.tail_offset());
  890|    489|                l = {l.size + r.size,
  891|    489|                     concated.shift(),
  892|    489|                     concated.node(),
  893|    489|                     r.tail->inc()};
  894|    489|                assert(l.check_tree());
  ------------------
  |  Branch (894:17): [True: 489, False: 0]
  ------------------
  895|    489|                return;
  896|    489|            }
  897|  80.0k|        } else {
  898|  80.0k|            if (supports_transient_concat) {
  ------------------
  |  Branch (898:17): [Folded, False: 80.0k]
  ------------------
  899|      0|                auto tail_offst = l.tail_offset();
  900|      0|                auto tail_size  = l.size - tail_offst;
  901|      0|                assert(l.check_tree());
  ------------------
  |  Branch (901:17): [True: 0, False: 0]
  ------------------
  902|      0|                assert(r.check_tree());
  ------------------
  |  Branch (902:17): [True: 0, False: 0]
  ------------------
  903|      0|                auto concated =
  904|      0|                    concat_trees_mut(el,
  905|      0|                                     el,
  906|      0|                                     l.root,
  907|      0|                                     l.shift,
  908|      0|                                     tail_offst,
  909|      0|                                     l.tail,
  910|      0|                                     tail_size,
  911|      0|                                     MemoryPolicy::transience_t::noone,
  912|      0|                                     r.root,
  913|      0|                                     r.shift,
  914|      0|                                     r.tail_offset());
  915|      0|                IMMER_ASSERT_TAGGED(concated.shift() ==
  ------------------
  |  |   68|      0|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (915:17): [True: 0, False: 0]
  ------------------
  916|      0|                                    concated.node()->compute_shift());
  917|      0|                l.size += r.size;
  918|      0|                l.shift = concated.shift();
  919|      0|                l.root  = concated.node();
  920|      0|                l.tail  = r.tail;
  921|      0|                assert(l.check_tree());
  ------------------
  |  Branch (921:17): [True: 0, False: 0]
  ------------------
  922|  80.0k|            } else {
  923|  80.0k|                auto tail_offst = l.tail_offset();
  924|  80.0k|                auto tail_size  = l.size - tail_offst;
  925|  80.0k|                auto concated   = concat_trees(l.root,
  926|  80.0k|                                             l.shift,
  927|  80.0k|                                             tail_offst,
  928|  80.0k|                                             l.tail,
  929|  80.0k|                                             tail_size,
  930|  80.0k|                                             r.root,
  931|  80.0k|                                             r.shift,
  932|  80.0k|                                             r.tail_offset());
  933|  80.0k|                l               = {l.size + r.size,
  934|  80.0k|                                   concated.shift(),
  935|  80.0k|                                   concated.node(),
  936|  80.0k|                                   r.tail->inc()};
  937|  80.0k|            }
  938|  80.0k|        }
  939|   248k|    }
_ZN5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEaSERKSB_:
  163|  2.31k|    {
  164|  2.31k|        auto next{other};
  165|  2.31k|        swap(*this, next);
  166|  2.31k|        return *this;
  167|  2.31k|    }
_ZN5immer6detail4rbts12concat_mut_rERKNS1_7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEERSB_NS9_5applyIS6_E4type4editE:
  942|  3.89k|    {
  943|  3.89k|        assert(&l != &r);
  ------------------
  |  Branch (943:9): [True: 3.89k, False: 0]
  ------------------
  944|  3.89k|        assert(r.size < (std::numeric_limits<size_t>::max() - l.size));
  ------------------
  |  Branch (944:9): [True: 3.89k, False: 0]
  ------------------
  945|  3.89k|        using std::get;
  946|  3.89k|        if (r.size == 0)
  ------------------
  |  Branch (946:13): [True: 297, False: 3.59k]
  ------------------
  947|    297|            r = std::move(l);
  948|  3.59k|        else if (l.size == 0)
  ------------------
  |  Branch (948:18): [True: 251, False: 3.34k]
  ------------------
  949|    251|            return;
  950|  3.34k|        else if (r.tail_offset() == 0) {
  ------------------
  |  Branch (950:18): [True: 1.01k, False: 2.33k]
  ------------------
  951|       |            // just concat the tail, similar to push_back
  952|  1.01k|            auto tail_offst = l.tail_offset();
  953|  1.01k|            auto tail_size  = l.size - tail_offst;
  954|  1.01k|            if (tail_size == branches<BL>) {
  ------------------
  |  Branch (954:17): [True: 259, False: 758]
  ------------------
  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|    259|                auto res =
  959|    259|                    l.push_tail(l.root, l.shift, tail_offst, l.tail, tail_size);
  960|    259|                l.tail->inc(); // note: leak if mutably concatenated
  961|       |                               // with itself, but this is forbidden
  962|       |                               // by the interface
  963|    259|                r = {l.size + r.size, get<0>(res), get<1>(res), r.tail->inc()};
  964|    259|                return;
  965|    758|            } else if (tail_size + r.size <= branches<BL>) {
  ------------------
  |  Branch (965:24): [True: 427, False: 331]
  ------------------
  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|    427|                auto new_tail =
  974|    427|                    node_t::copy_leaf(l.tail, tail_size, r.tail, r.size);
  975|    427|                r = {l.size + r.size, l.shift, l.root->inc(), new_tail};
  976|    427|                return;
  977|    427|            } else {
  978|       |                // like the immutable version
  979|    331|                auto remaining = branches<BL> - tail_size;
  980|    331|                auto add_tail  = node_t::copy_leaf_e(
  981|    331|                    er, l.tail, tail_size, r.tail, remaining);
  982|    331|                IMMER_TRY {
  ------------------
  |  |   49|    331|#define IMMER_TRY try
  ------------------
  983|    331|                    auto new_tail =
  984|    331|                        node_t::copy_leaf_e(er, r.tail, remaining, r.size);
  985|    331|                    IMMER_TRY {
  ------------------
  |  |   49|    331|#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|    331|                        auto new_root = l.push_tail(l.root,
  990|    331|                                                    l.shift,
  991|    331|                                                    tail_offst,
  992|    331|                                                    add_tail,
  993|    331|                                                    branches<BL>);
  994|    331|                        r             = {l.size + r.size,
  995|    331|                                         get<0>(new_root),
  996|    331|                                         get<1>(new_root),
  997|    331|                                         new_tail};
  998|    331|                        return;
  999|    331|                    }
 1000|    331|                    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|    331|                }
 1005|    331|                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|    331|            }
 1010|  2.33k|        } else if (l.tail_offset() == 0) {
  ------------------
  |  Branch (1010:20): [True: 510, False: 1.82k]
  ------------------
 1011|    510|            if (supports_transient_concat) {
  ------------------
  |  Branch (1011:17): [Folded, False: 510]
  ------------------
 1012|      0|                auto tail_offst = l.tail_offset();
 1013|      0|                auto tail_size  = l.size - tail_offst;
 1014|      0|                auto concated =
 1015|      0|                    concat_trees_mut(er,
 1016|      0|                                     MemoryPolicy::transience_t::noone,
 1017|      0|                                     l.tail,
 1018|      0|                                     tail_size,
 1019|      0|                                     er,
 1020|      0|                                     r.root,
 1021|      0|                                     r.shift,
 1022|      0|                                     r.tail_offset());
 1023|      0|                IMMER_ASSERT_TAGGED(concated.shift() ==
  ------------------
  |  |   68|      0|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (1023:17): [True: 0, False: 0]
  ------------------
 1024|      0|                                    concated.node()->compute_shift());
 1025|      0|                r.size += l.size;
 1026|      0|                r.shift = concated.shift();
 1027|      0|                r.root  = concated.node();
 1028|      0|                assert(r.check_tree());
  ------------------
  |  Branch (1028:17): [True: 0, False: 0]
  ------------------
 1029|    510|            } else {
 1030|    510|                auto tail_offst = l.tail_offset();
 1031|    510|                auto tail_size  = l.size - tail_offst;
 1032|    510|                auto concated   = concat_trees(
 1033|    510|                    l.tail, tail_size, r.root, r.shift, r.tail_offset());
 1034|    510|                r = {l.size + r.size,
 1035|    510|                     concated.shift(),
 1036|    510|                     concated.node(),
 1037|    510|                     r.tail->inc()};
 1038|    510|                return;
 1039|    510|            }
 1040|  1.82k|        } else {
 1041|  1.82k|            if (supports_transient_concat) {
  ------------------
  |  Branch (1041:17): [Folded, False: 1.82k]
  ------------------
 1042|      0|                auto tail_offst = l.tail_offset();
 1043|      0|                auto tail_size  = l.size - tail_offst;
 1044|      0|                auto concated =
 1045|      0|                    concat_trees_mut(er,
 1046|      0|                                     MemoryPolicy::transience_t::noone,
 1047|      0|                                     l.root,
 1048|      0|                                     l.shift,
 1049|      0|                                     tail_offst,
 1050|      0|                                     l.tail,
 1051|      0|                                     tail_size,
 1052|      0|                                     er,
 1053|      0|                                     r.root,
 1054|      0|                                     r.shift,
 1055|      0|                                     r.tail_offset());
 1056|      0|                IMMER_ASSERT_TAGGED(concated.shift() ==
  ------------------
  |  |   68|      0|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (1056:17): [True: 0, False: 0]
  ------------------
 1057|      0|                                    concated.node()->compute_shift());
 1058|      0|                r.size += l.size;
 1059|      0|                r.shift = concated.shift();
 1060|      0|                r.root  = concated.node();
 1061|      0|                assert(r.check_tree());
  ------------------
  |  Branch (1061:17): [True: 0, False: 0]
  ------------------
 1062|      0|                return;
 1063|  1.82k|            } else {
 1064|  1.82k|                auto tail_offst = l.tail_offset();
 1065|  1.82k|                auto tail_size  = l.size - tail_offst;
 1066|  1.82k|                auto concated   = concat_trees(l.root,
 1067|  1.82k|                                             l.shift,
 1068|  1.82k|                                             tail_offst,
 1069|  1.82k|                                             l.tail,
 1070|  1.82k|                                             tail_size,
 1071|  1.82k|                                             r.root,
 1072|  1.82k|                                             r.shift,
 1073|  1.82k|                                             r.tail_offset());
 1074|  1.82k|                r               = {l.size + r.size,
 1075|  1.82k|                                   concated.shift(),
 1076|  1.82k|                                   concated.node(),
 1077|  1.82k|                                   r.tail->inc()};
 1078|  1.82k|                return;
 1079|  1.82k|            }
 1080|  1.82k|        }
 1081|  3.89k|    }
_ZN5immer6detail4rbts15concat_mut_lr_lERNS1_7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENS9_5applyIS6_E4type4editESC_SG_:
 1084|  24.2k|    {
 1085|  24.2k|        assert(&l != &r);
  ------------------
  |  Branch (1085:9): [True: 24.2k, False: 0]
  ------------------
 1086|  24.2k|        assert(r.size < (std::numeric_limits<size_t>::max() - l.size));
  ------------------
  |  Branch (1086:9): [True: 24.2k, False: 0]
  ------------------
 1087|  24.2k|        using std::get;
 1088|  24.2k|        if (l.size == 0)
  ------------------
  |  Branch (1088:13): [True: 1.23k, False: 22.9k]
  ------------------
 1089|  1.23k|            l = r;
 1090|  22.9k|        else if (r.size == 0)
  ------------------
  |  Branch (1090:18): [True: 1.59k, False: 21.3k]
  ------------------
 1091|  1.59k|            return;
 1092|  21.3k|        else if (r.tail_offset() == 0) {
  ------------------
  |  Branch (1092:18): [True: 4.76k, False: 16.6k]
  ------------------
 1093|       |            // just concat the tail, similar to push_back
 1094|  4.76k|            auto tail_offst = l.tail_offset();
 1095|  4.76k|            auto tail_size  = l.size - tail_offst;
 1096|  4.76k|            if (tail_size == branches<BL>) {
  ------------------
  |  Branch (1096:17): [True: 941, False: 3.82k]
  ------------------
 1097|    941|                l.push_tail_mut(el, tail_offst, l.tail, tail_size);
 1098|    941|                l.tail = r.tail->inc();
 1099|    941|                l.size += r.size;
 1100|    941|                return;
 1101|  3.82k|            } else if (tail_size + r.size <= branches<BL>) {
  ------------------
  |  Branch (1101:24): [True: 1.77k, False: 2.05k]
  ------------------
 1102|  1.77k|                l.ensure_mutable_tail(el, tail_size);
 1103|  1.77k|                if (r.tail->can_mutate(er))
  ------------------
  |  Branch (1103:21): [True: 668, False: 1.10k]
  ------------------
 1104|    668|                    detail::uninitialized_move(r.tail->leaf(),
 1105|    668|                                               r.tail->leaf() + r.size,
 1106|    668|                                               l.tail->leaf() + tail_size);
 1107|  1.10k|                else
 1108|  1.10k|                    detail::uninitialized_copy(r.tail->leaf(),
 1109|  1.10k|                                               r.tail->leaf() + r.size,
 1110|  1.10k|                                               l.tail->leaf() + tail_size);
 1111|  1.77k|                l.size += r.size;
 1112|  1.77k|                return;
 1113|  2.05k|            } else {
 1114|  2.05k|                auto remaining = branches<BL> - tail_size;
 1115|  2.05k|                l.ensure_mutable_tail(el, tail_size);
 1116|  2.05k|                if (r.tail->can_mutate(er))
  ------------------
  |  Branch (1116:21): [True: 889, False: 1.16k]
  ------------------
 1117|    889|                    detail::uninitialized_move(r.tail->leaf(),
 1118|    889|                                               r.tail->leaf() + remaining,
 1119|    889|                                               l.tail->leaf() + tail_size);
 1120|  1.16k|                else
 1121|  1.16k|                    detail::uninitialized_copy(r.tail->leaf(),
 1122|  1.16k|                                               r.tail->leaf() + remaining,
 1123|  1.16k|                                               l.tail->leaf() + tail_size);
 1124|  2.05k|                IMMER_TRY {
  ------------------
  |  |   49|  2.05k|#define IMMER_TRY try
  ------------------
 1125|  2.05k|                    auto new_tail =
 1126|  2.05k|                        node_t::copy_leaf_e(el, r.tail, remaining, r.size);
 1127|  2.05k|                    IMMER_TRY {
  ------------------
  |  |   49|  2.05k|#define IMMER_TRY try
  ------------------
 1128|  2.05k|                        l.push_tail_mut(el, tail_offst, l.tail, branches<BL>);
 1129|  2.05k|                        l.tail = new_tail;
 1130|  2.05k|                        l.size += r.size;
 1131|  2.05k|                        return;
 1132|  2.05k|                    }
 1133|  2.05k|                    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|  2.05k|                }
 1138|  2.05k|                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|  2.05k|            }
 1143|  16.6k|        } else if (l.tail_offset() == 0) {
  ------------------
  |  Branch (1143:20): [True: 3.20k, False: 13.4k]
  ------------------
 1144|  3.20k|            if (supports_transient_concat) {
  ------------------
  |  Branch (1144:17): [Folded, False: 3.20k]
  ------------------
 1145|      0|                auto tail_offst = l.tail_offset();
 1146|      0|                auto tail_size  = l.size - tail_offst;
 1147|      0|                auto concated   = concat_trees_mut(el,
 1148|      0|                                                 el,
 1149|      0|                                                 l.tail,
 1150|      0|                                                 tail_size,
 1151|      0|                                                 er,
 1152|      0|                                                 r.root,
 1153|      0|                                                 r.shift,
 1154|      0|                                                 r.tail_offset());
 1155|      0|                IMMER_ASSERT_TAGGED(concated.shift() ==
  ------------------
  |  |   68|      0|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (1155:17): [True: 0, False: 0]
  ------------------
 1156|      0|                                    concated.node()->compute_shift());
 1157|      0|                l.size += r.size;
 1158|      0|                l.shift = concated.shift();
 1159|      0|                l.root  = concated.node();
 1160|      0|                l.tail  = r.tail;
 1161|      0|                assert(l.check_tree());
  ------------------
  |  Branch (1161:17): [True: 0, False: 0]
  ------------------
 1162|      0|                r.hard_reset();
 1163|      0|                return;
 1164|  3.20k|            } else {
 1165|  3.20k|                auto tail_offst = l.tail_offset();
 1166|  3.20k|                auto tail_size  = l.size - tail_offst;
 1167|  3.20k|                auto concated   = concat_trees(
 1168|  3.20k|                    l.tail, tail_size, r.root, r.shift, r.tail_offset());
 1169|  3.20k|                l = {l.size + r.size,
 1170|  3.20k|                     concated.shift(),
 1171|  3.20k|                     concated.node(),
 1172|  3.20k|                     r.tail->inc()};
 1173|  3.20k|                return;
 1174|  3.20k|            }
 1175|  13.4k|        } else {
 1176|  13.4k|            if (supports_transient_concat) {
  ------------------
  |  Branch (1176:17): [Folded, False: 13.4k]
  ------------------
 1177|      0|                auto tail_offst = l.tail_offset();
 1178|      0|                auto tail_size  = l.size - tail_offst;
 1179|      0|                auto concated   = concat_trees_mut(el,
 1180|      0|                                                 el,
 1181|      0|                                                 l.root,
 1182|      0|                                                 l.shift,
 1183|      0|                                                 tail_offst,
 1184|      0|                                                 l.tail,
 1185|      0|                                                 tail_size,
 1186|      0|                                                 er,
 1187|      0|                                                 r.root,
 1188|      0|                                                 r.shift,
 1189|      0|                                                 r.tail_offset());
 1190|      0|                IMMER_ASSERT_TAGGED(concated.shift() ==
  ------------------
  |  |   68|      0|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  |  Branch (1190:17): [True: 0, False: 0]
  ------------------
 1191|      0|                                    concated.node()->compute_shift());
 1192|      0|                l.size += r.size;
 1193|      0|                l.shift = concated.shift();
 1194|      0|                l.root  = concated.node();
 1195|      0|                l.tail  = r.tail;
 1196|      0|                assert(l.check_tree());
  ------------------
  |  Branch (1196:17): [True: 0, False: 0]
  ------------------
 1197|      0|                r.hard_reset();
 1198|      0|                return;
 1199|  13.4k|            } else {
 1200|  13.4k|                auto tail_offst = l.tail_offset();
 1201|  13.4k|                auto tail_size  = l.size - tail_offst;
 1202|  13.4k|                auto concated   = concat_trees(l.root,
 1203|  13.4k|                                             l.shift,
 1204|  13.4k|                                             tail_offst,
 1205|  13.4k|                                             l.tail,
 1206|  13.4k|                                             tail_size,
 1207|  13.4k|                                             r.root,
 1208|  13.4k|                                             r.shift,
 1209|  13.4k|                                             r.tail_offset());
 1210|  13.4k|                l               = {l.size + r.size,
 1211|  13.4k|                                   concated.shift(),
 1212|  13.4k|                                   concated.node(),
 1213|  13.4k|                                   r.tail->inc()};
 1214|  13.4k|                return;
 1215|  13.4k|            }
 1216|  13.4k|        }
 1217|  24.2k|    }
_ZNK5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE6equalsERKSB_:
  315|  28.6k|    {
  316|  28.6k|        using iter_t = rrbtree_iterator<T, MemoryPolicy, B, BL>;
  317|  28.6k|        if (size != other.size)
  ------------------
  |  Branch (317:13): [True: 9.09k, False: 19.5k]
  ------------------
  318|  9.09k|            return false;
  319|  19.5k|        if (size == 0)
  ------------------
  |  Branch (319:13): [True: 217, False: 19.2k]
  ------------------
  320|    217|            return true;
  321|  19.2k|        auto tail_off       = tail_offset();
  322|  19.2k|        auto tail_off_other = other.tail_offset();
  323|       |        // compare trees
  324|  19.2k|        if (tail_off > 0 && tail_off_other > 0) {
  ------------------
  |  Branch (324:13): [True: 18.2k, False: 1.05k]
  |  Branch (324:29): [True: 18.0k, False: 196]
  ------------------
  325|       |            // other.shift != shift is a theoretical possibility for
  326|       |            // relaxed trees that sadly we haven't managed to exercise
  327|       |            // in tests yet...
  328|  18.0k|            if (other.shift >= shift) {
  ------------------
  |  Branch (328:17): [True: 17.2k, False: 742]
  ------------------
  329|  17.2k|                if (!visit_maybe_relaxed_sub(other.root,
  ------------------
  |  Branch (329:21): [True: 8.50k, False: 8.78k]
  ------------------
  330|  17.2k|                                             other.shift,
  331|  17.2k|                                             tail_off_other,
  332|  17.2k|                                             equals_visitor::rrb{},
  333|  17.2k|                                             iter_t{other},
  334|  17.2k|                                             root,
  335|  17.2k|                                             shift,
  336|  17.2k|                                             tail_off))
  337|  8.50k|                    return false;
  338|  17.2k|            } else {
  339|    742|                if (!visit_maybe_relaxed_sub(root,
  ------------------
  |  Branch (339:21): [True: 396, False: 346]
  ------------------
  340|    742|                                             shift,
  341|    742|                                             tail_off,
  342|    742|                                             equals_visitor::rrb{},
  343|    742|                                             iter_t{*this},
  344|    742|                                             other.root,
  345|    742|                                             other.shift,
  346|    742|                                             tail_off_other))
  347|    396|                    return false;
  348|    742|            }
  349|  18.0k|        }
  350|  10.3k|        return tail_off == tail_off_other
  ------------------
  |  Branch (350:16): [True: 6.59k, False: 3.79k]
  ------------------
  351|  10.3k|                   ? make_leaf_sub_pos(tail, tail_size())
  352|  6.59k|                         .visit(equals_visitor{}, other.tail)
  353|  10.3k|               : tail_off > tail_off_other
  ------------------
  |  Branch (353:18): [True: 1.62k, False: 2.16k]
  ------------------
  354|  3.79k|                   ? std::equal(tail->leaf(),
  355|  1.62k|                                tail->leaf() + (size - tail_off),
  356|  1.62k|                                other.tail->leaf() +
  357|  1.62k|                                    (tail_off - tail_off_other))
  358|       |                   /* otherwise */
  359|  3.79k|                   : std::equal(tail->leaf(),
  360|  2.16k|                                tail->leaf() + (size - tail_off),
  361|  2.16k|                                iter_t{other} + tail_off);
  362|  19.2k|    }
_ZNK5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE10region_forEm:
  524|  1.21M|    {
  525|  1.21M|        using std::get;
  526|  1.21M|        auto tail_off = tail_offset();
  527|  1.21M|        if (idx >= tail_off) {
  ------------------
  |  Branch (527:13): [True: 3.94k, False: 1.20M]
  ------------------
  528|  3.94k|            return std::make_tuple(tail->leaf(), tail_off, size);
  529|  1.20M|        } else {
  530|  1.20M|            auto subs = visit_maybe_relaxed_sub(
  531|  1.20M|                root, shift, tail_off, region_for_visitor<T>(), idx);
  532|  1.20M|            auto first = idx - get<1>(subs);
  533|  1.20M|            auto end   = first + get<2>(subs);
  534|  1.20M|            return std::make_tuple(get<0>(subs), first, end);
  535|  1.20M|        }
  536|  1.21M|    }

_ZNK5immer6detail4rbts16rrbtree_iteratorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE11dereferenceEv:
   90|  4.73M|    {
   91|  4.73M|        using std::get;
   92|  4.73M|        if (i_ < get<1>(curr_) || i_ >= get<2>(curr_))
  ------------------
  |  Branch (92:13): [True: 36.8k, False: 4.69M]
  |  Branch (92:35): [True: 1.17M, False: 3.52M]
  ------------------
   93|  1.21M|            curr_ = v_->region_for(i_);
   94|  4.73M|        return get<0>(curr_)[i_ - get<1>(curr_)];
   95|  4.73M|    }
_ZN5immer6detail4rbts16rrbtree_iteratorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE7advanceEl:
   74|   232k|    {
   75|   232k|        using std::get;
   76|   232k|        assert(n <= 0 || i_ + static_cast<size_t>(n) <= v_->size);
  ------------------
  |  Branch (76:9): [True: 426, False: 232k]
  |  Branch (76:9): [True: 232k, False: 0]
  |  Branch (76:9): [True: 232k, False: 0]
  ------------------
   77|   232k|        assert(n >= 0 || static_cast<size_t>(-n) <= i_);
  ------------------
  |  Branch (77:9): [True: 232k, False: 0]
  |  Branch (77:9): [True: 0, False: 0]
  |  Branch (77:9): [True: 232k, False: 0]
  ------------------
   78|   232k|        i_ += n;
   79|   232k|    }
_ZN5immer6detail4rbts16rrbtree_iteratorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE9incrementEv:
   60|  3.54M|    {
   61|  3.54M|        using std::get;
   62|  3.54M|        assert(i_ < v_->size);
  ------------------
  |  Branch (62:9): [True: 3.54M, False: 0]
  ------------------
   63|  3.54M|        ++i_;
   64|  3.54M|    }
_ZN5immer6detail4rbts16rrbtree_iteratorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEC2ERKNS1_7rrbtreeIiSA_Lj2ELj2EEE:
   39|  20.2k|        : v_{&v}
   40|  20.2k|        , i_{0}
   41|  20.2k|        , curr_{nullptr, ~size_t{}, ~size_t{}}
   42|  20.2k|    {
   43|  20.2k|    }

_ZN5immer6detail4rbts12visitor_baseINS1_18slice_left_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb1EEEE13visit_relaxedIJRNS1_11relaxed_posISD_EERmEEEDcDpOT_:
   31|  14.9k|    {
   32|  14.9k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|  14.9k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_18slice_left_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb0EEEE13visit_relaxedIJRNS1_11relaxed_posISD_EERmEEEDcDpOT_:
   31|  43.6k|    {
   32|  43.6k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|  43.6k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_18slice_left_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb0EEEE13visit_regularIJRNS1_15regular_sub_posISD_EERmEEEDcDpOT_:
   37|  2.53k|    {
   38|  2.53k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  2.53k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_18slice_left_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb0EEEE13visit_regularIJRNS1_8full_posISD_EEmEEEDcDpOT_:
   37|  6.02k|    {
   38|  6.02k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  6.02k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_18slice_left_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb1EEEE13visit_regularIJRNS1_15regular_sub_posISD_EERmEEEDcDpOT_:
   37|  6.81k|    {
   38|  6.81k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  6.81k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_18slice_left_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb1EEEE13visit_regularIJRNS1_8full_posISD_EEmEEEDcDpOT_:
   37|  1.59k|    {
   38|  1.59k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  1.59k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_18slice_left_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEELb1EEEE13visit_regularIJRNS1_15regular_sub_posISD_EEmEEEDcDpOT_:
   37|  1.97k|    {
   38|  1.97k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  1.97k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_25concat_trees_left_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEE13visit_regularIJRNS1_25singleton_regular_sub_posISD_EENS1_14empty_leaf_posISD_EERPSD_RjRmEEEDcDpOT_:
   37|  7.64k|    {
   38|  7.64k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  7.64k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_25concat_trees_left_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEE11visit_innerIJRNS1_25singleton_regular_sub_posISD_EENS1_14empty_leaf_posISD_EERPSD_RjRmEEEDcDpOT_:
   43|  7.64k|    {
   44|  7.64k|        return Deriv::visit_node(std::forward<Args>(args)...);
   45|  7.64k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_26concat_trees_right_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEE13visit_relaxedIJRNS1_11relaxed_posISD_EERNS1_25singleton_regular_sub_posISD_EERNS1_14empty_leaf_posISD_EEEEEDcDpOT_:
   31|  5.37k|    {
   32|  5.37k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|  5.37k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_26concat_trees_right_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEE11visit_innerIJRNS1_11relaxed_posISD_EERNS1_25singleton_regular_sub_posISD_EERNS1_14empty_leaf_posISD_EEEEEDcDpOT_:
   43|  5.37k|    {
   44|  5.37k|        return Deriv::visit_node(std::forward<Args>(args)...);
   45|  5.37k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_34concat_rebalance_plan_fill_visitorEE10visit_leafIJRNS1_12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERNS1_21concat_rebalance_planILj2ELj2EEEEEEDcDpOT_:
   49|  2.16M|    {
   50|  2.16M|        return Deriv::visit_node(std::forward<Args>(args)...);
   51|  2.16M|    }
_ZN5immer6detail4rbts12visitor_baseINS1_34concat_rebalance_plan_fill_visitorEE13visit_relaxedIJRNS1_11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERNS1_21concat_rebalance_planILj2ELj2EEEEEEDcDpOT_:
   31|  18.9M|    {
   32|  18.9M|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|  18.9M|    }
_ZN5immer6detail4rbts12visitor_baseINS1_34concat_rebalance_plan_fill_visitorEE11visit_innerIJRNS1_11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERNS1_21concat_rebalance_planILj2ELj2EEEEEEDcDpOT_:
   43|  18.9M|    {
   44|  18.9M|        return Deriv::visit_node(std::forward<Args>(args)...);
   45|  18.9M|    }
_ZN5immer6detail4rbts12visitor_baseINS1_21concat_merger_visitorEE13visit_relaxedIJRNS1_11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERNS1_13concat_mergerISG_EEEEEDcDpOT_:
   31|  18.9M|    {
   32|  18.9M|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|  18.9M|    }
_ZN5immer6detail4rbts12visitor_baseINS1_20concat_right_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEE13visit_relaxedIJRNS1_11relaxed_posISD_EERNS1_25singleton_regular_sub_posISD_EERNS1_14empty_leaf_posISD_EEEEEDcDpOT_:
   31|  16.6k|    {
   32|  16.6k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|  16.6k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_20concat_right_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEE13visit_regularIJRNS1_15regular_sub_posISD_EERNS1_25singleton_regular_sub_posISD_EERNS1_14empty_leaf_posISD_EEEEEDcDpOT_:
   37|    396|    {
   38|    396|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|    396|    }
_ZN5immer6detail4rbts12visitor_baseINS1_20concat_right_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEE13visit_regularIJRNS1_8full_posISD_EERNS1_25singleton_regular_sub_posISD_EERNS1_14empty_leaf_posISD_EEEEEDcDpOT_:
   37|  1.01k|    {
   38|  1.01k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  1.01k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_34concat_rebalance_plan_fill_visitorEE10visit_leafIJRNS1_13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERNS1_21concat_rebalance_planILj2ELj2EEEEEEDcDpOT_:
   49|   984k|    {
   50|   984k|        return Deriv::visit_node(std::forward<Args>(args)...);
   51|   984k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_34concat_rebalance_plan_fill_visitorEE13visit_regularIJRNS1_8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERNS1_21concat_rebalance_planILj2ELj2EEEEEEDcDpOT_:
   37|   582k|    {
   38|   582k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|   582k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_34concat_rebalance_plan_fill_visitorEE11visit_innerIJRNS1_8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERNS1_21concat_rebalance_planILj2ELj2EEEEEEDcDpOT_:
   43|   582k|    {
   44|   582k|        return Deriv::visit_node(std::forward<Args>(args)...);
   45|   582k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_21concat_merger_visitorEE13visit_regularIJRNS1_8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERNS1_13concat_mergerISG_EEEEEDcDpOT_:
   37|   582k|    {
   38|   582k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|   582k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_34concat_rebalance_plan_fill_visitorEE13visit_regularIJRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERNS1_21concat_rebalance_planILj2ELj2EEEEEEDcDpOT_:
   37|   622k|    {
   38|   622k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|   622k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_34concat_rebalance_plan_fill_visitorEE11visit_innerIJRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERNS1_21concat_rebalance_planILj2ELj2EEEEEEDcDpOT_:
   43|   622k|    {
   44|   622k|        return Deriv::visit_node(std::forward<Args>(args)...);
   45|   622k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_21concat_merger_visitorEE13visit_regularIJRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERNS1_13concat_mergerISG_EEEEEDcDpOT_:
   37|   622k|    {
   38|   622k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|   622k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_26concat_trees_right_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEE13visit_regularIJRNS1_15regular_sub_posISD_EERNS1_25singleton_regular_sub_posISD_EERNS1_14empty_leaf_posISD_EEEEEDcDpOT_:
   37|  2.27k|    {
   38|  2.27k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  2.27k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_26concat_trees_right_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEE11visit_innerIJRNS1_15regular_sub_posISD_EERNS1_25singleton_regular_sub_posISD_EERNS1_14empty_leaf_posISD_EEEEEDcDpOT_:
   43|  2.27k|    {
   44|  2.27k|        return Deriv::visit_node(std::forward<Args>(args)...);
   45|  2.27k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_25concat_trees_left_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEE13visit_relaxedIJRNS1_11relaxed_posISD_EENS1_8leaf_posISD_EERPSD_RjRmEEEDcDpOT_:
   31|   455k|    {
   32|   455k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|   455k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_25concat_trees_left_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEE11visit_innerIJRNS1_11relaxed_posISD_EENS1_8leaf_posISD_EERPSD_RjRmEEEDcDpOT_:
   43|   455k|    {
   44|   455k|        return Deriv::visit_node(std::forward<Args>(args)...);
   45|   455k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_26concat_trees_right_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEE13visit_relaxedIJRNS1_11relaxed_posISD_EESJ_RNS1_8leaf_posISD_EEEEEDcDpOT_:
   31|   438k|    {
   32|   438k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|   438k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_26concat_trees_right_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEE11visit_innerIJRNS1_11relaxed_posISD_EESJ_RNS1_8leaf_posISD_EEEEEDcDpOT_:
   43|   438k|    {
   44|   438k|        return Deriv::visit_node(std::forward<Args>(args)...);
   45|   438k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_19concat_left_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEE13visit_relaxedIJRNS1_11relaxed_posISD_EERNS1_8leaf_posISD_EESJ_EEEDcDpOT_:
   31|  1.98M|    {
   32|  1.98M|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|  1.98M|    }
_ZN5immer6detail4rbts12visitor_baseINS1_19concat_left_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEE13visit_regularIJRNS1_15regular_sub_posISD_EERNS1_8leaf_posISD_EERNS1_11relaxed_posISD_EEEEEDcDpOT_:
   37|  5.06k|    {
   38|  5.06k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  5.06k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_20concat_right_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEE13visit_relaxedIJRNS1_11relaxed_posISD_EERNS1_15regular_sub_posISD_EERNS1_8leaf_posISD_EEEEEDcDpOT_:
   31|   597k|    {
   32|   597k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|   597k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_20concat_right_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEE13visit_regularIJRNS1_15regular_sub_posISD_EESJ_RNS1_8leaf_posISD_EEEEEDcDpOT_:
   37|   107k|    {
   38|   107k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|   107k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_19concat_left_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEE13visit_regularIJRNS1_15regular_sub_posISD_EERNS1_8leaf_posISD_EESJ_EEEDcDpOT_:
   37|  1.27k|    {
   38|  1.27k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  1.27k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_20concat_right_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEE13visit_regularIJRNS1_8full_posISD_EERNS1_15regular_sub_posISD_EERNS1_8leaf_posISD_EEEEEDcDpOT_:
   37|  98.9k|    {
   38|  98.9k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  98.9k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_19concat_both_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEE13visit_regularIJRNS1_15regular_sub_posISD_EERNS1_8leaf_posISD_EERNS1_8full_posISD_EEEEEDcDpOT_:
   37|  48.5k|    {
   38|  48.5k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  48.5k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_19concat_both_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEE13visit_regularIJRNS1_15regular_sub_posISD_EERNS1_8leaf_posISD_EESJ_EEEDcDpOT_:
   37|  49.5k|    {
   38|  49.5k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  49.5k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_19concat_both_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEE13visit_regularIJRNS1_15regular_sub_posISD_EERNS1_8leaf_posISD_EERNS1_11relaxed_posISD_EEEEEDcDpOT_:
   37|   689k|    {
   38|   689k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|   689k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_20concat_right_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEE13visit_relaxedIJRNS1_11relaxed_posISD_EESJ_RNS1_8leaf_posISD_EEEEEDcDpOT_:
   31|  1.67M|    {
   32|  1.67M|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|  1.67M|    }
_ZN5immer6detail4rbts12visitor_baseINS1_20concat_right_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEE13visit_regularIJRNS1_15regular_sub_posISD_EERNS1_11relaxed_posISD_EERNS1_8leaf_posISD_EEEEEDcDpOT_:
   37|  2.21k|    {
   38|  2.21k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  2.21k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_19concat_left_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEE13visit_relaxedIJRNS1_11relaxed_posISD_EERNS1_8leaf_posISD_EERNS1_15regular_sub_posISD_EEEEEDcDpOT_:
   31|  69.8k|    {
   32|  69.8k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|  69.8k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_20concat_right_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEE13visit_regularIJRNS1_8full_posISD_EERNS1_11relaxed_posISD_EERNS1_8leaf_posISD_EEEEEDcDpOT_:
   37|  4.07k|    {
   38|  4.07k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  4.07k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_19concat_both_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEE13visit_relaxedIJRNS1_11relaxed_posISD_EERNS1_8leaf_posISD_EERNS1_8full_posISD_EEEEEDcDpOT_:
   31|  1.68k|    {
   32|  1.68k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|  1.68k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_19concat_both_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEE13visit_relaxedIJRNS1_11relaxed_posISD_EERNS1_8leaf_posISD_EERNS1_15regular_sub_posISD_EEEEEDcDpOT_:
   31|  1.43k|    {
   32|  1.43k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|  1.43k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_19concat_both_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEE13visit_relaxedIJRNS1_11relaxed_posISD_EERNS1_8leaf_posISD_EESJ_EEEDcDpOT_:
   31|  1.60M|    {
   32|  1.60M|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|  1.60M|    }
_ZN5immer6detail4rbts12visitor_baseINS1_26concat_trees_right_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEE13visit_regularIJRNS1_15regular_sub_posISD_EERNS1_11relaxed_posISD_EERNS1_8leaf_posISD_EEEEEDcDpOT_:
   37|  16.9k|    {
   38|  16.9k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  16.9k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_26concat_trees_right_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEE11visit_innerIJRNS1_15regular_sub_posISD_EERNS1_11relaxed_posISD_EERNS1_8leaf_posISD_EEEEEDcDpOT_:
   43|  16.9k|    {
   44|  16.9k|        return Deriv::visit_node(std::forward<Args>(args)...);
   45|  16.9k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_25concat_trees_left_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEE13visit_regularIJRNS1_15regular_sub_posISD_EENS1_8leaf_posISD_EERPSD_RjRmEEEDcDpOT_:
   37|  14.0k|    {
   38|  14.0k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  14.0k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_25concat_trees_left_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEE11visit_innerIJRNS1_15regular_sub_posISD_EENS1_8leaf_posISD_EERPSD_RjRmEEEDcDpOT_:
   43|  14.0k|    {
   44|  14.0k|        return Deriv::visit_node(std::forward<Args>(args)...);
   45|  14.0k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_26concat_trees_right_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEE13visit_relaxedIJRNS1_11relaxed_posISD_EERNS1_15regular_sub_posISD_EERNS1_8leaf_posISD_EEEEEDcDpOT_:
   31|  7.17k|    {
   32|  7.17k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|  7.17k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_26concat_trees_right_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEE11visit_innerIJRNS1_11relaxed_posISD_EERNS1_15regular_sub_posISD_EERNS1_8leaf_posISD_EEEEEDcDpOT_:
   43|  7.17k|    {
   44|  7.17k|        return Deriv::visit_node(std::forward<Args>(args)...);
   45|  7.17k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_26concat_trees_right_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEE13visit_regularIJRNS1_15regular_sub_posISD_EESJ_RNS1_8leaf_posISD_EEEEEDcDpOT_:
   37|  6.91k|    {
   38|  6.91k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  6.91k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_26concat_trees_right_visitorINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEE11visit_innerIJRNS1_15regular_sub_posISD_EESJ_RNS1_8leaf_posISD_EEEEEDcDpOT_:
   43|  6.91k|    {
   44|  6.91k|        return Deriv::visit_node(std::forward<Args>(args)...);
   45|  6.91k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_14equals_visitor3rrbEE13visit_relaxedIJRNS1_11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_16rrbtree_iteratorIiSG_Lj2ELj2EEERKPSH_RKjRmEEEDcDpOT_:
   31|  12.0k|    {
   32|  12.0k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|  12.0k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_14equals_visitor3rrbEE11visit_innerIJRNS1_11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_16rrbtree_iteratorIiSG_Lj2ELj2EEERKPSH_RKjRmEEEDcDpOT_:
   43|  12.0k|    {
   44|  12.0k|        return Deriv::visit_node(std::forward<Args>(args)...);
   45|  12.0k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_14equals_visitor10this_aux_tEE13visit_relaxedIJRNS1_11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERjSJ_RNS1_16rrbtree_iteratorIiSG_Lj2ELj2EEERmEEEDcDpOT_:
   31|  21.7k|    {
   32|  21.7k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|  21.7k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_14equals_visitor10this_aux_tEE13visit_relaxedIJRNS1_11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERjRNS1_15regular_sub_posISH_EERNS1_16rrbtree_iteratorIiSG_Lj2ELj2EEERmEEEDcDpOT_:
   31|  2.16k|    {
   32|  2.16k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|  2.16k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_14equals_visitor10this_aux_tEE13visit_relaxedIJRNS1_11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERjRNS1_8full_posISH_EERNS1_16rrbtree_iteratorIiSG_Lj2ELj2EEERmEEEDcDpOT_:
   31|    880|    {
   32|    880|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|    880|    }
_ZN5immer6detail4rbts12visitor_baseINS1_14equals_visitor10this_aux_tEE13visit_regularIJRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERjRNS1_8full_posISH_EERNS1_16rrbtree_iteratorIiSG_Lj2ELj2EEERmEEEDcDpOT_:
   37|  1.00k|    {
   38|  1.00k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  1.00k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_18region_for_visitorIiEEE13visit_relaxedIJRNS1_11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERmEEEDcDpOT_:
   31|  8.34M|    {
   32|  8.34M|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|  8.34M|    }
_ZN5immer6detail4rbts12visitor_baseINS1_18region_for_visitorIiEEE13visit_regularIJRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERmEEEDcDpOT_:
   37|   327k|    {
   38|   327k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|   327k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_18region_for_visitorIiEEE13visit_regularIJRNS1_8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERmEEEDcDpOT_:
   37|   846k|    {
   38|   846k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|   846k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_18region_for_visitorIiEEE13visit_regularIJRNS1_11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERmEEEDcDpOT_:
   37|  95.2k|    {
   38|  95.2k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  95.2k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_24for_each_chunk_p_visitorEE13visit_regularIJRNS1_8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERZNS1_14equals_visitor13equal_chunk_pINS1_16rrbtree_iteratorIiSF_Lj2ELj2EEEEEDaOT_EUlSN_T0_E_EEEDcDpOT_:
   37|  81.1k|    {
   38|  81.1k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  81.1k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_14equals_visitor10this_aux_tEE13visit_regularIJRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERjSJ_RNS1_16rrbtree_iteratorIiSG_Lj2ELj2EEERmEEEDcDpOT_:
   37|    789|    {
   38|    789|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|    789|    }
_ZN5immer6detail4rbts12visitor_baseINS1_24for_each_chunk_p_visitorEE13visit_regularIJRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERZNS1_14equals_visitor13equal_chunk_pINS1_16rrbtree_iteratorIiSF_Lj2ELj2EEEEEDaOT_EUlSN_T0_E_EEEDcDpOT_:
   37|  18.8k|    {
   38|  18.8k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  18.8k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_24for_each_chunk_p_visitorEE13visit_regularIJRNS1_11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERZNS1_14equals_visitor13equal_chunk_pINS1_16rrbtree_iteratorIiSF_Lj2ELj2EEEEEDaOT_EUlSN_T0_E_EEEDcDpOT_:
   37|  6.03k|    {
   38|  6.03k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  6.03k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_14equals_visitor10this_aux_tEE13visit_regularIJRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERjRNS1_11relaxed_posISH_EERNS1_16rrbtree_iteratorIiSG_Lj2ELj2EEERmEEEDcDpOT_:
   37|  2.65k|    {
   38|  2.65k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  2.65k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_14equals_visitor10this_aux_tEE13visit_regularIJRNS1_8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERjRNS1_11relaxed_posISH_EERNS1_16rrbtree_iteratorIiSG_Lj2ELj2EEERmEEEDcDpOT_:
   37|  2.68k|    {
   38|  2.68k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  2.68k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_24for_each_chunk_p_visitorEE13visit_relaxedIJRNS1_11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERZNS1_14equals_visitor13equal_chunk_pINS1_16rrbtree_iteratorIiSF_Lj2ELj2EEEEEDaOT_EUlSN_T0_E_EEEDcDpOT_:
   31|   569k|    {
   32|   569k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|   569k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_14equals_visitor3rrbEE13visit_relaxedIJRNS1_11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERNS1_16rrbtree_iteratorIiSG_Lj2ELj2EEERPSH_RjRmEEEDcDpOT_:
   31|  1.40k|    {
   32|  1.40k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|  1.40k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_14equals_visitor3rrbEE11visit_innerIJRNS1_11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEERNS1_16rrbtree_iteratorIiSG_Lj2ELj2EEERPSH_RjRmEEEDcDpOT_:
   43|  1.40k|    {
   44|  1.40k|        return Deriv::visit_node(std::forward<Args>(args)...);
   45|  1.40k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_14equals_visitor3rrbEE13visit_regularIJRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_16rrbtree_iteratorIiSG_Lj2ELj2EEERKPSH_RKjRmEEEDcDpOT_:
   37|  5.97k|    {
   38|  5.97k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  5.97k|    }
_ZN5immer6detail4rbts12visitor_baseINS1_14equals_visitor3rrbEE11visit_innerIJRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_16rrbtree_iteratorIiSG_Lj2ELj2EEERKPSH_RKjRmEEEDcDpOT_:
   43|  5.97k|    {
   44|  5.97k|        return Deriv::visit_node(std::forward<Args>(args)...);
   45|  5.97k|    }

_ZN5immer6detail15auto_const_castINS_15refcount_policyEEERT_RKS3_:
  143|   108M|{
  144|   108M|    return const_cast<T&>(x);
  145|   108M|}
_ZN5immer6detail21with_trailing_storageINS0_4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE7inner_tEPSC_Lb0EE15get_storage_ptrEv:
  113|   101M|    {
  114|   101M|        check_base();
  115|   101M|        auto* base = static_cast<Derived*>(this);
  116|   101M|        return reinterpret_cast<T*>(base + 1);
  117|   101M|    }
_ZN5immer6detail21with_trailing_storageINS0_4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE7inner_tEPSC_Lb0EE10check_baseEv:
  134|   101M|    {
  135|   101M|        static_assert(std::is_standard_layout<Derived>::value &&
  136|   101M|                          !std::is_empty<Derived>::value,
  137|   101M|                      "Please add 'true' if the derived class is emtpy");
  138|   101M|    }
_ZN5immer6detail9static_ifILb1EZNS0_4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE14delete_inner_rEPSC_jEUlT_E_EENSt3__19enable_ifIXT_EvE4typeEOT0_:
  329|  10.7M|{
  330|  10.7M|    std::forward<F>(f)(empty_t{});
  331|  10.7M|}
_ZN5immer6detail9destroy_nIPijEENSt3__19enable_ifIX20can_trivially_detroyIT_EES5_E4typeES5_T0_:
  188|  1.44M|{
  189|  1.44M|    return first + n;
  190|  1.44M|}
_ZN5immer6detail21with_trailing_storageINS0_4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE6leaf_tEiLb1EE15get_storage_ptrEv:
   75|  9.92M|    {
   76|  9.92M|        check_base();
   77|  9.92M|        return reinterpret_cast<T*>(this);
   78|  9.92M|    }
_ZN5immer6detail21with_trailing_storageINS0_4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE6leaf_tEiLb1EE10check_baseEv:
   94|  9.92M|    {
   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.92M|        static_assert(std::is_standard_layout<Derived>::value,
  100|  9.92M|                      "Please remove 'true' if the derived class is non emtpy");
  101|  9.92M|    }
_ZN5immer6detail18uninitialized_copyIPiS2_S2_EENSt3__19enable_ifIX18can_trivially_copyIT_T1_EES6_E4typeES5_T0_S6_:
  236|  1.74M|{
  237|  1.74M|    return std::copy(first, last, out);
  238|  1.74M|}
_ZN5immer6detail9static_ifILb0EPNS0_4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEZNSC_15make_inner_sr_nEjPNS0_3csl10member_twoINSC_14relaxed_data_tENSE_6memberIS8_NSE_7inheritINSA_5applyIS7_E4type5owneeEvE4typeEE4typeEE4typeEEUlT_E_ZNSC_15make_inner_sr_nEjST_EUlSU_E0_EENSt3__19enable_ifIXntT_ET0_E4typeEOT1_OT2_:
  344|   312k|{
  345|   312k|    return std::forward<F2>(f2)(empty_t{});
  346|   312k|}
_ZN5immer6detail4ipowImEET_S2_j:
  323|  61.3M|{
  324|  61.3M|    return pow == 0 ? 1 : num * ipow(num, pow - 1);
  ------------------
  |  Branch (324:12): [True: 1.91M, False: 59.4M]
  ------------------
  325|  61.3M|}
_ZN5immer6detail9static_ifILb0EPNS0_3csl10member_twoINS0_4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE14relaxed_data_tENS2_6memberISA_NS2_7inheritINSC_5applyIS9_E4type5owneeEvE4typeEE4typeEE4typeEZNSE_24ensure_mutable_relaxed_nENSK_4editEjEUlT_E_ZNSE_24ensure_mutable_relaxed_nEST_jEUlSU_E0_EENSt3__19enable_ifIXntT_ET0_E4typeEOT1_OT2_:
  344|  64.1k|{
  345|  64.1k|    return std::forward<F2>(f2)(empty_t{});
  346|  64.1k|}
_ZN5immer6detail9static_ifILb1EZNS0_4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE14make_inner_r_eENSA_5applyIS7_E4type4editEEUlT_E_EENSt3__19enable_ifIXT_EvE4typeEOT0_:
  329|  99.5k|{
  330|  99.5k|    std::forward<F>(f)(empty_t{});
  331|  99.5k|}
_ZN5immer6detail9static_ifILb0EPNS0_4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEZNSC_15make_inner_sr_eENSA_5applyIS7_E4type4editEPNS0_3csl10member_twoINSC_14relaxed_data_tENSI_6memberIS8_NSI_7inheritINSG_5owneeEvE4typeEE4typeEE4typeEEUlT_E_ZNSC_15make_inner_sr_eESH_SU_EUlSV_E0_EENSt3__19enable_ifIXntT_ET0_E4typeEOT1_OT2_:
  344|  11.5k|{
  345|  11.5k|    return std::forward<F2>(f2)(empty_t{});
  346|  11.5k|}
_ZN5immer6detail9destroy_nIPimEENSt3__19enable_ifIX20can_trivially_detroyIT_EES5_E4typeES5_T0_:
  188|    567|{
  189|    567|    return first + n;
  190|    567|}
_ZN5immer6detail9static_ifILb0EPNS0_3csl10member_twoINS0_4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE14relaxed_data_tENS2_6memberISA_NS2_7inheritINSC_5applyIS9_E4type5owneeEvE4typeEE4typeEE4typeEZNSE_22ensure_mutable_relaxedENSK_4editEEUlT_E_ZNSE_22ensure_mutable_relaxedEST_EUlSU_E0_EENSt3__19enable_ifIXntT_ET0_E4typeEOT1_OT2_:
  344|   197k|{
  345|   197k|    return std::forward<F2>(f2)(empty_t{});
  346|   197k|}
_ZN5immer6detail18uninitialized_moveIPiS2_EENSt3__19enable_ifIX18can_trivially_copyIT_T0_EES6_E4typeES5_S5_S6_:
  210|  1.55k|{
  211|  1.55k|    return std::copy(first, last, out);
  212|  1.55k|}
_ZN5immer6detail8as_constIiEEPKT_PS2_:
   29|  1.18M|{
   30|  1.18M|    return x;
   31|  1.18M|}
_ZN5immer6detail4makeINS_15debug_size_heapINS_8cpp_heapEEENS_3boxIiNS_13memory_policyINS_21free_list_heap_policyIS3_Lm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEEE6holderEJiEEEPT0_DpOT1_:
  260|  19.1k|{
  261|  19.1k|    auto ptr = Heap::allocate(sizeof(T));
  262|  19.1k|    IMMER_TRY {
  ------------------
  |  |   49|  19.1k|#define IMMER_TRY try
  ------------------
  263|  19.1k|        return new (ptr) T(std::forward<Args>(args)...);
  264|  19.1k|    }
  265|  19.1k|    IMMER_CATCH (...) {
  266|      0|        Heap::deallocate(sizeof(T), ptr);
  267|      0|        IMMER_RETHROW;
  ------------------
  |  |   52|      0|#define IMMER_RETHROW throw
  ------------------
  268|      0|    }
  269|  19.1k|}

_ZN5immer11flex_vectorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEC2Ev:
   96|  68.2k|    flex_vector() = default;
_ZNKR5immer11flex_vectorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE9push_backEi:
  246|   460k|    {
  247|   460k|        return impl_.push_back(std::move(value));
  248|   460k|    }
_ZN5immer11flex_vectorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEC2ENS_6detail4rbts7rrbtreeIiS8_Lj2ELj2EEE:
  536|  1.43M|        : impl_(std::move(impl))
  537|  1.43M|    {
  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|  1.43M|    }
_ZNK5immer11flex_vectorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE4sizeEv:
  181|  2.74M|    IMMER_NODISCARD size_type size() const { return impl_.size; }
flex-vector.cpp:_ZNKR5immer11flex_vectorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE6updateIZZ22LLVMFuzzerTestOneInputENK3$_6clI12fuzzer_inputEEDaRT_EUlSE_E_EES9_mOSE_:
  323|   119k|    {
  324|   119k|        return impl_.update(index, std::forward<FnT>(fn));
  325|   119k|    }
_ZNKR5immer11flex_vectorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE4takeEm:
  350|  24.1k|    {
  351|  24.1k|        return impl_.take(elems);
  352|  24.1k|    }
_ZNKR5immer11flex_vectorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE4dropEm:
  376|  25.6k|    {
  377|  25.6k|        return impl_.drop(elems);
  378|  25.6k|    }
_ZN5immer11flex_vectorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE8max_sizeEv:
   90|  1.11M|    constexpr static size_type max_size() { return impl_t::max_size(); }
_ZN5immerplERKNS_11flex_vectorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEESB_:
  403|   803k|    {
  404|   803k|        return l.impl_.concat(r.impl_);
  405|   803k|    }
_ZNO5immer11flex_vectorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE9push_backEi:
  251|  31.9k|    {
  252|  31.9k|        return push_back_move(move_t{}, std::move(value));
  253|  31.9k|    }
_ZN5immer11flex_vectorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE14push_back_moveENSt3__117integral_constantIbLb1EEEi:
  547|  31.9k|    {
  548|  31.9k|        impl_.push_back_mut({}, std::move(value));
  549|  31.9k|        return std::move(*this);
  550|  31.9k|    }
flex-vector.cpp:_ZNO5immer11flex_vectorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE6updateIZZ22LLVMFuzzerTestOneInputENK3$_6clI12fuzzer_inputEEDaRT_EUlSE_E0_EEDcmOSE_:
  329|  76.1k|    {
  330|  76.1k|        return update_move(move_t{}, index, std::forward<FnT>(fn));
  331|  76.1k|    }
flex-vector.cpp:_ZN5immer11flex_vectorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE11update_moveIZZ22LLVMFuzzerTestOneInputENK3$_6clI12fuzzer_inputEEDaRT_EUlSE_E0_EEOS9_NSt3__117integral_constantIbLb1EEEmOSE_:
  568|  76.1k|    {
  569|  76.1k|        impl_.update_mut({}, index, std::forward<Fn>(fn));
  570|  76.1k|        return std::move(*this);
  571|  76.1k|    }
_ZNO5immer11flex_vectorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE4takeEm:
  355|  41.4k|    {
  356|  41.4k|        return take_move(move_t{}, elems);
  357|  41.4k|    }
_ZN5immer11flex_vectorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE9take_moveENSt3__117integral_constantIbLb1EEEm:
  579|  41.4k|    {
  580|  41.4k|        impl_.take_mut({}, elems);
  581|  41.4k|        return std::move(*this);
  582|  41.4k|    }
_ZNO5immer11flex_vectorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE4dropEm:
  381|  42.4k|    {
  382|  42.4k|        return drop_move(move_t{}, elems);
  383|  42.4k|    }
_ZN5immer11flex_vectorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE9drop_moveENSt3__117integral_constantIbLb1EEEm:
  589|  42.4k|    {
  590|  42.4k|        impl_.drop_mut({}, elems);
  591|  42.4k|        return std::move(*this);
  592|  42.4k|    }
_ZN5immerplEONS_11flex_vectorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEERKS9_:
  409|   248k|    {
  410|   248k|        return concat_move(move_t{}, std::move(l), r);
  411|   248k|    }
_ZN5immer11flex_vectorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE11concat_moveENSt3__117integral_constantIbLb1EEEOS9_RKS9_:
  600|   248k|    {
  601|   248k|        concat_mut_l(l.impl_, {}, r.impl_);
  602|   248k|        return std::move(l);
  603|   248k|    }
_ZN5immerplERKNS_11flex_vectorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEOS9_:
  415|  3.89k|    {
  416|  3.89k|        return concat_move(move_t{}, l, std::move(r));
  417|  3.89k|    }
_ZN5immer11flex_vectorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE11concat_moveENSt3__117integral_constantIbLb1EEERKS9_OS9_:
  606|  3.89k|    {
  607|  3.89k|        concat_mut_r(l.impl_, r.impl_, {});
  608|  3.89k|        return std::move(r);
  609|  3.89k|    }
_ZN5immerplEONS_11flex_vectorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEESA_:
  421|  24.2k|    {
  422|  24.2k|        return concat_move(move_t{}, std::move(l), std::move(r));
  423|  24.2k|    }
_ZN5immer11flex_vectorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE11concat_moveENSt3__117integral_constantIbLb1EEEOS9_SD_:
  612|  24.2k|    {
  613|  24.2k|        concat_mut_lr_l(l.impl_, {}, r.impl_, {});
  614|  24.2k|        return std::move(l);
  615|  24.2k|    }
_ZNK5immer11flex_vectorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEeqERKS9_:
  222|  28.6k|    {
  223|  28.6k|        return impl_.equals(other.impl_);
  224|  28.6k|    }
_ZNKR5immer11flex_vectorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE5eraseEm:
  480|  3.35k|    {
  481|  3.35k|        return take(pos) + drop(pos + 1);
  482|  3.35k|    }
_ZNKR5immer11flex_vectorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE6insertEmi:
  442|  19.1k|    {
  443|  19.1k|        return take(pos).push_back(std::move(value)) + drop(pos);
  444|  19.1k|    }

_ZN5immer8cpp_heap10deallocateEmPv:
   36|  9.32M|    static void deallocate(std::size_t, void* data) { ::operator delete(data); }
_ZN5immer8cpp_heap8allocateIJEEEPvmDpT_:
   27|  9.32M|    {
   28|  9.32M|        return ::operator new(size);
   29|  9.32M|    }

_ZN5immer15debug_size_heapINS_8cpp_heapEE10deallocateIJEEEvmPvDpT_:
   57|  9.32M|    {
   58|  9.32M|        auto p = (std::size_t*) (((char*) data) - extra_size);
   59|  9.32M|        assert(*p == size);
  ------------------
  |  Branch (59:9): [True: 9.32M, False: 0]
  ------------------
   60|  9.32M|        Base::deallocate(size + extra_size, p, tags...);
   61|  9.32M|    }
_ZN5immer15debug_size_heapINS_8cpp_heapEE8allocateIJEEEPvmDpT_:
   49|  9.32M|    {
   50|  9.32M|        auto p = (std::size_t*) Base::allocate(size + extra_size, tags...);
   51|  9.32M|        new (p) std::size_t{size};
   52|  9.32M|        return ((char*) p) + extra_size;
   53|  9.32M|    }

_ZN5immer14free_list_heapILm56ELm1024ENS_15debug_size_heapINS_8cpp_heapEEEE10deallocateIJEEEvmPvDpT_:
   56|  9.89M|    {
   57|  9.89M|        assert(size <= Size);
  ------------------
  |  Branch (57:9): [True: 9.89M, False: 0]
  ------------------
   58|       |
   59|       |        // we use relaxed, because we are fine with temporarily having
   60|       |        // a few more/less buffers in free list
   61|  9.89M|        if (head().count.load(std::memory_order_relaxed) >= Limit) {
  ------------------
  |  Branch (61:13): [True: 9.30M, False: 596k]
  ------------------
   62|  9.30M|            base_t::deallocate(Size, data);
   63|  9.30M|        } else {
   64|   596k|            auto n = static_cast<node_t*>(data);
   65|   596k|            do {
   66|   596k|                n->next = head().data;
   67|   596k|            } while (!head().data.compare_exchange_weak(n->next, n));
  ------------------
  |  Branch (67:22): [True: 0, False: 596k]
  ------------------
   68|   596k|            head().count.fetch_add(1u, std::memory_order_relaxed);
   69|   596k|        }
   70|  9.89M|    }
_ZN5immer14free_list_heapILm56ELm1024ENS_15debug_size_heapINS_8cpp_heapEEEE4headEv:
   80|  22.7M|    {
   81|  22.7M|        static head_t head_{{nullptr}, {0}};
   82|  22.7M|        return head_;
   83|  22.7M|    }
_ZN5immer14free_list_heapILm56ELm1024ENS_15debug_size_heapINS_8cpp_heapEEEE8allocateIJEEEPvmDpT_:
   39|  9.89M|    {
   40|  9.89M|        assert(size <= Size);
  ------------------
  |  Branch (40:9): [True: 9.89M, False: 0]
  ------------------
   41|       |
   42|  9.89M|        node_t* n;
   43|  9.89M|        do {
   44|  9.89M|            n = head().data;
   45|  9.89M|            if (!n) {
  ------------------
  |  Branch (45:17): [True: 9.30M, False: 595k]
  ------------------
   46|  9.30M|                auto p = base_t::allocate(Size);
   47|  9.30M|                return p;
   48|  9.30M|            }
   49|  9.89M|        } while (!head().data.compare_exchange_weak(n, n->next));
  ------------------
  |  Branch (49:18): [True: 0, False: 595k]
  ------------------
   50|   595k|        head().count.fetch_sub(1u, std::memory_order_relaxed);
   51|   595k|        return n;
   52|  9.89M|    }

_ZN5immer10split_heapILm56ENS_27thread_local_free_list_heapILm56ELm1024ENS_14free_list_heapILm56ELm1024ENS_15debug_size_heapINS_8cpp_heapEEEEEEES5_E10deallocateIJEEEvmPvDpT_:
   33|  25.4M|    {
   34|  25.4M|        if (size <= Size)
  ------------------
  |  Branch (34:13): [True: 25.4M, False: 0]
  ------------------
   35|  25.4M|            SmallHeap::deallocate(size, data, tags...);
   36|      0|        else
   37|      0|            BigHeap::deallocate(size, data, tags...);
   38|  25.4M|    }
_ZN5immer10split_heapILm56ENS_27thread_local_free_list_heapILm56ELm1024ENS_14free_list_heapILm56ELm1024ENS_15debug_size_heapINS_8cpp_heapEEEEEEES5_E8allocateIJEEEPvmDpT_:
   26|  15.0M|    {
   27|  15.0M|        return size <= Size ? SmallHeap::allocate(size, tags...)
  ------------------
  |  Branch (27:16): [True: 15.0M, False: 0]
  ------------------
   28|  15.0M|                            : BigHeap::allocate(size, tags...);
   29|  15.0M|    }
_ZN5immer10split_heapILm56ENS_27thread_local_free_list_heapILm56ELm1024ENS_14free_list_heapILm56ELm1024ENS_15debug_size_heapINS_8cpp_heapEEEEEEES5_E8allocateIJNS_10norefs_tagEEEEPvmDpT_:
   26|  10.3M|    {
   27|  10.3M|        return size <= Size ? SmallHeap::allocate(size, tags...)
  ------------------
  |  Branch (27:16): [True: 10.3M, False: 0]
  ------------------
   28|  10.3M|                            : BigHeap::allocate(size, tags...);
   29|  10.3M|    }

_ZN5immer6detail30thread_local_free_list_storageINS0_26unsafe_free_list_heap_implIS1_Lm56ELm1024ENS_14free_list_heapILm56ELm1024ENS_15debug_size_heapINS_8cpp_heapEEEEEEEE4headEv:
   35|   128M|    {
   36|   128M|        thread_local static head_t head_{nullptr, 0};
   37|   128M|        return head_;
   38|   128M|    }
_ZN5immer6detail30thread_local_free_list_storageINS0_26unsafe_free_list_heap_implIS1_Lm56ELm1024ENS_14free_list_heapILm56ELm1024ENS_15debug_size_heapINS_8cpp_heapEEEEEEEE6head_tD2Ev:
   31|      1|        ~head_t() { Heap::clear(); }

_ZN5immer6detail26unsafe_free_list_heap_implINS0_30thread_local_free_list_storageELm56ELm1024ENS_14free_list_heapILm56ELm1024ENS_15debug_size_heapINS_8cpp_heapEEEEEE10deallocateIJEEEvmPvDpT_:
   72|  25.4M|    {
   73|  25.4M|        assert(size <= Size);
  ------------------
  |  Branch (73:9): [True: 25.4M, False: 0]
  ------------------
   74|       |
   75|  25.4M|        if (storage::head().count >= Limit)
  ------------------
  |  Branch (75:13): [True: 9.89M, False: 15.5M]
  ------------------
   76|  9.89M|            base_t::deallocate(Size, data);
   77|  15.5M|        else {
   78|  15.5M|            auto n               = static_cast<node_t*>(data);
   79|  15.5M|            n->next              = storage::head().data;
   80|  15.5M|            storage::head().data = n;
   81|  15.5M|            ++storage::head().count;
   82|  15.5M|        }
   83|  25.4M|    }
_ZN5immer6detail26unsafe_free_list_heap_implINS0_30thread_local_free_list_storageELm56ELm1024ENS_14free_list_heapILm56ELm1024ENS_15debug_size_heapINS_8cpp_heapEEEEEE5clearEv:
   86|      1|    {
   87|  1.02k|        while (storage::head().data) {
  ------------------
  |  Branch (87:16): [True: 1.02k, False: 1]
  ------------------
   88|  1.02k|            auto n = storage::head().data->next;
   89|  1.02k|            base_t::deallocate(Size, storage::head().data);
   90|  1.02k|            storage::head().data = n;
   91|  1.02k|            --storage::head().count;
   92|  1.02k|        }
   93|      1|    }
_ZN5immer6detail26unsafe_free_list_heap_implINS0_30thread_local_free_list_storageELm56ELm1024ENS_14free_list_heapILm56ELm1024ENS_15debug_size_heapINS_8cpp_heapEEEEEE8allocateIJEEEPvmDpT_:
   57|  15.0M|    {
   58|  15.0M|        assert(size <= Size);
  ------------------
  |  Branch (58:9): [True: 15.0M, False: 0]
  ------------------
   59|       |
   60|  15.0M|        auto n = storage::head().data;
   61|  15.0M|        if (!n) {
  ------------------
  |  Branch (61:13): [True: 5.06M, False: 10.0M]
  ------------------
   62|  5.06M|            auto p = base_t::allocate(Size);
   63|  5.06M|            return p;
   64|  5.06M|        }
   65|  10.0M|        --storage::head().count;
   66|  10.0M|        storage::head().data = n->next;
   67|  10.0M|        return n;
   68|  15.0M|    }
_ZN5immer6detail26unsafe_free_list_heap_implINS0_30thread_local_free_list_storageELm56ELm1024ENS_14free_list_heapILm56ELm1024ENS_15debug_size_heapINS_8cpp_heapEEEEEE8allocateIJNS_10norefs_tagEEEEPvmDpT_:
   57|  10.3M|    {
   58|  10.3M|        assert(size <= Size);
  ------------------
  |  Branch (58:9): [True: 10.3M, False: 0]
  ------------------
   59|       |
   60|  10.3M|        auto n = storage::head().data;
   61|  10.3M|        if (!n) {
  ------------------
  |  Branch (61:13): [True: 4.82M, False: 5.56M]
  ------------------
   62|  4.82M|            auto p = base_t::allocate(Size);
   63|  4.82M|            return p;
   64|  4.82M|        }
   65|  5.56M|        --storage::head().count;
   66|  5.56M|        storage::head().data = n->next;
   67|  5.56M|        return n;
   68|  10.3M|    }

_ZN5immer15refcount_policyC2Ev:
   28|  25.4M|        : refcount{1} {};
_ZN5immer15refcount_policy3incEv:
   34|  40.3M|    void inc() { refcount.fetch_add(1, std::memory_order_relaxed); }
_ZN5immer15refcount_policy3decEv:
   36|  65.7M|    bool dec() { return 1 == refcount.fetch_sub(1, std::memory_order_acq_rel); }
_ZN5immer15refcount_policy6uniqueEv:
   38|  1.96M|    bool unique() { return refcount == 1; }

_ZNK5immer20no_transience_policy5applyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEEE4type5ownee5ownedEv:
   36|  25.4M|                bool owned() const { return false; }
_ZNK5immer20no_transience_policy5applyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEEE4type5ownee10can_mutateENS6_4editE:
   35|   119k|                bool can_mutate(edit) const { return false; }
_ZN5immer20no_transience_policy5applyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEEE4type5owneeaSENS6_4editE:
   34|   517k|                ownee& operator=(edit) { return *this; };

