LLVMFuzzerTestOneInput:
   18|  10.0k|{
   19|  10.0k|    constexpr auto var_count = 8;
   20|  10.0k|    constexpr auto bits      = 2;
   21|       |
   22|  10.0k|    using vector_t =
   23|  10.0k|        immer::flex_vector<int, immer::default_memory_policy, bits, bits>;
   24|  10.0k|    using size_t = std::uint8_t;
   25|       |
   26|  10.0k|    auto vars = std::array<vector_t, var_count>{};
   27|       |
   28|  10.0k|    auto is_valid_var = [&](auto idx) { return idx >= 0 && idx < var_count; };
   29|  10.0k|    auto is_valid_var_neq = [](auto other) {
   30|  10.0k|        return [=](auto idx) {
   31|  10.0k|            return idx >= 0 && idx < var_count && idx != other;
   32|  10.0k|        };
   33|  10.0k|    };
   34|  10.0k|    auto is_valid_index = [](auto& v) {
   35|  10.0k|        return [&](auto idx) { return idx >= 0 && idx < v.size(); };
   36|  10.0k|    };
   37|  10.0k|    auto is_valid_size = [](auto& v) {
   38|  10.0k|        return [&](auto idx) { return idx >= 0 && idx <= v.size(); };
   39|  10.0k|    };
   40|  10.0k|    auto can_concat = [](auto&& v1, auto&& v2) {
   41|  10.0k|        return v1.size() + v2.size() < vector_t::max_size();
   42|  10.0k|    };
   43|  10.0k|    auto can_compare = [](auto&& v) {
   44|       |        // avoid comparing vectors that are too big, and hence, slow to compare
   45|  10.0k|        return v.size() < (1 << 15);
   46|  10.0k|    };
   47|  10.0k|    return fuzzer_input{data, size}.run([&](auto& in) {
   48|  10.0k|        enum ops
   49|  10.0k|        {
   50|  10.0k|            op_push_back,
   51|  10.0k|            op_update,
   52|  10.0k|            op_take,
   53|  10.0k|            op_drop,
   54|  10.0k|            op_concat,
   55|  10.0k|            op_push_back_move,
   56|  10.0k|            op_update_move,
   57|  10.0k|            op_take_move,
   58|  10.0k|            op_drop_move,
   59|  10.0k|            op_concat_move_l,
   60|  10.0k|            op_concat_move_r,
   61|  10.0k|            op_concat_move_lr,
   62|  10.0k|            op_insert,
   63|  10.0k|            op_erase,
   64|  10.0k|            op_compare,
   65|  10.0k|        };
   66|  10.0k|        auto src = read<char>(in, is_valid_var);
   67|  10.0k|        auto dst = read<char>(in, is_valid_var);
   68|  10.0k|        switch (read<char>(in)) {
   69|  10.0k|        case op_push_back: {
   70|  10.0k|            vars[dst] = vars[src].push_back(42);
   71|  10.0k|            break;
   72|  10.0k|        }
   73|  10.0k|        case op_update: {
   74|  10.0k|            auto idx  = read<size_t>(in, is_valid_index(vars[src]));
   75|  10.0k|            vars[dst] = vars[src].update(idx, [](auto x) { return x + 1; });
   76|  10.0k|            break;
   77|  10.0k|        }
   78|  10.0k|        case op_take: {
   79|  10.0k|            auto idx  = read<size_t>(in, is_valid_size(vars[src]));
   80|  10.0k|            vars[dst] = vars[src].take(idx);
   81|  10.0k|            break;
   82|  10.0k|        }
   83|  10.0k|        case op_drop: {
   84|  10.0k|            auto idx  = read<size_t>(in, is_valid_size(vars[src]));
   85|  10.0k|            vars[dst] = vars[src].drop(idx);
   86|  10.0k|            break;
   87|  10.0k|        }
   88|  10.0k|        case op_concat: {
   89|  10.0k|            auto src2 = read<char>(in, is_valid_var);
   90|  10.0k|            if (can_concat(vars[src], vars[src2]))
   91|  10.0k|                vars[dst] = vars[src] + vars[src2];
   92|  10.0k|            break;
   93|  10.0k|        }
   94|  10.0k|        case op_push_back_move: {
   95|  10.0k|            vars[dst] = std::move(vars[src]).push_back(21);
   96|  10.0k|            break;
   97|  10.0k|        }
   98|  10.0k|        case op_update_move: {
   99|  10.0k|            auto idx = read<size_t>(in, is_valid_index(vars[src]));
  100|  10.0k|            vars[dst] =
  101|  10.0k|                std::move(vars[src]).update(idx, [](auto x) { return x + 1; });
  102|  10.0k|            break;
  103|  10.0k|        }
  104|  10.0k|        case op_take_move: {
  105|  10.0k|            auto idx  = read<size_t>(in, is_valid_size(vars[src]));
  106|  10.0k|            vars[dst] = std::move(vars[src]).take(idx);
  107|  10.0k|            break;
  108|  10.0k|        }
  109|  10.0k|        case op_drop_move: {
  110|  10.0k|            auto idx  = read<size_t>(in, is_valid_size(vars[src]));
  111|  10.0k|            vars[dst] = std::move(vars[src]).drop(idx);
  112|  10.0k|            break;
  113|  10.0k|        }
  114|  10.0k|        case op_concat_move_l: {
  115|  10.0k|            auto src2 = read<char>(in, is_valid_var_neq(src));
  116|  10.0k|            if (can_concat(vars[src], vars[src2]))
  117|  10.0k|                vars[dst] = std::move(vars[src]) + vars[src2];
  118|  10.0k|            break;
  119|  10.0k|        }
  120|  10.0k|        case op_concat_move_r: {
  121|  10.0k|            auto src2 = read<char>(in, is_valid_var_neq(src));
  122|  10.0k|            if (can_concat(vars[src], vars[src2]))
  123|  10.0k|                vars[dst] = vars[src] + std::move(vars[src2]);
  124|  10.0k|            break;
  125|  10.0k|        }
  126|  10.0k|        case op_concat_move_lr: {
  127|  10.0k|            auto src2 = read<char>(in, is_valid_var_neq(src));
  128|  10.0k|            if (can_concat(vars[src], vars[src2]))
  129|  10.0k|                vars[dst] = std::move(vars[src]) + std::move(vars[src2]);
  130|  10.0k|            break;
  131|  10.0k|        }
  132|  10.0k|        case op_compare: {
  133|  10.0k|            using std::swap;
  134|  10.0k|            if (can_compare(vars[src]) && vars[src] == vars[dst])
  135|  10.0k|                swap(vars[src], vars[dst]);
  136|  10.0k|            break;
  137|  10.0k|        }
  138|  10.0k|        case op_erase: {
  139|  10.0k|            auto idx  = read<size_t>(in, is_valid_index(vars[src]));
  140|  10.0k|            vars[dst] = vars[src].erase(idx);
  141|  10.0k|            break;
  142|  10.0k|        }
  143|  10.0k|        case op_insert: {
  144|  10.0k|            auto idx  = read<size_t>(in, is_valid_size(vars[src]));
  145|  10.0k|            vars[dst] = vars[src].insert(idx, immer::box<int>{42});
  146|  10.0k|            break;
  147|  10.0k|        }
  148|  10.0k|        default:
  149|  10.0k|            break;
  150|  10.0k|        };
  151|  10.0k|        return true;
  152|  10.0k|    });
  153|  10.0k|}
flex-vector.cpp:_ZZ22LLVMFuzzerTestOneInputENK3$_6clI12fuzzer_inputEEDaRT_:
   47|  2.48M|    return fuzzer_input{data, size}.run([&](auto& in) {
   48|  2.48M|        enum ops
   49|  2.48M|        {
   50|  2.48M|            op_push_back,
   51|  2.48M|            op_update,
   52|  2.48M|            op_take,
   53|  2.48M|            op_drop,
   54|  2.48M|            op_concat,
   55|  2.48M|            op_push_back_move,
   56|  2.48M|            op_update_move,
   57|  2.48M|            op_take_move,
   58|  2.48M|            op_drop_move,
   59|  2.48M|            op_concat_move_l,
   60|  2.48M|            op_concat_move_r,
   61|  2.48M|            op_concat_move_lr,
   62|  2.48M|            op_insert,
   63|  2.48M|            op_erase,
   64|  2.48M|            op_compare,
   65|  2.48M|        };
   66|  2.48M|        auto src = read<char>(in, is_valid_var);
   67|  2.48M|        auto dst = read<char>(in, is_valid_var);
   68|  2.48M|        switch (read<char>(in)) {
   69|   261k|        case op_push_back: {
  ------------------
  |  Branch (69:9): [True: 261k, False: 2.21M]
  ------------------
   70|   261k|            vars[dst] = vars[src].push_back(42);
   71|   261k|            break;
   72|      0|        }
   73|   273k|        case op_update: {
  ------------------
  |  Branch (73:9): [True: 273k, False: 2.20M]
  ------------------
   74|   273k|            auto idx  = read<size_t>(in, is_valid_index(vars[src]));
   75|   273k|            vars[dst] = vars[src].update(idx, [](auto x) { return x + 1; });
   76|   273k|            break;
   77|      0|        }
   78|  2.19k|        case op_take: {
  ------------------
  |  Branch (78:9): [True: 2.19k, False: 2.47M]
  ------------------
   79|  2.19k|            auto idx  = read<size_t>(in, is_valid_size(vars[src]));
   80|  2.19k|            vars[dst] = vars[src].take(idx);
   81|  2.19k|            break;
   82|      0|        }
   83|  4.32k|        case op_drop: {
  ------------------
  |  Branch (83:9): [True: 4.32k, False: 2.47M]
  ------------------
   84|  4.32k|            auto idx  = read<size_t>(in, is_valid_size(vars[src]));
   85|  4.32k|            vars[dst] = vars[src].drop(idx);
   86|  4.32k|            break;
   87|      0|        }
   88|  1.05M|        case op_concat: {
  ------------------
  |  Branch (88:9): [True: 1.05M, False: 1.42M]
  ------------------
   89|  1.05M|            auto src2 = read<char>(in, is_valid_var);
   90|  1.05M|            if (can_concat(vars[src], vars[src2]))
  ------------------
  |  Branch (90:17): [True: 990k, False: 65.8k]
  ------------------
   91|   990k|                vars[dst] = vars[src] + vars[src2];
   92|  1.05M|            break;
   93|      0|        }
   94|  12.0k|        case op_push_back_move: {
  ------------------
  |  Branch (94:9): [True: 12.0k, False: 2.46M]
  ------------------
   95|  12.0k|            vars[dst] = std::move(vars[src]).push_back(21);
   96|  12.0k|            break;
   97|      0|        }
   98|  65.4k|        case op_update_move: {
  ------------------
  |  Branch (98:9): [True: 65.4k, False: 2.41M]
  ------------------
   99|  65.4k|            auto idx = read<size_t>(in, is_valid_index(vars[src]));
  100|  65.4k|            vars[dst] =
  101|  65.4k|                std::move(vars[src]).update(idx, [](auto x) { return x + 1; });
  102|  65.4k|            break;
  103|      0|        }
  104|  43.6k|        case op_take_move: {
  ------------------
  |  Branch (104:9): [True: 43.6k, False: 2.43M]
  ------------------
  105|  43.6k|            auto idx  = read<size_t>(in, is_valid_size(vars[src]));
  106|  43.6k|            vars[dst] = std::move(vars[src]).take(idx);
  107|  43.6k|            break;
  108|      0|        }
  109|  43.6k|        case op_drop_move: {
  ------------------
  |  Branch (109:9): [True: 43.6k, False: 2.43M]
  ------------------
  110|  43.6k|            auto idx  = read<size_t>(in, is_valid_size(vars[src]));
  111|  43.6k|            vars[dst] = std::move(vars[src]).drop(idx);
  112|  43.6k|            break;
  113|      0|        }
  114|   610k|        case op_concat_move_l: {
  ------------------
  |  Branch (114:9): [True: 610k, False: 1.87M]
  ------------------
  115|   610k|            auto src2 = read<char>(in, is_valid_var_neq(src));
  116|   610k|            if (can_concat(vars[src], vars[src2]))
  ------------------
  |  Branch (116:17): [True: 557k, False: 53.2k]
  ------------------
  117|   557k|                vars[dst] = std::move(vars[src]) + vars[src2];
  118|   610k|            break;
  119|      0|        }
  120|  5.10k|        case op_concat_move_r: {
  ------------------
  |  Branch (120:9): [True: 5.10k, False: 2.47M]
  ------------------
  121|  5.10k|            auto src2 = read<char>(in, is_valid_var_neq(src));
  122|  5.10k|            if (can_concat(vars[src], vars[src2]))
  ------------------
  |  Branch (122:17): [True: 4.19k, False: 908]
  ------------------
  123|  4.19k|                vars[dst] = vars[src] + std::move(vars[src2]);
  124|  5.10k|            break;
  125|      0|        }
  126|  3.03k|        case op_concat_move_lr: {
  ------------------
  |  Branch (126:9): [True: 3.03k, False: 2.47M]
  ------------------
  127|  3.03k|            auto src2 = read<char>(in, is_valid_var_neq(src));
  128|  3.03k|            if (can_concat(vars[src], vars[src2]))
  ------------------
  |  Branch (128:17): [True: 2.19k, False: 843]
  ------------------
  129|  2.19k|                vars[dst] = std::move(vars[src]) + std::move(vars[src2]);
  130|  3.03k|            break;
  131|      0|        }
  132|  30.7k|        case op_compare: {
  ------------------
  |  Branch (132:9): [True: 30.7k, False: 2.45M]
  ------------------
  133|  30.7k|            using std::swap;
  134|  30.7k|            if (can_compare(vars[src]) && vars[src] == vars[dst])
  ------------------
  |  Branch (134:17): [True: 27.0k, False: 3.72k]
  |  Branch (134:43): [True: 6.09k, False: 20.9k]
  ------------------
  135|  6.09k|                swap(vars[src], vars[dst]);
  136|  30.7k|            break;
  137|      0|        }
  138|  3.39k|        case op_erase: {
  ------------------
  |  Branch (138:9): [True: 3.39k, False: 2.47M]
  ------------------
  139|  3.39k|            auto idx  = read<size_t>(in, is_valid_index(vars[src]));
  140|  3.39k|            vars[dst] = vars[src].erase(idx);
  141|  3.39k|            break;
  142|      0|        }
  143|  22.0k|        case op_insert: {
  ------------------
  |  Branch (143:9): [True: 22.0k, False: 2.45M]
  ------------------
  144|  22.0k|            auto idx  = read<size_t>(in, is_valid_size(vars[src]));
  145|  22.0k|            vars[dst] = vars[src].insert(idx, immer::box<int>{42});
  146|  22.0k|            break;
  147|      0|        }
  148|  33.5k|        default:
  ------------------
  |  Branch (148:9): [True: 33.5k, False: 2.44M]
  ------------------
  149|  33.5k|            break;
  150|  2.48M|        };
  151|  2.47M|        return true;
  152|  2.48M|    });
flex-vector.cpp:_ZZ22LLVMFuzzerTestOneInputENK3$_0clIcEEDaT_:
   28|  6.39M|    auto is_valid_var = [&](auto idx) { return idx >= 0 && idx < var_count; };
  ------------------
  |  Branch (28:48): [True: 6.21M, False: 174k]
  |  Branch (28:60): [True: 6.00M, False: 217k]
  ------------------
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|   408k|        return [&](auto idx) { return idx >= 0 && idx < v.size(); };
  ------------------
  |  Branch (35:39): [True: 408k, False: 0]
  |  Branch (35:51): [True: 342k, False: 66.5k]
  ------------------
flex-vector.cpp:_ZZ22LLVMFuzzerTestOneInputENK3$_2clIN5immer11flex_vectorIiNS1_13memory_policyINS1_21free_list_heap_policyINS1_8cpp_heapELm1024EEENS1_15refcount_policyENS1_15spinlock_policyENS1_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEDaRT_:
   34|   342k|    auto is_valid_index = [](auto& v) {
   35|   342k|        return [&](auto idx) { return idx >= 0 && idx < v.size(); };
   36|   342k|    };
flex-vector.cpp:_ZZZ22LLVMFuzzerTestOneInputENK3$_6clI12fuzzer_inputEEDaRT_ENKUlS2_E_clIiEEDaS2_:
   75|   273k|            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|   130k|        return [&](auto idx) { return idx >= 0 && idx <= v.size(); };
  ------------------
  |  Branch (38:39): [True: 130k, False: 0]
  |  Branch (38:51): [True: 115k, False: 14.3k]
  ------------------
flex-vector.cpp:_ZZ22LLVMFuzzerTestOneInputENK3$_3clIN5immer11flex_vectorIiNS1_13memory_policyINS1_21free_list_heap_policyINS1_8cpp_heapELm1024EEENS1_15refcount_policyENS1_15spinlock_policyENS1_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEDaRT_:
   37|   115k|    auto is_valid_size = [](auto& v) {
   38|   115k|        return [&](auto idx) { return idx >= 0 && idx <= v.size(); };
   39|   115k|    };
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.67M|    auto can_concat = [](auto&& v1, auto&& v2) {
   41|  1.67M|        return v1.size() + v2.size() < vector_t::max_size();
   42|  1.67M|    };
flex-vector.cpp:_ZZZ22LLVMFuzzerTestOneInputENK3$_6clI12fuzzer_inputEEDaRT_ENKUlS2_E0_clIiEEDaS2_:
  101|  65.4k|                std::move(vars[src]).update(idx, [](auto x) { return x + 1; });
flex-vector.cpp:_ZZZ22LLVMFuzzerTestOneInputENK3$_1clIcEEDaT_ENKUlS1_E_clIcEEDaS1_:
   30|   686k|        return [=](auto idx) {
   31|   686k|            return idx >= 0 && idx < var_count && idx != other;
  ------------------
  |  Branch (31:20): [True: 675k, False: 10.4k]
  |  Branch (31:32): [True: 654k, False: 20.9k]
  |  Branch (31:51): [True: 618k, False: 36.3k]
  ------------------
   32|   686k|        };
flex-vector.cpp:_ZZ22LLVMFuzzerTestOneInputENK3$_1clIcEEDaT_:
   29|   618k|    auto is_valid_var_neq = [](auto other) {
   30|   618k|        return [=](auto idx) {
   31|   618k|            return idx >= 0 && idx < var_count && idx != other;
   32|   618k|        };
   33|   618k|    };
flex-vector.cpp:_ZZ22LLVMFuzzerTestOneInputENK3$_5clIRN5immer11flex_vectorIiNS1_13memory_policyINS1_21free_list_heap_policyINS1_8cpp_heapELm1024EEENS1_15refcount_policyENS1_15spinlock_policyENS1_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEDaOT_:
   43|  30.7k|    auto can_compare = [](auto&& v) {
   44|       |        // avoid comparing vectors that are too big, and hence, slow to compare
   45|  30.7k|        return v.size() < (1 << 15);
   46|  30.7k|    };

flex-vector.cpp:_ZN12fuzzer_input3runIZ22LLVMFuzzerTestOneInputE3$_6EEiT_:
   50|  10.0k|    {
   51|  10.0k|        if (size_ > fuzzer_input_max_size)
  ------------------
  |  Branch (51:13): [True: 8, False: 10.0k]
  ------------------
   52|      8|            return 0;
   53|  10.0k|        try {
   54|  2.48M|            while (step(*this))
  ------------------
  |  Branch (54:20): [True: 2.47M, False: 10.0k]
  ------------------
   55|  2.47M|                continue;
   56|  10.0k|        } catch (const no_more_input&) {};
   57|  10.0k|        return 0;
   58|  10.0k|    }
flex-vector.cpp:_Z4readIcZ22LLVMFuzzerTestOneInputE3$_0ET_R12fuzzer_inputT0_:
   69|  6.00M|{
   70|  6.00M|    auto x = read<T>(fz);
   71|  6.40M|    while (!cond(x))
  ------------------
  |  Branch (71:12): [True: 391k, False: 6.00M]
  ------------------
   72|   391k|        x = read<T>(fz);
   73|  6.00M|    return x;
   74|  6.00M|}
_Z4readIcERKT_R12fuzzer_input:
   63|  9.55M|{
   64|  9.55M|    return *reinterpret_cast<const T*>(fz.next(sizeof(T), alignof(T)));
   65|  9.55M|}
_ZN12fuzzer_input4nextEmm:
   40|  10.0M|    {
   41|  10.0M|        auto& p = const_cast<void*&>(reinterpret_cast<const void*&>(data_));
   42|  10.0M|        auto r  = std::align(align, size, p, size_);
   43|  10.0M|        if (r == nullptr)
  ------------------
  |  Branch (43:13): [True: 10.0k, False: 10.0M]
  ------------------
   44|  10.0k|            throw no_more_input{};
   45|  10.0M|        return next(size);
   46|  10.0M|    }
_ZN12fuzzer_input4nextEm:
   30|  10.0M|    {
   31|  10.0M|        if (size_ < size)
  ------------------
  |  Branch (31:13): [True: 0, False: 10.0M]
  ------------------
   32|      0|            throw no_more_input{};
   33|  10.0M|        auto r = data_;
   34|  10.0M|        data_ += size;
   35|  10.0M|        size_ -= size;
   36|  10.0M|        return r;
   37|  10.0M|    }
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_:
   69|   342k|{
   70|   342k|    auto x = read<T>(fz);
   71|   408k|    while (!cond(x))
  ------------------
  |  Branch (71:12): [True: 66.5k, False: 342k]
  ------------------
   72|  66.5k|        x = read<T>(fz);
   73|   342k|    return x;
   74|   342k|}
_Z4readIhERKT_R12fuzzer_input:
   63|   539k|{
   64|   539k|    return *reinterpret_cast<const T*>(fz.next(sizeof(T), alignof(T)));
   65|   539k|}
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_:
   69|   115k|{
   70|   115k|    auto x = read<T>(fz);
   71|   130k|    while (!cond(x))
  ------------------
  |  Branch (71:12): [True: 14.3k, False: 115k]
  ------------------
   72|  14.3k|        x = read<T>(fz);
   73|   115k|    return x;
   74|   115k|}
flex-vector.cpp:_Z4readIcZZ22LLVMFuzzerTestOneInputENK3$_1clIcEEDaT_EUlS2_E_ES2_R12fuzzer_inputT0_:
   69|   618k|{
   70|   618k|    auto x = read<T>(fz);
   71|   686k|    while (!cond(x))
  ------------------
  |  Branch (71:12): [True: 67.8k, False: 618k]
  ------------------
   72|  67.8k|        x = read<T>(fz);
   73|   618k|    return x;
   74|   618k|}

_ZN5immer3boxIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEEEC2IivEEOT_:
   81|  22.0k|    {}
_ZN5immer3boxIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEEE6holderC2IJiEEEDpOT_:
   48|  22.0k|        {}
_ZNK5immer3boxIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEEEcvRKiEv:
  128|  22.0k|    operator const T&() const { return get(); }
_ZNK5immer3boxIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEEE3getEv:
  125|  22.0k|    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:
  117|  22.0k|    {
  118|  22.0k|        if (impl_ && impl_->dec()) {
  ------------------
  |  Branch (118:13): [True: 22.0k, False: 0]
  |  Branch (118:22): [True: 22.0k, False: 0]
  ------------------
  119|  22.0k|            impl_->~holder();
  120|  22.0k|            heap::deallocate(sizeof(holder), impl_);
  121|  22.0k|        }
  122|  22.0k|    }

_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|   146M|        {
  171|   146M|            return x.get_(type_t<U>{});
  172|   146M|        }
_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|   146M|        {
  185|   146M|            return n.get_(t);
  186|   146M|        }
_ZNK5immer6detail3csl6memberINS_15refcount_policyENS1_7inheritINS_20no_transience_policy5applyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEEE4type5owneeEvE4typeEE4type4get_ENS1_6type_tIS3_EE:
  128|   163M|        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|  17.5M|        {
  171|  17.5M|            return x.get_(type_t<U>{});
  172|  17.5M|        }
_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|  17.5M|        {
  185|  17.5M|            return n.get_(t);
  186|  17.5M|        }
_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|  16.7M|        {
  166|  16.7M|            return x.get_(type_t<U>{});
  167|  16.7M|        }
_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|  16.7M|        {
  180|  16.7M|            return n.get_(t);
  181|  16.7M|        }
_ZN5immer6detail3csl7inheritINS_20no_transience_policy5applyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEEE4type5owneeEvE4type4get_ENS1_6type_tISA_EE:
  102|  39.6M|        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|  22.9M|        {
  166|  22.9M|            return x.get_(type_t<U>{});
  167|  22.9M|        }
_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|  22.9M|        {
  180|  22.9M|            return n.get_(t);
  181|  22.9M|        }
_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|   108k|        {
  171|   108k|            return x.get_(type_t<U>{});
  172|   108k|        }
_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|   108k|        {
  185|   108k|            return n.get_(t);
  186|   108k|        }
_ZNK5immer6detail3csl7inheritINS_20no_transience_policy5applyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEEE4type5owneeEvE4type4get_ENS1_6type_tISA_EE:
  103|   108k|        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:
  112|  7.91M|    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|  7.91M|    {
   23|  7.91M|        return x.dereference();
   24|  7.91M|    }
_ZNK5immer6detail15iterator_facadeINS0_4rbts16rrbtree_iteratorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENSt3__126random_access_iterator_tagEiRKilPSF_E7derivedEv:
   99|  7.97M|    {
  100|  7.97M|        static_assert(std::is_base_of<iterator_facade, DerivedT>::value,
  101|  7.97M|                      "must pass a derived thing");
  102|  7.97M|        return *static_cast<const DerivedT*>(this);
  103|  7.97M|    }
_ZN5immer6detail15iterator_facadeINS0_4rbts16rrbtree_iteratorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENSt3__126random_access_iterator_tagEiRKilPSF_EpLEl:
  156|   185k|    {
  157|   185k|        access_t::advance(derived(), n);
  158|   185k|        return derived();
  159|   185k|    }
_ZN5immer6detail20iterator_core_access7advanceIRNS0_4rbts16rrbtree_iteratorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEElEEDcOT_T0_:
   46|   185k|    {
   47|   185k|        return x.advance(d);
   48|   185k|    }
_ZN5immer6detail15iterator_facadeINS0_4rbts16rrbtree_iteratorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENSt3__126random_access_iterator_tagEiRKilPSF_E7derivedEv:
  105|  12.6M|    {
  106|  12.6M|        static_assert(std::is_base_of<iterator_facade, DerivedT>::value,
  107|  12.6M|                      "must pass a derived thing");
  108|  12.6M|        return *static_cast<DerivedT*>(this);
  109|  12.6M|    }
_ZN5immer6detail15iterator_facadeINS0_4rbts16rrbtree_iteratorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENSt3__126random_access_iterator_tagEiRKilPSF_EppEv:
  130|  6.15M|    {
  131|  6.15M|        access_t::increment(derived());
  132|  6.15M|        return derived();
  133|  6.15M|    }
_ZN5immer6detail20iterator_core_access9incrementIRNS0_4rbts16rrbtree_iteratorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEDcOT_:
   28|  6.15M|    {
   29|  6.15M|        return x.increment();
   30|  6.15M|    }
_ZNK5immer6detail15iterator_facadeINS0_4rbts16rrbtree_iteratorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENSt3__126random_access_iterator_tagEiRKilPSF_EplEl:
  167|  52.5k|    {
  168|  52.5k|        static_assert(is_random_access, "");
  169|  52.5k|        auto tmp = derived();
  170|  52.5k|        return tmp += n;
  171|  52.5k|    }

_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE17make_inner_n_intoEPvmj:
  203|  3.65M|    {
  204|  3.65M|        assert(n <= branches<B>);
  205|      0|        assert(size >= sizeof_inner_n(n));
  206|      0|        auto p                       = new (buffer) node_t;
  207|  3.65M|        p->impl.d.data.inner.relaxed = nullptr;
  208|  3.65M|#if IMMER_TAGGED_NODE
  209|  3.65M|        p->impl.d.kind = node_t::kind_t::inner;
  210|  3.65M|#endif
  211|  3.65M|        return p;
  212|  3.65M|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE14sizeof_inner_nEj:
  135|  14.7M|    {
  136|  14.7M|        return keep_headroom ? max_sizeof_inner : sizeof_packed_inner_n(n);
  ------------------
  |  Branch (136:16): [Folded - Ignored]
  ------------------
  137|  14.7M|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE3incEv:
  946|  39.9M|    {
  947|  39.9M|        refs(this).inc();
  948|  39.9M|        return this;
  949|  39.9M|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE4refsEPKSB_:
  193|   146M|    {
  194|   146M|        return auto_const_cast(get<refs_t>(x->impl));
  195|   146M|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE16make_leaf_n_intoEPvmj:
  320|  1.43M|    {
  321|  1.43M|        assert(n <= branches<BL>);
  322|      0|        assert(size >= sizeof_leaf_n(n));
  323|      0|        auto p = new (buffer) node_t;
  324|  1.43M|#if IMMER_TAGGED_NODE
  325|  1.43M|        p->impl.d.kind = node_t::kind_t::leaf;
  326|  1.43M|#endif
  327|  1.43M|        return p;
  328|  1.43M|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE13sizeof_leaf_nEj:
  150|  6.01M|    {
  151|  6.01M|        return keep_headroom ? max_sizeof_leaf : sizeof_packed_leaf_n(n);
  ------------------
  |  Branch (151:16): [Folded - Ignored]
  ------------------
  152|  6.01M|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE7relaxedEv:
  162|   237M|    {
  163|   237M|        IMMER_ASSERT_TAGGED(kind() == kind_t::inner);
  ------------------
  |  |   60|   237M|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  164|      0|        return impl.d.data.inner.relaxed;
  165|   237M|    }
_ZNK5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE4kindEv:
  158|   438M|    kind_t kind() const { return impl.d.kind; }
_ZNK5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE3decEv:
  957|  83.1M|    bool dec() const { return refs(this).dec(); }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE5innerEv:
  174|   149M|    {
  175|   149M|        IMMER_ASSERT_TAGGED(kind() == kind_t::inner);
  ------------------
  |  |   60|   149M|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  176|      0|        return reinterpret_cast<node_t**>(&impl.d.data.inner.buffer);
  177|   149M|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE14delete_inner_rEPSB_j:
  822|  16.9M|    {
  823|  16.9M|        IMMER_ASSERT_TAGGED(p->kind() == kind_t::inner);
  ------------------
  |  |   60|  16.9M|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  824|      0|        auto r = p->relaxed();
  825|  16.9M|        assert(r);
  826|      0|        static_if<!embed_relaxed>([&](auto) {
  827|  16.9M|            if (node_t::refs(r).dec())
  828|  16.9M|                heap::deallocate(node_t::ownee(r).owned()
  829|  16.9M|                                     ? node_t::max_sizeof_relaxed
  830|  16.9M|                                     : node_t::sizeof_relaxed_n(n),
  831|  16.9M|                                 r);
  832|  16.9M|        });
  833|  16.9M|        heap::deallocate(ownee(p).owned() ? node_t::max_sizeof_inner_r
  ------------------
  |  Branch (833:26): [True: 0, False: 16.9M]
  ------------------
  834|  16.9M|                                          : node_t::sizeof_inner_r_n(n),
  835|  16.9M|                         p);
  836|  16.9M|    }
_ZZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE14delete_inner_rEPSB_jENKUlT_E_clINS0_7empty_tEEEDaSD_:
  826|  16.9M|        static_if<!embed_relaxed>([&](auto) {
  827|  16.9M|            if (node_t::refs(r).dec())
  ------------------
  |  Branch (827:17): [True: 16.5M, False: 394k]
  ------------------
  828|  16.5M|                heap::deallocate(node_t::ownee(r).owned()
  ------------------
  |  Branch (828:34): [True: 0, False: 16.5M]
  ------------------
  829|  16.5M|                                     ? node_t::max_sizeof_relaxed
  830|  16.5M|                                     : node_t::sizeof_relaxed_n(n),
  831|  16.5M|                                 r);
  832|  16.9M|        });
_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:
  186|  17.5M|    {
  187|  17.5M|        return auto_const_cast(get<refs_t>(*x));
  188|  17.5M|    }
_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:
  190|  16.7M|    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:
  145|  32.8M|    {
  146|  32.8M|        return keep_headroom ? max_sizeof_relaxed : sizeof_packed_relaxed_n(n);
  ------------------
  |  Branch (146:16): [Folded - Ignored]
  ------------------
  147|  32.8M|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE5owneeEPSB_:
  200|  22.9M|    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:
  140|  33.6M|    {
  141|  33.6M|        return keep_headroom ? max_sizeof_inner_r : sizeof_packed_inner_r_n(n);
  ------------------
  |  Branch (141:16): [Folded - Ignored]
  ------------------
  142|  33.6M|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE11delete_leafEPSB_j:
  851|  1.69M|    {
  852|  1.69M|        IMMER_ASSERT_TAGGED(p->kind() == kind_t::leaf);
  ------------------
  |  |   60|  1.69M|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  853|      0|        detail::destroy_n(p->leaf(), n);
  854|  1.69M|        heap::deallocate(ownee(p).owned() ? node_t::max_sizeof_leaf
  ------------------
  |  Branch (854:26): [True: 0, False: 1.69M]
  ------------------
  855|  1.69M|                                          : node_t::sizeof_leaf_n(n),
  856|  1.69M|                         p);
  857|  1.69M|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE4leafEv:
  180|  12.9M|    {
  181|  12.9M|        IMMER_ASSERT_TAGGED(kind() == kind_t::leaf);
  ------------------
  |  |   60|  12.9M|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  182|      0|        return reinterpret_cast<T*>(&impl.d.data.leaf.buffer);
  183|  12.9M|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE12delete_innerEPSB_j:
  798|  3.77M|    {
  799|  3.77M|        IMMER_ASSERT_TAGGED(p->kind() == kind_t::inner);
  ------------------
  |  |   60|  3.77M|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  800|      0|        assert(!p->relaxed());
  801|  3.77M|        heap::deallocate(ownee(p).owned() ? node_t::max_sizeof_inner
  ------------------
  |  Branch (801:26): [True: 0, False: 3.77M]
  ------------------
  802|  3.77M|                                          : node_t::sizeof_inner_n(n),
  803|  3.77M|                         p);
  804|  3.77M|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE17copy_leaf_emplaceIiEEPSB_SD_jOT_:
  784|   190k|    {
  785|   190k|        auto dst = copy_leaf_n(n + 1, src, n);
  786|   190k|        IMMER_TRY {
  ------------------
  |  |   41|   190k|#define IMMER_TRY try
  ------------------
  787|   190k|            new (dst->leaf() + n) T{std::forward<U>(x)};
  788|   190k|        }
  789|   190k|        IMMER_CATCH (...) {
  790|      0|            detail::destroy_n(dst->leaf(), n);
  791|      0|            heap::deallocate(node_t::sizeof_leaf_n(n + 1), dst);
  792|      0|            IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
  793|      0|        }
  794|      0|        return dst;
  795|   190k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE11copy_leaf_nEjPSB_j:
  686|   190k|    {
  687|   190k|        assert(allocn >= n);
  688|   190k|        IMMER_ASSERT_TAGGED(src->kind() == kind_t::leaf);
  ------------------
  |  |   60|   190k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  689|      0|        auto dst = make_leaf_n(allocn);
  690|   190k|        IMMER_TRY {
  ------------------
  |  |   41|   190k|#define IMMER_TRY try
  ------------------
  691|   190k|            detail::uninitialized_copy(
  692|   190k|                src->leaf(), src->leaf() + n, dst->leaf());
  693|   190k|        }
  694|   190k|        IMMER_CATCH (...) {
  695|      0|            heap::deallocate(node_t::sizeof_leaf_n(allocn), dst);
  696|      0|            IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
  697|      0|        }
  698|      0|        return dst;
  699|   190k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE11make_leaf_nEj:
  331|  1.43M|    {
  332|  1.43M|        assert(n <= branches<BL>);
  333|      0|        auto m = heap::allocate(sizeof_leaf_n(n));
  334|  1.43M|        return make_leaf_n_into(m, sizeof_leaf_n(n), n);
  335|  1.43M|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE11make_leaf_nIiEEPSB_jOT_:
  460|  71.3k|    {
  461|  71.3k|        assert(n >= 1);
  462|      0|        auto p = make_leaf_n(n);
  463|  71.3k|        IMMER_TRY {
  ------------------
  |  |   41|  71.3k|#define IMMER_TRY try
  ------------------
  464|  71.3k|            new (p->leaf()) T{std::forward<U>(x)};
  465|  71.3k|        }
  466|  71.3k|        IMMER_CATCH (...) {
  467|      0|            heap::deallocate(node_t::sizeof_leaf_n(n), p);
  468|      0|            IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
  469|      0|        }
  470|      0|        return p;
  471|  71.3k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE13do_copy_innerEPSB_SC_j:
  548|  3.24M|    {
  549|  3.24M|        IMMER_ASSERT_TAGGED(dst->kind() == kind_t::inner);
  ------------------
  |  |   60|  3.24M|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  550|  3.24M|        IMMER_ASSERT_TAGGED(src->kind() == kind_t::inner);
  ------------------
  |  |   60|  3.24M|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  551|      0|        auto p = src->inner();
  552|  3.24M|        inc_nodes(p, n);
  553|  3.24M|        std::copy(p, p + n, dst->inner());
  554|  3.24M|        return dst;
  555|  3.24M|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE9inc_nodesEPPSB_j:
  960|  12.2M|    {
  961|  33.0M|        for (auto i = p, e = i + n; i != e; ++i)
  ------------------
  |  Branch (961:37): [True: 20.8M, False: 12.2M]
  ------------------
  962|  20.8M|            refs(*i).inc();
  963|  12.2M|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE14copy_inner_r_nEjPSB_j:
  578|   669k|    {
  579|   669k|        assert(allocn >= n);
  580|   669k|        IMMER_ASSERT_TAGGED(src->kind() == kind_t::inner);
  ------------------
  |  |   60|   669k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  581|      0|        auto dst = make_inner_r_n(allocn);
  582|   669k|        return do_copy_inner_r(dst, src, n);
  583|   669k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE15do_copy_inner_rEPSB_SC_j:
  600|   700k|    {
  601|   700k|        IMMER_ASSERT_TAGGED(dst->kind() == kind_t::inner);
  ------------------
  |  |   60|   700k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  602|   700k|        IMMER_ASSERT_TAGGED(src->kind() == kind_t::inner);
  ------------------
  |  |   60|   700k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  603|      0|        auto src_r = src->relaxed();
  604|   700k|        auto dst_r = dst->relaxed();
  605|   700k|        inc_nodes(src->inner(), n);
  606|   700k|        std::copy(src->inner(), src->inner() + n, dst->inner());
  607|   700k|        std::copy(src_r->d.sizes, src_r->d.sizes + n, dst_r->d.sizes);
  608|   700k|        dst_r->d.count = n;
  609|   700k|        return dst;
  610|   700k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE14make_inner_r_nEj:
  233|  16.3M|    {
  234|  16.3M|        assert(n <= branches<B>);
  235|      0|        auto mp = heap::allocate(sizeof_inner_r_n(n));
  236|  16.3M|        auto mr = static_cast<void*>(nullptr);
  237|  16.3M|        if (embed_relaxed) {
  ------------------
  |  Branch (237:13): [Folded - Ignored]
  ------------------
  238|      0|            mr = reinterpret_cast<unsigned char*>(mp) + sizeof_inner_n(n);
  239|  16.3M|        } else {
  240|  16.3M|            IMMER_TRY {
  ------------------
  |  |   41|  16.3M|#define IMMER_TRY try
  ------------------
  241|  16.3M|                mr = heap::allocate(sizeof_relaxed_n(n), norefs_tag{});
  242|  16.3M|            }
  243|  16.3M|            IMMER_CATCH (...) {
  244|      0|                heap::deallocate(sizeof_inner_r_n(n), mp);
  245|      0|                IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
  246|      0|            }
  247|  16.3M|        }
  248|  16.3M|        auto p                       = new (mp) node_t;
  249|  16.3M|        auto r                       = new (mr) relaxed_t;
  250|  16.3M|        r->d.count                   = 0;
  251|  16.3M|        p->impl.d.data.inner.relaxed = r;
  252|  16.3M|#if IMMER_TAGGED_NODE
  253|  16.3M|        p->impl.d.kind = node_t::kind_t::inner;
  254|  16.3M|#endif
  255|  16.3M|        return p;
  256|  16.3M|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE9make_pathEjPSB_:
  488|   870k|    {
  489|   870k|        IMMER_ASSERT_TAGGED(node->kind() == kind_t::leaf);
  ------------------
  |  |   60|   870k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  490|   870k|        if (shift == endshift<B, BL>)
  ------------------
  |  Branch (490:13): [True: 643k, False: 226k]
  ------------------
  491|   643k|            return node;
  492|   226k|        else {
  493|   226k|            auto n = node_t::make_inner_n(1);
  494|   226k|            IMMER_TRY {
  ------------------
  |  |   41|   226k|#define IMMER_TRY try
  ------------------
  495|   226k|                n->inner()[0] = make_path(shift - B, node);
  496|   226k|            }
  497|   226k|            IMMER_CATCH (...) {
  498|      0|                heap::deallocate(node_t::sizeof_inner_n(1), n);
  499|      0|                IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
  500|      0|            }
  501|   226k|            return n;
  502|   226k|        }
  503|   870k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE12make_inner_nEj:
  214|  3.65M|    {
  215|  3.65M|        assert(n <= branches<B>);
  216|      0|        auto m = heap::allocate(sizeof_inner_n(n));
  217|  3.65M|        return make_inner_n_into(m, sizeof_inner_n(n), n);
  218|  3.65M|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE9copy_leafEPSB_j:
  656|   284k|    {
  657|   284k|        IMMER_ASSERT_TAGGED(src->kind() == kind_t::leaf);
  ------------------
  |  |   60|   284k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  658|      0|        auto dst = make_leaf_n(n);
  659|   284k|        IMMER_TRY {
  ------------------
  |  |   41|   284k|#define IMMER_TRY try
  ------------------
  660|   284k|            detail::uninitialized_copy(
  661|   284k|                src->leaf(), src->leaf() + n, dst->leaf());
  662|   284k|        }
  663|   284k|        IMMER_CATCH (...) {
  664|      0|            heap::deallocate(node_t::sizeof_leaf_n(n), dst);
  665|      0|            IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
  666|      0|        }
  667|      0|        return dst;
  668|   284k|    }
_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:
  259|   405k|    {
  260|   405k|        return static_if<embed_relaxed, node_t*>(
  261|   405k|            [&](auto) { return node_t::make_inner_r_n(n); },
  262|   405k|            [&](auto) {
  263|   405k|                auto p =
  264|   405k|                    new (heap::allocate(node_t::sizeof_inner_r_n(n))) node_t;
  265|   405k|                assert(r->d.count >= n);
  266|   405k|                node_t::refs(r).inc();
  267|   405k|                p->impl.d.data.inner.relaxed = r;
  268|   405k|#if IMMER_TAGGED_NODE
  269|   405k|                p->impl.d.kind = node_t::kind_t::inner;
  270|   405k|#endif
  271|   405k|                return p;
  272|   405k|            });
  273|   405k|    }
_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_:
  262|   405k|            [&](auto) {
  263|   405k|                auto p =
  264|   405k|                    new (heap::allocate(node_t::sizeof_inner_r_n(n))) node_t;
  265|   405k|                assert(r->d.count >= n);
  266|      0|                node_t::refs(r).inc();
  267|   405k|                p->impl.d.data.inner.relaxed = r;
  268|   405k|#if IMMER_TAGGED_NODE
  269|   405k|                p->impl.d.kind = node_t::kind_t::inner;
  270|   405k|#endif
  271|   405k|                return p;
  272|   405k|            });
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE24do_copy_inner_replace_srEPSB_SC_jjSC_:
  642|   405k|    {
  643|   405k|        if (embed_relaxed)
  ------------------
  |  Branch (643:13): [Folded - Ignored]
  ------------------
  644|      0|            return do_copy_inner_replace_r(dst, src, n, offset, child);
  645|   405k|        else {
  646|   405k|            auto p = src->inner();
  647|   405k|            inc_nodes(p, offset);
  648|   405k|            inc_nodes(p + offset + 1, n - offset - 1);
  649|   405k|            std::copy(p, p + n, dst->inner());
  650|   405k|            dst->inner()[offset] = child;
  651|   405k|            return dst;
  652|   405k|        }
  653|   405k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE21do_copy_inner_replaceEPSB_SC_jjSC_:
  559|   202k|    {
  560|   202k|        IMMER_ASSERT_TAGGED(dst->kind() == kind_t::inner);
  ------------------
  |  |   60|   202k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  561|   202k|        IMMER_ASSERT_TAGGED(src->kind() == kind_t::inner);
  ------------------
  |  |   60|   202k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  562|      0|        auto p = src->inner();
  563|   202k|        inc_nodes(p, offset);
  564|   202k|        inc_nodes(p + offset + 1, n - offset - 1);
  565|   202k|        std::copy(p, p + n, dst->inner());
  566|   202k|        dst->inner()[offset] = child;
  567|   202k|        return dst;
  568|   202k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE12copy_inner_nEjPSB_j:
  533|  10.5k|    {
  534|  10.5k|        assert(allocn >= n);
  535|  10.5k|        IMMER_ASSERT_TAGGED(src->kind() == kind_t::inner);
  ------------------
  |  |   60|  10.5k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  536|      0|        auto dst = make_inner_n(allocn);
  537|  10.5k|        return do_copy_inner(dst, src, n);
  538|  10.5k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE12copy_inner_rEPSB_j:
  571|  6.21k|    {
  572|  6.21k|        IMMER_ASSERT_TAGGED(src->kind() == kind_t::inner);
  ------------------
  |  |   60|  6.21k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  573|      0|        auto dst = make_inner_r_n(n);
  574|  6.21k|        return do_copy_inner_r(dst, src, n);
  575|  6.21k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE13compute_shiftEv:
  967|  4.65M|    {
  968|  4.65M|        if (kind() == kind_t::leaf)
  ------------------
  |  Branch (968:13): [True: 412k, False: 4.24M]
  ------------------
  969|   412k|            return endshift<B, BL>;
  970|  4.24M|        else
  971|  4.24M|            return B + inner()[0]->compute_shift();
  972|  4.65M|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE5checkEjm:
  976|   412k|    {
  977|       |#if IMMER_DEBUG_DEEP_CHECK
  978|       |        assert(size > 0);
  979|       |        if (shift == endshift<B, BL>) {
  980|       |            IMMER_ASSERT_TAGGED(kind() == kind_t::leaf);
  981|       |            assert(size <= branches<BL>);
  982|       |        } else if (auto r = relaxed()) {
  983|       |            auto count = r->d.count;
  984|       |            assert(count > 0);
  985|       |            assert(count <= branches<B>);
  986|       |            if (r->d.sizes[count - 1] != size) {
  987|       |                IMMER_TRACE_F("check");
  988|       |                IMMER_TRACE_E(r->d.sizes[count - 1]);
  989|       |                IMMER_TRACE_E(size);
  990|       |            }
  991|       |            assert(r->d.sizes[count - 1] == size);
  992|       |            for (auto i = 1u; i < count; ++i)
  993|       |                assert(r->d.sizes[i - 1] < r->d.sizes[i]);
  994|       |            auto last_size = size_t{};
  995|       |            for (auto i = 0u; i < count; ++i) {
  996|       |                assert(inner()[i]->check(shift - B, r->d.sizes[i] - last_size));
  997|       |                last_size = r->d.sizes[i];
  998|       |            }
  999|       |        } else {
 1000|       |            assert(size <= branches<B> << shift);
 1001|       |            auto count =
 1002|       |                (size >> shift) + (size - ((size >> shift) << shift) > 0);
 1003|       |            assert(count <= branches<B>);
 1004|       |            if (count) {
 1005|       |                for (auto i = 1u; i < count - 1; ++i)
 1006|       |                    assert(inner()[i]->check(shift - B, 1 << shift));
 1007|       |                assert(inner()[count - 1]->check(
 1008|       |                    shift - B, size - ((count - 1) << shift)));
 1009|       |            }
 1010|       |        }
 1011|       |#endif // IMMER_DEBUG_DEEP_CHECK
 1012|   412k|        return true;
 1013|   412k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE9copy_leafEPSB_jj:
  768|   426k|    {
  769|   426k|        IMMER_ASSERT_TAGGED(src->kind() == kind_t::leaf);
  ------------------
  |  |   60|   426k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  770|      0|        auto dst = make_leaf_n(last - idx);
  771|   426k|        IMMER_TRY {
  ------------------
  |  |   41|   426k|#define IMMER_TRY try
  ------------------
  772|   426k|            detail::uninitialized_copy(
  773|   426k|                src->leaf() + idx, src->leaf() + last, dst->leaf());
  774|   426k|        }
  775|   426k|        IMMER_CATCH (...) {
  776|      0|            heap::deallocate(node_t::sizeof_leaf_n(last - idx), dst);
  777|      0|            IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
  778|      0|        }
  779|      0|        return dst;
  780|   426k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE9copy_leafEPSB_jSC_j:
  702|   421k|    {
  703|   421k|        IMMER_ASSERT_TAGGED(src1->kind() == kind_t::leaf);
  ------------------
  |  |   60|   421k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  704|   421k|        IMMER_ASSERT_TAGGED(src2->kind() == kind_t::leaf);
  ------------------
  |  |   60|   421k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  705|      0|        auto dst = make_leaf_n(n1 + n2);
  706|   421k|        IMMER_TRY {
  ------------------
  |  |   41|   421k|#define IMMER_TRY try
  ------------------
  707|   421k|            detail::uninitialized_copy(
  708|   421k|                src1->leaf(), src1->leaf() + n1, dst->leaf());
  709|   421k|        }
  710|   421k|        IMMER_CATCH (...) {
  711|      0|            heap::deallocate(node_t::sizeof_leaf_n(n1 + n2), dst);
  712|      0|            IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
  713|      0|        }
  714|      0|        IMMER_TRY {
  ------------------
  |  |   41|      0|#define IMMER_TRY try
  ------------------
  715|      0|            detail::uninitialized_copy(
  716|      0|                src2->leaf(), src2->leaf() + n2, dst->leaf() + n1);
  717|      0|        }
  718|      0|        IMMER_CATCH (...) {
  719|      0|            detail::destroy_n(dst->leaf(), n1);
  720|      0|            heap::deallocate(node_t::sizeof_leaf_n(n1 + n2), dst);
  721|      0|            IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
  722|      0|        }
  723|      0|        return dst;
  724|      0|    }
_ZNK5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE10can_mutateENS9_5applyIS6_E4type4editE:
  860|  2.30M|    {
  861|  2.30M|        return refs(this).unique() || ownee(this).can_mutate(e);
  ------------------
  |  Branch (861:16): [True: 2.19M, False: 108k]
  |  Branch (861:39): [True: 0, False: 108k]
  ------------------
  862|  2.30M|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE5owneeEPKSB_:
  197|   108k|    {
  198|   108k|        return get<ownee_t>(x->impl);
  199|   108k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE11copy_leaf_eENS9_5applyIS6_E4type4editEPSB_j:
  671|  36.2k|    {
  672|  36.2k|        IMMER_ASSERT_TAGGED(src->kind() == kind_t::leaf);
  ------------------
  |  |   60|  36.2k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  673|      0|        auto dst = make_leaf_e(e);
  674|  36.2k|        IMMER_TRY {
  ------------------
  |  |   41|  36.2k|#define IMMER_TRY try
  ------------------
  675|  36.2k|            detail::uninitialized_copy(
  676|  36.2k|                src->leaf(), src->leaf() + n, dst->leaf());
  677|  36.2k|        }
  678|  36.2k|        IMMER_CATCH (...) {
  679|      0|            heap::deallocate(node_t::max_sizeof_leaf, dst);
  680|      0|            IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
  681|      0|        }
  682|      0|        return dst;
  683|  36.2k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE11make_leaf_eENS9_5applyIS6_E4type4editE:
  338|   259k|    {
  339|   259k|        auto p   = new (heap::allocate(max_sizeof_leaf)) node_t;
  340|   259k|        ownee(p) = e;
  341|   259k|#if IMMER_TAGGED_NODE
  342|   259k|        p->impl.d.kind = node_t::kind_t::leaf;
  343|   259k|#endif
  344|   259k|        return p;
  345|   259k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE11make_leaf_eIiEEPSB_NS9_5applyIS6_E4type4editEOT_:
  475|  13.6k|    {
  476|  13.6k|        auto p = make_leaf_e(e);
  477|  13.6k|        IMMER_TRY {
  ------------------
  |  |   41|  13.6k|#define IMMER_TRY try
  ------------------
  478|  13.6k|            new (p->leaf()) T{std::forward<U>(x)};
  479|  13.6k|        }
  480|  13.6k|        IMMER_CATCH (...) {
  481|      0|            heap::deallocate(node_t::max_sizeof_leaf, p);
  482|      0|            IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
  483|      0|        }
  484|      0|        return p;
  485|  13.6k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE24ensure_mutable_relaxed_nENS9_5applyIS6_E4type4editEj:
  920|  92.5k|    {
  921|  92.5k|        auto src_r = relaxed();
  922|  92.5k|        return static_if<embed_relaxed, relaxed_t*>(
  923|  92.5k|            [&](auto) { return src_r; },
  924|  92.5k|            [&](auto) {
  925|  92.5k|                if (node_t::refs(src_r).unique() ||
  926|  92.5k|                    node_t::ownee(src_r).can_mutate(e))
  927|  92.5k|                    return src_r;
  928|  92.5k|                else {
  929|  92.5k|                    auto dst_r =
  930|  92.5k|                        new (heap::allocate(max_sizeof_relaxed)) relaxed_t;
  931|  92.5k|                    if (src_r) {
  932|  92.5k|                        std::copy(
  933|  92.5k|                            src_r->d.sizes, src_r->d.sizes + n, dst_r->d.sizes);
  934|  92.5k|                        if (node_t::refs(src_r).dec())
  935|  92.5k|                            heap::deallocate(node_t::sizeof_inner_r_n(n),
  936|  92.5k|                                             src_r);
  937|  92.5k|                    }
  938|  92.5k|                    dst_r->d.count                   = n;
  939|  92.5k|                    node_t::ownee(dst_r)             = e;
  940|  92.5k|                    return impl.d.data.inner.relaxed = dst_r;
  941|  92.5k|                }
  942|  92.5k|            });
  943|  92.5k|    }
_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_:
  924|  92.5k|            [&](auto) {
  925|  92.5k|                if (node_t::refs(src_r).unique() ||
  ------------------
  |  Branch (925:21): [True: 77.3k, False: 15.1k]
  ------------------
  926|  92.5k|                    node_t::ownee(src_r).can_mutate(e))
  ------------------
  |  Branch (926:21): [True: 0, False: 15.1k]
  ------------------
  927|  77.3k|                    return src_r;
  928|  15.1k|                else {
  929|  15.1k|                    auto dst_r =
  930|  15.1k|                        new (heap::allocate(max_sizeof_relaxed)) relaxed_t;
  931|  15.1k|                    if (src_r) {
  ------------------
  |  Branch (931:25): [True: 15.1k, False: 0]
  ------------------
  932|  15.1k|                        std::copy(
  933|  15.1k|                            src_r->d.sizes, src_r->d.sizes + n, dst_r->d.sizes);
  934|  15.1k|                        if (node_t::refs(src_r).dec())
  ------------------
  |  Branch (934:29): [True: 0, False: 15.1k]
  ------------------
  935|      0|                            heap::deallocate(node_t::sizeof_inner_r_n(n),
  936|      0|                                             src_r);
  937|  15.1k|                    }
  938|  15.1k|                    dst_r->d.count                   = n;
  939|  15.1k|                    node_t::ownee(dst_r)             = e;
  940|  15.1k|                    return impl.d.data.inner.relaxed = dst_r;
  941|  15.1k|                }
  942|  92.5k|            });
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE14copy_inner_r_eENS9_5applyIS6_E4type4editEPSB_j:
  586|  24.5k|    {
  587|  24.5k|        IMMER_ASSERT_TAGGED(src->kind() == kind_t::inner);
  ------------------
  |  |   60|  24.5k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  588|      0|        auto dst = make_inner_r_e(e);
  589|  24.5k|        return do_copy_inner_r(dst, src, n);
  590|  24.5k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE14make_inner_r_eENS9_5applyIS6_E4type4editE:
  276|   154k|    {
  277|   154k|        auto mp = heap::allocate(max_sizeof_inner_r);
  278|   154k|        auto mr = static_cast<void*>(nullptr);
  279|   154k|        if (embed_relaxed) {
  ------------------
  |  Branch (279:13): [Folded - Ignored]
  ------------------
  280|      0|            mr = reinterpret_cast<unsigned char*>(mp) + max_sizeof_inner;
  281|   154k|        } else {
  282|   154k|            IMMER_TRY {
  ------------------
  |  |   41|   154k|#define IMMER_TRY try
  ------------------
  283|   154k|                mr = heap::allocate(max_sizeof_relaxed, norefs_tag{});
  284|   154k|            }
  285|   154k|            IMMER_CATCH (...) {
  286|      0|                heap::deallocate(max_sizeof_inner_r, mp);
  287|      0|                IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
  288|      0|            }
  289|   154k|        }
  290|   154k|        auto p   = new (mp) node_t;
  291|   154k|        auto r   = new (mr) relaxed_t;
  292|   154k|        ownee(p) = e;
  293|   154k|        static_if<!embed_relaxed>([&](auto) { node_t::ownee(r) = e; });
  294|   154k|        r->d.count                   = 0;
  295|   154k|        p->impl.d.data.inner.relaxed = r;
  296|   154k|#if IMMER_TAGGED_NODE
  297|   154k|        p->impl.d.kind = node_t::kind_t::inner;
  298|   154k|#endif
  299|   154k|        return p;
  300|   154k|    }
_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_:
  293|   154k|        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_:
  506|   387k|    {
  507|   387k|        IMMER_ASSERT_TAGGED(node->kind() == kind_t::leaf);
  ------------------
  |  |   60|   387k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  508|   387k|        if (shift == endshift<B, BL>)
  ------------------
  |  Branch (508:13): [True: 289k, False: 97.9k]
  ------------------
  509|   289k|            return node;
  510|  97.9k|        else {
  511|  97.9k|            auto n = node_t::make_inner_e(e);
  512|  97.9k|            IMMER_TRY {
  ------------------
  |  |   41|  97.9k|#define IMMER_TRY try
  ------------------
  513|  97.9k|                n->inner()[0] = make_path_e(e, shift - B, node);
  514|  97.9k|            }
  515|  97.9k|            IMMER_CATCH (...) {
  516|      0|                heap::deallocate(node_t::max_sizeof_inner, n);
  517|      0|                IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
  518|      0|            }
  519|  97.9k|            return n;
  520|  97.9k|        }
  521|   387k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE12make_inner_eENS9_5applyIS6_E4type4editE:
  221|   123k|    {
  222|   123k|        auto m                       = heap::allocate(max_sizeof_inner);
  223|   123k|        auto p                       = new (m) node_t;
  224|   123k|        ownee(p)                     = e;
  225|   123k|        p->impl.d.data.inner.relaxed = nullptr;
  226|   123k|#if IMMER_TAGGED_NODE
  227|   123k|        p->impl.d.kind = node_t::kind_t::inner;
  228|   123k|#endif
  229|   123k|        return p;
  230|   123k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE12copy_inner_eENS9_5applyIS6_E4type4editEPSB_j:
  541|  14.2k|    {
  542|  14.2k|        IMMER_ASSERT_TAGGED(src->kind() == kind_t::inner);
  ------------------
  |  |   60|  14.2k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  543|      0|        auto dst = make_inner_e(e);
  544|  14.2k|        return do_copy_inner(dst, src, n);
  545|  14.2k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE15copy_inner_sr_eENS9_5applyIS6_E4type4editEPSB_j:
  593|  9.32k|    {
  594|  9.32k|        IMMER_ASSERT_TAGGED(src->kind() == kind_t::inner);
  ------------------
  |  |   60|  9.32k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  595|      0|        auto dst = make_inner_sr_e(e, src->relaxed());
  596|  9.32k|        return do_copy_inner_sr(dst, src, n);
  597|  9.32k|    }
_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:
  303|  9.32k|    {
  304|  9.32k|        return static_if<embed_relaxed, node_t*>(
  305|  9.32k|            [&](auto) { return node_t::make_inner_r_e(e); },
  306|  9.32k|            [&](auto) {
  307|  9.32k|                auto p =
  308|  9.32k|                    new (heap::allocate(node_t::max_sizeof_inner_r)) node_t;
  309|  9.32k|                node_t::refs(r).inc();
  310|  9.32k|                p->impl.d.data.inner.relaxed = r;
  311|  9.32k|                node_t::ownee(p)             = e;
  312|  9.32k|#if IMMER_TAGGED_NODE
  313|  9.32k|                p->impl.d.kind = node_t::kind_t::inner;
  314|  9.32k|#endif
  315|  9.32k|                return p;
  316|  9.32k|            });
  317|  9.32k|    }
_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_:
  306|  9.32k|            [&](auto) {
  307|  9.32k|                auto p =
  308|  9.32k|                    new (heap::allocate(node_t::max_sizeof_inner_r)) node_t;
  309|  9.32k|                node_t::refs(r).inc();
  310|  9.32k|                p->impl.d.data.inner.relaxed = r;
  311|  9.32k|                node_t::ownee(p)             = e;
  312|  9.32k|#if IMMER_TAGGED_NODE
  313|  9.32k|                p->impl.d.kind = node_t::kind_t::inner;
  314|  9.32k|#endif
  315|  9.32k|                return p;
  316|  9.32k|            });
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE16do_copy_inner_srEPSB_SC_j:
  630|  9.32k|    {
  631|  9.32k|        if (embed_relaxed)
  ------------------
  |  Branch (631:13): [Folded - Ignored]
  ------------------
  632|      0|            return do_copy_inner_r(dst, src, n);
  633|  9.32k|        else {
  634|  9.32k|            inc_nodes(src->inner(), n);
  635|  9.32k|            std::copy(src->inner(), src->inner() + n, dst->inner());
  636|  9.32k|            return dst;
  637|  9.32k|        }
  638|  9.32k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE11copy_leaf_eENS9_5applyIS6_E4type4editEPSB_jj:
  753|   208k|    {
  754|   208k|        IMMER_ASSERT_TAGGED(src->kind() == kind_t::leaf);
  ------------------
  |  |   60|   208k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  755|      0|        auto dst = make_leaf_e(e);
  756|   208k|        IMMER_TRY {
  ------------------
  |  |   41|   208k|#define IMMER_TRY try
  ------------------
  757|   208k|            detail::uninitialized_copy(
  758|   208k|                src->leaf() + idx, src->leaf() + last, dst->leaf());
  759|   208k|        }
  760|   208k|        IMMER_CATCH (...) {
  761|      0|            heap::deallocate(max_sizeof_leaf, dst);
  762|      0|            IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
  763|      0|        }
  764|      0|        return dst;
  765|   208k|    }
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE22ensure_mutable_relaxedENS9_5applyIS6_E4type4editE:
  867|   151k|    {
  868|   151k|        auto src_r = relaxed();
  869|   151k|        return static_if<embed_relaxed, relaxed_t*>(
  870|   151k|            [&](auto) { return src_r; },
  871|   151k|            [&](auto) {
  872|   151k|                if (node_t::refs(src_r).unique() ||
  873|   151k|                    node_t::ownee(src_r).can_mutate(e))
  874|   151k|                    return src_r;
  875|   151k|                else {
  876|   151k|                    auto dst_r = impl.d.data.inner.relaxed =
  877|   151k|                        new (heap::allocate(max_sizeof_relaxed)) relaxed_t;
  878|   151k|                    if (src_r) {
  879|   151k|                        auto n = dst_r->d.count = src_r->d.count;
  880|   151k|                        std::copy(
  881|   151k|                            src_r->d.sizes, src_r->d.sizes + n, dst_r->d.sizes);
  882|   151k|                        if (node_t::refs(src_r).dec())
  883|   151k|                            heap::deallocate(node_t::sizeof_inner_r_n(n),
  884|   151k|                                             src_r);
  885|   151k|                    }
  886|   151k|                    node_t::ownee(dst_r) = e;
  887|   151k|                    return dst_r;
  888|   151k|                }
  889|   151k|            });
  890|   151k|    }
_ZZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE22ensure_mutable_relaxedENS9_5applyIS6_E4type4editEENKUlT_E0_clINS0_7empty_tEEEDaSG_:
  871|   151k|            [&](auto) {
  872|   151k|                if (node_t::refs(src_r).unique() ||
  ------------------
  |  Branch (872:21): [True: 145k, False: 5.59k]
  ------------------
  873|   151k|                    node_t::ownee(src_r).can_mutate(e))
  ------------------
  |  Branch (873:21): [True: 0, False: 5.59k]
  ------------------
  874|   145k|                    return src_r;
  875|  5.59k|                else {
  876|  5.59k|                    auto dst_r = impl.d.data.inner.relaxed =
  877|  5.59k|                        new (heap::allocate(max_sizeof_relaxed)) relaxed_t;
  878|  5.59k|                    if (src_r) {
  ------------------
  |  Branch (878:25): [True: 5.59k, False: 0]
  ------------------
  879|  5.59k|                        auto n = dst_r->d.count = src_r->d.count;
  880|  5.59k|                        std::copy(
  881|  5.59k|                            src_r->d.sizes, src_r->d.sizes + n, dst_r->d.sizes);
  882|  5.59k|                        if (node_t::refs(src_r).dec())
  ------------------
  |  Branch (882:29): [True: 0, False: 5.59k]
  ------------------
  883|      0|                            heap::deallocate(node_t::sizeof_inner_r_n(n),
  884|      0|                                             src_r);
  885|  5.59k|                    }
  886|  5.59k|                    node_t::ownee(dst_r) = e;
  887|  5.59k|                    return dst_r;
  888|  5.59k|                }
  889|   151k|            });
_ZN5immer6detail4rbts4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE11copy_leaf_eENS9_5applyIS6_E4type4editEPSB_jSG_j:
  728|    343|    {
  729|    343|        IMMER_ASSERT_TAGGED(src1->kind() == kind_t::leaf);
  ------------------
  |  |   60|    343|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  730|    343|        IMMER_ASSERT_TAGGED(src2->kind() == kind_t::leaf);
  ------------------
  |  |   60|    343|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  731|      0|        auto dst = make_leaf_e(e);
  732|    343|        IMMER_TRY {
  ------------------
  |  |   41|    343|#define IMMER_TRY try
  ------------------
  733|    343|            detail::uninitialized_copy(
  734|    343|                src1->leaf(), src1->leaf() + n1, dst->leaf());
  735|    343|        }
  736|    343|        IMMER_CATCH (...) {
  737|      0|            heap::deallocate(max_sizeof_leaf, dst);
  738|      0|            IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
  739|      0|        }
  740|      0|        IMMER_TRY {
  ------------------
  |  |   41|      0|#define IMMER_TRY try
  ------------------
  741|      0|            detail::uninitialized_copy(
  742|      0|                src2->leaf(), src2->leaf() + n2, dst->leaf() + n1);
  743|      0|        }
  744|      0|        IMMER_CATCH (...) {
  745|      0|            detail::destroy_n(dst->leaf(), n1);
  746|      0|            heap::deallocate(max_sizeof_leaf, dst);
  747|      0|            IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
  748|      0|        }
  749|      0|        return dst;
  750|      0|    }

_ZN5immer6detail4rbts11dec_visitor13visit_relaxedIRNS1_11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEEEvOT_:
  522|  52.4M|    {
  523|  52.4M|        using node_t = node_type<Pos>;
  524|  52.4M|        auto node    = p.node();
  525|  52.4M|        if (node->dec()) {
  ------------------
  |  Branch (525:13): [True: 16.8M, False: 35.6M]
  ------------------
  526|  16.8M|            p.each(this_t{});
  527|  16.8M|            node_t::delete_inner_r(node, p.count());
  528|  16.8M|        }
  529|  52.4M|    }
_ZN5immer6detail4rbts11dec_visitor13visit_regularIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEEEvOT_:
  533|  3.63M|    {
  534|  3.63M|        using node_t = node_type<Pos>;
  535|  3.63M|        auto node    = p.node();
  536|  3.63M|        if (node->dec()) {
  ------------------
  |  Branch (536:13): [True: 777k, False: 2.85M]
  ------------------
  537|   777k|            p.each(this_t{});
  538|   777k|            node_t::delete_inner(node, p.count());
  539|   777k|        }
  540|  3.63M|    }
_ZN5immer6detail4rbts11dec_visitor10visit_leafIRNS1_13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEEEvOT_:
  544|  1.63M|    {
  545|  1.63M|        using node_t = node_type<Pos>;
  546|  1.63M|        auto node    = p.node();
  547|  1.63M|        if (node->dec()) {
  ------------------
  |  Branch (547:13): [True: 700k, False: 936k]
  ------------------
  548|   700k|            node_t::delete_leaf(node, p.count());
  549|   700k|        }
  550|  1.63M|    }
_ZN5immer6detail4rbts11dec_visitor10visit_leafIRNS1_8leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEEEvOT_:
  544|   606k|    {
  545|   606k|        using node_t = node_type<Pos>;
  546|   606k|        auto node    = p.node();
  547|   606k|        if (node->dec()) {
  ------------------
  |  Branch (547:13): [True: 47.0k, False: 559k]
  ------------------
  548|  47.0k|            node_t::delete_leaf(node, p.count());
  549|  47.0k|        }
  550|   606k|    }
_ZN5immer6detail4rbts11dec_visitor13visit_regularIRNS1_8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEEEvOT_:
  533|  4.19M|    {
  534|  4.19M|        using node_t = node_type<Pos>;
  535|  4.19M|        auto node    = p.node();
  536|  4.19M|        if (node->dec()) {
  ------------------
  |  Branch (536:13): [True: 320k, False: 3.87M]
  ------------------
  537|   320k|            p.each(this_t{});
  538|   320k|            node_t::delete_inner(node, p.count());
  539|   320k|        }
  540|  4.19M|    }
_ZN5immer6detail4rbts11dec_visitor13visit_regularIRNS1_11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEEEvOT_:
  533|  2.84M|    {
  534|  2.84M|        using node_t = node_type<Pos>;
  535|  2.84M|        auto node    = p.node();
  536|  2.84M|        if (node->dec()) {
  ------------------
  |  Branch (536:13): [True: 2.65M, False: 186k]
  ------------------
  537|  2.65M|            p.each(this_t{});
  538|  2.65M|            node_t::delete_inner(node, p.count());
  539|  2.65M|        }
  540|  2.84M|    }
_ZN5immer6detail4rbts11dec_visitor13visit_regularIRNS1_17empty_regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEEEvOT_:
  533|  1.85M|    {
  534|  1.85M|        using node_t = node_type<Pos>;
  535|  1.85M|        auto node    = p.node();
  536|  1.85M|        if (node->dec()) {
  ------------------
  |  Branch (536:13): [True: 0, False: 1.85M]
  ------------------
  537|      0|            p.each(this_t{});
  538|      0|            node_t::delete_inner(node, p.count());
  539|      0|        }
  540|  1.85M|    }
_ZN5immer6detail4rbts11dec_visitor10visit_leafIRNS1_12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEEEvOT_:
  544|  14.1M|    {
  545|  14.1M|        using node_t = node_type<Pos>;
  546|  14.1M|        auto node    = p.node();
  547|  14.1M|        if (node->dec()) {
  ------------------
  |  Branch (547:13): [True: 949k, False: 13.1M]
  ------------------
  548|   949k|            node_t::delete_leaf(node, p.count());
  549|   949k|        }
  550|  14.1M|    }
_ZN5immer6detail4rbts11dec_visitor10visit_leafIRNS1_14empty_leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEEEvOT_:
  544|  1.70M|    {
  545|  1.70M|        using node_t = node_type<Pos>;
  546|  1.70M|        auto node    = p.node();
  547|  1.70M|        if (node->dec()) {
  ------------------
  |  Branch (547:13): [True: 0, False: 1.70M]
  ------------------
  548|      0|            node_t::delete_leaf(node, p.count());
  549|      0|        }
  550|  1.70M|    }
_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:
  790|   663k|    {
  791|   663k|        auto level    = pos.shift();
  792|   663k|        auto idx      = pos.count() - 1;
  793|   663k|        auto children = pos.size(idx);
  794|   663k|        auto new_idx =
  795|   663k|            children == size_t{1} << level || level == BL ? idx + 1 : idx;
  ------------------
  |  Branch (795:13): [True: 14.9k, False: 648k]
  |  Branch (795:47): [True: 993, False: 647k]
  ------------------
  796|   663k|        auto new_child = static_cast<node_t*>(nullptr);
  797|   663k|        if (new_idx >= branches<B>)
  ------------------
  |  Branch (797:13): [True: 5.30k, False: 658k]
  ------------------
  798|  5.30k|            return nullptr;
  799|   658k|        else if (idx == new_idx) {
  ------------------
  |  Branch (799:18): [True: 647k, False: 10.6k]
  ------------------
  800|   647k|            new_child = pos.last_oh_csh(this_t{}, idx, children, tail, ts);
  801|   647k|            if (!new_child) {
  ------------------
  |  Branch (801:17): [True: 5.81k, False: 642k]
  ------------------
  802|  5.81k|                if (++new_idx < branches<B>)
  ------------------
  |  Branch (802:21): [True: 2.74k, False: 3.07k]
  ------------------
  803|  2.74k|                    new_child = node_t::make_path(level - B, tail);
  804|  3.07k|                else
  805|  3.07k|                    return nullptr;
  806|  5.81k|            }
  807|   647k|        } else
  808|  10.6k|            new_child = node_t::make_path(level - B, tail);
  809|   655k|        IMMER_TRY {
  ------------------
  |  |   41|   655k|#define IMMER_TRY try
  ------------------
  810|   655k|            auto count = new_idx + 1;
  811|   655k|            auto new_parent =
  812|   655k|                node_t::copy_inner_r_n(count, pos.node(), new_idx);
  813|   655k|            auto new_relaxed              = new_parent->relaxed();
  814|   655k|            new_parent->inner()[new_idx]  = new_child;
  815|   655k|            new_relaxed->d.sizes[new_idx] = pos.size() + ts;
  816|   655k|            new_relaxed->d.count          = count;
  817|   655k|            assert(new_relaxed->d.sizes[new_idx]);
  818|      0|            return new_parent;
  819|   655k|        }
  820|   655k|        IMMER_CATCH (...) {
  821|      0|            auto shift = pos.shift();
  822|      0|            auto size  = new_idx == idx ? children + ts : ts;
  ------------------
  |  Branch (822:26): [True: 0, False: 0]
  ------------------
  823|      0|            if (shift > BL) {
  ------------------
  |  Branch (823:17): [True: 0, False: 0]
  ------------------
  824|      0|                tail->inc();
  825|      0|                dec_inner(new_child, shift - B, size);
  826|      0|            }
  827|      0|            IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
  828|      0|        }
  829|   655k|    }
_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_:
  833|   264k|    {
  834|   264k|        assert((pos.size() & mask<BL>) == 0);
  835|      0|        auto idx        = pos.index(pos.size() - 1);
  836|   264k|        auto new_idx    = pos.index(pos.size() + branches<BL> - 1);
  837|   264k|        auto count      = new_idx + 1;
  838|   264k|        auto new_parent = node_t::make_inner_n(count);
  839|   264k|        IMMER_TRY {
  ------------------
  |  |   41|   264k|#define IMMER_TRY try
  ------------------
  840|   264k|            new_parent->inner()[new_idx] =
  841|   264k|                idx == new_idx ? pos.last_oh(this_t{}, idx, tail)
  ------------------
  |  Branch (841:17): [True: 253k, False: 10.9k]
  ------------------
  842|       |                               /* otherwise */
  843|   264k|                               : node_t::make_path(pos.shift() - B, tail);
  844|   264k|        }
  845|   264k|        IMMER_CATCH (...) {
  846|      0|            node_t::delete_inner(new_parent, count);
  847|      0|            IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
  848|      0|        }
  849|   264k|        return node_t::do_copy_inner(new_parent, pos.node(), new_idx);
  850|   264k|    }
_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_:
  833|  2.59M|    {
  834|  2.59M|        assert((pos.size() & mask<BL>) == 0);
  835|      0|        auto idx        = pos.index(pos.size() - 1);
  836|  2.59M|        auto new_idx    = pos.index(pos.size() + branches<BL> - 1);
  837|  2.59M|        auto count      = new_idx + 1;
  838|  2.59M|        auto new_parent = node_t::make_inner_n(count);
  839|  2.59M|        IMMER_TRY {
  ------------------
  |  |   41|  2.59M|#define IMMER_TRY try
  ------------------
  840|  2.59M|            new_parent->inner()[new_idx] =
  841|  2.59M|                idx == new_idx ? pos.last_oh(this_t{}, idx, tail)
  ------------------
  |  Branch (841:17): [True: 2.01M, False: 583k]
  ------------------
  842|       |                               /* otherwise */
  843|  2.59M|                               : node_t::make_path(pos.shift() - B, tail);
  844|  2.59M|        }
  845|  2.59M|        IMMER_CATCH (...) {
  846|      0|            node_t::delete_inner(new_parent, count);
  847|      0|            IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
  848|      0|        }
  849|  2.59M|        return node_t::do_copy_inner(new_parent, pos.node(), new_idx);
  850|  2.59M|    }
_ZN5immer6detail4rbts9dec_innerINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEvPT_jm:
  561|    713|{
  562|    713|    visit_maybe_relaxed_sub(node, shift, size, dec_visitor());
  563|    713|}
_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_:
  833|   345k|    {
  834|   345k|        assert((pos.size() & mask<BL>) == 0);
  835|      0|        auto idx        = pos.index(pos.size() - 1);
  836|   345k|        auto new_idx    = pos.index(pos.size() + branches<BL> - 1);
  837|   345k|        auto count      = new_idx + 1;
  838|   345k|        auto new_parent = node_t::make_inner_n(count);
  839|   345k|        IMMER_TRY {
  ------------------
  |  |   41|   345k|#define IMMER_TRY try
  ------------------
  840|   345k|            new_parent->inner()[new_idx] =
  841|   345k|                idx == new_idx ? pos.last_oh(this_t{}, idx, tail)
  ------------------
  |  Branch (841:17): [True: 330k, False: 15.6k]
  ------------------
  842|       |                               /* otherwise */
  843|   345k|                               : node_t::make_path(pos.shift() - B, tail);
  844|   345k|        }
  845|   345k|        IMMER_CATCH (...) {
  846|      0|            node_t::delete_inner(new_parent, count);
  847|      0|            IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
  848|      0|        }
  849|   345k|        return node_t::do_copy_inner(new_parent, pos.node(), new_idx);
  850|   345k|    }
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_:
  501|   146k|    {
  502|   146k|        auto offset = pos.index(idx);
  503|   146k|        auto node   = node_t::copy_leaf(pos.node(), pos.count());
  504|   146k|        IMMER_TRY {
  ------------------
  |  |   41|   146k|#define IMMER_TRY try
  ------------------
  505|   146k|            node->leaf()[offset] =
  506|   146k|                std::forward<Fn>(fn)(std::move(node->leaf()[offset]));
  507|   146k|            return node;
  508|   146k|        }
  509|   146k|        IMMER_CATCH (...) {
  510|      0|            node_t::delete_leaf(node, pos.count());
  511|      0|            IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
  512|      0|        }
  513|   146k|    }
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_:
  465|   405k|    {
  466|   405k|        auto offset = pos.index(idx);
  467|   405k|        auto count  = pos.count();
  468|   405k|        auto node   = node_t::make_inner_sr_n(count, pos.relaxed());
  469|   405k|        IMMER_TRY {
  ------------------
  |  |   41|   405k|#define IMMER_TRY try
  ------------------
  470|   405k|            auto child = pos.towards_oh(this_t{}, idx, offset, fn);
  471|   405k|            node_t::do_copy_inner_replace_sr(
  472|   405k|                node, pos.node(), count, offset, child);
  473|   405k|            return node;
  474|   405k|        }
  475|   405k|        IMMER_CATCH (...) {
  476|      0|            node_t::delete_inner_r(node, count);
  477|      0|            IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
  478|      0|        }
  479|   405k|    }
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_:
  483|   126k|    {
  484|   126k|        auto offset = pos.index(idx);
  485|   126k|        auto count  = pos.count();
  486|   126k|        auto node   = node_t::make_inner_n(count);
  487|   126k|        IMMER_TRY {
  ------------------
  |  |   41|   126k|#define IMMER_TRY try
  ------------------
  488|   126k|            auto child = pos.towards_oh_ch(this_t{}, idx, offset, count, fn);
  489|   126k|            node_t::do_copy_inner_replace(
  490|   126k|                node, pos.node(), count, offset, child);
  491|   126k|            return node;
  492|   126k|        }
  493|   126k|        IMMER_CATCH (...) {
  494|      0|            node_t::delete_inner(node, count);
  495|      0|            IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
  496|      0|        }
  497|   126k|    }
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_:
  501|  98.3k|    {
  502|  98.3k|        auto offset = pos.index(idx);
  503|  98.3k|        auto node   = node_t::copy_leaf(pos.node(), pos.count());
  504|  98.3k|        IMMER_TRY {
  ------------------
  |  |   41|  98.3k|#define IMMER_TRY try
  ------------------
  505|  98.3k|            node->leaf()[offset] =
  506|  98.3k|                std::forward<Fn>(fn)(std::move(node->leaf()[offset]));
  507|  98.3k|            return node;
  508|  98.3k|        }
  509|  98.3k|        IMMER_CATCH (...) {
  510|      0|            node_t::delete_leaf(node, pos.count());
  511|      0|            IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
  512|      0|        }
  513|  98.3k|    }
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_:
  483|  56.2k|    {
  484|  56.2k|        auto offset = pos.index(idx);
  485|  56.2k|        auto count  = pos.count();
  486|  56.2k|        auto node   = node_t::make_inner_n(count);
  487|  56.2k|        IMMER_TRY {
  ------------------
  |  |   41|  56.2k|#define IMMER_TRY try
  ------------------
  488|  56.2k|            auto child = pos.towards_oh_ch(this_t{}, idx, offset, count, fn);
  489|  56.2k|            node_t::do_copy_inner_replace(
  490|  56.2k|                node, pos.node(), count, offset, child);
  491|  56.2k|            return node;
  492|  56.2k|        }
  493|  56.2k|        IMMER_CATCH (...) {
  494|      0|            node_t::delete_inner(node, count);
  495|      0|            IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
  496|      0|        }
  497|  56.2k|    }
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_:
  501|  28.3k|    {
  502|  28.3k|        auto offset = pos.index(idx);
  503|  28.3k|        auto node   = node_t::copy_leaf(pos.node(), pos.count());
  504|  28.3k|        IMMER_TRY {
  ------------------
  |  |   41|  28.3k|#define IMMER_TRY try
  ------------------
  505|  28.3k|            node->leaf()[offset] =
  506|  28.3k|                std::forward<Fn>(fn)(std::move(node->leaf()[offset]));
  507|  28.3k|            return node;
  508|  28.3k|        }
  509|  28.3k|        IMMER_CATCH (...) {
  510|      0|            node_t::delete_leaf(node, pos.count());
  511|      0|            IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
  512|      0|        }
  513|  28.3k|    }
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_:
  483|  19.6k|    {
  484|  19.6k|        auto offset = pos.index(idx);
  485|  19.6k|        auto count  = pos.count();
  486|  19.6k|        auto node   = node_t::make_inner_n(count);
  487|  19.6k|        IMMER_TRY {
  ------------------
  |  |   41|  19.6k|#define IMMER_TRY try
  ------------------
  488|  19.6k|            auto child = pos.towards_oh_ch(this_t{}, idx, offset, count, fn);
  489|  19.6k|            node_t::do_copy_inner_replace(
  490|  19.6k|                node, pos.node(), count, offset, child);
  491|  19.6k|            return node;
  492|  19.6k|        }
  493|  19.6k|        IMMER_CATCH (...) {
  494|      0|            node_t::delete_inner(node, count);
  495|      0|            IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
  496|      0|        }
  497|  19.6k|    }
_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:
 1095|  53.9k|    {
 1096|  53.9k|        auto idx = pos.index(last);
 1097|  53.9k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (1097:13): [Folded - Ignored]
  |  Branch (1097:25): [True: 42.6k, False: 11.3k]
  ------------------
 1098|  42.6k|            return pos.towards_oh(this_t{}, last, idx);
 1099|  42.6k|        } else {
 1100|  11.3k|            using std::get;
 1101|  11.3k|            auto subs = pos.towards_oh(no_collapse_t{}, last, idx);
 1102|  11.3k|            auto next = get<1>(subs);
 1103|  11.3k|            auto ts   = get<2>(subs);
 1104|  11.3k|            auto tail = get<3>(subs);
 1105|  11.3k|            IMMER_TRY {
  ------------------
  |  |   41|  11.3k|#define IMMER_TRY try
  ------------------
 1106|  11.3k|                if (next) {
  ------------------
  |  Branch (1106:21): [True: 6.55k, False: 4.75k]
  ------------------
 1107|  6.55k|                    auto count = idx + 1;
 1108|  6.55k|                    auto newn  = node_t::copy_inner_r_n(count, pos.node(), idx);
 1109|  6.55k|                    auto newr  = newn->relaxed();
 1110|  6.55k|                    newn->inner()[idx] = next;
 1111|  6.55k|                    newr->d.sizes[idx] = last + 1 - ts;
 1112|  6.55k|                    newr->d.count      = count;
 1113|  6.55k|                    assert(newr->d.sizes[idx]);
 1114|      0|                    return std::make_tuple(pos.shift(), newn, ts, tail);
 1115|  6.55k|                } else if (idx == 0) {
  ------------------
  |  Branch (1115:28): [True: 0, False: 4.75k]
  ------------------
 1116|      0|                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
 1117|  4.75k|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (1117:28): [Folded - Ignored]
  |  Branch (1117:40): [True: 3.60k, False: 1.15k]
  |  Branch (1117:52): [True: 2.41k, False: 1.19k]
  ------------------
 1118|  2.41k|                    auto newn = pos.node()->inner()[0];
 1119|  2.41k|                    return std::make_tuple(
 1120|  2.41k|                        pos.shift() - B, newn->inc(), ts, tail);
 1121|  2.41k|                } else {
 1122|  2.34k|                    auto newn = node_t::copy_inner_r(pos.node(), idx);
 1123|  2.34k|                    return std::make_tuple(pos.shift(), newn, ts, tail);
 1124|  2.34k|                }
 1125|  11.3k|            }
 1126|  11.3k|            IMMER_CATCH (...) {
 1127|      0|                assert(!next || pos.shift() > BL);
 1128|      0|                if (next)
  ------------------
  |  Branch (1128:21): [True: 0, False: 0]
  ------------------
 1129|      0|                    dec_inner(next,
 1130|      0|                              pos.shift() - B,
 1131|      0|                              last + 1 - ts - pos.size_before(idx));
 1132|      0|                if (tail)
  ------------------
  |  Branch (1132:21): [True: 0, False: 0]
  ------------------
 1133|      0|                    dec_leaf(tail, ts);
 1134|      0|                IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1135|      0|            }
 1136|  11.3k|        }
 1137|  53.9k|    }
_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:
 1180|  1.92k|    {
 1181|  1.92k|        auto old_tail_size = pos.count();
 1182|  1.92k|        auto new_tail_size = pos.index(last) + 1;
 1183|  1.92k|        auto new_tail      = new_tail_size == old_tail_size
  ------------------
  |  Branch (1183:30): [True: 1.16k, False: 759]
  ------------------
 1184|  1.92k|                                 ? pos.node()->inc()
 1185|  1.92k|                                 : node_t::copy_leaf(pos.node(), new_tail_size);
 1186|  1.92k|        return std::make_tuple(0, nullptr, new_tail_size, new_tail);
 1187|  1.92k|    }
_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:
 1180|  7.08k|    {
 1181|  7.08k|        auto old_tail_size = pos.count();
 1182|  7.08k|        auto new_tail_size = pos.index(last) + 1;
 1183|  7.08k|        auto new_tail      = new_tail_size == old_tail_size
  ------------------
  |  Branch (1183:30): [True: 3.12k, False: 3.96k]
  ------------------
 1184|  7.08k|                                 ? pos.node()->inc()
 1185|  7.08k|                                 : node_t::copy_leaf(pos.node(), new_tail_size);
 1186|  7.08k|        return std::make_tuple(0, nullptr, new_tail_size, new_tail);
 1187|  7.08k|    }
_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:
 1095|  14.7k|    {
 1096|  14.7k|        auto idx = pos.index(last);
 1097|  14.7k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (1097:13): [Folded - Ignored]
  |  Branch (1097:25): [True: 0, False: 0]
  ------------------
 1098|      0|            return pos.towards_oh(this_t{}, last, idx);
 1099|  14.7k|        } else {
 1100|  14.7k|            using std::get;
 1101|  14.7k|            auto subs = pos.towards_oh(no_collapse_t{}, last, idx);
 1102|  14.7k|            auto next = get<1>(subs);
 1103|  14.7k|            auto ts   = get<2>(subs);
 1104|  14.7k|            auto tail = get<3>(subs);
 1105|  14.7k|            IMMER_TRY {
  ------------------
  |  |   41|  14.7k|#define IMMER_TRY try
  ------------------
 1106|  14.7k|                if (next) {
  ------------------
  |  Branch (1106:21): [True: 7.28k, False: 7.46k]
  ------------------
 1107|  7.28k|                    auto count = idx + 1;
 1108|  7.28k|                    auto newn  = node_t::copy_inner_r_n(count, pos.node(), idx);
 1109|  7.28k|                    auto newr  = newn->relaxed();
 1110|  7.28k|                    newn->inner()[idx] = next;
 1111|  7.28k|                    newr->d.sizes[idx] = last + 1 - ts;
 1112|  7.28k|                    newr->d.count      = count;
 1113|  7.28k|                    assert(newr->d.sizes[idx]);
 1114|      0|                    return std::make_tuple(pos.shift(), newn, ts, tail);
 1115|  7.46k|                } else if (idx == 0) {
  ------------------
  |  Branch (1115:28): [True: 3.59k, False: 3.87k]
  ------------------
 1116|  3.59k|                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
 1117|  3.87k|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (1117:28): [Folded - Ignored]
  |  Branch (1117:40): [True: 0, False: 0]
  |  Branch (1117:52): [True: 0, False: 0]
  ------------------
 1118|      0|                    auto newn = pos.node()->inner()[0];
 1119|      0|                    return std::make_tuple(
 1120|      0|                        pos.shift() - B, newn->inc(), ts, tail);
 1121|  3.87k|                } else {
 1122|  3.87k|                    auto newn = node_t::copy_inner_r(pos.node(), idx);
 1123|  3.87k|                    return std::make_tuple(pos.shift(), newn, ts, tail);
 1124|  3.87k|                }
 1125|  14.7k|            }
 1126|  14.7k|            IMMER_CATCH (...) {
 1127|      0|                assert(!next || pos.shift() > BL);
 1128|      0|                if (next)
  ------------------
  |  Branch (1128:21): [True: 0, False: 0]
  ------------------
 1129|      0|                    dec_inner(next,
 1130|      0|                              pos.shift() - B,
 1131|      0|                              last + 1 - ts - pos.size_before(idx));
 1132|      0|                if (tail)
  ------------------
  |  Branch (1132:21): [True: 0, False: 0]
  ------------------
 1133|      0|                    dec_leaf(tail, ts);
 1134|      0|                IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1135|      0|            }
 1136|  14.7k|        }
 1137|  14.7k|    }
_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:
 1141|  4.22k|    {
 1142|  4.22k|        auto idx = pos.index(last);
 1143|  4.22k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (1143:13): [Folded - Ignored]
  |  Branch (1143:25): [True: 0, False: 0]
  ------------------
 1144|      0|            return pos.towards_oh(this_t{}, last, idx);
 1145|  4.22k|        } else {
 1146|  4.22k|            using std::get;
 1147|  4.22k|            auto subs = pos.towards_oh(no_collapse_t{}, last, idx);
 1148|  4.22k|            auto next = get<1>(subs);
 1149|  4.22k|            auto ts   = get<2>(subs);
 1150|  4.22k|            auto tail = get<3>(subs);
 1151|  4.22k|            IMMER_TRY {
  ------------------
  |  |   41|  4.22k|#define IMMER_TRY try
  ------------------
 1152|  4.22k|                if (next) {
  ------------------
  |  Branch (1152:21): [True: 1.76k, False: 2.46k]
  ------------------
 1153|  1.76k|                    auto newn = node_t::copy_inner_n(idx + 1, pos.node(), idx);
 1154|  1.76k|                    newn->inner()[idx] = next;
 1155|  1.76k|                    return std::make_tuple(pos.shift(), newn, ts, tail);
 1156|  2.46k|                } else if (idx == 0) {
  ------------------
  |  Branch (1156:28): [True: 1.54k, False: 916]
  ------------------
 1157|  1.54k|                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
 1158|  1.54k|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (1158:28): [Folded - Ignored]
  |  Branch (1158:40): [True: 0, False: 0]
  |  Branch (1158:52): [True: 0, False: 0]
  ------------------
 1159|      0|                    auto newn = pos.node()->inner()[0];
 1160|      0|                    return std::make_tuple(
 1161|      0|                        pos.shift() - B, newn->inc(), ts, tail);
 1162|    916|                } else {
 1163|    916|                    auto newn = node_t::copy_inner_n(idx, pos.node(), idx);
 1164|    916|                    return std::make_tuple(pos.shift(), newn, ts, tail);
 1165|    916|                }
 1166|  4.22k|            }
 1167|  4.22k|            IMMER_CATCH (...) {
 1168|      0|                assert(!next || pos.shift() > BL);
 1169|      0|                assert(tail);
 1170|      0|                if (next)
  ------------------
  |  Branch (1170:21): [True: 0, False: 0]
  ------------------
 1171|      0|                    dec_regular(next, pos.shift() - B, last + 1 - ts);
 1172|      0|                dec_leaf(tail, ts);
 1173|      0|                IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1174|      0|            }
 1175|  4.22k|        }
 1176|  4.22k|    }
_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:
 1180|  5.57k|    {
 1181|  5.57k|        auto old_tail_size = pos.count();
 1182|  5.57k|        auto new_tail_size = pos.index(last) + 1;
 1183|  5.57k|        auto new_tail      = new_tail_size == old_tail_size
  ------------------
  |  Branch (1183:30): [True: 3.38k, False: 2.18k]
  ------------------
 1184|  5.57k|                                 ? pos.node()->inc()
 1185|  5.57k|                                 : node_t::copy_leaf(pos.node(), new_tail_size);
 1186|  5.57k|        return std::make_tuple(0, nullptr, new_tail_size, new_tail);
 1187|  5.57k|    }
_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:
 1141|  2.71k|    {
 1142|  2.71k|        auto idx = pos.index(last);
 1143|  2.71k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (1143:13): [Folded - Ignored]
  |  Branch (1143:25): [True: 0, False: 0]
  ------------------
 1144|      0|            return pos.towards_oh(this_t{}, last, idx);
 1145|  2.71k|        } else {
 1146|  2.71k|            using std::get;
 1147|  2.71k|            auto subs = pos.towards_oh(no_collapse_t{}, last, idx);
 1148|  2.71k|            auto next = get<1>(subs);
 1149|  2.71k|            auto ts   = get<2>(subs);
 1150|  2.71k|            auto tail = get<3>(subs);
 1151|  2.71k|            IMMER_TRY {
  ------------------
  |  |   41|  2.71k|#define IMMER_TRY try
  ------------------
 1152|  2.71k|                if (next) {
  ------------------
  |  Branch (1152:21): [True: 521, False: 2.19k]
  ------------------
 1153|    521|                    auto newn = node_t::copy_inner_n(idx + 1, pos.node(), idx);
 1154|    521|                    newn->inner()[idx] = next;
 1155|    521|                    return std::make_tuple(pos.shift(), newn, ts, tail);
 1156|  2.19k|                } else if (idx == 0) {
  ------------------
  |  Branch (1156:28): [True: 874, False: 1.32k]
  ------------------
 1157|    874|                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
 1158|  1.32k|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (1158:28): [Folded - Ignored]
  |  Branch (1158:40): [True: 0, False: 0]
  |  Branch (1158:52): [True: 0, False: 0]
  ------------------
 1159|      0|                    auto newn = pos.node()->inner()[0];
 1160|      0|                    return std::make_tuple(
 1161|      0|                        pos.shift() - B, newn->inc(), ts, tail);
 1162|  1.32k|                } else {
 1163|  1.32k|                    auto newn = node_t::copy_inner_n(idx, pos.node(), idx);
 1164|  1.32k|                    return std::make_tuple(pos.shift(), newn, ts, tail);
 1165|  1.32k|                }
 1166|  2.71k|            }
 1167|  2.71k|            IMMER_CATCH (...) {
 1168|      0|                assert(!next || pos.shift() > BL);
 1169|      0|                assert(tail);
 1170|      0|                if (next)
  ------------------
  |  Branch (1170:21): [True: 0, False: 0]
  ------------------
 1171|      0|                    dec_regular(next, pos.shift() - B, last + 1 - ts);
 1172|      0|                dec_leaf(tail, ts);
 1173|      0|                IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1174|      0|            }
 1175|  2.71k|        }
 1176|  2.71k|    }
_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:
 1180|  3.20k|    {
 1181|  3.20k|        auto old_tail_size = pos.count();
 1182|  3.20k|        auto new_tail_size = pos.index(last) + 1;
 1183|  3.20k|        auto new_tail      = new_tail_size == old_tail_size
  ------------------
  |  Branch (1183:30): [True: 1.50k, False: 1.70k]
  ------------------
 1184|  3.20k|                                 ? pos.node()->inc()
 1185|  3.20k|                                 : node_t::copy_leaf(pos.node(), new_tail_size);
 1186|  3.20k|        return std::make_tuple(0, nullptr, new_tail_size, new_tail);
 1187|  3.20k|    }
_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:
 1141|  4.62k|    {
 1142|  4.62k|        auto idx = pos.index(last);
 1143|  4.62k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (1143:13): [Folded - Ignored]
  |  Branch (1143:25): [True: 0, False: 0]
  ------------------
 1144|      0|            return pos.towards_oh(this_t{}, last, idx);
 1145|  4.62k|        } else {
 1146|  4.62k|            using std::get;
 1147|  4.62k|            auto subs = pos.towards_oh(no_collapse_t{}, last, idx);
 1148|  4.62k|            auto next = get<1>(subs);
 1149|  4.62k|            auto ts   = get<2>(subs);
 1150|  4.62k|            auto tail = get<3>(subs);
 1151|  4.62k|            IMMER_TRY {
  ------------------
  |  |   41|  4.62k|#define IMMER_TRY try
  ------------------
 1152|  4.62k|                if (next) {
  ------------------
  |  Branch (1152:21): [True: 1.14k, False: 3.47k]
  ------------------
 1153|  1.14k|                    auto newn = node_t::copy_inner_n(idx + 1, pos.node(), idx);
 1154|  1.14k|                    newn->inner()[idx] = next;
 1155|  1.14k|                    return std::make_tuple(pos.shift(), newn, ts, tail);
 1156|  3.47k|                } else if (idx == 0) {
  ------------------
  |  Branch (1156:28): [True: 1.70k, False: 1.77k]
  ------------------
 1157|  1.70k|                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
 1158|  1.77k|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (1158:28): [Folded - Ignored]
  |  Branch (1158:40): [True: 0, False: 0]
  |  Branch (1158:52): [True: 0, False: 0]
  ------------------
 1159|      0|                    auto newn = pos.node()->inner()[0];
 1160|      0|                    return std::make_tuple(
 1161|      0|                        pos.shift() - B, newn->inc(), ts, tail);
 1162|  1.77k|                } else {
 1163|  1.77k|                    auto newn = node_t::copy_inner_n(idx, pos.node(), idx);
 1164|  1.77k|                    return std::make_tuple(pos.shift(), newn, ts, tail);
 1165|  1.77k|                }
 1166|  4.62k|            }
 1167|  4.62k|            IMMER_CATCH (...) {
 1168|      0|                assert(!next || pos.shift() > BL);
 1169|      0|                assert(tail);
 1170|      0|                if (next)
  ------------------
  |  Branch (1170:21): [True: 0, False: 0]
  ------------------
 1171|      0|                    dec_regular(next, pos.shift() - B, last + 1 - ts);
 1172|      0|                dec_leaf(tail, ts);
 1173|      0|                IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1174|      0|            }
 1175|  4.62k|        }
 1176|  4.62k|    }
_ZN5immer6detail4rbts8dec_leafINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEvPT_j:
  555|  50.6k|{
  556|  50.6k|    make_leaf_sub_pos(node, n).visit(dec_visitor{});
  557|  50.6k|}
_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:
 1141|  6.93k|    {
 1142|  6.93k|        auto idx = pos.index(last);
 1143|  6.93k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (1143:13): [Folded - Ignored]
  |  Branch (1143:25): [True: 3.52k, False: 3.41k]
  ------------------
 1144|  3.52k|            return pos.towards_oh(this_t{}, last, idx);
 1145|  3.52k|        } else {
 1146|  3.41k|            using std::get;
 1147|  3.41k|            auto subs = pos.towards_oh(no_collapse_t{}, last, idx);
 1148|  3.41k|            auto next = get<1>(subs);
 1149|  3.41k|            auto ts   = get<2>(subs);
 1150|  3.41k|            auto tail = get<3>(subs);
 1151|  3.41k|            IMMER_TRY {
  ------------------
  |  |   41|  3.41k|#define IMMER_TRY try
  ------------------
 1152|  3.41k|                if (next) {
  ------------------
  |  Branch (1152:21): [True: 979, False: 2.43k]
  ------------------
 1153|    979|                    auto newn = node_t::copy_inner_n(idx + 1, pos.node(), idx);
 1154|    979|                    newn->inner()[idx] = next;
 1155|    979|                    return std::make_tuple(pos.shift(), newn, ts, tail);
 1156|  2.43k|                } else if (idx == 0) {
  ------------------
  |  Branch (1156:28): [True: 0, False: 2.43k]
  ------------------
 1157|      0|                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
 1158|  2.43k|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (1158:28): [Folded - Ignored]
  |  Branch (1158:40): [True: 2.04k, False: 390]
  |  Branch (1158:52): [True: 1.26k, False: 775]
  ------------------
 1159|  1.26k|                    auto newn = pos.node()->inner()[0];
 1160|  1.26k|                    return std::make_tuple(
 1161|  1.26k|                        pos.shift() - B, newn->inc(), ts, tail);
 1162|  1.26k|                } else {
 1163|  1.16k|                    auto newn = node_t::copy_inner_n(idx, pos.node(), idx);
 1164|  1.16k|                    return std::make_tuple(pos.shift(), newn, ts, tail);
 1165|  1.16k|                }
 1166|  3.41k|            }
 1167|  3.41k|            IMMER_CATCH (...) {
 1168|      0|                assert(!next || pos.shift() > BL);
 1169|      0|                assert(tail);
 1170|      0|                if (next)
  ------------------
  |  Branch (1170:21): [True: 0, False: 0]
  ------------------
 1171|      0|                    dec_regular(next, pos.shift() - B, last + 1 - ts);
 1172|      0|                dec_leaf(tail, ts);
 1173|      0|                IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1174|      0|            }
 1175|  3.41k|        }
 1176|  6.93k|    }
_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:
 1180|  1.67k|    {
 1181|  1.67k|        auto old_tail_size = pos.count();
 1182|  1.67k|        auto new_tail_size = pos.index(last) + 1;
 1183|  1.67k|        auto new_tail      = new_tail_size == old_tail_size
  ------------------
  |  Branch (1183:30): [True: 762, False: 915]
  ------------------
 1184|  1.67k|                                 ? pos.node()->inc()
 1185|  1.67k|                                 : node_t::copy_leaf(pos.node(), new_tail_size);
 1186|  1.67k|        return std::make_tuple(0, nullptr, new_tail_size, new_tail);
 1187|  1.67k|    }
_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:
 1141|  2.41k|    {
 1142|  2.41k|        auto idx = pos.index(last);
 1143|  2.41k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (1143:13): [Folded - Ignored]
  |  Branch (1143:25): [True: 1.27k, False: 1.14k]
  ------------------
 1144|  1.27k|            return pos.towards_oh(this_t{}, last, idx);
 1145|  1.27k|        } else {
 1146|  1.14k|            using std::get;
 1147|  1.14k|            auto subs = pos.towards_oh(no_collapse_t{}, last, idx);
 1148|  1.14k|            auto next = get<1>(subs);
 1149|  1.14k|            auto ts   = get<2>(subs);
 1150|  1.14k|            auto tail = get<3>(subs);
 1151|  1.14k|            IMMER_TRY {
  ------------------
  |  |   41|  1.14k|#define IMMER_TRY try
  ------------------
 1152|  1.14k|                if (next) {
  ------------------
  |  Branch (1152:21): [True: 352, False: 791]
  ------------------
 1153|    352|                    auto newn = node_t::copy_inner_n(idx + 1, pos.node(), idx);
 1154|    352|                    newn->inner()[idx] = next;
 1155|    352|                    return std::make_tuple(pos.shift(), newn, ts, tail);
 1156|    791|                } else if (idx == 0) {
  ------------------
  |  Branch (1156:28): [True: 0, False: 791]
  ------------------
 1157|      0|                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
 1158|    791|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (1158:28): [Folded - Ignored]
  |  Branch (1158:40): [True: 428, False: 363]
  |  Branch (1158:52): [True: 203, False: 225]
  ------------------
 1159|    203|                    auto newn = pos.node()->inner()[0];
 1160|    203|                    return std::make_tuple(
 1161|    203|                        pos.shift() - B, newn->inc(), ts, tail);
 1162|    588|                } else {
 1163|    588|                    auto newn = node_t::copy_inner_n(idx, pos.node(), idx);
 1164|    588|                    return std::make_tuple(pos.shift(), newn, ts, tail);
 1165|    588|                }
 1166|  1.14k|            }
 1167|  1.14k|            IMMER_CATCH (...) {
 1168|      0|                assert(!next || pos.shift() > BL);
 1169|      0|                assert(tail);
 1170|      0|                if (next)
  ------------------
  |  Branch (1170:21): [True: 0, False: 0]
  ------------------
 1171|      0|                    dec_regular(next, pos.shift() - B, last + 1 - ts);
 1172|      0|                dec_leaf(tail, ts);
 1173|      0|                IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1174|      0|            }
 1175|  1.14k|        }
 1176|  2.41k|    }
_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:
 1180|    705|    {
 1181|    705|        auto old_tail_size = pos.count();
 1182|    705|        auto new_tail_size = pos.index(last) + 1;
 1183|    705|        auto new_tail      = new_tail_size == old_tail_size
  ------------------
  |  Branch (1183:30): [True: 265, False: 440]
  ------------------
 1184|    705|                                 ? pos.node()->inc()
 1185|    705|                                 : node_t::copy_leaf(pos.node(), new_tail_size);
 1186|    705|        return std::make_tuple(0, nullptr, new_tail_size, new_tail);
 1187|    705|    }
_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:
 1413|  17.3k|    {
 1414|  17.3k|        auto idx                = pos.subindex(first);
 1415|  17.3k|        auto count              = pos.count();
 1416|  17.3k|        auto left_size          = pos.size_before(idx);
 1417|  17.3k|        auto child_size         = pos.size_sbh(idx, left_size);
 1418|  17.3k|        auto dropped_size       = first;
 1419|  17.3k|        auto child_dropped_size = dropped_size - left_size;
 1420|  17.3k|        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
  ------------------
  |  Branch (1420:13): [Folded - Ignored]
  |  Branch (1420:25): [True: 15.5k, False: 1.85k]
  |  Branch (1420:45): [True: 5.05k, False: 10.4k]
  ------------------
 1421|  5.05k|            return pos.towards_sub_oh(this_t{}, first, idx);
 1422|  12.3k|        } else {
 1423|  12.3k|            using std::get;
 1424|  12.3k|            auto n    = pos.node();
 1425|  12.3k|            auto newc = count - idx;
 1426|  12.3k|            auto newn = node_t::make_inner_r_n(newc);
 1427|  12.3k|            IMMER_TRY {
  ------------------
  |  |   41|  12.3k|#define IMMER_TRY try
  ------------------
 1428|  12.3k|                auto subs     = pos.towards_sub_oh(no_collapse_t{}, first, idx);
 1429|  12.3k|                auto newr     = newn->relaxed();
 1430|  12.3k|                newr->d.count = count - idx;
 1431|  12.3k|                newr->d.sizes[0] = child_size - child_dropped_size;
 1432|  12.3k|                assert(newr->d.sizes[0]);
 1433|      0|                pos.copy_sizes(idx + 1,
 1434|  12.3k|                               newr->d.count - 1,
 1435|  12.3k|                               newr->d.sizes[0],
 1436|  12.3k|                               newr->d.sizes + 1);
 1437|  12.3k|                assert(newr->d.sizes[newr->d.count - 1] ==
 1438|  12.3k|                       pos.size() - dropped_size);
 1439|      0|                newn->inner()[0] = get<1>(subs);
 1440|  12.3k|                std::copy(n->inner() + idx + 1,
 1441|  12.3k|                          n->inner() + count,
 1442|  12.3k|                          newn->inner() + 1);
 1443|  12.3k|                node_t::inc_nodes(newn->inner() + 1, newr->d.count - 1);
 1444|  12.3k|                return std::make_tuple(pos.shift(), newn);
 1445|  12.3k|            }
 1446|  12.3k|            IMMER_CATCH (...) {
 1447|      0|                node_t::delete_inner_r(newn, newc);
 1448|      0|                IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1449|      0|            }
 1450|  12.3k|        }
 1451|  17.3k|    }
_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:
 1455|  10.2k|    {
 1456|  10.2k|        auto n = node_t::copy_leaf(pos.node(), pos.index(first), pos.count());
 1457|  10.2k|        return std::make_tuple(0, n);
 1458|  10.2k|    }
_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:
 1413|  71.1k|    {
 1414|  71.1k|        auto idx                = pos.subindex(first);
 1415|  71.1k|        auto count              = pos.count();
 1416|  71.1k|        auto left_size          = pos.size_before(idx);
 1417|  71.1k|        auto child_size         = pos.size_sbh(idx, left_size);
 1418|  71.1k|        auto dropped_size       = first;
 1419|  71.1k|        auto child_dropped_size = dropped_size - left_size;
 1420|  71.1k|        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
  ------------------
  |  Branch (1420:13): [Folded - Ignored]
  |  Branch (1420:25): [True: 0, False: 0]
  |  Branch (1420:45): [True: 0, False: 0]
  ------------------
 1421|      0|            return pos.towards_sub_oh(this_t{}, first, idx);
 1422|  71.1k|        } else {
 1423|  71.1k|            using std::get;
 1424|  71.1k|            auto n    = pos.node();
 1425|  71.1k|            auto newc = count - idx;
 1426|  71.1k|            auto newn = node_t::make_inner_r_n(newc);
 1427|  71.1k|            IMMER_TRY {
  ------------------
  |  |   41|  71.1k|#define IMMER_TRY try
  ------------------
 1428|  71.1k|                auto subs     = pos.towards_sub_oh(no_collapse_t{}, first, idx);
 1429|  71.1k|                auto newr     = newn->relaxed();
 1430|  71.1k|                newr->d.count = count - idx;
 1431|  71.1k|                newr->d.sizes[0] = child_size - child_dropped_size;
 1432|  71.1k|                assert(newr->d.sizes[0]);
 1433|      0|                pos.copy_sizes(idx + 1,
 1434|  71.1k|                               newr->d.count - 1,
 1435|  71.1k|                               newr->d.sizes[0],
 1436|  71.1k|                               newr->d.sizes + 1);
 1437|  71.1k|                assert(newr->d.sizes[newr->d.count - 1] ==
 1438|  71.1k|                       pos.size() - dropped_size);
 1439|      0|                newn->inner()[0] = get<1>(subs);
 1440|  71.1k|                std::copy(n->inner() + idx + 1,
 1441|  71.1k|                          n->inner() + count,
 1442|  71.1k|                          newn->inner() + 1);
 1443|  71.1k|                node_t::inc_nodes(newn->inner() + 1, newr->d.count - 1);
 1444|  71.1k|                return std::make_tuple(pos.shift(), newn);
 1445|  71.1k|            }
 1446|  71.1k|            IMMER_CATCH (...) {
 1447|      0|                node_t::delete_inner_r(newn, newc);
 1448|      0|                IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1449|      0|            }
 1450|  71.1k|        }
 1451|  71.1k|    }
_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:
 1413|  2.09k|    {
 1414|  2.09k|        auto idx                = pos.subindex(first);
 1415|  2.09k|        auto count              = pos.count();
 1416|  2.09k|        auto left_size          = pos.size_before(idx);
 1417|  2.09k|        auto child_size         = pos.size_sbh(idx, left_size);
 1418|  2.09k|        auto dropped_size       = first;
 1419|  2.09k|        auto child_dropped_size = dropped_size - left_size;
 1420|  2.09k|        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
  ------------------
  |  Branch (1420:13): [Folded - Ignored]
  |  Branch (1420:25): [True: 0, False: 0]
  |  Branch (1420:45): [True: 0, False: 0]
  ------------------
 1421|      0|            return pos.towards_sub_oh(this_t{}, first, idx);
 1422|  2.09k|        } else {
 1423|  2.09k|            using std::get;
 1424|  2.09k|            auto n    = pos.node();
 1425|  2.09k|            auto newc = count - idx;
 1426|  2.09k|            auto newn = node_t::make_inner_r_n(newc);
 1427|  2.09k|            IMMER_TRY {
  ------------------
  |  |   41|  2.09k|#define IMMER_TRY try
  ------------------
 1428|  2.09k|                auto subs     = pos.towards_sub_oh(no_collapse_t{}, first, idx);
 1429|  2.09k|                auto newr     = newn->relaxed();
 1430|  2.09k|                newr->d.count = count - idx;
 1431|  2.09k|                newr->d.sizes[0] = child_size - child_dropped_size;
 1432|  2.09k|                assert(newr->d.sizes[0]);
 1433|      0|                pos.copy_sizes(idx + 1,
 1434|  2.09k|                               newr->d.count - 1,
 1435|  2.09k|                               newr->d.sizes[0],
 1436|  2.09k|                               newr->d.sizes + 1);
 1437|  2.09k|                assert(newr->d.sizes[newr->d.count - 1] ==
 1438|  2.09k|                       pos.size() - dropped_size);
 1439|      0|                newn->inner()[0] = get<1>(subs);
 1440|  2.09k|                std::copy(n->inner() + idx + 1,
 1441|  2.09k|                          n->inner() + count,
 1442|  2.09k|                          newn->inner() + 1);
 1443|  2.09k|                node_t::inc_nodes(newn->inner() + 1, newr->d.count - 1);
 1444|  2.09k|                return std::make_tuple(pos.shift(), newn);
 1445|  2.09k|            }
 1446|  2.09k|            IMMER_CATCH (...) {
 1447|      0|                node_t::delete_inner_r(newn, newc);
 1448|      0|                IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1449|      0|            }
 1450|  2.09k|        }
 1451|  2.09k|    }
_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:
 1455|  9.60k|    {
 1456|  9.60k|        auto n = node_t::copy_leaf(pos.node(), pos.index(first), pos.count());
 1457|  9.60k|        return std::make_tuple(0, n);
 1458|  9.60k|    }
_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:
 1413|  5.56k|    {
 1414|  5.56k|        auto idx                = pos.subindex(first);
 1415|  5.56k|        auto count              = pos.count();
 1416|  5.56k|        auto left_size          = pos.size_before(idx);
 1417|  5.56k|        auto child_size         = pos.size_sbh(idx, left_size);
 1418|  5.56k|        auto dropped_size       = first;
 1419|  5.56k|        auto child_dropped_size = dropped_size - left_size;
 1420|  5.56k|        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
  ------------------
  |  Branch (1420:13): [Folded - Ignored]
  |  Branch (1420:25): [True: 0, False: 0]
  |  Branch (1420:45): [True: 0, False: 0]
  ------------------
 1421|      0|            return pos.towards_sub_oh(this_t{}, first, idx);
 1422|  5.56k|        } else {
 1423|  5.56k|            using std::get;
 1424|  5.56k|            auto n    = pos.node();
 1425|  5.56k|            auto newc = count - idx;
 1426|  5.56k|            auto newn = node_t::make_inner_r_n(newc);
 1427|  5.56k|            IMMER_TRY {
  ------------------
  |  |   41|  5.56k|#define IMMER_TRY try
  ------------------
 1428|  5.56k|                auto subs     = pos.towards_sub_oh(no_collapse_t{}, first, idx);
 1429|  5.56k|                auto newr     = newn->relaxed();
 1430|  5.56k|                newr->d.count = count - idx;
 1431|  5.56k|                newr->d.sizes[0] = child_size - child_dropped_size;
 1432|  5.56k|                assert(newr->d.sizes[0]);
 1433|      0|                pos.copy_sizes(idx + 1,
 1434|  5.56k|                               newr->d.count - 1,
 1435|  5.56k|                               newr->d.sizes[0],
 1436|  5.56k|                               newr->d.sizes + 1);
 1437|  5.56k|                assert(newr->d.sizes[newr->d.count - 1] ==
 1438|  5.56k|                       pos.size() - dropped_size);
 1439|      0|                newn->inner()[0] = get<1>(subs);
 1440|  5.56k|                std::copy(n->inner() + idx + 1,
 1441|  5.56k|                          n->inner() + count,
 1442|  5.56k|                          newn->inner() + 1);
 1443|  5.56k|                node_t::inc_nodes(newn->inner() + 1, newr->d.count - 1);
 1444|  5.56k|                return std::make_tuple(pos.shift(), newn);
 1445|  5.56k|            }
 1446|  5.56k|            IMMER_CATCH (...) {
 1447|      0|                node_t::delete_inner_r(newn, newc);
 1448|      0|                IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1449|      0|            }
 1450|  5.56k|        }
 1451|  5.56k|    }
_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:
 1413|  9.95k|    {
 1414|  9.95k|        auto idx                = pos.subindex(first);
 1415|  9.95k|        auto count              = pos.count();
 1416|  9.95k|        auto left_size          = pos.size_before(idx);
 1417|  9.95k|        auto child_size         = pos.size_sbh(idx, left_size);
 1418|  9.95k|        auto dropped_size       = first;
 1419|  9.95k|        auto child_dropped_size = dropped_size - left_size;
 1420|  9.95k|        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
  ------------------
  |  Branch (1420:13): [Folded - Ignored]
  |  Branch (1420:25): [True: 6.04k, False: 3.91k]
  |  Branch (1420:45): [True: 3.48k, False: 2.55k]
  ------------------
 1421|  3.48k|            return pos.towards_sub_oh(this_t{}, first, idx);
 1422|  6.46k|        } else {
 1423|  6.46k|            using std::get;
 1424|  6.46k|            auto n    = pos.node();
 1425|  6.46k|            auto newc = count - idx;
 1426|  6.46k|            auto newn = node_t::make_inner_r_n(newc);
 1427|  6.46k|            IMMER_TRY {
  ------------------
  |  |   41|  6.46k|#define IMMER_TRY try
  ------------------
 1428|  6.46k|                auto subs     = pos.towards_sub_oh(no_collapse_t{}, first, idx);
 1429|  6.46k|                auto newr     = newn->relaxed();
 1430|  6.46k|                newr->d.count = count - idx;
 1431|  6.46k|                newr->d.sizes[0] = child_size - child_dropped_size;
 1432|  6.46k|                assert(newr->d.sizes[0]);
 1433|      0|                pos.copy_sizes(idx + 1,
 1434|  6.46k|                               newr->d.count - 1,
 1435|  6.46k|                               newr->d.sizes[0],
 1436|  6.46k|                               newr->d.sizes + 1);
 1437|  6.46k|                assert(newr->d.sizes[newr->d.count - 1] ==
 1438|  6.46k|                       pos.size() - dropped_size);
 1439|      0|                newn->inner()[0] = get<1>(subs);
 1440|  6.46k|                std::copy(n->inner() + idx + 1,
 1441|  6.46k|                          n->inner() + count,
 1442|  6.46k|                          newn->inner() + 1);
 1443|  6.46k|                node_t::inc_nodes(newn->inner() + 1, newr->d.count - 1);
 1444|  6.46k|                return std::make_tuple(pos.shift(), newn);
 1445|  6.46k|            }
 1446|  6.46k|            IMMER_CATCH (...) {
 1447|      0|                node_t::delete_inner_r(newn, newc);
 1448|      0|                IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1449|      0|            }
 1450|  6.46k|        }
 1451|  9.95k|    }
_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:
 1413|  1.31k|    {
 1414|  1.31k|        auto idx                = pos.subindex(first);
 1415|  1.31k|        auto count              = pos.count();
 1416|  1.31k|        auto left_size          = pos.size_before(idx);
 1417|  1.31k|        auto child_size         = pos.size_sbh(idx, left_size);
 1418|  1.31k|        auto dropped_size       = first;
 1419|  1.31k|        auto child_dropped_size = dropped_size - left_size;
 1420|  1.31k|        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
  ------------------
  |  Branch (1420:13): [Folded - Ignored]
  |  Branch (1420:25): [True: 474, False: 837]
  |  Branch (1420:45): [True: 272, False: 202]
  ------------------
 1421|    272|            return pos.towards_sub_oh(this_t{}, first, idx);
 1422|  1.03k|        } else {
 1423|  1.03k|            using std::get;
 1424|  1.03k|            auto n    = pos.node();
 1425|  1.03k|            auto newc = count - idx;
 1426|  1.03k|            auto newn = node_t::make_inner_r_n(newc);
 1427|  1.03k|            IMMER_TRY {
  ------------------
  |  |   41|  1.03k|#define IMMER_TRY try
  ------------------
 1428|  1.03k|                auto subs     = pos.towards_sub_oh(no_collapse_t{}, first, idx);
 1429|  1.03k|                auto newr     = newn->relaxed();
 1430|  1.03k|                newr->d.count = count - idx;
 1431|  1.03k|                newr->d.sizes[0] = child_size - child_dropped_size;
 1432|  1.03k|                assert(newr->d.sizes[0]);
 1433|      0|                pos.copy_sizes(idx + 1,
 1434|  1.03k|                               newr->d.count - 1,
 1435|  1.03k|                               newr->d.sizes[0],
 1436|  1.03k|                               newr->d.sizes + 1);
 1437|  1.03k|                assert(newr->d.sizes[newr->d.count - 1] ==
 1438|  1.03k|                       pos.size() - dropped_size);
 1439|      0|                newn->inner()[0] = get<1>(subs);
 1440|  1.03k|                std::copy(n->inner() + idx + 1,
 1441|  1.03k|                          n->inner() + count,
 1442|  1.03k|                          newn->inner() + 1);
 1443|  1.03k|                node_t::inc_nodes(newn->inner() + 1, newr->d.count - 1);
 1444|  1.03k|                return std::make_tuple(pos.shift(), newn);
 1445|  1.03k|            }
 1446|  1.03k|            IMMER_CATCH (...) {
 1447|      0|                node_t::delete_inner_r(newn, newc);
 1448|      0|                IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1449|      0|            }
 1450|  1.03k|        }
 1451|  1.31k|    }
_ZN5immer6detail4rbts12concat_treesINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_11relaxed_posIT_EEPSE_jSG_jm:
 1996|  9.86k|{
 1997|  9.86k|    return make_singleton_regular_sub_pos(ltail, ltcount)
 1998|  9.86k|        .visit(concat_trees_left_visitor<Node>{},
 1999|  9.86k|               empty_leaf_pos<Node>{},
 2000|  9.86k|               rroot,
 2001|  9.86k|               rshift,
 2002|  9.86k|               rsize)
 2003|  9.86k|        .realize();
 2004|  9.86k|}
_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_:
 1966|  9.86k|    {
 1967|  9.86k|        return visit_maybe_relaxed_sub(
 1968|  9.86k|            args..., concat_trees_right_visitor<Node>{}, lpos, tpos);
 1969|  9.86k|    }
_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_:
 1953|  6.89k|    {
 1954|  6.89k|        return concat_inners<Node>(lpos, tpos, rpos);
 1955|  6.89k|    }
_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_:
 1867|  34.9k|{
 1868|  34.9k|    auto lshift = lpos.shift();
 1869|  34.9k|    auto rshift = rpos.shift();
 1870|  34.9k|    if (lshift > rshift) {
  ------------------
  |  Branch (1870:9): [True: 0, False: 34.9k]
  ------------------
 1871|      0|        auto cpos = lpos.last_sub(concat_left_visitor<Node>{}, tpos, rpos);
 1872|      0|        return concat_rebalance<Node>(lpos, cpos, null_sub_pos{});
 1873|  34.9k|    } else if (lshift < rshift) {
  ------------------
  |  Branch (1873:16): [True: 28.4k, False: 6.48k]
  ------------------
 1874|  28.4k|        auto cpos = rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
 1875|  28.4k|        return concat_rebalance<Node>(null_sub_pos{}, cpos, rpos);
 1876|  28.4k|    } else {
 1877|  6.48k|        assert(lshift == rshift);
 1878|      0|        assert(Node::bits_leaf == 0u || lshift > 0);
 1879|      0|        auto cpos = lpos.last_sub(concat_both_visitor<Node>{}, tpos, rpos);
 1880|  6.48k|        return concat_rebalance<Node>(lpos, cpos, rpos);
 1881|  6.48k|    }
 1882|  34.9k|}
_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_:
 1508|  7.75M|    {
 1509|  7.75M|        if (shift_ == BL) {
  ------------------
  |  Branch (1509:13): [True: 697k, False: 7.05M]
  ------------------
 1510|   697k|            auto s = size_t{};
 1511|  2.78M|            for (auto i = count_t{0}; i < count_; ++i) {
  ------------------
  |  Branch (1511:39): [True: 2.08M, False: 697k]
  ------------------
 1512|  2.08M|                make_leaf_sub_pos(nodes_[i], sizes_[i] - s).visit(v, args...);
 1513|  2.08M|                s = sizes_[i];
 1514|  2.08M|            }
 1515|  7.05M|        } else {
 1516|  18.4M|            for (auto i = count_t{0}; i < count_; ++i)
  ------------------
  |  Branch (1516:39): [True: 11.3M, False: 7.05M]
  ------------------
 1517|  11.3M|                make_relaxed_pos(nodes_[i], shift_ - B, nodes_[i]->relaxed())
 1518|  11.3M|                    .visit(v, args...);
 1519|  7.05M|        }
 1520|  7.75M|    }
_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_:
 1728|  3.24M|    {
 1729|  3.24M|        auto count = p.count();
 1730|  3.24M|        assert(plan.n < Plan::max_children);
 1731|      0|        plan.counts[plan.n++] = count;
 1732|  3.24M|        plan.total += count;
 1733|  3.24M|    }
_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_:
 1728|  30.3M|    {
 1729|  30.3M|        auto count = p.count();
 1730|  30.3M|        assert(plan.n < Plan::max_children);
 1731|      0|        plan.counts[plan.n++] = count;
 1732|  30.3M|        plan.total += count;
 1733|  30.3M|    }
_ZN5immer6detail4rbts21concat_rebalance_planILj2ELj2EE7shuffleEj:
 1757|  7.75M|    {
 1758|       |        // gcc seems to not really understand this code... :(
 1759|  7.75M|#if !defined(_MSC_VER)
 1760|  7.75M|#pragma GCC diagnostic push
 1761|  7.75M|#pragma GCC diagnostic ignored "-Warray-bounds"
 1762|  7.75M|#endif
 1763|  7.75M|        constexpr count_t rrb_extras    = 2;
 1764|  7.75M|        constexpr count_t rrb_invariant = 1;
 1765|  7.75M|        const auto bits                 = shift == BL ? BL : B;
  ------------------
  |  Branch (1765:43): [True: 697k, False: 7.05M]
  ------------------
 1766|  7.75M|        const auto branches             = count_t{1} << bits;
 1767|  7.75M|        const auto optimal              = ((total - 1) >> bits) + 1;
 1768|  7.75M|        count_t i                       = 0;
 1769|  9.04M|        while (n >= optimal + rrb_extras) {
  ------------------
  |  Branch (1769:16): [True: 1.28M, False: 7.75M]
  ------------------
 1770|       |            // skip ok nodes
 1771|  2.01M|            while (counts[i] > branches - rrb_invariant)
  ------------------
  |  Branch (1771:20): [True: 724k, False: 1.28M]
  ------------------
 1772|   724k|                i++;
 1773|  1.28M|            assert(i < n);
 1774|       |            // short node, redistribute
 1775|      0|            auto remaining = counts[i];
 1776|  3.48M|            do {
 1777|  3.48M|                auto next  = counts[i + 1];
 1778|  3.48M|                auto count = std::min(remaining + next, branches);
 1779|  3.48M|                counts[i]  = count;
 1780|  3.48M|                assert(counts[i]);
 1781|      0|                remaining += next - count;
 1782|  3.48M|                ++i;
 1783|  3.48M|            } while (remaining > 0);
  ------------------
  |  Branch (1783:22): [True: 2.19M, False: 1.28M]
  ------------------
 1784|       |            // remove node
 1785|      0|            std::move(counts + i + 1, counts + n, counts + i);
 1786|  1.28M|            --n;
 1787|  1.28M|            --i;
 1788|  1.28M|        }
 1789|  7.75M|#if !defined(_MSC_VER)
 1790|  7.75M|#pragma GCC diagnostic pop
 1791|  7.75M|#endif
 1792|  7.75M|    }
_ZNK5immer6detail4rbts17concat_center_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5shiftEv:
 1477|  15.5M|    auto shift() const { return shift_; }
_ZN5immer6detail4rbts13concat_mergerINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEC2EjPjj:
 1577|  7.75M|    {}
_ZN5immer6detail4rbts17concat_center_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEC2EjPSC_m:
 1484|  7.75M|    {}
_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_:
 1508|  7.75M|    {
 1509|  7.75M|        if (shift_ == BL) {
  ------------------
  |  Branch (1509:13): [True: 697k, False: 7.05M]
  ------------------
 1510|   697k|            auto s = size_t{};
 1511|  2.78M|            for (auto i = count_t{0}; i < count_; ++i) {
  ------------------
  |  Branch (1511:39): [True: 2.08M, False: 697k]
  ------------------
 1512|  2.08M|                make_leaf_sub_pos(nodes_[i], sizes_[i] - s).visit(v, args...);
 1513|  2.08M|                s = sizes_[i];
 1514|  2.08M|            }
 1515|  7.05M|        } else {
 1516|  18.4M|            for (auto i = count_t{0}; i < count_; ++i)
  ------------------
  |  Branch (1516:39): [True: 11.3M, False: 7.05M]
  ------------------
 1517|  11.3M|                make_relaxed_pos(nodes_[i], shift_ - B, nodes_[i]->relaxed())
 1518|  11.3M|                    .visit(v, args...);
 1519|  7.05M|        }
 1520|  7.75M|    }
_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_:
 1716|  3.24M|    {
 1717|  3.24M|        merger.merge_leaf(p);
 1718|  3.24M|    }
_ZN5immer6detail4rbts13concat_mergerINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10merge_leafIRNS1_12leaf_sub_posISC_EEEEvOT_:
 1609|  3.24M|    {
 1610|  3.24M|        auto from       = p.node();
 1611|  3.24M|        auto from_size  = p.size();
 1612|  3.24M|        auto from_count = p.count();
 1613|  3.24M|        assert(from_size);
 1614|  3.24M|        if (!to_ && *curr_ == from_count) {
  ------------------
  |  Branch (1614:13): [True: 3.20M, False: 44.7k]
  |  Branch (1614:21): [True: 3.17M, False: 25.7k]
  ------------------
 1615|  3.17M|            add_child(from, from_size);
 1616|  3.17M|            from->inc();
 1617|  3.17M|        } else {
 1618|  70.5k|            auto from_offset = count_t{};
 1619|  70.5k|            auto from_data   = from->leaf();
 1620|  88.0k|            do {
 1621|  88.0k|                if (!to_) {
  ------------------
  |  Branch (1621:21): [True: 43.2k, False: 44.7k]
  ------------------
 1622|  43.2k|                    to_        = node_t::make_leaf_n(*curr_);
 1623|  43.2k|                    to_offset_ = 0;
 1624|  43.2k|                }
 1625|  88.0k|                auto data = to_->leaf();
 1626|  88.0k|                auto to_copy =
 1627|  88.0k|                    std::min(from_count - from_offset, *curr_ - to_offset_);
 1628|  88.0k|                detail::uninitialized_copy(from_data + from_offset,
 1629|  88.0k|                                           from_data + from_offset + to_copy,
 1630|  88.0k|                                           data + to_offset_);
 1631|  88.0k|                to_offset_ += to_copy;
 1632|  88.0k|                from_offset += to_copy;
 1633|  88.0k|                if (*curr_ == to_offset_) {
  ------------------
  |  Branch (1633:21): [True: 43.2k, False: 44.7k]
  ------------------
 1634|  43.2k|                    add_child(to_, to_offset_);
 1635|  43.2k|                    to_ = nullptr;
 1636|  43.2k|                }
 1637|  88.0k|            } while (from_offset != from_count);
  ------------------
  |  Branch (1637:22): [True: 17.5k, False: 70.5k]
  ------------------
 1638|  70.5k|        }
 1639|  3.24M|    }
_ZN5immer6detail4rbts13concat_mergerINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE9add_childEPSC_m:
 1584|  36.1M|    {
 1585|  36.1M|        assert(size);
 1586|      0|        ++curr_;
 1587|  36.1M|        auto parent  = result_.nodes_[result_.count_ - 1];
 1588|  36.1M|        auto relaxed = parent->relaxed();
 1589|  36.1M|        if (relaxed->d.count == branches<B>) {
  ------------------
  |  Branch (1589:13): [True: 4.34M, False: 31.7M]
  ------------------
 1590|  4.34M|            assert(result_.count_ < result_t::max_children);
 1591|      0|            n_ -= branches<B>;
 1592|  4.34M|            parent  = node_t::make_inner_r_n(std::min(n_, branches<B>));
 1593|  4.34M|            relaxed = parent->relaxed();
 1594|  4.34M|            result_.nodes_[result_.count_] = parent;
 1595|  4.34M|            result_.sizes_[result_.count_] = result_.sizes_[result_.count_ - 1];
 1596|  4.34M|            assert(result_.sizes_[result_.count_]);
 1597|      0|            ++result_.count_;
 1598|  4.34M|        }
 1599|      0|        auto idx = relaxed->d.count++;
 1600|  36.1M|        result_.sizes_[result_.count_ - 1] += size;
 1601|  36.1M|        assert(result_.sizes_[result_.count_ - 1]);
 1602|  36.1M|        relaxed->d.sizes[idx] = size + (idx ? relaxed->d.sizes[idx - 1] : 0);
  ------------------
  |  Branch (1602:41): [True: 24.0M, False: 12.0M]
  ------------------
 1603|  36.1M|        assert(relaxed->d.sizes[idx]);
 1604|      0|        parent->inner()[idx] = p;
 1605|  36.1M|    };
_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_:
 1710|  30.3M|    {
 1711|  30.3M|        merger.merge_inner(p);
 1712|  30.3M|    }
_ZN5immer6detail4rbts13concat_mergerINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE11merge_innerIRNS1_11relaxed_posISC_EEEEvOT_:
 1643|  30.3M|    {
 1644|  30.3M|        auto from       = p.node();
 1645|  30.3M|        auto from_size  = p.size();
 1646|  30.3M|        auto from_count = p.count();
 1647|  30.3M|        assert(from_size);
 1648|  30.3M|        if (!to_ && *curr_ == from_count) {
  ------------------
  |  Branch (1648:13): [True: 27.0M, False: 3.36M]
  |  Branch (1648:21): [True: 25.7M, False: 1.24M]
  ------------------
 1649|  25.7M|            add_child(from, from_size);
 1650|  25.7M|            from->inc();
 1651|  25.7M|        } else {
 1652|  4.60M|            auto from_offset = count_t{};
 1653|  4.60M|            auto from_data   = from->inner();
 1654|  6.70M|            do {
 1655|  6.70M|                if (!to_) {
  ------------------
  |  Branch (1655:21): [True: 3.34M, False: 3.36M]
  ------------------
 1656|  3.34M|                    to_        = node_t::make_inner_r_n(*curr_);
 1657|  3.34M|                    to_offset_ = 0;
 1658|  3.34M|                    to_size_   = 0;
 1659|  3.34M|                }
 1660|  6.70M|                auto data = to_->inner();
 1661|  6.70M|                auto to_copy =
 1662|  6.70M|                    std::min(from_count - from_offset, *curr_ - to_offset_);
 1663|  6.70M|                std::copy(from_data + from_offset,
 1664|  6.70M|                          from_data + from_offset + to_copy,
 1665|  6.70M|                          data + to_offset_);
 1666|  6.70M|                node_t::inc_nodes(from_data + from_offset, to_copy);
 1667|  6.70M|                auto sizes = to_->relaxed()->d.sizes;
 1668|  6.70M|                p.copy_sizes(
 1669|  6.70M|                    from_offset, to_copy, to_size_, sizes + to_offset_);
 1670|  6.70M|                to_offset_ += to_copy;
 1671|  6.70M|                from_offset += to_copy;
 1672|  6.70M|                to_size_ = sizes[to_offset_ - 1];
 1673|  6.70M|                assert(to_size_);
 1674|  6.70M|                if (*curr_ == to_offset_) {
  ------------------
  |  Branch (1674:21): [True: 3.34M, False: 3.36M]
  ------------------
 1675|  3.34M|                    to_->relaxed()->d.count = to_offset_;
 1676|  3.34M|                    add_child(to_, to_size_);
 1677|  3.34M|                    to_ = nullptr;
 1678|  3.34M|                }
 1679|  6.70M|            } while (from_offset != from_count);
  ------------------
  |  Branch (1679:22): [True: 2.10M, False: 4.60M]
  ------------------
 1680|  4.60M|        }
 1681|  30.3M|    }
_ZNK5immer6detail4rbts13concat_mergerINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE6finishEv:
 1684|  7.75M|    {
 1685|  7.75M|        assert(!to_);
 1686|      0|        return result_;
 1687|  7.75M|    }
_ZN5immer6detail4rbts17concat_center_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE8each_subINS1_11dec_visitorEJEEEvT_DpOT0_:
 1508|  7.75M|    {
 1509|  7.75M|        if (shift_ == BL) {
  ------------------
  |  Branch (1509:13): [True: 697k, False: 7.05M]
  ------------------
 1510|   697k|            auto s = size_t{};
 1511|  2.78M|            for (auto i = count_t{0}; i < count_; ++i) {
  ------------------
  |  Branch (1511:39): [True: 2.08M, False: 697k]
  ------------------
 1512|  2.08M|                make_leaf_sub_pos(nodes_[i], sizes_[i] - s).visit(v, args...);
 1513|  2.08M|                s = sizes_[i];
 1514|  2.08M|            }
 1515|  7.05M|        } else {
 1516|  18.4M|            for (auto i = count_t{0}; i < count_; ++i)
  ------------------
  |  Branch (1516:39): [True: 11.3M, False: 7.05M]
  ------------------
 1517|  11.3M|                make_relaxed_pos(nodes_[i], shift_ - B, nodes_[i]->relaxed())
 1518|  11.3M|                    .visit(v, args...);
 1519|  7.05M|        }
 1520|  7.75M|    }
_ZN5immer6detail4rbts17concat_center_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEC2EjPSC_mSE_mSE_m:
 1504|   687k|    {}
_ZN5immer6detail4rbts17concat_center_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEC2EjPSC_mSE_m:
 1491|  9.86k|    {}
_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_:
 1912|  28.0k|    {
 1913|  28.0k|        return concat_inners<Node>(lpos, tpos, rpos);
 1914|  28.0k|    }
_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_:
 1912|    416|    {
 1913|    416|        return concat_inners<Node>(lpos, tpos, rpos);
 1914|    416|    }
_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_:
 1867|  3.38k|{
 1868|  3.38k|    auto lshift = lpos.shift();
 1869|  3.38k|    auto rshift = rpos.shift();
 1870|  3.38k|    if (lshift > rshift) {
  ------------------
  |  Branch (1870:9): [True: 0, False: 3.38k]
  ------------------
 1871|      0|        auto cpos = lpos.last_sub(concat_left_visitor<Node>{}, tpos, rpos);
 1872|      0|        return concat_rebalance<Node>(lpos, cpos, null_sub_pos{});
 1873|  3.38k|    } else if (lshift < rshift) {
  ------------------
  |  Branch (1873:16): [True: 953, False: 2.43k]
  ------------------
 1874|    953|        auto cpos = rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
 1875|    953|        return concat_rebalance<Node>(null_sub_pos{}, cpos, rpos);
 1876|  2.43k|    } else {
 1877|  2.43k|        assert(lshift == rshift);
 1878|      0|        assert(Node::bits_leaf == 0u || lshift > 0);
 1879|      0|        auto cpos = lpos.last_sub(concat_both_visitor<Node>{}, tpos, rpos);
 1880|  2.43k|        return concat_rebalance<Node>(lpos, cpos, rpos);
 1881|  2.43k|    }
 1882|  3.38k|}
_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_:
 1912|  1.42k|    {
 1913|  1.42k|        return concat_inners<Node>(lpos, tpos, rpos);
 1914|  1.42k|    }
_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_:
 1867|  1.42k|{
 1868|  1.42k|    auto lshift = lpos.shift();
 1869|  1.42k|    auto rshift = rpos.shift();
 1870|  1.42k|    if (lshift > rshift) {
  ------------------
  |  Branch (1870:9): [True: 0, False: 1.42k]
  ------------------
 1871|      0|        auto cpos = lpos.last_sub(concat_left_visitor<Node>{}, tpos, rpos);
 1872|      0|        return concat_rebalance<Node>(lpos, cpos, null_sub_pos{});
 1873|  1.42k|    } else if (lshift < rshift) {
  ------------------
  |  Branch (1873:16): [True: 471, False: 953]
  ------------------
 1874|    471|        auto cpos = rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
 1875|    471|        return concat_rebalance<Node>(null_sub_pos{}, cpos, rpos);
 1876|    953|    } else {
 1877|    953|        assert(lshift == rshift);
 1878|      0|        assert(Node::bits_leaf == 0u || lshift > 0);
 1879|      0|        auto cpos = lpos.last_sub(concat_both_visitor<Node>{}, tpos, rpos);
 1880|    953|        return concat_rebalance<Node>(lpos, cpos, rpos);
 1881|    953|    }
 1882|  1.42k|}
_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_:
 1818|    924|{
 1819|    924|    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
 1820|    924|    plan.fill(lpos, cpos, rpos);
 1821|    924|    plan.shuffle(cpos.shift());
 1822|    924|    IMMER_TRY {
  ------------------
  |  |   41|    924|#define IMMER_TRY try
  ------------------
 1823|    924|        return plan.merge(lpos, cpos, rpos);
 1824|    924|    }
 1825|    924|    IMMER_CATCH (...) {
 1826|      0|        cpos.each_sub(dec_visitor{});
 1827|      0|        IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1828|      0|    }
 1829|    924|}
_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_:
 1747|    924|    {
 1748|    924|        assert(n == 0u);
 1749|      0|        assert(total == 0u);
 1750|      0|        using visitor_t = concat_rebalance_plan_fill_visitor;
 1751|    924|        lpos.each_left_sub(visitor_t{}, *this);
 1752|    924|        cpos.each_sub(visitor_t{}, *this);
 1753|    924|        rpos.each_right_sub(visitor_t{}, *this);
 1754|    924|    }
_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_:
 1728|  1.61M|    {
 1729|  1.61M|        auto count = p.count();
 1730|  1.61M|        assert(plan.n < Plan::max_children);
 1731|      0|        plan.counts[plan.n++] = count;
 1732|  1.61M|        plan.total += count;
 1733|  1.61M|    }
_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_:
 1728|  1.37M|    {
 1729|  1.37M|        auto count = p.count();
 1730|  1.37M|        assert(plan.n < Plan::max_children);
 1731|      0|        plan.counts[plan.n++] = count;
 1732|  1.37M|        plan.total += count;
 1733|  1.37M|    }
_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_:
 1797|    924|    {
 1798|    924|        using node_t    = node_type<CPos>;
 1799|    924|        using merger_t  = concat_merger<node_t>;
 1800|    924|        using visitor_t = concat_merger_visitor;
 1801|    924|        auto merger     = merger_t{cpos.shift(), counts, n};
 1802|    924|        IMMER_TRY {
  ------------------
  |  |   41|    924|#define IMMER_TRY try
  ------------------
 1803|    924|            lpos.each_left_sub(visitor_t{}, merger);
 1804|    924|            cpos.each_sub(visitor_t{}, merger);
 1805|    924|            rpos.each_right_sub(visitor_t{}, merger);
 1806|    924|            cpos.each_sub(dec_visitor{});
 1807|    924|            return merger.finish();
 1808|    924|        }
 1809|    924|        IMMER_CATCH (...) {
 1810|      0|            merger.abort();
 1811|      0|            IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1812|      0|        }
 1813|    924|    }
_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_:
 1716|  1.61M|    {
 1717|  1.61M|        merger.merge_leaf(p);
 1718|  1.61M|    }
_ZN5immer6detail4rbts13concat_mergerINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10merge_leafIRNS1_13full_leaf_posISC_EEEEvOT_:
 1609|  1.61M|    {
 1610|  1.61M|        auto from       = p.node();
 1611|  1.61M|        auto from_size  = p.size();
 1612|  1.61M|        auto from_count = p.count();
 1613|  1.61M|        assert(from_size);
 1614|  1.61M|        if (!to_ && *curr_ == from_count) {
  ------------------
  |  Branch (1614:13): [True: 1.61M, False: 0]
  |  Branch (1614:21): [True: 1.61M, False: 0]
  ------------------
 1615|  1.61M|            add_child(from, from_size);
 1616|  1.61M|            from->inc();
 1617|  1.61M|        } else {
 1618|      0|            auto from_offset = count_t{};
 1619|      0|            auto from_data   = from->leaf();
 1620|      0|            do {
 1621|      0|                if (!to_) {
  ------------------
  |  Branch (1621:21): [True: 0, False: 0]
  ------------------
 1622|      0|                    to_        = node_t::make_leaf_n(*curr_);
 1623|      0|                    to_offset_ = 0;
 1624|      0|                }
 1625|      0|                auto data = to_->leaf();
 1626|      0|                auto to_copy =
 1627|      0|                    std::min(from_count - from_offset, *curr_ - to_offset_);
 1628|      0|                detail::uninitialized_copy(from_data + from_offset,
 1629|      0|                                           from_data + from_offset + to_copy,
 1630|      0|                                           data + to_offset_);
 1631|      0|                to_offset_ += to_copy;
 1632|      0|                from_offset += to_copy;
 1633|      0|                if (*curr_ == to_offset_) {
  ------------------
  |  Branch (1633:21): [True: 0, False: 0]
  ------------------
 1634|      0|                    add_child(to_, to_offset_);
 1635|      0|                    to_ = nullptr;
 1636|      0|                }
 1637|      0|            } while (from_offset != from_count);
  ------------------
  |  Branch (1637:22): [True: 0, False: 0]
  ------------------
 1638|      0|        }
 1639|  1.61M|    }
_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_:
 1710|  1.37M|    {
 1711|  1.37M|        merger.merge_inner(p);
 1712|  1.37M|    }
_ZN5immer6detail4rbts13concat_mergerINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE11merge_innerIRNS1_8full_posISC_EEEEvOT_:
 1643|  1.37M|    {
 1644|  1.37M|        auto from       = p.node();
 1645|  1.37M|        auto from_size  = p.size();
 1646|  1.37M|        auto from_count = p.count();
 1647|  1.37M|        assert(from_size);
 1648|  1.37M|        if (!to_ && *curr_ == from_count) {
  ------------------
  |  Branch (1648:13): [True: 1.37M, False: 0]
  |  Branch (1648:21): [True: 1.37M, False: 0]
  ------------------
 1649|  1.37M|            add_child(from, from_size);
 1650|  1.37M|            from->inc();
 1651|  1.37M|        } else {
 1652|      0|            auto from_offset = count_t{};
 1653|      0|            auto from_data   = from->inner();
 1654|      0|            do {
 1655|      0|                if (!to_) {
  ------------------
  |  Branch (1655:21): [True: 0, False: 0]
  ------------------
 1656|      0|                    to_        = node_t::make_inner_r_n(*curr_);
 1657|      0|                    to_offset_ = 0;
 1658|      0|                    to_size_   = 0;
 1659|      0|                }
 1660|      0|                auto data = to_->inner();
 1661|      0|                auto to_copy =
 1662|      0|                    std::min(from_count - from_offset, *curr_ - to_offset_);
 1663|      0|                std::copy(from_data + from_offset,
 1664|      0|                          from_data + from_offset + to_copy,
 1665|      0|                          data + to_offset_);
 1666|      0|                node_t::inc_nodes(from_data + from_offset, to_copy);
 1667|      0|                auto sizes = to_->relaxed()->d.sizes;
 1668|      0|                p.copy_sizes(
 1669|      0|                    from_offset, to_copy, to_size_, sizes + to_offset_);
 1670|      0|                to_offset_ += to_copy;
 1671|      0|                from_offset += to_copy;
 1672|      0|                to_size_ = sizes[to_offset_ - 1];
 1673|      0|                assert(to_size_);
 1674|      0|                if (*curr_ == to_offset_) {
  ------------------
  |  Branch (1674:21): [True: 0, False: 0]
  ------------------
 1675|      0|                    to_->relaxed()->d.count = to_offset_;
 1676|      0|                    add_child(to_, to_size_);
 1677|      0|                    to_ = nullptr;
 1678|      0|                }
 1679|      0|            } while (from_offset != from_count);
  ------------------
  |  Branch (1679:22): [True: 0, False: 0]
  ------------------
 1680|      0|        }
 1681|  1.37M|    }
_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_:
 1939|    953|    {
 1940|    953|        return rpos.first_sub_leaf(concat_right_visitor<Node>{}, lpos, tpos);
 1941|    953|    }
_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_:
 1919|  3.38k|    {
 1920|  3.38k|        return concat_leafs<Node>(lpos, tpos, rpos);
 1921|  3.38k|    }
_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_:
 1833|  3.38k|{
 1834|  3.38k|    static_assert(Node::bits >= 2, "");
 1835|  3.38k|    assert(lpos.shift() == tpos.shift());
 1836|      0|    assert(lpos.shift() == rpos.shift());
 1837|      0|    assert(lpos.shift() == 0);
 1838|  3.38k|    if (tpos.count() > 0)
  ------------------
  |  Branch (1838:9): [True: 0, False: 3.38k]
  ------------------
 1839|      0|        return {
 1840|      0|            Node::bits_leaf,
 1841|      0|            lpos.node()->inc(),
 1842|      0|            lpos.count(),
 1843|      0|            tpos.node()->inc(),
 1844|      0|            tpos.count(),
 1845|      0|            rpos.node()->inc(),
 1846|      0|            rpos.count(),
 1847|      0|        };
 1848|  3.38k|    else
 1849|  3.38k|        return {
 1850|  3.38k|            Node::bits_leaf,
 1851|  3.38k|            lpos.node()->inc(),
 1852|  3.38k|            lpos.count(),
 1853|  3.38k|            rpos.node()->inc(),
 1854|  3.38k|            rpos.count(),
 1855|  3.38k|        };
 1856|  3.38k|}
_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_:
 1818|    953|{
 1819|    953|    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
 1820|    953|    plan.fill(lpos, cpos, rpos);
 1821|    953|    plan.shuffle(cpos.shift());
 1822|    953|    IMMER_TRY {
  ------------------
  |  |   41|    953|#define IMMER_TRY try
  ------------------
 1823|    953|        return plan.merge(lpos, cpos, rpos);
 1824|    953|    }
 1825|    953|    IMMER_CATCH (...) {
 1826|      0|        cpos.each_sub(dec_visitor{});
 1827|      0|        IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1828|      0|    }
 1829|    953|}
_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_:
 1747|    953|    {
 1748|    953|        assert(n == 0u);
 1749|      0|        assert(total == 0u);
 1750|      0|        using visitor_t = concat_rebalance_plan_fill_visitor;
 1751|    953|        lpos.each_left_sub(visitor_t{}, *this);
 1752|    953|        cpos.each_sub(visitor_t{}, *this);
 1753|    953|        rpos.each_right_sub(visitor_t{}, *this);
 1754|    953|    }
_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_:
 1797|    953|    {
 1798|    953|        using node_t    = node_type<CPos>;
 1799|    953|        using merger_t  = concat_merger<node_t>;
 1800|    953|        using visitor_t = concat_merger_visitor;
 1801|    953|        auto merger     = merger_t{cpos.shift(), counts, n};
 1802|    953|        IMMER_TRY {
  ------------------
  |  |   41|    953|#define IMMER_TRY try
  ------------------
 1803|    953|            lpos.each_left_sub(visitor_t{}, merger);
 1804|    953|            cpos.each_sub(visitor_t{}, merger);
 1805|    953|            rpos.each_right_sub(visitor_t{}, merger);
 1806|    953|            cpos.each_sub(dec_visitor{});
 1807|    953|            return merger.finish();
 1808|    953|        }
 1809|    953|        IMMER_CATCH (...) {
 1810|      0|            merger.abort();
 1811|      0|            IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1812|      0|        }
 1813|    953|    }
_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_:
 1818|  2.16k|{
 1819|  2.16k|    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
 1820|  2.16k|    plan.fill(lpos, cpos, rpos);
 1821|  2.16k|    plan.shuffle(cpos.shift());
 1822|  2.16k|    IMMER_TRY {
  ------------------
  |  |   41|  2.16k|#define IMMER_TRY try
  ------------------
 1823|  2.16k|        return plan.merge(lpos, cpos, rpos);
 1824|  2.16k|    }
 1825|  2.16k|    IMMER_CATCH (...) {
 1826|      0|        cpos.each_sub(dec_visitor{});
 1827|      0|        IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1828|      0|    }
 1829|  2.16k|}
_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_:
 1747|  2.16k|    {
 1748|  2.16k|        assert(n == 0u);
 1749|      0|        assert(total == 0u);
 1750|      0|        using visitor_t = concat_rebalance_plan_fill_visitor;
 1751|  2.16k|        lpos.each_left_sub(visitor_t{}, *this);
 1752|  2.16k|        cpos.each_sub(visitor_t{}, *this);
 1753|  2.16k|        rpos.each_right_sub(visitor_t{}, *this);
 1754|  2.16k|    }
_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_:
 1728|   822k|    {
 1729|   822k|        auto count = p.count();
 1730|   822k|        assert(plan.n < Plan::max_children);
 1731|      0|        plan.counts[plan.n++] = count;
 1732|   822k|        plan.total += count;
 1733|   822k|    }
_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_:
 1797|  2.16k|    {
 1798|  2.16k|        using node_t    = node_type<CPos>;
 1799|  2.16k|        using merger_t  = concat_merger<node_t>;
 1800|  2.16k|        using visitor_t = concat_merger_visitor;
 1801|  2.16k|        auto merger     = merger_t{cpos.shift(), counts, n};
 1802|  2.16k|        IMMER_TRY {
  ------------------
  |  |   41|  2.16k|#define IMMER_TRY try
  ------------------
 1803|  2.16k|            lpos.each_left_sub(visitor_t{}, merger);
 1804|  2.16k|            cpos.each_sub(visitor_t{}, merger);
 1805|  2.16k|            rpos.each_right_sub(visitor_t{}, merger);
 1806|  2.16k|            cpos.each_sub(dec_visitor{});
 1807|  2.16k|            return merger.finish();
 1808|  2.16k|        }
 1809|  2.16k|        IMMER_CATCH (...) {
 1810|      0|            merger.abort();
 1811|      0|            IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1812|      0|        }
 1813|  2.16k|    }
_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_:
 1710|   822k|    {
 1711|   822k|        merger.merge_inner(p);
 1712|   822k|    }
_ZN5immer6detail4rbts13concat_mergerINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE11merge_innerIRNS1_15regular_sub_posISC_EEEEvOT_:
 1643|   822k|    {
 1644|   822k|        auto from       = p.node();
 1645|   822k|        auto from_size  = p.size();
 1646|   822k|        auto from_count = p.count();
 1647|   822k|        assert(from_size);
 1648|   822k|        if (!to_ && *curr_ == from_count) {
  ------------------
  |  Branch (1648:13): [True: 744k, False: 77.7k]
  |  Branch (1648:21): [True: 744k, False: 0]
  ------------------
 1649|   744k|            add_child(from, from_size);
 1650|   744k|            from->inc();
 1651|   744k|        } else {
 1652|  77.7k|            auto from_offset = count_t{};
 1653|  77.7k|            auto from_data   = from->inner();
 1654|   155k|            do {
 1655|   155k|                if (!to_) {
  ------------------
  |  Branch (1655:21): [True: 77.7k, False: 77.7k]
  ------------------
 1656|  77.7k|                    to_        = node_t::make_inner_r_n(*curr_);
 1657|  77.7k|                    to_offset_ = 0;
 1658|  77.7k|                    to_size_   = 0;
 1659|  77.7k|                }
 1660|   155k|                auto data = to_->inner();
 1661|   155k|                auto to_copy =
 1662|   155k|                    std::min(from_count - from_offset, *curr_ - to_offset_);
 1663|   155k|                std::copy(from_data + from_offset,
 1664|   155k|                          from_data + from_offset + to_copy,
 1665|   155k|                          data + to_offset_);
 1666|   155k|                node_t::inc_nodes(from_data + from_offset, to_copy);
 1667|   155k|                auto sizes = to_->relaxed()->d.sizes;
 1668|   155k|                p.copy_sizes(
 1669|   155k|                    from_offset, to_copy, to_size_, sizes + to_offset_);
 1670|   155k|                to_offset_ += to_copy;
 1671|   155k|                from_offset += to_copy;
 1672|   155k|                to_size_ = sizes[to_offset_ - 1];
 1673|   155k|                assert(to_size_);
 1674|   155k|                if (*curr_ == to_offset_) {
  ------------------
  |  Branch (1674:21): [True: 77.7k, False: 77.7k]
  ------------------
 1675|  77.7k|                    to_->relaxed()->d.count = to_offset_;
 1676|  77.7k|                    add_child(to_, to_size_);
 1677|  77.7k|                    to_ = nullptr;
 1678|  77.7k|                }
 1679|   155k|            } while (from_offset != from_count);
  ------------------
  |  Branch (1679:22): [True: 77.7k, False: 77.7k]
  ------------------
 1680|  77.7k|        }
 1681|   822k|    }
_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_:
 1939|  2.43k|    {
 1940|  2.43k|        return rpos.first_sub_leaf(concat_right_visitor<Node>{}, lpos, tpos);
 1941|  2.43k|    }
_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_:
 1919|  6.48k|    {
 1920|  6.48k|        return concat_leafs<Node>(lpos, tpos, rpos);
 1921|  6.48k|    }
_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_:
 1833|  6.48k|{
 1834|  6.48k|    static_assert(Node::bits >= 2, "");
 1835|  6.48k|    assert(lpos.shift() == tpos.shift());
 1836|      0|    assert(lpos.shift() == rpos.shift());
 1837|      0|    assert(lpos.shift() == 0);
 1838|  6.48k|    if (tpos.count() > 0)
  ------------------
  |  Branch (1838:9): [True: 0, False: 6.48k]
  ------------------
 1839|      0|        return {
 1840|      0|            Node::bits_leaf,
 1841|      0|            lpos.node()->inc(),
 1842|      0|            lpos.count(),
 1843|      0|            tpos.node()->inc(),
 1844|      0|            tpos.count(),
 1845|      0|            rpos.node()->inc(),
 1846|      0|            rpos.count(),
 1847|      0|        };
 1848|  6.48k|    else
 1849|  6.48k|        return {
 1850|  6.48k|            Node::bits_leaf,
 1851|  6.48k|            lpos.node()->inc(),
 1852|  6.48k|            lpos.count(),
 1853|  6.48k|            rpos.node()->inc(),
 1854|  6.48k|            rpos.count(),
 1855|  6.48k|        };
 1856|  6.48k|}
_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_:
 1818|  2.43k|{
 1819|  2.43k|    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
 1820|  2.43k|    plan.fill(lpos, cpos, rpos);
 1821|  2.43k|    plan.shuffle(cpos.shift());
 1822|  2.43k|    IMMER_TRY {
  ------------------
  |  |   41|  2.43k|#define IMMER_TRY try
  ------------------
 1823|  2.43k|        return plan.merge(lpos, cpos, rpos);
 1824|  2.43k|    }
 1825|  2.43k|    IMMER_CATCH (...) {
 1826|      0|        cpos.each_sub(dec_visitor{});
 1827|      0|        IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1828|      0|    }
 1829|  2.43k|}
_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_:
 1747|  2.43k|    {
 1748|  2.43k|        assert(n == 0u);
 1749|      0|        assert(total == 0u);
 1750|      0|        using visitor_t = concat_rebalance_plan_fill_visitor;
 1751|  2.43k|        lpos.each_left_sub(visitor_t{}, *this);
 1752|  2.43k|        cpos.each_sub(visitor_t{}, *this);
 1753|  2.43k|        rpos.each_right_sub(visitor_t{}, *this);
 1754|  2.43k|    }
_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_:
 1797|  2.43k|    {
 1798|  2.43k|        using node_t    = node_type<CPos>;
 1799|  2.43k|        using merger_t  = concat_merger<node_t>;
 1800|  2.43k|        using visitor_t = concat_merger_visitor;
 1801|  2.43k|        auto merger     = merger_t{cpos.shift(), counts, n};
 1802|  2.43k|        IMMER_TRY {
  ------------------
  |  |   41|  2.43k|#define IMMER_TRY try
  ------------------
 1803|  2.43k|            lpos.each_left_sub(visitor_t{}, merger);
 1804|  2.43k|            cpos.each_sub(visitor_t{}, merger);
 1805|  2.43k|            rpos.each_right_sub(visitor_t{}, merger);
 1806|  2.43k|            cpos.each_sub(dec_visitor{});
 1807|  2.43k|            return merger.finish();
 1808|  2.43k|        }
 1809|  2.43k|        IMMER_CATCH (...) {
 1810|      0|            merger.abort();
 1811|      0|            IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1812|      0|        }
 1813|  2.43k|    }
_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_:
 1818|   126k|{
 1819|   126k|    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
 1820|   126k|    plan.fill(lpos, cpos, rpos);
 1821|   126k|    plan.shuffle(cpos.shift());
 1822|   126k|    IMMER_TRY {
  ------------------
  |  |   41|   126k|#define IMMER_TRY try
  ------------------
 1823|   126k|        return plan.merge(lpos, cpos, rpos);
 1824|   126k|    }
 1825|   126k|    IMMER_CATCH (...) {
 1826|      0|        cpos.each_sub(dec_visitor{});
 1827|      0|        IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1828|      0|    }
 1829|   126k|}
_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_:
 1747|   126k|    {
 1748|   126k|        assert(n == 0u);
 1749|      0|        assert(total == 0u);
 1750|      0|        using visitor_t = concat_rebalance_plan_fill_visitor;
 1751|   126k|        lpos.each_left_sub(visitor_t{}, *this);
 1752|   126k|        cpos.each_sub(visitor_t{}, *this);
 1753|   126k|        rpos.each_right_sub(visitor_t{}, *this);
 1754|   126k|    }
_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_:
 1797|   126k|    {
 1798|   126k|        using node_t    = node_type<CPos>;
 1799|   126k|        using merger_t  = concat_merger<node_t>;
 1800|   126k|        using visitor_t = concat_merger_visitor;
 1801|   126k|        auto merger     = merger_t{cpos.shift(), counts, n};
 1802|   126k|        IMMER_TRY {
  ------------------
  |  |   41|   126k|#define IMMER_TRY try
  ------------------
 1803|   126k|            lpos.each_left_sub(visitor_t{}, merger);
 1804|   126k|            cpos.each_sub(visitor_t{}, merger);
 1805|   126k|            rpos.each_right_sub(visitor_t{}, merger);
 1806|   126k|            cpos.each_sub(dec_visitor{});
 1807|   126k|            return merger.finish();
 1808|   126k|        }
 1809|   126k|        IMMER_CATCH (...) {
 1810|      0|            merger.abort();
 1811|      0|            IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1812|      0|        }
 1813|   126k|    }
_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_:
 1939|  6.48k|    {
 1940|  6.48k|        return rpos.first_sub_leaf(concat_right_visitor<Node>{}, lpos, tpos);
 1941|  6.48k|    }
_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_:
 1818|  6.48k|{
 1819|  6.48k|    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
 1820|  6.48k|    plan.fill(lpos, cpos, rpos);
 1821|  6.48k|    plan.shuffle(cpos.shift());
 1822|  6.48k|    IMMER_TRY {
  ------------------
  |  |   41|  6.48k|#define IMMER_TRY try
  ------------------
 1823|  6.48k|        return plan.merge(lpos, cpos, rpos);
 1824|  6.48k|    }
 1825|  6.48k|    IMMER_CATCH (...) {
 1826|      0|        cpos.each_sub(dec_visitor{});
 1827|      0|        IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1828|      0|    }
 1829|  6.48k|}
_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_:
 1747|  6.48k|    {
 1748|  6.48k|        assert(n == 0u);
 1749|      0|        assert(total == 0u);
 1750|      0|        using visitor_t = concat_rebalance_plan_fill_visitor;
 1751|  6.48k|        lpos.each_left_sub(visitor_t{}, *this);
 1752|  6.48k|        cpos.each_sub(visitor_t{}, *this);
 1753|  6.48k|        rpos.each_right_sub(visitor_t{}, *this);
 1754|  6.48k|    }
_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_:
 1797|  6.48k|    {
 1798|  6.48k|        using node_t    = node_type<CPos>;
 1799|  6.48k|        using merger_t  = concat_merger<node_t>;
 1800|  6.48k|        using visitor_t = concat_merger_visitor;
 1801|  6.48k|        auto merger     = merger_t{cpos.shift(), counts, n};
 1802|  6.48k|        IMMER_TRY {
  ------------------
  |  |   41|  6.48k|#define IMMER_TRY try
  ------------------
 1803|  6.48k|            lpos.each_left_sub(visitor_t{}, merger);
 1804|  6.48k|            cpos.each_sub(visitor_t{}, merger);
 1805|  6.48k|            rpos.each_right_sub(visitor_t{}, merger);
 1806|  6.48k|            cpos.each_sub(dec_visitor{});
 1807|  6.48k|            return merger.finish();
 1808|  6.48k|        }
 1809|  6.48k|        IMMER_CATCH (...) {
 1810|      0|            merger.abort();
 1811|      0|            IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1812|      0|        }
 1813|  6.48k|    }
_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_:
 1953|  2.97k|    {
 1954|  2.97k|        return concat_inners<Node>(lpos, tpos, rpos);
 1955|  2.97k|    }
_ZNO5immer6detail4rbts17concat_center_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE7realizeEv:
 1523|   697k|    {
 1524|   697k|        if (count_ > 1) {
  ------------------
  |  Branch (1524:13): [True: 50.3k, False: 647k]
  ------------------
 1525|  50.3k|            IMMER_TRY {
  ------------------
  |  |   41|  50.3k|#define IMMER_TRY try
  ------------------
 1526|  50.3k|                auto result = node_t::make_inner_r_n(count_);
 1527|  50.3k|                auto r      = result->relaxed();
 1528|  50.3k|                r->d.count  = count_;
 1529|  50.3k|                std::copy(nodes_, nodes_ + count_, result->inner());
 1530|  50.3k|                std::copy(sizes_, sizes_ + count_, r->d.sizes);
 1531|  50.3k|                return {result, shift_, r};
 1532|  50.3k|            }
 1533|  50.3k|            IMMER_CATCH (...) {
 1534|      0|                each_sub(dec_visitor{});
 1535|      0|                IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1536|      0|            }
 1537|   647k|        } else {
 1538|   647k|            assert(shift_ >= B + BL);
 1539|      0|            return {nodes_[0], shift_ - B, nodes_[0]->relaxed()};
 1540|   647k|        }
 1541|   697k|    }
_ZN5immer6detail4rbts12concat_treesINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_11relaxed_posIT_EEPSE_jmSG_jSG_jm:
 1981|   687k|{
 1982|   687k|    return visit_maybe_relaxed_sub(lroot,
 1983|   687k|                                   lshift,
 1984|   687k|                                   lsize,
 1985|   687k|                                   concat_trees_left_visitor<Node>{},
 1986|   687k|                                   make_leaf_pos(ltail, ltcount),
 1987|   687k|                                   rroot,
 1988|   687k|                                   rshift,
 1989|   687k|                                   rsize)
 1990|   687k|        .realize();
 1991|   687k|}
_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_:
 1966|   671k|    {
 1967|   671k|        return visit_maybe_relaxed_sub(
 1968|   671k|            args..., concat_trees_right_visitor<Node>{}, lpos, tpos);
 1969|   671k|    }
_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_:
 1953|   642k|    {
 1954|   642k|        return concat_inners<Node>(lpos, tpos, rpos);
 1955|   642k|    }
_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_:
 1867|  6.27M|{
 1868|  6.27M|    auto lshift = lpos.shift();
 1869|  6.27M|    auto rshift = rpos.shift();
 1870|  6.27M|    if (lshift > rshift) {
  ------------------
  |  Branch (1870:9): [True: 2.88M, False: 3.38M]
  ------------------
 1871|  2.88M|        auto cpos = lpos.last_sub(concat_left_visitor<Node>{}, tpos, rpos);
 1872|  2.88M|        return concat_rebalance<Node>(lpos, cpos, null_sub_pos{});
 1873|  3.38M|    } else if (lshift < rshift) {
  ------------------
  |  Branch (1873:16): [True: 86.0k, False: 3.30M]
  ------------------
 1874|  86.0k|        auto cpos = rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
 1875|  86.0k|        return concat_rebalance<Node>(null_sub_pos{}, cpos, rpos);
 1876|  3.30M|    } else {
 1877|  3.30M|        assert(lshift == rshift);
 1878|      0|        assert(Node::bits_leaf == 0u || lshift > 0);
 1879|      0|        auto cpos = lpos.last_sub(concat_both_visitor<Node>{}, tpos, rpos);
 1880|  3.30M|        return concat_rebalance<Node>(lpos, cpos, rpos);
 1881|  3.30M|    }
 1882|  6.27M|}
_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_:
 1892|  2.88M|    {
 1893|  2.88M|        return concat_inners<Node>(lpos, tpos, rpos);
 1894|  2.88M|    }
_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_:
 1892|  6.14k|    {
 1893|  6.14k|        return concat_inners<Node>(lpos, tpos, rpos);
 1894|  6.14k|    }
_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_:
 1867|   792k|{
 1868|   792k|    auto lshift = lpos.shift();
 1869|   792k|    auto rshift = rpos.shift();
 1870|   792k|    if (lshift > rshift) {
  ------------------
  |  Branch (1870:9): [True: 3.49k, False: 788k]
  ------------------
 1871|  3.49k|        auto cpos = lpos.last_sub(concat_left_visitor<Node>{}, tpos, rpos);
 1872|  3.49k|        return concat_rebalance<Node>(lpos, cpos, null_sub_pos{});
 1873|   788k|    } else if (lshift < rshift) {
  ------------------
  |  Branch (1873:16): [True: 12.2k, False: 776k]
  ------------------
 1874|  12.2k|        auto cpos = rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
 1875|  12.2k|        return concat_rebalance<Node>(null_sub_pos{}, cpos, rpos);
 1876|   776k|    } else {
 1877|   776k|        assert(lshift == rshift);
 1878|      0|        assert(Node::bits_leaf == 0u || lshift > 0);
 1879|      0|        auto cpos = lpos.last_sub(concat_both_visitor<Node>{}, tpos, rpos);
 1880|   776k|        return concat_rebalance<Node>(lpos, cpos, rpos);
 1881|   776k|    }
 1882|   792k|}
_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_:
 1818|  4.81k|{
 1819|  4.81k|    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
 1820|  4.81k|    plan.fill(lpos, cpos, rpos);
 1821|  4.81k|    plan.shuffle(cpos.shift());
 1822|  4.81k|    IMMER_TRY {
  ------------------
  |  |   41|  4.81k|#define IMMER_TRY try
  ------------------
 1823|  4.81k|        return plan.merge(lpos, cpos, rpos);
 1824|  4.81k|    }
 1825|  4.81k|    IMMER_CATCH (...) {
 1826|      0|        cpos.each_sub(dec_visitor{});
 1827|      0|        IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1828|      0|    }
 1829|  4.81k|}
_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_:
 1747|  4.81k|    {
 1748|  4.81k|        assert(n == 0u);
 1749|      0|        assert(total == 0u);
 1750|      0|        using visitor_t = concat_rebalance_plan_fill_visitor;
 1751|  4.81k|        lpos.each_left_sub(visitor_t{}, *this);
 1752|  4.81k|        cpos.each_sub(visitor_t{}, *this);
 1753|  4.81k|        rpos.each_right_sub(visitor_t{}, *this);
 1754|  4.81k|    }
_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_:
 1797|  4.81k|    {
 1798|  4.81k|        using node_t    = node_type<CPos>;
 1799|  4.81k|        using merger_t  = concat_merger<node_t>;
 1800|  4.81k|        using visitor_t = concat_merger_visitor;
 1801|  4.81k|        auto merger     = merger_t{cpos.shift(), counts, n};
 1802|  4.81k|        IMMER_TRY {
  ------------------
  |  |   41|  4.81k|#define IMMER_TRY try
  ------------------
 1803|  4.81k|            lpos.each_left_sub(visitor_t{}, merger);
 1804|  4.81k|            cpos.each_sub(visitor_t{}, merger);
 1805|  4.81k|            rpos.each_right_sub(visitor_t{}, merger);
 1806|  4.81k|            cpos.each_sub(dec_visitor{});
 1807|  4.81k|            return merger.finish();
 1808|  4.81k|        }
 1809|  4.81k|        IMMER_CATCH (...) {
 1810|      0|            merger.abort();
 1811|      0|            IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1812|      0|        }
 1813|  4.81k|    }
_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_:
 1912|   779k|    {
 1913|   779k|        return concat_inners<Node>(lpos, tpos, rpos);
 1914|   779k|    }
_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_:
 1912|   175k|    {
 1913|   175k|        return concat_inners<Node>(lpos, tpos, rpos);
 1914|   175k|    }
_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_:
 1867|   187k|{
 1868|   187k|    auto lshift = lpos.shift();
 1869|   187k|    auto rshift = rpos.shift();
 1870|   187k|    if (lshift > rshift) {
  ------------------
  |  Branch (1870:9): [True: 1.32k, False: 185k]
  ------------------
 1871|  1.32k|        auto cpos = lpos.last_sub(concat_left_visitor<Node>{}, tpos, rpos);
 1872|  1.32k|        return concat_rebalance<Node>(lpos, cpos, null_sub_pos{});
 1873|   185k|    } else if (lshift < rshift) {
  ------------------
  |  Branch (1873:16): [True: 596, False: 185k]
  ------------------
 1874|    596|        auto cpos = rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
 1875|    596|        return concat_rebalance<Node>(null_sub_pos{}, cpos, rpos);
 1876|   185k|    } else {
 1877|   185k|        assert(lshift == rshift);
 1878|      0|        assert(Node::bits_leaf == 0u || lshift > 0);
 1879|      0|        auto cpos = lpos.last_sub(concat_both_visitor<Node>{}, tpos, rpos);
 1880|   185k|        return concat_rebalance<Node>(lpos, cpos, rpos);
 1881|   185k|    }
 1882|   187k|}
_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_:
 1892|  1.91k|    {
 1893|  1.91k|        return concat_inners<Node>(lpos, tpos, rpos);
 1894|  1.91k|    }
_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_:
 1912|   276k|    {
 1913|   276k|        return concat_inners<Node>(lpos, tpos, rpos);
 1914|   276k|    }
_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_:
 1867|   276k|{
 1868|   276k|    auto lshift = lpos.shift();
 1869|   276k|    auto rshift = rpos.shift();
 1870|   276k|    if (lshift > rshift) {
  ------------------
  |  Branch (1870:9): [True: 0, False: 276k]
  ------------------
 1871|      0|        auto cpos = lpos.last_sub(concat_left_visitor<Node>{}, tpos, rpos);
 1872|      0|        return concat_rebalance<Node>(lpos, cpos, null_sub_pos{});
 1873|   276k|    } else if (lshift < rshift) {
  ------------------
  |  Branch (1873:16): [True: 242, False: 276k]
  ------------------
 1874|    242|        auto cpos = rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
 1875|    242|        return concat_rebalance<Node>(null_sub_pos{}, cpos, rpos);
 1876|   276k|    } else {
 1877|   276k|        assert(lshift == rshift);
 1878|      0|        assert(Node::bits_leaf == 0u || lshift > 0);
 1879|      0|        auto cpos = lpos.last_sub(concat_both_visitor<Node>{}, tpos, rpos);
 1880|   276k|        return concat_rebalance<Node>(lpos, cpos, rpos);
 1881|   276k|    }
 1882|   276k|}
_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_:
 1939|   137k|    {
 1940|   137k|        return rpos.first_sub_leaf(concat_right_visitor<Node>{}, lpos, tpos);
 1941|   137k|    }
_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_:
 1919|   215k|    {
 1920|   215k|        return concat_leafs<Node>(lpos, tpos, rpos);
 1921|   215k|    }
_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_:
 1833|   215k|{
 1834|   215k|    static_assert(Node::bits >= 2, "");
 1835|   215k|    assert(lpos.shift() == tpos.shift());
 1836|      0|    assert(lpos.shift() == rpos.shift());
 1837|      0|    assert(lpos.shift() == 0);
 1838|   215k|    if (tpos.count() > 0)
  ------------------
  |  Branch (1838:9): [True: 215k, False: 0]
  ------------------
 1839|   215k|        return {
 1840|   215k|            Node::bits_leaf,
 1841|   215k|            lpos.node()->inc(),
 1842|   215k|            lpos.count(),
 1843|   215k|            tpos.node()->inc(),
 1844|   215k|            tpos.count(),
 1845|   215k|            rpos.node()->inc(),
 1846|   215k|            rpos.count(),
 1847|   215k|        };
 1848|      0|    else
 1849|      0|        return {
 1850|      0|            Node::bits_leaf,
 1851|      0|            lpos.node()->inc(),
 1852|      0|            lpos.count(),
 1853|      0|            rpos.node()->inc(),
 1854|      0|            rpos.count(),
 1855|      0|        };
 1856|   215k|}
_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_:
 1932|   139k|    {
 1933|   139k|        return rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
 1934|   139k|    }
_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_:
 1818|   276k|{
 1819|   276k|    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
 1820|   276k|    plan.fill(lpos, cpos, rpos);
 1821|   276k|    plan.shuffle(cpos.shift());
 1822|   276k|    IMMER_TRY {
  ------------------
  |  |   41|   276k|#define IMMER_TRY try
  ------------------
 1823|   276k|        return plan.merge(lpos, cpos, rpos);
 1824|   276k|    }
 1825|   276k|    IMMER_CATCH (...) {
 1826|      0|        cpos.each_sub(dec_visitor{});
 1827|      0|        IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1828|      0|    }
 1829|   276k|}
_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_:
 1747|   276k|    {
 1748|   276k|        assert(n == 0u);
 1749|      0|        assert(total == 0u);
 1750|      0|        using visitor_t = concat_rebalance_plan_fill_visitor;
 1751|   276k|        lpos.each_left_sub(visitor_t{}, *this);
 1752|   276k|        cpos.each_sub(visitor_t{}, *this);
 1753|   276k|        rpos.each_right_sub(visitor_t{}, *this);
 1754|   276k|    }
_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_:
 1797|   276k|    {
 1798|   276k|        using node_t    = node_type<CPos>;
 1799|   276k|        using merger_t  = concat_merger<node_t>;
 1800|   276k|        using visitor_t = concat_merger_visitor;
 1801|   276k|        auto merger     = merger_t{cpos.shift(), counts, n};
 1802|   276k|        IMMER_TRY {
  ------------------
  |  |   41|   276k|#define IMMER_TRY try
  ------------------
 1803|   276k|            lpos.each_left_sub(visitor_t{}, merger);
 1804|   276k|            cpos.each_sub(visitor_t{}, merger);
 1805|   276k|            rpos.each_right_sub(visitor_t{}, merger);
 1806|   276k|            cpos.each_sub(dec_visitor{});
 1807|   276k|            return merger.finish();
 1808|   276k|        }
 1809|   276k|        IMMER_CATCH (...) {
 1810|      0|            merger.abort();
 1811|      0|            IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1812|      0|        }
 1813|   276k|    }
_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_:
 1939|  77.3k|    {
 1940|  77.3k|        return rpos.first_sub_leaf(concat_right_visitor<Node>{}, lpos, tpos);
 1941|  77.3k|    }
_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_:
 1919|   472k|    {
 1920|   472k|        return concat_leafs<Node>(lpos, tpos, rpos);
 1921|   472k|    }
_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_:
 1833|   472k|{
 1834|   472k|    static_assert(Node::bits >= 2, "");
 1835|   472k|    assert(lpos.shift() == tpos.shift());
 1836|      0|    assert(lpos.shift() == rpos.shift());
 1837|      0|    assert(lpos.shift() == 0);
 1838|   472k|    if (tpos.count() > 0)
  ------------------
  |  Branch (1838:9): [True: 472k, False: 0]
  ------------------
 1839|   472k|        return {
 1840|   472k|            Node::bits_leaf,
 1841|   472k|            lpos.node()->inc(),
 1842|   472k|            lpos.count(),
 1843|   472k|            tpos.node()->inc(),
 1844|   472k|            tpos.count(),
 1845|   472k|            rpos.node()->inc(),
 1846|   472k|            rpos.count(),
 1847|   472k|        };
 1848|      0|    else
 1849|      0|        return {
 1850|      0|            Node::bits_leaf,
 1851|      0|            lpos.node()->inc(),
 1852|      0|            lpos.count(),
 1853|      0|            rpos.node()->inc(),
 1854|      0|            rpos.count(),
 1855|      0|        };
 1856|   472k|}
_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_:
 1932|   135k|    {
 1933|   135k|        return rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
 1934|   135k|    }
_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_:
 1818|   185k|{
 1819|   185k|    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
 1820|   185k|    plan.fill(lpos, cpos, rpos);
 1821|   185k|    plan.shuffle(cpos.shift());
 1822|   185k|    IMMER_TRY {
  ------------------
  |  |   41|   185k|#define IMMER_TRY try
  ------------------
 1823|   185k|        return plan.merge(lpos, cpos, rpos);
 1824|   185k|    }
 1825|   185k|    IMMER_CATCH (...) {
 1826|      0|        cpos.each_sub(dec_visitor{});
 1827|      0|        IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1828|      0|    }
 1829|   185k|}
_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_:
 1747|   185k|    {
 1748|   185k|        assert(n == 0u);
 1749|      0|        assert(total == 0u);
 1750|      0|        using visitor_t = concat_rebalance_plan_fill_visitor;
 1751|   185k|        lpos.each_left_sub(visitor_t{}, *this);
 1752|   185k|        cpos.each_sub(visitor_t{}, *this);
 1753|   185k|        rpos.each_right_sub(visitor_t{}, *this);
 1754|   185k|    }
_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_:
 1797|   185k|    {
 1798|   185k|        using node_t    = node_type<CPos>;
 1799|   185k|        using merger_t  = concat_merger<node_t>;
 1800|   185k|        using visitor_t = concat_merger_visitor;
 1801|   185k|        auto merger     = merger_t{cpos.shift(), counts, n};
 1802|   185k|        IMMER_TRY {
  ------------------
  |  |   41|   185k|#define IMMER_TRY try
  ------------------
 1803|   185k|            lpos.each_left_sub(visitor_t{}, merger);
 1804|   185k|            cpos.each_sub(visitor_t{}, merger);
 1805|   185k|            rpos.each_right_sub(visitor_t{}, merger);
 1806|   185k|            cpos.each_sub(dec_visitor{});
 1807|   185k|            return merger.finish();
 1808|   185k|        }
 1809|   185k|        IMMER_CATCH (...) {
 1810|      0|            merger.abort();
 1811|      0|            IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1812|      0|        }
 1813|   185k|    }
_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_:
 1939|   472k|    {
 1940|   472k|        return rpos.first_sub_leaf(concat_right_visitor<Node>{}, lpos, tpos);
 1941|   472k|    }
_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_:
 1932|   942k|    {
 1933|   942k|        return rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
 1934|   942k|    }
_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_:
 1818|   776k|{
 1819|   776k|    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
 1820|   776k|    plan.fill(lpos, cpos, rpos);
 1821|   776k|    plan.shuffle(cpos.shift());
 1822|   776k|    IMMER_TRY {
  ------------------
  |  |   41|   776k|#define IMMER_TRY try
  ------------------
 1823|   776k|        return plan.merge(lpos, cpos, rpos);
 1824|   776k|    }
 1825|   776k|    IMMER_CATCH (...) {
 1826|      0|        cpos.each_sub(dec_visitor{});
 1827|      0|        IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1828|      0|    }
 1829|   776k|}
_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_:
 1747|   776k|    {
 1748|   776k|        assert(n == 0u);
 1749|      0|        assert(total == 0u);
 1750|      0|        using visitor_t = concat_rebalance_plan_fill_visitor;
 1751|   776k|        lpos.each_left_sub(visitor_t{}, *this);
 1752|   776k|        cpos.each_sub(visitor_t{}, *this);
 1753|   776k|        rpos.each_right_sub(visitor_t{}, *this);
 1754|   776k|    }
_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_:
 1797|   776k|    {
 1798|   776k|        using node_t    = node_type<CPos>;
 1799|   776k|        using merger_t  = concat_merger<node_t>;
 1800|   776k|        using visitor_t = concat_merger_visitor;
 1801|   776k|        auto merger     = merger_t{cpos.shift(), counts, n};
 1802|   776k|        IMMER_TRY {
  ------------------
  |  |   41|   776k|#define IMMER_TRY try
  ------------------
 1803|   776k|            lpos.each_left_sub(visitor_t{}, merger);
 1804|   776k|            cpos.each_sub(visitor_t{}, merger);
 1805|   776k|            rpos.each_right_sub(visitor_t{}, merger);
 1806|   776k|            cpos.each_sub(dec_visitor{});
 1807|   776k|            return merger.finish();
 1808|   776k|        }
 1809|   776k|        IMMER_CATCH (...) {
 1810|      0|            merger.abort();
 1811|      0|            IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1812|      0|        }
 1813|   776k|    }
_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_:
 1818|  3.03M|{
 1819|  3.03M|    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
 1820|  3.03M|    plan.fill(lpos, cpos, rpos);
 1821|  3.03M|    plan.shuffle(cpos.shift());
 1822|  3.03M|    IMMER_TRY {
  ------------------
  |  |   41|  3.03M|#define IMMER_TRY try
  ------------------
 1823|  3.03M|        return plan.merge(lpos, cpos, rpos);
 1824|  3.03M|    }
 1825|  3.03M|    IMMER_CATCH (...) {
 1826|      0|        cpos.each_sub(dec_visitor{});
 1827|      0|        IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1828|      0|    }
 1829|  3.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_EERNS1_12null_sub_posEEEvOT_OT0_OT1_:
 1747|  3.03M|    {
 1748|  3.03M|        assert(n == 0u);
 1749|      0|        assert(total == 0u);
 1750|      0|        using visitor_t = concat_rebalance_plan_fill_visitor;
 1751|  3.03M|        lpos.each_left_sub(visitor_t{}, *this);
 1752|  3.03M|        cpos.each_sub(visitor_t{}, *this);
 1753|  3.03M|        rpos.each_right_sub(visitor_t{}, *this);
 1754|  3.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_EERNS1_12null_sub_posEEENSI_INSt3__15decayIT0_E4type6node_tEEEOT_OSP_OT1_:
 1797|  3.03M|    {
 1798|  3.03M|        using node_t    = node_type<CPos>;
 1799|  3.03M|        using merger_t  = concat_merger<node_t>;
 1800|  3.03M|        using visitor_t = concat_merger_visitor;
 1801|  3.03M|        auto merger     = merger_t{cpos.shift(), counts, n};
 1802|  3.03M|        IMMER_TRY {
  ------------------
  |  |   41|  3.03M|#define IMMER_TRY try
  ------------------
 1803|  3.03M|            lpos.each_left_sub(visitor_t{}, merger);
 1804|  3.03M|            cpos.each_sub(visitor_t{}, merger);
 1805|  3.03M|            rpos.each_right_sub(visitor_t{}, merger);
 1806|  3.03M|            cpos.each_sub(dec_visitor{});
 1807|  3.03M|            return merger.finish();
 1808|  3.03M|        }
 1809|  3.03M|        IMMER_CATCH (...) {
 1810|      0|            merger.abort();
 1811|      0|            IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1812|      0|        }
 1813|  3.03M|    }
_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_:
 1912|  2.74M|    {
 1913|  2.74M|        return concat_inners<Node>(lpos, tpos, rpos);
 1914|  2.74M|    }
_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_:
 1912|  1.72k|    {
 1913|  1.72k|        return concat_inners<Node>(lpos, tpos, rpos);
 1914|  1.72k|    }
_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_:
 1867|   180k|{
 1868|   180k|    auto lshift = lpos.shift();
 1869|   180k|    auto rshift = rpos.shift();
 1870|   180k|    if (lshift > rshift) {
  ------------------
  |  Branch (1870:9): [True: 150k, False: 29.3k]
  ------------------
 1871|   150k|        auto cpos = lpos.last_sub(concat_left_visitor<Node>{}, tpos, rpos);
 1872|   150k|        return concat_rebalance<Node>(lpos, cpos, null_sub_pos{});
 1873|   150k|    } else if (lshift < rshift) {
  ------------------
  |  Branch (1873:16): [True: 614, False: 28.7k]
  ------------------
 1874|    614|        auto cpos = rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
 1875|    614|        return concat_rebalance<Node>(null_sub_pos{}, cpos, rpos);
 1876|  28.7k|    } else {
 1877|  28.7k|        assert(lshift == rshift);
 1878|      0|        assert(Node::bits_leaf == 0u || lshift > 0);
 1879|      0|        auto cpos = lpos.last_sub(concat_both_visitor<Node>{}, tpos, rpos);
 1880|  28.7k|        return concat_rebalance<Node>(lpos, cpos, rpos);
 1881|  28.7k|    }
 1882|   180k|}
_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_:
 1892|   150k|    {
 1893|   150k|        return concat_inners<Node>(lpos, tpos, rpos);
 1894|   150k|    }
_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_:
 1912|  2.33k|    {
 1913|  2.33k|        return concat_inners<Node>(lpos, tpos, rpos);
 1914|  2.33k|    }
_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_:
 1867|  2.33k|{
 1868|  2.33k|    auto lshift = lpos.shift();
 1869|  2.33k|    auto rshift = rpos.shift();
 1870|  2.33k|    if (lshift > rshift) {
  ------------------
  |  Branch (1870:9): [True: 0, False: 2.33k]
  ------------------
 1871|      0|        auto cpos = lpos.last_sub(concat_left_visitor<Node>{}, tpos, rpos);
 1872|      0|        return concat_rebalance<Node>(lpos, cpos, null_sub_pos{});
 1873|  2.33k|    } else if (lshift < rshift) {
  ------------------
  |  Branch (1873:16): [True: 211, False: 2.12k]
  ------------------
 1874|    211|        auto cpos = rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
 1875|    211|        return concat_rebalance<Node>(null_sub_pos{}, cpos, rpos);
 1876|  2.12k|    } else {
 1877|  2.12k|        assert(lshift == rshift);
 1878|      0|        assert(Node::bits_leaf == 0u || lshift > 0);
 1879|      0|        auto cpos = lpos.last_sub(concat_both_visitor<Node>{}, tpos, rpos);
 1880|  2.12k|        return concat_rebalance<Node>(lpos, cpos, rpos);
 1881|  2.12k|    }
 1882|  2.33k|}
_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_:
 1932|    469|    {
 1933|    469|        return rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
 1934|    469|    }
_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_:
 1818|  2.12k|{
 1819|  2.12k|    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
 1820|  2.12k|    plan.fill(lpos, cpos, rpos);
 1821|  2.12k|    plan.shuffle(cpos.shift());
 1822|  2.12k|    IMMER_TRY {
  ------------------
  |  |   41|  2.12k|#define IMMER_TRY try
  ------------------
 1823|  2.12k|        return plan.merge(lpos, cpos, rpos);
 1824|  2.12k|    }
 1825|  2.12k|    IMMER_CATCH (...) {
 1826|      0|        cpos.each_sub(dec_visitor{});
 1827|      0|        IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1828|      0|    }
 1829|  2.12k|}
_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_:
 1747|  2.12k|    {
 1748|  2.12k|        assert(n == 0u);
 1749|      0|        assert(total == 0u);
 1750|      0|        using visitor_t = concat_rebalance_plan_fill_visitor;
 1751|  2.12k|        lpos.each_left_sub(visitor_t{}, *this);
 1752|  2.12k|        cpos.each_sub(visitor_t{}, *this);
 1753|  2.12k|        rpos.each_right_sub(visitor_t{}, *this);
 1754|  2.12k|    }
_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_:
 1797|  2.12k|    {
 1798|  2.12k|        using node_t    = node_type<CPos>;
 1799|  2.12k|        using merger_t  = concat_merger<node_t>;
 1800|  2.12k|        using visitor_t = concat_merger_visitor;
 1801|  2.12k|        auto merger     = merger_t{cpos.shift(), counts, n};
 1802|  2.12k|        IMMER_TRY {
  ------------------
  |  |   41|  2.12k|#define IMMER_TRY try
  ------------------
 1803|  2.12k|            lpos.each_left_sub(visitor_t{}, merger);
 1804|  2.12k|            cpos.each_sub(visitor_t{}, merger);
 1805|  2.12k|            rpos.each_right_sub(visitor_t{}, merger);
 1806|  2.12k|            cpos.each_sub(dec_visitor{});
 1807|  2.12k|            return merger.finish();
 1808|  2.12k|        }
 1809|  2.12k|        IMMER_CATCH (...) {
 1810|      0|            merger.abort();
 1811|      0|            IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1812|      0|        }
 1813|  2.12k|    }
_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_:
 1932|  1.04k|    {
 1933|  1.04k|        return rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
 1934|  1.04k|    }
_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_:
 1818|  28.7k|{
 1819|  28.7k|    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
 1820|  28.7k|    plan.fill(lpos, cpos, rpos);
 1821|  28.7k|    plan.shuffle(cpos.shift());
 1822|  28.7k|    IMMER_TRY {
  ------------------
  |  |   41|  28.7k|#define IMMER_TRY try
  ------------------
 1823|  28.7k|        return plan.merge(lpos, cpos, rpos);
 1824|  28.7k|    }
 1825|  28.7k|    IMMER_CATCH (...) {
 1826|      0|        cpos.each_sub(dec_visitor{});
 1827|      0|        IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1828|      0|    }
 1829|  28.7k|}
_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_:
 1747|  28.7k|    {
 1748|  28.7k|        assert(n == 0u);
 1749|      0|        assert(total == 0u);
 1750|      0|        using visitor_t = concat_rebalance_plan_fill_visitor;
 1751|  28.7k|        lpos.each_left_sub(visitor_t{}, *this);
 1752|  28.7k|        cpos.each_sub(visitor_t{}, *this);
 1753|  28.7k|        rpos.each_right_sub(visitor_t{}, *this);
 1754|  28.7k|    }
_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_:
 1797|  28.7k|    {
 1798|  28.7k|        using node_t    = node_type<CPos>;
 1799|  28.7k|        using merger_t  = concat_merger<node_t>;
 1800|  28.7k|        using visitor_t = concat_merger_visitor;
 1801|  28.7k|        auto merger     = merger_t{cpos.shift(), counts, n};
 1802|  28.7k|        IMMER_TRY {
  ------------------
  |  |   41|  28.7k|#define IMMER_TRY try
  ------------------
 1803|  28.7k|            lpos.each_left_sub(visitor_t{}, merger);
 1804|  28.7k|            cpos.each_sub(visitor_t{}, merger);
 1805|  28.7k|            rpos.each_right_sub(visitor_t{}, merger);
 1806|  28.7k|            cpos.each_sub(dec_visitor{});
 1807|  28.7k|            return merger.finish();
 1808|  28.7k|        }
 1809|  28.7k|        IMMER_CATCH (...) {
 1810|      0|            merger.abort();
 1811|      0|            IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1812|      0|        }
 1813|  28.7k|    }
_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_:
 1932|  2.66M|    {
 1933|  2.66M|        return rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
 1934|  2.66M|    }
_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_:
 1818|  3.30M|{
 1819|  3.30M|    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
 1820|  3.30M|    plan.fill(lpos, cpos, rpos);
 1821|  3.30M|    plan.shuffle(cpos.shift());
 1822|  3.30M|    IMMER_TRY {
  ------------------
  |  |   41|  3.30M|#define IMMER_TRY try
  ------------------
 1823|  3.30M|        return plan.merge(lpos, cpos, rpos);
 1824|  3.30M|    }
 1825|  3.30M|    IMMER_CATCH (...) {
 1826|      0|        cpos.each_sub(dec_visitor{});
 1827|      0|        IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1828|      0|    }
 1829|  3.30M|}
_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_:
 1747|  3.30M|    {
 1748|  3.30M|        assert(n == 0u);
 1749|      0|        assert(total == 0u);
 1750|      0|        using visitor_t = concat_rebalance_plan_fill_visitor;
 1751|  3.30M|        lpos.each_left_sub(visitor_t{}, *this);
 1752|  3.30M|        cpos.each_sub(visitor_t{}, *this);
 1753|  3.30M|        rpos.each_right_sub(visitor_t{}, *this);
 1754|  3.30M|    }
_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_:
 1797|  3.30M|    {
 1798|  3.30M|        using node_t    = node_type<CPos>;
 1799|  3.30M|        using merger_t  = concat_merger<node_t>;
 1800|  3.30M|        using visitor_t = concat_merger_visitor;
 1801|  3.30M|        auto merger     = merger_t{cpos.shift(), counts, n};
 1802|  3.30M|        IMMER_TRY {
  ------------------
  |  |   41|  3.30M|#define IMMER_TRY try
  ------------------
 1803|  3.30M|            lpos.each_left_sub(visitor_t{}, merger);
 1804|  3.30M|            cpos.each_sub(visitor_t{}, merger);
 1805|  3.30M|            rpos.each_right_sub(visitor_t{}, merger);
 1806|  3.30M|            cpos.each_sub(dec_visitor{});
 1807|  3.30M|            return merger.finish();
 1808|  3.30M|        }
 1809|  3.30M|        IMMER_CATCH (...) {
 1810|      0|            merger.abort();
 1811|      0|            IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1812|      0|        }
 1813|  3.30M|    }
_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_:
 1953|  28.2k|    {
 1954|  28.2k|        return concat_inners<Node>(lpos, tpos, rpos);
 1955|  28.2k|    }
_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_:
 1966|  16.5k|    {
 1967|  16.5k|        return visit_maybe_relaxed_sub(
 1968|  16.5k|            args..., concat_trees_right_visitor<Node>{}, lpos, tpos);
 1969|  16.5k|    }
_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_:
 1953|  6.32k|    {
 1954|  6.32k|        return concat_inners<Node>(lpos, tpos, rpos);
 1955|  6.32k|    }
_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_:
 1953|  10.2k|    {
 1954|  10.2k|        return concat_inners<Node>(lpos, tpos, rpos);
 1955|  10.2k|    }
_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:
  679|  74.3k|    {
  680|  74.3k|        auto node     = pos.node();
  681|  74.3k|        auto level    = pos.shift();
  682|  74.3k|        auto idx      = pos.count() - 1;
  683|  74.3k|        auto children = pos.size(idx);
  684|  74.3k|        auto new_idx =
  685|  74.3k|            children == size_t{1} << level || level == BL ? idx + 1 : idx;
  ------------------
  |  Branch (685:13): [True: 3.37k, False: 71.0k]
  |  Branch (685:47): [True: 968, False: 70.0k]
  ------------------
  686|  74.3k|        auto new_child = static_cast<node_t*>(nullptr);
  687|  74.3k|        auto mutate    = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (687:26): [Folded - Ignored]
  |  Branch (687:38): [True: 70.5k, False: 3.87k]
  ------------------
  688|       |
  689|  74.3k|        if (new_idx >= branches<B>)
  ------------------
  |  Branch (689:13): [True: 1.44k, False: 72.9k]
  ------------------
  690|  1.44k|            return nullptr;
  691|  72.9k|        else if (idx == new_idx) {
  ------------------
  |  Branch (691:18): [True: 70.0k, False: 2.90k]
  ------------------
  692|  70.0k|            new_child =
  693|  70.0k|                mutate ? pos.last_oh_csh(this_t{}, idx, children, e, tail, ts)
  ------------------
  |  Branch (693:17): [True: 67.5k, False: 2.50k]
  ------------------
  694|  70.0k|                       : pos.last_oh_csh(
  695|  2.50k|                             this_no_mut_t{}, idx, children, e, tail, ts);
  696|  70.0k|            if (!new_child) {
  ------------------
  |  Branch (696:17): [True: 1.23k, False: 68.8k]
  ------------------
  697|  1.23k|                if (++new_idx < branches<B>)
  ------------------
  |  Branch (697:21): [True: 601, False: 633]
  ------------------
  698|    601|                    new_child = node_t::make_path_e(e, level - B, tail);
  699|    633|                else
  700|    633|                    return nullptr;
  701|  1.23k|            }
  702|  70.0k|        } else
  703|  2.90k|            new_child = node_t::make_path_e(e, level - B, tail);
  704|       |
  705|  72.3k|        if (mutate) {
  ------------------
  |  Branch (705:13): [True: 69.7k, False: 2.54k]
  ------------------
  706|  69.7k|            auto count             = new_idx + 1;
  707|  69.7k|            auto relaxed           = node->ensure_mutable_relaxed_n(e, new_idx);
  708|  69.7k|            node->inner()[new_idx] = new_child;
  709|  69.7k|            relaxed->d.sizes[new_idx] = pos.size() + ts;
  710|  69.7k|            relaxed->d.count          = count;
  711|  69.7k|            assert(relaxed->d.sizes[new_idx]);
  712|      0|            return node;
  713|  69.7k|        } else {
  714|  2.54k|            IMMER_TRY {
  ------------------
  |  |   41|  2.54k|#define IMMER_TRY try
  ------------------
  715|  2.54k|                auto count    = new_idx + 1;
  716|  2.54k|                auto new_node = node_t::copy_inner_r_e(e, pos.node(), new_idx);
  717|  2.54k|                auto relaxed  = new_node->relaxed();
  718|  2.54k|                new_node->inner()[new_idx] = new_child;
  719|  2.54k|                relaxed->d.sizes[new_idx]  = pos.size() + ts;
  720|  2.54k|                relaxed->d.count           = count;
  721|  2.54k|                assert(relaxed->d.sizes[new_idx]);
  722|  2.54k|                if (Mutating)
  ------------------
  |  Branch (722:21): [Folded - Ignored]
  ------------------
  723|  2.54k|                    pos.visit(dec_visitor{});
  724|  2.54k|                return new_node;
  725|  2.54k|            }
  726|  2.54k|            IMMER_CATCH (...) {
  727|      0|                auto shift = pos.shift();
  728|      0|                auto size  = new_idx == idx ? children + ts : ts;
  ------------------
  |  Branch (728:30): [True: 0, False: 0]
  ------------------
  729|      0|                if (shift > BL) {
  ------------------
  |  Branch (729:21): [True: 0, False: 0]
  ------------------
  730|      0|                    tail->inc();
  731|      0|                    dec_inner(new_child, shift - B, size);
  732|      0|                }
  733|      0|                IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
  734|      0|            }
  735|  2.54k|        }
  736|  72.3k|    }
_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_:
  740|  37.8k|    {
  741|  37.8k|        assert((pos.size() & mask<BL>) == 0);
  742|      0|        auto node    = pos.node();
  743|  37.8k|        auto idx     = pos.index(pos.size() - 1);
  744|  37.8k|        auto new_idx = pos.index(pos.size() + branches<BL> - 1);
  745|  37.8k|        auto mutate  = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (745:24): [Folded - Ignored]
  |  Branch (745:36): [True: 37.0k, False: 809]
  ------------------
  746|  37.8k|        if (mutate) {
  ------------------
  |  Branch (746:13): [True: 37.0k, False: 809]
  ------------------
  747|  37.0k|            node->inner()[new_idx] =
  748|  37.0k|                idx == new_idx ? pos.last_oh(this_t{}, idx, e, tail)
  ------------------
  |  Branch (748:17): [True: 35.7k, False: 1.25k]
  ------------------
  749|       |                               /* otherwise */
  750|  37.0k|                               : node_t::make_path_e(e, pos.shift() - B, tail);
  751|  37.0k|            return node;
  752|  37.0k|        } else {
  753|    809|            auto new_parent = node_t::make_inner_e(e);
  754|    809|            IMMER_TRY {
  ------------------
  |  |   41|    809|#define IMMER_TRY try
  ------------------
  755|    809|                new_parent->inner()[new_idx] =
  756|    809|                    idx == new_idx
  ------------------
  |  Branch (756:21): [True: 468, False: 341]
  ------------------
  757|    809|                        ? pos.last_oh(this_no_mut_t{}, idx, e, tail)
  758|       |                        /* otherwise */
  759|    809|                        : node_t::make_path_e(e, pos.shift() - B, tail);
  760|    809|                node_t::do_copy_inner(new_parent, node, new_idx);
  761|    809|                if (Mutating)
  ------------------
  |  Branch (761:21): [Folded - Ignored]
  ------------------
  762|    809|                    pos.visit(dec_visitor{});
  763|    809|                return new_parent;
  764|    809|            }
  765|    809|            IMMER_CATCH (...) {
  766|      0|                node_t::delete_inner_e(new_parent);
  767|      0|                IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
  768|      0|            }
  769|    809|        }
  770|  37.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_:
  740|  1.17M|    {
  741|  1.17M|        assert((pos.size() & mask<BL>) == 0);
  742|      0|        auto node    = pos.node();
  743|  1.17M|        auto idx     = pos.index(pos.size() - 1);
  744|  1.17M|        auto new_idx = pos.index(pos.size() + branches<BL> - 1);
  745|  1.17M|        auto mutate  = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (745:24): [Folded - Ignored]
  |  Branch (745:36): [True: 1.17M, False: 1.36k]
  ------------------
  746|  1.17M|        if (mutate) {
  ------------------
  |  Branch (746:13): [True: 1.17M, False: 1.36k]
  ------------------
  747|  1.17M|            node->inner()[new_idx] =
  748|  1.17M|                idx == new_idx ? pos.last_oh(this_t{}, idx, e, tail)
  ------------------
  |  Branch (748:17): [True: 908k, False: 268k]
  ------------------
  749|       |                               /* otherwise */
  750|  1.17M|                               : node_t::make_path_e(e, pos.shift() - B, tail);
  751|  1.17M|            return node;
  752|  1.17M|        } else {
  753|  1.36k|            auto new_parent = node_t::make_inner_e(e);
  754|  1.36k|            IMMER_TRY {
  ------------------
  |  |   41|  1.36k|#define IMMER_TRY try
  ------------------
  755|  1.36k|                new_parent->inner()[new_idx] =
  756|  1.36k|                    idx == new_idx
  ------------------
  |  Branch (756:21): [True: 944, False: 420]
  ------------------
  757|  1.36k|                        ? pos.last_oh(this_no_mut_t{}, idx, e, tail)
  758|       |                        /* otherwise */
  759|  1.36k|                        : node_t::make_path_e(e, pos.shift() - B, tail);
  760|  1.36k|                node_t::do_copy_inner(new_parent, node, new_idx);
  761|  1.36k|                if (Mutating)
  ------------------
  |  Branch (761:21): [Folded - Ignored]
  ------------------
  762|  1.36k|                    pos.visit(dec_visitor{});
  763|  1.36k|                return new_parent;
  764|  1.36k|            }
  765|  1.36k|            IMMER_CATCH (...) {
  766|      0|                node_t::delete_inner_e(new_parent);
  767|      0|                IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
  768|      0|            }
  769|  1.36k|        }
  770|  1.17M|    }
_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_:
  740|  5.02k|    {
  741|  5.02k|        assert((pos.size() & mask<BL>) == 0);
  742|      0|        auto node    = pos.node();
  743|  5.02k|        auto idx     = pos.index(pos.size() - 1);
  744|  5.02k|        auto new_idx = pos.index(pos.size() + branches<BL> - 1);
  745|  5.02k|        auto mutate  = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (745:24): [Folded - Ignored]
  |  Branch (745:36): [True: 0, False: 0]
  ------------------
  746|  5.02k|        if (mutate) {
  ------------------
  |  Branch (746:13): [True: 0, False: 5.02k]
  ------------------
  747|      0|            node->inner()[new_idx] =
  748|      0|                idx == new_idx ? pos.last_oh(this_t{}, idx, e, tail)
  ------------------
  |  Branch (748:17): [True: 0, False: 0]
  ------------------
  749|       |                               /* otherwise */
  750|      0|                               : node_t::make_path_e(e, pos.shift() - B, tail);
  751|      0|            return node;
  752|  5.02k|        } else {
  753|  5.02k|            auto new_parent = node_t::make_inner_e(e);
  754|  5.02k|            IMMER_TRY {
  ------------------
  |  |   41|  5.02k|#define IMMER_TRY try
  ------------------
  755|  5.02k|                new_parent->inner()[new_idx] =
  756|  5.02k|                    idx == new_idx
  ------------------
  |  Branch (756:21): [True: 2.55k, False: 2.47k]
  ------------------
  757|  5.02k|                        ? pos.last_oh(this_no_mut_t{}, idx, e, tail)
  758|       |                        /* otherwise */
  759|  5.02k|                        : node_t::make_path_e(e, pos.shift() - B, tail);
  760|  5.02k|                node_t::do_copy_inner(new_parent, node, new_idx);
  761|  5.02k|                if (Mutating)
  ------------------
  |  Branch (761:21): [Folded - Ignored]
  ------------------
  762|      0|                    pos.visit(dec_visitor{});
  763|  5.02k|                return new_parent;
  764|  5.02k|            }
  765|  5.02k|            IMMER_CATCH (...) {
  766|      0|                node_t::delete_inner_e(new_parent);
  767|      0|                IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
  768|      0|            }
  769|  5.02k|        }
  770|  5.02k|    }
_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:
  679|  8.50k|    {
  680|  8.50k|        auto node     = pos.node();
  681|  8.50k|        auto level    = pos.shift();
  682|  8.50k|        auto idx      = pos.count() - 1;
  683|  8.50k|        auto children = pos.size(idx);
  684|  8.50k|        auto new_idx =
  685|  8.50k|            children == size_t{1} << level || level == BL ? idx + 1 : idx;
  ------------------
  |  Branch (685:13): [True: 1.01k, False: 7.49k]
  |  Branch (685:47): [True: 356, False: 7.14k]
  ------------------
  686|  8.50k|        auto new_child = static_cast<node_t*>(nullptr);
  687|  8.50k|        auto mutate    = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (687:26): [Folded - Ignored]
  |  Branch (687:38): [True: 0, False: 0]
  ------------------
  688|       |
  689|  8.50k|        if (new_idx >= branches<B>)
  ------------------
  |  Branch (689:13): [True: 658, False: 7.85k]
  ------------------
  690|    658|            return nullptr;
  691|  7.85k|        else if (idx == new_idx) {
  ------------------
  |  Branch (691:18): [True: 7.14k, False: 709]
  ------------------
  692|  7.14k|            new_child =
  693|  7.14k|                mutate ? pos.last_oh_csh(this_t{}, idx, children, e, tail, ts)
  ------------------
  |  Branch (693:17): [True: 0, False: 7.14k]
  ------------------
  694|  7.14k|                       : pos.last_oh_csh(
  695|  7.14k|                             this_no_mut_t{}, idx, children, e, tail, ts);
  696|  7.14k|            if (!new_child) {
  ------------------
  |  Branch (696:17): [True: 724, False: 6.41k]
  ------------------
  697|    724|                if (++new_idx < branches<B>)
  ------------------
  |  Branch (697:21): [True: 275, False: 449]
  ------------------
  698|    275|                    new_child = node_t::make_path_e(e, level - B, tail);
  699|    449|                else
  700|    449|                    return nullptr;
  701|    724|            }
  702|  7.14k|        } else
  703|    709|            new_child = node_t::make_path_e(e, level - B, tail);
  704|       |
  705|  7.40k|        if (mutate) {
  ------------------
  |  Branch (705:13): [True: 0, False: 7.40k]
  ------------------
  706|      0|            auto count             = new_idx + 1;
  707|      0|            auto relaxed           = node->ensure_mutable_relaxed_n(e, new_idx);
  708|      0|            node->inner()[new_idx] = new_child;
  709|      0|            relaxed->d.sizes[new_idx] = pos.size() + ts;
  710|      0|            relaxed->d.count          = count;
  711|      0|            assert(relaxed->d.sizes[new_idx]);
  712|      0|            return node;
  713|  7.40k|        } else {
  714|  7.40k|            IMMER_TRY {
  ------------------
  |  |   41|  7.40k|#define IMMER_TRY try
  ------------------
  715|  7.40k|                auto count    = new_idx + 1;
  716|  7.40k|                auto new_node = node_t::copy_inner_r_e(e, pos.node(), new_idx);
  717|  7.40k|                auto relaxed  = new_node->relaxed();
  718|  7.40k|                new_node->inner()[new_idx] = new_child;
  719|  7.40k|                relaxed->d.sizes[new_idx]  = pos.size() + ts;
  720|  7.40k|                relaxed->d.count           = count;
  721|  7.40k|                assert(relaxed->d.sizes[new_idx]);
  722|  7.40k|                if (Mutating)
  ------------------
  |  Branch (722:21): [Folded - Ignored]
  ------------------
  723|      0|                    pos.visit(dec_visitor{});
  724|  7.40k|                return new_node;
  725|  7.40k|            }
  726|  7.40k|            IMMER_CATCH (...) {
  727|      0|                auto shift = pos.shift();
  728|      0|                auto size  = new_idx == idx ? children + ts : ts;
  ------------------
  |  Branch (728:30): [True: 0, False: 0]
  ------------------
  729|      0|                if (shift > BL) {
  ------------------
  |  Branch (729:21): [True: 0, False: 0]
  ------------------
  730|      0|                    tail->inc();
  731|      0|                    dec_inner(new_child, shift - B, size);
  732|      0|                }
  733|      0|                IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
  734|      0|            }
  735|  7.40k|        }
  736|  7.40k|    }
_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_:
  740|  1.13k|    {
  741|  1.13k|        assert((pos.size() & mask<BL>) == 0);
  742|      0|        auto node    = pos.node();
  743|  1.13k|        auto idx     = pos.index(pos.size() - 1);
  744|  1.13k|        auto new_idx = pos.index(pos.size() + branches<BL> - 1);
  745|  1.13k|        auto mutate  = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (745:24): [Folded - Ignored]
  |  Branch (745:36): [True: 0, False: 0]
  ------------------
  746|  1.13k|        if (mutate) {
  ------------------
  |  Branch (746:13): [True: 0, False: 1.13k]
  ------------------
  747|      0|            node->inner()[new_idx] =
  748|      0|                idx == new_idx ? pos.last_oh(this_t{}, idx, e, tail)
  ------------------
  |  Branch (748:17): [True: 0, False: 0]
  ------------------
  749|       |                               /* otherwise */
  750|      0|                               : node_t::make_path_e(e, pos.shift() - B, tail);
  751|      0|            return node;
  752|  1.13k|        } else {
  753|  1.13k|            auto new_parent = node_t::make_inner_e(e);
  754|  1.13k|            IMMER_TRY {
  ------------------
  |  |   41|  1.13k|#define IMMER_TRY try
  ------------------
  755|  1.13k|                new_parent->inner()[new_idx] =
  756|  1.13k|                    idx == new_idx
  ------------------
  |  Branch (756:21): [True: 672, False: 467]
  ------------------
  757|  1.13k|                        ? pos.last_oh(this_no_mut_t{}, idx, e, tail)
  758|       |                        /* otherwise */
  759|  1.13k|                        : node_t::make_path_e(e, pos.shift() - B, tail);
  760|  1.13k|                node_t::do_copy_inner(new_parent, node, new_idx);
  761|  1.13k|                if (Mutating)
  ------------------
  |  Branch (761:21): [Folded - Ignored]
  ------------------
  762|      0|                    pos.visit(dec_visitor{});
  763|  1.13k|                return new_parent;
  764|  1.13k|            }
  765|  1.13k|            IMMER_CATCH (...) {
  766|      0|                node_t::delete_inner_e(new_parent);
  767|      0|                IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
  768|      0|            }
  769|  1.13k|        }
  770|  1.13k|    }
_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_:
  740|   238k|    {
  741|   238k|        assert((pos.size() & mask<BL>) == 0);
  742|      0|        auto node    = pos.node();
  743|   238k|        auto idx     = pos.index(pos.size() - 1);
  744|   238k|        auto new_idx = pos.index(pos.size() + branches<BL> - 1);
  745|   238k|        auto mutate  = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (745:24): [Folded - Ignored]
  |  Branch (745:36): [True: 238k, False: 648]
  ------------------
  746|   238k|        if (mutate) {
  ------------------
  |  Branch (746:13): [True: 238k, False: 648]
  ------------------
  747|   238k|            node->inner()[new_idx] =
  748|   238k|                idx == new_idx ? pos.last_oh(this_t{}, idx, e, tail)
  ------------------
  |  Branch (748:17): [True: 233k, False: 4.61k]
  ------------------
  749|       |                               /* otherwise */
  750|   238k|                               : node_t::make_path_e(e, pos.shift() - B, tail);
  751|   238k|            return node;
  752|   238k|        } else {
  753|    648|            auto new_parent = node_t::make_inner_e(e);
  754|    648|            IMMER_TRY {
  ------------------
  |  |   41|    648|#define IMMER_TRY try
  ------------------
  755|    648|                new_parent->inner()[new_idx] =
  756|    648|                    idx == new_idx
  ------------------
  |  Branch (756:21): [True: 391, False: 257]
  ------------------
  757|    648|                        ? pos.last_oh(this_no_mut_t{}, idx, e, tail)
  758|       |                        /* otherwise */
  759|    648|                        : node_t::make_path_e(e, pos.shift() - B, tail);
  760|    648|                node_t::do_copy_inner(new_parent, node, new_idx);
  761|    648|                if (Mutating)
  ------------------
  |  Branch (761:21): [Folded - Ignored]
  ------------------
  762|    648|                    pos.visit(dec_visitor{});
  763|    648|                return new_parent;
  764|    648|            }
  765|    648|            IMMER_CATCH (...) {
  766|      0|                node_t::delete_inner_e(new_parent);
  767|      0|                IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
  768|      0|            }
  769|    648|        }
  770|   238k|    }
_ZN5immer6detail4rbts17dec_empty_regularINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEvPT_:
  579|  2.70k|{
  580|  2.70k|    make_empty_regular_pos(node).visit(dec_visitor());
  581|  2.70k|}
_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_:
  594|   104k|    {
  595|   104k|        auto offset = pos.index(idx);
  596|   104k|        auto count  = pos.count();
  597|   104k|        auto node   = pos.node();
  598|   104k|        if (node->can_mutate(e)) {
  ------------------
  |  Branch (598:13): [True: 95.3k, False: 9.32k]
  ------------------
  599|  95.3k|            return pos.towards_oh(
  600|  95.3k|                this_t{}, idx, offset, e, &node->inner()[offset]);
  601|  95.3k|        } else {
  602|  9.32k|            auto new_node = node_t::copy_inner_sr_e(e, node, count);
  603|  9.32k|            IMMER_TRY {
  ------------------
  |  |   41|  9.32k|#define IMMER_TRY try
  ------------------
  604|  9.32k|                auto& res = pos.towards_oh(
  605|  9.32k|                    this_t{}, idx, offset, e, &new_node->inner()[offset]);
  606|  9.32k|                pos.visit(dec_visitor{});
  607|  9.32k|                *location = new_node;
  608|  9.32k|                return res;
  609|  9.32k|            }
  610|  9.32k|            IMMER_CATCH (...) {
  611|      0|                dec_relaxed(new_node, pos.shift());
  612|      0|                IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
  613|      0|            }
  614|  9.32k|        }
  615|   104k|    }
_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_:
  651|  28.0k|    {
  652|  28.0k|        assert(pos.node() == *location);
  653|      0|        auto node = pos.node();
  654|  28.0k|        if (node->can_mutate(e)) {
  ------------------
  |  Branch (654:13): [True: 26.1k, False: 1.91k]
  ------------------
  655|  26.1k|            return node->leaf()[pos.index(idx)];
  656|  26.1k|        } else {
  657|  1.91k|            auto new_node = node_t::copy_leaf_e(e, pos.node(), pos.count());
  658|  1.91k|            pos.visit(dec_visitor{});
  659|  1.91k|            *location = new_node;
  660|  1.91k|            return new_node->leaf()[pos.index(idx)];
  661|  1.91k|        }
  662|  28.0k|    }
_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_:
  620|  3.90k|    {
  621|  3.90k|        assert(pos.node() == *location);
  622|      0|        auto offset = pos.index(idx);
  623|  3.90k|        auto count  = pos.count();
  624|  3.90k|        auto node   = pos.node();
  625|  3.90k|        if (node->can_mutate(e)) {
  ------------------
  |  Branch (625:13): [True: 2.81k, False: 1.08k]
  ------------------
  626|  2.81k|            return pos.towards_oh_ch(
  627|  2.81k|                this_t{}, idx, offset, count, e, &node->inner()[offset]);
  628|  2.81k|        } else {
  629|  1.08k|            auto new_node = node_t::copy_inner_e(e, node, count);
  630|  1.08k|            IMMER_TRY {
  ------------------
  |  |   41|  1.08k|#define IMMER_TRY try
  ------------------
  631|  1.08k|                auto& res = pos.towards_oh_ch(this_t{},
  632|  1.08k|                                              idx,
  633|  1.08k|                                              offset,
  634|  1.08k|                                              count,
  635|  1.08k|                                              e,
  636|  1.08k|                                              &new_node->inner()[offset]);
  637|  1.08k|                pos.visit(dec_visitor{});
  638|  1.08k|                *location = new_node;
  639|  1.08k|                return res;
  640|  1.08k|            }
  641|  1.08k|            IMMER_CATCH (...) {
  642|      0|                dec_regular(new_node, pos.shift(), pos.size());
  643|      0|                IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
  644|      0|            }
  645|  1.08k|        }
  646|  3.90k|    }
_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_:
  651|  2.63k|    {
  652|  2.63k|        assert(pos.node() == *location);
  653|      0|        auto node = pos.node();
  654|  2.63k|        if (node->can_mutate(e)) {
  ------------------
  |  Branch (654:13): [True: 1.46k, False: 1.17k]
  ------------------
  655|  1.46k|            return node->leaf()[pos.index(idx)];
  656|  1.46k|        } else {
  657|  1.17k|            auto new_node = node_t::copy_leaf_e(e, pos.node(), pos.count());
  658|  1.17k|            pos.visit(dec_visitor{});
  659|  1.17k|            *location = new_node;
  660|  1.17k|            return new_node->leaf()[pos.index(idx)];
  661|  1.17k|        }
  662|  2.63k|    }
_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_:
  620|  2.40k|    {
  621|  2.40k|        assert(pos.node() == *location);
  622|      0|        auto offset = pos.index(idx);
  623|  2.40k|        auto count  = pos.count();
  624|  2.40k|        auto node   = pos.node();
  625|  2.40k|        if (node->can_mutate(e)) {
  ------------------
  |  Branch (625:13): [True: 1.35k, False: 1.04k]
  ------------------
  626|  1.35k|            return pos.towards_oh_ch(
  627|  1.35k|                this_t{}, idx, offset, count, e, &node->inner()[offset]);
  628|  1.35k|        } else {
  629|  1.04k|            auto new_node = node_t::copy_inner_e(e, node, count);
  630|  1.04k|            IMMER_TRY {
  ------------------
  |  |   41|  1.04k|#define IMMER_TRY try
  ------------------
  631|  1.04k|                auto& res = pos.towards_oh_ch(this_t{},
  632|  1.04k|                                              idx,
  633|  1.04k|                                              offset,
  634|  1.04k|                                              count,
  635|  1.04k|                                              e,
  636|  1.04k|                                              &new_node->inner()[offset]);
  637|  1.04k|                pos.visit(dec_visitor{});
  638|  1.04k|                *location = new_node;
  639|  1.04k|                return res;
  640|  1.04k|            }
  641|  1.04k|            IMMER_CATCH (...) {
  642|      0|                dec_regular(new_node, pos.shift(), pos.size());
  643|      0|                IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
  644|      0|            }
  645|  1.04k|        }
  646|  2.40k|    }
_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_:
  651|  1.26k|    {
  652|  1.26k|        assert(pos.node() == *location);
  653|      0|        auto node = pos.node();
  654|  1.26k|        if (node->can_mutate(e)) {
  ------------------
  |  Branch (654:13): [True: 776, False: 489]
  ------------------
  655|    776|            return node->leaf()[pos.index(idx)];
  656|    776|        } else {
  657|    489|            auto new_node = node_t::copy_leaf_e(e, pos.node(), pos.count());
  658|    489|            pos.visit(dec_visitor{});
  659|    489|            *location = new_node;
  660|    489|            return new_node->leaf()[pos.index(idx)];
  661|    489|        }
  662|  1.26k|    }
_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_:
  620|  1.75k|    {
  621|  1.75k|        assert(pos.node() == *location);
  622|      0|        auto offset = pos.index(idx);
  623|  1.75k|        auto count  = pos.count();
  624|  1.75k|        auto node   = pos.node();
  625|  1.75k|        if (node->can_mutate(e)) {
  ------------------
  |  Branch (625:13): [True: 1.26k, False: 491]
  ------------------
  626|  1.26k|            return pos.towards_oh_ch(
  627|  1.26k|                this_t{}, idx, offset, count, e, &node->inner()[offset]);
  628|  1.26k|        } else {
  629|    491|            auto new_node = node_t::copy_inner_e(e, node, count);
  630|    491|            IMMER_TRY {
  ------------------
  |  |   41|    491|#define IMMER_TRY try
  ------------------
  631|    491|                auto& res = pos.towards_oh_ch(this_t{},
  632|    491|                                              idx,
  633|    491|                                              offset,
  634|    491|                                              count,
  635|    491|                                              e,
  636|    491|                                              &new_node->inner()[offset]);
  637|    491|                pos.visit(dec_visitor{});
  638|    491|                *location = new_node;
  639|    491|                return res;
  640|    491|            }
  641|    491|            IMMER_CATCH (...) {
  642|      0|                dec_regular(new_node, pos.shift(), pos.size());
  643|      0|                IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
  644|      0|            }
  645|    491|        }
  646|  1.75k|    }
_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:
  912|   121k|    {
  913|   121k|        auto idx    = pos.index(last);
  914|   121k|        auto node   = pos.node();
  915|   121k|        auto mutate = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (915:23): [Folded - Ignored]
  |  Branch (915:35): [True: 113k, False: 7.91k]
  ------------------
  916|   121k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (916:13): [Folded - Ignored]
  |  Branch (916:25): [True: 102k, False: 18.5k]
  ------------------
  917|   102k|            auto res = mutate ? pos.towards_oh(this_t{}, last, idx, e)
  ------------------
  |  Branch (917:24): [True: 98.0k, False: 4.48k]
  ------------------
  918|   102k|                              : pos.towards_oh(no_mut_t{}, last, idx, e);
  919|   102k|            if (Mutating)
  ------------------
  |  Branch (919:17): [Folded - Ignored]
  ------------------
  920|   102k|                pos.visit(dec_right_visitor{}, count_t{1});
  921|   102k|            return res;
  922|   102k|        } else {
  923|  18.5k|            using std::get;
  924|  18.5k|            auto subs =
  925|  18.5k|                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
  ------------------
  |  Branch (925:17): [True: 15.1k, False: 3.42k]
  ------------------
  926|  18.5k|                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
  927|  18.5k|            auto next = get<1>(subs);
  928|  18.5k|            auto ts   = get<2>(subs);
  929|  18.5k|            auto tail = get<3>(subs);
  930|  18.5k|            IMMER_TRY {
  ------------------
  |  |   41|  18.5k|#define IMMER_TRY try
  ------------------
  931|  18.5k|                if (next) {
  ------------------
  |  Branch (931:21): [True: 13.4k, False: 5.13k]
  ------------------
  932|  13.4k|                    if (mutate) {
  ------------------
  |  Branch (932:25): [True: 11.5k, False: 1.88k]
  ------------------
  933|  11.5k|                        auto nodr = node->ensure_mutable_relaxed_n(e, idx);
  934|  11.5k|                        pos.each_right(dec_visitor{}, idx + 1);
  935|  11.5k|                        node->inner()[idx] = next;
  936|  11.5k|                        nodr->d.sizes[idx] = last + 1 - ts;
  937|  11.5k|                        nodr->d.count      = idx + 1;
  938|  11.5k|                        assert(nodr->d.sizes[idx]);
  939|      0|                        return std::make_tuple(pos.shift(), node, ts, tail);
  940|  11.5k|                    } else {
  941|  1.88k|                        auto newn = node_t::copy_inner_r_e(e, node, idx);
  942|  1.88k|                        auto newr = newn->relaxed();
  943|  1.88k|                        newn->inner()[idx] = next;
  944|  1.88k|                        newr->d.sizes[idx] = last + 1 - ts;
  945|  1.88k|                        newr->d.count      = idx + 1;
  946|  1.88k|                        assert(newr->d.sizes[idx]);
  947|  1.88k|                        if (Mutating)
  ------------------
  |  Branch (947:29): [Folded - Ignored]
  ------------------
  948|  1.88k|                            pos.visit(dec_visitor{});
  949|  1.88k|                        return std::make_tuple(pos.shift(), newn, ts, tail);
  950|  1.88k|                    }
  951|  13.4k|                } else if (idx == 0) {
  ------------------
  |  Branch (951:28): [True: 0, False: 5.13k]
  ------------------
  952|      0|                    if (Mutating)
  ------------------
  |  Branch (952:25): [Folded - Ignored]
  ------------------
  953|      0|                        pos.visit(dec_right_visitor{}, count_t{1});
  954|      0|                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
  955|  5.13k|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (955:28): [Folded - Ignored]
  |  Branch (955:40): [True: 3.69k, False: 1.43k]
  |  Branch (955:52): [True: 2.90k, False: 796]
  ------------------
  956|  2.90k|                    auto newn = pos.node()->inner()[0];
  957|  2.90k|                    if (!mutate)
  ------------------
  |  Branch (957:25): [True: 969, False: 1.93k]
  ------------------
  958|    969|                        newn->inc();
  959|  2.90k|                    if (Mutating)
  ------------------
  |  Branch (959:25): [Folded - Ignored]
  ------------------
  960|  2.90k|                        pos.visit(dec_right_visitor{}, count_t{2});
  961|  2.90k|                    return std::make_tuple(pos.shift() - B, newn, ts, tail);
  962|  2.90k|                } else {
  963|  2.23k|                    if (mutate) {
  ------------------
  |  Branch (963:25): [True: 1.66k, False: 570]
  ------------------
  964|  1.66k|                        pos.each_right(dec_visitor{}, idx + 1);
  965|  1.66k|                        node->ensure_mutable_relaxed_n(e, idx)->d.count = idx;
  966|  1.66k|                        return std::make_tuple(pos.shift(), node, ts, tail);
  967|  1.66k|                    } else {
  968|    570|                        auto newn = node_t::copy_inner_r_e(e, node, idx);
  969|    570|                        if (Mutating)
  ------------------
  |  Branch (969:29): [Folded - Ignored]
  ------------------
  970|    570|                            pos.visit(dec_visitor{});
  971|    570|                        return std::make_tuple(pos.shift(), newn, ts, tail);
  972|    570|                    }
  973|  2.23k|                }
  974|  18.5k|            }
  975|  18.5k|            IMMER_CATCH (...) {
  976|      0|                assert(!mutate);
  977|      0|                assert(!next || pos.shift() > BL);
  978|      0|                if (next)
  ------------------
  |  Branch (978:21): [True: 0, False: 0]
  ------------------
  979|      0|                    dec_inner(next,
  980|      0|                              pos.shift() - B,
  981|      0|                              last + 1 - ts - pos.size_before(idx));
  982|      0|                dec_leaf(tail, ts);
  983|      0|                IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
  984|      0|            }
  985|  18.5k|        }
  986|   121k|    }
_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:
 1058|  3.85k|    {
 1059|  3.85k|        auto old_tail_size = pos.count();
 1060|  3.85k|        auto new_tail_size = pos.index(last) + 1;
 1061|  3.85k|        auto node          = pos.node();
 1062|  3.85k|        auto mutate        = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (1062:30): [Folded - Ignored]
  |  Branch (1062:42): [True: 344, False: 3.51k]
  ------------------
 1063|  3.85k|        if (new_tail_size == old_tail_size) {
  ------------------
  |  Branch (1063:13): [True: 1.77k, False: 2.08k]
  ------------------
 1064|  1.77k|            if (!Mutating)
  ------------------
  |  Branch (1064:17): [Folded - Ignored]
  ------------------
 1065|      0|                node->inc();
 1066|  1.77k|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1067|  2.08k|        } else if (mutate) {
  ------------------
  |  Branch (1067:20): [True: 274, False: 1.81k]
  ------------------
 1068|    274|            detail::destroy_n(node->leaf() + new_tail_size,
 1069|    274|                              old_tail_size - new_tail_size);
 1070|    274|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1071|  1.81k|        } else {
 1072|  1.81k|            auto new_tail = node_t::copy_leaf_e(e, node, new_tail_size);
 1073|  1.81k|            if (Mutating)
  ------------------
  |  Branch (1073:17): [Folded - Ignored]
  ------------------
 1074|  1.81k|                pos.visit(dec_visitor{});
 1075|  1.81k|            return std::make_tuple(0, nullptr, new_tail_size, new_tail);
 1076|  1.81k|        }
 1077|  3.85k|    }
_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:
 1058|    721|    {
 1059|    721|        auto old_tail_size = pos.count();
 1060|    721|        auto new_tail_size = pos.index(last) + 1;
 1061|    721|        auto node          = pos.node();
 1062|    721|        auto mutate        = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (1062:30): [Folded - Ignored]
  |  Branch (1062:42): [True: 0, False: 0]
  ------------------
 1063|    721|        if (new_tail_size == old_tail_size) {
  ------------------
  |  Branch (1063:13): [True: 383, False: 338]
  ------------------
 1064|    383|            if (!Mutating)
  ------------------
  |  Branch (1064:17): [Folded - Ignored]
  ------------------
 1065|    383|                node->inc();
 1066|    383|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1067|    383|        } else if (mutate) {
  ------------------
  |  Branch (1067:20): [True: 0, False: 338]
  ------------------
 1068|      0|            detail::destroy_n(node->leaf() + new_tail_size,
 1069|      0|                              old_tail_size - new_tail_size);
 1070|      0|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1071|    338|        } else {
 1072|    338|            auto new_tail = node_t::copy_leaf_e(e, node, new_tail_size);
 1073|    338|            if (Mutating)
  ------------------
  |  Branch (1073:17): [Folded - Ignored]
  ------------------
 1074|      0|                pos.visit(dec_visitor{});
 1075|    338|            return std::make_tuple(0, nullptr, new_tail_size, new_tail);
 1076|    338|        }
 1077|    721|    }
_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:
  912|  19.2k|    {
  913|  19.2k|        auto idx    = pos.index(last);
  914|  19.2k|        auto node   = pos.node();
  915|  19.2k|        auto mutate = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (915:23): [Folded - Ignored]
  |  Branch (915:35): [True: 0, False: 0]
  ------------------
  916|  19.2k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (916:13): [Folded - Ignored]
  |  Branch (916:25): [True: 16.5k, False: 2.64k]
  ------------------
  917|  16.5k|            auto res = mutate ? pos.towards_oh(this_t{}, last, idx, e)
  ------------------
  |  Branch (917:24): [True: 0, False: 16.5k]
  ------------------
  918|  16.5k|                              : pos.towards_oh(no_mut_t{}, last, idx, e);
  919|  16.5k|            if (Mutating)
  ------------------
  |  Branch (919:17): [Folded - Ignored]
  ------------------
  920|      0|                pos.visit(dec_right_visitor{}, count_t{1});
  921|  16.5k|            return res;
  922|  16.5k|        } else {
  923|  2.64k|            using std::get;
  924|  2.64k|            auto subs =
  925|  2.64k|                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
  ------------------
  |  Branch (925:17): [True: 0, False: 2.64k]
  ------------------
  926|  2.64k|                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
  927|  2.64k|            auto next = get<1>(subs);
  928|  2.64k|            auto ts   = get<2>(subs);
  929|  2.64k|            auto tail = get<3>(subs);
  930|  2.64k|            IMMER_TRY {
  ------------------
  |  |   41|  2.64k|#define IMMER_TRY try
  ------------------
  931|  2.64k|                if (next) {
  ------------------
  |  Branch (931:21): [True: 1.14k, False: 1.49k]
  ------------------
  932|  1.14k|                    if (mutate) {
  ------------------
  |  Branch (932:25): [True: 0, False: 1.14k]
  ------------------
  933|      0|                        auto nodr = node->ensure_mutable_relaxed_n(e, idx);
  934|      0|                        pos.each_right(dec_visitor{}, idx + 1);
  935|      0|                        node->inner()[idx] = next;
  936|      0|                        nodr->d.sizes[idx] = last + 1 - ts;
  937|      0|                        nodr->d.count      = idx + 1;
  938|      0|                        assert(nodr->d.sizes[idx]);
  939|      0|                        return std::make_tuple(pos.shift(), node, ts, tail);
  940|  1.14k|                    } else {
  941|  1.14k|                        auto newn = node_t::copy_inner_r_e(e, node, idx);
  942|  1.14k|                        auto newr = newn->relaxed();
  943|  1.14k|                        newn->inner()[idx] = next;
  944|  1.14k|                        newr->d.sizes[idx] = last + 1 - ts;
  945|  1.14k|                        newr->d.count      = idx + 1;
  946|  1.14k|                        assert(newr->d.sizes[idx]);
  947|  1.14k|                        if (Mutating)
  ------------------
  |  Branch (947:29): [Folded - Ignored]
  ------------------
  948|      0|                            pos.visit(dec_visitor{});
  949|  1.14k|                        return std::make_tuple(pos.shift(), newn, ts, tail);
  950|  1.14k|                    }
  951|  1.49k|                } else if (idx == 0) {
  ------------------
  |  Branch (951:28): [True: 0, False: 1.49k]
  ------------------
  952|      0|                    if (Mutating)
  ------------------
  |  Branch (952:25): [Folded - Ignored]
  ------------------
  953|      0|                        pos.visit(dec_right_visitor{}, count_t{1});
  954|      0|                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
  955|  1.49k|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (955:28): [Folded - Ignored]
  |  Branch (955:40): [True: 742, False: 751]
  |  Branch (955:52): [True: 389, False: 353]
  ------------------
  956|    389|                    auto newn = pos.node()->inner()[0];
  957|    389|                    if (!mutate)
  ------------------
  |  Branch (957:25): [True: 389, False: 0]
  ------------------
  958|    389|                        newn->inc();
  959|    389|                    if (Mutating)
  ------------------
  |  Branch (959:25): [Folded - Ignored]
  ------------------
  960|      0|                        pos.visit(dec_right_visitor{}, count_t{2});
  961|    389|                    return std::make_tuple(pos.shift() - B, newn, ts, tail);
  962|  1.10k|                } else {
  963|  1.10k|                    if (mutate) {
  ------------------
  |  Branch (963:25): [True: 0, False: 1.10k]
  ------------------
  964|      0|                        pos.each_right(dec_visitor{}, idx + 1);
  965|      0|                        node->ensure_mutable_relaxed_n(e, idx)->d.count = idx;
  966|      0|                        return std::make_tuple(pos.shift(), node, ts, tail);
  967|  1.10k|                    } else {
  968|  1.10k|                        auto newn = node_t::copy_inner_r_e(e, node, idx);
  969|  1.10k|                        if (Mutating)
  ------------------
  |  Branch (969:29): [Folded - Ignored]
  ------------------
  970|      0|                            pos.visit(dec_visitor{});
  971|  1.10k|                        return std::make_tuple(pos.shift(), newn, ts, tail);
  972|  1.10k|                    }
  973|  1.10k|                }
  974|  2.64k|            }
  975|  2.64k|            IMMER_CATCH (...) {
  976|      0|                assert(!mutate);
  977|      0|                assert(!next || pos.shift() > BL);
  978|      0|                if (next)
  ------------------
  |  Branch (978:21): [True: 0, False: 0]
  ------------------
  979|      0|                    dec_inner(next,
  980|      0|                              pos.shift() - B,
  981|      0|                              last + 1 - ts - pos.size_before(idx));
  982|      0|                dec_leaf(tail, ts);
  983|      0|                IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
  984|      0|            }
  985|  2.64k|        }
  986|  19.2k|    }
_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:
  990|  1.12k|    {
  991|  1.12k|        auto idx    = pos.index(last);
  992|  1.12k|        auto node   = pos.node();
  993|  1.12k|        auto mutate = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (993:23): [Folded - Ignored]
  |  Branch (993:35): [True: 0, False: 0]
  ------------------
  994|  1.12k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (994:13): [Folded - Ignored]
  |  Branch (994:25): [True: 252, False: 869]
  ------------------
  995|    252|            auto res = mutate ? pos.towards_oh(this_t{}, last, idx, e)
  ------------------
  |  Branch (995:24): [True: 0, False: 252]
  ------------------
  996|    252|                              : pos.towards_oh(no_mut_t{}, last, idx, e);
  997|    252|            if (Mutating)
  ------------------
  |  Branch (997:17): [Folded - Ignored]
  ------------------
  998|      0|                pos.visit(dec_right_visitor{}, count_t{1});
  999|    252|            return res;
 1000|    869|        } else {
 1001|    869|            using std::get;
 1002|    869|            auto subs =
 1003|    869|                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
  ------------------
  |  Branch (1003:17): [True: 0, False: 869]
  ------------------
 1004|    869|                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
 1005|    869|            auto next = get<1>(subs);
 1006|    869|            auto ts   = get<2>(subs);
 1007|    869|            auto tail = get<3>(subs);
 1008|    869|            IMMER_TRY {
  ------------------
  |  |   41|    869|#define IMMER_TRY try
  ------------------
 1009|    869|                if (next) {
  ------------------
  |  Branch (1009:21): [True: 200, False: 669]
  ------------------
 1010|    200|                    if (mutate) {
  ------------------
  |  Branch (1010:25): [True: 0, False: 200]
  ------------------
 1011|      0|                        node->inner()[idx] = next;
 1012|      0|                        pos.each_right(dec_visitor{}, idx + 1);
 1013|      0|                        return std::make_tuple(pos.shift(), node, ts, tail);
 1014|    200|                    } else {
 1015|    200|                        auto newn          = node_t::copy_inner_e(e, node, idx);
 1016|    200|                        newn->inner()[idx] = next;
 1017|    200|                        if (Mutating)
  ------------------
  |  Branch (1017:29): [Folded - Ignored]
  ------------------
 1018|      0|                            pos.visit(dec_visitor{});
 1019|    200|                        return std::make_tuple(pos.shift(), newn, ts, tail);
 1020|    200|                    }
 1021|    669|                } else if (idx == 0) {
  ------------------
  |  Branch (1021:28): [True: 0, False: 669]
  ------------------
 1022|      0|                    if (Mutating)
  ------------------
  |  Branch (1022:25): [Folded - Ignored]
  ------------------
 1023|      0|                        pos.visit(dec_right_visitor{}, count_t{1});
 1024|      0|                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
 1025|    669|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (1025:28): [Folded - Ignored]
  |  Branch (1025:40): [True: 450, False: 219]
  |  Branch (1025:52): [True: 197, False: 253]
  ------------------
 1026|    197|                    auto newn = pos.node()->inner()[0];
 1027|    197|                    if (!mutate)
  ------------------
  |  Branch (1027:25): [True: 197, False: 0]
  ------------------
 1028|    197|                        newn->inc();
 1029|    197|                    if (Mutating)
  ------------------
  |  Branch (1029:25): [Folded - Ignored]
  ------------------
 1030|      0|                        pos.visit(dec_right_visitor{}, count_t{2});
 1031|    197|                    return std::make_tuple(pos.shift() - B, newn, ts, tail);
 1032|    472|                } else {
 1033|    472|                    if (mutate) {
  ------------------
  |  Branch (1033:25): [True: 0, False: 472]
  ------------------
 1034|      0|                        pos.each_right(dec_visitor{}, idx + 1);
 1035|      0|                        return std::make_tuple(pos.shift(), node, ts, tail);
 1036|    472|                    } else {
 1037|    472|                        auto newn = node_t::copy_inner_e(e, node, idx);
 1038|    472|                        if (Mutating)
  ------------------
  |  Branch (1038:29): [Folded - Ignored]
  ------------------
 1039|      0|                            pos.visit(dec_visitor{});
 1040|    472|                        return std::make_tuple(pos.shift(), newn, ts, tail);
 1041|    472|                    }
 1042|    472|                }
 1043|    869|            }
 1044|    869|            IMMER_CATCH (...) {
 1045|      0|                assert(!mutate);
 1046|      0|                assert(!next || pos.shift() > BL);
 1047|      0|                assert(tail);
 1048|      0|                if (next)
  ------------------
  |  Branch (1048:21): [True: 0, False: 0]
  ------------------
 1049|      0|                    dec_regular(next, pos.shift() - B, last + 1 - ts);
 1050|      0|                dec_leaf(tail, ts);
 1051|      0|                IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1052|      0|            }
 1053|    869|        }
 1054|  1.12k|    }
_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:
 1058|  1.41k|    {
 1059|  1.41k|        auto old_tail_size = pos.count();
 1060|  1.41k|        auto new_tail_size = pos.index(last) + 1;
 1061|  1.41k|        auto node          = pos.node();
 1062|  1.41k|        auto mutate        = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (1062:30): [Folded - Ignored]
  |  Branch (1062:42): [True: 0, False: 0]
  ------------------
 1063|  1.41k|        if (new_tail_size == old_tail_size) {
  ------------------
  |  Branch (1063:13): [True: 594, False: 816]
  ------------------
 1064|    594|            if (!Mutating)
  ------------------
  |  Branch (1064:17): [Folded - Ignored]
  ------------------
 1065|    594|                node->inc();
 1066|    594|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1067|    816|        } else if (mutate) {
  ------------------
  |  Branch (1067:20): [True: 0, False: 816]
  ------------------
 1068|      0|            detail::destroy_n(node->leaf() + new_tail_size,
 1069|      0|                              old_tail_size - new_tail_size);
 1070|      0|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1071|    816|        } else {
 1072|    816|            auto new_tail = node_t::copy_leaf_e(e, node, new_tail_size);
 1073|    816|            if (Mutating)
  ------------------
  |  Branch (1073:17): [Folded - Ignored]
  ------------------
 1074|      0|                pos.visit(dec_visitor{});
 1075|    816|            return std::make_tuple(0, nullptr, new_tail_size, new_tail);
 1076|    816|        }
 1077|  1.41k|    }
_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:
  990|  2.12k|    {
  991|  2.12k|        auto idx    = pos.index(last);
  992|  2.12k|        auto node   = pos.node();
  993|  2.12k|        auto mutate = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (993:23): [Folded - Ignored]
  |  Branch (993:35): [True: 0, False: 0]
  ------------------
  994|  2.12k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (994:13): [Folded - Ignored]
  |  Branch (994:25): [True: 785, False: 1.33k]
  ------------------
  995|    785|            auto res = mutate ? pos.towards_oh(this_t{}, last, idx, e)
  ------------------
  |  Branch (995:24): [True: 0, False: 785]
  ------------------
  996|    785|                              : pos.towards_oh(no_mut_t{}, last, idx, e);
  997|    785|            if (Mutating)
  ------------------
  |  Branch (997:17): [Folded - Ignored]
  ------------------
  998|      0|                pos.visit(dec_right_visitor{}, count_t{1});
  999|    785|            return res;
 1000|  1.33k|        } else {
 1001|  1.33k|            using std::get;
 1002|  1.33k|            auto subs =
 1003|  1.33k|                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
  ------------------
  |  Branch (1003:17): [True: 0, False: 1.33k]
  ------------------
 1004|  1.33k|                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
 1005|  1.33k|            auto next = get<1>(subs);
 1006|  1.33k|            auto ts   = get<2>(subs);
 1007|  1.33k|            auto tail = get<3>(subs);
 1008|  1.33k|            IMMER_TRY {
  ------------------
  |  |   41|  1.33k|#define IMMER_TRY try
  ------------------
 1009|  1.33k|                if (next) {
  ------------------
  |  Branch (1009:21): [True: 201, False: 1.13k]
  ------------------
 1010|    201|                    if (mutate) {
  ------------------
  |  Branch (1010:25): [True: 0, False: 201]
  ------------------
 1011|      0|                        node->inner()[idx] = next;
 1012|      0|                        pos.each_right(dec_visitor{}, idx + 1);
 1013|      0|                        return std::make_tuple(pos.shift(), node, ts, tail);
 1014|    201|                    } else {
 1015|    201|                        auto newn          = node_t::copy_inner_e(e, node, idx);
 1016|    201|                        newn->inner()[idx] = next;
 1017|    201|                        if (Mutating)
  ------------------
  |  Branch (1017:29): [Folded - Ignored]
  ------------------
 1018|      0|                            pos.visit(dec_visitor{});
 1019|    201|                        return std::make_tuple(pos.shift(), newn, ts, tail);
 1020|    201|                    }
 1021|  1.13k|                } else if (idx == 0) {
  ------------------
  |  Branch (1021:28): [True: 0, False: 1.13k]
  ------------------
 1022|      0|                    if (Mutating)
  ------------------
  |  Branch (1022:25): [Folded - Ignored]
  ------------------
 1023|      0|                        pos.visit(dec_right_visitor{}, count_t{1});
 1024|      0|                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
 1025|  1.13k|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (1025:28): [Folded - Ignored]
  |  Branch (1025:40): [True: 782, False: 354]
  |  Branch (1025:52): [True: 265, False: 517]
  ------------------
 1026|    265|                    auto newn = pos.node()->inner()[0];
 1027|    265|                    if (!mutate)
  ------------------
  |  Branch (1027:25): [True: 265, False: 0]
  ------------------
 1028|    265|                        newn->inc();
 1029|    265|                    if (Mutating)
  ------------------
  |  Branch (1029:25): [Folded - Ignored]
  ------------------
 1030|      0|                        pos.visit(dec_right_visitor{}, count_t{2});
 1031|    265|                    return std::make_tuple(pos.shift() - B, newn, ts, tail);
 1032|    871|                } else {
 1033|    871|                    if (mutate) {
  ------------------
  |  Branch (1033:25): [True: 0, False: 871]
  ------------------
 1034|      0|                        pos.each_right(dec_visitor{}, idx + 1);
 1035|      0|                        return std::make_tuple(pos.shift(), node, ts, tail);
 1036|    871|                    } else {
 1037|    871|                        auto newn = node_t::copy_inner_e(e, node, idx);
 1038|    871|                        if (Mutating)
  ------------------
  |  Branch (1038:29): [Folded - Ignored]
  ------------------
 1039|      0|                            pos.visit(dec_visitor{});
 1040|    871|                        return std::make_tuple(pos.shift(), newn, ts, tail);
 1041|    871|                    }
 1042|    871|                }
 1043|  1.33k|            }
 1044|  1.33k|            IMMER_CATCH (...) {
 1045|      0|                assert(!mutate);
 1046|      0|                assert(!next || pos.shift() > BL);
 1047|      0|                assert(tail);
 1048|      0|                if (next)
  ------------------
  |  Branch (1048:21): [True: 0, False: 0]
  ------------------
 1049|      0|                    dec_regular(next, pos.shift() - B, last + 1 - ts);
 1050|      0|                dec_leaf(tail, ts);
 1051|      0|                IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1052|      0|            }
 1053|  1.33k|        }
 1054|  2.12k|    }
_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:
 1058|  4.38k|    {
 1059|  4.38k|        auto old_tail_size = pos.count();
 1060|  4.38k|        auto new_tail_size = pos.index(last) + 1;
 1061|  4.38k|        auto node          = pos.node();
 1062|  4.38k|        auto mutate        = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (1062:30): [Folded - Ignored]
  |  Branch (1062:42): [True: 1.21k, False: 3.16k]
  ------------------
 1063|  4.38k|        if (new_tail_size == old_tail_size) {
  ------------------
  |  Branch (1063:13): [True: 1.67k, False: 2.70k]
  ------------------
 1064|  1.67k|            if (!Mutating)
  ------------------
  |  Branch (1064:17): [Folded - Ignored]
  ------------------
 1065|      0|                node->inc();
 1066|  1.67k|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1067|  2.70k|        } else if (mutate) {
  ------------------
  |  Branch (1067:20): [True: 908, False: 1.80k]
  ------------------
 1068|    908|            detail::destroy_n(node->leaf() + new_tail_size,
 1069|    908|                              old_tail_size - new_tail_size);
 1070|    908|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1071|  1.80k|        } else {
 1072|  1.80k|            auto new_tail = node_t::copy_leaf_e(e, node, new_tail_size);
 1073|  1.80k|            if (Mutating)
  ------------------
  |  Branch (1073:17): [Folded - Ignored]
  ------------------
 1074|  1.80k|                pos.visit(dec_visitor{});
 1075|  1.80k|            return std::make_tuple(0, nullptr, new_tail_size, new_tail);
 1076|  1.80k|        }
 1077|  4.38k|    }
_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:
  990|  4.21k|    {
  991|  4.21k|        auto idx    = pos.index(last);
  992|  4.21k|        auto node   = pos.node();
  993|  4.21k|        auto mutate = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (993:23): [Folded - Ignored]
  |  Branch (993:35): [True: 1.49k, False: 2.72k]
  ------------------
  994|  4.21k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (994:13): [Folded - Ignored]
  |  Branch (994:25): [True: 0, False: 0]
  ------------------
  995|      0|            auto res = mutate ? pos.towards_oh(this_t{}, last, idx, e)
  ------------------
  |  Branch (995:24): [True: 0, False: 0]
  ------------------
  996|      0|                              : pos.towards_oh(no_mut_t{}, last, idx, e);
  997|      0|            if (Mutating)
  ------------------
  |  Branch (997:17): [Folded - Ignored]
  ------------------
  998|      0|                pos.visit(dec_right_visitor{}, count_t{1});
  999|      0|            return res;
 1000|  4.21k|        } else {
 1001|  4.21k|            using std::get;
 1002|  4.21k|            auto subs =
 1003|  4.21k|                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
  ------------------
  |  Branch (1003:17): [True: 1.49k, False: 2.72k]
  ------------------
 1004|  4.21k|                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
 1005|  4.21k|            auto next = get<1>(subs);
 1006|  4.21k|            auto ts   = get<2>(subs);
 1007|  4.21k|            auto tail = get<3>(subs);
 1008|  4.21k|            IMMER_TRY {
  ------------------
  |  |   41|  4.21k|#define IMMER_TRY try
  ------------------
 1009|  4.21k|                if (next) {
  ------------------
  |  Branch (1009:21): [True: 497, False: 3.72k]
  ------------------
 1010|    497|                    if (mutate) {
  ------------------
  |  Branch (1010:25): [True: 263, False: 234]
  ------------------
 1011|    263|                        node->inner()[idx] = next;
 1012|    263|                        pos.each_right(dec_visitor{}, idx + 1);
 1013|    263|                        return std::make_tuple(pos.shift(), node, ts, tail);
 1014|    263|                    } else {
 1015|    234|                        auto newn          = node_t::copy_inner_e(e, node, idx);
 1016|    234|                        newn->inner()[idx] = next;
 1017|    234|                        if (Mutating)
  ------------------
  |  Branch (1017:29): [Folded - Ignored]
  ------------------
 1018|    234|                            pos.visit(dec_visitor{});
 1019|    234|                        return std::make_tuple(pos.shift(), newn, ts, tail);
 1020|    234|                    }
 1021|  3.72k|                } else if (idx == 0) {
  ------------------
  |  Branch (1021:28): [True: 1.75k, False: 1.96k]
  ------------------
 1022|  1.75k|                    if (Mutating)
  ------------------
  |  Branch (1022:25): [Folded - Ignored]
  ------------------
 1023|  1.75k|                        pos.visit(dec_right_visitor{}, count_t{1});
 1024|  1.75k|                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
 1025|  1.96k|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (1025:28): [Folded - Ignored]
  |  Branch (1025:40): [True: 0, False: 0]
  |  Branch (1025:52): [True: 0, False: 0]
  ------------------
 1026|      0|                    auto newn = pos.node()->inner()[0];
 1027|      0|                    if (!mutate)
  ------------------
  |  Branch (1027:25): [True: 0, False: 0]
  ------------------
 1028|      0|                        newn->inc();
 1029|      0|                    if (Mutating)
  ------------------
  |  Branch (1029:25): [Folded - Ignored]
  ------------------
 1030|      0|                        pos.visit(dec_right_visitor{}, count_t{2});
 1031|      0|                    return std::make_tuple(pos.shift() - B, newn, ts, tail);
 1032|  1.96k|                } else {
 1033|  1.96k|                    if (mutate) {
  ------------------
  |  Branch (1033:25): [True: 910, False: 1.05k]
  ------------------
 1034|    910|                        pos.each_right(dec_visitor{}, idx + 1);
 1035|    910|                        return std::make_tuple(pos.shift(), node, ts, tail);
 1036|  1.05k|                    } else {
 1037|  1.05k|                        auto newn = node_t::copy_inner_e(e, node, idx);
 1038|  1.05k|                        if (Mutating)
  ------------------
  |  Branch (1038:29): [Folded - Ignored]
  ------------------
 1039|  1.05k|                            pos.visit(dec_visitor{});
 1040|  1.05k|                        return std::make_tuple(pos.shift(), newn, ts, tail);
 1041|  1.05k|                    }
 1042|  1.96k|                }
 1043|  4.21k|            }
 1044|  4.21k|            IMMER_CATCH (...) {
 1045|      0|                assert(!mutate);
 1046|      0|                assert(!next || pos.shift() > BL);
 1047|      0|                assert(tail);
 1048|      0|                if (next)
  ------------------
  |  Branch (1048:21): [True: 0, False: 0]
  ------------------
 1049|      0|                    dec_regular(next, pos.shift() - B, last + 1 - ts);
 1050|      0|                dec_leaf(tail, ts);
 1051|      0|                IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1052|      0|            }
 1053|  4.21k|        }
 1054|  4.21k|    }
_ZN5immer6detail4rbts17dec_right_visitor13visit_regularIRNS1_8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEEEvOT_j:
  877|  4.53k|    {
  878|  4.53k|        using node_t = node_type<Pos>;
  879|  4.53k|        auto node    = p.node();
  880|  4.53k|        if (node->dec()) {
  ------------------
  |  Branch (880:13): [True: 2.31k, False: 2.22k]
  ------------------
  881|  2.31k|            p.each_right(dec_t{}, idx);
  882|  2.31k|            node_t::delete_inner(node, p.count());
  883|  2.31k|        }
  884|  4.53k|    }
_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:
 1058|  9.58k|    {
 1059|  9.58k|        auto old_tail_size = pos.count();
 1060|  9.58k|        auto new_tail_size = pos.index(last) + 1;
 1061|  9.58k|        auto node          = pos.node();
 1062|  9.58k|        auto mutate        = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (1062:30): [Folded - Ignored]
  |  Branch (1062:42): [True: 0, False: 0]
  ------------------
 1063|  9.58k|        if (new_tail_size == old_tail_size) {
  ------------------
  |  Branch (1063:13): [True: 2.98k, False: 6.60k]
  ------------------
 1064|  2.98k|            if (!Mutating)
  ------------------
  |  Branch (1064:17): [Folded - Ignored]
  ------------------
 1065|  2.98k|                node->inc();
 1066|  2.98k|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1067|  6.60k|        } else if (mutate) {
  ------------------
  |  Branch (1067:20): [True: 0, False: 6.60k]
  ------------------
 1068|      0|            detail::destroy_n(node->leaf() + new_tail_size,
 1069|      0|                              old_tail_size - new_tail_size);
 1070|      0|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1071|  6.60k|        } else {
 1072|  6.60k|            auto new_tail = node_t::copy_leaf_e(e, node, new_tail_size);
 1073|  6.60k|            if (Mutating)
  ------------------
  |  Branch (1073:17): [Folded - Ignored]
  ------------------
 1074|      0|                pos.visit(dec_visitor{});
 1075|  6.60k|            return std::make_tuple(0, nullptr, new_tail_size, new_tail);
 1076|  6.60k|        }
 1077|  9.58k|    }
_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:
  990|  3.39k|    {
  991|  3.39k|        auto idx    = pos.index(last);
  992|  3.39k|        auto node   = pos.node();
  993|  3.39k|        auto mutate = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (993:23): [Folded - Ignored]
  |  Branch (993:35): [True: 0, False: 0]
  ------------------
  994|  3.39k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (994:13): [Folded - Ignored]
  |  Branch (994:25): [True: 0, False: 0]
  ------------------
  995|      0|            auto res = mutate ? pos.towards_oh(this_t{}, last, idx, e)
  ------------------
  |  Branch (995:24): [True: 0, False: 0]
  ------------------
  996|      0|                              : pos.towards_oh(no_mut_t{}, last, idx, e);
  997|      0|            if (Mutating)
  ------------------
  |  Branch (997:17): [Folded - Ignored]
  ------------------
  998|      0|                pos.visit(dec_right_visitor{}, count_t{1});
  999|      0|            return res;
 1000|  3.39k|        } else {
 1001|  3.39k|            using std::get;
 1002|  3.39k|            auto subs =
 1003|  3.39k|                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
  ------------------
  |  Branch (1003:17): [True: 0, False: 3.39k]
  ------------------
 1004|  3.39k|                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
 1005|  3.39k|            auto next = get<1>(subs);
 1006|  3.39k|            auto ts   = get<2>(subs);
 1007|  3.39k|            auto tail = get<3>(subs);
 1008|  3.39k|            IMMER_TRY {
  ------------------
  |  |   41|  3.39k|#define IMMER_TRY try
  ------------------
 1009|  3.39k|                if (next) {
  ------------------
  |  Branch (1009:21): [True: 361, False: 3.03k]
  ------------------
 1010|    361|                    if (mutate) {
  ------------------
  |  Branch (1010:25): [True: 0, False: 361]
  ------------------
 1011|      0|                        node->inner()[idx] = next;
 1012|      0|                        pos.each_right(dec_visitor{}, idx + 1);
 1013|      0|                        return std::make_tuple(pos.shift(), node, ts, tail);
 1014|    361|                    } else {
 1015|    361|                        auto newn          = node_t::copy_inner_e(e, node, idx);
 1016|    361|                        newn->inner()[idx] = next;
 1017|    361|                        if (Mutating)
  ------------------
  |  Branch (1017:29): [Folded - Ignored]
  ------------------
 1018|      0|                            pos.visit(dec_visitor{});
 1019|    361|                        return std::make_tuple(pos.shift(), newn, ts, tail);
 1020|    361|                    }
 1021|  3.03k|                } else if (idx == 0) {
  ------------------
  |  Branch (1021:28): [True: 1.27k, False: 1.76k]
  ------------------
 1022|  1.27k|                    if (Mutating)
  ------------------
  |  Branch (1022:25): [Folded - Ignored]
  ------------------
 1023|      0|                        pos.visit(dec_right_visitor{}, count_t{1});
 1024|  1.27k|                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
 1025|  1.76k|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (1025:28): [Folded - Ignored]
  |  Branch (1025:40): [True: 0, False: 0]
  |  Branch (1025:52): [True: 0, False: 0]
  ------------------
 1026|      0|                    auto newn = pos.node()->inner()[0];
 1027|      0|                    if (!mutate)
  ------------------
  |  Branch (1027:25): [True: 0, False: 0]
  ------------------
 1028|      0|                        newn->inc();
 1029|      0|                    if (Mutating)
  ------------------
  |  Branch (1029:25): [Folded - Ignored]
  ------------------
 1030|      0|                        pos.visit(dec_right_visitor{}, count_t{2});
 1031|      0|                    return std::make_tuple(pos.shift() - B, newn, ts, tail);
 1032|  1.76k|                } else {
 1033|  1.76k|                    if (mutate) {
  ------------------
  |  Branch (1033:25): [True: 0, False: 1.76k]
  ------------------
 1034|      0|                        pos.each_right(dec_visitor{}, idx + 1);
 1035|      0|                        return std::make_tuple(pos.shift(), node, ts, tail);
 1036|  1.76k|                    } else {
 1037|  1.76k|                        auto newn = node_t::copy_inner_e(e, node, idx);
 1038|  1.76k|                        if (Mutating)
  ------------------
  |  Branch (1038:29): [Folded - Ignored]
  ------------------
 1039|      0|                            pos.visit(dec_visitor{});
 1040|  1.76k|                        return std::make_tuple(pos.shift(), newn, ts, tail);
 1041|  1.76k|                    }
 1042|  1.76k|                }
 1043|  3.39k|            }
 1044|  3.39k|            IMMER_CATCH (...) {
 1045|      0|                assert(!mutate);
 1046|      0|                assert(!next || pos.shift() > BL);
 1047|      0|                assert(tail);
 1048|      0|                if (next)
  ------------------
  |  Branch (1048:21): [True: 0, False: 0]
  ------------------
 1049|      0|                    dec_regular(next, pos.shift() - B, last + 1 - ts);
 1050|      0|                dec_leaf(tail, ts);
 1051|      0|                IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1052|      0|            }
 1053|  3.39k|        }
 1054|  3.39k|    }
_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:
 1058|    408|    {
 1059|    408|        auto old_tail_size = pos.count();
 1060|    408|        auto new_tail_size = pos.index(last) + 1;
 1061|    408|        auto node          = pos.node();
 1062|    408|        auto mutate        = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (1062:30): [Folded - Ignored]
  |  Branch (1062:42): [True: 0, False: 0]
  ------------------
 1063|    408|        if (new_tail_size == old_tail_size) {
  ------------------
  |  Branch (1063:13): [True: 212, False: 196]
  ------------------
 1064|    212|            if (!Mutating)
  ------------------
  |  Branch (1064:17): [Folded - Ignored]
  ------------------
 1065|    212|                node->inc();
 1066|    212|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1067|    212|        } else if (mutate) {
  ------------------
  |  Branch (1067:20): [True: 0, False: 196]
  ------------------
 1068|      0|            detail::destroy_n(node->leaf() + new_tail_size,
 1069|      0|                              old_tail_size - new_tail_size);
 1070|      0|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1071|    196|        } else {
 1072|    196|            auto new_tail = node_t::copy_leaf_e(e, node, new_tail_size);
 1073|    196|            if (Mutating)
  ------------------
  |  Branch (1073:17): [Folded - Ignored]
  ------------------
 1074|      0|                pos.visit(dec_visitor{});
 1075|    196|            return std::make_tuple(0, nullptr, new_tail_size, new_tail);
 1076|    196|        }
 1077|    408|    }
_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:
 1058|  2.11k|    {
 1059|  2.11k|        auto old_tail_size = pos.count();
 1060|  2.11k|        auto new_tail_size = pos.index(last) + 1;
 1061|  2.11k|        auto node          = pos.node();
 1062|  2.11k|        auto mutate        = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (1062:30): [Folded - Ignored]
  |  Branch (1062:42): [True: 276, False: 1.83k]
  ------------------
 1063|  2.11k|        if (new_tail_size == old_tail_size) {
  ------------------
  |  Branch (1063:13): [True: 482, False: 1.62k]
  ------------------
 1064|    482|            if (!Mutating)
  ------------------
  |  Branch (1064:17): [Folded - Ignored]
  ------------------
 1065|      0|                node->inc();
 1066|    482|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1067|  1.62k|        } else if (mutate) {
  ------------------
  |  Branch (1067:20): [True: 239, False: 1.38k]
  ------------------
 1068|    239|            detail::destroy_n(node->leaf() + new_tail_size,
 1069|    239|                              old_tail_size - new_tail_size);
 1070|    239|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1071|  1.38k|        } else {
 1072|  1.38k|            auto new_tail = node_t::copy_leaf_e(e, node, new_tail_size);
 1073|  1.38k|            if (Mutating)
  ------------------
  |  Branch (1073:17): [Folded - Ignored]
  ------------------
 1074|  1.38k|                pos.visit(dec_visitor{});
 1075|  1.38k|            return std::make_tuple(0, nullptr, new_tail_size, new_tail);
 1076|  1.38k|        }
 1077|  2.11k|    }
_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:
  990|  5.29k|    {
  991|  5.29k|        auto idx    = pos.index(last);
  992|  5.29k|        auto node   = pos.node();
  993|  5.29k|        auto mutate = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (993:23): [Folded - Ignored]
  |  Branch (993:35): [True: 4.67k, False: 626]
  ------------------
  994|  5.29k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (994:13): [Folded - Ignored]
  |  Branch (994:25): [True: 0, False: 0]
  ------------------
  995|      0|            auto res = mutate ? pos.towards_oh(this_t{}, last, idx, e)
  ------------------
  |  Branch (995:24): [True: 0, False: 0]
  ------------------
  996|      0|                              : pos.towards_oh(no_mut_t{}, last, idx, e);
  997|      0|            if (Mutating)
  ------------------
  |  Branch (997:17): [Folded - Ignored]
  ------------------
  998|      0|                pos.visit(dec_right_visitor{}, count_t{1});
  999|      0|            return res;
 1000|  5.29k|        } else {
 1001|  5.29k|            using std::get;
 1002|  5.29k|            auto subs =
 1003|  5.29k|                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
  ------------------
  |  Branch (1003:17): [True: 4.67k, False: 626]
  ------------------
 1004|  5.29k|                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
 1005|  5.29k|            auto next = get<1>(subs);
 1006|  5.29k|            auto ts   = get<2>(subs);
 1007|  5.29k|            auto tail = get<3>(subs);
 1008|  5.29k|            IMMER_TRY {
  ------------------
  |  |   41|  5.29k|#define IMMER_TRY try
  ------------------
 1009|  5.29k|                if (next) {
  ------------------
  |  Branch (1009:21): [True: 1.68k, False: 3.60k]
  ------------------
 1010|  1.68k|                    if (mutate) {
  ------------------
  |  Branch (1010:25): [True: 1.48k, False: 199]
  ------------------
 1011|  1.48k|                        node->inner()[idx] = next;
 1012|  1.48k|                        pos.each_right(dec_visitor{}, idx + 1);
 1013|  1.48k|                        return std::make_tuple(pos.shift(), node, ts, tail);
 1014|  1.48k|                    } else {
 1015|    199|                        auto newn          = node_t::copy_inner_e(e, node, idx);
 1016|    199|                        newn->inner()[idx] = next;
 1017|    199|                        if (Mutating)
  ------------------
  |  Branch (1017:29): [Folded - Ignored]
  ------------------
 1018|    199|                            pos.visit(dec_visitor{});
 1019|    199|                        return std::make_tuple(pos.shift(), newn, ts, tail);
 1020|    199|                    }
 1021|  3.60k|                } else if (idx == 0) {
  ------------------
  |  Branch (1021:28): [True: 2.96k, False: 640]
  ------------------
 1022|  2.96k|                    if (Mutating)
  ------------------
  |  Branch (1022:25): [Folded - Ignored]
  ------------------
 1023|  2.96k|                        pos.visit(dec_right_visitor{}, count_t{1});
 1024|  2.96k|                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
 1025|  2.96k|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (1025:28): [Folded - Ignored]
  |  Branch (1025:40): [True: 0, False: 0]
  |  Branch (1025:52): [True: 0, False: 0]
  ------------------
 1026|      0|                    auto newn = pos.node()->inner()[0];
 1027|      0|                    if (!mutate)
  ------------------
  |  Branch (1027:25): [True: 0, False: 0]
  ------------------
 1028|      0|                        newn->inc();
 1029|      0|                    if (Mutating)
  ------------------
  |  Branch (1029:25): [Folded - Ignored]
  ------------------
 1030|      0|                        pos.visit(dec_right_visitor{}, count_t{2});
 1031|      0|                    return std::make_tuple(pos.shift() - B, newn, ts, tail);
 1032|    640|                } else {
 1033|    640|                    if (mutate) {
  ------------------
  |  Branch (1033:25): [True: 435, False: 205]
  ------------------
 1034|    435|                        pos.each_right(dec_visitor{}, idx + 1);
 1035|    435|                        return std::make_tuple(pos.shift(), node, ts, tail);
 1036|    435|                    } else {
 1037|    205|                        auto newn = node_t::copy_inner_e(e, node, idx);
 1038|    205|                        if (Mutating)
  ------------------
  |  Branch (1038:29): [Folded - Ignored]
  ------------------
 1039|    205|                            pos.visit(dec_visitor{});
 1040|    205|                        return std::make_tuple(pos.shift(), newn, ts, tail);
 1041|    205|                    }
 1042|    640|                }
 1043|  5.29k|            }
 1044|  5.29k|            IMMER_CATCH (...) {
 1045|      0|                assert(!mutate);
 1046|      0|                assert(!next || pos.shift() > BL);
 1047|      0|                assert(tail);
 1048|      0|                if (next)
  ------------------
  |  Branch (1048:21): [True: 0, False: 0]
  ------------------
 1049|      0|                    dec_regular(next, pos.shift() - B, last + 1 - ts);
 1050|      0|                dec_leaf(tail, ts);
 1051|      0|                IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1052|      0|            }
 1053|  5.29k|        }
 1054|  5.29k|    }
_ZN5immer6detail4rbts17dec_right_visitor13visit_regularIRNS1_11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEEEvOT_j:
  877|  2.96k|    {
  878|  2.96k|        using node_t = node_type<Pos>;
  879|  2.96k|        auto node    = p.node();
  880|  2.96k|        if (node->dec()) {
  ------------------
  |  Branch (880:13): [True: 2.74k, False: 222]
  ------------------
  881|  2.74k|            p.each_right(dec_t{}, idx);
  882|  2.74k|            node_t::delete_inner(node, p.count());
  883|  2.74k|        }
  884|  2.96k|    }
_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:
 1058|  2.37k|    {
 1059|  2.37k|        auto old_tail_size = pos.count();
 1060|  2.37k|        auto new_tail_size = pos.index(last) + 1;
 1061|  2.37k|        auto node          = pos.node();
 1062|  2.37k|        auto mutate        = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (1062:30): [Folded - Ignored]
  |  Branch (1062:42): [True: 0, False: 0]
  ------------------
 1063|  2.37k|        if (new_tail_size == old_tail_size) {
  ------------------
  |  Branch (1063:13): [True: 636, False: 1.74k]
  ------------------
 1064|    636|            if (!Mutating)
  ------------------
  |  Branch (1064:17): [Folded - Ignored]
  ------------------
 1065|    636|                node->inc();
 1066|    636|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1067|  1.74k|        } else if (mutate) {
  ------------------
  |  Branch (1067:20): [True: 0, False: 1.74k]
  ------------------
 1068|      0|            detail::destroy_n(node->leaf() + new_tail_size,
 1069|      0|                              old_tail_size - new_tail_size);
 1070|      0|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1071|  1.74k|        } else {
 1072|  1.74k|            auto new_tail = node_t::copy_leaf_e(e, node, new_tail_size);
 1073|  1.74k|            if (Mutating)
  ------------------
  |  Branch (1073:17): [Folded - Ignored]
  ------------------
 1074|      0|                pos.visit(dec_visitor{});
 1075|  1.74k|            return std::make_tuple(0, nullptr, new_tail_size, new_tail);
 1076|  1.74k|        }
 1077|  2.37k|    }
_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:
  990|  3.66k|    {
  991|  3.66k|        auto idx    = pos.index(last);
  992|  3.66k|        auto node   = pos.node();
  993|  3.66k|        auto mutate = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (993:23): [Folded - Ignored]
  |  Branch (993:35): [True: 0, False: 0]
  ------------------
  994|  3.66k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (994:13): [Folded - Ignored]
  |  Branch (994:25): [True: 0, False: 0]
  ------------------
  995|      0|            auto res = mutate ? pos.towards_oh(this_t{}, last, idx, e)
  ------------------
  |  Branch (995:24): [True: 0, False: 0]
  ------------------
  996|      0|                              : pos.towards_oh(no_mut_t{}, last, idx, e);
  997|      0|            if (Mutating)
  ------------------
  |  Branch (997:17): [Folded - Ignored]
  ------------------
  998|      0|                pos.visit(dec_right_visitor{}, count_t{1});
  999|      0|            return res;
 1000|  3.66k|        } else {
 1001|  3.66k|            using std::get;
 1002|  3.66k|            auto subs =
 1003|  3.66k|                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
  ------------------
  |  Branch (1003:17): [True: 0, False: 3.66k]
  ------------------
 1004|  3.66k|                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
 1005|  3.66k|            auto next = get<1>(subs);
 1006|  3.66k|            auto ts   = get<2>(subs);
 1007|  3.66k|            auto tail = get<3>(subs);
 1008|  3.66k|            IMMER_TRY {
  ------------------
  |  |   41|  3.66k|#define IMMER_TRY try
  ------------------
 1009|  3.66k|                if (next) {
  ------------------
  |  Branch (1009:21): [True: 916, False: 2.74k]
  ------------------
 1010|    916|                    if (mutate) {
  ------------------
  |  Branch (1010:25): [True: 0, False: 916]
  ------------------
 1011|      0|                        node->inner()[idx] = next;
 1012|      0|                        pos.each_right(dec_visitor{}, idx + 1);
 1013|      0|                        return std::make_tuple(pos.shift(), node, ts, tail);
 1014|    916|                    } else {
 1015|    916|                        auto newn          = node_t::copy_inner_e(e, node, idx);
 1016|    916|                        newn->inner()[idx] = next;
 1017|    916|                        if (Mutating)
  ------------------
  |  Branch (1017:29): [Folded - Ignored]
  ------------------
 1018|      0|                            pos.visit(dec_visitor{});
 1019|    916|                        return std::make_tuple(pos.shift(), newn, ts, tail);
 1020|    916|                    }
 1021|  2.74k|                } else if (idx == 0) {
  ------------------
  |  Branch (1021:28): [True: 1.91k, False: 831]
  ------------------
 1022|  1.91k|                    if (Mutating)
  ------------------
  |  Branch (1022:25): [Folded - Ignored]
  ------------------
 1023|      0|                        pos.visit(dec_right_visitor{}, count_t{1});
 1024|  1.91k|                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
 1025|  1.91k|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (1025:28): [Folded - Ignored]
  |  Branch (1025:40): [True: 0, False: 0]
  |  Branch (1025:52): [True: 0, False: 0]
  ------------------
 1026|      0|                    auto newn = pos.node()->inner()[0];
 1027|      0|                    if (!mutate)
  ------------------
  |  Branch (1027:25): [True: 0, False: 0]
  ------------------
 1028|      0|                        newn->inc();
 1029|      0|                    if (Mutating)
  ------------------
  |  Branch (1029:25): [Folded - Ignored]
  ------------------
 1030|      0|                        pos.visit(dec_right_visitor{}, count_t{2});
 1031|      0|                    return std::make_tuple(pos.shift() - B, newn, ts, tail);
 1032|    831|                } else {
 1033|    831|                    if (mutate) {
  ------------------
  |  Branch (1033:25): [True: 0, False: 831]
  ------------------
 1034|      0|                        pos.each_right(dec_visitor{}, idx + 1);
 1035|      0|                        return std::make_tuple(pos.shift(), node, ts, tail);
 1036|    831|                    } else {
 1037|    831|                        auto newn = node_t::copy_inner_e(e, node, idx);
 1038|    831|                        if (Mutating)
  ------------------
  |  Branch (1038:29): [Folded - Ignored]
  ------------------
 1039|      0|                            pos.visit(dec_visitor{});
 1040|    831|                        return std::make_tuple(pos.shift(), newn, ts, tail);
 1041|    831|                    }
 1042|    831|                }
 1043|  3.66k|            }
 1044|  3.66k|            IMMER_CATCH (...) {
 1045|      0|                assert(!mutate);
 1046|      0|                assert(!next || pos.shift() > BL);
 1047|      0|                assert(tail);
 1048|      0|                if (next)
  ------------------
  |  Branch (1048:21): [True: 0, False: 0]
  ------------------
 1049|      0|                    dec_regular(next, pos.shift() - B, last + 1 - ts);
 1050|      0|                dec_leaf(tail, ts);
 1051|      0|                IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1052|      0|            }
 1053|  3.66k|        }
 1054|  3.66k|    }
_ZN5immer6detail4rbts17dec_right_visitor13visit_relaxedIRNS1_11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEEEvOT_j:
  866|   106k|    {
  867|   106k|        using node_t = node_type<Pos>;
  868|   106k|        auto node    = p.node();
  869|   106k|        if (node->dec()) {
  ------------------
  |  Branch (869:13): [True: 100k, False: 5.87k]
  ------------------
  870|   100k|            p.each_right(dec_t{}, idx);
  871|   100k|            node_t::delete_inner_r(node, p.count());
  872|   100k|        }
  873|   106k|    }
_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:
 1058|  5.50k|    {
 1059|  5.50k|        auto old_tail_size = pos.count();
 1060|  5.50k|        auto new_tail_size = pos.index(last) + 1;
 1061|  5.50k|        auto node          = pos.node();
 1062|  5.50k|        auto mutate        = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (1062:30): [Folded - Ignored]
  |  Branch (1062:42): [True: 1.22k, False: 4.27k]
  ------------------
 1063|  5.50k|        if (new_tail_size == old_tail_size) {
  ------------------
  |  Branch (1063:13): [True: 2.71k, False: 2.79k]
  ------------------
 1064|  2.71k|            if (!Mutating)
  ------------------
  |  Branch (1064:17): [Folded - Ignored]
  ------------------
 1065|      0|                node->inc();
 1066|  2.71k|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1067|  2.79k|        } else if (mutate) {
  ------------------
  |  Branch (1067:20): [True: 833, False: 1.96k]
  ------------------
 1068|    833|            detail::destroy_n(node->leaf() + new_tail_size,
 1069|    833|                              old_tail_size - new_tail_size);
 1070|    833|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1071|  1.96k|        } else {
 1072|  1.96k|            auto new_tail = node_t::copy_leaf_e(e, node, new_tail_size);
 1073|  1.96k|            if (Mutating)
  ------------------
  |  Branch (1073:17): [Folded - Ignored]
  ------------------
 1074|  1.96k|                pos.visit(dec_visitor{});
 1075|  1.96k|            return std::make_tuple(0, nullptr, new_tail_size, new_tail);
 1076|  1.96k|        }
 1077|  5.50k|    }
_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:
  912|  13.7k|    {
  913|  13.7k|        auto idx    = pos.index(last);
  914|  13.7k|        auto node   = pos.node();
  915|  13.7k|        auto mutate = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (915:23): [Folded - Ignored]
  |  Branch (915:35): [True: 10.4k, False: 3.33k]
  ------------------
  916|  13.7k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (916:13): [Folded - Ignored]
  |  Branch (916:25): [True: 0, False: 0]
  ------------------
  917|      0|            auto res = mutate ? pos.towards_oh(this_t{}, last, idx, e)
  ------------------
  |  Branch (917:24): [True: 0, False: 0]
  ------------------
  918|      0|                              : pos.towards_oh(no_mut_t{}, last, idx, e);
  919|      0|            if (Mutating)
  ------------------
  |  Branch (919:17): [Folded - Ignored]
  ------------------
  920|      0|                pos.visit(dec_right_visitor{}, count_t{1});
  921|      0|            return res;
  922|  13.7k|        } else {
  923|  13.7k|            using std::get;
  924|  13.7k|            auto subs =
  925|  13.7k|                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
  ------------------
  |  Branch (925:17): [True: 10.4k, False: 3.33k]
  ------------------
  926|  13.7k|                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
  927|  13.7k|            auto next = get<1>(subs);
  928|  13.7k|            auto ts   = get<2>(subs);
  929|  13.7k|            auto tail = get<3>(subs);
  930|  13.7k|            IMMER_TRY {
  ------------------
  |  |   41|  13.7k|#define IMMER_TRY try
  ------------------
  931|  13.7k|                if (next) {
  ------------------
  |  Branch (931:21): [True: 7.94k, False: 5.79k]
  ------------------
  932|  7.94k|                    if (mutate) {
  ------------------
  |  Branch (932:25): [True: 5.94k, False: 2.00k]
  ------------------
  933|  5.94k|                        auto nodr = node->ensure_mutable_relaxed_n(e, idx);
  934|  5.94k|                        pos.each_right(dec_visitor{}, idx + 1);
  935|  5.94k|                        node->inner()[idx] = next;
  936|  5.94k|                        nodr->d.sizes[idx] = last + 1 - ts;
  937|  5.94k|                        nodr->d.count      = idx + 1;
  938|  5.94k|                        assert(nodr->d.sizes[idx]);
  939|      0|                        return std::make_tuple(pos.shift(), node, ts, tail);
  940|  5.94k|                    } else {
  941|  2.00k|                        auto newn = node_t::copy_inner_r_e(e, node, idx);
  942|  2.00k|                        auto newr = newn->relaxed();
  943|  2.00k|                        newn->inner()[idx] = next;
  944|  2.00k|                        newr->d.sizes[idx] = last + 1 - ts;
  945|  2.00k|                        newr->d.count      = idx + 1;
  946|  2.00k|                        assert(newr->d.sizes[idx]);
  947|  2.00k|                        if (Mutating)
  ------------------
  |  Branch (947:29): [Folded - Ignored]
  ------------------
  948|  2.00k|                            pos.visit(dec_visitor{});
  949|  2.00k|                        return std::make_tuple(pos.shift(), newn, ts, tail);
  950|  2.00k|                    }
  951|  7.94k|                } else if (idx == 0) {
  ------------------
  |  Branch (951:28): [True: 1.29k, False: 4.50k]
  ------------------
  952|  1.29k|                    if (Mutating)
  ------------------
  |  Branch (952:25): [Folded - Ignored]
  ------------------
  953|  1.29k|                        pos.visit(dec_right_visitor{}, count_t{1});
  954|  1.29k|                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
  955|  4.50k|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (955:28): [Folded - Ignored]
  |  Branch (955:40): [True: 0, False: 0]
  |  Branch (955:52): [True: 0, False: 0]
  ------------------
  956|      0|                    auto newn = pos.node()->inner()[0];
  957|      0|                    if (!mutate)
  ------------------
  |  Branch (957:25): [True: 0, False: 0]
  ------------------
  958|      0|                        newn->inc();
  959|      0|                    if (Mutating)
  ------------------
  |  Branch (959:25): [Folded - Ignored]
  ------------------
  960|      0|                        pos.visit(dec_right_visitor{}, count_t{2});
  961|      0|                    return std::make_tuple(pos.shift() - B, newn, ts, tail);
  962|  4.50k|                } else {
  963|  4.50k|                    if (mutate) {
  ------------------
  |  Branch (963:25): [True: 3.60k, False: 906]
  ------------------
  964|  3.60k|                        pos.each_right(dec_visitor{}, idx + 1);
  965|  3.60k|                        node->ensure_mutable_relaxed_n(e, idx)->d.count = idx;
  966|  3.60k|                        return std::make_tuple(pos.shift(), node, ts, tail);
  967|  3.60k|                    } else {
  968|    906|                        auto newn = node_t::copy_inner_r_e(e, node, idx);
  969|    906|                        if (Mutating)
  ------------------
  |  Branch (969:29): [Folded - Ignored]
  ------------------
  970|    906|                            pos.visit(dec_visitor{});
  971|    906|                        return std::make_tuple(pos.shift(), newn, ts, tail);
  972|    906|                    }
  973|  4.50k|                }
  974|  13.7k|            }
  975|  13.7k|            IMMER_CATCH (...) {
  976|      0|                assert(!mutate);
  977|      0|                assert(!next || pos.shift() > BL);
  978|      0|                if (next)
  ------------------
  |  Branch (978:21): [True: 0, False: 0]
  ------------------
  979|      0|                    dec_inner(next,
  980|      0|                              pos.shift() - B,
  981|      0|                              last + 1 - ts - pos.size_before(idx));
  982|      0|                dec_leaf(tail, ts);
  983|      0|                IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
  984|      0|            }
  985|  13.7k|        }
  986|  13.7k|    }
_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:
  990|  6.28k|    {
  991|  6.28k|        auto idx    = pos.index(last);
  992|  6.28k|        auto node   = pos.node();
  993|  6.28k|        auto mutate = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (993:23): [Folded - Ignored]
  |  Branch (993:35): [True: 5.39k, False: 894]
  ------------------
  994|  6.28k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (994:13): [Folded - Ignored]
  |  Branch (994:25): [True: 0, False: 0]
  ------------------
  995|      0|            auto res = mutate ? pos.towards_oh(this_t{}, last, idx, e)
  ------------------
  |  Branch (995:24): [True: 0, False: 0]
  ------------------
  996|      0|                              : pos.towards_oh(no_mut_t{}, last, idx, e);
  997|      0|            if (Mutating)
  ------------------
  |  Branch (997:17): [Folded - Ignored]
  ------------------
  998|      0|                pos.visit(dec_right_visitor{}, count_t{1});
  999|      0|            return res;
 1000|  6.28k|        } else {
 1001|  6.28k|            using std::get;
 1002|  6.28k|            auto subs =
 1003|  6.28k|                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
  ------------------
  |  Branch (1003:17): [True: 5.39k, False: 894]
  ------------------
 1004|  6.28k|                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
 1005|  6.28k|            auto next = get<1>(subs);
 1006|  6.28k|            auto ts   = get<2>(subs);
 1007|  6.28k|            auto tail = get<3>(subs);
 1008|  6.28k|            IMMER_TRY {
  ------------------
  |  |   41|  6.28k|#define IMMER_TRY try
  ------------------
 1009|  6.28k|                if (next) {
  ------------------
  |  Branch (1009:21): [True: 2.57k, False: 3.70k]
  ------------------
 1010|  2.57k|                    if (mutate) {
  ------------------
  |  Branch (1010:25): [True: 2.25k, False: 326]
  ------------------
 1011|  2.25k|                        node->inner()[idx] = next;
 1012|  2.25k|                        pos.each_right(dec_visitor{}, idx + 1);
 1013|  2.25k|                        return std::make_tuple(pos.shift(), node, ts, tail);
 1014|  2.25k|                    } else {
 1015|    326|                        auto newn          = node_t::copy_inner_e(e, node, idx);
 1016|    326|                        newn->inner()[idx] = next;
 1017|    326|                        if (Mutating)
  ------------------
  |  Branch (1017:29): [Folded - Ignored]
  ------------------
 1018|    326|                            pos.visit(dec_visitor{});
 1019|    326|                        return std::make_tuple(pos.shift(), newn, ts, tail);
 1020|    326|                    }
 1021|  3.70k|                } else if (idx == 0) {
  ------------------
  |  Branch (1021:28): [True: 1.26k, False: 2.44k]
  ------------------
 1022|  1.26k|                    if (Mutating)
  ------------------
  |  Branch (1022:25): [Folded - Ignored]
  ------------------
 1023|  1.26k|                        pos.visit(dec_right_visitor{}, count_t{1});
 1024|  1.26k|                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
 1025|  2.44k|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (1025:28): [Folded - Ignored]
  |  Branch (1025:40): [True: 0, False: 0]
  |  Branch (1025:52): [True: 0, False: 0]
  ------------------
 1026|      0|                    auto newn = pos.node()->inner()[0];
 1027|      0|                    if (!mutate)
  ------------------
  |  Branch (1027:25): [True: 0, False: 0]
  ------------------
 1028|      0|                        newn->inc();
 1029|      0|                    if (Mutating)
  ------------------
  |  Branch (1029:25): [Folded - Ignored]
  ------------------
 1030|      0|                        pos.visit(dec_right_visitor{}, count_t{2});
 1031|      0|                    return std::make_tuple(pos.shift() - B, newn, ts, tail);
 1032|  2.44k|                } else {
 1033|  2.44k|                    if (mutate) {
  ------------------
  |  Branch (1033:25): [True: 2.16k, False: 276]
  ------------------
 1034|  2.16k|                        pos.each_right(dec_visitor{}, idx + 1);
 1035|  2.16k|                        return std::make_tuple(pos.shift(), node, ts, tail);
 1036|  2.16k|                    } else {
 1037|    276|                        auto newn = node_t::copy_inner_e(e, node, idx);
 1038|    276|                        if (Mutating)
  ------------------
  |  Branch (1038:29): [Folded - Ignored]
  ------------------
 1039|    276|                            pos.visit(dec_visitor{});
 1040|    276|                        return std::make_tuple(pos.shift(), newn, ts, tail);
 1041|    276|                    }
 1042|  2.44k|                }
 1043|  6.28k|            }
 1044|  6.28k|            IMMER_CATCH (...) {
 1045|      0|                assert(!mutate);
 1046|      0|                assert(!next || pos.shift() > BL);
 1047|      0|                assert(tail);
 1048|      0|                if (next)
  ------------------
  |  Branch (1048:21): [True: 0, False: 0]
  ------------------
 1049|      0|                    dec_regular(next, pos.shift() - B, last + 1 - ts);
 1050|      0|                dec_leaf(tail, ts);
 1051|      0|                IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1052|      0|            }
 1053|  6.28k|        }
 1054|  6.28k|    }
_ZN5immer6detail4rbts17dec_right_visitor13visit_regularIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEEEvOT_j:
  877|  11.8k|    {
  878|  11.8k|        using node_t = node_type<Pos>;
  879|  11.8k|        auto node    = p.node();
  880|  11.8k|        if (node->dec()) {
  ------------------
  |  Branch (880:13): [True: 8.55k, False: 3.26k]
  ------------------
  881|  8.55k|            p.each_right(dec_t{}, idx);
  882|  8.55k|            node_t::delete_inner(node, p.count());
  883|  8.55k|        }
  884|  11.8k|    }
_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:
 1058|  6.85k|    {
 1059|  6.85k|        auto old_tail_size = pos.count();
 1060|  6.85k|        auto new_tail_size = pos.index(last) + 1;
 1061|  6.85k|        auto node          = pos.node();
 1062|  6.85k|        auto mutate        = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (1062:30): [Folded - Ignored]
  |  Branch (1062:42): [True: 0, False: 0]
  ------------------
 1063|  6.85k|        if (new_tail_size == old_tail_size) {
  ------------------
  |  Branch (1063:13): [True: 2.49k, False: 4.36k]
  ------------------
 1064|  2.49k|            if (!Mutating)
  ------------------
  |  Branch (1064:17): [Folded - Ignored]
  ------------------
 1065|  2.49k|                node->inc();
 1066|  2.49k|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1067|  4.36k|        } else if (mutate) {
  ------------------
  |  Branch (1067:20): [True: 0, False: 4.36k]
  ------------------
 1068|      0|            detail::destroy_n(node->leaf() + new_tail_size,
 1069|      0|                              old_tail_size - new_tail_size);
 1070|      0|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1071|  4.36k|        } else {
 1072|  4.36k|            auto new_tail = node_t::copy_leaf_e(e, node, new_tail_size);
 1073|  4.36k|            if (Mutating)
  ------------------
  |  Branch (1073:17): [Folded - Ignored]
  ------------------
 1074|      0|                pos.visit(dec_visitor{});
 1075|  4.36k|            return std::make_tuple(0, nullptr, new_tail_size, new_tail);
 1076|  4.36k|        }
 1077|  6.85k|    }
_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:
  912|  9.24k|    {
  913|  9.24k|        auto idx    = pos.index(last);
  914|  9.24k|        auto node   = pos.node();
  915|  9.24k|        auto mutate = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (915:23): [Folded - Ignored]
  |  Branch (915:35): [True: 0, False: 0]
  ------------------
  916|  9.24k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (916:13): [Folded - Ignored]
  |  Branch (916:25): [True: 0, False: 0]
  ------------------
  917|      0|            auto res = mutate ? pos.towards_oh(this_t{}, last, idx, e)
  ------------------
  |  Branch (917:24): [True: 0, False: 0]
  ------------------
  918|      0|                              : pos.towards_oh(no_mut_t{}, last, idx, e);
  919|      0|            if (Mutating)
  ------------------
  |  Branch (919:17): [Folded - Ignored]
  ------------------
  920|      0|                pos.visit(dec_right_visitor{}, count_t{1});
  921|      0|            return res;
  922|  9.24k|        } else {
  923|  9.24k|            using std::get;
  924|  9.24k|            auto subs =
  925|  9.24k|                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
  ------------------
  |  Branch (925:17): [True: 0, False: 9.24k]
  ------------------
  926|  9.24k|                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
  927|  9.24k|            auto next = get<1>(subs);
  928|  9.24k|            auto ts   = get<2>(subs);
  929|  9.24k|            auto tail = get<3>(subs);
  930|  9.24k|            IMMER_TRY {
  ------------------
  |  |   41|  9.24k|#define IMMER_TRY try
  ------------------
  931|  9.24k|                if (next) {
  ------------------
  |  Branch (931:21): [True: 3.58k, False: 5.66k]
  ------------------
  932|  3.58k|                    if (mutate) {
  ------------------
  |  Branch (932:25): [True: 0, False: 3.58k]
  ------------------
  933|      0|                        auto nodr = node->ensure_mutable_relaxed_n(e, idx);
  934|      0|                        pos.each_right(dec_visitor{}, idx + 1);
  935|      0|                        node->inner()[idx] = next;
  936|      0|                        nodr->d.sizes[idx] = last + 1 - ts;
  937|      0|                        nodr->d.count      = idx + 1;
  938|      0|                        assert(nodr->d.sizes[idx]);
  939|      0|                        return std::make_tuple(pos.shift(), node, ts, tail);
  940|  3.58k|                    } else {
  941|  3.58k|                        auto newn = node_t::copy_inner_r_e(e, node, idx);
  942|  3.58k|                        auto newr = newn->relaxed();
  943|  3.58k|                        newn->inner()[idx] = next;
  944|  3.58k|                        newr->d.sizes[idx] = last + 1 - ts;
  945|  3.58k|                        newr->d.count      = idx + 1;
  946|  3.58k|                        assert(newr->d.sizes[idx]);
  947|  3.58k|                        if (Mutating)
  ------------------
  |  Branch (947:29): [Folded - Ignored]
  ------------------
  948|      0|                            pos.visit(dec_visitor{});
  949|  3.58k|                        return std::make_tuple(pos.shift(), newn, ts, tail);
  950|  3.58k|                    }
  951|  5.66k|                } else if (idx == 0) {
  ------------------
  |  Branch (951:28): [True: 2.24k, False: 3.42k]
  ------------------
  952|  2.24k|                    if (Mutating)
  ------------------
  |  Branch (952:25): [Folded - Ignored]
  ------------------
  953|      0|                        pos.visit(dec_right_visitor{}, count_t{1});
  954|  2.24k|                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
  955|  3.42k|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (955:28): [Folded - Ignored]
  |  Branch (955:40): [True: 0, False: 0]
  |  Branch (955:52): [True: 0, False: 0]
  ------------------
  956|      0|                    auto newn = pos.node()->inner()[0];
  957|      0|                    if (!mutate)
  ------------------
  |  Branch (957:25): [True: 0, False: 0]
  ------------------
  958|      0|                        newn->inc();
  959|      0|                    if (Mutating)
  ------------------
  |  Branch (959:25): [Folded - Ignored]
  ------------------
  960|      0|                        pos.visit(dec_right_visitor{}, count_t{2});
  961|      0|                    return std::make_tuple(pos.shift() - B, newn, ts, tail);
  962|  3.42k|                } else {
  963|  3.42k|                    if (mutate) {
  ------------------
  |  Branch (963:25): [True: 0, False: 3.42k]
  ------------------
  964|      0|                        pos.each_right(dec_visitor{}, idx + 1);
  965|      0|                        node->ensure_mutable_relaxed_n(e, idx)->d.count = idx;
  966|      0|                        return std::make_tuple(pos.shift(), node, ts, tail);
  967|  3.42k|                    } else {
  968|  3.42k|                        auto newn = node_t::copy_inner_r_e(e, node, idx);
  969|  3.42k|                        if (Mutating)
  ------------------
  |  Branch (969:29): [Folded - Ignored]
  ------------------
  970|      0|                            pos.visit(dec_visitor{});
  971|  3.42k|                        return std::make_tuple(pos.shift(), newn, ts, tail);
  972|  3.42k|                    }
  973|  3.42k|                }
  974|  9.24k|            }
  975|  9.24k|            IMMER_CATCH (...) {
  976|      0|                assert(!mutate);
  977|      0|                assert(!next || pos.shift() > BL);
  978|      0|                if (next)
  ------------------
  |  Branch (978:21): [True: 0, False: 0]
  ------------------
  979|      0|                    dec_inner(next,
  980|      0|                              pos.shift() - B,
  981|      0|                              last + 1 - ts - pos.size_before(idx));
  982|      0|                dec_leaf(tail, ts);
  983|      0|                IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
  984|      0|            }
  985|  9.24k|        }
  986|  9.24k|    }
_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:
  990|  2.54k|    {
  991|  2.54k|        auto idx    = pos.index(last);
  992|  2.54k|        auto node   = pos.node();
  993|  2.54k|        auto mutate = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (993:23): [Folded - Ignored]
  |  Branch (993:35): [True: 0, False: 0]
  ------------------
  994|  2.54k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (994:13): [Folded - Ignored]
  |  Branch (994:25): [True: 0, False: 0]
  ------------------
  995|      0|            auto res = mutate ? pos.towards_oh(this_t{}, last, idx, e)
  ------------------
  |  Branch (995:24): [True: 0, False: 0]
  ------------------
  996|      0|                              : pos.towards_oh(no_mut_t{}, last, idx, e);
  997|      0|            if (Mutating)
  ------------------
  |  Branch (997:17): [Folded - Ignored]
  ------------------
  998|      0|                pos.visit(dec_right_visitor{}, count_t{1});
  999|      0|            return res;
 1000|  2.54k|        } else {
 1001|  2.54k|            using std::get;
 1002|  2.54k|            auto subs =
 1003|  2.54k|                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
  ------------------
  |  Branch (1003:17): [True: 0, False: 2.54k]
  ------------------
 1004|  2.54k|                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
 1005|  2.54k|            auto next = get<1>(subs);
 1006|  2.54k|            auto ts   = get<2>(subs);
 1007|  2.54k|            auto tail = get<3>(subs);
 1008|  2.54k|            IMMER_TRY {
  ------------------
  |  |   41|  2.54k|#define IMMER_TRY try
  ------------------
 1009|  2.54k|                if (next) {
  ------------------
  |  Branch (1009:21): [True: 1.01k, False: 1.53k]
  ------------------
 1010|  1.01k|                    if (mutate) {
  ------------------
  |  Branch (1010:25): [True: 0, False: 1.01k]
  ------------------
 1011|      0|                        node->inner()[idx] = next;
 1012|      0|                        pos.each_right(dec_visitor{}, idx + 1);
 1013|      0|                        return std::make_tuple(pos.shift(), node, ts, tail);
 1014|  1.01k|                    } else {
 1015|  1.01k|                        auto newn          = node_t::copy_inner_e(e, node, idx);
 1016|  1.01k|                        newn->inner()[idx] = next;
 1017|  1.01k|                        if (Mutating)
  ------------------
  |  Branch (1017:29): [Folded - Ignored]
  ------------------
 1018|      0|                            pos.visit(dec_visitor{});
 1019|  1.01k|                        return std::make_tuple(pos.shift(), newn, ts, tail);
 1020|  1.01k|                    }
 1021|  1.53k|                } else if (idx == 0) {
  ------------------
  |  Branch (1021:28): [True: 929, False: 602]
  ------------------
 1022|    929|                    if (Mutating)
  ------------------
  |  Branch (1022:25): [Folded - Ignored]
  ------------------
 1023|      0|                        pos.visit(dec_right_visitor{}, count_t{1});
 1024|    929|                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
 1025|    929|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (1025:28): [Folded - Ignored]
  |  Branch (1025:40): [True: 0, False: 0]
  |  Branch (1025:52): [True: 0, False: 0]
  ------------------
 1026|      0|                    auto newn = pos.node()->inner()[0];
 1027|      0|                    if (!mutate)
  ------------------
  |  Branch (1027:25): [True: 0, False: 0]
  ------------------
 1028|      0|                        newn->inc();
 1029|      0|                    if (Mutating)
  ------------------
  |  Branch (1029:25): [Folded - Ignored]
  ------------------
 1030|      0|                        pos.visit(dec_right_visitor{}, count_t{2});
 1031|      0|                    return std::make_tuple(pos.shift() - B, newn, ts, tail);
 1032|    602|                } else {
 1033|    602|                    if (mutate) {
  ------------------
  |  Branch (1033:25): [True: 0, False: 602]
  ------------------
 1034|      0|                        pos.each_right(dec_visitor{}, idx + 1);
 1035|      0|                        return std::make_tuple(pos.shift(), node, ts, tail);
 1036|    602|                    } else {
 1037|    602|                        auto newn = node_t::copy_inner_e(e, node, idx);
 1038|    602|                        if (Mutating)
  ------------------
  |  Branch (1038:29): [Folded - Ignored]
  ------------------
 1039|      0|                            pos.visit(dec_visitor{});
 1040|    602|                        return std::make_tuple(pos.shift(), newn, ts, tail);
 1041|    602|                    }
 1042|    602|                }
 1043|  2.54k|            }
 1044|  2.54k|            IMMER_CATCH (...) {
 1045|      0|                assert(!mutate);
 1046|      0|                assert(!next || pos.shift() > BL);
 1047|      0|                assert(tail);
 1048|      0|                if (next)
  ------------------
  |  Branch (1048:21): [True: 0, False: 0]
  ------------------
 1049|      0|                    dec_regular(next, pos.shift() - B, last + 1 - ts);
 1050|      0|                dec_leaf(tail, ts);
 1051|      0|                IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1052|      0|            }
 1053|  2.54k|        }
 1054|  2.54k|    }
_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:
  990|  13.4k|    {
  991|  13.4k|        auto idx    = pos.index(last);
  992|  13.4k|        auto node   = pos.node();
  993|  13.4k|        auto mutate = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (993:23): [Folded - Ignored]
  |  Branch (993:35): [True: 9.59k, False: 3.86k]
  ------------------
  994|  13.4k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (994:13): [Folded - Ignored]
  |  Branch (994:25): [True: 8.23k, False: 5.21k]
  ------------------
  995|  8.23k|            auto res = mutate ? pos.towards_oh(this_t{}, last, idx, e)
  ------------------
  |  Branch (995:24): [True: 5.91k, False: 2.31k]
  ------------------
  996|  8.23k|                              : pos.towards_oh(no_mut_t{}, last, idx, e);
  997|  8.23k|            if (Mutating)
  ------------------
  |  Branch (997:17): [Folded - Ignored]
  ------------------
  998|  8.23k|                pos.visit(dec_right_visitor{}, count_t{1});
  999|  8.23k|            return res;
 1000|  8.23k|        } else {
 1001|  5.21k|            using std::get;
 1002|  5.21k|            auto subs =
 1003|  5.21k|                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
  ------------------
  |  Branch (1003:17): [True: 3.67k, False: 1.54k]
  ------------------
 1004|  5.21k|                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
 1005|  5.21k|            auto next = get<1>(subs);
 1006|  5.21k|            auto ts   = get<2>(subs);
 1007|  5.21k|            auto tail = get<3>(subs);
 1008|  5.21k|            IMMER_TRY {
  ------------------
  |  |   41|  5.21k|#define IMMER_TRY try
  ------------------
 1009|  5.21k|                if (next) {
  ------------------
  |  Branch (1009:21): [True: 756, False: 4.46k]
  ------------------
 1010|    756|                    if (mutate) {
  ------------------
  |  Branch (1010:25): [True: 534, False: 222]
  ------------------
 1011|    534|                        node->inner()[idx] = next;
 1012|    534|                        pos.each_right(dec_visitor{}, idx + 1);
 1013|    534|                        return std::make_tuple(pos.shift(), node, ts, tail);
 1014|    534|                    } else {
 1015|    222|                        auto newn          = node_t::copy_inner_e(e, node, idx);
 1016|    222|                        newn->inner()[idx] = next;
 1017|    222|                        if (Mutating)
  ------------------
  |  Branch (1017:29): [Folded - Ignored]
  ------------------
 1018|    222|                            pos.visit(dec_visitor{});
 1019|    222|                        return std::make_tuple(pos.shift(), newn, ts, tail);
 1020|    222|                    }
 1021|  4.46k|                } else if (idx == 0) {
  ------------------
  |  Branch (1021:28): [True: 0, False: 4.46k]
  ------------------
 1022|      0|                    if (Mutating)
  ------------------
  |  Branch (1022:25): [Folded - Ignored]
  ------------------
 1023|      0|                        pos.visit(dec_right_visitor{}, count_t{1});
 1024|      0|                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
 1025|  4.46k|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (1025:28): [Folded - Ignored]
  |  Branch (1025:40): [True: 3.69k, False: 769]
  |  Branch (1025:52): [True: 2.32k, False: 1.37k]
  ------------------
 1026|  2.32k|                    auto newn = pos.node()->inner()[0];
 1027|  2.32k|                    if (!mutate)
  ------------------
  |  Branch (1027:25): [True: 652, False: 1.67k]
  ------------------
 1028|    652|                        newn->inc();
 1029|  2.32k|                    if (Mutating)
  ------------------
  |  Branch (1029:25): [Folded - Ignored]
  ------------------
 1030|  2.32k|                        pos.visit(dec_right_visitor{}, count_t{2});
 1031|  2.32k|                    return std::make_tuple(pos.shift() - B, newn, ts, tail);
 1032|  2.32k|                } else {
 1033|  2.14k|                    if (mutate) {
  ------------------
  |  Branch (1033:25): [True: 1.46k, False: 672]
  ------------------
 1034|  1.46k|                        pos.each_right(dec_visitor{}, idx + 1);
 1035|  1.46k|                        return std::make_tuple(pos.shift(), node, ts, tail);
 1036|  1.46k|                    } else {
 1037|    672|                        auto newn = node_t::copy_inner_e(e, node, idx);
 1038|    672|                        if (Mutating)
  ------------------
  |  Branch (1038:29): [Folded - Ignored]
  ------------------
 1039|    672|                            pos.visit(dec_visitor{});
 1040|    672|                        return std::make_tuple(pos.shift(), newn, ts, tail);
 1041|    672|                    }
 1042|  2.14k|                }
 1043|  5.21k|            }
 1044|  5.21k|            IMMER_CATCH (...) {
 1045|      0|                assert(!mutate);
 1046|      0|                assert(!next || pos.shift() > BL);
 1047|      0|                assert(tail);
 1048|      0|                if (next)
  ------------------
  |  Branch (1048:21): [True: 0, False: 0]
  ------------------
 1049|      0|                    dec_regular(next, pos.shift() - B, last + 1 - ts);
 1050|      0|                dec_leaf(tail, ts);
 1051|      0|                IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1052|      0|            }
 1053|  5.21k|        }
 1054|  13.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:
 1058|  2.44k|    {
 1059|  2.44k|        auto old_tail_size = pos.count();
 1060|  2.44k|        auto new_tail_size = pos.index(last) + 1;
 1061|  2.44k|        auto node          = pos.node();
 1062|  2.44k|        auto mutate        = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (1062:30): [Folded - Ignored]
  |  Branch (1062:42): [True: 1.01k, False: 1.42k]
  ------------------
 1063|  2.44k|        if (new_tail_size == old_tail_size) {
  ------------------
  |  Branch (1063:13): [True: 879, False: 1.56k]
  ------------------
 1064|    879|            if (!Mutating)
  ------------------
  |  Branch (1064:17): [Folded - Ignored]
  ------------------
 1065|      0|                node->inc();
 1066|    879|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1067|  1.56k|        } else if (mutate) {
  ------------------
  |  Branch (1067:20): [True: 393, False: 1.17k]
  ------------------
 1068|    393|            detail::destroy_n(node->leaf() + new_tail_size,
 1069|    393|                              old_tail_size - new_tail_size);
 1070|    393|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1071|  1.17k|        } else {
 1072|  1.17k|            auto new_tail = node_t::copy_leaf_e(e, node, new_tail_size);
 1073|  1.17k|            if (Mutating)
  ------------------
  |  Branch (1073:17): [Folded - Ignored]
  ------------------
 1074|  1.17k|                pos.visit(dec_visitor{});
 1075|  1.17k|            return std::make_tuple(0, nullptr, new_tail_size, new_tail);
 1076|  1.17k|        }
 1077|  2.44k|    }
_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:
  990|  4.56k|    {
  991|  4.56k|        auto idx    = pos.index(last);
  992|  4.56k|        auto node   = pos.node();
  993|  4.56k|        auto mutate = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (993:23): [Folded - Ignored]
  |  Branch (993:35): [True: 2.55k, False: 2.00k]
  ------------------
  994|  4.56k|        if (Collapse && idx == 0) {
  ------------------
  |  Branch (994:13): [Folded - Ignored]
  |  Branch (994:25): [True: 2.35k, False: 2.20k]
  ------------------
  995|  2.35k|            auto res = mutate ? pos.towards_oh(this_t{}, last, idx, e)
  ------------------
  |  Branch (995:24): [True: 1.77k, False: 584]
  ------------------
  996|  2.35k|                              : pos.towards_oh(no_mut_t{}, last, idx, e);
  997|  2.35k|            if (Mutating)
  ------------------
  |  Branch (997:17): [Folded - Ignored]
  ------------------
  998|  2.35k|                pos.visit(dec_right_visitor{}, count_t{1});
  999|  2.35k|            return res;
 1000|  2.35k|        } else {
 1001|  2.20k|            using std::get;
 1002|  2.20k|            auto subs =
 1003|  2.20k|                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
  ------------------
  |  Branch (1003:17): [True: 783, False: 1.41k]
  ------------------
 1004|  2.20k|                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
 1005|  2.20k|            auto next = get<1>(subs);
 1006|  2.20k|            auto ts   = get<2>(subs);
 1007|  2.20k|            auto tail = get<3>(subs);
 1008|  2.20k|            IMMER_TRY {
  ------------------
  |  |   41|  2.20k|#define IMMER_TRY try
  ------------------
 1009|  2.20k|                if (next) {
  ------------------
  |  Branch (1009:21): [True: 445, False: 1.75k]
  ------------------
 1010|    445|                    if (mutate) {
  ------------------
  |  Branch (1010:25): [True: 250, False: 195]
  ------------------
 1011|    250|                        node->inner()[idx] = next;
 1012|    250|                        pos.each_right(dec_visitor{}, idx + 1);
 1013|    250|                        return std::make_tuple(pos.shift(), node, ts, tail);
 1014|    250|                    } else {
 1015|    195|                        auto newn          = node_t::copy_inner_e(e, node, idx);
 1016|    195|                        newn->inner()[idx] = next;
 1017|    195|                        if (Mutating)
  ------------------
  |  Branch (1017:29): [Folded - Ignored]
  ------------------
 1018|    195|                            pos.visit(dec_visitor{});
 1019|    195|                        return std::make_tuple(pos.shift(), newn, ts, tail);
 1020|    195|                    }
 1021|  1.75k|                } else if (idx == 0) {
  ------------------
  |  Branch (1021:28): [True: 0, False: 1.75k]
  ------------------
 1022|      0|                    if (Mutating)
  ------------------
  |  Branch (1022:25): [Folded - Ignored]
  ------------------
 1023|      0|                        pos.visit(dec_right_visitor{}, count_t{1});
 1024|      0|                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
 1025|  1.75k|                } else if (Collapse && idx == 1 && pos.shift() > BL) {
  ------------------
  |  Branch (1025:28): [Folded - Ignored]
  |  Branch (1025:40): [True: 1.24k, False: 514]
  |  Branch (1025:52): [True: 413, False: 830]
  ------------------
 1026|    413|                    auto newn = pos.node()->inner()[0];
 1027|    413|                    if (!mutate)
  ------------------
  |  Branch (1027:25): [True: 197, False: 216]
  ------------------
 1028|    197|                        newn->inc();
 1029|    413|                    if (Mutating)
  ------------------
  |  Branch (1029:25): [Folded - Ignored]
  ------------------
 1030|    413|                        pos.visit(dec_right_visitor{}, count_t{2});
 1031|    413|                    return std::make_tuple(pos.shift() - B, newn, ts, tail);
 1032|  1.34k|                } else {
 1033|  1.34k|                    if (mutate) {
  ------------------
  |  Branch (1033:25): [True: 317, False: 1.02k]
  ------------------
 1034|    317|                        pos.each_right(dec_visitor{}, idx + 1);
 1035|    317|                        return std::make_tuple(pos.shift(), node, ts, tail);
 1036|  1.02k|                    } else {
 1037|  1.02k|                        auto newn = node_t::copy_inner_e(e, node, idx);
 1038|  1.02k|                        if (Mutating)
  ------------------
  |  Branch (1038:29): [Folded - Ignored]
  ------------------
 1039|  1.02k|                            pos.visit(dec_visitor{});
 1040|  1.02k|                        return std::make_tuple(pos.shift(), newn, ts, tail);
 1041|  1.02k|                    }
 1042|  1.34k|                }
 1043|  2.20k|            }
 1044|  2.20k|            IMMER_CATCH (...) {
 1045|      0|                assert(!mutate);
 1046|      0|                assert(!next || pos.shift() > BL);
 1047|      0|                assert(tail);
 1048|      0|                if (next)
  ------------------
  |  Branch (1048:21): [True: 0, False: 0]
  ------------------
 1049|      0|                    dec_regular(next, pos.shift() - B, last + 1 - ts);
 1050|      0|                dec_leaf(tail, ts);
 1051|      0|                IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1052|      0|            }
 1053|  2.20k|        }
 1054|  4.56k|    }
_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:
 1058|    685|    {
 1059|    685|        auto old_tail_size = pos.count();
 1060|    685|        auto new_tail_size = pos.index(last) + 1;
 1061|    685|        auto node          = pos.node();
 1062|    685|        auto mutate        = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (1062:30): [Folded - Ignored]
  |  Branch (1062:42): [True: 247, False: 438]
  ------------------
 1063|    685|        if (new_tail_size == old_tail_size) {
  ------------------
  |  Branch (1063:13): [True: 220, False: 465]
  ------------------
 1064|    220|            if (!Mutating)
  ------------------
  |  Branch (1064:17): [Folded - Ignored]
  ------------------
 1065|      0|                node->inc();
 1066|    220|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1067|    465|        } else if (mutate) {
  ------------------
  |  Branch (1067:20): [True: 235, False: 230]
  ------------------
 1068|    235|            detail::destroy_n(node->leaf() + new_tail_size,
 1069|    235|                              old_tail_size - new_tail_size);
 1070|    235|            return std::make_tuple(0, nullptr, new_tail_size, node);
 1071|    235|        } else {
 1072|    230|            auto new_tail = node_t::copy_leaf_e(e, node, new_tail_size);
 1073|    230|            if (Mutating)
  ------------------
  |  Branch (1073:17): [Folded - Ignored]
  ------------------
 1074|    230|                pos.visit(dec_visitor{});
 1075|    230|            return std::make_tuple(0, nullptr, new_tail_size, new_tail);
 1076|    230|        }
 1077|    685|    }
_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:
 1376|    743|    {
 1377|    743|        auto node   = pos.node();
 1378|    743|        auto idx    = pos.index(first);
 1379|    743|        auto count  = pos.count();
 1380|    743|        auto mutate = Mutating &&
  ------------------
  |  Branch (1380:23): [Folded - Ignored]
  ------------------
 1381|    743|                      std::is_nothrow_move_constructible<value_t>::value &&
  ------------------
  |  Branch (1381:23): [Folded - Ignored]
  ------------------
 1382|    743|                      node->can_mutate(e);
  ------------------
  |  Branch (1382:23): [True: 497, False: 246]
  ------------------
 1383|    743|        if (mutate) {
  ------------------
  |  Branch (1383:13): [True: 497, False: 246]
  ------------------
 1384|    497|            auto data     = node->leaf();
 1385|    497|            auto newcount = count - idx;
 1386|    497|            std::move(data + idx, data + count, data);
 1387|    497|            detail::destroy_n(data + newcount, idx);
 1388|    497|            return std::make_tuple(0, node);
 1389|    497|        } else {
 1390|    246|            auto newn = node_t::copy_leaf_e(e, node, idx, count);
 1391|    246|            if (Mutating)
  ------------------
  |  Branch (1391:17): [Folded - Ignored]
  ------------------
 1392|    246|                pos.visit(dec_visitor{});
 1393|    246|            return std::make_tuple(0, newn);
 1394|    246|        }
 1395|    743|    }
_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:
 1245|  35.7k|    {
 1246|  35.7k|        auto idx                = pos.subindex(first);
 1247|  35.7k|        auto count              = pos.count();
 1248|  35.7k|        auto node               = pos.node();
 1249|  35.7k|        auto mutate             = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (1249:35): [Folded - Ignored]
  |  Branch (1249:47): [True: 26.9k, False: 8.83k]
  ------------------
 1250|  35.7k|        auto left_size          = pos.size_before(idx);
 1251|  35.7k|        auto child_size         = pos.size_sbh(idx, left_size);
 1252|  35.7k|        auto dropped_size       = first;
 1253|  35.7k|        auto child_dropped_size = dropped_size - left_size;
 1254|  35.7k|        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
  ------------------
  |  Branch (1254:13): [Folded - Ignored]
  |  Branch (1254:25): [True: 33.8k, False: 1.93k]
  |  Branch (1254:45): [True: 8.42k, False: 25.3k]
  ------------------
 1255|  8.42k|            auto r = mutate ? pos.towards_sub_oh(this_t{}, first, idx, e)
  ------------------
  |  Branch (1255:22): [True: 4.42k, False: 3.99k]
  ------------------
 1256|  8.42k|                            : pos.towards_sub_oh(no_mut_t{}, first, idx, e);
 1257|  8.42k|            if (mutate)
  ------------------
  |  Branch (1257:17): [True: 4.42k, False: 3.99k]
  ------------------
 1258|  4.42k|                pos.visit(dec_left_visitor{}, idx);
 1259|  3.99k|            else if (Mutating)
  ------------------
  |  Branch (1259:22): [Folded - Ignored]
  ------------------
 1260|  3.99k|                pos.visit(dec_visitor{});
 1261|  8.42k|            return r;
 1262|  27.3k|        } else {
 1263|  27.3k|            using std::get;
 1264|  27.3k|            auto newn     = mutate ? (node->ensure_mutable_relaxed(e), node)
  ------------------
  |  Branch (1264:29): [True: 22.4k, False: 4.83k]
  ------------------
 1265|  27.3k|                                   : node_t::make_inner_r_e(e);
 1266|  27.3k|            auto newr     = newn->relaxed();
 1267|  27.3k|            auto newcount = count - idx;
 1268|  27.3k|            auto new_child_size = child_size - child_dropped_size;
 1269|  27.3k|            IMMER_TRY {
  ------------------
  |  |   41|  27.3k|#define IMMER_TRY try
  ------------------
 1270|  27.3k|                auto subs =
 1271|  27.3k|                    mutate ? pos.towards_sub_oh(no_collapse_t{}, first, idx, e)
  ------------------
  |  Branch (1271:21): [True: 22.4k, False: 4.83k]
  ------------------
 1272|  27.3k|                           : pos.towards_sub_oh(
 1273|  4.83k|                                 no_collapse_no_mut_t{}, first, idx, e);
 1274|  27.3k|                if (mutate)
  ------------------
  |  Branch (1274:21): [True: 22.4k, False: 4.83k]
  ------------------
 1275|  22.4k|                    pos.each_left(dec_visitor{}, idx);
 1276|  27.3k|                pos.copy_sizes(
 1277|  27.3k|                    idx + 1, newcount - 1, new_child_size, newr->d.sizes + 1);
 1278|  27.3k|                std::copy(node->inner() + idx + 1,
 1279|  27.3k|                          node->inner() + count,
 1280|  27.3k|                          newn->inner() + 1);
 1281|  27.3k|                newn->inner()[0] = get<1>(subs);
 1282|  27.3k|                newr->d.sizes[0] = new_child_size;
 1283|  27.3k|                newr->d.count    = newcount;
 1284|  27.3k|                assert(new_child_size);
 1285|  27.3k|                if (!mutate) {
  ------------------
  |  Branch (1285:21): [True: 4.83k, False: 22.4k]
  ------------------
 1286|  4.83k|                    node_t::inc_nodes(newn->inner() + 1, newcount - 1);
 1287|  4.83k|                    if (Mutating)
  ------------------
  |  Branch (1287:25): [Folded - Ignored]
  ------------------
 1288|  4.83k|                        pos.visit(dec_visitor{});
 1289|  4.83k|                }
 1290|  27.3k|                return std::make_tuple(pos.shift(), newn);
 1291|  27.3k|            }
 1292|  27.3k|            IMMER_CATCH (...) {
 1293|      0|                if (!mutate)
  ------------------
  |  Branch (1293:21): [True: 0, False: 0]
  ------------------
 1294|      0|                    node_t::delete_inner_r_e(newn);
 1295|      0|                IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1296|      0|            }
 1297|  27.3k|        }
 1298|  35.7k|    }
_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:
 1245|  4.41k|    {
 1246|  4.41k|        auto idx                = pos.subindex(first);
 1247|  4.41k|        auto count              = pos.count();
 1248|  4.41k|        auto node               = pos.node();
 1249|  4.41k|        auto mutate             = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (1249:35): [Folded - Ignored]
  |  Branch (1249:47): [True: 0, False: 0]
  ------------------
 1250|  4.41k|        auto left_size          = pos.size_before(idx);
 1251|  4.41k|        auto child_size         = pos.size_sbh(idx, left_size);
 1252|  4.41k|        auto dropped_size       = first;
 1253|  4.41k|        auto child_dropped_size = dropped_size - left_size;
 1254|  4.41k|        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
  ------------------
  |  Branch (1254:13): [Folded - Ignored]
  |  Branch (1254:25): [True: 2.97k, False: 1.44k]
  |  Branch (1254:45): [True: 2.28k, False: 684]
  ------------------
 1255|  2.28k|            auto r = mutate ? pos.towards_sub_oh(this_t{}, first, idx, e)
  ------------------
  |  Branch (1255:22): [True: 0, False: 2.28k]
  ------------------
 1256|  2.28k|                            : pos.towards_sub_oh(no_mut_t{}, first, idx, e);
 1257|  2.28k|            if (mutate)
  ------------------
  |  Branch (1257:17): [True: 0, False: 2.28k]
  ------------------
 1258|      0|                pos.visit(dec_left_visitor{}, idx);
 1259|  2.28k|            else if (Mutating)
  ------------------
  |  Branch (1259:22): [Folded - Ignored]
  ------------------
 1260|      0|                pos.visit(dec_visitor{});
 1261|  2.28k|            return r;
 1262|  2.28k|        } else {
 1263|  2.13k|            using std::get;
 1264|  2.13k|            auto newn     = mutate ? (node->ensure_mutable_relaxed(e), node)
  ------------------
  |  Branch (1264:29): [True: 0, False: 2.13k]
  ------------------
 1265|  2.13k|                                   : node_t::make_inner_r_e(e);
 1266|  2.13k|            auto newr     = newn->relaxed();
 1267|  2.13k|            auto newcount = count - idx;
 1268|  2.13k|            auto new_child_size = child_size - child_dropped_size;
 1269|  2.13k|            IMMER_TRY {
  ------------------
  |  |   41|  2.13k|#define IMMER_TRY try
  ------------------
 1270|  2.13k|                auto subs =
 1271|  2.13k|                    mutate ? pos.towards_sub_oh(no_collapse_t{}, first, idx, e)
  ------------------
  |  Branch (1271:21): [True: 0, False: 2.13k]
  ------------------
 1272|  2.13k|                           : pos.towards_sub_oh(
 1273|  2.13k|                                 no_collapse_no_mut_t{}, first, idx, e);
 1274|  2.13k|                if (mutate)
  ------------------
  |  Branch (1274:21): [True: 0, False: 2.13k]
  ------------------
 1275|      0|                    pos.each_left(dec_visitor{}, idx);
 1276|  2.13k|                pos.copy_sizes(
 1277|  2.13k|                    idx + 1, newcount - 1, new_child_size, newr->d.sizes + 1);
 1278|  2.13k|                std::copy(node->inner() + idx + 1,
 1279|  2.13k|                          node->inner() + count,
 1280|  2.13k|                          newn->inner() + 1);
 1281|  2.13k|                newn->inner()[0] = get<1>(subs);
 1282|  2.13k|                newr->d.sizes[0] = new_child_size;
 1283|  2.13k|                newr->d.count    = newcount;
 1284|  2.13k|                assert(new_child_size);
 1285|  2.13k|                if (!mutate) {
  ------------------
  |  Branch (1285:21): [True: 2.13k, False: 0]
  ------------------
 1286|  2.13k|                    node_t::inc_nodes(newn->inner() + 1, newcount - 1);
 1287|  2.13k|                    if (Mutating)
  ------------------
  |  Branch (1287:25): [Folded - Ignored]
  ------------------
 1288|      0|                        pos.visit(dec_visitor{});
 1289|  2.13k|                }
 1290|  2.13k|                return std::make_tuple(pos.shift(), newn);
 1291|  2.13k|            }
 1292|  2.13k|            IMMER_CATCH (...) {
 1293|      0|                if (!mutate)
  ------------------
  |  Branch (1293:21): [True: 0, False: 0]
  ------------------
 1294|      0|                    node_t::delete_inner_r_e(newn);
 1295|      0|                IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1296|      0|            }
 1297|  2.13k|        }
 1298|  4.41k|    }
_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:
 1302|  2.82k|    {
 1303|  2.82k|        auto idx    = pos.subindex(first);
 1304|  2.82k|        auto count  = pos.count();
 1305|  2.82k|        auto node   = pos.node();
 1306|  2.82k|        auto mutate = Mutating
  ------------------
  |  Branch (1306:23): [Folded - Ignored]
  ------------------
 1307|       |                      // this is more restrictive than actually needed because
 1308|       |                      // it causes the algorithm to also avoid mutating the leaf
 1309|       |                      // in place
 1310|  2.82k|                      && !node_t::embed_relaxed && node->can_mutate(e);
  ------------------
  |  Branch (1310:26): [Folded - Ignored]
  |  Branch (1310:52): [True: 0, False: 0]
  ------------------
 1311|  2.82k|        auto left_size          = pos.size_before(idx);
 1312|  2.82k|        auto child_size         = pos.size_sbh(idx, left_size);
 1313|  2.82k|        auto dropped_size       = first;
 1314|  2.82k|        auto child_dropped_size = dropped_size - left_size;
 1315|  2.82k|        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
  ------------------
  |  Branch (1315:13): [Folded - Ignored]
  |  Branch (1315:25): [True: 1.54k, False: 1.28k]
  |  Branch (1315:45): [True: 1.20k, False: 342]
  ------------------
 1316|  1.20k|            auto r = mutate ? pos.towards_sub_oh(this_t{}, first, idx, e)
  ------------------
  |  Branch (1316:22): [True: 0, False: 1.20k]
  ------------------
 1317|  1.20k|                            : pos.towards_sub_oh(no_mut_t{}, first, idx, e);
 1318|  1.20k|            if (mutate)
  ------------------
  |  Branch (1318:17): [True: 0, False: 1.20k]
  ------------------
 1319|      0|                pos.visit(dec_left_visitor{}, idx);
 1320|  1.20k|            else if (Mutating)
  ------------------
  |  Branch (1320:22): [Folded - Ignored]
  ------------------
 1321|      0|                pos.visit(dec_visitor{});
 1322|  1.20k|            return r;
 1323|  1.62k|        } else {
 1324|  1.62k|            using std::get;
 1325|       |            // if possible, we convert the node to a relaxed one simply by
 1326|       |            // allocating a `relaxed_t` size table for it... maybe some of this
 1327|       |            // magic should be moved as a `node<...>` static method...
 1328|  1.62k|            auto newcount = count - idx;
 1329|  1.62k|            auto newn =
 1330|  1.62k|                mutate ? (node->impl.d.data.inner.relaxed = new (
  ------------------
  |  Branch (1330:17): [True: 0, False: 1.62k]
  ------------------
 1331|      0|                              node_t::heap::allocate(node_t::max_sizeof_relaxed,
 1332|      0|                                                     norefs_tag{})) relaxed_t,
 1333|      0|                          node)
 1334|  1.62k|                       : node_t::make_inner_r_e(e);
 1335|  1.62k|            auto newr = newn->relaxed();
 1336|  1.62k|            IMMER_TRY {
  ------------------
  |  |   41|  1.62k|#define IMMER_TRY try
  ------------------
 1337|  1.62k|                auto subs =
 1338|  1.62k|                    mutate ? pos.towards_sub_oh(no_collapse_t{}, first, idx, e)
  ------------------
  |  Branch (1338:21): [True: 0, False: 1.62k]
  ------------------
 1339|  1.62k|                           : pos.towards_sub_oh(
 1340|  1.62k|                                 no_collapse_no_mut_t{}, first, idx, e);
 1341|  1.62k|                if (mutate)
  ------------------
  |  Branch (1341:21): [True: 0, False: 1.62k]
  ------------------
 1342|      0|                    pos.each_left(dec_visitor{}, idx);
 1343|  1.62k|                newr->d.sizes[0] = child_size - child_dropped_size;
 1344|  1.62k|                assert(newr->d.sizes[0]);
 1345|      0|                pos.copy_sizes(
 1346|  1.62k|                    idx + 1, newcount - 1, newr->d.sizes[0], newr->d.sizes + 1);
 1347|  1.62k|                newr->d.count    = newcount;
 1348|  1.62k|                newn->inner()[0] = get<1>(subs);
 1349|  1.62k|                std::copy(node->inner() + idx + 1,
 1350|  1.62k|                          node->inner() + count,
 1351|  1.62k|                          newn->inner() + 1);
 1352|  1.62k|                if (!mutate) {
  ------------------
  |  Branch (1352:21): [True: 1.62k, False: 0]
  ------------------
 1353|  1.62k|                    node_t::inc_nodes(newn->inner() + 1, newcount - 1);
 1354|  1.62k|                    if (Mutating)
  ------------------
  |  Branch (1354:25): [Folded - Ignored]
  ------------------
 1355|      0|                        pos.visit(dec_visitor{});
 1356|  1.62k|                }
 1357|  1.62k|                return std::make_tuple(pos.shift(), newn);
 1358|  1.62k|            }
 1359|  1.62k|            IMMER_CATCH (...) {
 1360|      0|                if (!mutate)
  ------------------
  |  Branch (1360:21): [True: 0, False: 0]
  ------------------
 1361|      0|                    node_t::delete_inner_r_e(newn);
 1362|      0|                else {
 1363|       |                    // restore the regular node that we were
 1364|       |                    // attempting to relax...
 1365|      0|                    node_t::heap::deallocate(node_t::max_sizeof_relaxed,
 1366|      0|                                             node->impl.d.data.inner.relaxed);
 1367|      0|                    node->impl.d.data.inner.relaxed = nullptr;
 1368|      0|                }
 1369|      0|                IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1370|      0|            }
 1371|  1.62k|        }
 1372|  2.82k|    }
_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:
 1302|  2.27k|    {
 1303|  2.27k|        auto idx    = pos.subindex(first);
 1304|  2.27k|        auto count  = pos.count();
 1305|  2.27k|        auto node   = pos.node();
 1306|  2.27k|        auto mutate = Mutating
  ------------------
  |  Branch (1306:23): [Folded - Ignored]
  ------------------
 1307|       |                      // this is more restrictive than actually needed because
 1308|       |                      // it causes the algorithm to also avoid mutating the leaf
 1309|       |                      // in place
 1310|  2.27k|                      && !node_t::embed_relaxed && node->can_mutate(e);
  ------------------
  |  Branch (1310:26): [Folded - Ignored]
  |  Branch (1310:52): [True: 0, False: 0]
  ------------------
 1311|  2.27k|        auto left_size          = pos.size_before(idx);
 1312|  2.27k|        auto child_size         = pos.size_sbh(idx, left_size);
 1313|  2.27k|        auto dropped_size       = first;
 1314|  2.27k|        auto child_dropped_size = dropped_size - left_size;
 1315|  2.27k|        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
  ------------------
  |  Branch (1315:13): [Folded - Ignored]
  |  Branch (1315:25): [True: 531, False: 1.74k]
  |  Branch (1315:45): [True: 307, False: 224]
  ------------------
 1316|    307|            auto r = mutate ? pos.towards_sub_oh(this_t{}, first, idx, e)
  ------------------
  |  Branch (1316:22): [True: 0, False: 307]
  ------------------
 1317|    307|                            : pos.towards_sub_oh(no_mut_t{}, first, idx, e);
 1318|    307|            if (mutate)
  ------------------
  |  Branch (1318:17): [True: 0, False: 307]
  ------------------
 1319|      0|                pos.visit(dec_left_visitor{}, idx);
 1320|    307|            else if (Mutating)
  ------------------
  |  Branch (1320:22): [Folded - Ignored]
  ------------------
 1321|      0|                pos.visit(dec_visitor{});
 1322|    307|            return r;
 1323|  1.96k|        } else {
 1324|  1.96k|            using std::get;
 1325|       |            // if possible, we convert the node to a relaxed one simply by
 1326|       |            // allocating a `relaxed_t` size table for it... maybe some of this
 1327|       |            // magic should be moved as a `node<...>` static method...
 1328|  1.96k|            auto newcount = count - idx;
 1329|  1.96k|            auto newn =
 1330|  1.96k|                mutate ? (node->impl.d.data.inner.relaxed = new (
  ------------------
  |  Branch (1330:17): [True: 0, False: 1.96k]
  ------------------
 1331|      0|                              node_t::heap::allocate(node_t::max_sizeof_relaxed,
 1332|      0|                                                     norefs_tag{})) relaxed_t,
 1333|      0|                          node)
 1334|  1.96k|                       : node_t::make_inner_r_e(e);
 1335|  1.96k|            auto newr = newn->relaxed();
 1336|  1.96k|            IMMER_TRY {
  ------------------
  |  |   41|  1.96k|#define IMMER_TRY try
  ------------------
 1337|  1.96k|                auto subs =
 1338|  1.96k|                    mutate ? pos.towards_sub_oh(no_collapse_t{}, first, idx, e)
  ------------------
  |  Branch (1338:21): [True: 0, False: 1.96k]
  ------------------
 1339|  1.96k|                           : pos.towards_sub_oh(
 1340|  1.96k|                                 no_collapse_no_mut_t{}, first, idx, e);
 1341|  1.96k|                if (mutate)
  ------------------
  |  Branch (1341:21): [True: 0, False: 1.96k]
  ------------------
 1342|      0|                    pos.each_left(dec_visitor{}, idx);
 1343|  1.96k|                newr->d.sizes[0] = child_size - child_dropped_size;
 1344|  1.96k|                assert(newr->d.sizes[0]);
 1345|      0|                pos.copy_sizes(
 1346|  1.96k|                    idx + 1, newcount - 1, newr->d.sizes[0], newr->d.sizes + 1);
 1347|  1.96k|                newr->d.count    = newcount;
 1348|  1.96k|                newn->inner()[0] = get<1>(subs);
 1349|  1.96k|                std::copy(node->inner() + idx + 1,
 1350|  1.96k|                          node->inner() + count,
 1351|  1.96k|                          newn->inner() + 1);
 1352|  1.96k|                if (!mutate) {
  ------------------
  |  Branch (1352:21): [True: 1.96k, False: 0]
  ------------------
 1353|  1.96k|                    node_t::inc_nodes(newn->inner() + 1, newcount - 1);
 1354|  1.96k|                    if (Mutating)
  ------------------
  |  Branch (1354:25): [Folded - Ignored]
  ------------------
 1355|      0|                        pos.visit(dec_visitor{});
 1356|  1.96k|                }
 1357|  1.96k|                return std::make_tuple(pos.shift(), newn);
 1358|  1.96k|            }
 1359|  1.96k|            IMMER_CATCH (...) {
 1360|      0|                if (!mutate)
  ------------------
  |  Branch (1360:21): [True: 0, False: 0]
  ------------------
 1361|      0|                    node_t::delete_inner_r_e(newn);
 1362|      0|                else {
 1363|       |                    // restore the regular node that we were
 1364|       |                    // attempting to relax...
 1365|      0|                    node_t::heap::deallocate(node_t::max_sizeof_relaxed,
 1366|      0|                                             node->impl.d.data.inner.relaxed);
 1367|      0|                    node->impl.d.data.inner.relaxed = nullptr;
 1368|      0|                }
 1369|      0|                IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1370|      0|            }
 1371|  1.96k|        }
 1372|  2.27k|    }
_ZN5immer6detail4rbts16dec_left_visitor13visit_regularIRNS1_8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEEEvOT_j:
 1208|    307|    {
 1209|    307|        using node_t = node_type<Pos>;
 1210|    307|        auto node    = p.node();
 1211|    307|        if (node->dec()) {
  ------------------
  |  Branch (1211:13): [True: 307, False: 0]
  ------------------
 1212|    307|            p.each_left(dec_t{}, idx);
 1213|    307|            node_t::delete_inner(node, p.count());
 1214|    307|        }
 1215|    307|    }
_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:
 1376|  3.32k|    {
 1377|  3.32k|        auto node   = pos.node();
 1378|  3.32k|        auto idx    = pos.index(first);
 1379|  3.32k|        auto count  = pos.count();
 1380|  3.32k|        auto mutate = Mutating &&
  ------------------
  |  Branch (1380:23): [Folded - Ignored]
  ------------------
 1381|  3.32k|                      std::is_nothrow_move_constructible<value_t>::value &&
  ------------------
  |  Branch (1381:23): [Folded - Ignored]
  ------------------
 1382|  3.32k|                      node->can_mutate(e);
  ------------------
  |  Branch (1382:23): [True: 578, False: 2.74k]
  ------------------
 1383|  3.32k|        if (mutate) {
  ------------------
  |  Branch (1383:13): [True: 578, False: 2.74k]
  ------------------
 1384|    578|            auto data     = node->leaf();
 1385|    578|            auto newcount = count - idx;
 1386|    578|            std::move(data + idx, data + count, data);
 1387|    578|            detail::destroy_n(data + newcount, idx);
 1388|    578|            return std::make_tuple(0, node);
 1389|  2.74k|        } else {
 1390|  2.74k|            auto newn = node_t::copy_leaf_e(e, node, idx, count);
 1391|  2.74k|            if (Mutating)
  ------------------
  |  Branch (1391:17): [Folded - Ignored]
  ------------------
 1392|  2.74k|                pos.visit(dec_visitor{});
 1393|  2.74k|            return std::make_tuple(0, newn);
 1394|  2.74k|        }
 1395|  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:
 1302|  2.11k|    {
 1303|  2.11k|        auto idx    = pos.subindex(first);
 1304|  2.11k|        auto count  = pos.count();
 1305|  2.11k|        auto node   = pos.node();
 1306|  2.11k|        auto mutate = Mutating
  ------------------
  |  Branch (1306:23): [Folded - Ignored]
  ------------------
 1307|       |                      // this is more restrictive than actually needed because
 1308|       |                      // it causes the algorithm to also avoid mutating the leaf
 1309|       |                      // in place
 1310|  2.11k|                      && !node_t::embed_relaxed && node->can_mutate(e);
  ------------------
  |  Branch (1310:26): [Folded - Ignored]
  |  Branch (1310:52): [True: 1.11k, False: 995]
  ------------------
 1311|  2.11k|        auto left_size          = pos.size_before(idx);
 1312|  2.11k|        auto child_size         = pos.size_sbh(idx, left_size);
 1313|  2.11k|        auto dropped_size       = first;
 1314|  2.11k|        auto child_dropped_size = dropped_size - left_size;
 1315|  2.11k|        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
  ------------------
  |  Branch (1315:13): [Folded - Ignored]
  |  Branch (1315:25): [True: 0, False: 0]
  |  Branch (1315:45): [True: 0, False: 0]
  ------------------
 1316|      0|            auto r = mutate ? pos.towards_sub_oh(this_t{}, first, idx, e)
  ------------------
  |  Branch (1316:22): [True: 0, False: 0]
  ------------------
 1317|      0|                            : pos.towards_sub_oh(no_mut_t{}, first, idx, e);
 1318|      0|            if (mutate)
  ------------------
  |  Branch (1318:17): [True: 0, False: 0]
  ------------------
 1319|      0|                pos.visit(dec_left_visitor{}, idx);
 1320|      0|            else if (Mutating)
  ------------------
  |  Branch (1320:22): [Folded - Ignored]
  ------------------
 1321|      0|                pos.visit(dec_visitor{});
 1322|      0|            return r;
 1323|  2.11k|        } else {
 1324|  2.11k|            using std::get;
 1325|       |            // if possible, we convert the node to a relaxed one simply by
 1326|       |            // allocating a `relaxed_t` size table for it... maybe some of this
 1327|       |            // magic should be moved as a `node<...>` static method...
 1328|  2.11k|            auto newcount = count - idx;
 1329|  2.11k|            auto newn =
 1330|  2.11k|                mutate ? (node->impl.d.data.inner.relaxed = new (
  ------------------
  |  Branch (1330:17): [True: 1.11k, False: 995]
  ------------------
 1331|  1.11k|                              node_t::heap::allocate(node_t::max_sizeof_relaxed,
 1332|  1.11k|                                                     norefs_tag{})) relaxed_t,
 1333|  1.11k|                          node)
 1334|  2.11k|                       : node_t::make_inner_r_e(e);
 1335|  2.11k|            auto newr = newn->relaxed();
 1336|  2.11k|            IMMER_TRY {
  ------------------
  |  |   41|  2.11k|#define IMMER_TRY try
  ------------------
 1337|  2.11k|                auto subs =
 1338|  2.11k|                    mutate ? pos.towards_sub_oh(no_collapse_t{}, first, idx, e)
  ------------------
  |  Branch (1338:21): [True: 1.11k, False: 995]
  ------------------
 1339|  2.11k|                           : pos.towards_sub_oh(
 1340|    995|                                 no_collapse_no_mut_t{}, first, idx, e);
 1341|  2.11k|                if (mutate)
  ------------------
  |  Branch (1341:21): [True: 1.11k, False: 995]
  ------------------
 1342|  1.11k|                    pos.each_left(dec_visitor{}, idx);
 1343|  2.11k|                newr->d.sizes[0] = child_size - child_dropped_size;
 1344|  2.11k|                assert(newr->d.sizes[0]);
 1345|      0|                pos.copy_sizes(
 1346|  2.11k|                    idx + 1, newcount - 1, newr->d.sizes[0], newr->d.sizes + 1);
 1347|  2.11k|                newr->d.count    = newcount;
 1348|  2.11k|                newn->inner()[0] = get<1>(subs);
 1349|  2.11k|                std::copy(node->inner() + idx + 1,
 1350|  2.11k|                          node->inner() + count,
 1351|  2.11k|                          newn->inner() + 1);
 1352|  2.11k|                if (!mutate) {
  ------------------
  |  Branch (1352:21): [True: 995, False: 1.11k]
  ------------------
 1353|    995|                    node_t::inc_nodes(newn->inner() + 1, newcount - 1);
 1354|    995|                    if (Mutating)
  ------------------
  |  Branch (1354:25): [Folded - Ignored]
  ------------------
 1355|    995|                        pos.visit(dec_visitor{});
 1356|    995|                }
 1357|  2.11k|                return std::make_tuple(pos.shift(), newn);
 1358|  2.11k|            }
 1359|  2.11k|            IMMER_CATCH (...) {
 1360|      0|                if (!mutate)
  ------------------
  |  Branch (1360:21): [True: 0, False: 0]
  ------------------
 1361|      0|                    node_t::delete_inner_r_e(newn);
 1362|      0|                else {
 1363|       |                    // restore the regular node that we were
 1364|       |                    // attempting to relax...
 1365|      0|                    node_t::heap::deallocate(node_t::max_sizeof_relaxed,
 1366|      0|                                             node->impl.d.data.inner.relaxed);
 1367|      0|                    node->impl.d.data.inner.relaxed = nullptr;
 1368|      0|                }
 1369|      0|                IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1370|      0|            }
 1371|  2.11k|        }
 1372|  2.11k|    }
_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:
 1376|  9.36k|    {
 1377|  9.36k|        auto node   = pos.node();
 1378|  9.36k|        auto idx    = pos.index(first);
 1379|  9.36k|        auto count  = pos.count();
 1380|  9.36k|        auto mutate = Mutating &&
  ------------------
  |  Branch (1380:23): [Folded - Ignored]
  ------------------
 1381|  9.36k|                      std::is_nothrow_move_constructible<value_t>::value &&
  ------------------
  |  Branch (1381:23): [Folded - Ignored]
  ------------------
 1382|  9.36k|                      node->can_mutate(e);
  ------------------
  |  Branch (1382:23): [True: 0, False: 0]
  ------------------
 1383|  9.36k|        if (mutate) {
  ------------------
  |  Branch (1383:13): [True: 0, False: 9.36k]
  ------------------
 1384|      0|            auto data     = node->leaf();
 1385|      0|            auto newcount = count - idx;
 1386|      0|            std::move(data + idx, data + count, data);
 1387|      0|            detail::destroy_n(data + newcount, idx);
 1388|      0|            return std::make_tuple(0, node);
 1389|  9.36k|        } else {
 1390|  9.36k|            auto newn = node_t::copy_leaf_e(e, node, idx, count);
 1391|  9.36k|            if (Mutating)
  ------------------
  |  Branch (1391:17): [Folded - Ignored]
  ------------------
 1392|      0|                pos.visit(dec_visitor{});
 1393|  9.36k|            return std::make_tuple(0, newn);
 1394|  9.36k|        }
 1395|  9.36k|    }
_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:
 1302|  3.61k|    {
 1303|  3.61k|        auto idx    = pos.subindex(first);
 1304|  3.61k|        auto count  = pos.count();
 1305|  3.61k|        auto node   = pos.node();
 1306|  3.61k|        auto mutate = Mutating
  ------------------
  |  Branch (1306:23): [Folded - Ignored]
  ------------------
 1307|       |                      // this is more restrictive than actually needed because
 1308|       |                      // it causes the algorithm to also avoid mutating the leaf
 1309|       |                      // in place
 1310|  3.61k|                      && !node_t::embed_relaxed && node->can_mutate(e);
  ------------------
  |  Branch (1310:26): [Folded - Ignored]
  |  Branch (1310:52): [True: 0, False: 0]
  ------------------
 1311|  3.61k|        auto left_size          = pos.size_before(idx);
 1312|  3.61k|        auto child_size         = pos.size_sbh(idx, left_size);
 1313|  3.61k|        auto dropped_size       = first;
 1314|  3.61k|        auto child_dropped_size = dropped_size - left_size;
 1315|  3.61k|        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
  ------------------
  |  Branch (1315:13): [Folded - Ignored]
  |  Branch (1315:25): [True: 0, False: 0]
  |  Branch (1315:45): [True: 0, False: 0]
  ------------------
 1316|      0|            auto r = mutate ? pos.towards_sub_oh(this_t{}, first, idx, e)
  ------------------
  |  Branch (1316:22): [True: 0, False: 0]
  ------------------
 1317|      0|                            : pos.towards_sub_oh(no_mut_t{}, first, idx, e);
 1318|      0|            if (mutate)
  ------------------
  |  Branch (1318:17): [True: 0, False: 0]
  ------------------
 1319|      0|                pos.visit(dec_left_visitor{}, idx);
 1320|      0|            else if (Mutating)
  ------------------
  |  Branch (1320:22): [Folded - Ignored]
  ------------------
 1321|      0|                pos.visit(dec_visitor{});
 1322|      0|            return r;
 1323|  3.61k|        } else {
 1324|  3.61k|            using std::get;
 1325|       |            // if possible, we convert the node to a relaxed one simply by
 1326|       |            // allocating a `relaxed_t` size table for it... maybe some of this
 1327|       |            // magic should be moved as a `node<...>` static method...
 1328|  3.61k|            auto newcount = count - idx;
 1329|  3.61k|            auto newn =
 1330|  3.61k|                mutate ? (node->impl.d.data.inner.relaxed = new (
  ------------------
  |  Branch (1330:17): [True: 0, False: 3.61k]
  ------------------
 1331|      0|                              node_t::heap::allocate(node_t::max_sizeof_relaxed,
 1332|      0|                                                     norefs_tag{})) relaxed_t,
 1333|      0|                          node)
 1334|  3.61k|                       : node_t::make_inner_r_e(e);
 1335|  3.61k|            auto newr = newn->relaxed();
 1336|  3.61k|            IMMER_TRY {
  ------------------
  |  |   41|  3.61k|#define IMMER_TRY try
  ------------------
 1337|  3.61k|                auto subs =
 1338|  3.61k|                    mutate ? pos.towards_sub_oh(no_collapse_t{}, first, idx, e)
  ------------------
  |  Branch (1338:21): [True: 0, False: 3.61k]
  ------------------
 1339|  3.61k|                           : pos.towards_sub_oh(
 1340|  3.61k|                                 no_collapse_no_mut_t{}, first, idx, e);
 1341|  3.61k|                if (mutate)
  ------------------
  |  Branch (1341:21): [True: 0, False: 3.61k]
  ------------------
 1342|      0|                    pos.each_left(dec_visitor{}, idx);
 1343|  3.61k|                newr->d.sizes[0] = child_size - child_dropped_size;
 1344|  3.61k|                assert(newr->d.sizes[0]);
 1345|      0|                pos.copy_sizes(
 1346|  3.61k|                    idx + 1, newcount - 1, newr->d.sizes[0], newr->d.sizes + 1);
 1347|  3.61k|                newr->d.count    = newcount;
 1348|  3.61k|                newn->inner()[0] = get<1>(subs);
 1349|  3.61k|                std::copy(node->inner() + idx + 1,
 1350|  3.61k|                          node->inner() + count,
 1351|  3.61k|                          newn->inner() + 1);
 1352|  3.61k|                if (!mutate) {
  ------------------
  |  Branch (1352:21): [True: 3.61k, False: 0]
  ------------------
 1353|  3.61k|                    node_t::inc_nodes(newn->inner() + 1, newcount - 1);
 1354|  3.61k|                    if (Mutating)
  ------------------
  |  Branch (1354:25): [Folded - Ignored]
  ------------------
 1355|      0|                        pos.visit(dec_visitor{});
 1356|  3.61k|                }
 1357|  3.61k|                return std::make_tuple(pos.shift(), newn);
 1358|  3.61k|            }
 1359|  3.61k|            IMMER_CATCH (...) {
 1360|      0|                if (!mutate)
  ------------------
  |  Branch (1360:21): [True: 0, False: 0]
  ------------------
 1361|      0|                    node_t::delete_inner_r_e(newn);
 1362|      0|                else {
 1363|       |                    // restore the regular node that we were
 1364|       |                    // attempting to relax...
 1365|      0|                    node_t::heap::deallocate(node_t::max_sizeof_relaxed,
 1366|      0|                                             node->impl.d.data.inner.relaxed);
 1367|      0|                    node->impl.d.data.inner.relaxed = nullptr;
 1368|      0|                }
 1369|      0|                IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1370|      0|            }
 1371|  3.61k|        }
 1372|  3.61k|    }
_ZN5immer6detail4rbts16dec_left_visitor13visit_regularIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEEEvOT_j:
 1208|  3.19k|    {
 1209|  3.19k|        using node_t = node_type<Pos>;
 1210|  3.19k|        auto node    = p.node();
 1211|  3.19k|        if (node->dec()) {
  ------------------
  |  Branch (1211:13): [True: 3.19k, False: 0]
  ------------------
 1212|  3.19k|            p.each_left(dec_t{}, idx);
 1213|  3.19k|            node_t::delete_inner(node, p.count());
 1214|  3.19k|        }
 1215|  3.19k|    }
_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:
 1376|  3.64k|    {
 1377|  3.64k|        auto node   = pos.node();
 1378|  3.64k|        auto idx    = pos.index(first);
 1379|  3.64k|        auto count  = pos.count();
 1380|  3.64k|        auto mutate = Mutating &&
  ------------------
  |  Branch (1380:23): [Folded - Ignored]
  ------------------
 1381|  3.64k|                      std::is_nothrow_move_constructible<value_t>::value &&
  ------------------
  |  Branch (1381:23): [Folded - Ignored]
  ------------------
 1382|  3.64k|                      node->can_mutate(e);
  ------------------
  |  Branch (1382:23): [True: 1.17k, False: 2.46k]
  ------------------
 1383|  3.64k|        if (mutate) {
  ------------------
  |  Branch (1383:13): [True: 1.17k, False: 2.46k]
  ------------------
 1384|  1.17k|            auto data     = node->leaf();
 1385|  1.17k|            auto newcount = count - idx;
 1386|  1.17k|            std::move(data + idx, data + count, data);
 1387|  1.17k|            detail::destroy_n(data + newcount, idx);
 1388|  1.17k|            return std::make_tuple(0, node);
 1389|  2.46k|        } else {
 1390|  2.46k|            auto newn = node_t::copy_leaf_e(e, node, idx, count);
 1391|  2.46k|            if (Mutating)
  ------------------
  |  Branch (1391:17): [Folded - Ignored]
  ------------------
 1392|  2.46k|                pos.visit(dec_visitor{});
 1393|  2.46k|            return std::make_tuple(0, newn);
 1394|  2.46k|        }
 1395|  3.64k|    }
_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:
 1302|  1.47k|    {
 1303|  1.47k|        auto idx    = pos.subindex(first);
 1304|  1.47k|        auto count  = pos.count();
 1305|  1.47k|        auto node   = pos.node();
 1306|  1.47k|        auto mutate = Mutating
  ------------------
  |  Branch (1306:23): [Folded - Ignored]
  ------------------
 1307|       |                      // this is more restrictive than actually needed because
 1308|       |                      // it causes the algorithm to also avoid mutating the leaf
 1309|       |                      // in place
 1310|  1.47k|                      && !node_t::embed_relaxed && node->can_mutate(e);
  ------------------
  |  Branch (1310:26): [Folded - Ignored]
  |  Branch (1310:52): [True: 365, False: 1.11k]
  ------------------
 1311|  1.47k|        auto left_size          = pos.size_before(idx);
 1312|  1.47k|        auto child_size         = pos.size_sbh(idx, left_size);
 1313|  1.47k|        auto dropped_size       = first;
 1314|  1.47k|        auto child_dropped_size = dropped_size - left_size;
 1315|  1.47k|        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
  ------------------
  |  Branch (1315:13): [Folded - Ignored]
  |  Branch (1315:25): [True: 0, False: 0]
  |  Branch (1315:45): [True: 0, False: 0]
  ------------------
 1316|      0|            auto r = mutate ? pos.towards_sub_oh(this_t{}, first, idx, e)
  ------------------
  |  Branch (1316:22): [True: 0, False: 0]
  ------------------
 1317|      0|                            : pos.towards_sub_oh(no_mut_t{}, first, idx, e);
 1318|      0|            if (mutate)
  ------------------
  |  Branch (1318:17): [True: 0, False: 0]
  ------------------
 1319|      0|                pos.visit(dec_left_visitor{}, idx);
 1320|      0|            else if (Mutating)
  ------------------
  |  Branch (1320:22): [Folded - Ignored]
  ------------------
 1321|      0|                pos.visit(dec_visitor{});
 1322|      0|            return r;
 1323|  1.47k|        } else {
 1324|  1.47k|            using std::get;
 1325|       |            // if possible, we convert the node to a relaxed one simply by
 1326|       |            // allocating a `relaxed_t` size table for it... maybe some of this
 1327|       |            // magic should be moved as a `node<...>` static method...
 1328|  1.47k|            auto newcount = count - idx;
 1329|  1.47k|            auto newn =
 1330|  1.47k|                mutate ? (node->impl.d.data.inner.relaxed = new (
  ------------------
  |  Branch (1330:17): [True: 365, False: 1.11k]
  ------------------
 1331|    365|                              node_t::heap::allocate(node_t::max_sizeof_relaxed,
 1332|    365|                                                     norefs_tag{})) relaxed_t,
 1333|    365|                          node)
 1334|  1.47k|                       : node_t::make_inner_r_e(e);
 1335|  1.47k|            auto newr = newn->relaxed();
 1336|  1.47k|            IMMER_TRY {
  ------------------
  |  |   41|  1.47k|#define IMMER_TRY try
  ------------------
 1337|  1.47k|                auto subs =
 1338|  1.47k|                    mutate ? pos.towards_sub_oh(no_collapse_t{}, first, idx, e)
  ------------------
  |  Branch (1338:21): [True: 365, False: 1.11k]
  ------------------
 1339|  1.47k|                           : pos.towards_sub_oh(
 1340|  1.11k|                                 no_collapse_no_mut_t{}, first, idx, e);
 1341|  1.47k|                if (mutate)
  ------------------
  |  Branch (1341:21): [True: 365, False: 1.11k]
  ------------------
 1342|    365|                    pos.each_left(dec_visitor{}, idx);
 1343|  1.47k|                newr->d.sizes[0] = child_size - child_dropped_size;
 1344|  1.47k|                assert(newr->d.sizes[0]);
 1345|      0|                pos.copy_sizes(
 1346|  1.47k|                    idx + 1, newcount - 1, newr->d.sizes[0], newr->d.sizes + 1);
 1347|  1.47k|                newr->d.count    = newcount;
 1348|  1.47k|                newn->inner()[0] = get<1>(subs);
 1349|  1.47k|                std::copy(node->inner() + idx + 1,
 1350|  1.47k|                          node->inner() + count,
 1351|  1.47k|                          newn->inner() + 1);
 1352|  1.47k|                if (!mutate) {
  ------------------
  |  Branch (1352:21): [True: 1.11k, False: 365]
  ------------------
 1353|  1.11k|                    node_t::inc_nodes(newn->inner() + 1, newcount - 1);
 1354|  1.11k|                    if (Mutating)
  ------------------
  |  Branch (1354:25): [Folded - Ignored]
  ------------------
 1355|  1.11k|                        pos.visit(dec_visitor{});
 1356|  1.11k|                }
 1357|  1.47k|                return std::make_tuple(pos.shift(), newn);
 1358|  1.47k|            }
 1359|  1.47k|            IMMER_CATCH (...) {
 1360|      0|                if (!mutate)
  ------------------
  |  Branch (1360:21): [True: 0, False: 0]
  ------------------
 1361|      0|                    node_t::delete_inner_r_e(newn);
 1362|      0|                else {
 1363|       |                    // restore the regular node that we were
 1364|       |                    // attempting to relax...
 1365|      0|                    node_t::heap::deallocate(node_t::max_sizeof_relaxed,
 1366|      0|                                             node->impl.d.data.inner.relaxed);
 1367|      0|                    node->impl.d.data.inner.relaxed = nullptr;
 1368|      0|                }
 1369|      0|                IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1370|      0|            }
 1371|  1.47k|        }
 1372|  1.47k|    }
_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:
 1376|  22.3k|    {
 1377|  22.3k|        auto node   = pos.node();
 1378|  22.3k|        auto idx    = pos.index(first);
 1379|  22.3k|        auto count  = pos.count();
 1380|  22.3k|        auto mutate = Mutating &&
  ------------------
  |  Branch (1380:23): [Folded - Ignored]
  ------------------
 1381|  22.3k|                      std::is_nothrow_move_constructible<value_t>::value &&
  ------------------
  |  Branch (1381:23): [Folded - Ignored]
  ------------------
 1382|  22.3k|                      node->can_mutate(e);
  ------------------
  |  Branch (1382:23): [True: 0, False: 0]
  ------------------
 1383|  22.3k|        if (mutate) {
  ------------------
  |  Branch (1383:13): [True: 0, False: 22.3k]
  ------------------
 1384|      0|            auto data     = node->leaf();
 1385|      0|            auto newcount = count - idx;
 1386|      0|            std::move(data + idx, data + count, data);
 1387|      0|            detail::destroy_n(data + newcount, idx);
 1388|      0|            return std::make_tuple(0, node);
 1389|  22.3k|        } else {
 1390|  22.3k|            auto newn = node_t::copy_leaf_e(e, node, idx, count);
 1391|  22.3k|            if (Mutating)
  ------------------
  |  Branch (1391:17): [Folded - Ignored]
  ------------------
 1392|      0|                pos.visit(dec_visitor{});
 1393|  22.3k|            return std::make_tuple(0, newn);
 1394|  22.3k|        }
 1395|  22.3k|    }
_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:
 1302|  1.95k|    {
 1303|  1.95k|        auto idx    = pos.subindex(first);
 1304|  1.95k|        auto count  = pos.count();
 1305|  1.95k|        auto node   = pos.node();
 1306|  1.95k|        auto mutate = Mutating
  ------------------
  |  Branch (1306:23): [Folded - Ignored]
  ------------------
 1307|       |                      // this is more restrictive than actually needed because
 1308|       |                      // it causes the algorithm to also avoid mutating the leaf
 1309|       |                      // in place
 1310|  1.95k|                      && !node_t::embed_relaxed && node->can_mutate(e);
  ------------------
  |  Branch (1310:26): [Folded - Ignored]
  |  Branch (1310:52): [True: 0, False: 0]
  ------------------
 1311|  1.95k|        auto left_size          = pos.size_before(idx);
 1312|  1.95k|        auto child_size         = pos.size_sbh(idx, left_size);
 1313|  1.95k|        auto dropped_size       = first;
 1314|  1.95k|        auto child_dropped_size = dropped_size - left_size;
 1315|  1.95k|        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
  ------------------
  |  Branch (1315:13): [Folded - Ignored]
  |  Branch (1315:25): [True: 0, False: 0]
  |  Branch (1315:45): [True: 0, False: 0]
  ------------------
 1316|      0|            auto r = mutate ? pos.towards_sub_oh(this_t{}, first, idx, e)
  ------------------
  |  Branch (1316:22): [True: 0, False: 0]
  ------------------
 1317|      0|                            : pos.towards_sub_oh(no_mut_t{}, first, idx, e);
 1318|      0|            if (mutate)
  ------------------
  |  Branch (1318:17): [True: 0, False: 0]
  ------------------
 1319|      0|                pos.visit(dec_left_visitor{}, idx);
 1320|      0|            else if (Mutating)
  ------------------
  |  Branch (1320:22): [Folded - Ignored]
  ------------------
 1321|      0|                pos.visit(dec_visitor{});
 1322|      0|            return r;
 1323|  1.95k|        } else {
 1324|  1.95k|            using std::get;
 1325|       |            // if possible, we convert the node to a relaxed one simply by
 1326|       |            // allocating a `relaxed_t` size table for it... maybe some of this
 1327|       |            // magic should be moved as a `node<...>` static method...
 1328|  1.95k|            auto newcount = count - idx;
 1329|  1.95k|            auto newn =
 1330|  1.95k|                mutate ? (node->impl.d.data.inner.relaxed = new (
  ------------------
  |  Branch (1330:17): [True: 0, False: 1.95k]
  ------------------
 1331|      0|                              node_t::heap::allocate(node_t::max_sizeof_relaxed,
 1332|      0|                                                     norefs_tag{})) relaxed_t,
 1333|      0|                          node)
 1334|  1.95k|                       : node_t::make_inner_r_e(e);
 1335|  1.95k|            auto newr = newn->relaxed();
 1336|  1.95k|            IMMER_TRY {
  ------------------
  |  |   41|  1.95k|#define IMMER_TRY try
  ------------------
 1337|  1.95k|                auto subs =
 1338|  1.95k|                    mutate ? pos.towards_sub_oh(no_collapse_t{}, first, idx, e)
  ------------------
  |  Branch (1338:21): [True: 0, False: 1.95k]
  ------------------
 1339|  1.95k|                           : pos.towards_sub_oh(
 1340|  1.95k|                                 no_collapse_no_mut_t{}, first, idx, e);
 1341|  1.95k|                if (mutate)
  ------------------
  |  Branch (1341:21): [True: 0, False: 1.95k]
  ------------------
 1342|      0|                    pos.each_left(dec_visitor{}, idx);
 1343|  1.95k|                newr->d.sizes[0] = child_size - child_dropped_size;
 1344|  1.95k|                assert(newr->d.sizes[0]);
 1345|      0|                pos.copy_sizes(
 1346|  1.95k|                    idx + 1, newcount - 1, newr->d.sizes[0], newr->d.sizes + 1);
 1347|  1.95k|                newr->d.count    = newcount;
 1348|  1.95k|                newn->inner()[0] = get<1>(subs);
 1349|  1.95k|                std::copy(node->inner() + idx + 1,
 1350|  1.95k|                          node->inner() + count,
 1351|  1.95k|                          newn->inner() + 1);
 1352|  1.95k|                if (!mutate) {
  ------------------
  |  Branch (1352:21): [True: 1.95k, False: 0]
  ------------------
 1353|  1.95k|                    node_t::inc_nodes(newn->inner() + 1, newcount - 1);
 1354|  1.95k|                    if (Mutating)
  ------------------
  |  Branch (1354:25): [Folded - Ignored]
  ------------------
 1355|      0|                        pos.visit(dec_visitor{});
 1356|  1.95k|                }
 1357|  1.95k|                return std::make_tuple(pos.shift(), newn);
 1358|  1.95k|            }
 1359|  1.95k|            IMMER_CATCH (...) {
 1360|      0|                if (!mutate)
  ------------------
  |  Branch (1360:21): [True: 0, False: 0]
  ------------------
 1361|      0|                    node_t::delete_inner_r_e(newn);
 1362|      0|                else {
 1363|       |                    // restore the regular node that we were
 1364|       |                    // attempting to relax...
 1365|      0|                    node_t::heap::deallocate(node_t::max_sizeof_relaxed,
 1366|      0|                                             node->impl.d.data.inner.relaxed);
 1367|      0|                    node->impl.d.data.inner.relaxed = nullptr;
 1368|      0|                }
 1369|      0|                IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1370|      0|            }
 1371|  1.95k|        }
 1372|  1.95k|    }
_ZN5immer6detail4rbts16dec_left_visitor13visit_relaxedIRNS1_11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEEEvOT_j:
 1197|  4.42k|    {
 1198|  4.42k|        using node_t = node_type<Pos>;
 1199|  4.42k|        auto node    = p.node();
 1200|  4.42k|        if (node->dec()) {
  ------------------
  |  Branch (1200:13): [True: 4.42k, False: 0]
  ------------------
 1201|  4.42k|            p.each_left(dec_t{}, idx);
 1202|  4.42k|            node_t::delete_inner_r(node, p.count());
 1203|  4.42k|        }
 1204|  4.42k|    }
_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:
 1245|   146k|    {
 1246|   146k|        auto idx                = pos.subindex(first);
 1247|   146k|        auto count              = pos.count();
 1248|   146k|        auto node               = pos.node();
 1249|   146k|        auto mutate             = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (1249:35): [Folded - Ignored]
  |  Branch (1249:47): [True: 129k, False: 17.3k]
  ------------------
 1250|   146k|        auto left_size          = pos.size_before(idx);
 1251|   146k|        auto child_size         = pos.size_sbh(idx, left_size);
 1252|   146k|        auto dropped_size       = first;
 1253|   146k|        auto child_dropped_size = dropped_size - left_size;
 1254|   146k|        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
  ------------------
  |  Branch (1254:13): [Folded - Ignored]
  |  Branch (1254:25): [True: 0, False: 0]
  |  Branch (1254:45): [True: 0, False: 0]
  ------------------
 1255|      0|            auto r = mutate ? pos.towards_sub_oh(this_t{}, first, idx, e)
  ------------------
  |  Branch (1255:22): [True: 0, False: 0]
  ------------------
 1256|      0|                            : pos.towards_sub_oh(no_mut_t{}, first, idx, e);
 1257|      0|            if (mutate)
  ------------------
  |  Branch (1257:17): [True: 0, False: 0]
  ------------------
 1258|      0|                pos.visit(dec_left_visitor{}, idx);
 1259|      0|            else if (Mutating)
  ------------------
  |  Branch (1259:22): [Folded - Ignored]
  ------------------
 1260|      0|                pos.visit(dec_visitor{});
 1261|      0|            return r;
 1262|   146k|        } else {
 1263|   146k|            using std::get;
 1264|   146k|            auto newn     = mutate ? (node->ensure_mutable_relaxed(e), node)
  ------------------
  |  Branch (1264:29): [True: 129k, False: 17.3k]
  ------------------
 1265|   146k|                                   : node_t::make_inner_r_e(e);
 1266|   146k|            auto newr     = newn->relaxed();
 1267|   146k|            auto newcount = count - idx;
 1268|   146k|            auto new_child_size = child_size - child_dropped_size;
 1269|   146k|            IMMER_TRY {
  ------------------
  |  |   41|   146k|#define IMMER_TRY try
  ------------------
 1270|   146k|                auto subs =
 1271|   146k|                    mutate ? pos.towards_sub_oh(no_collapse_t{}, first, idx, e)
  ------------------
  |  Branch (1271:21): [True: 129k, False: 17.3k]
  ------------------
 1272|   146k|                           : pos.towards_sub_oh(
 1273|  17.3k|                                 no_collapse_no_mut_t{}, first, idx, e);
 1274|   146k|                if (mutate)
  ------------------
  |  Branch (1274:21): [True: 129k, False: 17.3k]
  ------------------
 1275|   129k|                    pos.each_left(dec_visitor{}, idx);
 1276|   146k|                pos.copy_sizes(
 1277|   146k|                    idx + 1, newcount - 1, new_child_size, newr->d.sizes + 1);
 1278|   146k|                std::copy(node->inner() + idx + 1,
 1279|   146k|                          node->inner() + count,
 1280|   146k|                          newn->inner() + 1);
 1281|   146k|                newn->inner()[0] = get<1>(subs);
 1282|   146k|                newr->d.sizes[0] = new_child_size;
 1283|   146k|                newr->d.count    = newcount;
 1284|   146k|                assert(new_child_size);
 1285|   146k|                if (!mutate) {
  ------------------
  |  Branch (1285:21): [True: 17.3k, False: 129k]
  ------------------
 1286|  17.3k|                    node_t::inc_nodes(newn->inner() + 1, newcount - 1);
 1287|  17.3k|                    if (Mutating)
  ------------------
  |  Branch (1287:25): [Folded - Ignored]
  ------------------
 1288|  17.3k|                        pos.visit(dec_visitor{});
 1289|  17.3k|                }
 1290|   146k|                return std::make_tuple(pos.shift(), newn);
 1291|   146k|            }
 1292|   146k|            IMMER_CATCH (...) {
 1293|      0|                if (!mutate)
  ------------------
  |  Branch (1293:21): [True: 0, False: 0]
  ------------------
 1294|      0|                    node_t::delete_inner_r_e(newn);
 1295|      0|                IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1296|      0|            }
 1297|   146k|        }
 1298|   146k|    }
_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:
 1245|  91.8k|    {
 1246|  91.8k|        auto idx                = pos.subindex(first);
 1247|  91.8k|        auto count              = pos.count();
 1248|  91.8k|        auto node               = pos.node();
 1249|  91.8k|        auto mutate             = Mutating && node->can_mutate(e);
  ------------------
  |  Branch (1249:35): [Folded - Ignored]
  |  Branch (1249:47): [True: 0, False: 0]
  ------------------
 1250|  91.8k|        auto left_size          = pos.size_before(idx);
 1251|  91.8k|        auto child_size         = pos.size_sbh(idx, left_size);
 1252|  91.8k|        auto dropped_size       = first;
 1253|  91.8k|        auto child_dropped_size = dropped_size - left_size;
 1254|  91.8k|        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
  ------------------
  |  Branch (1254:13): [Folded - Ignored]
  |  Branch (1254:25): [True: 0, False: 0]
  |  Branch (1254:45): [True: 0, False: 0]
  ------------------
 1255|      0|            auto r = mutate ? pos.towards_sub_oh(this_t{}, first, idx, e)
  ------------------
  |  Branch (1255:22): [True: 0, False: 0]
  ------------------
 1256|      0|                            : pos.towards_sub_oh(no_mut_t{}, first, idx, e);
 1257|      0|            if (mutate)
  ------------------
  |  Branch (1257:17): [True: 0, False: 0]
  ------------------
 1258|      0|                pos.visit(dec_left_visitor{}, idx);
 1259|      0|            else if (Mutating)
  ------------------
  |  Branch (1259:22): [Folded - Ignored]
  ------------------
 1260|      0|                pos.visit(dec_visitor{});
 1261|      0|            return r;
 1262|  91.8k|        } else {
 1263|  91.8k|            using std::get;
 1264|  91.8k|            auto newn     = mutate ? (node->ensure_mutable_relaxed(e), node)
  ------------------
  |  Branch (1264:29): [True: 0, False: 91.8k]
  ------------------
 1265|  91.8k|                                   : node_t::make_inner_r_e(e);
 1266|  91.8k|            auto newr     = newn->relaxed();
 1267|  91.8k|            auto newcount = count - idx;
 1268|  91.8k|            auto new_child_size = child_size - child_dropped_size;
 1269|  91.8k|            IMMER_TRY {
  ------------------
  |  |   41|  91.8k|#define IMMER_TRY try
  ------------------
 1270|  91.8k|                auto subs =
 1271|  91.8k|                    mutate ? pos.towards_sub_oh(no_collapse_t{}, first, idx, e)
  ------------------
  |  Branch (1271:21): [True: 0, False: 91.8k]
  ------------------
 1272|  91.8k|                           : pos.towards_sub_oh(
 1273|  91.8k|                                 no_collapse_no_mut_t{}, first, idx, e);
 1274|  91.8k|                if (mutate)
  ------------------
  |  Branch (1274:21): [True: 0, False: 91.8k]
  ------------------
 1275|      0|                    pos.each_left(dec_visitor{}, idx);
 1276|  91.8k|                pos.copy_sizes(
 1277|  91.8k|                    idx + 1, newcount - 1, new_child_size, newr->d.sizes + 1);
 1278|  91.8k|                std::copy(node->inner() + idx + 1,
 1279|  91.8k|                          node->inner() + count,
 1280|  91.8k|                          newn->inner() + 1);
 1281|  91.8k|                newn->inner()[0] = get<1>(subs);
 1282|  91.8k|                newr->d.sizes[0] = new_child_size;
 1283|  91.8k|                newr->d.count    = newcount;
 1284|  91.8k|                assert(new_child_size);
 1285|  91.8k|                if (!mutate) {
  ------------------
  |  Branch (1285:21): [True: 91.8k, False: 0]
  ------------------
 1286|  91.8k|                    node_t::inc_nodes(newn->inner() + 1, newcount - 1);
 1287|  91.8k|                    if (Mutating)
  ------------------
  |  Branch (1287:25): [Folded - Ignored]
  ------------------
 1288|      0|                        pos.visit(dec_visitor{});
 1289|  91.8k|                }
 1290|  91.8k|                return std::make_tuple(pos.shift(), newn);
 1291|  91.8k|            }
 1292|  91.8k|            IMMER_CATCH (...) {
 1293|      0|                if (!mutate)
  ------------------
  |  Branch (1293:21): [True: 0, False: 0]
  ------------------
 1294|      0|                    node_t::delete_inner_r_e(newn);
 1295|      0|                IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1296|      0|            }
 1297|  91.8k|        }
 1298|  91.8k|    }
_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:
 1302|  8.37k|    {
 1303|  8.37k|        auto idx    = pos.subindex(first);
 1304|  8.37k|        auto count  = pos.count();
 1305|  8.37k|        auto node   = pos.node();
 1306|  8.37k|        auto mutate = Mutating
  ------------------
  |  Branch (1306:23): [Folded - Ignored]
  ------------------
 1307|       |                      // this is more restrictive than actually needed because
 1308|       |                      // it causes the algorithm to also avoid mutating the leaf
 1309|       |                      // in place
 1310|  8.37k|                      && !node_t::embed_relaxed && node->can_mutate(e);
  ------------------
  |  Branch (1310:26): [Folded - Ignored]
  |  Branch (1310:52): [True: 6.24k, False: 2.13k]
  ------------------
 1311|  8.37k|        auto left_size          = pos.size_before(idx);
 1312|  8.37k|        auto child_size         = pos.size_sbh(idx, left_size);
 1313|  8.37k|        auto dropped_size       = first;
 1314|  8.37k|        auto child_dropped_size = dropped_size - left_size;
 1315|  8.37k|        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
  ------------------
  |  Branch (1315:13): [Folded - Ignored]
  |  Branch (1315:25): [True: 6.03k, False: 2.33k]
  |  Branch (1315:45): [True: 4.10k, False: 1.93k]
  ------------------
 1316|  4.10k|            auto r = mutate ? pos.towards_sub_oh(this_t{}, first, idx, e)
  ------------------
  |  Branch (1316:22): [True: 3.19k, False: 903]
  ------------------
 1317|  4.10k|                            : pos.towards_sub_oh(no_mut_t{}, first, idx, e);
 1318|  4.10k|            if (mutate)
  ------------------
  |  Branch (1318:17): [True: 3.19k, False: 903]
  ------------------
 1319|  3.19k|                pos.visit(dec_left_visitor{}, idx);
 1320|    903|            else if (Mutating)
  ------------------
  |  Branch (1320:22): [Folded - Ignored]
  ------------------
 1321|    903|                pos.visit(dec_visitor{});
 1322|  4.10k|            return r;
 1323|  4.27k|        } else {
 1324|  4.27k|            using std::get;
 1325|       |            // if possible, we convert the node to a relaxed one simply by
 1326|       |            // allocating a `relaxed_t` size table for it... maybe some of this
 1327|       |            // magic should be moved as a `node<...>` static method...
 1328|  4.27k|            auto newcount = count - idx;
 1329|  4.27k|            auto newn =
 1330|  4.27k|                mutate ? (node->impl.d.data.inner.relaxed = new (
  ------------------
  |  Branch (1330:17): [True: 3.04k, False: 1.22k]
  ------------------
 1331|  3.04k|                              node_t::heap::allocate(node_t::max_sizeof_relaxed,
 1332|  3.04k|                                                     norefs_tag{})) relaxed_t,
 1333|  3.04k|                          node)
 1334|  4.27k|                       : node_t::make_inner_r_e(e);
 1335|  4.27k|            auto newr = newn->relaxed();
 1336|  4.27k|            IMMER_TRY {
  ------------------
  |  |   41|  4.27k|#define IMMER_TRY try
  ------------------
 1337|  4.27k|                auto subs =
 1338|  4.27k|                    mutate ? pos.towards_sub_oh(no_collapse_t{}, first, idx, e)
  ------------------
  |  Branch (1338:21): [True: 3.04k, False: 1.22k]
  ------------------
 1339|  4.27k|                           : pos.towards_sub_oh(
 1340|  1.22k|                                 no_collapse_no_mut_t{}, first, idx, e);
 1341|  4.27k|                if (mutate)
  ------------------
  |  Branch (1341:21): [True: 3.04k, False: 1.22k]
  ------------------
 1342|  3.04k|                    pos.each_left(dec_visitor{}, idx);
 1343|  4.27k|                newr->d.sizes[0] = child_size - child_dropped_size;
 1344|  4.27k|                assert(newr->d.sizes[0]);
 1345|      0|                pos.copy_sizes(
 1346|  4.27k|                    idx + 1, newcount - 1, newr->d.sizes[0], newr->d.sizes + 1);
 1347|  4.27k|                newr->d.count    = newcount;
 1348|  4.27k|                newn->inner()[0] = get<1>(subs);
 1349|  4.27k|                std::copy(node->inner() + idx + 1,
 1350|  4.27k|                          node->inner() + count,
 1351|  4.27k|                          newn->inner() + 1);
 1352|  4.27k|                if (!mutate) {
  ------------------
  |  Branch (1352:21): [True: 1.22k, False: 3.04k]
  ------------------
 1353|  1.22k|                    node_t::inc_nodes(newn->inner() + 1, newcount - 1);
 1354|  1.22k|                    if (Mutating)
  ------------------
  |  Branch (1354:25): [Folded - Ignored]
  ------------------
 1355|  1.22k|                        pos.visit(dec_visitor{});
 1356|  1.22k|                }
 1357|  4.27k|                return std::make_tuple(pos.shift(), newn);
 1358|  4.27k|            }
 1359|  4.27k|            IMMER_CATCH (...) {
 1360|      0|                if (!mutate)
  ------------------
  |  Branch (1360:21): [True: 0, False: 0]
  ------------------
 1361|      0|                    node_t::delete_inner_r_e(newn);
 1362|      0|                else {
 1363|       |                    // restore the regular node that we were
 1364|       |                    // attempting to relax...
 1365|      0|                    node_t::heap::deallocate(node_t::max_sizeof_relaxed,
 1366|      0|                                             node->impl.d.data.inner.relaxed);
 1367|      0|                    node->impl.d.data.inner.relaxed = nullptr;
 1368|      0|                }
 1369|      0|                IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1370|      0|            }
 1371|  4.27k|        }
 1372|  8.37k|    }
_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:
 1302|  2.51k|    {
 1303|  2.51k|        auto idx    = pos.subindex(first);
 1304|  2.51k|        auto count  = pos.count();
 1305|  2.51k|        auto node   = pos.node();
 1306|  2.51k|        auto mutate = Mutating
  ------------------
  |  Branch (1306:23): [Folded - Ignored]
  ------------------
 1307|       |                      // this is more restrictive than actually needed because
 1308|       |                      // it causes the algorithm to also avoid mutating the leaf
 1309|       |                      // in place
 1310|  2.51k|                      && !node_t::embed_relaxed && node->can_mutate(e);
  ------------------
  |  Branch (1310:26): [Folded - Ignored]
  |  Branch (1310:52): [True: 1.21k, False: 1.30k]
  ------------------
 1311|  2.51k|        auto left_size          = pos.size_before(idx);
 1312|  2.51k|        auto child_size         = pos.size_sbh(idx, left_size);
 1313|  2.51k|        auto dropped_size       = first;
 1314|  2.51k|        auto child_dropped_size = dropped_size - left_size;
 1315|  2.51k|        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
  ------------------
  |  Branch (1315:13): [Folded - Ignored]
  |  Branch (1315:25): [True: 1.34k, False: 1.17k]
  |  Branch (1315:45): [True: 1.13k, False: 209]
  ------------------
 1316|  1.13k|            auto r = mutate ? pos.towards_sub_oh(this_t{}, first, idx, e)
  ------------------
  |  Branch (1316:22): [True: 307, False: 825]
  ------------------
 1317|  1.13k|                            : pos.towards_sub_oh(no_mut_t{}, first, idx, e);
 1318|  1.13k|            if (mutate)
  ------------------
  |  Branch (1318:17): [True: 307, False: 825]
  ------------------
 1319|    307|                pos.visit(dec_left_visitor{}, idx);
 1320|    825|            else if (Mutating)
  ------------------
  |  Branch (1320:22): [Folded - Ignored]
  ------------------
 1321|    825|                pos.visit(dec_visitor{});
 1322|  1.13k|            return r;
 1323|  1.38k|        } else {
 1324|  1.38k|            using std::get;
 1325|       |            // if possible, we convert the node to a relaxed one simply by
 1326|       |            // allocating a `relaxed_t` size table for it... maybe some of this
 1327|       |            // magic should be moved as a `node<...>` static method...
 1328|  1.38k|            auto newcount = count - idx;
 1329|  1.38k|            auto newn =
 1330|  1.38k|                mutate ? (node->impl.d.data.inner.relaxed = new (
  ------------------
  |  Branch (1330:17): [True: 907, False: 477]
  ------------------
 1331|    907|                              node_t::heap::allocate(node_t::max_sizeof_relaxed,
 1332|    907|                                                     norefs_tag{})) relaxed_t,
 1333|    907|                          node)
 1334|  1.38k|                       : node_t::make_inner_r_e(e);
 1335|  1.38k|            auto newr = newn->relaxed();
 1336|  1.38k|            IMMER_TRY {
  ------------------
  |  |   41|  1.38k|#define IMMER_TRY try
  ------------------
 1337|  1.38k|                auto subs =
 1338|  1.38k|                    mutate ? pos.towards_sub_oh(no_collapse_t{}, first, idx, e)
  ------------------
  |  Branch (1338:21): [True: 907, False: 477]
  ------------------
 1339|  1.38k|                           : pos.towards_sub_oh(
 1340|    477|                                 no_collapse_no_mut_t{}, first, idx, e);
 1341|  1.38k|                if (mutate)
  ------------------
  |  Branch (1341:21): [True: 907, False: 477]
  ------------------
 1342|    907|                    pos.each_left(dec_visitor{}, idx);
 1343|  1.38k|                newr->d.sizes[0] = child_size - child_dropped_size;
 1344|  1.38k|                assert(newr->d.sizes[0]);
 1345|      0|                pos.copy_sizes(
 1346|  1.38k|                    idx + 1, newcount - 1, newr->d.sizes[0], newr->d.sizes + 1);
 1347|  1.38k|                newr->d.count    = newcount;
 1348|  1.38k|                newn->inner()[0] = get<1>(subs);
 1349|  1.38k|                std::copy(node->inner() + idx + 1,
 1350|  1.38k|                          node->inner() + count,
 1351|  1.38k|                          newn->inner() + 1);
 1352|  1.38k|                if (!mutate) {
  ------------------
  |  Branch (1352:21): [True: 477, False: 907]
  ------------------
 1353|    477|                    node_t::inc_nodes(newn->inner() + 1, newcount - 1);
 1354|    477|                    if (Mutating)
  ------------------
  |  Branch (1354:25): [Folded - Ignored]
  ------------------
 1355|    477|                        pos.visit(dec_visitor{});
 1356|    477|                }
 1357|  1.38k|                return std::make_tuple(pos.shift(), newn);
 1358|  1.38k|            }
 1359|  1.38k|            IMMER_CATCH (...) {
 1360|      0|                if (!mutate)
  ------------------
  |  Branch (1360:21): [True: 0, False: 0]
  ------------------
 1361|      0|                    node_t::delete_inner_r_e(newn);
 1362|      0|                else {
 1363|       |                    // restore the regular node that we were
 1364|       |                    // attempting to relax...
 1365|      0|                    node_t::heap::deallocate(node_t::max_sizeof_relaxed,
 1366|      0|                                             node->impl.d.data.inner.relaxed);
 1367|      0|                    node->impl.d.data.inner.relaxed = nullptr;
 1368|      0|                }
 1369|      0|                IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1370|      0|            }
 1371|  1.38k|        }
 1372|  2.51k|    }
_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:
  348|  10.0k|        {
  349|  10.0k|            assert(shiftl <= posr.shift());
  350|  10.0k|            return shiftl == posr.shift()
  ------------------
  |  Branch (350:20): [True: 9.05k, False: 1.00k]
  ------------------
  351|  10.0k|                       ? visit_maybe_relaxed_sub(rootl,
  352|  9.05k|                                                 shiftl,
  353|  9.05k|                                                 sizel,
  354|  9.05k|                                                 this_t{},
  355|  9.05k|                                                 posr,
  356|  9.05k|                                                 first,
  357|  9.05k|                                                 size_t{})
  358|  10.0k|                       : posr.first_sub_inner(
  359|  1.00k|                             rrb{}, first, rootl, shiftl, sizel);
  360|  10.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:
  381|  27.9k|    {
  382|  27.9k|        auto nl = posl.node();
  383|  27.9k|        auto nr = posr.node();
  384|  27.9k|        if (nl == nr)
  ------------------
  |  Branch (384:13): [True: 6.72k, False: 21.2k]
  ------------------
  385|  6.72k|            return true;
  386|  21.2k|        auto cl = posl.count();
  387|  21.2k|        auto cr = posr.count();
  388|  21.2k|        assert(cr > 0);
  389|      0|        auto sbr = size_t{};
  390|  21.2k|        auto i   = count_t{};
  391|  21.2k|        auto j   = count_t{};
  392|  74.5k|        for (; i < cl; ++i) {
  ------------------
  |  Branch (392:16): [True: 60.4k, False: 14.1k]
  ------------------
  393|  60.4k|            auto sbl = posl.size_before(i);
  394|  97.6k|            for (; j + 1 < cr && (sbr = posr.size_before(j)) < sbl; ++j)
  ------------------
  |  Branch (394:20): [True: 77.0k, False: 20.5k]
  |  Branch (394:34): [True: 37.2k, False: 39.8k]
  ------------------
  395|  37.2k|                ;
  396|  60.4k|            auto res =
  397|  60.4k|                sbl == sbr
  ------------------
  |  Branch (397:17): [True: 34.8k, False: 25.6k]
  ------------------
  398|  60.4k|                    ? posr.nth_sub(j, this_aux_t{}, i, posl, first, idx + sbl)
  399|  60.4k|                    : posl.nth_sub(i,
  400|  25.6k|                                   for_each_chunk_p_visitor{},
  401|  25.6k|                                   this_t::equal_chunk_p(first + (idx + sbl)));
  402|  60.4k|            if (!res)
  ------------------
  |  Branch (402:17): [True: 7.06k, False: 53.3k]
  ------------------
  403|  7.06k|                return false;
  404|  60.4k|        }
  405|  14.1k|        return true;
  406|  21.2k|    }
_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:
  335|  11.1k|        {
  336|  11.1k|            return posl.nth_sub_leaf(i, this_t{}, posr, first, idx);
  337|  11.1k|        }
_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:
  426|  11.9k|    {
  427|  11.9k|        if (posl.node() == posr.node())
  ------------------
  |  Branch (427:13): [True: 6.33k, False: 5.56k]
  ------------------
  428|  6.33k|            return true;
  429|  5.56k|        auto cl = posl.count();
  430|  5.56k|        auto cr = posr.count();
  431|  5.56k|        auto mp = std::min(cl, cr);
  432|  5.56k|        return std::equal(posl.node()->leaf(),
  ------------------
  |  Branch (432:16): [True: 4.90k, False: 667]
  ------------------
  433|  5.56k|                          posl.node()->leaf() + mp,
  434|  5.56k|                          posr.node()->leaf()) &&
  435|  5.56k|               std::equal(posl.node()->leaf() + mp,
  ------------------
  |  Branch (435:16): [True: 4.52k, False: 378]
  ------------------
  436|  4.90k|                          posl.node()->leaf() + posl.count(),
  437|  4.90k|                          first + (idx + mp));
  438|  11.9k|    }
_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:
  328|  22.5k|        {
  329|  22.5k|            return posl.nth_sub(i, this_t{}, posr, first, idx);
  330|  22.5k|        }
_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:
  411|  4.99k|    {
  412|  4.99k|        return this_t::visit_relaxed(posl, posr, first, idx);
  413|  4.99k|    }
_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:
  381|  4.99k|    {
  382|  4.99k|        auto nl = posl.node();
  383|  4.99k|        auto nr = posr.node();
  384|  4.99k|        if (nl == nr)
  ------------------
  |  Branch (384:13): [True: 0, False: 4.99k]
  ------------------
  385|      0|            return true;
  386|  4.99k|        auto cl = posl.count();
  387|  4.99k|        auto cr = posr.count();
  388|  4.99k|        assert(cr > 0);
  389|      0|        auto sbr = size_t{};
  390|  4.99k|        auto i   = count_t{};
  391|  4.99k|        auto j   = count_t{};
  392|  13.5k|        for (; i < cl; ++i) {
  ------------------
  |  Branch (392:16): [True: 11.0k, False: 2.41k]
  ------------------
  393|  11.0k|            auto sbl = posl.size_before(i);
  394|  16.9k|            for (; j + 1 < cr && (sbr = posr.size_before(j)) < sbl; ++j)
  ------------------
  |  Branch (394:20): [True: 12.2k, False: 4.70k]
  |  Branch (394:34): [True: 5.88k, False: 6.37k]
  ------------------
  395|  5.88k|                ;
  396|  11.0k|            auto res =
  397|  11.0k|                sbl == sbr
  ------------------
  |  Branch (397:17): [True: 6.59k, False: 4.48k]
  ------------------
  398|  11.0k|                    ? posr.nth_sub(j, this_aux_t{}, i, posl, first, idx + sbl)
  399|  11.0k|                    : posl.nth_sub(i,
  400|  4.48k|                                   for_each_chunk_p_visitor{},
  401|  4.48k|                                   this_t::equal_chunk_p(first + (idx + sbl)));
  402|  11.0k|            if (!res)
  ------------------
  |  Branch (402:17): [True: 2.57k, False: 8.50k]
  ------------------
  403|  2.57k|                return false;
  404|  11.0k|        }
  405|  2.41k|        return true;
  406|  4.99k|    }
_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:
  335|  3.79k|        {
  336|  3.79k|            return posl.nth_sub_leaf(i, this_t{}, posr, first, idx);
  337|  3.79k|        }
_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:
  426|  6.98k|    {
  427|  6.98k|        if (posl.node() == posr.node())
  ------------------
  |  Branch (427:13): [True: 4.20k, False: 2.78k]
  ------------------
  428|  4.20k|            return true;
  429|  2.78k|        auto cl = posl.count();
  430|  2.78k|        auto cr = posr.count();
  431|  2.78k|        auto mp = std::min(cl, cr);
  432|  2.78k|        return std::equal(posl.node()->leaf(),
  ------------------
  |  Branch (432:16): [True: 2.21k, False: 566]
  ------------------
  433|  2.78k|                          posl.node()->leaf() + mp,
  434|  2.78k|                          posr.node()->leaf()) &&
  435|  2.78k|               std::equal(posl.node()->leaf() + mp,
  ------------------
  |  Branch (435:16): [True: 1.97k, False: 242]
  ------------------
  436|  2.21k|                          posl.node()->leaf() + posl.count(),
  437|  2.21k|                          first + (idx + mp));
  438|  6.98k|    }
_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:
  328|  2.28k|        {
  329|  2.28k|            return posl.nth_sub(i, this_t{}, posr, first, idx);
  330|  2.28k|        }
_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:
  411|  3.31k|    {
  412|  3.31k|        return this_t::visit_relaxed(posl, posr, first, idx);
  413|  3.31k|    }
_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:
  381|  3.31k|    {
  382|  3.31k|        auto nl = posl.node();
  383|  3.31k|        auto nr = posr.node();
  384|  3.31k|        if (nl == nr)
  ------------------
  |  Branch (384:13): [True: 0, False: 3.31k]
  ------------------
  385|      0|            return true;
  386|  3.31k|        auto cl = posl.count();
  387|  3.31k|        auto cr = posr.count();
  388|  3.31k|        assert(cr > 0);
  389|      0|        auto sbr = size_t{};
  390|  3.31k|        auto i   = count_t{};
  391|  3.31k|        auto j   = count_t{};
  392|  13.8k|        for (; i < cl; ++i) {
  ------------------
  |  Branch (392:16): [True: 11.3k, False: 2.52k]
  ------------------
  393|  11.3k|            auto sbl = posl.size_before(i);
  394|  19.1k|            for (; j + 1 < cr && (sbr = posr.size_before(j)) < sbl; ++j)
  ------------------
  |  Branch (394:20): [True: 14.7k, False: 4.38k]
  |  Branch (394:34): [True: 7.84k, False: 6.95k]
  ------------------
  395|  7.84k|                ;
  396|  11.3k|            auto res =
  397|  11.3k|                sbl == sbr
  ------------------
  |  Branch (397:17): [True: 6.54k, False: 4.80k]
  ------------------
  398|  11.3k|                    ? posr.nth_sub(j, this_aux_t{}, i, posl, first, idx + sbl)
  399|  11.3k|                    : posl.nth_sub(i,
  400|  4.80k|                                   for_each_chunk_p_visitor{},
  401|  4.80k|                                   this_t::equal_chunk_p(first + (idx + sbl)));
  402|  11.3k|            if (!res)
  ------------------
  |  Branch (402:17): [True: 791, False: 10.5k]
  ------------------
  403|    791|                return false;
  404|  11.3k|        }
  405|  2.52k|        return true;
  406|  3.31k|    }
_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:
  335|  3.96k|        {
  336|  3.96k|            return posl.nth_sub_leaf(i, this_t{}, posr, first, idx);
  337|  3.96k|        }
_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:
  328|  1.37k|        {
  329|  1.37k|            return posl.nth_sub(i, this_t{}, posr, first, idx);
  330|  1.37k|        }
_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:
  328|  1.20k|        {
  329|  1.20k|            return posl.nth_sub(i, this_t{}, posr, first, idx);
  330|  1.20k|        }
_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:
  418|  1.71k|    {
  419|  1.71k|        return posl.count() >= posr.count()
  ------------------
  |  Branch (419:16): [True: 1.71k, False: 0]
  ------------------
  420|  1.71k|                   ? this_t::visit_regular(posl, posr.node())
  421|  1.71k|                   : this_t::visit_regular(posr, posl.node());
  422|  1.71k|    }
_ZN5immer6detail4rbts14equals_visitor13visit_regularIRNS1_8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEESE_EEbOT_PT0_:
  442|  10.3k|    {
  443|  10.3k|        auto node = pos.node();
  444|  10.3k|        return node == other || pos.each_pred_zip(this_t{}, other);
  ------------------
  |  Branch (444:16): [True: 6.52k, False: 3.78k]
  |  Branch (444:33): [True: 1.93k, False: 1.84k]
  ------------------
  445|  10.3k|    }
_ZN5immer6detail4rbts14equals_visitor10visit_leafIRNS1_13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEESE_EEbOT_PT0_:
  449|  15.0k|    {
  450|  15.0k|        auto node = pos.node();
  451|  15.0k|        return node == other || std::equal(node->leaf(),
  ------------------
  |  Branch (451:16): [True: 8.72k, False: 6.36k]
  |  Branch (451:33): [True: 3.45k, False: 2.91k]
  ------------------
  452|  6.36k|                                           node->leaf() + pos.count(),
  453|  6.36k|                                           other->leaf());
  454|  15.0k|    }
_ZN5immer6detail4rbts14equals_visitor13visit_regularIRNS1_15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEESE_EEbOT_PT0_:
  442|  8.86k|    {
  443|  8.86k|        auto node = pos.node();
  444|  8.86k|        return node == other || pos.each_pred_zip(this_t{}, other);
  ------------------
  |  Branch (444:16): [True: 1.82k, False: 7.04k]
  |  Branch (444:33): [True: 3.12k, False: 3.91k]
  ------------------
  445|  8.86k|    }
_ZN5immer6detail4rbts14equals_visitor10visit_leafIRNS1_8leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEESE_EEbOT_PT0_:
  449|  3.74k|    {
  450|  3.74k|        auto node = pos.node();
  451|  3.74k|        return node == other || std::equal(node->leaf(),
  ------------------
  |  Branch (451:16): [True: 1.69k, False: 2.04k]
  |  Branch (451:33): [True: 821, False: 1.22k]
  ------------------
  452|  2.04k|                                           node->leaf() + pos.count(),
  453|  2.04k|                                           other->leaf());
  454|  3.74k|    }
_ZN5immer6detail4rbts14equals_visitor13visit_regularIRNS1_11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEESE_EEbOT_PT0_:
  442|  4.91k|    {
  443|  4.91k|        auto node = pos.node();
  444|  4.91k|        return node == other || pos.each_pred_zip(this_t{}, other);
  ------------------
  |  Branch (444:16): [True: 613, False: 4.30k]
  |  Branch (444:33): [True: 2.43k, False: 1.87k]
  ------------------
  445|  4.91k|    }
_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_:
  111|   655k|    {
  112|   655k|        auto data = as_const(pos.node()->leaf());
  113|   655k|        return fn(data, data + pos.count());
  114|   655k|    }
_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_:
  366|  1.76M|        return [iter](auto f, auto e) mutable {
  367|  1.76M|            if (f == &*iter) {
  ------------------
  |  Branch (367:17): [True: 133k, False: 1.62M]
  ------------------
  368|   133k|                iter += e - f;
  369|   133k|                return true;
  370|   133k|            }
  371|  7.76M|            for (; f != e; ++f, ++iter)
  ------------------
  |  Branch (371:20): [True: 6.14M, False: 1.62M]
  ------------------
  372|  6.14M|                if (*f != *iter)
  ------------------
  |  Branch (372:21): [True: 3.61k, False: 6.13M]
  ------------------
  373|  3.61k|                    return false;
  374|  1.62M|            return true;
  375|  1.62M|        };
_ZN5immer6detail4rbts18region_for_visitorIiE11visit_innerIRNS1_11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEEENSt3__15tupleIJPimmEEEOT_m:
   52|  9.98M|    {
   53|  9.98M|        return pos.towards(this_t{}, idx);
   54|  9.98M|    }
_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:
   58|  1.11M|    {
   59|  1.11M|        return std::make_tuple(pos.node()->leaf(), pos.index(idx), pos.count());
   60|  1.11M|    }
_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:
   52|   682k|    {
   53|   682k|        return pos.towards(this_t{}, idx);
   54|   682k|    }
_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:
   58|   660k|    {
   59|   660k|        return std::make_tuple(pos.node()->leaf(), pos.index(idx), pos.count());
   60|   660k|    }
_ZN5immer6detail4rbts18region_for_visitorIiE11visit_innerIRNS1_8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEEENSt3__15tupleIJPimmEEEOT_m:
   52|  1.99M|    {
   53|  1.99M|        return pos.towards(this_t{}, idx);
   54|  1.99M|    }
_ZN5immer6detail4rbts18region_for_visitorIiE10visit_leafIRNS1_8leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEEENSt3__15tupleIJPimmEEEOT_m:
   58|  22.0k|    {
   59|  22.0k|        return std::make_tuple(pos.node()->leaf(), pos.index(idx), pos.count());
   60|  22.0k|    }
_ZN5immer6detail4rbts18region_for_visitorIiE11visit_innerIRNS1_11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEEENSt3__15tupleIJPimmEEEOT_m:
   52|   188k|    {
   53|   188k|        return pos.towards(this_t{}, idx);
   54|   188k|    }
_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_:
  105|   197k|    {
  106|   197k|        return pos.each_pred(this_t{}, fn);
  107|   197k|    }
_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:
  328|    511|        {
  329|    511|            return posl.nth_sub(i, this_t{}, posr, first, idx);
  330|    511|        }
_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:
  418|  7.88k|    {
  419|  7.88k|        return posl.count() >= posr.count()
  ------------------
  |  Branch (419:16): [True: 7.88k, False: 0]
  ------------------
  420|  7.88k|                   ? this_t::visit_regular(posl, posr.node())
  421|  7.88k|                   : this_t::visit_regular(posr, posl.node());
  422|  7.88k|    }
_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_:
  111|  1.09M|    {
  112|  1.09M|        auto data = as_const(pos.node()->leaf());
  113|  1.09M|        return fn(data, data + pos.count());
  114|  1.09M|    }
_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_:
  105|  16.7k|    {
  106|  16.7k|        return pos.each_pred(this_t{}, fn);
  107|  16.7k|    }
_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_:
  111|  15.4k|    {
  112|  15.4k|        auto data = as_const(pos.node()->leaf());
  113|  15.4k|        return fn(data, data + pos.count());
  114|  15.4k|    }
_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_:
  105|  9.43k|    {
  106|  9.43k|        return pos.each_pred(this_t{}, fn);
  107|  9.43k|    }
_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:
  328|  2.10k|        {
  329|  2.10k|            return posl.nth_sub(i, this_t{}, posr, first, idx);
  330|  2.10k|        }
_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:
  381|  3.21k|    {
  382|  3.21k|        auto nl = posl.node();
  383|  3.21k|        auto nr = posr.node();
  384|  3.21k|        if (nl == nr)
  ------------------
  |  Branch (384:13): [True: 0, False: 3.21k]
  ------------------
  385|      0|            return true;
  386|  3.21k|        auto cl = posl.count();
  387|  3.21k|        auto cr = posr.count();
  388|  3.21k|        assert(cr > 0);
  389|      0|        auto sbr = size_t{};
  390|  3.21k|        auto i   = count_t{};
  391|  3.21k|        auto j   = count_t{};
  392|  10.0k|        for (; i < cl; ++i) {
  ------------------
  |  Branch (392:16): [True: 7.74k, False: 2.25k]
  ------------------
  393|  7.74k|            auto sbl = posl.size_before(i);
  394|  11.3k|            for (; j + 1 < cr && (sbr = posr.size_before(j)) < sbl; ++j)
  ------------------
  |  Branch (394:20): [True: 8.16k, False: 3.22k]
  |  Branch (394:34): [True: 3.64k, False: 4.51k]
  ------------------
  395|  3.64k|                ;
  396|  7.74k|            auto res =
  397|  7.74k|                sbl == sbr
  ------------------
  |  Branch (397:17): [True: 4.67k, False: 3.06k]
  ------------------
  398|  7.74k|                    ? posr.nth_sub(j, this_aux_t{}, i, posl, first, idx + sbl)
  399|  7.74k|                    : posl.nth_sub(i,
  400|  3.06k|                                   for_each_chunk_p_visitor{},
  401|  3.06k|                                   this_t::equal_chunk_p(first + (idx + sbl)));
  402|  7.74k|            if (!res)
  ------------------
  |  Branch (402:17): [True: 961, False: 6.78k]
  ------------------
  403|    961|                return false;
  404|  7.74k|        }
  405|  2.25k|        return true;
  406|  3.21k|    }
_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:
  335|  4.78k|        {
  336|  4.78k|            return posl.nth_sub_leaf(i, this_t{}, posr, first, idx);
  337|  4.78k|        }
_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:
  426|  4.78k|    {
  427|  4.78k|        if (posl.node() == posr.node())
  ------------------
  |  Branch (427:13): [True: 2.94k, False: 1.83k]
  ------------------
  428|  2.94k|            return true;
  429|  1.83k|        auto cl = posl.count();
  430|  1.83k|        auto cr = posr.count();
  431|  1.83k|        auto mp = std::min(cl, cr);
  432|  1.83k|        return std::equal(posl.node()->leaf(),
  ------------------
  |  Branch (432:16): [True: 1.32k, False: 505]
  ------------------
  433|  1.83k|                          posl.node()->leaf() + mp,
  434|  1.83k|                          posr.node()->leaf()) &&
  435|  1.83k|               std::equal(posl.node()->leaf() + mp,
  ------------------
  |  Branch (435:16): [True: 1.32k, False: 0]
  ------------------
  436|  1.32k|                          posl.node()->leaf() + posl.count(),
  437|  1.32k|                          first + (idx + mp));
  438|  4.78k|    }
_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:
  328|  2.83k|        {
  329|  2.83k|            return posl.nth_sub(i, this_t{}, posr, first, idx);
  330|  2.83k|        }
_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:
  381|  1.85k|    {
  382|  1.85k|        auto nl = posl.node();
  383|  1.85k|        auto nr = posr.node();
  384|  1.85k|        if (nl == nr)
  ------------------
  |  Branch (384:13): [True: 0, False: 1.85k]
  ------------------
  385|      0|            return true;
  386|  1.85k|        auto cl = posl.count();
  387|  1.85k|        auto cr = posr.count();
  388|  1.85k|        assert(cr > 0);
  389|      0|        auto sbr = size_t{};
  390|  1.85k|        auto i   = count_t{};
  391|  1.85k|        auto j   = count_t{};
  392|  8.18k|        for (; i < cl; ++i) {
  ------------------
  |  Branch (392:16): [True: 6.70k, False: 1.48k]
  ------------------
  393|  6.70k|            auto sbl = posl.size_before(i);
  394|  11.4k|            for (; j + 1 < cr && (sbr = posr.size_before(j)) < sbl; ++j)
  ------------------
  |  Branch (394:20): [True: 9.99k, False: 1.50k]
  |  Branch (394:34): [True: 4.79k, False: 5.20k]
  ------------------
  395|  4.79k|                ;
  396|  6.70k|            auto res =
  397|  6.70k|                sbl == sbr
  ------------------
  |  Branch (397:17): [True: 3.89k, False: 2.81k]
  ------------------
  398|  6.70k|                    ? posr.nth_sub(j, this_aux_t{}, i, posl, first, idx + sbl)
  399|  6.70k|                    : posl.nth_sub(i,
  400|  2.81k|                                   for_each_chunk_p_visitor{},
  401|  2.81k|                                   this_t::equal_chunk_p(first + (idx + sbl)));
  402|  6.70k|            if (!res)
  ------------------
  |  Branch (402:17): [True: 373, False: 6.32k]
  ------------------
  403|    373|                return false;
  404|  6.70k|        }
  405|  1.48k|        return true;
  406|  1.85k|    }
_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:
  418|    981|    {
  419|    981|        return posl.count() >= posr.count()
  ------------------
  |  Branch (419:16): [True: 981, False: 0]
  ------------------
  420|    981|                   ? this_t::visit_regular(posl, posr.node())
  421|    981|                   : this_t::visit_regular(posr, posl.node());
  422|    981|    }
_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_:
  105|   556k|    {
  106|   556k|        return pos.each_pred(this_t{}, fn);
  107|   556k|    }
_ZN5immer6detail4rbts14equals_visitor13equal_chunk_pINS1_16rrbtree_iteratorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEDaOT_:
  365|  40.7k|    {
  366|  40.7k|        return [iter](auto f, auto e) mutable {
  367|  40.7k|            if (f == &*iter) {
  368|  40.7k|                iter += e - f;
  369|  40.7k|                return true;
  370|  40.7k|            }
  371|  40.7k|            for (; f != e; ++f, ++iter)
  372|  40.7k|                if (*f != *iter)
  373|  40.7k|                    return false;
  374|  40.7k|            return true;
  375|  40.7k|        };
  376|  40.7k|    }
_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:
  348|  1.47k|        {
  349|  1.47k|            assert(shiftl <= posr.shift());
  350|  1.47k|            return shiftl == posr.shift()
  ------------------
  |  Branch (350:20): [True: 1.00k, False: 467]
  ------------------
  351|  1.47k|                       ? visit_maybe_relaxed_sub(rootl,
  352|  1.00k|                                                 shiftl,
  353|  1.00k|                                                 sizel,
  354|  1.00k|                                                 this_t{},
  355|  1.00k|                                                 posr,
  356|  1.00k|                                                 first,
  357|  1.00k|                                                 size_t{})
  358|  1.47k|                       : posr.first_sub_inner(
  359|    467|                             rrb{}, first, rootl, shiftl, sizel);
  360|  1.47k|        }
_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:
  348|  8.99k|        {
  349|  8.99k|            assert(shiftl <= posr.shift());
  350|  8.99k|            return shiftl == posr.shift()
  ------------------
  |  Branch (350:20): [True: 8.99k, False: 0]
  ------------------
  351|  8.99k|                       ? visit_maybe_relaxed_sub(rootl,
  352|  8.99k|                                                 shiftl,
  353|  8.99k|                                                 sizel,
  354|  8.99k|                                                 this_t{},
  355|  8.99k|                                                 posr,
  356|  8.99k|                                                 first,
  357|  8.99k|                                                 size_t{})
  358|  8.99k|                       : posr.first_sub_inner(
  359|      0|                             rrb{}, first, rootl, shiftl, sizel);
  360|  8.99k|        }
_ZN5immer6detail4rbts14equals_visitor10visit_leafIRNS1_12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEESE_EEbOT_PT0_:
  449|  5.26k|    {
  450|  5.26k|        auto node = pos.node();
  451|  5.26k|        return node == other || std::equal(node->leaf(),
  ------------------
  |  Branch (451:16): [True: 1.94k, False: 3.32k]
  |  Branch (451:33): [True: 1.55k, False: 1.76k]
  ------------------
  452|  3.32k|                                           node->leaf() + pos.count(),
  453|  3.32k|                                           other->leaf());
  454|  5.26k|    }

_ZN5immer6detail4rbts23visit_maybe_relaxed_subINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENS1_11dec_visitorEJEEEDcPT_jmT0_DpOT1_:
 1830|  44.6M|{
 1831|  44.6M|    assert(node);
 1832|      0|    auto relaxed = node->relaxed();
 1833|  44.6M|    if (relaxed) {
  ------------------
  |  Branch (1833:9): [True: 41.0M, False: 3.62M]
  ------------------
 1834|  41.0M|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
 1835|      0|        return make_relaxed_pos(node, shift, relaxed)
 1836|  41.0M|            .visit(v, std::forward<Args>(args)...);
 1837|  41.0M|    } else {
 1838|  3.62M|        return make_regular_sub_pos(node, shift, size)
 1839|  3.62M|            .visit(v, std::forward<Args>(args)...);
 1840|  3.62M|    }
 1841|  44.6M|}
_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:
 1820|   136M|{
 1821|   136M|    assert(node);
 1822|      0|    assert(relaxed);
 1823|      0|    assert(shift >= NodeT::bits_leaf);
 1824|      0|    return {node, shift, relaxed};
 1825|   136M|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_11dec_visitorEJEEEDcT_DpOT0_:
 1805|  52.4M|    {
 1806|  52.4M|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1807|  52.4M|    }
_ZNK5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE4nodeEv:
 1423|  85.4M|    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_:
 1468|  16.8M|    {
 1469|  16.8M|        each_left(v, relaxed_->d.count, args...);
 1470|  16.8M|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE9each_leftINS1_11dec_visitorEJEEEvT_jDpOT0_:
 1615|  16.9M|    {
 1616|  16.9M|        auto p = node_->inner();
 1617|  16.9M|        auto s = size_t{};
 1618|  16.9M|        if (shift_ == BL) {
  ------------------
  |  Branch (1618:13): [True: 2.89M, False: 14.0M]
  ------------------
 1619|  12.9M|            for (auto i = count_t{0}; i < n; ++i) {
  ------------------
  |  Branch (1619:39): [True: 10.1M, False: 2.89M]
  ------------------
 1620|  10.1M|                IMMER_PREFETCH(p + i + 1);
 1621|  10.1M|                make_leaf_sub_pos(p[i], relaxed_->d.sizes[i] - s)
 1622|  10.1M|                    .visit(v, args...);
 1623|  10.1M|                s = relaxed_->d.sizes[i];
 1624|  10.1M|                assert(s);
 1625|  10.1M|            }
 1626|  14.0M|        } else {
 1627|  14.0M|            auto ss = shift_ - B;
 1628|  56.7M|            for (auto i = count_t{0}; i < n; ++i) {
  ------------------
  |  Branch (1628:39): [True: 42.6M, False: 14.0M]
  ------------------
 1629|  42.6M|                visit_maybe_relaxed_sub(
 1630|  42.6M|                    p[i], ss, relaxed_->d.sizes[i] - s, v, args...);
 1631|  42.6M|                s = relaxed_->d.sizes[i];
 1632|  42.6M|                assert(s);
 1633|  42.6M|            }
 1634|  14.0M|        }
 1635|  16.9M|    }
_ZNK5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5countEv:
 1422|  80.6M|    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:
 1036|  8.53M|{
 1037|  8.53M|    assert(node);
 1038|      0|    assert(shift >= NodeT::bits_leaf);
 1039|      0|    assert(size > 0);
 1040|      0|    assert(size <= (branches<NodeT::bits, size_t> << shift));
 1041|      0|    return {node, shift, size};
 1042|  8.53M|}
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_11dec_visitorEJEEEDcT_DpOT0_:
 1028|  3.63M|    {
 1029|  3.63M|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1030|  3.63M|    }
_ZNK5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE4nodeEv:
  777|  11.4M|    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_:
  817|   777k|    {
  818|   777k|        return each_regular(*this, v, args...);
  819|   777k|    }
_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_:
  341|   777k|{
  342|   777k|    constexpr auto B  = bits<Pos>;
  343|   777k|    constexpr auto BL = bits_leaf<Pos>;
  344|   777k|    auto n            = p.node()->inner();
  345|   777k|    auto last         = p.count() - 1;
  346|   777k|    auto e            = n + last;
  347|   777k|    if (p.shift() == BL) {
  ------------------
  |  Branch (347:9): [True: 113k, False: 664k]
  ------------------
  348|   239k|        for (; n != e; ++n) {
  ------------------
  |  Branch (348:16): [True: 126k, False: 113k]
  ------------------
  349|   126k|            IMMER_PREFETCH(n + 1);
  350|   126k|            make_full_leaf_pos(*n).visit(v, args...);
  351|   126k|        }
  352|   113k|        make_leaf_pos(*n, p.size()).visit(v, args...);
  353|   664k|    } else {
  354|   664k|        auto ss = p.shift() - B;
  355|  1.56M|        for (; n != e; ++n)
  ------------------
  |  Branch (355:16): [True: 896k, False: 664k]
  ------------------
  356|   896k|            make_full_pos(*n, ss).visit(v, args...);
  357|   664k|        make_regular_pos(*n, ss, p.size()).visit(v, args...);
  358|   664k|    }
  359|   777k|}
_ZNK5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5shiftEv:
  779|  10.8M|    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_:
  212|  6.57M|{
  213|  6.57M|    assert(node);
  214|      0|    return {node};
  215|  6.57M|}
_ZN5immer6detail4rbts13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_11dec_visitorEJEEEDcT_DpOT0_:
  205|  1.63M|    {
  206|  1.63M|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  207|  1.63M|    }
_ZNK5immer6detail4rbts13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE4nodeEv:
  197|  4.97M|    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:
  196|  5.62M|    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:
  118|  1.37M|{
  119|  1.37M|    assert(node);
  120|      0|    assert(size > 0);
  121|      0|    return {node, size};
  122|  1.37M|}
_ZNK5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE4sizeEv:
  778|  5.37M|    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_:
  111|   606k|    {
  112|   606k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  113|   606k|    }
_ZNK5immer6detail4rbts8leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE4nodeEv:
  103|  1.37M|    node_t* node() const { return node_; }
_ZNK5immer6detail4rbts8leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5countEv:
  102|  1.50M|    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:
  106|  1.56M|    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:
 1404|  9.51M|{
 1405|  9.51M|    assert(node);
 1406|      0|    assert(shift >= NodeT::bits_leaf);
 1407|      0|    return {node, shift};
 1408|  9.51M|}
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_11dec_visitorEJEEEDcT_DpOT0_:
 1397|  4.19M|    {
 1398|  4.19M|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1399|  4.19M|    }
_ZNK5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE4nodeEv:
 1151|  5.68M|    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_:
 1177|   320k|    {
 1178|   320k|        auto p = node_->inner();
 1179|   320k|        auto e = p + branches<B>;
 1180|   320k|        if (shift_ == BL) {
  ------------------
  |  Branch (1180:13): [True: 244k, False: 75.8k]
  ------------------
 1181|  1.22M|            for (; p != e; ++p) {
  ------------------
  |  Branch (1181:20): [True: 979k, False: 244k]
  ------------------
 1182|   979k|                IMMER_PREFETCH(p + 1);
 1183|   979k|                make_full_leaf_pos(*p).visit(v, args...);
 1184|   979k|            }
 1185|   244k|        } else {
 1186|  75.8k|            auto ss = shift_ - B;
 1187|   379k|            for (; p != e; ++p)
  ------------------
  |  Branch (1187:20): [True: 303k, False: 75.8k]
  ------------------
 1188|   303k|                make_full_pos(*p, ss).visit(v, args...);
 1189|  75.8k|        }
 1190|   320k|    }
_ZNK5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5countEv:
 1150|  3.16M|    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:
  688|  6.86M|{
  689|  6.86M|    assert(node);
  690|      0|    assert(shift >= NodeT::bits_leaf);
  691|      0|    assert(size > 0);
  692|      0|    return {node, shift, size};
  693|  6.86M|}
_ZN5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_11dec_visitorEJEEEDcT_DpOT0_:
  334|  2.84M|    {
  335|  2.84M|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
  336|  2.84M|    }
_ZNK5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE4nodeEv:
  229|  12.5M|    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_:
  241|  2.65M|    {
  242|  2.65M|        return each_regular(*this, v, args...);
  243|  2.65M|    }
_ZN5immer6detail4rbts12each_regularIRNS1_11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEENS1_11dec_visitorEJEEEvOT_T0_DpOT1_:
  341|  2.65M|{
  342|  2.65M|    constexpr auto B  = bits<Pos>;
  343|  2.65M|    constexpr auto BL = bits_leaf<Pos>;
  344|  2.65M|    auto n            = p.node()->inner();
  345|  2.65M|    auto last         = p.count() - 1;
  346|  2.65M|    auto e            = n + last;
  347|  2.65M|    if (p.shift() == BL) {
  ------------------
  |  Branch (347:9): [True: 487k, False: 2.17M]
  ------------------
  348|   999k|        for (; n != e; ++n) {
  ------------------
  |  Branch (348:16): [True: 511k, False: 487k]
  ------------------
  349|   511k|            IMMER_PREFETCH(n + 1);
  350|   511k|            make_full_leaf_pos(*n).visit(v, args...);
  351|   511k|        }
  352|   487k|        make_leaf_pos(*n, p.size()).visit(v, args...);
  353|  2.17M|    } else {
  354|  2.17M|        auto ss = p.shift() - B;
  355|  5.15M|        for (; n != e; ++n)
  ------------------
  |  Branch (355:16): [True: 2.98M, False: 2.17M]
  ------------------
  356|  2.98M|            make_full_pos(*n, ss).visit(v, args...);
  357|  2.17M|        make_regular_pos(*n, ss, p.size()).visit(v, args...);
  358|  2.17M|    }
  359|  2.65M|}
_ZNK5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5shiftEv:
  231|  11.9M|    shift_t shift() const { return shift_; }
_ZNK5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE4sizeEv:
  230|  17.0M|    size_t size() const { return size_; }
_ZNK5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5countEv:
  228|  8.73M|    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:
  232|  16.7M|    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:
  776|  13.0M|    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:
  781|  13.3M|    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_:
   63|  1.85M|{
   64|  1.85M|    return {node};
   65|  1.85M|}
_ZN5immer6detail4rbts17empty_regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_11dec_visitorEJEEEDcT_DpOT0_:
   56|  1.85M|    {
   57|  1.85M|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
   58|  1.85M|    }
_ZNK5immer6detail4rbts17empty_regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE4nodeEv:
   41|  1.85M|    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:
  150|  24.2M|{
  151|  24.2M|    assert(node);
  152|      0|    assert(count <= branches<NodeT::bits_leaf>);
  153|      0|    return {node, count};
  154|  24.2M|}
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_11dec_visitorEJEEEDcT_DpOT0_:
  143|  14.1M|    {
  144|  14.1M|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  145|  14.1M|    }
_ZNK5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE4nodeEv:
  135|  21.1M|    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:
  134|  11.0M|    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_:
   87|  1.70M|{
   88|  1.70M|    assert(node);
   89|      0|    return {node};
   90|  1.70M|}
_ZN5immer6detail4rbts14empty_leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_11dec_visitorEJEEEDcT_DpOT0_:
   80|  1.70M|    {
   81|  1.70M|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
   82|  1.70M|    }
_ZNK5immer6detail4rbts14empty_leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE4nodeEv:
   74|  1.70M|    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:
   73|  9.86k|    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_:
 1805|   663k|    {
 1806|   663k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1807|   663k|    }
_ZNK5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5shiftEv:
 1425|  15.5M|    shift_t shift() const { return shift_; }
_ZNK5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE4sizeEj:
 1435|  7.96M|    {
 1436|  7.96M|        return size_sbh(offset, size_before(offset));
 1437|  7.96M|    }
_ZNK5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE8size_sbhEjm:
 1440|  8.33M|    {
 1441|  8.33M|        assert(size_before_hint == size_before(offset));
 1442|      0|        return relaxed_->d.sizes[offset] - size_before_hint;
 1443|  8.33M|    }
_ZNK5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE11size_beforeEj:
 1430|  23.9M|    {
 1431|  23.9M|        return offset ? relaxed_->d.sizes[offset - 1] : 0;
  ------------------
  |  Branch (1431:16): [True: 15.1M, False: 8.71M]
  ------------------
 1432|  23.9M|    }
_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_:
 1729|   647k|    {
 1730|   647k|        assert(offset_hint == count() - 1);
 1731|      0|        assert(child_size_hint == size(offset_hint));
 1732|      0|        auto child   = node_->inner()[offset_hint];
 1733|   647k|        auto is_leaf = shift_ == BL;
 1734|   647k|        return is_leaf
  ------------------
  |  Branch (1734:16): [True: 0, False: 647k]
  ------------------
 1735|   647k|                   ? make_leaf_sub_pos(child, child_size_hint).visit(v, args...)
 1736|   647k|                   : visit_maybe_relaxed_sub(
 1737|   647k|                         child, shift_ - B, child_size_hint, v, args...);
 1738|   647k|    }
_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_:
 1830|   647k|{
 1831|   647k|    assert(node);
 1832|      0|    auto relaxed = node->relaxed();
 1833|   647k|    if (relaxed) {
  ------------------
  |  Branch (1833:9): [True: 383k, False: 264k]
  ------------------
 1834|   383k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
 1835|      0|        return make_relaxed_pos(node, shift, relaxed)
 1836|   383k|            .visit(v, std::forward<Args>(args)...);
 1837|   383k|    } else {
 1838|   264k|        return make_regular_sub_pos(node, shift, size)
 1839|   264k|            .visit(v, std::forward<Args>(args)...);
 1840|   264k|    }
 1841|   647k|}
_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_:
 1028|   264k|    {
 1029|   264k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1030|   264k|    }
_ZNK5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5indexEm:
  780|  3.49M|    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_:
  944|   583k|    {
  945|   583k|        return last_oh_regular(*this, v, offset_hint, args...);
  946|   583k|    }
_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_:
  675|   583k|{
  676|   583k|    assert(offset_hint == p.count() - 1);
  677|      0|    constexpr auto B  = bits<Pos>;
  678|   583k|    constexpr auto BL = bits_leaf<Pos>;
  679|   583k|    auto child        = p.node()->inner()[offset_hint];
  680|   583k|    auto is_leaf      = p.shift() == BL;
  681|   583k|    return is_leaf ? make_leaf_pos(child, p.size()).visit(v, args...)
  ------------------
  |  Branch (681:12): [True: 0, False: 583k]
  ------------------
  682|   583k|                   : make_regular_pos(child, p.shift() - B, p.size())
  683|   583k|                         .visit(v, args...);
  684|   583k|}
_ZN5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_17push_tail_visitorISC_EEJRPSC_EEEDcT_DpOT0_:
  334|  2.59M|    {
  335|  2.59M|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
  336|  2.59M|    }
_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_:
  328|  2.01M|    {
  329|  2.01M|        return last_oh_regular(*this, v, offset_hint, args...);
  330|  2.01M|    }
_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_:
  675|  2.01M|{
  676|  2.01M|    assert(offset_hint == p.count() - 1);
  677|      0|    constexpr auto B  = bits<Pos>;
  678|  2.01M|    constexpr auto BL = bits_leaf<Pos>;
  679|  2.01M|    auto child        = p.node()->inner()[offset_hint];
  680|  2.01M|    auto is_leaf      = p.shift() == BL;
  681|  2.01M|    return is_leaf ? make_leaf_pos(child, p.size()).visit(v, args...)
  ------------------
  |  Branch (681:12): [True: 0, False: 2.01M]
  ------------------
  682|  2.01M|                   : make_regular_pos(child, p.shift() - B, p.size())
  683|  2.01M|                         .visit(v, args...);
  684|  2.01M|}
_ZNK5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE4sizeEv:
 1424|  31.1M|    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_:
 1028|   345k|    {
 1029|   345k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1030|   345k|    }
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_:
  143|  90.7k|    {
  144|  90.7k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  145|  90.7k|    }
_ZNK5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5indexEm:
  138|  1.34M|    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_:
 1830|   532k|{
 1831|   532k|    assert(node);
 1832|      0|    auto relaxed = node->relaxed();
 1833|   532k|    if (relaxed) {
  ------------------
  |  Branch (1833:9): [True: 405k, False: 126k]
  ------------------
 1834|   405k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
 1835|      0|        return make_relaxed_pos(node, shift, relaxed)
 1836|   405k|            .visit(v, std::forward<Args>(args)...);
 1837|   405k|    } else {
 1838|   126k|        return make_regular_sub_pos(node, shift, size)
 1839|   126k|            .visit(v, std::forward<Args>(args)...);
 1840|   126k|    }
 1841|   532k|}
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_:
 1805|   405k|    {
 1806|   405k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1807|   405k|    }
_ZNK5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5indexEm:
 1446|  33.2M|    {
 1447|  33.2M|        auto offset = idx >> shift_;
 1448|  44.5M|        while (relaxed_->d.sizes[offset] <= idx)
  ------------------
  |  Branch (1448:16): [True: 11.2M, False: 33.2M]
  ------------------
 1449|  11.2M|            ++offset;
 1450|  33.2M|        return offset;
 1451|  33.2M|    }
_ZNK5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE7relaxedEv:
 1427|   405k|    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_:
 1678|   405k|    {
 1679|   405k|        assert(offset_hint == index(idx));
 1680|   405k|        auto left_size = offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0;
  ------------------
  |  Branch (1680:26): [True: 86.5k, False: 319k]
  ------------------
 1681|   405k|        return towards_oh_sbh(v, idx, offset_hint, left_size, args...);
 1682|   405k|    }
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_:
 1690|   405k|    {
 1691|   405k|        return towards_sub_oh_sbh(v, idx, offset_hint, left_size_hint, args...);
 1692|   405k|    }
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_:
 1709|   405k|    {
 1710|   405k|        assert(offset_hint == index(idx));
 1711|      0|        assert(left_size_hint ==
 1712|   405k|               (offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0));
 1713|      0|        auto child     = node_->inner()[offset_hint];
 1714|   405k|        auto is_leaf   = shift_ == BL;
 1715|   405k|        auto next_size = relaxed_->d.sizes[offset_hint] - left_size_hint;
 1716|   405k|        auto next_idx  = idx - left_size_hint;
 1717|   405k|        return is_leaf
  ------------------
  |  Branch (1717:16): [True: 55.9k, False: 349k]
  ------------------
 1718|   405k|                   ? make_leaf_sub_pos(child, next_size)
 1719|  55.9k|                         .visit(v, next_idx, args...)
 1720|   405k|                   : visit_maybe_relaxed_sub(
 1721|   349k|                         child, shift_ - B, next_size, v, next_idx, args...);
 1722|   405k|    }
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_:
  143|  55.9k|    {
  144|  55.9k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  145|  55.9k|    }
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_:
 1028|   126k|    {
 1029|   126k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1030|   126k|    }
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_:
  930|   126k|    {
  931|   126k|        return towards_oh_ch_regular(
  932|   126k|            *this, v, idx, offset_hint, count(), args...);
  933|   126k|    }
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_:
  630|   126k|{
  631|   126k|    constexpr auto B  = bits<Pos>;
  632|   126k|    constexpr auto BL = bits_leaf<Pos>;
  633|   126k|    assert(offset_hint == p.index(idx));
  634|      0|    assert(count_hint == p.count());
  635|      0|    auto is_leaf = p.shift() == BL;
  636|   126k|    auto child   = p.node()->inner()[offset_hint];
  637|   126k|    auto is_full = offset_hint + 1 != count_hint;
  638|   126k|    return is_full
  ------------------
  |  Branch (638:12): [True: 80.5k, False: 46.1k]
  ------------------
  639|   126k|               ? (is_leaf ? make_full_leaf_pos(child).visit(v, idx, args...)
  ------------------
  |  Branch (639:19): [True: 40.0k, False: 40.5k]
  ------------------
  640|  80.5k|                          : make_full_pos(child, p.shift() - B)
  641|  40.5k|                                .visit(v, idx, args...))
  642|   126k|               : (is_leaf
  ------------------
  |  Branch (642:19): [True: 26.8k, False: 19.3k]
  ------------------
  643|  46.1k|                      ? make_leaf_pos(child, p.size()).visit(v, idx, args...)
  644|  46.1k|                      : make_regular_pos(child, p.shift() - B, p.size())
  645|  19.3k|                            .visit(v, idx, args...));
  646|   126k|}
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_:
  205|  98.3k|    {
  206|  98.3k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  207|  98.3k|    }
_ZNK5immer6detail4rbts13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5indexEm:
  200|   808k|    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_:
 1397|  56.2k|    {
 1398|  56.2k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1399|  56.2k|    }
_ZNK5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5indexEm:
 1154|  4.15M|    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_:
 1321|  56.2k|    {
 1322|  56.2k|        return towards_oh(v, idx, offset_hint, args...);
 1323|  56.2k|    }
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_:
 1328|  56.2k|    {
 1329|  56.2k|        assert(offset_hint == index(idx));
 1330|      0|        auto is_leaf = shift_ == BL;
 1331|  56.2k|        auto child   = node_->inner()[offset_hint];
 1332|  56.2k|        return is_leaf
  ------------------
  |  Branch (1332:16): [True: 41.3k, False: 14.9k]
  ------------------
 1333|  56.2k|                   ? make_full_leaf_pos(child).visit(v, idx, args...)
 1334|  56.2k|                   : make_full_pos(child, shift_ - B).visit(v, idx, args...);
 1335|  56.2k|    }
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_:
  111|  28.3k|    {
  112|  28.3k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  113|  28.3k|    }
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_:
  334|  19.6k|    {
  335|  19.6k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
  336|  19.6k|    }
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_:
  314|  19.6k|    {
  315|  19.6k|        return towards_oh_ch_regular(
  316|  19.6k|            *this, v, idx, offset_hint, count(), args...);
  317|  19.6k|    }
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_:
  630|  19.6k|{
  631|  19.6k|    constexpr auto B  = bits<Pos>;
  632|  19.6k|    constexpr auto BL = bits_leaf<Pos>;
  633|  19.6k|    assert(offset_hint == p.index(idx));
  634|      0|    assert(count_hint == p.count());
  635|      0|    auto is_leaf = p.shift() == BL;
  636|  19.6k|    auto child   = p.node()->inner()[offset_hint];
  637|  19.6k|    auto is_full = offset_hint + 1 != count_hint;
  638|  19.6k|    return is_full
  ------------------
  |  Branch (638:12): [True: 17.7k, False: 1.87k]
  ------------------
  639|  19.6k|               ? (is_leaf ? make_full_leaf_pos(child).visit(v, idx, args...)
  ------------------
  |  Branch (639:19): [True: 17.0k, False: 770]
  ------------------
  640|  17.7k|                          : make_full_pos(child, p.shift() - B)
  641|    770|                                .visit(v, idx, args...))
  642|  19.6k|               : (is_leaf
  ------------------
  |  Branch (642:19): [True: 1.52k, False: 355]
  ------------------
  643|  1.87k|                      ? make_leaf_pos(child, p.size()).visit(v, idx, args...)
  644|  1.87k|                      : make_regular_pos(child, p.shift() - B, p.size())
  645|    355|                            .visit(v, idx, args...));
  646|  19.6k|}
_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_:
 1830|  60.9k|{
 1831|  60.9k|    assert(node);
 1832|      0|    auto relaxed = node->relaxed();
 1833|  60.9k|    if (relaxed) {
  ------------------
  |  Branch (1833:9): [True: 53.9k, False: 6.93k]
  ------------------
 1834|  53.9k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
 1835|      0|        return make_relaxed_pos(node, shift, relaxed)
 1836|  53.9k|            .visit(v, std::forward<Args>(args)...);
 1837|  53.9k|    } else {
 1838|  6.93k|        return make_regular_sub_pos(node, shift, size)
 1839|  6.93k|            .visit(v, std::forward<Args>(args)...);
 1840|  6.93k|    }
 1841|  60.9k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_19slice_right_visitorISC_Lb1EEEJRmEEEDcT_DpOT0_:
 1805|  53.9k|    {
 1806|  53.9k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1807|  53.9k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10towards_ohINS1_19slice_right_visitorISC_Lb1EEEJEEEDcT_mjDpOT0_:
 1678|  42.6k|    {
 1679|  42.6k|        assert(offset_hint == index(idx));
 1680|  42.6k|        auto left_size = offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0;
  ------------------
  |  Branch (1680:26): [True: 0, False: 42.6k]
  ------------------
 1681|  42.6k|        return towards_oh_sbh(v, idx, offset_hint, left_size, args...);
 1682|  42.6k|    }
_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_:
 1690|  42.6k|    {
 1691|  42.6k|        return towards_sub_oh_sbh(v, idx, offset_hint, left_size_hint, args...);
 1692|  42.6k|    }
_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_:
 1709|  42.6k|    {
 1710|  42.6k|        assert(offset_hint == index(idx));
 1711|      0|        assert(left_size_hint ==
 1712|  42.6k|               (offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0));
 1713|      0|        auto child     = node_->inner()[offset_hint];
 1714|  42.6k|        auto is_leaf   = shift_ == BL;
 1715|  42.6k|        auto next_size = relaxed_->d.sizes[offset_hint] - left_size_hint;
 1716|  42.6k|        auto next_idx  = idx - left_size_hint;
 1717|  42.6k|        return is_leaf
  ------------------
  |  Branch (1717:16): [True: 1.92k, False: 40.7k]
  ------------------
 1718|  42.6k|                   ? make_leaf_sub_pos(child, next_size)
 1719|  1.92k|                         .visit(v, next_idx, args...)
 1720|  42.6k|                   : visit_maybe_relaxed_sub(
 1721|  40.7k|                         child, shift_ - B, next_size, v, next_idx, args...);
 1722|  42.6k|    }
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_19slice_right_visitorISC_Lb1EEEJRmEEEDcT_DpOT0_:
  143|  1.92k|    {
  144|  1.92k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  145|  1.92k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10towards_ohINS1_19slice_right_visitorISC_Lb0EEEJEEEDcT_mjDpOT0_:
 1678|  26.0k|    {
 1679|  26.0k|        assert(offset_hint == index(idx));
 1680|  26.0k|        auto left_size = offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0;
  ------------------
  |  Branch (1680:26): [True: 17.3k, False: 8.68k]
  ------------------
 1681|  26.0k|        return towards_oh_sbh(v, idx, offset_hint, left_size, args...);
 1682|  26.0k|    }
_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_:
 1690|  26.0k|    {
 1691|  26.0k|        return towards_sub_oh_sbh(v, idx, offset_hint, left_size_hint, args...);
 1692|  26.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_Lb0EEEJEEEDcT_mjmDpOT0_:
 1709|  26.0k|    {
 1710|  26.0k|        assert(offset_hint == index(idx));
 1711|      0|        assert(left_size_hint ==
 1712|  26.0k|               (offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0));
 1713|      0|        auto child     = node_->inner()[offset_hint];
 1714|  26.0k|        auto is_leaf   = shift_ == BL;
 1715|  26.0k|        auto next_size = relaxed_->d.sizes[offset_hint] - left_size_hint;
 1716|  26.0k|        auto next_idx  = idx - left_size_hint;
 1717|  26.0k|        return is_leaf
  ------------------
  |  Branch (1717:16): [True: 7.08k, False: 18.9k]
  ------------------
 1718|  26.0k|                   ? make_leaf_sub_pos(child, next_size)
 1719|  7.08k|                         .visit(v, next_idx, args...)
 1720|  26.0k|                   : visit_maybe_relaxed_sub(
 1721|  18.9k|                         child, shift_ - B, next_size, v, next_idx, args...);
 1722|  26.0k|    }
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_19slice_right_visitorISC_Lb0EEEJRmEEEDcT_DpOT0_:
  143|  7.08k|    {
  144|  7.08k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  145|  7.08k|    }
_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_:
 1830|  18.9k|{
 1831|  18.9k|    assert(node);
 1832|      0|    auto relaxed = node->relaxed();
 1833|  18.9k|    if (relaxed) {
  ------------------
  |  Branch (1833:9): [True: 14.7k, False: 4.22k]
  ------------------
 1834|  14.7k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
 1835|      0|        return make_relaxed_pos(node, shift, relaxed)
 1836|  14.7k|            .visit(v, std::forward<Args>(args)...);
 1837|  14.7k|    } else {
 1838|  4.22k|        return make_regular_sub_pos(node, shift, size)
 1839|  4.22k|            .visit(v, std::forward<Args>(args)...);
 1840|  4.22k|    }
 1841|  18.9k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_19slice_right_visitorISC_Lb0EEEJRmEEEDcT_DpOT0_:
 1805|  14.7k|    {
 1806|  14.7k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1807|  14.7k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_19slice_right_visitorISC_Lb0EEEJRmEEEDcT_DpOT0_:
 1028|  4.22k|    {
 1029|  4.22k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1030|  4.22k|    }
_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_:
  919|  7.63k|    {
  920|  7.63k|        return towards_oh_ch_regular(
  921|  7.63k|            *this, v, idx, offset_hint, count(), args...);
  922|  7.63k|    }
_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_:
  630|  7.63k|{
  631|  7.63k|    constexpr auto B  = bits<Pos>;
  632|  7.63k|    constexpr auto BL = bits_leaf<Pos>;
  633|  7.63k|    assert(offset_hint == p.index(idx));
  634|      0|    assert(count_hint == p.count());
  635|      0|    auto is_leaf = p.shift() == BL;
  636|  7.63k|    auto child   = p.node()->inner()[offset_hint];
  637|  7.63k|    auto is_full = offset_hint + 1 != count_hint;
  638|  7.63k|    return is_full
  ------------------
  |  Branch (638:12): [True: 2.52k, False: 5.10k]
  ------------------
  639|  7.63k|               ? (is_leaf ? make_full_leaf_pos(child).visit(v, idx, args...)
  ------------------
  |  Branch (639:19): [True: 1.55k, False: 970]
  ------------------
  640|  2.52k|                          : make_full_pos(child, p.shift() - B)
  641|    970|                                .visit(v, idx, args...))
  642|  7.63k|               : (is_leaf
  ------------------
  |  Branch (642:19): [True: 1.61k, False: 3.49k]
  ------------------
  643|  5.10k|                      ? make_leaf_pos(child, p.size()).visit(v, idx, args...)
  644|  5.10k|                      : make_regular_pos(child, p.shift() - B, p.size())
  645|  3.49k|                            .visit(v, idx, args...));
  646|  7.63k|}
_ZN5immer6detail4rbts13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_19slice_right_visitorISC_Lb0EEEJRmEEEDcT_DpOT0_:
  205|  5.57k|    {
  206|  5.57k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  207|  5.57k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_19slice_right_visitorISC_Lb0EEEJRmEEEDcT_DpOT0_:
 1397|  2.71k|    {
 1398|  2.71k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1399|  2.71k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10towards_ohINS1_19slice_right_visitorISC_Lb0EEEJEEEDcT_mjDpOT0_:
 1328|  3.85k|    {
 1329|  3.85k|        assert(offset_hint == index(idx));
 1330|      0|        auto is_leaf = shift_ == BL;
 1331|  3.85k|        auto child   = node_->inner()[offset_hint];
 1332|  3.85k|        return is_leaf
  ------------------
  |  Branch (1332:16): [True: 2.57k, False: 1.28k]
  ------------------
 1333|  3.85k|                   ? make_full_leaf_pos(child).visit(v, idx, args...)
 1334|  3.85k|                   : make_full_pos(child, shift_ - B).visit(v, idx, args...);
 1335|  3.85k|    }
_ZNK5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5shiftEv:
 1153|   319k|    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_:
  111|  3.20k|    {
  112|  3.20k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  113|  3.20k|    }
_ZN5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_19slice_right_visitorISC_Lb0EEEJRmEEEDcT_DpOT0_:
  334|  4.62k|    {
  335|  4.62k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
  336|  4.62k|    }
_ZN5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10towards_ohINS1_19slice_right_visitorISC_Lb0EEEJEEEDcT_mjDpOT0_:
  303|  4.62k|    {
  304|  4.62k|        return towards_oh_ch_regular(
  305|  4.62k|            *this, v, idx, offset_hint, count(), args...);
  306|  4.62k|    }
_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_:
  630|  4.62k|{
  631|  4.62k|    constexpr auto B  = bits<Pos>;
  632|  4.62k|    constexpr auto BL = bits_leaf<Pos>;
  633|  4.62k|    assert(offset_hint == p.index(idx));
  634|      0|    assert(count_hint == p.count());
  635|      0|    auto is_leaf = p.shift() == BL;
  636|  4.62k|    auto child   = p.node()->inner()[offset_hint];
  637|  4.62k|    auto is_full = offset_hint + 1 != count_hint;
  638|  4.62k|    return is_full
  ------------------
  |  Branch (638:12): [True: 1.90k, False: 2.72k]
  ------------------
  639|  4.62k|               ? (is_leaf ? make_full_leaf_pos(child).visit(v, idx, args...)
  ------------------
  |  Branch (639:19): [True: 1.43k, False: 462]
  ------------------
  640|  1.90k|                          : make_full_pos(child, p.shift() - B)
  641|    462|                                .visit(v, idx, args...))
  642|  4.62k|               : (is_leaf
  ------------------
  |  Branch (642:19): [True: 1.59k, False: 1.13k]
  ------------------
  643|  2.72k|                      ? make_leaf_pos(child, p.size()).visit(v, idx, args...)
  644|  2.72k|                      : make_regular_pos(child, p.shift() - B, p.size())
  645|  1.13k|                            .visit(v, idx, args...));
  646|  4.62k|}
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_19slice_right_visitorISC_Lb1EEEJRmEEEDcT_DpOT0_:
 1028|  6.93k|    {
 1029|  6.93k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1030|  6.93k|    }
_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_:
  919|  3.52k|    {
  920|  3.52k|        return towards_oh_ch_regular(
  921|  3.52k|            *this, v, idx, offset_hint, count(), args...);
  922|  3.52k|    }
_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_:
  630|  3.52k|{
  631|  3.52k|    constexpr auto B  = bits<Pos>;
  632|  3.52k|    constexpr auto BL = bits_leaf<Pos>;
  633|  3.52k|    assert(offset_hint == p.index(idx));
  634|      0|    assert(count_hint == p.count());
  635|      0|    auto is_leaf = p.shift() == BL;
  636|  3.52k|    auto child   = p.node()->inner()[offset_hint];
  637|  3.52k|    auto is_full = offset_hint + 1 != count_hint;
  638|  3.52k|    return is_full
  ------------------
  |  Branch (638:12): [True: 2.82k, False: 705]
  ------------------
  639|  3.52k|               ? (is_leaf ? make_full_leaf_pos(child).visit(v, idx, args...)
  ------------------
  |  Branch (639:19): [True: 1.02k, False: 1.79k]
  ------------------
  640|  2.82k|                          : make_full_pos(child, p.shift() - B)
  641|  1.79k|                                .visit(v, idx, args...))
  642|  3.52k|               : (is_leaf
  ------------------
  |  Branch (642:19): [True: 705, False: 0]
  ------------------
  643|    705|                      ? make_leaf_pos(child, p.size()).visit(v, idx, args...)
  644|    705|                      : make_regular_pos(child, p.shift() - B, p.size())
  645|      0|                            .visit(v, idx, args...));
  646|  3.52k|}
_ZN5immer6detail4rbts13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_19slice_right_visitorISC_Lb1EEEJRmEEEDcT_DpOT0_:
  205|  1.67k|    {
  206|  1.67k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  207|  1.67k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_19slice_right_visitorISC_Lb1EEEJRmEEEDcT_DpOT0_:
 1397|  2.41k|    {
 1398|  2.41k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1399|  2.41k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10towards_ohINS1_19slice_right_visitorISC_Lb1EEEJEEEDcT_mjDpOT0_:
 1328|  1.27k|    {
 1329|  1.27k|        assert(offset_hint == index(idx));
 1330|      0|        auto is_leaf = shift_ == BL;
 1331|  1.27k|        auto child   = node_->inner()[offset_hint];
 1332|  1.27k|        return is_leaf
  ------------------
  |  Branch (1332:16): [True: 650, False: 625]
  ------------------
 1333|  1.27k|                   ? make_full_leaf_pos(child).visit(v, idx, args...)
 1334|  1.27k|                   : make_full_pos(child, shift_ - B).visit(v, idx, args...);
 1335|  1.27k|    }
_ZN5immer6detail4rbts8leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_19slice_right_visitorISC_Lb1EEEJRmEEEDcT_DpOT0_:
  111|    705|    {
  112|    705|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  113|    705|    }
_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_:
 1830|  24.8k|{
 1831|  24.8k|    assert(node);
 1832|      0|    auto relaxed = node->relaxed();
 1833|  24.8k|    if (relaxed) {
  ------------------
  |  Branch (1833:9): [True: 17.3k, False: 7.50k]
  ------------------
 1834|  17.3k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
 1835|      0|        return make_relaxed_pos(node, shift, relaxed)
 1836|  17.3k|            .visit(v, std::forward<Args>(args)...);
 1837|  17.3k|    } else {
 1838|  7.50k|        return make_regular_sub_pos(node, shift, size)
 1839|  7.50k|            .visit(v, std::forward<Args>(args)...);
 1840|  7.50k|    }
 1841|  24.8k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_18slice_left_visitorISC_Lb1EEEJRmEEEDcT_DpOT0_:
 1805|  17.3k|    {
 1806|  17.3k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1807|  17.3k|    }
_ZNK5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE8subindexEm:
 1426|  10.3M|    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_:
 1697|  5.05k|    {
 1698|  5.05k|        assert(offset_hint == index(idx));
 1699|  5.05k|        auto left_size = offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0;
  ------------------
  |  Branch (1699:26): [True: 4.15k, False: 903]
  ------------------
 1700|  5.05k|        return towards_sub_oh_sbh(v, idx, offset_hint, left_size, args...);
 1701|  5.05k|    }
_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_:
 1709|  5.05k|    {
 1710|  5.05k|        assert(offset_hint == index(idx));
 1711|      0|        assert(left_size_hint ==
 1712|  5.05k|               (offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0));
 1713|      0|        auto child     = node_->inner()[offset_hint];
 1714|  5.05k|        auto is_leaf   = shift_ == BL;
 1715|  5.05k|        auto next_size = relaxed_->d.sizes[offset_hint] - left_size_hint;
 1716|  5.05k|        auto next_idx  = idx - left_size_hint;
 1717|  5.05k|        return is_leaf
  ------------------
  |  Branch (1717:16): [True: 0, False: 5.05k]
  ------------------
 1718|  5.05k|                   ? make_leaf_sub_pos(child, next_size)
 1719|      0|                         .visit(v, next_idx, args...)
 1720|  5.05k|                   : visit_maybe_relaxed_sub(
 1721|  5.05k|                         child, shift_ - B, next_size, v, next_idx, args...);
 1722|  5.05k|    }
_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_:
 1697|  83.4k|    {
 1698|  83.4k|        assert(offset_hint == index(idx));
 1699|  83.4k|        auto left_size = offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0;
  ------------------
  |  Branch (1699:26): [True: 19.2k, False: 64.2k]
  ------------------
 1700|  83.4k|        return towards_sub_oh_sbh(v, idx, offset_hint, left_size, args...);
 1701|  83.4k|    }
_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_:
 1709|  83.4k|    {
 1710|  83.4k|        assert(offset_hint == index(idx));
 1711|      0|        assert(left_size_hint ==
 1712|  83.4k|               (offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0));
 1713|      0|        auto child     = node_->inner()[offset_hint];
 1714|  83.4k|        auto is_leaf   = shift_ == BL;
 1715|  83.4k|        auto next_size = relaxed_->d.sizes[offset_hint] - left_size_hint;
 1716|  83.4k|        auto next_idx  = idx - left_size_hint;
 1717|  83.4k|        return is_leaf
  ------------------
  |  Branch (1717:16): [True: 10.2k, False: 73.2k]
  ------------------
 1718|  83.4k|                   ? make_leaf_sub_pos(child, next_size)
 1719|  10.2k|                         .visit(v, next_idx, args...)
 1720|  83.4k|                   : visit_maybe_relaxed_sub(
 1721|  73.2k|                         child, shift_ - B, next_size, v, next_idx, args...);
 1722|  83.4k|    }
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_18slice_left_visitorISC_Lb0EEEJRmEEEDcT_DpOT0_:
  143|  10.2k|    {
  144|  10.2k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  145|  10.2k|    }
_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_:
 1830|  73.2k|{
 1831|  73.2k|    assert(node);
 1832|      0|    auto relaxed = node->relaxed();
 1833|  73.2k|    if (relaxed) {
  ------------------
  |  Branch (1833:9): [True: 71.1k, False: 2.09k]
  ------------------
 1834|  71.1k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
 1835|      0|        return make_relaxed_pos(node, shift, relaxed)
 1836|  71.1k|            .visit(v, std::forward<Args>(args)...);
 1837|  71.1k|    } else {
 1838|  2.09k|        return make_regular_sub_pos(node, shift, size)
 1839|  2.09k|            .visit(v, std::forward<Args>(args)...);
 1840|  2.09k|    }
 1841|  73.2k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_18slice_left_visitorISC_Lb0EEEJRmEEEDcT_DpOT0_:
 1805|  71.1k|    {
 1806|  71.1k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1807|  71.1k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_18slice_left_visitorISC_Lb0EEEJRmEEEDcT_DpOT0_:
 1028|  2.09k|    {
 1029|  2.09k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1030|  2.09k|    }
_ZNK5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE11size_beforeEj:
  783|   167k|    {
  784|   167k|        return size_t{offset} << shift_;
  785|   167k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE8size_sbhEjm:
  795|  26.6k|    {
  796|  26.6k|        assert(size_before_hint == size_before(offset));
  797|  26.6k|        return offset == subindex(size_ - 1) ? size_ - size_before_hint
  ------------------
  |  Branch (797:16): [True: 14.8k, False: 11.8k]
  ------------------
  798|  26.6k|                                             : size_t{1} << shift_;
  799|  26.6k|    }
_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_:
  938|  8.56k|    {
  939|  8.56k|        return towards_sub_oh_regular(*this, v, idx, offset_hint, args...);
  940|  8.56k|    }
_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_:
  651|  8.56k|{
  652|  8.56k|    constexpr auto B  = bits<Pos>;
  653|  8.56k|    constexpr auto BL = bits_leaf<Pos>;
  654|  8.56k|    assert(offset_hint == p.index(idx));
  655|      0|    auto is_leaf = p.shift() == BL;
  656|  8.56k|    auto child   = p.node()->inner()[offset_hint];
  657|  8.56k|    auto lsize   = offset_hint << p.shift();
  658|  8.56k|    auto size    = p.this_size();
  659|  8.56k|    auto is_full = (size - lsize) >= (size_t{1} << p.shift());
  660|  8.56k|    return is_full
  ------------------
  |  Branch (660:12): [True: 8.56k, False: 0]
  ------------------
  661|  8.56k|               ? (is_leaf
  ------------------
  |  Branch (661:19): [True: 5.39k, False: 3.16k]
  ------------------
  662|  8.56k|                      ? make_full_leaf_pos(child).visit(v, idx - lsize, args...)
  663|  8.56k|                      : make_full_pos(child, p.shift() - B)
  664|  3.16k|                            .visit(v, idx - lsize, args...))
  665|  8.56k|               : (is_leaf
  ------------------
  |  Branch (665:19): [True: 0, False: 0]
  ------------------
  666|      0|                      ? make_leaf_sub_pos(child, size - lsize)
  667|      0|                            .visit(v, idx - lsize, args...)
  668|      0|                      : make_regular_sub_pos(child, p.shift() - B, size - lsize)
  669|      0|                            .visit(v, idx - lsize, args...));
  670|  8.56k|}
_ZNK5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE9this_sizeEv:
  786|  26.6k|    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_:
  205|  9.60k|    {
  206|  9.60k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  207|  9.60k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_18slice_left_visitorISC_Lb0EEEJmEEEDcT_DpOT0_:
 1397|  5.56k|    {
 1398|  5.56k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1399|  5.56k|    }
_ZNK5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE8subindexEm:
 1155|  17.3k|    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:
 1162|  38.7k|    {
 1163|  38.7k|        return size_t{offset} << shift_;
 1164|  38.7k|    }
_ZNK5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE8size_sbhEjm:
 1158|  17.3k|    {
 1159|  17.3k|        return size_t{1} << shift_;
 1160|  17.3k|    }
_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_:
 1340|  6.60k|    {
 1341|  6.60k|        assert(offset_hint == index(idx));
 1342|      0|        auto is_leaf = shift_ == BL;
 1343|  6.60k|        auto child   = node_->inner()[offset_hint];
 1344|  6.60k|        auto lsize   = size_t{offset_hint} << shift_;
 1345|  6.60k|        return is_leaf
  ------------------
  |  Branch (1345:16): [True: 4.20k, False: 2.40k]
  ------------------
 1346|  6.60k|                   ? make_full_leaf_pos(child).visit(v, idx - lsize, args...)
 1347|  6.60k|                   : make_full_pos(child, shift_ - B)
 1348|  2.40k|                         .visit(v, idx - lsize, args...);
 1349|  6.60k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10copy_sizesEjjmPm:
 1167|  15.6k|    {
 1168|  15.6k|        auto e = sizes + n;
 1169|  41.4k|        for (; sizes != e; ++sizes) {
  ------------------
  |  Branch (1169:16): [True: 25.7k, False: 15.6k]
  ------------------
 1170|  25.7k|            init = *sizes = init + (size_t{1} << shift_);
 1171|  25.7k|            assert(init);
 1172|  25.7k|        }
 1173|  15.6k|    }
_ZNK5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE4sizeEv:
 1152|  1.37M|    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:
  802|   173k|    {
  803|   173k|        if (n) {
  ------------------
  |  Branch (803:13): [True: 167k, False: 6.03k]
  ------------------
  804|   167k|            auto last = offset + n - 1;
  805|   167k|            auto e    = sizes + n - 1;
  806|   330k|            for (; sizes != e; ++sizes) {
  ------------------
  |  Branch (806:20): [True: 163k, False: 167k]
  ------------------
  807|   163k|                init = *sizes = init + (size_t{1} << shift_);
  808|   163k|                assert(init);
  809|   163k|            }
  810|   167k|            *sizes = init + size(last);
  811|   167k|            assert(*sizes);
  812|   167k|        }
  813|   173k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE4sizeEj:
  789|   183k|    {
  790|   183k|        return offset == subindex(size_ - 1) ? size_ - size_before(offset)
  ------------------
  |  Branch (790:16): [True: 94.4k, False: 88.6k]
  ------------------
  791|   183k|                                             : size_t{1} << shift_;
  792|   183k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10copy_sizesEjjmPm:
 1454|  7.05M|    {
 1455|  7.05M|        auto e     = sizes + n;
 1456|  7.05M|        auto prev  = size_before(offset);
 1457|  7.05M|        auto these = relaxed_->d.sizes + offset;
 1458|  20.3M|        for (; sizes != e; ++sizes, ++these) {
  ------------------
  |  Branch (1458:16): [True: 13.2M, False: 7.05M]
  ------------------
 1459|  13.2M|            auto this_size = *these;
 1460|  13.2M|            init = *sizes = init + (this_size - prev);
 1461|  13.2M|            assert(init);
 1462|      0|            prev = this_size;
 1463|  13.2M|        }
 1464|  7.05M|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_18slice_left_visitorISC_Lb1EEEJRmEEEDcT_DpOT0_:
 1028|  7.50k|    {
 1029|  7.50k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1030|  7.50k|    }
_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_:
  938|  3.48k|    {
  939|  3.48k|        return towards_sub_oh_regular(*this, v, idx, offset_hint, args...);
  940|  3.48k|    }
_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_:
  651|  3.48k|{
  652|  3.48k|    constexpr auto B  = bits<Pos>;
  653|  3.48k|    constexpr auto BL = bits_leaf<Pos>;
  654|  3.48k|    assert(offset_hint == p.index(idx));
  655|      0|    auto is_leaf = p.shift() == BL;
  656|  3.48k|    auto child   = p.node()->inner()[offset_hint];
  657|  3.48k|    auto lsize   = offset_hint << p.shift();
  658|  3.48k|    auto size    = p.this_size();
  659|  3.48k|    auto is_full = (size - lsize) >= (size_t{1} << p.shift());
  660|  3.48k|    return is_full
  ------------------
  |  Branch (660:12): [True: 1.03k, False: 2.45k]
  ------------------
  661|  3.48k|               ? (is_leaf
  ------------------
  |  Branch (661:19): [True: 0, False: 1.03k]
  ------------------
  662|  1.03k|                      ? make_full_leaf_pos(child).visit(v, idx - lsize, args...)
  663|  1.03k|                      : make_full_pos(child, p.shift() - B)
  664|  1.03k|                            .visit(v, idx - lsize, args...))
  665|  3.48k|               : (is_leaf
  ------------------
  |  Branch (665:19): [True: 0, False: 2.45k]
  ------------------
  666|  2.45k|                      ? make_leaf_sub_pos(child, size - lsize)
  667|      0|                            .visit(v, idx - lsize, args...)
  668|  2.45k|                      : make_regular_sub_pos(child, p.shift() - B, size - lsize)
  669|  2.45k|                            .visit(v, idx - lsize, args...));
  670|  3.48k|}
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_18slice_left_visitorISC_Lb1EEEJmEEEDcT_DpOT0_:
 1397|  1.31k|    {
 1398|  1.31k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1399|  1.31k|    }
_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_:
 1340|    272|    {
 1341|    272|        assert(offset_hint == index(idx));
 1342|      0|        auto is_leaf = shift_ == BL;
 1343|    272|        auto child   = node_->inner()[offset_hint];
 1344|    272|        auto lsize   = size_t{offset_hint} << shift_;
 1345|    272|        return is_leaf
  ------------------
  |  Branch (1345:16): [True: 0, False: 272]
  ------------------
 1346|    272|                   ? make_full_leaf_pos(child).visit(v, idx - lsize, args...)
 1347|    272|                   : make_full_pos(child, shift_ - B)
 1348|    272|                         .visit(v, idx - lsize, args...);
 1349|    272|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_18slice_left_visitorISC_Lb1EEEJmEEEDcT_DpOT0_:
 1028|  2.45k|    {
 1029|  2.45k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1030|  2.45k|    }
_ZN5immer6detail4rbts30make_singleton_regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEEEDaPT_j:
  758|  9.86k|{
  759|  9.86k|    assert(leaf);
  760|  9.86k|    IMMER_ASSERT_TAGGED(leaf->kind() == NodeT::kind_t::leaf);
  ------------------
  |  |   60|  9.86k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  761|      0|    assert(count > 0);
  762|      0|    return singleton_regular_sub_pos<NodeT>{leaf, count};
  763|  9.86k|}
_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_:
  751|  9.86k|    {
  752|  9.86k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
  753|  9.86k|    }
_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_:
 1830|  9.86k|{
 1831|  9.86k|    assert(node);
 1832|      0|    auto relaxed = node->relaxed();
 1833|  9.86k|    if (relaxed) {
  ------------------
  |  Branch (1833:9): [True: 6.89k, False: 2.97k]
  ------------------
 1834|  6.89k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
 1835|      0|        return make_relaxed_pos(node, shift, relaxed)
 1836|  6.89k|            .visit(v, std::forward<Args>(args)...);
 1837|  6.89k|    } else {
 1838|  2.97k|        return make_regular_sub_pos(node, shift, size)
 1839|  2.97k|            .visit(v, std::forward<Args>(args)...);
 1840|  2.97k|    }
 1841|  9.86k|}
_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_:
 1805|  6.89k|    {
 1806|  6.89k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1807|  6.89k|    }
_ZNK5immer6detail4rbts25singleton_regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5shiftEv:
  729|  39.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_:
  738|  9.86k|    {}
_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_:
  143|  3.24M|    {
  144|  3.24M|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  145|  3.24M|    }
_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_:
 1805|  30.3M|    {
 1806|  30.3M|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1807|  30.3M|    }
_ZN5immer6detail4rbts12null_sub_pos14each_right_subINS1_34concat_rebalance_plan_fill_visitorEJRNS1_21concat_rebalance_planILj2ELj2EEEEEEvT_DpOT0_:
  704|  3.04M|    {}
_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_:
  738|  9.86k|    {}
_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_:
  143|  3.24M|    {
  144|  3.24M|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  145|  3.24M|    }
_ZNK5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE4sizeEv:
  136|  3.24M|    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_:
 1805|  30.3M|    {
 1806|  30.3M|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1807|  30.3M|    }
_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_:
  704|  3.04M|    {}
_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_:
 1754|  28.4k|    {
 1755|  28.4k|        auto child      = node_->inner()[0];
 1756|  28.4k|        auto child_size = relaxed_->d.sizes[0];
 1757|  28.4k|        auto is_leaf    = shift_ == BL;
 1758|  28.4k|        assert(child_size);
 1759|  28.4k|        return is_leaf ? make_leaf_sub_pos(child, child_size).visit(v, args...)
  ------------------
  |  Branch (1759:16): [True: 0, False: 28.4k]
  ------------------
 1760|  28.4k|                       : visit_maybe_relaxed_sub(
 1761|  28.4k|                             child, shift_ - B, child_size, v, args...);
 1762|  28.4k|    }
_ZNK5immer6detail4rbts14empty_leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5shiftEv:
   75|  9.86k|    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:
  137|  2.57M|    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_:
 1830|  28.4k|{
 1831|  28.4k|    assert(node);
 1832|      0|    auto relaxed = node->relaxed();
 1833|  28.4k|    if (relaxed) {
  ------------------
  |  Branch (1833:9): [True: 28.0k, False: 416]
  ------------------
 1834|  28.0k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
 1835|      0|        return make_relaxed_pos(node, shift, relaxed)
 1836|  28.0k|            .visit(v, std::forward<Args>(args)...);
 1837|  28.0k|    } else {
 1838|    416|        return make_regular_sub_pos(node, shift, size)
 1839|    416|            .visit(v, std::forward<Args>(args)...);
 1840|    416|    }
 1841|  28.4k|}
_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_:
 1805|  28.0k|    {
 1806|  28.0k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1807|  28.0k|    }
_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_:
 1028|    416|    {
 1029|    416|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1030|    416|    }
_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_:
  962|    953|    {
  963|    953|        auto is_leaf = shift_ == BL;
  964|    953|        auto child   = node_->inner()[0];
  965|    953|        auto is_full = size_ >= (size_t{1} << shift_);
  966|    953|        return is_full
  ------------------
  |  Branch (966:16): [True: 953, False: 0]
  ------------------
  967|    953|                   ? (is_leaf
  ------------------
  |  Branch (967:23): [True: 0, False: 953]
  ------------------
  968|    953|                          ? make_full_leaf_pos(child).visit(v, args...)
  969|    953|                          : make_full_pos(child, shift_ - B).visit(v, args...))
  970|    953|                   : (is_leaf
  ------------------
  |  Branch (970:23): [True: 0, False: 0]
  ------------------
  971|      0|                          ? make_leaf_sub_pos(child, size_).visit(v, args...)
  972|      0|                          : make_regular_sub_pos(child, shift_ - B, size_)
  973|      0|                                .visit(v, args...));
  974|    953|    }
_ZNK5immer6detail4rbts13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5shiftEv:
  199|   218k|    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_:
 1397|  1.42k|    {
 1398|  1.42k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1399|  1.42k|    }
_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_:
 1353|    471|    {
 1354|    471|        auto is_leaf = shift_ == BL;
 1355|    471|        auto child   = node_->inner()[0];
 1356|    471|        return is_leaf ? make_full_leaf_pos(child).visit(v, args...)
  ------------------
  |  Branch (1356:16): [True: 0, False: 471]
  ------------------
 1357|    471|                       : make_full_pos(child, shift_ - B).visit(v, args...);
 1358|    471|    }
_ZN5immer6detail4rbts12null_sub_pos13each_left_subINS1_34concat_rebalance_plan_fill_visitorEJRNS1_21concat_rebalance_planILj2ELj2EEEEEEvT_DpOT0_:
  707|   129k|    {}
_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_:
 1296|   280k|    {
 1297|   280k|        each_i(v, 1, branches<B>, args...);
 1298|   280k|    }
_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_:
 1255|   280k|    {
 1256|   280k|        auto p = node_->inner() + i;
 1257|   280k|        auto e = node_->inner() + n;
 1258|   280k|        if (shift_ == BL) {
  ------------------
  |  Branch (1258:13): [True: 138k, False: 141k]
  ------------------
 1259|   555k|            for (; p != e; ++p) {
  ------------------
  |  Branch (1259:20): [True: 416k, False: 138k]
  ------------------
 1260|   416k|                IMMER_PREFETCH(p + 1);
 1261|   416k|                make_full_leaf_pos(*p).visit(v, args...);
 1262|   416k|            }
 1263|   141k|        } else {
 1264|   141k|            auto ss = shift_ - B;
 1265|   565k|            for (; p != e; ++p)
  ------------------
  |  Branch (1265:20): [True: 423k, False: 141k]
  ------------------
 1266|   423k|                make_full_pos(*p, ss).visit(v, args...);
 1267|   141k|        }
 1268|   280k|    }
_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_:
  205|  1.61M|    {
  206|  1.61M|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  207|  1.61M|    }
_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_:
 1397|  1.37M|    {
 1398|  1.37M|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1399|  1.37M|    }
_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_:
  707|   129k|    {}
_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_:
 1296|   280k|    {
 1297|   280k|        each_i(v, 1, branches<B>, args...);
 1298|   280k|    }
_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_:
 1255|   280k|    {
 1256|   280k|        auto p = node_->inner() + i;
 1257|   280k|        auto e = node_->inner() + n;
 1258|   280k|        if (shift_ == BL) {
  ------------------
  |  Branch (1258:13): [True: 138k, False: 141k]
  ------------------
 1259|   555k|            for (; p != e; ++p) {
  ------------------
  |  Branch (1259:20): [True: 416k, False: 138k]
  ------------------
 1260|   416k|                IMMER_PREFETCH(p + 1);
 1261|   416k|                make_full_leaf_pos(*p).visit(v, args...);
 1262|   416k|            }
 1263|   141k|        } else {
 1264|   141k|            auto ss = shift_ - B;
 1265|   565k|            for (; p != e; ++p)
  ------------------
  |  Branch (1265:20): [True: 423k, False: 141k]
  ------------------
 1266|   423k|                make_full_pos(*p, ss).visit(v, args...);
 1267|   141k|        }
 1268|   280k|    }
_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_:
  205|  1.61M|    {
  206|  1.61M|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  207|  1.61M|    }
_ZNK5immer6detail4rbts13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE4sizeEv:
  198|  1.61M|    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_:
 1397|  1.37M|    {
 1398|  1.37M|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1399|  1.37M|    }
_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_:
  745|    953|    {
  746|    953|        return make_leaf_sub_pos(leaf_, count_).visit(v, args...);
  747|    953|    }
_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_:
  143|    953|    {
  144|    953|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  145|    953|    }
_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_:
 1362|    953|    {
 1363|    953|        assert(shift_ == BL);
 1364|      0|        auto child = node_->inner()[0];
 1365|    953|        return make_full_leaf_pos(child).visit(v, args...);
 1366|    953|    }
_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_:
  205|  3.38k|    {
  206|  3.38k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  207|  3.38k|    }
_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_:
  898|   218k|    {
  899|   218k|        if (count() > 1)
  ------------------
  |  Branch (899:13): [True: 205k, False: 12.9k]
  ------------------
  900|   205k|            each_right_sub_(v, 1, args...);
  901|   218k|    }
_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_:
  871|   205k|    {
  872|   205k|        auto last  = count() - 1;
  873|   205k|        auto lsize = size_ - (last << shift_);
  874|   205k|        auto n     = node()->inner() + i;
  875|   205k|        auto e     = node()->inner() + last;
  876|   205k|        if (shift() == BL) {
  ------------------
  |  Branch (876:13): [True: 66.7k, False: 138k]
  ------------------
  877|   196k|            for (; n != e; ++n) {
  ------------------
  |  Branch (877:20): [True: 129k, False: 66.7k]
  ------------------
  878|   129k|                IMMER_PREFETCH(n + 1);
  879|   129k|                make_full_leaf_pos(*n).visit(v, args...);
  880|   129k|            }
  881|  66.7k|            make_leaf_sub_pos(*n, lsize).visit(v, args...);
  882|   138k|        } else {
  883|   138k|            auto ss = shift_ - B;
  884|   388k|            for (; n != e; ++n)
  ------------------
  |  Branch (884:20): [True: 249k, False: 138k]
  ------------------
  885|   249k|                make_full_pos(*n, ss).visit(v, args...);
  886|   138k|            make_regular_sub_pos(*n, ss, lsize).visit(v, args...);
  887|   138k|        }
  888|   205k|    }
_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_:
 1028|   822k|    {
 1029|   822k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1030|   822k|    }
_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_:
  898|   218k|    {
  899|   218k|        if (count() > 1)
  ------------------
  |  Branch (899:13): [True: 205k, False: 12.9k]
  ------------------
  900|   205k|            each_right_sub_(v, 1, args...);
  901|   218k|    }
_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_:
  871|   205k|    {
  872|   205k|        auto last  = count() - 1;
  873|   205k|        auto lsize = size_ - (last << shift_);
  874|   205k|        auto n     = node()->inner() + i;
  875|   205k|        auto e     = node()->inner() + last;
  876|   205k|        if (shift() == BL) {
  ------------------
  |  Branch (876:13): [True: 66.7k, False: 138k]
  ------------------
  877|   196k|            for (; n != e; ++n) {
  ------------------
  |  Branch (877:20): [True: 129k, False: 66.7k]
  ------------------
  878|   129k|                IMMER_PREFETCH(n + 1);
  879|   129k|                make_full_leaf_pos(*n).visit(v, args...);
  880|   129k|            }
  881|  66.7k|            make_leaf_sub_pos(*n, lsize).visit(v, args...);
  882|   138k|        } else {
  883|   138k|            auto ss = shift_ - B;
  884|   388k|            for (; n != e; ++n)
  ------------------
  |  Branch (884:20): [True: 249k, False: 138k]
  ------------------
  885|   249k|                make_full_pos(*n, ss).visit(v, args...);
  886|   138k|            make_regular_sub_pos(*n, ss, lsize).visit(v, args...);
  887|   138k|        }
  888|   205k|    }
_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_:
 1028|   822k|    {
 1029|   822k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1030|   822k|    }
_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_:
  745|  2.43k|    {
  746|  2.43k|        return make_leaf_sub_pos(leaf_, count_).visit(v, args...);
  747|  2.43k|    }
_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_:
  143|  2.43k|    {
  144|  2.43k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  145|  2.43k|    }
_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_:
  978|  2.43k|    {
  979|  2.43k|        assert(shift_ == BL);
  980|      0|        auto child   = node_->inner()[0];
  981|  2.43k|        auto is_full = size_ >= branches<BL>;
  982|  2.43k|        return is_full ? make_full_leaf_pos(child).visit(v, args...)
  ------------------
  |  Branch (982:16): [True: 2.43k, False: 0]
  ------------------
  983|  2.43k|                       : make_leaf_sub_pos(child, size_).visit(v, args...);
  984|  2.43k|    }
_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_:
  143|  6.48k|    {
  144|  6.48k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  145|  6.48k|    }
_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_:
 1639|  4.21M|    {
 1640|  4.21M|        each_right(v, 1, std::forward<Args>(args)...);
 1641|  4.21M|    }
_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_:
 1645|  4.21M|    {
 1646|  4.21M|        assert(start > 0);
 1647|      0|        assert(start <= relaxed_->d.count);
 1648|      0|        auto s = relaxed_->d.sizes[start - 1];
 1649|  4.21M|        auto p = node_->inner();
 1650|  4.21M|        if (shift_ == BL) {
  ------------------
  |  Branch (1650:13): [True: 478k, False: 3.73M]
  ------------------
 1651|  1.40M|            for (auto i = start; i < relaxed_->d.count; ++i) {
  ------------------
  |  Branch (1651:34): [True: 926k, False: 478k]
  ------------------
 1652|   926k|                IMMER_PREFETCH(p + i + 1);
 1653|   926k|                make_leaf_sub_pos(p[i], relaxed_->d.sizes[i] - s)
 1654|   926k|                    .visit(v, args...);
 1655|   926k|                s = relaxed_->d.sizes[i];
 1656|   926k|                assert(s);
 1657|   926k|            }
 1658|  3.73M|        } else {
 1659|  3.73M|            auto ss = shift_ - B;
 1660|  13.6M|            for (auto i = start; i < relaxed_->d.count; ++i) {
  ------------------
  |  Branch (1660:34): [True: 9.86M, False: 3.73M]
  ------------------
 1661|  9.86M|                visit_maybe_relaxed_sub(
 1662|  9.86M|                    p[i], ss, relaxed_->d.sizes[i] - s, v, args...);
 1663|  9.86M|                s = relaxed_->d.sizes[i];
 1664|  9.86M|                assert(s);
 1665|  9.86M|            }
 1666|  3.73M|        }
 1667|  4.21M|    }
_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_:
 1830|  19.6M|{
 1831|  19.6M|    assert(node);
 1832|      0|    auto relaxed = node->relaxed();
 1833|  19.6M|    if (relaxed) {
  ------------------
  |  Branch (1833:9): [True: 19.0M, False: 683k]
  ------------------
 1834|  19.0M|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
 1835|      0|        return make_relaxed_pos(node, shift, relaxed)
 1836|  19.0M|            .visit(v, std::forward<Args>(args)...);
 1837|  19.0M|    } else {
 1838|   683k|        return make_regular_sub_pos(node, shift, size)
 1839|   683k|            .visit(v, std::forward<Args>(args)...);
 1840|   683k|    }
 1841|  19.6M|}
_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_:
 1639|  4.21M|    {
 1640|  4.21M|        each_right(v, 1, std::forward<Args>(args)...);
 1641|  4.21M|    }
_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_:
 1645|  4.21M|    {
 1646|  4.21M|        assert(start > 0);
 1647|      0|        assert(start <= relaxed_->d.count);
 1648|      0|        auto s = relaxed_->d.sizes[start - 1];
 1649|  4.21M|        auto p = node_->inner();
 1650|  4.21M|        if (shift_ == BL) {
  ------------------
  |  Branch (1650:13): [True: 478k, False: 3.73M]
  ------------------
 1651|  1.40M|            for (auto i = start; i < relaxed_->d.count; ++i) {
  ------------------
  |  Branch (1651:34): [True: 926k, False: 478k]
  ------------------
 1652|   926k|                IMMER_PREFETCH(p + i + 1);
 1653|   926k|                make_leaf_sub_pos(p[i], relaxed_->d.sizes[i] - s)
 1654|   926k|                    .visit(v, args...);
 1655|   926k|                s = relaxed_->d.sizes[i];
 1656|   926k|                assert(s);
 1657|   926k|            }
 1658|  3.73M|        } else {
 1659|  3.73M|            auto ss = shift_ - B;
 1660|  13.6M|            for (auto i = start; i < relaxed_->d.count; ++i) {
  ------------------
  |  Branch (1660:34): [True: 9.86M, False: 3.73M]
  ------------------
 1661|  9.86M|                visit_maybe_relaxed_sub(
 1662|  9.86M|                    p[i], ss, relaxed_->d.sizes[i] - s, v, args...);
 1663|  9.86M|                s = relaxed_->d.sizes[i];
 1664|  9.86M|                assert(s);
 1665|  9.86M|            }
 1666|  3.73M|        }
 1667|  4.21M|    }
_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_:
 1830|  19.6M|{
 1831|  19.6M|    assert(node);
 1832|      0|    auto relaxed = node->relaxed();
 1833|  19.6M|    if (relaxed) {
  ------------------
  |  Branch (1833:9): [True: 19.0M, False: 683k]
  ------------------
 1834|  19.0M|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
 1835|      0|        return make_relaxed_pos(node, shift, relaxed)
 1836|  19.0M|            .visit(v, std::forward<Args>(args)...);
 1837|  19.0M|    } else {
 1838|   683k|        return make_regular_sub_pos(node, shift, size)
 1839|   683k|            .visit(v, std::forward<Args>(args)...);
 1840|   683k|    }
 1841|  19.6M|}
_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_:
  745|  6.48k|    {
  746|  6.48k|        return make_leaf_sub_pos(leaf_, count_).visit(v, args...);
  747|  6.48k|    }
_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_:
  143|  6.48k|    {
  144|  6.48k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  145|  6.48k|    }
_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_:
 1766|  6.48k|    {
 1767|  6.48k|        assert(shift_ == BL);
 1768|      0|        auto child      = node_->inner()[0];
 1769|  6.48k|        auto child_size = relaxed_->d.sizes[0];
 1770|  6.48k|        return make_leaf_sub_pos(child, child_size).visit(v, args...);
 1771|  6.48k|    }
_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_:
 1028|  2.97k|    {
 1029|  2.97k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1030|  2.97k|    }
_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_:
 1830|   687k|{
 1831|   687k|    assert(node);
 1832|      0|    auto relaxed = node->relaxed();
 1833|   687k|    if (relaxed) {
  ------------------
  |  Branch (1833:9): [True: 671k, False: 16.5k]
  ------------------
 1834|   671k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
 1835|      0|        return make_relaxed_pos(node, shift, relaxed)
 1836|   671k|            .visit(v, std::forward<Args>(args)...);
 1837|   671k|    } else {
 1838|  16.5k|        return make_regular_sub_pos(node, shift, size)
 1839|  16.5k|            .visit(v, std::forward<Args>(args)...);
 1840|  16.5k|    }
 1841|   687k|}
_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_:
 1805|   671k|    {
 1806|   671k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1807|   671k|    }
_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_:
 1830|   671k|{
 1831|   671k|    assert(node);
 1832|      0|    auto relaxed = node->relaxed();
 1833|   671k|    if (relaxed) {
  ------------------
  |  Branch (1833:9): [True: 642k, False: 28.2k]
  ------------------
 1834|   642k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
 1835|      0|        return make_relaxed_pos(node, shift, relaxed)
 1836|   642k|            .visit(v, std::forward<Args>(args)...);
 1837|   642k|    } else {
 1838|  28.2k|        return make_regular_sub_pos(node, shift, size)
 1839|  28.2k|            .visit(v, std::forward<Args>(args)...);
 1840|  28.2k|    }
 1841|   671k|}
_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_:
 1805|   642k|    {
 1806|   642k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1807|   642k|    }
_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_:
 1742|  2.88M|    {
 1743|  2.88M|        auto offset     = relaxed_->d.count - 1;
 1744|  2.88M|        auto child      = node_->inner()[offset];
 1745|  2.88M|        auto child_size = size(offset);
 1746|  2.88M|        auto is_leaf    = shift_ == BL;
 1747|  2.88M|        return is_leaf ? make_leaf_sub_pos(child, child_size).visit(v, args...)
  ------------------
  |  Branch (1747:16): [True: 0, False: 2.88M]
  ------------------
 1748|  2.88M|                       : visit_maybe_relaxed_sub(
 1749|  2.88M|                             child, shift_ - B, child_size, v, args...);
 1750|  2.88M|    }
_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_:
 1830|  2.88M|{
 1831|  2.88M|    assert(node);
 1832|      0|    auto relaxed = node->relaxed();
 1833|  2.88M|    if (relaxed) {
  ------------------
  |  Branch (1833:9): [True: 2.88M, False: 2.64k]
  ------------------
 1834|  2.88M|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
 1835|      0|        return make_relaxed_pos(node, shift, relaxed)
 1836|  2.88M|            .visit(v, std::forward<Args>(args)...);
 1837|  2.88M|    } else {
 1838|  2.64k|        return make_regular_sub_pos(node, shift, size)
 1839|  2.64k|            .visit(v, std::forward<Args>(args)...);
 1840|  2.64k|    }
 1841|  2.88M|}
_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_:
 1805|  2.88M|    {
 1806|  2.88M|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1807|  2.88M|    }
_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_:
 1028|  6.14k|    {
 1029|  6.14k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1030|  6.14k|    }
_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_:
  950|  3.49k|    {
  951|  3.49k|        auto offset  = count() - 1;
  952|  3.49k|        auto child   = node_->inner()[offset];
  953|  3.49k|        auto is_leaf = shift_ == BL;
  954|  3.49k|        auto lsize   = size_ - (size_t{offset} << shift_);
  955|  3.49k|        return is_leaf ? make_leaf_sub_pos(child, lsize).visit(v, args...)
  ------------------
  |  Branch (955:16): [True: 0, False: 3.49k]
  ------------------
  956|  3.49k|                       : make_regular_sub_pos(child, shift_ - B, lsize)
  957|  3.49k|                             .visit(v, args...);
  958|  3.49k|    }
_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_:
  905|  1.24M|    {
  906|  1.24M|        each_left(v, count() - 1, args...);
  907|  1.24M|    }
_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_:
  865|  1.24M|    {
  866|  1.24M|        return each_left_regular(*this, v, last, args...);
  867|  1.24M|    }
_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_:
  573|  1.24M|{
  574|  1.24M|    constexpr auto B  = bits<Pos>;
  575|  1.24M|    constexpr auto BL = bits_leaf<Pos>;
  576|  1.24M|    assert(last < p.count());
  577|  1.24M|    if (p.shift() == BL) {
  ------------------
  |  Branch (577:9): [True: 577k, False: 664k]
  ------------------
  578|   577k|        auto n = p.node()->inner();
  579|   577k|        auto e = n + last;
  580|  1.64M|        for (; n != e; ++n) {
  ------------------
  |  Branch (580:16): [True: 1.06M, False: 577k]
  ------------------
  581|  1.06M|            IMMER_PREFETCH(n + 1);
  582|  1.06M|            make_full_leaf_pos(*n).visit(v, args...);
  583|  1.06M|        }
  584|   664k|    } else {
  585|   664k|        auto n  = p.node()->inner();
  586|   664k|        auto e  = n + last;
  587|   664k|        auto ss = p.shift() - B;
  588|  1.36M|        for (; n != e; ++n)
  ------------------
  |  Branch (588:16): [True: 697k, False: 664k]
  ------------------
  589|   697k|            make_full_pos(*n, ss).visit(v, args...);
  590|   664k|    }
  591|  1.24M|}
_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_:
  905|  1.24M|    {
  906|  1.24M|        each_left(v, count() - 1, args...);
  907|  1.24M|    }
_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_:
  865|  1.24M|    {
  866|  1.24M|        return each_left_regular(*this, v, last, args...);
  867|  1.24M|    }
_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_:
  573|  1.24M|{
  574|  1.24M|    constexpr auto B  = bits<Pos>;
  575|  1.24M|    constexpr auto BL = bits_leaf<Pos>;
  576|  1.24M|    assert(last < p.count());
  577|  1.24M|    if (p.shift() == BL) {
  ------------------
  |  Branch (577:9): [True: 577k, False: 664k]
  ------------------
  578|   577k|        auto n = p.node()->inner();
  579|   577k|        auto e = n + last;
  580|  1.64M|        for (; n != e; ++n) {
  ------------------
  |  Branch (580:16): [True: 1.06M, False: 577k]
  ------------------
  581|  1.06M|            IMMER_PREFETCH(n + 1);
  582|  1.06M|            make_full_leaf_pos(*n).visit(v, args...);
  583|  1.06M|        }
  584|   664k|    } else {
  585|   664k|        auto n  = p.node()->inner();
  586|   664k|        auto e  = n + last;
  587|   664k|        auto ss = p.shift() - B;
  588|  1.36M|        for (; n != e; ++n)
  ------------------
  |  Branch (588:16): [True: 697k, False: 664k]
  ------------------
  589|   697k|            make_full_pos(*n, ss).visit(v, args...);
  590|   664k|    }
  591|  1.24M|}
_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_:
 1754|   954k|    {
 1755|   954k|        auto child      = node_->inner()[0];
 1756|   954k|        auto child_size = relaxed_->d.sizes[0];
 1757|   954k|        auto is_leaf    = shift_ == BL;
 1758|   954k|        assert(child_size);
 1759|   954k|        return is_leaf ? make_leaf_sub_pos(child, child_size).visit(v, args...)
  ------------------
  |  Branch (1759:16): [True: 0, False: 954k]
  ------------------
 1760|   954k|                       : visit_maybe_relaxed_sub(
 1761|   954k|                             child, shift_ - B, child_size, v, args...);
 1762|   954k|    }
_ZNK5immer6detail4rbts8leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5shiftEv:
  105|   687k|    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_:
 1830|   954k|{
 1831|   954k|    assert(node);
 1832|      0|    auto relaxed = node->relaxed();
 1833|   954k|    if (relaxed) {
  ------------------
  |  Branch (1833:9): [True: 779k, False: 175k]
  ------------------
 1834|   779k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
 1835|      0|        return make_relaxed_pos(node, shift, relaxed)
 1836|   779k|            .visit(v, std::forward<Args>(args)...);
 1837|   779k|    } else {
 1838|   175k|        return make_regular_sub_pos(node, shift, size)
 1839|   175k|            .visit(v, std::forward<Args>(args)...);
 1840|   175k|    }
 1841|   954k|}
_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_:
 1805|   779k|    {
 1806|   779k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1807|   779k|    }
_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_:
 1028|   175k|    {
 1029|   175k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1030|   175k|    }
_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_:
  950|  1.32k|    {
  951|  1.32k|        auto offset  = count() - 1;
  952|  1.32k|        auto child   = node_->inner()[offset];
  953|  1.32k|        auto is_leaf = shift_ == BL;
  954|  1.32k|        auto lsize   = size_ - (size_t{offset} << shift_);
  955|  1.32k|        return is_leaf ? make_leaf_sub_pos(child, lsize).visit(v, args...)
  ------------------
  |  Branch (955:16): [True: 0, False: 1.32k]
  ------------------
  956|  1.32k|                       : make_regular_sub_pos(child, shift_ - B, lsize)
  957|  1.32k|                             .visit(v, args...);
  958|  1.32k|    }
_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_:
 1028|  1.91k|    {
 1029|  1.91k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1030|  1.91k|    }
_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_:
  962|   136k|    {
  963|   136k|        auto is_leaf = shift_ == BL;
  964|   136k|        auto child   = node_->inner()[0];
  965|   136k|        auto is_full = size_ >= (size_t{1} << shift_);
  966|   136k|        return is_full
  ------------------
  |  Branch (966:16): [True: 136k, False: 0]
  ------------------
  967|   136k|                   ? (is_leaf
  ------------------
  |  Branch (967:23): [True: 0, False: 136k]
  ------------------
  968|   136k|                          ? make_full_leaf_pos(child).visit(v, args...)
  969|   136k|                          : make_full_pos(child, shift_ - B).visit(v, args...))
  970|   136k|                   : (is_leaf
  ------------------
  |  Branch (970:23): [True: 0, False: 0]
  ------------------
  971|      0|                          ? make_leaf_sub_pos(child, size_).visit(v, args...)
  972|      0|                          : make_regular_sub_pos(child, shift_ - B, size_)
  973|      0|                                .visit(v, args...));
  974|   136k|    }
_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_:
 1397|   276k|    {
 1398|   276k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1399|   276k|    }
_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_:
 1353|   140k|    {
 1354|   140k|        auto is_leaf = shift_ == BL;
 1355|   140k|        auto child   = node_->inner()[0];
 1356|   140k|        return is_leaf ? make_full_leaf_pos(child).visit(v, args...)
  ------------------
  |  Branch (1356:16): [True: 0, False: 140k]
  ------------------
 1357|   140k|                       : make_full_pos(child, shift_ - B).visit(v, args...);
 1358|   140k|    }
_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_:
  950|   276k|    {
  951|   276k|        auto offset  = count() - 1;
  952|   276k|        auto child   = node_->inner()[offset];
  953|   276k|        auto is_leaf = shift_ == BL;
  954|   276k|        auto lsize   = size_ - (size_t{offset} << shift_);
  955|   276k|        return is_leaf ? make_leaf_sub_pos(child, lsize).visit(v, args...)
  ------------------
  |  Branch (955:16): [True: 136k, False: 139k]
  ------------------
  956|   276k|                       : make_regular_sub_pos(child, shift_ - B, lsize)
  957|   139k|                             .visit(v, args...);
  958|   276k|    }
_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_:
  143|   137k|    {
  144|   137k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  145|   137k|    }
_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_:
 1362|   137k|    {
 1363|   137k|        assert(shift_ == BL);
 1364|      0|        auto child = node_->inner()[0];
 1365|   137k|        return make_full_leaf_pos(child).visit(v, args...);
 1366|   137k|    }
_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_:
  205|   215k|    {
  206|   215k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  207|   215k|    }
_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_:
 1028|   139k|    {
 1029|   139k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1030|   139k|    }
_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_:
  950|   185k|    {
  951|   185k|        auto offset  = count() - 1;
  952|   185k|        auto child   = node_->inner()[offset];
  953|   185k|        auto is_leaf = shift_ == BL;
  954|   185k|        auto lsize   = size_ - (size_t{offset} << shift_);
  955|   185k|        return is_leaf ? make_leaf_sub_pos(child, lsize).visit(v, args...)
  ------------------
  |  Branch (955:16): [True: 69.7k, False: 115k]
  ------------------
  956|   185k|                       : make_regular_sub_pos(child, shift_ - B, lsize)
  957|   115k|                             .visit(v, args...);
  958|   185k|    }
_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_:
  143|  77.3k|    {
  144|  77.3k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  145|  77.3k|    }
_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_:
  978|  77.3k|    {
  979|  77.3k|        assert(shift_ == BL);
  980|      0|        auto child   = node_->inner()[0];
  981|  77.3k|        auto is_full = size_ >= branches<BL>;
  982|  77.3k|        return is_full ? make_full_leaf_pos(child).visit(v, args...)
  ------------------
  |  Branch (982:16): [True: 77.3k, False: 0]
  ------------------
  983|  77.3k|                       : make_leaf_sub_pos(child, size_).visit(v, args...);
  984|  77.3k|    }
_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_:
  143|   472k|    {
  144|   472k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  145|   472k|    }
_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_:
 1028|   135k|    {
 1029|   135k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1030|   135k|    }
_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_:
  950|   776k|    {
  951|   776k|        auto offset  = count() - 1;
  952|   776k|        auto child   = node_->inner()[offset];
  953|   776k|        auto is_leaf = shift_ == BL;
  954|   776k|        auto lsize   = size_ - (size_t{offset} << shift_);
  955|   776k|        return is_leaf ? make_leaf_sub_pos(child, lsize).visit(v, args...)
  ------------------
  |  Branch (955:16): [True: 371k, False: 405k]
  ------------------
  956|   776k|                       : make_regular_sub_pos(child, shift_ - B, lsize)
  957|   405k|                             .visit(v, args...);
  958|   776k|    }
_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_:
  143|   472k|    {
  144|   472k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  145|   472k|    }
_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_:
 1766|   472k|    {
 1767|   472k|        assert(shift_ == BL);
 1768|      0|        auto child      = node_->inner()[0];
 1769|   472k|        auto child_size = relaxed_->d.sizes[0];
 1770|   472k|        return make_leaf_sub_pos(child, child_size).visit(v, args...);
 1771|   472k|    }
_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_:
 1028|   942k|    {
 1029|   942k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1030|   942k|    }
_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_:
 1609|  6.37M|    {
 1610|  6.37M|        each_left(v, relaxed_->d.count - 1, args...);
 1611|  6.37M|    }
_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_:
 1615|  6.37M|    {
 1616|  6.37M|        auto p = node_->inner();
 1617|  6.37M|        auto s = size_t{};
 1618|  6.37M|        if (shift_ == BL) {
  ------------------
  |  Branch (1618:13): [True: 109k, False: 6.26M]
  ------------------
 1619|   282k|            for (auto i = count_t{0}; i < n; ++i) {
  ------------------
  |  Branch (1619:39): [True: 172k, False: 109k]
  ------------------
 1620|   172k|                IMMER_PREFETCH(p + i + 1);
 1621|   172k|                make_leaf_sub_pos(p[i], relaxed_->d.sizes[i] - s)
 1622|   172k|                    .visit(v, args...);
 1623|   172k|                s = relaxed_->d.sizes[i];
 1624|   172k|                assert(s);
 1625|   172k|            }
 1626|  6.26M|        } else {
 1627|  6.26M|            auto ss = shift_ - B;
 1628|  16.0M|            for (auto i = count_t{0}; i < n; ++i) {
  ------------------
  |  Branch (1628:39): [True: 9.82M, False: 6.26M]
  ------------------
 1629|  9.82M|                visit_maybe_relaxed_sub(
 1630|  9.82M|                    p[i], ss, relaxed_->d.sizes[i] - s, v, args...);
 1631|  9.82M|                s = relaxed_->d.sizes[i];
 1632|  9.82M|                assert(s);
 1633|  9.82M|            }
 1634|  6.26M|        }
 1635|  6.37M|    }
_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_:
 1609|  6.37M|    {
 1610|  6.37M|        each_left(v, relaxed_->d.count - 1, args...);
 1611|  6.37M|    }
_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_:
 1615|  6.37M|    {
 1616|  6.37M|        auto p = node_->inner();
 1617|  6.37M|        auto s = size_t{};
 1618|  6.37M|        if (shift_ == BL) {
  ------------------
  |  Branch (1618:13): [True: 109k, False: 6.26M]
  ------------------
 1619|   282k|            for (auto i = count_t{0}; i < n; ++i) {
  ------------------
  |  Branch (1619:39): [True: 172k, False: 109k]
  ------------------
 1620|   172k|                IMMER_PREFETCH(p + i + 1);
 1621|   172k|                make_leaf_sub_pos(p[i], relaxed_->d.sizes[i] - s)
 1622|   172k|                    .visit(v, args...);
 1623|   172k|                s = relaxed_->d.sizes[i];
 1624|   172k|                assert(s);
 1625|   172k|            }
 1626|  6.26M|        } else {
 1627|  6.26M|            auto ss = shift_ - B;
 1628|  16.0M|            for (auto i = count_t{0}; i < n; ++i) {
  ------------------
  |  Branch (1628:39): [True: 9.82M, False: 6.26M]
  ------------------
 1629|  9.82M|                visit_maybe_relaxed_sub(
 1630|  9.82M|                    p[i], ss, relaxed_->d.sizes[i] - s, v, args...);
 1631|  9.82M|                s = relaxed_->d.sizes[i];
 1632|  9.82M|                assert(s);
 1633|  9.82M|            }
 1634|  6.26M|        }
 1635|  6.37M|    }
_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_:
 1754|  2.75M|    {
 1755|  2.75M|        auto child      = node_->inner()[0];
 1756|  2.75M|        auto child_size = relaxed_->d.sizes[0];
 1757|  2.75M|        auto is_leaf    = shift_ == BL;
 1758|  2.75M|        assert(child_size);
 1759|  2.75M|        return is_leaf ? make_leaf_sub_pos(child, child_size).visit(v, args...)
  ------------------
  |  Branch (1759:16): [True: 0, False: 2.75M]
  ------------------
 1760|  2.75M|                       : visit_maybe_relaxed_sub(
 1761|  2.75M|                             child, shift_ - B, child_size, v, args...);
 1762|  2.75M|    }
_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_:
 1830|  2.75M|{
 1831|  2.75M|    assert(node);
 1832|      0|    auto relaxed = node->relaxed();
 1833|  2.75M|    if (relaxed) {
  ------------------
  |  Branch (1833:9): [True: 2.74M, False: 1.72k]
  ------------------
 1834|  2.74M|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
 1835|      0|        return make_relaxed_pos(node, shift, relaxed)
 1836|  2.74M|            .visit(v, std::forward<Args>(args)...);
 1837|  2.74M|    } else {
 1838|  1.72k|        return make_regular_sub_pos(node, shift, size)
 1839|  1.72k|            .visit(v, std::forward<Args>(args)...);
 1840|  1.72k|    }
 1841|  2.75M|}
_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_:
 1805|  2.74M|    {
 1806|  2.74M|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1807|  2.74M|    }
_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_:
 1028|  1.72k|    {
 1029|  1.72k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1030|  1.72k|    }
_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_:
 1742|   150k|    {
 1743|   150k|        auto offset     = relaxed_->d.count - 1;
 1744|   150k|        auto child      = node_->inner()[offset];
 1745|   150k|        auto child_size = size(offset);
 1746|   150k|        auto is_leaf    = shift_ == BL;
 1747|   150k|        return is_leaf ? make_leaf_sub_pos(child, child_size).visit(v, args...)
  ------------------
  |  Branch (1747:16): [True: 0, False: 150k]
  ------------------
 1748|   150k|                       : visit_maybe_relaxed_sub(
 1749|   150k|                             child, shift_ - B, child_size, v, args...);
 1750|   150k|    }
_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_:
 1830|   150k|{
 1831|   150k|    assert(node);
 1832|      0|    auto relaxed = node->relaxed();
 1833|   150k|    if (relaxed) {
  ------------------
  |  Branch (1833:9): [True: 150k, False: 587]
  ------------------
 1834|   150k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
 1835|      0|        return make_relaxed_pos(node, shift, relaxed)
 1836|   150k|            .visit(v, std::forward<Args>(args)...);
 1837|   150k|    } else {
 1838|    587|        return make_regular_sub_pos(node, shift, size)
 1839|    587|            .visit(v, std::forward<Args>(args)...);
 1840|    587|    }
 1841|   150k|}
_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_:
 1805|   150k|    {
 1806|   150k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1807|   150k|    }
_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_:
  962|  1.65k|    {
  963|  1.65k|        auto is_leaf = shift_ == BL;
  964|  1.65k|        auto child   = node_->inner()[0];
  965|  1.65k|        auto is_full = size_ >= (size_t{1} << shift_);
  966|  1.65k|        return is_full
  ------------------
  |  Branch (966:16): [True: 1.65k, False: 0]
  ------------------
  967|  1.65k|                   ? (is_leaf
  ------------------
  |  Branch (967:23): [True: 0, False: 1.65k]
  ------------------
  968|  1.65k|                          ? make_full_leaf_pos(child).visit(v, args...)
  969|  1.65k|                          : make_full_pos(child, shift_ - B).visit(v, args...))
  970|  1.65k|                   : (is_leaf
  ------------------
  |  Branch (970:23): [True: 0, False: 0]
  ------------------
  971|      0|                          ? make_leaf_sub_pos(child, size_).visit(v, args...)
  972|      0|                          : make_regular_sub_pos(child, shift_ - B, size_)
  973|      0|                                .visit(v, args...));
  974|  1.65k|    }
_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_:
 1397|  2.33k|    {
 1398|  2.33k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1399|  2.33k|    }
_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_:
 1353|    680|    {
 1354|    680|        auto is_leaf = shift_ == BL;
 1355|    680|        auto child   = node_->inner()[0];
 1356|    680|        return is_leaf ? make_full_leaf_pos(child).visit(v, args...)
  ------------------
  |  Branch (1356:16): [True: 0, False: 680]
  ------------------
 1357|    680|                       : make_full_pos(child, shift_ - B).visit(v, args...);
 1358|    680|    }
_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_:
 1742|  2.12k|    {
 1743|  2.12k|        auto offset     = relaxed_->d.count - 1;
 1744|  2.12k|        auto child      = node_->inner()[offset];
 1745|  2.12k|        auto child_size = size(offset);
 1746|  2.12k|        auto is_leaf    = shift_ == BL;
 1747|  2.12k|        return is_leaf ? make_leaf_sub_pos(child, child_size).visit(v, args...)
  ------------------
  |  Branch (1747:16): [True: 1.28k, False: 846]
  ------------------
 1748|  2.12k|                       : visit_maybe_relaxed_sub(
 1749|    846|                             child, shift_ - B, child_size, v, args...);
 1750|  2.12k|    }
_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_:
 1830|    846|{
 1831|    846|    assert(node);
 1832|      0|    auto relaxed = node->relaxed();
 1833|    846|    if (relaxed) {
  ------------------
  |  Branch (1833:9): [True: 469, False: 377]
  ------------------
 1834|    469|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
 1835|      0|        return make_relaxed_pos(node, shift, relaxed)
 1836|    469|            .visit(v, std::forward<Args>(args)...);
 1837|    469|    } else {
 1838|    377|        return make_regular_sub_pos(node, shift, size)
 1839|    377|            .visit(v, std::forward<Args>(args)...);
 1840|    377|    }
 1841|    846|}
_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_:
 1805|    469|    {
 1806|    469|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1807|    469|    }
_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_:
 1742|  28.7k|    {
 1743|  28.7k|        auto offset     = relaxed_->d.count - 1;
 1744|  28.7k|        auto child      = node_->inner()[offset];
 1745|  28.7k|        auto child_size = size(offset);
 1746|  28.7k|        auto is_leaf    = shift_ == BL;
 1747|  28.7k|        return is_leaf ? make_leaf_sub_pos(child, child_size).visit(v, args...)
  ------------------
  |  Branch (1747:16): [True: 7.56k, False: 21.2k]
  ------------------
 1748|  28.7k|                       : visit_maybe_relaxed_sub(
 1749|  21.2k|                             child, shift_ - B, child_size, v, args...);
 1750|  28.7k|    }
_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_:
 1830|  21.2k|{
 1831|  21.2k|    assert(node);
 1832|      0|    auto relaxed = node->relaxed();
 1833|  21.2k|    if (relaxed) {
  ------------------
  |  Branch (1833:9): [True: 1.04k, False: 20.1k]
  ------------------
 1834|  1.04k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
 1835|      0|        return make_relaxed_pos(node, shift, relaxed)
 1836|  1.04k|            .visit(v, std::forward<Args>(args)...);
 1837|  20.1k|    } else {
 1838|  20.1k|        return make_regular_sub_pos(node, shift, size)
 1839|  20.1k|            .visit(v, std::forward<Args>(args)...);
 1840|  20.1k|    }
 1841|  21.2k|}
_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_:
 1805|  1.04k|    {
 1806|  1.04k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1807|  1.04k|    }
_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_:
 1742|  3.30M|    {
 1743|  3.30M|        auto offset     = relaxed_->d.count - 1;
 1744|  3.30M|        auto child      = node_->inner()[offset];
 1745|  3.30M|        auto child_size = size(offset);
 1746|  3.30M|        auto is_leaf    = shift_ == BL;
 1747|  3.30M|        return is_leaf ? make_leaf_sub_pos(child, child_size).visit(v, args...)
  ------------------
  |  Branch (1747:16): [True: 100k, False: 3.20M]
  ------------------
 1748|  3.30M|                       : visit_maybe_relaxed_sub(
 1749|  3.20M|                             child, shift_ - B, child_size, v, args...);
 1750|  3.30M|    }
_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_:
 1830|  3.20M|{
 1831|  3.20M|    assert(node);
 1832|      0|    auto relaxed = node->relaxed();
 1833|  3.20M|    if (relaxed) {
  ------------------
  |  Branch (1833:9): [True: 2.66M, False: 537k]
  ------------------
 1834|  2.66M|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
 1835|      0|        return make_relaxed_pos(node, shift, relaxed)
 1836|  2.66M|            .visit(v, std::forward<Args>(args)...);
 1837|  2.66M|    } else {
 1838|   537k|        return make_regular_sub_pos(node, shift, size)
 1839|   537k|            .visit(v, std::forward<Args>(args)...);
 1840|   537k|    }
 1841|  3.20M|}
_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_:
 1805|  2.66M|    {
 1806|  2.66M|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1807|  2.66M|    }
_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_:
 1028|  28.2k|    {
 1029|  28.2k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1030|  28.2k|    }
_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_:
 1028|  16.5k|    {
 1029|  16.5k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1030|  16.5k|    }
_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_:
 1830|  16.5k|{
 1831|  16.5k|    assert(node);
 1832|      0|    auto relaxed = node->relaxed();
 1833|  16.5k|    if (relaxed) {
  ------------------
  |  Branch (1833:9): [True: 6.32k, False: 10.2k]
  ------------------
 1834|  6.32k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
 1835|      0|        return make_relaxed_pos(node, shift, relaxed)
 1836|  6.32k|            .visit(v, std::forward<Args>(args)...);
 1837|  10.2k|    } else {
 1838|  10.2k|        return make_regular_sub_pos(node, shift, size)
 1839|  10.2k|            .visit(v, std::forward<Args>(args)...);
 1840|  10.2k|    }
 1841|  16.5k|}
_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_:
 1805|  6.32k|    {
 1806|  6.32k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1807|  6.32k|    }
_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_:
 1028|  10.2k|    {
 1029|  10.2k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1030|  10.2k|    }
_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_:
 1805|  74.3k|    {
 1806|  74.3k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1807|  74.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_:
 1729|  67.5k|    {
 1730|  67.5k|        assert(offset_hint == count() - 1);
 1731|      0|        assert(child_size_hint == size(offset_hint));
 1732|      0|        auto child   = node_->inner()[offset_hint];
 1733|  67.5k|        auto is_leaf = shift_ == BL;
 1734|  67.5k|        return is_leaf
  ------------------
  |  Branch (1734:16): [True: 0, False: 67.5k]
  ------------------
 1735|  67.5k|                   ? make_leaf_sub_pos(child, child_size_hint).visit(v, args...)
 1736|  67.5k|                   : visit_maybe_relaxed_sub(
 1737|  67.5k|                         child, shift_ - B, child_size_hint, v, args...);
 1738|  67.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_:
 1830|  67.5k|{
 1831|  67.5k|    assert(node);
 1832|      0|    auto relaxed = node->relaxed();
 1833|  67.5k|    if (relaxed) {
  ------------------
  |  Branch (1833:9): [True: 29.6k, False: 37.8k]
  ------------------
 1834|  29.6k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
 1835|      0|        return make_relaxed_pos(node, shift, relaxed)
 1836|  29.6k|            .visit(v, std::forward<Args>(args)...);
 1837|  37.8k|    } else {
 1838|  37.8k|        return make_regular_sub_pos(node, shift, size)
 1839|  37.8k|            .visit(v, std::forward<Args>(args)...);
 1840|  37.8k|    }
 1841|  67.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_:
 1028|  37.8k|    {
 1029|  37.8k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1030|  37.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_:
  944|   269k|    {
  945|   269k|        return last_oh_regular(*this, v, offset_hint, args...);
  946|   269k|    }
_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_:
  675|   269k|{
  676|   269k|    assert(offset_hint == p.count() - 1);
  677|      0|    constexpr auto B  = bits<Pos>;
  678|   269k|    constexpr auto BL = bits_leaf<Pos>;
  679|   269k|    auto child        = p.node()->inner()[offset_hint];
  680|   269k|    auto is_leaf      = p.shift() == BL;
  681|   269k|    return is_leaf ? make_leaf_pos(child, p.size()).visit(v, args...)
  ------------------
  |  Branch (681:12): [True: 0, False: 269k]
  ------------------
  682|   269k|                   : make_regular_pos(child, p.shift() - B, p.size())
  683|   269k|                         .visit(v, args...);
  684|   269k|}
_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_:
  334|  1.17M|    {
  335|  1.17M|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
  336|  1.17M|    }
_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_:
  328|   908k|    {
  329|   908k|        return last_oh_regular(*this, v, offset_hint, args...);
  330|   908k|    }
_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_:
  675|   908k|{
  676|   908k|    assert(offset_hint == p.count() - 1);
  677|      0|    constexpr auto B  = bits<Pos>;
  678|   908k|    constexpr auto BL = bits_leaf<Pos>;
  679|   908k|    auto child        = p.node()->inner()[offset_hint];
  680|   908k|    auto is_leaf      = p.shift() == BL;
  681|   908k|    return is_leaf ? make_leaf_pos(child, p.size()).visit(v, args...)
  ------------------
  |  Branch (681:12): [True: 0, False: 908k]
  ------------------
  682|   908k|                   : make_regular_pos(child, p.shift() - B, p.size())
  683|   908k|                         .visit(v, args...);
  684|   908k|}
_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_:
  328|  3.49k|    {
  329|  3.49k|        return last_oh_regular(*this, v, offset_hint, args...);
  330|  3.49k|    }
_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_:
  675|  3.49k|{
  676|  3.49k|    assert(offset_hint == p.count() - 1);
  677|      0|    constexpr auto B  = bits<Pos>;
  678|  3.49k|    constexpr auto BL = bits_leaf<Pos>;
  679|  3.49k|    auto child        = p.node()->inner()[offset_hint];
  680|  3.49k|    auto is_leaf      = p.shift() == BL;
  681|  3.49k|    return is_leaf ? make_leaf_pos(child, p.size()).visit(v, args...)
  ------------------
  |  Branch (681:12): [True: 0, False: 3.49k]
  ------------------
  682|  3.49k|                   : make_regular_pos(child, p.shift() - B, p.size())
  683|  3.49k|                         .visit(v, args...);
  684|  3.49k|}
_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_:
  334|  5.02k|    {
  335|  5.02k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
  336|  5.02k|    }
_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_:
  944|  1.53k|    {
  945|  1.53k|        return last_oh_regular(*this, v, offset_hint, args...);
  946|  1.53k|    }
_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_:
  675|  1.53k|{
  676|  1.53k|    assert(offset_hint == p.count() - 1);
  677|      0|    constexpr auto B  = bits<Pos>;
  678|  1.53k|    constexpr auto BL = bits_leaf<Pos>;
  679|  1.53k|    auto child        = p.node()->inner()[offset_hint];
  680|  1.53k|    auto is_leaf      = p.shift() == BL;
  681|  1.53k|    return is_leaf ? make_leaf_pos(child, p.size()).visit(v, args...)
  ------------------
  |  Branch (681:12): [True: 0, False: 1.53k]
  ------------------
  682|  1.53k|                   : make_regular_pos(child, p.shift() - B, p.size())
  683|  1.53k|                         .visit(v, args...);
  684|  1.53k|}
_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_:
 1729|  9.64k|    {
 1730|  9.64k|        assert(offset_hint == count() - 1);
 1731|      0|        assert(child_size_hint == size(offset_hint));
 1732|      0|        auto child   = node_->inner()[offset_hint];
 1733|  9.64k|        auto is_leaf = shift_ == BL;
 1734|  9.64k|        return is_leaf
  ------------------
  |  Branch (1734:16): [True: 0, False: 9.64k]
  ------------------
 1735|  9.64k|                   ? make_leaf_sub_pos(child, child_size_hint).visit(v, args...)
 1736|  9.64k|                   : visit_maybe_relaxed_sub(
 1737|  9.64k|                         child, shift_ - B, child_size_hint, v, args...);
 1738|  9.64k|    }
_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_:
 1830|  9.64k|{
 1831|  9.64k|    assert(node);
 1832|      0|    auto relaxed = node->relaxed();
 1833|  9.64k|    if (relaxed) {
  ------------------
  |  Branch (1833:9): [True: 8.50k, False: 1.13k]
  ------------------
 1834|  8.50k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
 1835|      0|        return make_relaxed_pos(node, shift, relaxed)
 1836|  8.50k|            .visit(v, std::forward<Args>(args)...);
 1837|  8.50k|    } else {
 1838|  1.13k|        return make_regular_sub_pos(node, shift, size)
 1839|  1.13k|            .visit(v, std::forward<Args>(args)...);
 1840|  1.13k|    }
 1841|  9.64k|}
_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_:
 1805|  8.50k|    {
 1806|  8.50k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1807|  8.50k|    }
_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_:
 1028|  1.13k|    {
 1029|  1.13k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1030|  1.13k|    }
_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_:
 1028|   238k|    {
 1029|   238k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1030|   238k|    }
_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_:
 1830|  31.9k|{
 1831|  31.9k|    assert(node);
 1832|      0|    auto relaxed = node->relaxed();
 1833|  31.9k|    if (relaxed) {
  ------------------
  |  Branch (1833:9): [True: 29.4k, False: 2.46k]
  ------------------
 1834|  29.4k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
 1835|      0|        return make_relaxed_pos(node, shift, relaxed)
 1836|  29.4k|            .visit(v, std::forward<Args>(args)...);
 1837|  29.4k|    } else {
 1838|  2.46k|        return make_regular_sub_pos(node, shift, size)
 1839|  2.46k|            .visit(v, std::forward<Args>(args)...);
 1840|  2.46k|    }
 1841|  31.9k|}
_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_:
 1805|  29.4k|    {
 1806|  29.4k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1807|  29.4k|    }
_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_:
 1678|   104k|    {
 1679|   104k|        assert(offset_hint == index(idx));
 1680|   104k|        auto left_size = offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0;
  ------------------
  |  Branch (1680:26): [True: 29.7k, False: 74.9k]
  ------------------
 1681|   104k|        return towards_oh_sbh(v, idx, offset_hint, left_size, args...);
 1682|   104k|    }
_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_:
 1690|   104k|    {
 1691|   104k|        return towards_sub_oh_sbh(v, idx, offset_hint, left_size_hint, args...);
 1692|   104k|    }
_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_:
 1709|   104k|    {
 1710|   104k|        assert(offset_hint == index(idx));
 1711|      0|        assert(left_size_hint ==
 1712|   104k|               (offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0));
 1713|      0|        auto child     = node_->inner()[offset_hint];
 1714|   104k|        auto is_leaf   = shift_ == BL;
 1715|   104k|        auto next_size = relaxed_->d.sizes[offset_hint] - left_size_hint;
 1716|   104k|        auto next_idx  = idx - left_size_hint;
 1717|   104k|        return is_leaf
  ------------------
  |  Branch (1717:16): [True: 28.0k, False: 76.6k]
  ------------------
 1718|   104k|                   ? make_leaf_sub_pos(child, next_size)
 1719|  28.0k|                         .visit(v, next_idx, args...)
 1720|   104k|                   : visit_maybe_relaxed_sub(
 1721|  76.6k|                         child, shift_ - B, next_size, v, next_idx, args...);
 1722|   104k|    }
_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_:
  143|  28.0k|    {
  144|  28.0k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  145|  28.0k|    }
_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_:
 1830|  76.6k|{
 1831|  76.6k|    assert(node);
 1832|      0|    auto relaxed = node->relaxed();
 1833|  76.6k|    if (relaxed) {
  ------------------
  |  Branch (1833:9): [True: 75.2k, False: 1.44k]
  ------------------
 1834|  75.2k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
 1835|      0|        return make_relaxed_pos(node, shift, relaxed)
 1836|  75.2k|            .visit(v, std::forward<Args>(args)...);
 1837|  75.2k|    } else {
 1838|  1.44k|        return make_regular_sub_pos(node, shift, size)
 1839|  1.44k|            .visit(v, std::forward<Args>(args)...);
 1840|  1.44k|    }
 1841|  76.6k|}
_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_:
 1805|  75.2k|    {
 1806|  75.2k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1807|  75.2k|    }
_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_:
 1028|  1.44k|    {
 1029|  1.44k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1030|  1.44k|    }
_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_:
  930|  3.90k|    {
  931|  3.90k|        return towards_oh_ch_regular(
  932|  3.90k|            *this, v, idx, offset_hint, count(), args...);
  933|  3.90k|    }
_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_:
  630|  3.90k|{
  631|  3.90k|    constexpr auto B  = bits<Pos>;
  632|  3.90k|    constexpr auto BL = bits_leaf<Pos>;
  633|  3.90k|    assert(offset_hint == p.index(idx));
  634|      0|    assert(count_hint == p.count());
  635|      0|    auto is_leaf = p.shift() == BL;
  636|  3.90k|    auto child   = p.node()->inner()[offset_hint];
  637|  3.90k|    auto is_full = offset_hint + 1 != count_hint;
  638|  3.90k|    return is_full
  ------------------
  |  Branch (638:12): [True: 1.92k, False: 1.97k]
  ------------------
  639|  3.90k|               ? (is_leaf ? make_full_leaf_pos(child).visit(v, idx, args...)
  ------------------
  |  Branch (639:19): [True: 724, False: 1.20k]
  ------------------
  640|  1.92k|                          : make_full_pos(child, p.shift() - B)
  641|  1.20k|                                .visit(v, idx, args...))
  642|  3.90k|               : (is_leaf
  ------------------
  |  Branch (642:19): [True: 717, False: 1.25k]
  ------------------
  643|  1.97k|                      ? make_leaf_pos(child, p.size()).visit(v, idx, args...)
  644|  1.97k|                      : make_regular_pos(child, p.shift() - B, p.size())
  645|  1.25k|                            .visit(v, idx, args...));
  646|  3.90k|}
_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_:
  205|  2.63k|    {
  206|  2.63k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  207|  2.63k|    }
_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_:
 1397|  2.40k|    {
 1398|  2.40k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1399|  2.40k|    }
_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_:
 1321|  2.40k|    {
 1322|  2.40k|        return towards_oh(v, idx, offset_hint, args...);
 1323|  2.40k|    }
_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_:
 1328|  2.40k|    {
 1329|  2.40k|        assert(offset_hint == index(idx));
 1330|      0|        auto is_leaf = shift_ == BL;
 1331|  2.40k|        auto child   = node_->inner()[offset_hint];
 1332|  2.40k|        return is_leaf
  ------------------
  |  Branch (1332:16): [True: 1.53k, False: 864]
  ------------------
 1333|  2.40k|                   ? make_full_leaf_pos(child).visit(v, idx, args...)
 1334|  2.40k|                   : make_full_pos(child, shift_ - B).visit(v, idx, args...);
 1335|  2.40k|    }
_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_:
  111|  1.26k|    {
  112|  1.26k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  113|  1.26k|    }
_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_:
  334|  1.75k|    {
  335|  1.75k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
  336|  1.75k|    }
_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_:
  314|  1.75k|    {
  315|  1.75k|        return towards_oh_ch_regular(
  316|  1.75k|            *this, v, idx, offset_hint, count(), args...);
  317|  1.75k|    }
_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_:
  630|  1.75k|{
  631|  1.75k|    constexpr auto B  = bits<Pos>;
  632|  1.75k|    constexpr auto BL = bits_leaf<Pos>;
  633|  1.75k|    assert(offset_hint == p.index(idx));
  634|      0|    assert(count_hint == p.count());
  635|      0|    auto is_leaf = p.shift() == BL;
  636|  1.75k|    auto child   = p.node()->inner()[offset_hint];
  637|  1.75k|    auto is_full = offset_hint + 1 != count_hint;
  638|  1.75k|    return is_full
  ------------------
  |  Branch (638:12): [True: 707, False: 1.04k]
  ------------------
  639|  1.75k|               ? (is_leaf ? make_full_leaf_pos(child).visit(v, idx, args...)
  ------------------
  |  Branch (639:19): [True: 374, False: 333]
  ------------------
  640|    707|                          : make_full_pos(child, p.shift() - B)
  641|    333|                                .visit(v, idx, args...))
  642|  1.75k|               : (is_leaf
  ------------------
  |  Branch (642:19): [True: 548, False: 498]
  ------------------
  643|  1.04k|                      ? make_leaf_pos(child, p.size()).visit(v, idx, args...)
  644|  1.04k|                      : make_regular_pos(child, p.shift() - B, p.size())
  645|    498|                            .visit(v, idx, args...));
  646|  1.75k|}
_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_:
 1028|  2.46k|    {
 1029|  2.46k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1030|  2.46k|    }
_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_:
 1830|   134k|{
 1831|   134k|    assert(node);
 1832|      0|    auto relaxed = node->relaxed();
 1833|   134k|    if (relaxed) {
  ------------------
  |  Branch (1833:9): [True: 121k, False: 13.4k]
  ------------------
 1834|   121k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
 1835|      0|        return make_relaxed_pos(node, shift, relaxed)
 1836|   121k|            .visit(v, std::forward<Args>(args)...);
 1837|   121k|    } else {
 1838|  13.4k|        return make_regular_sub_pos(node, shift, size)
 1839|  13.4k|            .visit(v, std::forward<Args>(args)...);
 1840|  13.4k|    }
 1841|   134k|}
_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_:
 1805|   121k|    {
 1806|   121k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1807|   121k|    }
_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_:
 1678|  98.0k|    {
 1679|  98.0k|        assert(offset_hint == index(idx));
 1680|  98.0k|        auto left_size = offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0;
  ------------------
  |  Branch (1680:26): [True: 0, False: 98.0k]
  ------------------
 1681|  98.0k|        return towards_oh_sbh(v, idx, offset_hint, left_size, args...);
 1682|  98.0k|    }
_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_:
 1690|  98.0k|    {
 1691|  98.0k|        return towards_sub_oh_sbh(v, idx, offset_hint, left_size_hint, args...);
 1692|  98.0k|    }
_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_:
 1709|  98.0k|    {
 1710|  98.0k|        assert(offset_hint == index(idx));
 1711|      0|        assert(left_size_hint ==
 1712|  98.0k|               (offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0));
 1713|      0|        auto child     = node_->inner()[offset_hint];
 1714|  98.0k|        auto is_leaf   = shift_ == BL;
 1715|  98.0k|        auto next_size = relaxed_->d.sizes[offset_hint] - left_size_hint;
 1716|  98.0k|        auto next_idx  = idx - left_size_hint;
 1717|  98.0k|        return is_leaf
  ------------------
  |  Branch (1717:16): [True: 3.85k, False: 94.1k]
  ------------------
 1718|  98.0k|                   ? make_leaf_sub_pos(child, next_size)
 1719|  3.85k|                         .visit(v, next_idx, args...)
 1720|  98.0k|                   : visit_maybe_relaxed_sub(
 1721|  94.1k|                         child, shift_ - B, next_size, v, next_idx, args...);
 1722|  98.0k|    }
_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_:
  143|  3.85k|    {
  144|  3.85k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  145|  3.85k|    }
_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_:
 1678|  21.0k|    {
 1679|  21.0k|        assert(offset_hint == index(idx));
 1680|  21.0k|        auto left_size = offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0;
  ------------------
  |  Branch (1680:26): [True: 0, False: 21.0k]
  ------------------
 1681|  21.0k|        return towards_oh_sbh(v, idx, offset_hint, left_size, args...);
 1682|  21.0k|    }
_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_:
 1690|  21.0k|    {
 1691|  21.0k|        return towards_sub_oh_sbh(v, idx, offset_hint, left_size_hint, args...);
 1692|  21.0k|    }
_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_:
 1709|  21.0k|    {
 1710|  21.0k|        assert(offset_hint == index(idx));
 1711|      0|        assert(left_size_hint ==
 1712|  21.0k|               (offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0));
 1713|      0|        auto child     = node_->inner()[offset_hint];
 1714|  21.0k|        auto is_leaf   = shift_ == BL;
 1715|  21.0k|        auto next_size = relaxed_->d.sizes[offset_hint] - left_size_hint;
 1716|  21.0k|        auto next_idx  = idx - left_size_hint;
 1717|  21.0k|        return is_leaf
  ------------------
  |  Branch (1717:16): [True: 721, False: 20.3k]
  ------------------
 1718|  21.0k|                   ? make_leaf_sub_pos(child, next_size)
 1719|    721|                         .visit(v, next_idx, args...)
 1720|  21.0k|                   : visit_maybe_relaxed_sub(
 1721|  20.3k|                         child, shift_ - B, next_size, v, next_idx, args...);
 1722|  21.0k|    }
_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_:
  143|    721|    {
  144|    721|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  145|    721|    }
_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_:
 1830|  20.3k|{
 1831|  20.3k|    assert(node);
 1832|      0|    auto relaxed = node->relaxed();
 1833|  20.3k|    if (relaxed) {
  ------------------
  |  Branch (1833:9): [True: 19.2k, False: 1.12k]
  ------------------
 1834|  19.2k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
 1835|      0|        return make_relaxed_pos(node, shift, relaxed)
 1836|  19.2k|            .visit(v, std::forward<Args>(args)...);
 1837|  19.2k|    } else {
 1838|  1.12k|        return make_regular_sub_pos(node, shift, size)
 1839|  1.12k|            .visit(v, std::forward<Args>(args)...);
 1840|  1.12k|    }
 1841|  20.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_:
 1805|  19.2k|    {
 1806|  19.2k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1807|  19.2k|    }
_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_:
 1028|  1.12k|    {
 1029|  1.12k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1030|  1.12k|    }
_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_:
  919|  2.57k|    {
  920|  2.57k|        return towards_oh_ch_regular(
  921|  2.57k|            *this, v, idx, offset_hint, count(), args...);
  922|  2.57k|    }
_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_:
  630|  2.57k|{
  631|  2.57k|    constexpr auto B  = bits<Pos>;
  632|  2.57k|    constexpr auto BL = bits_leaf<Pos>;
  633|  2.57k|    assert(offset_hint == p.index(idx));
  634|      0|    assert(count_hint == p.count());
  635|      0|    auto is_leaf = p.shift() == BL;
  636|  2.57k|    auto child   = p.node()->inner()[offset_hint];
  637|  2.57k|    auto is_full = offset_hint + 1 != count_hint;
  638|  2.57k|    return is_full
  ------------------
  |  Branch (638:12): [True: 2.16k, False: 408]
  ------------------
  639|  2.57k|               ? (is_leaf ? make_full_leaf_pos(child).visit(v, idx, args...)
  ------------------
  |  Branch (639:19): [True: 611, False: 1.55k]
  ------------------
  640|  2.16k|                          : make_full_pos(child, p.shift() - B)
  641|  1.55k|                                .visit(v, idx, args...))
  642|  2.57k|               : (is_leaf
  ------------------
  |  Branch (642:19): [True: 408, False: 0]
  ------------------
  643|    408|                      ? make_leaf_pos(child, p.size()).visit(v, idx, args...)
  644|    408|                      : make_regular_pos(child, p.shift() - B, p.size())
  645|      0|                            .visit(v, idx, args...));
  646|  2.57k|}
_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_:
  205|  1.41k|    {
  206|  1.41k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  207|  1.41k|    }
_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_:
 1397|  2.12k|    {
 1398|  2.12k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1399|  2.12k|    }
_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_:
 1328|  1.36k|    {
 1329|  1.36k|        assert(offset_hint == index(idx));
 1330|      0|        auto is_leaf = shift_ == BL;
 1331|  1.36k|        auto child   = node_->inner()[offset_hint];
 1332|  1.36k|        return is_leaf
  ------------------
  |  Branch (1332:16): [True: 799, False: 570]
  ------------------
 1333|  1.36k|                   ? make_full_leaf_pos(child).visit(v, idx, args...)
 1334|  1.36k|                   : make_full_pos(child, shift_ - B).visit(v, idx, args...);
 1335|  1.36k|    }
_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_:
 1328|  2.27k|    {
 1329|  2.27k|        assert(offset_hint == index(idx));
 1330|      0|        auto is_leaf = shift_ == BL;
 1331|  2.27k|        auto child   = node_->inner()[offset_hint];
 1332|  2.27k|        return is_leaf
  ------------------
  |  Branch (1332:16): [True: 1.47k, False: 800]
  ------------------
 1333|  2.27k|                   ? make_full_leaf_pos(child).visit(v, idx, args...)
 1334|  2.27k|                   : make_full_pos(child, shift_ - B).visit(v, idx, args...);
 1335|  2.27k|    }
_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_:
  205|  4.38k|    {
  206|  4.38k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  207|  4.38k|    }
_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_:
 1397|  4.21k|    {
 1398|  4.21k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1399|  4.21k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_17dec_right_visitorEJjEEEDcT_DpOT0_:
 1397|  4.53k|    {
 1398|  4.53k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1399|  4.53k|    }
_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_:
 1328|  8.87k|    {
 1329|  8.87k|        assert(offset_hint == index(idx));
 1330|      0|        auto is_leaf = shift_ == BL;
 1331|  8.87k|        auto child   = node_->inner()[offset_hint];
 1332|  8.87k|        return is_leaf
  ------------------
  |  Branch (1332:16): [True: 7.30k, False: 1.57k]
  ------------------
 1333|  8.87k|                   ? make_full_leaf_pos(child).visit(v, idx, args...)
 1334|  8.87k|                   : make_full_pos(child, shift_ - B).visit(v, idx, args...);
 1335|  8.87k|    }
_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_:
  205|  9.58k|    {
  206|  9.58k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  207|  9.58k|    }
_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_:
 1397|  3.39k|    {
 1398|  3.39k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1399|  3.39k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10each_rightINS1_11dec_visitorEJEEEvT_jDpOT0_:
 1302|  4.05k|    {
 1303|  4.05k|        each_i(v, start, branches<B>, args...);
 1304|  4.05k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE6each_iINS1_11dec_visitorEJEEEvT_jjDpOT0_:
 1255|  6.37k|    {
 1256|  6.37k|        auto p = node_->inner() + i;
 1257|  6.37k|        auto e = node_->inner() + n;
 1258|  6.37k|        if (shift_ == BL) {
  ------------------
  |  Branch (1258:13): [True: 3.87k, False: 2.50k]
  ------------------
 1259|  11.3k|            for (; p != e; ++p) {
  ------------------
  |  Branch (1259:20): [True: 7.45k, False: 3.87k]
  ------------------
 1260|  7.45k|                IMMER_PREFETCH(p + 1);
 1261|  7.45k|                make_full_leaf_pos(*p).visit(v, args...);
 1262|  7.45k|            }
 1263|  3.87k|        } else {
 1264|  2.50k|            auto ss = shift_ - B;
 1265|  7.76k|            for (; p != e; ++p)
  ------------------
  |  Branch (1265:20): [True: 5.26k, False: 2.50k]
  ------------------
 1266|  5.26k|                make_full_pos(*p, ss).visit(v, args...);
 1267|  2.50k|        }
 1268|  6.37k|    }
_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_:
  111|    408|    {
  112|    408|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  113|    408|    }
_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_:
  303|  4.67k|    {
  304|  4.67k|        return towards_oh_ch_regular(
  305|  4.67k|            *this, v, idx, offset_hint, count(), args...);
  306|  4.67k|    }
_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_:
  630|  4.67k|{
  631|  4.67k|    constexpr auto B  = bits<Pos>;
  632|  4.67k|    constexpr auto BL = bits_leaf<Pos>;
  633|  4.67k|    assert(offset_hint == p.index(idx));
  634|      0|    assert(count_hint == p.count());
  635|      0|    auto is_leaf = p.shift() == BL;
  636|  4.67k|    auto child   = p.node()->inner()[offset_hint];
  637|  4.67k|    auto is_full = offset_hint + 1 != count_hint;
  638|  4.67k|    return is_full
  ------------------
  |  Branch (638:12): [True: 2.36k, False: 2.30k]
  ------------------
  639|  4.67k|               ? (is_leaf ? make_full_leaf_pos(child).visit(v, idx, args...)
  ------------------
  |  Branch (639:19): [True: 1.42k, False: 945]
  ------------------
  640|  2.36k|                          : make_full_pos(child, p.shift() - B)
  641|    945|                                .visit(v, idx, args...))
  642|  4.67k|               : (is_leaf
  ------------------
  |  Branch (642:19): [True: 921, False: 1.38k]
  ------------------
  643|  2.30k|                      ? make_leaf_pos(child, p.size()).visit(v, idx, args...)
  644|  2.30k|                      : make_regular_pos(child, p.shift() - B, p.size())
  645|  1.38k|                            .visit(v, idx, args...));
  646|  4.67k|}
_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_:
  111|  2.11k|    {
  112|  2.11k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  113|  2.11k|    }
_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_:
  334|  5.29k|    {
  335|  5.29k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
  336|  5.29k|    }
_ZN5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_17dec_right_visitorEJjEEEDcT_DpOT0_:
  334|  2.96k|    {
  335|  2.96k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
  336|  2.96k|    }
_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_:
  303|  4.29k|    {
  304|  4.29k|        return towards_oh_ch_regular(
  305|  4.29k|            *this, v, idx, offset_hint, count(), args...);
  306|  4.29k|    }
_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_:
  630|  4.29k|{
  631|  4.29k|    constexpr auto B  = bits<Pos>;
  632|  4.29k|    constexpr auto BL = bits_leaf<Pos>;
  633|  4.29k|    assert(offset_hint == p.index(idx));
  634|      0|    assert(count_hint == p.count());
  635|      0|    auto is_leaf = p.shift() == BL;
  636|  4.29k|    auto child   = p.node()->inner()[offset_hint];
  637|  4.29k|    auto is_full = offset_hint + 1 != count_hint;
  638|  4.29k|    return is_full
  ------------------
  |  Branch (638:12): [True: 1.20k, False: 3.08k]
  ------------------
  639|  4.29k|               ? (is_leaf ? make_full_leaf_pos(child).visit(v, idx, args...)
  ------------------
  |  Branch (639:19): [True: 723, False: 483]
  ------------------
  640|  1.20k|                          : make_full_pos(child, p.shift() - B)
  641|    483|                                .visit(v, idx, args...))
  642|  4.29k|               : (is_leaf
  ------------------
  |  Branch (642:19): [True: 1.70k, False: 1.38k]
  ------------------
  643|  3.08k|                      ? make_leaf_pos(child, p.size()).visit(v, idx, args...)
  644|  3.08k|                      : make_regular_pos(child, p.shift() - B, p.size())
  645|  1.38k|                            .visit(v, idx, args...));
  646|  4.29k|}
_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_:
  111|  2.37k|    {
  112|  2.37k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  113|  2.37k|    }
_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_:
  334|  3.66k|    {
  335|  3.66k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
  336|  3.66k|    }
_ZN5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10each_rightINS1_11dec_visitorEJEEEvT_jDpOT0_:
  283|  4.67k|    {
  284|  4.67k|        return each_right_regular(*this, v, start, args...);
  285|  4.67k|    }
_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_:
  595|  4.67k|{
  596|  4.67k|    constexpr auto B  = bits<Pos>;
  597|  4.67k|    constexpr auto BL = bits_leaf<Pos>;
  598|       |
  599|  4.67k|    if (p.shift() == BL) {
  ------------------
  |  Branch (599:9): [True: 2.34k, False: 2.32k]
  ------------------
  600|  2.34k|        auto n    = p.node()->inner() + start;
  601|  2.34k|        auto last = p.count() - 1;
  602|  2.34k|        auto e    = p.node()->inner() + last;
  603|  2.34k|        if (n <= e) {
  ------------------
  |  Branch (603:13): [True: 1.42k, False: 921]
  ------------------
  604|  2.45k|            for (; n != e; ++n) {
  ------------------
  |  Branch (604:20): [True: 1.03k, False: 1.42k]
  ------------------
  605|  1.03k|                IMMER_PREFETCH(n + 1);
  606|  1.03k|                make_full_leaf_pos(*n).visit(v, args...);
  607|  1.03k|            }
  608|  1.42k|            make_leaf_pos(*n, p.size()).visit(v, args...);
  609|  1.42k|        }
  610|  2.34k|    } else {
  611|  2.32k|        auto n    = p.node()->inner() + start;
  612|  2.32k|        auto last = p.count() - 1;
  613|  2.32k|        auto e    = p.node()->inner() + last;
  614|  2.32k|        auto ss   = p.shift() - B;
  615|  2.32k|        if (n <= e) {
  ------------------
  |  Branch (615:13): [True: 945, False: 1.38k]
  ------------------
  616|  2.03k|            for (; n != e; ++n)
  ------------------
  |  Branch (616:20): [True: 1.08k, False: 945]
  ------------------
  617|  1.08k|                make_full_pos(*n, ss).visit(v, args...);
  618|    945|            make_regular_pos(*n, ss, p.size()).visit(v, args...);
  619|    945|        }
  620|  2.32k|    }
  621|  4.67k|}
_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_:
  919|  9.06k|    {
  920|  9.06k|        return towards_oh_ch_regular(
  921|  9.06k|            *this, v, idx, offset_hint, count(), args...);
  922|  9.06k|    }
_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_:
  630|  9.06k|{
  631|  9.06k|    constexpr auto B  = bits<Pos>;
  632|  9.06k|    constexpr auto BL = bits_leaf<Pos>;
  633|  9.06k|    assert(offset_hint == p.index(idx));
  634|      0|    assert(count_hint == p.count());
  635|      0|    auto is_leaf = p.shift() == BL;
  636|  9.06k|    auto child   = p.node()->inner()[offset_hint];
  637|  9.06k|    auto is_full = offset_hint + 1 != count_hint;
  638|  9.06k|    return is_full
  ------------------
  |  Branch (638:12): [True: 3.96k, False: 5.10k]
  ------------------
  639|  9.06k|               ? (is_leaf ? make_full_leaf_pos(child).visit(v, idx, args...)
  ------------------
  |  Branch (639:19): [True: 1.49k, False: 2.47k]
  ------------------
  640|  3.96k|                          : make_full_pos(child, p.shift() - B)
  641|  2.47k|                                .visit(v, idx, args...))
  642|  9.06k|               : (is_leaf
  ------------------
  |  Branch (642:19): [True: 1.18k, False: 3.91k]
  ------------------
  643|  5.10k|                      ? make_leaf_pos(child, p.size()).visit(v, idx, args...)
  644|  5.10k|                      : make_regular_pos(child, p.shift() - B, p.size())
  645|  3.91k|                            .visit(v, idx, args...));
  646|  9.06k|}
_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_:
  919|  5.85k|    {
  920|  5.85k|        return towards_oh_ch_regular(
  921|  5.85k|            *this, v, idx, offset_hint, count(), args...);
  922|  5.85k|    }
_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_:
  630|  5.85k|{
  631|  5.85k|    constexpr auto B  = bits<Pos>;
  632|  5.85k|    constexpr auto BL = bits_leaf<Pos>;
  633|  5.85k|    assert(offset_hint == p.index(idx));
  634|      0|    assert(count_hint == p.count());
  635|      0|    auto is_leaf = p.shift() == BL;
  636|  5.85k|    auto child   = p.node()->inner()[offset_hint];
  637|  5.85k|    auto is_full = offset_hint + 1 != count_hint;
  638|  5.85k|    return is_full
  ------------------
  |  Branch (638:12): [True: 2.89k, False: 2.95k]
  ------------------
  639|  5.85k|               ? (is_leaf ? make_full_leaf_pos(child).visit(v, idx, args...)
  ------------------
  |  Branch (639:19): [True: 1.56k, False: 1.33k]
  ------------------
  640|  2.89k|                          : make_full_pos(child, p.shift() - B)
  641|  1.33k|                                .visit(v, idx, args...))
  642|  5.85k|               : (is_leaf
  ------------------
  |  Branch (642:19): [True: 674, False: 2.28k]
  ------------------
  643|  2.95k|                      ? make_leaf_pos(child, p.size()).visit(v, idx, args...)
  644|  2.95k|                      : make_regular_pos(child, p.shift() - B, p.size())
  645|  2.28k|                            .visit(v, idx, args...));
  646|  5.85k|}
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10each_rightINS1_11dec_visitorEJEEEvT_jDpOT0_:
  859|  14.9k|    {
  860|  14.9k|        return each_right_regular(*this, v, start, args...);
  861|  14.9k|    }
_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_:
  595|  14.9k|{
  596|  14.9k|    constexpr auto B  = bits<Pos>;
  597|  14.9k|    constexpr auto BL = bits_leaf<Pos>;
  598|       |
  599|  14.9k|    if (p.shift() == BL) {
  ------------------
  |  Branch (599:9): [True: 4.68k, False: 10.2k]
  ------------------
  600|  4.68k|        auto n    = p.node()->inner() + start;
  601|  4.68k|        auto last = p.count() - 1;
  602|  4.68k|        auto e    = p.node()->inner() + last;
  603|  4.68k|        if (n <= e) {
  ------------------
  |  Branch (603:13): [True: 2.81k, False: 1.87k]
  ------------------
  604|  5.52k|            for (; n != e; ++n) {
  ------------------
  |  Branch (604:20): [True: 2.70k, False: 2.81k]
  ------------------
  605|  2.70k|                IMMER_PREFETCH(n + 1);
  606|  2.70k|                make_full_leaf_pos(*n).visit(v, args...);
  607|  2.70k|            }
  608|  2.81k|            make_leaf_pos(*n, p.size()).visit(v, args...);
  609|  2.81k|        }
  610|  10.2k|    } else {
  611|  10.2k|        auto n    = p.node()->inner() + start;
  612|  10.2k|        auto last = p.count() - 1;
  613|  10.2k|        auto e    = p.node()->inner() + last;
  614|  10.2k|        auto ss   = p.shift() - B;
  615|  10.2k|        if (n <= e) {
  ------------------
  |  Branch (615:13): [True: 6.38k, False: 3.91k]
  ------------------
  616|  9.58k|            for (; n != e; ++n)
  ------------------
  |  Branch (616:20): [True: 3.20k, False: 6.38k]
  ------------------
  617|  3.20k|                make_full_pos(*n, ss).visit(v, args...);
  618|  6.38k|            make_regular_pos(*n, ss, p.size()).visit(v, args...);
  619|  6.38k|        }
  620|  10.2k|    }
  621|  14.9k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_17dec_right_visitorEJjEEEDcT_DpOT0_:
 1805|   106k|    {
 1806|   106k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1807|   106k|    }
_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_:
 1678|  25.5k|    {
 1679|  25.5k|        assert(offset_hint == index(idx));
 1680|  25.5k|        auto left_size = offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0;
  ------------------
  |  Branch (1680:26): [True: 20.2k, False: 5.24k]
  ------------------
 1681|  25.5k|        return towards_oh_sbh(v, idx, offset_hint, left_size, args...);
 1682|  25.5k|    }
_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_:
 1690|  25.5k|    {
 1691|  25.5k|        return towards_sub_oh_sbh(v, idx, offset_hint, left_size_hint, args...);
 1692|  25.5k|    }
_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_:
 1709|  25.5k|    {
 1710|  25.5k|        assert(offset_hint == index(idx));
 1711|      0|        assert(left_size_hint ==
 1712|  25.5k|               (offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0));
 1713|      0|        auto child     = node_->inner()[offset_hint];
 1714|  25.5k|        auto is_leaf   = shift_ == BL;
 1715|  25.5k|        auto next_size = relaxed_->d.sizes[offset_hint] - left_size_hint;
 1716|  25.5k|        auto next_idx  = idx - left_size_hint;
 1717|  25.5k|        return is_leaf
  ------------------
  |  Branch (1717:16): [True: 5.50k, False: 20.0k]
  ------------------
 1718|  25.5k|                   ? make_leaf_sub_pos(child, next_size)
 1719|  5.50k|                         .visit(v, next_idx, args...)
 1720|  25.5k|                   : visit_maybe_relaxed_sub(
 1721|  20.0k|                         child, shift_ - B, next_size, v, next_idx, args...);
 1722|  25.5k|    }
_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_:
  143|  5.50k|    {
  144|  5.50k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  145|  5.50k|    }
_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_:
 1830|  20.0k|{
 1831|  20.0k|    assert(node);
 1832|      0|    auto relaxed = node->relaxed();
 1833|  20.0k|    if (relaxed) {
  ------------------
  |  Branch (1833:9): [True: 13.7k, False: 6.28k]
  ------------------
 1834|  13.7k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
 1835|      0|        return make_relaxed_pos(node, shift, relaxed)
 1836|  13.7k|            .visit(v, std::forward<Args>(args)...);
 1837|  13.7k|    } else {
 1838|  6.28k|        return make_regular_sub_pos(node, shift, size)
 1839|  6.28k|            .visit(v, std::forward<Args>(args)...);
 1840|  6.28k|    }
 1841|  20.0k|}
_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_:
 1805|  13.7k|    {
 1806|  13.7k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1807|  13.7k|    }
_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_:
 1028|  6.28k|    {
 1029|  6.28k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1030|  6.28k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_17dec_right_visitorEJjEEEDcT_DpOT0_:
 1028|  11.8k|    {
 1029|  11.8k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1030|  11.8k|    }
_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_:
 1678|  18.6k|    {
 1679|  18.6k|        assert(offset_hint == index(idx));
 1680|  18.6k|        auto left_size = offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0;
  ------------------
  |  Branch (1680:26): [True: 11.6k, False: 6.97k]
  ------------------
 1681|  18.6k|        return towards_oh_sbh(v, idx, offset_hint, left_size, args...);
 1682|  18.6k|    }
_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_:
 1690|  18.6k|    {
 1691|  18.6k|        return towards_sub_oh_sbh(v, idx, offset_hint, left_size_hint, args...);
 1692|  18.6k|    }
_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_:
 1709|  18.6k|    {
 1710|  18.6k|        assert(offset_hint == index(idx));
 1711|      0|        assert(left_size_hint ==
 1712|  18.6k|               (offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0));
 1713|      0|        auto child     = node_->inner()[offset_hint];
 1714|  18.6k|        auto is_leaf   = shift_ == BL;
 1715|  18.6k|        auto next_size = relaxed_->d.sizes[offset_hint] - left_size_hint;
 1716|  18.6k|        auto next_idx  = idx - left_size_hint;
 1717|  18.6k|        return is_leaf
  ------------------
  |  Branch (1717:16): [True: 6.85k, False: 11.7k]
  ------------------
 1718|  18.6k|                   ? make_leaf_sub_pos(child, next_size)
 1719|  6.85k|                         .visit(v, next_idx, args...)
 1720|  18.6k|                   : visit_maybe_relaxed_sub(
 1721|  11.7k|                         child, shift_ - B, next_size, v, next_idx, args...);
 1722|  18.6k|    }
_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_:
  143|  6.85k|    {
  144|  6.85k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  145|  6.85k|    }
_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_:
 1830|  11.7k|{
 1831|  11.7k|    assert(node);
 1832|      0|    auto relaxed = node->relaxed();
 1833|  11.7k|    if (relaxed) {
  ------------------
  |  Branch (1833:9): [True: 9.24k, False: 2.54k]
  ------------------
 1834|  9.24k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
 1835|      0|        return make_relaxed_pos(node, shift, relaxed)
 1836|  9.24k|            .visit(v, std::forward<Args>(args)...);
 1837|  9.24k|    } else {
 1838|  2.54k|        return make_regular_sub_pos(node, shift, size)
 1839|  2.54k|            .visit(v, std::forward<Args>(args)...);
 1840|  2.54k|    }
 1841|  11.7k|}
_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_:
 1805|  9.24k|    {
 1806|  9.24k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1807|  9.24k|    }
_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_:
 1028|  2.54k|    {
 1029|  2.54k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1030|  2.54k|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10each_rightINS1_11dec_visitorEJEEEvT_jDpOT0_:
 1645|   123k|    {
 1646|   123k|        assert(start > 0);
 1647|      0|        assert(start <= relaxed_->d.count);
 1648|      0|        auto s = relaxed_->d.sizes[start - 1];
 1649|   123k|        auto p = node_->inner();
 1650|   123k|        if (shift_ == BL) {
  ------------------
  |  Branch (1650:13): [True: 9.36k, False: 114k]
  ------------------
 1651|  26.4k|            for (auto i = start; i < relaxed_->d.count; ++i) {
  ------------------
  |  Branch (1651:34): [True: 17.0k, False: 9.36k]
  ------------------
 1652|  17.0k|                IMMER_PREFETCH(p + i + 1);
 1653|  17.0k|                make_leaf_sub_pos(p[i], relaxed_->d.sizes[i] - s)
 1654|  17.0k|                    .visit(v, args...);
 1655|  17.0k|                s = relaxed_->d.sizes[i];
 1656|  17.0k|                assert(s);
 1657|  17.0k|            }
 1658|   114k|        } else {
 1659|   114k|            auto ss = shift_ - B;
 1660|   406k|            for (auto i = start; i < relaxed_->d.count; ++i) {
  ------------------
  |  Branch (1660:34): [True: 292k, False: 114k]
  ------------------
 1661|   292k|                visit_maybe_relaxed_sub(
 1662|   292k|                    p[i], ss, relaxed_->d.sizes[i] - s, v, args...);
 1663|   292k|                s = relaxed_->d.sizes[i];
 1664|   292k|                assert(s);
 1665|   292k|            }
 1666|   114k|        }
 1667|   123k|    }
_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_:
 1028|  13.4k|    {
 1029|  13.4k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1030|  13.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_:
  919|  5.91k|    {
  920|  5.91k|        return towards_oh_ch_regular(
  921|  5.91k|            *this, v, idx, offset_hint, count(), args...);
  922|  5.91k|    }
_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_:
  630|  5.91k|{
  631|  5.91k|    constexpr auto B  = bits<Pos>;
  632|  5.91k|    constexpr auto BL = bits_leaf<Pos>;
  633|  5.91k|    assert(offset_hint == p.index(idx));
  634|      0|    assert(count_hint == p.count());
  635|      0|    auto is_leaf = p.shift() == BL;
  636|  5.91k|    auto child   = p.node()->inner()[offset_hint];
  637|  5.91k|    auto is_full = offset_hint + 1 != count_hint;
  638|  5.91k|    return is_full
  ------------------
  |  Branch (638:12): [True: 5.23k, False: 685]
  ------------------
  639|  5.91k|               ? (is_leaf ? make_full_leaf_pos(child).visit(v, idx, args...)
  ------------------
  |  Branch (639:19): [True: 1.32k, False: 3.91k]
  ------------------
  640|  5.23k|                          : make_full_pos(child, p.shift() - B)
  641|  3.91k|                                .visit(v, idx, args...))
  642|  5.91k|               : (is_leaf
  ------------------
  |  Branch (642:19): [True: 685, False: 0]
  ------------------
  643|    685|                      ? make_leaf_pos(child, p.size()).visit(v, idx, args...)
  644|    685|                      : make_regular_pos(child, p.shift() - B, p.size())
  645|      0|                            .visit(v, idx, args...));
  646|  5.91k|}
_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_:
  205|  2.44k|    {
  206|  2.44k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  207|  2.44k|    }
_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_:
 1397|  4.56k|    {
 1398|  4.56k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1399|  4.56k|    }
_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_:
 1328|  1.77k|    {
 1329|  1.77k|        assert(offset_hint == index(idx));
 1330|      0|        auto is_leaf = shift_ == BL;
 1331|  1.77k|        auto child   = node_->inner()[offset_hint];
 1332|  1.77k|        return is_leaf
  ------------------
  |  Branch (1332:16): [True: 1.12k, False: 650]
  ------------------
 1333|  1.77k|                   ? make_full_leaf_pos(child).visit(v, idx, args...)
 1334|  1.77k|                   : make_full_pos(child, shift_ - B).visit(v, idx, args...);
 1335|  1.77k|    }
_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_:
  111|    685|    {
  112|    685|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  113|    685|    }
_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_:
  143|    743|    {
  144|    743|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  145|    743|    }
_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_:
 1830|  43.1k|{
 1831|  43.1k|    assert(node);
 1832|      0|    auto relaxed = node->relaxed();
 1833|  43.1k|    if (relaxed) {
  ------------------
  |  Branch (1833:9): [True: 35.7k, False: 7.38k]
  ------------------
 1834|  35.7k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
 1835|      0|        return make_relaxed_pos(node, shift, relaxed)
 1836|  35.7k|            .visit(v, std::forward<Args>(args)...);
 1837|  35.7k|    } else {
 1838|  7.38k|        return make_regular_sub_pos(node, shift, size)
 1839|  7.38k|            .visit(v, std::forward<Args>(args)...);
 1840|  7.38k|    }
 1841|  43.1k|}
_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_:
 1805|  35.7k|    {
 1806|  35.7k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1807|  35.7k|    }
_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_:
 1697|  4.42k|    {
 1698|  4.42k|        assert(offset_hint == index(idx));
 1699|  4.42k|        auto left_size = offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0;
  ------------------
  |  Branch (1699:26): [True: 3.70k, False: 720]
  ------------------
 1700|  4.42k|        return towards_sub_oh_sbh(v, idx, offset_hint, left_size, args...);
 1701|  4.42k|    }
_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_:
 1709|  4.42k|    {
 1710|  4.42k|        assert(offset_hint == index(idx));
 1711|      0|        assert(left_size_hint ==
 1712|  4.42k|               (offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0));
 1713|      0|        auto child     = node_->inner()[offset_hint];
 1714|  4.42k|        auto is_leaf   = shift_ == BL;
 1715|  4.42k|        auto next_size = relaxed_->d.sizes[offset_hint] - left_size_hint;
 1716|  4.42k|        auto next_idx  = idx - left_size_hint;
 1717|  4.42k|        return is_leaf
  ------------------
  |  Branch (1717:16): [True: 0, False: 4.42k]
  ------------------
 1718|  4.42k|                   ? make_leaf_sub_pos(child, next_size)
 1719|      0|                         .visit(v, next_idx, args...)
 1720|  4.42k|                   : visit_maybe_relaxed_sub(
 1721|  4.42k|                         child, shift_ - B, next_size, v, next_idx, args...);
 1722|  4.42k|    }
_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_:
 1697|  6.28k|    {
 1698|  6.28k|        assert(offset_hint == index(idx));
 1699|  6.28k|        auto left_size = offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0;
  ------------------
  |  Branch (1699:26): [True: 4.00k, False: 2.28k]
  ------------------
 1700|  6.28k|        return towards_sub_oh_sbh(v, idx, offset_hint, left_size, args...);
 1701|  6.28k|    }
_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_:
 1709|  6.28k|    {
 1710|  6.28k|        assert(offset_hint == index(idx));
 1711|      0|        assert(left_size_hint ==
 1712|  6.28k|               (offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0));
 1713|      0|        auto child     = node_->inner()[offset_hint];
 1714|  6.28k|        auto is_leaf   = shift_ == BL;
 1715|  6.28k|        auto next_size = relaxed_->d.sizes[offset_hint] - left_size_hint;
 1716|  6.28k|        auto next_idx  = idx - left_size_hint;
 1717|  6.28k|        return is_leaf
  ------------------
  |  Branch (1717:16): [True: 0, False: 6.28k]
  ------------------
 1718|  6.28k|                   ? make_leaf_sub_pos(child, next_size)
 1719|      0|                         .visit(v, next_idx, args...)
 1720|  6.28k|                   : visit_maybe_relaxed_sub(
 1721|  6.28k|                         child, shift_ - B, next_size, v, next_idx, args...);
 1722|  6.28k|    }
_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_:
 1830|  6.28k|{
 1831|  6.28k|    assert(node);
 1832|      0|    auto relaxed = node->relaxed();
 1833|  6.28k|    if (relaxed) {
  ------------------
  |  Branch (1833:9): [True: 4.41k, False: 1.86k]
  ------------------
 1834|  4.41k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
 1835|      0|        return make_relaxed_pos(node, shift, relaxed)
 1836|  4.41k|            .visit(v, std::forward<Args>(args)...);
 1837|  4.41k|    } else {
 1838|  1.86k|        return make_regular_sub_pos(node, shift, size)
 1839|  1.86k|            .visit(v, std::forward<Args>(args)...);
 1840|  1.86k|    }
 1841|  6.28k|}
_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_:
 1805|  4.41k|    {
 1806|  4.41k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1807|  4.41k|    }
_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_:
 1028|  1.86k|    {
 1029|  1.86k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1030|  1.86k|    }
_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_:
  938|  2.10k|    {
  939|  2.10k|        return towards_sub_oh_regular(*this, v, idx, offset_hint, args...);
  940|  2.10k|    }
_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_:
  651|  2.10k|{
  652|  2.10k|    constexpr auto B  = bits<Pos>;
  653|  2.10k|    constexpr auto BL = bits_leaf<Pos>;
  654|  2.10k|    assert(offset_hint == p.index(idx));
  655|      0|    auto is_leaf = p.shift() == BL;
  656|  2.10k|    auto child   = p.node()->inner()[offset_hint];
  657|  2.10k|    auto lsize   = offset_hint << p.shift();
  658|  2.10k|    auto size    = p.this_size();
  659|  2.10k|    auto is_full = (size - lsize) >= (size_t{1} << p.shift());
  660|  2.10k|    return is_full
  ------------------
  |  Branch (660:12): [True: 1.14k, False: 962]
  ------------------
  661|  2.10k|               ? (is_leaf
  ------------------
  |  Branch (661:19): [True: 0, False: 1.14k]
  ------------------
  662|  1.14k|                      ? make_full_leaf_pos(child).visit(v, idx - lsize, args...)
  663|  1.14k|                      : make_full_pos(child, p.shift() - B)
  664|  1.14k|                            .visit(v, idx - lsize, args...))
  665|  2.10k|               : (is_leaf
  ------------------
  |  Branch (665:19): [True: 0, False: 962]
  ------------------
  666|    962|                      ? make_leaf_sub_pos(child, size - lsize)
  667|      0|                            .visit(v, idx - lsize, args...)
  668|    962|                      : make_regular_sub_pos(child, p.shift() - B, size - lsize)
  669|    962|                            .visit(v, idx - lsize, args...));
  670|  2.10k|}
_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_:
 1397|  2.27k|    {
 1398|  2.27k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1399|  2.27k|    }
_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_:
 1340|  1.13k|    {
 1341|  1.13k|        assert(offset_hint == index(idx));
 1342|      0|        auto is_leaf = shift_ == BL;
 1343|  1.13k|        auto child   = node_->inner()[offset_hint];
 1344|  1.13k|        auto lsize   = size_t{offset_hint} << shift_;
 1345|  1.13k|        return is_leaf
  ------------------
  |  Branch (1345:16): [True: 0, False: 1.13k]
  ------------------
 1346|  1.13k|                   ? make_full_leaf_pos(child).visit(v, idx - lsize, args...)
 1347|  1.13k|                   : make_full_pos(child, shift_ - B)
 1348|  1.13k|                         .visit(v, idx - lsize, args...);
 1349|  1.13k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_16dec_left_visitorEJRjEEEDcT_DpOT0_:
 1397|    307|    {
 1398|    307|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1399|    307|    }
_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_:
 1340|  2.02k|    {
 1341|  2.02k|        assert(offset_hint == index(idx));
 1342|      0|        auto is_leaf = shift_ == BL;
 1343|  2.02k|        auto child   = node_->inner()[offset_hint];
 1344|  2.02k|        auto lsize   = size_t{offset_hint} << shift_;
 1345|  2.02k|        return is_leaf
  ------------------
  |  Branch (1345:16): [True: 1.27k, False: 745]
  ------------------
 1346|  2.02k|                   ? make_full_leaf_pos(child).visit(v, idx - lsize, args...)
 1347|  2.02k|                   : make_full_pos(child, shift_ - B)
 1348|    745|                         .visit(v, idx - lsize, args...);
 1349|  2.02k|    }
_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_:
  205|  3.32k|    {
  206|  3.32k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  207|  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_:
 1397|  2.11k|    {
 1398|  2.11k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1399|  2.11k|    }
_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_:
 1340|  7.05k|    {
 1341|  7.05k|        assert(offset_hint == index(idx));
 1342|      0|        auto is_leaf = shift_ == BL;
 1343|  7.05k|        auto child   = node_->inner()[offset_hint];
 1344|  7.05k|        auto lsize   = size_t{offset_hint} << shift_;
 1345|  7.05k|        return is_leaf
  ------------------
  |  Branch (1345:16): [True: 5.23k, False: 1.81k]
  ------------------
 1346|  7.05k|                   ? make_full_leaf_pos(child).visit(v, idx - lsize, args...)
 1347|  7.05k|                   : make_full_pos(child, shift_ - B)
 1348|  1.81k|                         .visit(v, idx - lsize, args...);
 1349|  7.05k|    }
_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_:
  205|  9.36k|    {
  206|  9.36k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  207|  9.36k|    }
_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_:
 1397|  3.61k|    {
 1398|  3.61k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1399|  3.61k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE9each_leftINS1_11dec_visitorEJEEEvT_jDpOT0_:
 1308|  2.32k|    {
 1309|  2.32k|        each_i(v, 0, last, args...);
 1310|  2.32k|    }
_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_:
 1028|    962|    {
 1029|    962|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1030|    962|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_16dec_left_visitorEJRjEEEDcT_DpOT0_:
 1028|  3.19k|    {
 1029|  3.19k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1030|  3.19k|    }
_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_:
  938|  3.41k|    {
  939|  3.41k|        return towards_sub_oh_regular(*this, v, idx, offset_hint, args...);
  940|  3.41k|    }
_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_:
  651|  3.41k|{
  652|  3.41k|    constexpr auto B  = bits<Pos>;
  653|  3.41k|    constexpr auto BL = bits_leaf<Pos>;
  654|  3.41k|    assert(offset_hint == p.index(idx));
  655|      0|    auto is_leaf = p.shift() == BL;
  656|  3.41k|    auto child   = p.node()->inner()[offset_hint];
  657|  3.41k|    auto lsize   = offset_hint << p.shift();
  658|  3.41k|    auto size    = p.this_size();
  659|  3.41k|    auto is_full = (size - lsize) >= (size_t{1} << p.shift());
  660|  3.41k|    return is_full
  ------------------
  |  Branch (660:12): [True: 3.41k, False: 0]
  ------------------
  661|  3.41k|               ? (is_leaf
  ------------------
  |  Branch (661:19): [True: 2.04k, False: 1.36k]
  ------------------
  662|  3.41k|                      ? make_full_leaf_pos(child).visit(v, idx - lsize, args...)
  663|  3.41k|                      : make_full_pos(child, p.shift() - B)
  664|  1.36k|                            .visit(v, idx - lsize, args...))
  665|  3.41k|               : (is_leaf
  ------------------
  |  Branch (665:19): [True: 0, False: 0]
  ------------------
  666|      0|                      ? make_leaf_sub_pos(child, size - lsize)
  667|      0|                            .visit(v, idx - lsize, args...)
  668|      0|                      : make_regular_sub_pos(child, p.shift() - B, size - lsize)
  669|      0|                            .visit(v, idx - lsize, args...));
  670|  3.41k|}
_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_:
  938|  5.92k|    {
  939|  5.92k|        return towards_sub_oh_regular(*this, v, idx, offset_hint, args...);
  940|  5.92k|    }
_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_:
  651|  5.92k|{
  652|  5.92k|    constexpr auto B  = bits<Pos>;
  653|  5.92k|    constexpr auto BL = bits_leaf<Pos>;
  654|  5.92k|    assert(offset_hint == p.index(idx));
  655|      0|    auto is_leaf = p.shift() == BL;
  656|  5.92k|    auto child   = p.node()->inner()[offset_hint];
  657|  5.92k|    auto lsize   = offset_hint << p.shift();
  658|  5.92k|    auto size    = p.this_size();
  659|  5.92k|    auto is_full = (size - lsize) >= (size_t{1} << p.shift());
  660|  5.92k|    return is_full
  ------------------
  |  Branch (660:12): [True: 5.92k, False: 0]
  ------------------
  661|  5.92k|               ? (is_leaf
  ------------------
  |  Branch (661:19): [True: 4.12k, False: 1.79k]
  ------------------
  662|  5.92k|                      ? make_full_leaf_pos(child).visit(v, idx - lsize, args...)
  663|  5.92k|                      : make_full_pos(child, p.shift() - B)
  664|  1.79k|                            .visit(v, idx - lsize, args...))
  665|  5.92k|               : (is_leaf
  ------------------
  |  Branch (665:19): [True: 0, False: 0]
  ------------------
  666|      0|                      ? make_leaf_sub_pos(child, size - lsize)
  667|      0|                            .visit(v, idx - lsize, args...)
  668|      0|                      : make_regular_sub_pos(child, p.shift() - B, size - lsize)
  669|      0|                            .visit(v, idx - lsize, args...));
  670|  5.92k|}
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE9each_leftINS1_11dec_visitorEJEEEvT_jDpOT0_:
  865|  6.60k|    {
  866|  6.60k|        return each_left_regular(*this, v, last, args...);
  867|  6.60k|    }
_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_:
  573|  6.60k|{
  574|  6.60k|    constexpr auto B  = bits<Pos>;
  575|  6.60k|    constexpr auto BL = bits_leaf<Pos>;
  576|  6.60k|    assert(last < p.count());
  577|  6.60k|    if (p.shift() == BL) {
  ------------------
  |  Branch (577:9): [True: 2.04k, False: 4.56k]
  ------------------
  578|  2.04k|        auto n = p.node()->inner();
  579|  2.04k|        auto e = n + last;
  580|  3.91k|        for (; n != e; ++n) {
  ------------------
  |  Branch (580:16): [True: 1.87k, False: 2.04k]
  ------------------
  581|  1.87k|            IMMER_PREFETCH(n + 1);
  582|  1.87k|            make_full_leaf_pos(*n).visit(v, args...);
  583|  1.87k|        }
  584|  4.56k|    } else {
  585|  4.56k|        auto n  = p.node()->inner();
  586|  4.56k|        auto e  = n + last;
  587|  4.56k|        auto ss = p.shift() - B;
  588|  6.00k|        for (; n != e; ++n)
  ------------------
  |  Branch (588:16): [True: 1.44k, False: 4.56k]
  ------------------
  589|  1.44k|            make_full_pos(*n, ss).visit(v, args...);
  590|  4.56k|    }
  591|  6.60k|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_16dec_left_visitorEJRjEEEDcT_DpOT0_:
 1805|  4.42k|    {
 1806|  4.42k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1807|  4.42k|    }
_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_:
 1697|   151k|    {
 1698|   151k|        assert(offset_hint == index(idx));
 1699|   151k|        auto left_size = offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0;
  ------------------
  |  Branch (1699:26): [True: 18.7k, False: 132k]
  ------------------
 1700|   151k|        return towards_sub_oh_sbh(v, idx, offset_hint, left_size, args...);
 1701|   151k|    }
_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_:
 1709|   151k|    {
 1710|   151k|        assert(offset_hint == index(idx));
 1711|      0|        assert(left_size_hint ==
 1712|   151k|               (offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0));
 1713|      0|        auto child     = node_->inner()[offset_hint];
 1714|   151k|        auto is_leaf   = shift_ == BL;
 1715|   151k|        auto next_size = relaxed_->d.sizes[offset_hint] - left_size_hint;
 1716|   151k|        auto next_idx  = idx - left_size_hint;
 1717|   151k|        return is_leaf
  ------------------
  |  Branch (1717:16): [True: 3.64k, False: 147k]
  ------------------
 1718|   151k|                   ? make_leaf_sub_pos(child, next_size)
 1719|  3.64k|                         .visit(v, next_idx, args...)
 1720|   151k|                   : visit_maybe_relaxed_sub(
 1721|   147k|                         child, shift_ - B, next_size, v, next_idx, args...);
 1722|   151k|    }
_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_:
  143|  3.64k|    {
  144|  3.64k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  145|  3.64k|    }
_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_:
 1830|   147k|{
 1831|   147k|    assert(node);
 1832|      0|    auto relaxed = node->relaxed();
 1833|   147k|    if (relaxed) {
  ------------------
  |  Branch (1833:9): [True: 146k, False: 1.47k]
  ------------------
 1834|   146k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
 1835|      0|        return make_relaxed_pos(node, shift, relaxed)
 1836|   146k|            .visit(v, std::forward<Args>(args)...);
 1837|   146k|    } else {
 1838|  1.47k|        return make_regular_sub_pos(node, shift, size)
 1839|  1.47k|            .visit(v, std::forward<Args>(args)...);
 1840|  1.47k|    }
 1841|   147k|}
_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_:
 1805|   146k|    {
 1806|   146k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1807|   146k|    }
_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_:
 1028|  1.47k|    {
 1029|  1.47k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1030|  1.47k|    }
_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_:
 1697|   116k|    {
 1698|   116k|        assert(offset_hint == index(idx));
 1699|   116k|        auto left_size = offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0;
  ------------------
  |  Branch (1699:26): [True: 44.6k, False: 71.4k]
  ------------------
 1700|   116k|        return towards_sub_oh_sbh(v, idx, offset_hint, left_size, args...);
 1701|   116k|    }
_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_:
 1709|   116k|    {
 1710|   116k|        assert(offset_hint == index(idx));
 1711|      0|        assert(left_size_hint ==
 1712|   116k|               (offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0));
 1713|      0|        auto child     = node_->inner()[offset_hint];
 1714|   116k|        auto is_leaf   = shift_ == BL;
 1715|   116k|        auto next_size = relaxed_->d.sizes[offset_hint] - left_size_hint;
 1716|   116k|        auto next_idx  = idx - left_size_hint;
 1717|   116k|        return is_leaf
  ------------------
  |  Branch (1717:16): [True: 22.3k, False: 93.7k]
  ------------------
 1718|   116k|                   ? make_leaf_sub_pos(child, next_size)
 1719|  22.3k|                         .visit(v, next_idx, args...)
 1720|   116k|                   : visit_maybe_relaxed_sub(
 1721|  93.7k|                         child, shift_ - B, next_size, v, next_idx, args...);
 1722|   116k|    }
_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_:
  143|  22.3k|    {
  144|  22.3k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  145|  22.3k|    }
_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_:
 1830|  93.7k|{
 1831|  93.7k|    assert(node);
 1832|      0|    auto relaxed = node->relaxed();
 1833|  93.7k|    if (relaxed) {
  ------------------
  |  Branch (1833:9): [True: 91.8k, False: 1.95k]
  ------------------
 1834|  91.8k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
 1835|      0|        return make_relaxed_pos(node, shift, relaxed)
 1836|  91.8k|            .visit(v, std::forward<Args>(args)...);
 1837|  91.8k|    } else {
 1838|  1.95k|        return make_regular_sub_pos(node, shift, size)
 1839|  1.95k|            .visit(v, std::forward<Args>(args)...);
 1840|  1.95k|    }
 1841|  93.7k|}
_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_:
 1805|  91.8k|    {
 1806|  91.8k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1807|  91.8k|    }
_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_:
 1028|  1.95k|    {
 1029|  1.95k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1030|  1.95k|    }
_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_:
 1028|  7.38k|    {
 1029|  7.38k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1030|  7.38k|    }
_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_:
  938|  3.19k|    {
  939|  3.19k|        return towards_sub_oh_regular(*this, v, idx, offset_hint, args...);
  940|  3.19k|    }
_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_:
  651|  3.19k|{
  652|  3.19k|    constexpr auto B  = bits<Pos>;
  653|  3.19k|    constexpr auto BL = bits_leaf<Pos>;
  654|  3.19k|    assert(offset_hint == p.index(idx));
  655|      0|    auto is_leaf = p.shift() == BL;
  656|  3.19k|    auto child   = p.node()->inner()[offset_hint];
  657|  3.19k|    auto lsize   = offset_hint << p.shift();
  658|  3.19k|    auto size    = p.this_size();
  659|  3.19k|    auto is_full = (size - lsize) >= (size_t{1} << p.shift());
  660|  3.19k|    return is_full
  ------------------
  |  Branch (660:12): [True: 2.20k, False: 988]
  ------------------
  661|  3.19k|               ? (is_leaf
  ------------------
  |  Branch (661:19): [True: 0, False: 2.20k]
  ------------------
  662|  2.20k|                      ? make_full_leaf_pos(child).visit(v, idx - lsize, args...)
  663|  2.20k|                      : make_full_pos(child, p.shift() - B)
  664|  2.20k|                            .visit(v, idx - lsize, args...))
  665|  3.19k|               : (is_leaf
  ------------------
  |  Branch (665:19): [True: 0, False: 988]
  ------------------
  666|    988|                      ? make_leaf_sub_pos(child, size - lsize)
  667|      0|                            .visit(v, idx - lsize, args...)
  668|    988|                      : make_regular_sub_pos(child, p.shift() - B, size - lsize)
  669|    988|                            .visit(v, idx - lsize, args...));
  670|  3.19k|}
_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_:
 1397|  2.51k|    {
 1398|  2.51k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1399|  2.51k|    }
_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_:
 1340|    307|    {
 1341|    307|        assert(offset_hint == index(idx));
 1342|      0|        auto is_leaf = shift_ == BL;
 1343|    307|        auto child   = node_->inner()[offset_hint];
 1344|    307|        auto lsize   = size_t{offset_hint} << shift_;
 1345|    307|        return is_leaf
  ------------------
  |  Branch (1345:16): [True: 0, False: 307]
  ------------------
 1346|    307|                   ? make_full_leaf_pos(child).visit(v, idx - lsize, args...)
 1347|    307|                   : make_full_pos(child, shift_ - B)
 1348|    307|                         .visit(v, idx - lsize, args...);
 1349|    307|    }
_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_:
 1028|    988|    {
 1029|    988|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1030|    988|    }
_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_:
 1830|  19.0k|{
 1831|  19.0k|    assert(node);
 1832|      0|    auto relaxed = node->relaxed();
 1833|  19.0k|    if (relaxed) {
  ------------------
  |  Branch (1833:9): [True: 10.0k, False: 8.99k]
  ------------------
 1834|  10.0k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
 1835|      0|        return make_relaxed_pos(node, shift, relaxed)
 1836|  10.0k|            .visit(v, std::forward<Args>(args)...);
 1837|  10.0k|    } else {
 1838|  8.99k|        return make_regular_sub_pos(node, shift, size)
 1839|  8.99k|            .visit(v, std::forward<Args>(args)...);
 1840|  8.99k|    }
 1841|  19.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_:
 1805|  10.0k|    {
 1806|  10.0k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1807|  10.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_:
 1830|  10.0k|{
 1831|  10.0k|    assert(node);
 1832|      0|    auto relaxed = node->relaxed();
 1833|  10.0k|    if (relaxed) {
  ------------------
  |  Branch (1833:9): [True: 6.72k, False: 3.33k]
  ------------------
 1834|  6.72k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
 1835|      0|        return make_relaxed_pos(node, shift, relaxed)
 1836|  6.72k|            .visit(v, std::forward<Args>(args)...);
 1837|  6.72k|    } else {
 1838|  3.33k|        return make_regular_sub_pos(node, shift, size)
 1839|  3.33k|            .visit(v, std::forward<Args>(args)...);
 1840|  3.33k|    }
 1841|  10.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_:
 1805|  6.72k|    {
 1806|  6.72k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1807|  6.72k|    }
_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_:
 1785|  34.8k|    {
 1786|  34.8k|        auto child      = node_->inner()[offset];
 1787|  34.8k|        auto child_size = size(offset);
 1788|  34.8k|        auto is_leaf    = shift_ == BL;
 1789|  34.8k|        return is_leaf ? make_leaf_sub_pos(child, child_size).visit(v, args...)
  ------------------
  |  Branch (1789:16): [True: 10.1k, False: 24.6k]
  ------------------
 1790|  34.8k|                       : visit_maybe_relaxed_sub(
 1791|  24.6k|                             child, shift_ - B, child_size, v, args...);
 1792|  34.8k|    }
_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_:
  143|  11.1k|    {
  144|  11.1k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  145|  11.1k|    }
_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_:
 1796|  11.1k|    {
 1797|  11.1k|        assert(shift_ == BL);
 1798|      0|        auto child      = node_->inner()[offset];
 1799|  11.1k|        auto child_size = size(offset);
 1800|  11.1k|        return make_leaf_sub_pos(child, child_size).visit(v, args...);
 1801|  11.1k|    }
_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_:
  143|  11.9k|    {
  144|  11.9k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  145|  11.9k|    }
_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_:
 1830|  24.6k|{
 1831|  24.6k|    assert(node);
 1832|      0|    auto relaxed = node->relaxed();
 1833|  24.6k|    if (relaxed) {
  ------------------
  |  Branch (1833:9): [True: 22.5k, False: 2.10k]
  ------------------
 1834|  22.5k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
 1835|      0|        return make_relaxed_pos(node, shift, relaxed)
 1836|  22.5k|            .visit(v, std::forward<Args>(args)...);
 1837|  22.5k|    } else {
 1838|  2.10k|        return make_regular_sub_pos(node, shift, size)
 1839|  2.10k|            .visit(v, std::forward<Args>(args)...);
 1840|  2.10k|    }
 1841|  24.6k|}
_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_:
 1805|  22.5k|    {
 1806|  22.5k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1807|  22.5k|    }
_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_:
 1785|  22.5k|    {
 1786|  22.5k|        auto child      = node_->inner()[offset];
 1787|  22.5k|        auto child_size = size(offset);
 1788|  22.5k|        auto is_leaf    = shift_ == BL;
 1789|  22.5k|        return is_leaf ? make_leaf_sub_pos(child, child_size).visit(v, args...)
  ------------------
  |  Branch (1789:16): [True: 0, False: 22.5k]
  ------------------
 1790|  22.5k|                       : visit_maybe_relaxed_sub(
 1791|  22.5k|                             child, shift_ - B, child_size, v, args...);
 1792|  22.5k|    }
_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_:
 1830|  22.5k|{
 1831|  22.5k|    assert(node);
 1832|      0|    auto relaxed = node->relaxed();
 1833|  22.5k|    if (relaxed) {
  ------------------
  |  Branch (1833:9): [True: 21.1k, False: 1.31k]
  ------------------
 1834|  21.1k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
 1835|      0|        return make_relaxed_pos(node, shift, relaxed)
 1836|  21.1k|            .visit(v, std::forward<Args>(args)...);
 1837|  21.1k|    } else {
 1838|  1.31k|        return make_regular_sub_pos(node, shift, size)
 1839|  1.31k|            .visit(v, std::forward<Args>(args)...);
 1840|  1.31k|    }
 1841|  22.5k|}
_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_:
 1805|  21.1k|    {
 1806|  21.1k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1807|  21.1k|    }
_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_:
 1028|  1.65k|    {
 1029|  1.65k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1030|  1.65k|    }
_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_:
 1785|  6.59k|    {
 1786|  6.59k|        auto child      = node_->inner()[offset];
 1787|  6.59k|        auto child_size = size(offset);
 1788|  6.59k|        auto is_leaf    = shift_ == BL;
 1789|  6.59k|        return is_leaf ? make_leaf_sub_pos(child, child_size).visit(v, args...)
  ------------------
  |  Branch (1789:16): [True: 3.79k, False: 2.79k]
  ------------------
 1790|  6.59k|                       : visit_maybe_relaxed_sub(
 1791|  2.79k|                             child, shift_ - B, child_size, v, args...);
 1792|  6.59k|    }
_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_:
  143|  3.79k|    {
  144|  3.79k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  145|  3.79k|    }
_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_:
 1017|  3.79k|    {
 1018|  3.79k|        assert(shift_ == BL);
 1019|      0|        auto child   = node_->inner()[idx];
 1020|  3.79k|        auto lsize   = size(idx);
 1021|  3.79k|        auto is_full = idx + 1 < count();
 1022|  3.79k|        return is_full ? make_full_leaf_pos(child).visit(v, args...)
  ------------------
  |  Branch (1022:16): [True: 3.02k, False: 768]
  ------------------
 1023|  3.79k|                       : make_leaf_sub_pos(child, lsize).visit(v, args...);
 1024|  3.79k|    }
_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_:
  205|  6.98k|    {
  206|  6.98k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  207|  6.98k|    }
_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_:
 1830|  2.79k|{
 1831|  2.79k|    assert(node);
 1832|      0|    auto relaxed = node->relaxed();
 1833|  2.79k|    if (relaxed) {
  ------------------
  |  Branch (1833:9): [True: 2.28k, False: 511]
  ------------------
 1834|  2.28k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
 1835|      0|        return make_relaxed_pos(node, shift, relaxed)
 1836|  2.28k|            .visit(v, std::forward<Args>(args)...);
 1837|  2.28k|    } else {
 1838|    511|        return make_regular_sub_pos(node, shift, size)
 1839|    511|            .visit(v, std::forward<Args>(args)...);
 1840|    511|    }
 1841|  2.79k|}
_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_:
 1805|  2.28k|    {
 1806|  2.28k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1807|  2.28k|    }
_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_:
  999|  2.28k|    {
 1000|  2.28k|        assert(idx < count());
 1001|      0|        auto is_leaf = shift_ == BL;
 1002|  2.28k|        auto child   = node_->inner()[idx];
 1003|  2.28k|        auto lsize   = size(idx);
 1004|  2.28k|        auto is_full = idx + 1 < count();
 1005|  2.28k|        return is_full
  ------------------
  |  Branch (1005:16): [True: 1.94k, False: 344]
  ------------------
 1006|  2.28k|                   ? (is_leaf
  ------------------
  |  Branch (1006:23): [True: 0, False: 1.94k]
  ------------------
 1007|  1.94k|                          ? make_full_leaf_pos(child).visit(v, args...)
 1008|  1.94k|                          : make_full_pos(child, shift_ - B).visit(v, args...))
 1009|  2.28k|                   : (is_leaf
  ------------------
  |  Branch (1009:23): [True: 0, False: 344]
  ------------------
 1010|    344|                          ? make_leaf_sub_pos(child, lsize).visit(v, args...)
 1011|    344|                          : make_regular_sub_pos(child, shift_ - B, lsize)
 1012|    344|                                .visit(v, args...));
 1013|  2.28k|    }
_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_:
 1397|  3.31k|    {
 1398|  3.31k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1399|  3.31k|    }
_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_:
 1785|  6.54k|    {
 1786|  6.54k|        auto child      = node_->inner()[offset];
 1787|  6.54k|        auto child_size = size(offset);
 1788|  6.54k|        auto is_leaf    = shift_ == BL;
 1789|  6.54k|        return is_leaf ? make_leaf_sub_pos(child, child_size).visit(v, args...)
  ------------------
  |  Branch (1789:16): [True: 3.96k, False: 2.58k]
  ------------------
 1790|  6.54k|                       : visit_maybe_relaxed_sub(
 1791|  2.58k|                             child, shift_ - B, child_size, v, args...);
 1792|  6.54k|    }
_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_:
  143|  3.96k|    {
  144|  3.96k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  145|  3.96k|    }
_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_:
 1388|  3.96k|    {
 1389|  3.96k|        assert(shift_ == BL);
 1390|      0|        assert(idx < count());
 1391|      0|        auto child = node_->inner()[idx];
 1392|  3.96k|        return make_full_leaf_pos(child).visit(v, args...);
 1393|  3.96k|    }
_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_:
 1830|  2.58k|{
 1831|  2.58k|    assert(node);
 1832|      0|    auto relaxed = node->relaxed();
 1833|  2.58k|    if (relaxed) {
  ------------------
  |  Branch (1833:9): [True: 1.37k, False: 1.20k]
  ------------------
 1834|  1.37k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
 1835|      0|        return make_relaxed_pos(node, shift, relaxed)
 1836|  1.37k|            .visit(v, std::forward<Args>(args)...);
 1837|  1.37k|    } else {
 1838|  1.20k|        return make_regular_sub_pos(node, shift, size)
 1839|  1.20k|            .visit(v, std::forward<Args>(args)...);
 1840|  1.20k|    }
 1841|  2.58k|}
_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_:
 1805|  1.37k|    {
 1806|  1.37k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1807|  1.37k|    }
_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_:
 1378|  1.37k|    {
 1379|  1.37k|        assert(idx < count());
 1380|      0|        auto is_leaf = shift_ == BL;
 1381|  1.37k|        auto child   = node_->inner()[idx];
 1382|  1.37k|        return is_leaf ? make_full_leaf_pos(child).visit(v, args...)
  ------------------
  |  Branch (1382:16): [True: 0, False: 1.37k]
  ------------------
 1383|  1.37k|                       : make_full_pos(child, shift_ - B).visit(v, args...);
 1384|  1.37k|    }
_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_:
 1028|  1.20k|    {
 1029|  1.20k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1030|  1.20k|    }
_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_:
 1378|  1.20k|    {
 1379|  1.20k|        assert(idx < count());
 1380|      0|        auto is_leaf = shift_ == BL;
 1381|  1.20k|        auto child   = node_->inner()[idx];
 1382|  1.20k|        return is_leaf ? make_full_leaf_pos(child).visit(v, args...)
  ------------------
  |  Branch (1382:16): [True: 0, False: 1.20k]
  ------------------
 1383|  1.20k|                       : make_full_pos(child, shift_ - B).visit(v, args...);
 1384|  1.20k|    }
_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_:
 1397|  1.71k|    {
 1398|  1.71k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1399|  1.71k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE13each_pred_zipINS1_14equals_visitorEJEEEbT_PSC_DpOT0_:
 1214|  3.78k|    {
 1215|  3.78k|        auto p  = node_->inner();
 1216|  3.78k|        auto p2 = other->inner();
 1217|  3.78k|        auto e  = p + branches<B>;
 1218|  3.78k|        if (shift_ == BL) {
  ------------------
  |  Branch (1218:13): [True: 3.05k, False: 729]
  ------------------
 1219|  11.4k|            for (; p != e; ++p, ++p2) {
  ------------------
  |  Branch (1219:20): [True: 9.86k, False: 1.60k]
  ------------------
 1220|  9.86k|                IMMER_PREFETCH(p + 1);
 1221|  9.86k|                if (!make_full_leaf_pos(*p).visit(v, *p2, args...))
  ------------------
  |  Branch (1221:21): [True: 1.45k, False: 8.41k]
  ------------------
 1222|  1.45k|                    return false;
 1223|  9.86k|            }
 1224|  3.05k|        } else {
 1225|    729|            auto ss = shift_ - B;
 1226|  2.32k|            for (; p != e; ++p, ++p2)
  ------------------
  |  Branch (1226:20): [True: 1.99k, False: 332]
  ------------------
 1227|  1.99k|                if (!make_full_pos(*p, ss).visit(v, *p2, args...))
  ------------------
  |  Branch (1227:21): [True: 397, False: 1.59k]
  ------------------
 1228|    397|                    return false;
 1229|    729|        }
 1230|  1.93k|        return true;
 1231|  3.78k|    }
_ZN5immer6detail4rbts13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_14equals_visitorEJRPSC_EEEDcT_DpOT0_:
  205|  15.0k|    {
  206|  15.0k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  207|  15.0k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_14equals_visitorEJRPSC_EEEDcT_DpOT0_:
 1397|  8.59k|    {
 1398|  8.59k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1399|  8.59k|    }
_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_:
  829|  7.04k|    {
  830|  7.04k|        return each_pred_zip_regular(*this, v, other, args...);
  831|  7.04k|    }
_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_:
  390|  7.04k|{
  391|  7.04k|    constexpr auto B  = bits<Pos>;
  392|  7.04k|    constexpr auto BL = bits_leaf<Pos>;
  393|       |
  394|  7.04k|    auto n    = p.node()->inner();
  395|  7.04k|    auto n2   = other->inner();
  396|  7.04k|    auto last = p.count() - 1;
  397|  7.04k|    auto e    = n + last;
  398|  7.04k|    if (p.shift() == BL) {
  ------------------
  |  Branch (398:9): [True: 2.07k, False: 4.96k]
  ------------------
  399|  4.63k|        for (; n != e; ++n, ++n2) {
  ------------------
  |  Branch (399:16): [True: 3.13k, False: 1.50k]
  ------------------
  400|  3.13k|            IMMER_PREFETCH(n + 1);
  401|  3.13k|            IMMER_PREFETCH(n2 + 1);
  402|  3.13k|            if (!make_full_leaf_pos(*n).visit(v, *n2, args...))
  ------------------
  |  Branch (402:17): [True: 576, False: 2.55k]
  ------------------
  403|    576|                return false;
  404|  3.13k|        }
  405|  1.50k|        return make_leaf_pos(*n, p.size()).visit(v, *n2, args...);
  406|  4.96k|    } else {
  407|  4.96k|        auto ss = p.shift() - B;
  408|  9.34k|        for (; n != e; ++n, ++n2)
  ------------------
  |  Branch (408:16): [True: 5.40k, False: 3.94k]
  ------------------
  409|  5.40k|            if (!make_full_pos(*n, ss).visit(v, *n2, args...))
  ------------------
  |  Branch (409:17): [True: 1.02k, False: 4.37k]
  ------------------
  410|  1.02k|                return false;
  411|  3.94k|        return make_regular_pos(*n, ss, p.size()).visit(v, *n2, args...);
  412|  4.96k|    }
  413|  7.04k|}
_ZN5immer6detail4rbts8leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_14equals_visitorEJRPSC_EEEDcT_DpOT0_:
  111|  3.74k|    {
  112|  3.74k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  113|  3.74k|    }
_ZN5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_14equals_visitorEJRPSC_EEEDcT_DpOT0_:
  334|  4.91k|    {
  335|  4.91k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
  336|  4.91k|    }
_ZN5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE13each_pred_zipINS1_14equals_visitorEJEEEbT_PSC_DpOT0_:
  253|  4.30k|    {
  254|  4.30k|        return each_pred_zip_regular(*this, v, other, args...);
  255|  4.30k|    }
_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_:
  390|  4.30k|{
  391|  4.30k|    constexpr auto B  = bits<Pos>;
  392|  4.30k|    constexpr auto BL = bits_leaf<Pos>;
  393|       |
  394|  4.30k|    auto n    = p.node()->inner();
  395|  4.30k|    auto n2   = other->inner();
  396|  4.30k|    auto last = p.count() - 1;
  397|  4.30k|    auto e    = n + last;
  398|  4.30k|    if (p.shift() == BL) {
  ------------------
  |  Branch (398:9): [True: 3.12k, False: 1.17k]
  ------------------
  399|  4.33k|        for (; n != e; ++n, ++n2) {
  ------------------
  |  Branch (399:16): [True: 2.09k, False: 2.24k]
  ------------------
  400|  2.09k|            IMMER_PREFETCH(n + 1);
  401|  2.09k|            IMMER_PREFETCH(n2 + 1);
  402|  2.09k|            if (!make_full_leaf_pos(*n).visit(v, *n2, args...))
  ------------------
  |  Branch (402:17): [True: 888, False: 1.20k]
  ------------------
  403|    888|                return false;
  404|  2.09k|        }
  405|  2.24k|        return make_leaf_pos(*n, p.size()).visit(v, *n2, args...);
  406|  3.12k|    } else {
  407|  1.17k|        auto ss = p.shift() - B;
  408|  2.17k|        for (; n != e; ++n, ++n2)
  ------------------
  |  Branch (408:16): [True: 1.20k, False: 976]
  ------------------
  409|  1.20k|            if (!make_full_pos(*n, ss).visit(v, *n2, args...))
  ------------------
  |  Branch (409:17): [True: 200, False: 1.00k]
  ------------------
  410|    200|                return false;
  411|    976|        return make_regular_pos(*n, ss, p.size()).visit(v, *n2, args...);
  412|  1.17k|    }
  413|  4.30k|}
_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_:
 1378|  4.80k|    {
 1379|  4.80k|        assert(idx < count());
 1380|      0|        auto is_leaf = shift_ == BL;
 1381|  4.80k|        auto child   = node_->inner()[idx];
 1382|  4.80k|        return is_leaf ? make_full_leaf_pos(child).visit(v, args...)
  ------------------
  |  Branch (1382:16): [True: 2.72k, False: 2.07k]
  ------------------
 1383|  4.80k|                       : make_full_pos(child, shift_ - B).visit(v, args...);
 1384|  4.80k|    }
_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_:
  205|   655k|    {
  206|   655k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  207|   655k|    }
_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_:
 1830|  10.6M|{
 1831|  10.6M|    assert(node);
 1832|      0|    auto relaxed = node->relaxed();
 1833|  10.6M|    if (relaxed) {
  ------------------
  |  Branch (1833:9): [True: 9.98M, False: 682k]
  ------------------
 1834|  9.98M|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
 1835|      0|        return make_relaxed_pos(node, shift, relaxed)
 1836|  9.98M|            .visit(v, std::forward<Args>(args)...);
 1837|  9.98M|    } else {
 1838|   682k|        return make_regular_sub_pos(node, shift, size)
 1839|   682k|            .visit(v, std::forward<Args>(args)...);
 1840|   682k|    }
 1841|  10.6M|}
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_18region_for_visitorIiEEJRmEEEDcT_DpOT0_:
 1805|  9.98M|    {
 1806|  9.98M|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1807|  9.98M|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE7towardsINS1_18region_for_visitorIiEEJEEEDcT_mDpOT0_:
 1671|  9.98M|    {
 1672|  9.98M|        return towards_oh(v, idx, subindex(idx), args...);
 1673|  9.98M|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10towards_ohINS1_18region_for_visitorIiEEJEEEDcT_mjDpOT0_:
 1678|  9.98M|    {
 1679|  9.98M|        assert(offset_hint == index(idx));
 1680|  9.98M|        auto left_size = offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0;
  ------------------
  |  Branch (1680:26): [True: 5.79M, False: 4.19M]
  ------------------
 1681|  9.98M|        return towards_oh_sbh(v, idx, offset_hint, left_size, args...);
 1682|  9.98M|    }
_ZN5immer6detail4rbts11relaxed_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE14towards_oh_sbhINS1_18region_for_visitorIiEEJEEEDcT_mjmDpOT0_:
 1690|  9.98M|    {
 1691|  9.98M|        return towards_sub_oh_sbh(v, idx, offset_hint, left_size_hint, args...);
 1692|  9.98M|    }
_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_:
 1709|  9.98M|    {
 1710|  9.98M|        assert(offset_hint == index(idx));
 1711|      0|        assert(left_size_hint ==
 1712|  9.98M|               (offset_hint ? relaxed_->d.sizes[offset_hint - 1] : 0));
 1713|      0|        auto child     = node_->inner()[offset_hint];
 1714|  9.98M|        auto is_leaf   = shift_ == BL;
 1715|  9.98M|        auto next_size = relaxed_->d.sizes[offset_hint] - left_size_hint;
 1716|  9.98M|        auto next_idx  = idx - left_size_hint;
 1717|  9.98M|        return is_leaf
  ------------------
  |  Branch (1717:16): [True: 1.11M, False: 8.87M]
  ------------------
 1718|  9.98M|                   ? make_leaf_sub_pos(child, next_size)
 1719|  1.11M|                         .visit(v, next_idx, args...)
 1720|  9.98M|                   : visit_maybe_relaxed_sub(
 1721|  8.87M|                         child, shift_ - B, next_size, v, next_idx, args...);
 1722|  9.98M|    }
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_18region_for_visitorIiEEJRmEEEDcT_DpOT0_:
  143|  1.11M|    {
  144|  1.11M|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  145|  1.11M|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_18region_for_visitorIiEEJRmEEEDcT_DpOT0_:
 1028|   682k|    {
 1029|   682k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1030|   682k|    }
_ZN5immer6detail4rbts15regular_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE7towardsINS1_18region_for_visitorIiEEJEEEDcT_mDpOT0_:
  911|   682k|    {
  912|   682k|        return towards_oh_ch_regular(
  913|   682k|            *this, v, idx, index(idx), count(), args...);
  914|   682k|    }
_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_:
  630|   682k|{
  631|   682k|    constexpr auto B  = bits<Pos>;
  632|   682k|    constexpr auto BL = bits_leaf<Pos>;
  633|   682k|    assert(offset_hint == p.index(idx));
  634|      0|    assert(count_hint == p.count());
  635|      0|    auto is_leaf = p.shift() == BL;
  636|   682k|    auto child   = p.node()->inner()[offset_hint];
  637|   682k|    auto is_full = offset_hint + 1 != count_hint;
  638|   682k|    return is_full
  ------------------
  |  Branch (638:12): [True: 524k, False: 157k]
  ------------------
  639|   682k|               ? (is_leaf ? make_full_leaf_pos(child).visit(v, idx, args...)
  ------------------
  |  Branch (639:19): [True: 33.5k, False: 491k]
  ------------------
  640|   524k|                          : make_full_pos(child, p.shift() - B)
  641|   491k|                                .visit(v, idx, args...))
  642|   682k|               : (is_leaf
  ------------------
  |  Branch (642:19): [True: 13.6k, False: 143k]
  ------------------
  643|   157k|                      ? make_leaf_pos(child, p.size()).visit(v, idx, args...)
  644|   157k|                      : make_regular_pos(child, p.shift() - B, p.size())
  645|   143k|                            .visit(v, idx, args...));
  646|   682k|}
_ZN5immer6detail4rbts13full_leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_18region_for_visitorIiEEJRmEEEDcT_DpOT0_:
  205|   660k|    {
  206|   660k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  207|   660k|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_18region_for_visitorIiEEJRmEEEDcT_DpOT0_:
 1397|  1.99M|    {
 1398|  1.99M|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1399|  1.99M|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE7towardsINS1_18region_for_visitorIiEEJEEEDcT_mDpOT0_:
 1314|  1.99M|    {
 1315|  1.99M|        return towards_oh(v, idx, index(idx), args...);
 1316|  1.99M|    }
_ZN5immer6detail4rbts8full_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE10towards_ohINS1_18region_for_visitorIiEEJEEEDcT_mjDpOT0_:
 1328|  1.99M|    {
 1329|  1.99M|        assert(offset_hint == index(idx));
 1330|      0|        auto is_leaf = shift_ == BL;
 1331|  1.99M|        auto child   = node_->inner()[offset_hint];
 1332|  1.99M|        return is_leaf
  ------------------
  |  Branch (1332:16): [True: 612k, False: 1.37M]
  ------------------
 1333|  1.99M|                   ? make_full_leaf_pos(child).visit(v, idx, args...)
 1334|  1.99M|                   : make_full_pos(child, shift_ - B).visit(v, idx, args...);
 1335|  1.99M|    }
_ZN5immer6detail4rbts8leaf_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_18region_for_visitorIiEEJRmEEEDcT_DpOT0_:
  111|  22.0k|    {
  112|  22.0k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  113|  22.0k|    }
_ZN5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_18region_for_visitorIiEEJRmEEEDcT_DpOT0_:
  334|   188k|    {
  335|   188k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
  336|   188k|    }
_ZN5immer6detail4rbts11regular_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE7towardsINS1_18region_for_visitorIiEEJEEEDcT_mDpOT0_:
  295|   188k|    {
  296|   188k|        return towards_oh_ch_regular(
  297|   188k|            *this, v, idx, index(idx), count(), args...);
  298|   188k|    }
_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_:
  630|   188k|{
  631|   188k|    constexpr auto B  = bits<Pos>;
  632|   188k|    constexpr auto BL = bits_leaf<Pos>;
  633|   188k|    assert(offset_hint == p.index(idx));
  634|      0|    assert(count_hint == p.count());
  635|      0|    auto is_leaf = p.shift() == BL;
  636|   188k|    auto child   = p.node()->inner()[offset_hint];
  637|   188k|    auto is_full = offset_hint + 1 != count_hint;
  638|   188k|    return is_full
  ------------------
  |  Branch (638:12): [True: 135k, False: 53.0k]
  ------------------
  639|   188k|               ? (is_leaf ? make_full_leaf_pos(child).visit(v, idx, args...)
  ------------------
  |  Branch (639:19): [True: 14.4k, False: 121k]
  ------------------
  640|   135k|                          : make_full_pos(child, p.shift() - B)
  641|   121k|                                .visit(v, idx, args...))
  642|   188k|               : (is_leaf
  ------------------
  |  Branch (642:19): [True: 8.40k, False: 44.5k]
  ------------------
  643|  53.0k|                      ? make_leaf_pos(child, p.size()).visit(v, idx, args...)
  644|  53.0k|                      : make_regular_pos(child, p.shift() - B, p.size())
  645|  44.5k|                            .visit(v, idx, args...));
  646|   188k|}
_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_:
 1397|   197k|    {
 1398|   197k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1399|   197k|    }
_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_:
 1194|   197k|    {
 1195|   197k|        auto p = node_->inner();
 1196|   197k|        auto e = p + branches<B>;
 1197|   197k|        if (shift_ == BL) {
  ------------------
  |  Branch (1197:13): [True: 153k, False: 43.6k]
  ------------------
 1198|   765k|            for (; p != e; ++p) {
  ------------------
  |  Branch (1198:20): [True: 613k, False: 152k]
  ------------------
 1199|   613k|                IMMER_PREFETCH(p + 1);
 1200|   613k|                if (!make_full_leaf_pos(*p).visit(v, args...))
  ------------------
  |  Branch (1200:21): [True: 904, False: 612k]
  ------------------
 1201|    904|                    return false;
 1202|   613k|            }
 1203|   153k|        } else {
 1204|  43.6k|            auto ss = shift_ - B;
 1205|   216k|            for (; p != e; ++p)
  ------------------
  |  Branch (1205:20): [True: 173k, False: 42.8k]
  ------------------
 1206|   173k|                if (!make_full_pos(*p, ss).visit(v, args...))
  ------------------
  |  Branch (1206:21): [True: 778, False: 172k]
  ------------------
 1207|    778|                    return false;
 1208|  43.6k|        }
 1209|   195k|        return true;
 1210|   197k|    }
_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_:
 1028|    511|    {
 1029|    511|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1030|    511|    }
_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_:
  999|    511|    {
 1000|    511|        assert(idx < count());
 1001|      0|        auto is_leaf = shift_ == BL;
 1002|    511|        auto child   = node_->inner()[idx];
 1003|    511|        auto lsize   = size(idx);
 1004|    511|        auto is_full = idx + 1 < count();
 1005|    511|        return is_full
  ------------------
  |  Branch (1005:16): [True: 511, False: 0]
  ------------------
 1006|    511|                   ? (is_leaf
  ------------------
  |  Branch (1006:23): [True: 0, False: 511]
  ------------------
 1007|    511|                          ? make_full_leaf_pos(child).visit(v, args...)
 1008|    511|                          : make_full_pos(child, shift_ - B).visit(v, args...))
 1009|    511|                   : (is_leaf
  ------------------
  |  Branch (1009:23): [True: 0, False: 0]
  ------------------
 1010|      0|                          ? make_leaf_sub_pos(child, lsize).visit(v, args...)
 1011|      0|                          : make_regular_sub_pos(child, shift_ - B, lsize)
 1012|      0|                                .visit(v, args...));
 1013|    511|    }
_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_:
 1028|  1.42k|    {
 1029|  1.42k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1030|  1.42k|    }
_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_:
  999|  4.48k|    {
 1000|  4.48k|        assert(idx < count());
 1001|      0|        auto is_leaf = shift_ == BL;
 1002|  4.48k|        auto child   = node_->inner()[idx];
 1003|  4.48k|        auto lsize   = size(idx);
 1004|  4.48k|        auto is_full = idx + 1 < count();
 1005|  4.48k|        return is_full
  ------------------
  |  Branch (1005:16): [True: 1.73k, False: 2.75k]
  ------------------
 1006|  4.48k|                   ? (is_leaf
  ------------------
  |  Branch (1006:23): [True: 1.12k, False: 614]
  ------------------
 1007|  1.73k|                          ? make_full_leaf_pos(child).visit(v, args...)
 1008|  1.73k|                          : make_full_pos(child, shift_ - B).visit(v, args...))
 1009|  4.48k|                   : (is_leaf
  ------------------
  |  Branch (1009:23): [True: 1.43k, False: 1.31k]
  ------------------
 1010|  2.75k|                          ? make_leaf_sub_pos(child, lsize).visit(v, args...)
 1011|  2.75k|                          : make_regular_sub_pos(child, shift_ - B, lsize)
 1012|  1.31k|                                .visit(v, args...));
 1013|  4.48k|    }
_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_:
  143|  1.09M|    {
  144|  1.09M|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  145|  1.09M|    }
_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_:
 1028|  16.7k|    {
 1029|  16.7k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1030|  16.7k|    }
_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_:
  823|  16.7k|    {
  824|  16.7k|        return each_pred_regular(*this, v, args...);
  825|  16.7k|    }
_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_:
  363|  16.7k|{
  364|  16.7k|    constexpr auto B  = bits<Pos>;
  365|  16.7k|    constexpr auto BL = bits_leaf<Pos>;
  366|  16.7k|    auto n            = p.node()->inner();
  367|  16.7k|    auto last         = p.count() - 1;
  368|  16.7k|    auto e            = n + last;
  369|  16.7k|    if (p.shift() == BL) {
  ------------------
  |  Branch (369:9): [True: 10.4k, False: 6.27k]
  ------------------
  370|  37.1k|        for (; n != e; ++n) {
  ------------------
  |  Branch (370:16): [True: 26.9k, False: 10.2k]
  ------------------
  371|  26.9k|            IMMER_PREFETCH(n + 1);
  372|  26.9k|            if (!make_full_leaf_pos(*n).visit(v, args...))
  ------------------
  |  Branch (372:17): [True: 209, False: 26.7k]
  ------------------
  373|    209|                return false;
  374|  26.9k|        }
  375|  10.2k|        return make_leaf_pos(*n, p.size()).visit(v, args...);
  376|  10.4k|    } else {
  377|  6.27k|        auto ss = p.shift() - B;
  378|  17.7k|        for (; n != e; ++n)
  ------------------
  |  Branch (378:16): [True: 12.0k, False: 5.65k]
  ------------------
  379|  12.0k|            if (!make_full_pos(*n, ss).visit(v, args...))
  ------------------
  |  Branch (379:17): [True: 619, False: 11.4k]
  ------------------
  380|    619|                return false;
  381|  5.65k|        return make_regular_pos(*n, ss, p.size()).visit(v, args...);
  382|  6.27k|    }
  383|  16.7k|}
_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_:
  111|  15.4k|    {
  112|  15.4k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  113|  15.4k|    }
_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_:
  334|  9.43k|    {
  335|  9.43k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
  336|  9.43k|    }
_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_:
  247|  9.43k|    {
  248|  9.43k|        return each_pred_regular(*this, v, args...);
  249|  9.43k|    }
_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_:
  363|  9.43k|{
  364|  9.43k|    constexpr auto B  = bits<Pos>;
  365|  9.43k|    constexpr auto BL = bits_leaf<Pos>;
  366|  9.43k|    auto n            = p.node()->inner();
  367|  9.43k|    auto last         = p.count() - 1;
  368|  9.43k|    auto e            = n + last;
  369|  9.43k|    if (p.shift() == BL) {
  ------------------
  |  Branch (369:9): [True: 5.45k, False: 3.98k]
  ------------------
  370|  17.0k|        for (; n != e; ++n) {
  ------------------
  |  Branch (370:16): [True: 11.7k, False: 5.26k]
  ------------------
  371|  11.7k|            IMMER_PREFETCH(n + 1);
  372|  11.7k|            if (!make_full_leaf_pos(*n).visit(v, args...))
  ------------------
  |  Branch (372:17): [True: 194, False: 11.5k]
  ------------------
  373|    194|                return false;
  374|  11.7k|        }
  375|  5.26k|        return make_leaf_pos(*n, p.size()).visit(v, args...);
  376|  5.45k|    } else {
  377|  3.98k|        auto ss = p.shift() - B;
  378|  12.6k|        for (; n != e; ++n)
  ------------------
  |  Branch (378:16): [True: 8.82k, False: 3.78k]
  ------------------
  379|  8.82k|            if (!make_full_pos(*n, ss).visit(v, args...))
  ------------------
  |  Branch (379:17): [True: 201, False: 8.62k]
  ------------------
  380|    201|                return false;
  381|  3.78k|        return make_regular_pos(*n, ss, p.size()).visit(v, args...);
  382|  3.98k|    }
  383|  9.43k|}
_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_:
 1028|  2.10k|    {
 1029|  2.10k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1030|  2.10k|    }
_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_:
 1785|  2.10k|    {
 1786|  2.10k|        auto child      = node_->inner()[offset];
 1787|  2.10k|        auto child_size = size(offset);
 1788|  2.10k|        auto is_leaf    = shift_ == BL;
 1789|  2.10k|        return is_leaf ? make_leaf_sub_pos(child, child_size).visit(v, args...)
  ------------------
  |  Branch (1789:16): [True: 0, False: 2.10k]
  ------------------
 1790|  2.10k|                       : visit_maybe_relaxed_sub(
 1791|  2.10k|                             child, shift_ - B, child_size, v, args...);
 1792|  2.10k|    }
_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_:
 1830|  2.10k|{
 1831|  2.10k|    assert(node);
 1832|      0|    auto relaxed = node->relaxed();
 1833|  2.10k|    if (relaxed) {
  ------------------
  |  Branch (1833:9): [True: 682, False: 1.42k]
  ------------------
 1834|    682|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
 1835|      0|        return make_relaxed_pos(node, shift, relaxed)
 1836|    682|            .visit(v, std::forward<Args>(args)...);
 1837|  1.42k|    } else {
 1838|  1.42k|        return make_regular_sub_pos(node, shift, size)
 1839|  1.42k|            .visit(v, std::forward<Args>(args)...);
 1840|  1.42k|    }
 1841|  2.10k|}
_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_:
 1805|    682|    {
 1806|    682|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1807|    682|    }
_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_:
  999|  4.67k|    {
 1000|  4.67k|        assert(idx < count());
 1001|      0|        auto is_leaf = shift_ == BL;
 1002|  4.67k|        auto child   = node_->inner()[idx];
 1003|  4.67k|        auto lsize   = size(idx);
 1004|  4.67k|        auto is_full = idx + 1 < count();
 1005|  4.67k|        return is_full
  ------------------
  |  Branch (1005:16): [True: 3.72k, False: 952]
  ------------------
 1006|  4.67k|                   ? (is_leaf
  ------------------
  |  Branch (1006:23): [True: 2.01k, False: 1.70k]
  ------------------
 1007|  3.72k|                          ? make_full_leaf_pos(child).visit(v, args...)
 1008|  3.72k|                          : make_full_pos(child, shift_ - B).visit(v, args...))
 1009|  4.67k|                   : (is_leaf
  ------------------
  |  Branch (1009:23): [True: 952, False: 0]
  ------------------
 1010|    952|                          ? make_leaf_sub_pos(child, lsize).visit(v, args...)
 1011|    952|                          : make_regular_sub_pos(child, shift_ - B, lsize)
 1012|      0|                                .visit(v, args...));
 1013|  4.67k|    }
_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_:
  205|  4.78k|    {
  206|  4.78k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  207|  4.78k|    }
_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_:
 1796|  4.78k|    {
 1797|  4.78k|        assert(shift_ == BL);
 1798|      0|        auto child      = node_->inner()[offset];
 1799|  4.78k|        auto child_size = size(offset);
 1800|  4.78k|        return make_leaf_sub_pos(child, child_size).visit(v, args...);
 1801|  4.78k|    }
_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_:
  143|  4.78k|    {
  144|  4.78k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  145|  4.78k|    }
_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_:
 1397|  2.83k|    {
 1398|  2.83k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1399|  2.83k|    }
_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_:
 1785|  2.83k|    {
 1786|  2.83k|        auto child      = node_->inner()[offset];
 1787|  2.83k|        auto child_size = size(offset);
 1788|  2.83k|        auto is_leaf    = shift_ == BL;
 1789|  2.83k|        return is_leaf ? make_leaf_sub_pos(child, child_size).visit(v, args...)
  ------------------
  |  Branch (1789:16): [True: 0, False: 2.83k]
  ------------------
 1790|  2.83k|                       : visit_maybe_relaxed_sub(
 1791|  2.83k|                             child, shift_ - B, child_size, v, args...);
 1792|  2.83k|    }
_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_:
 1830|  2.83k|{
 1831|  2.83k|    assert(node);
 1832|      0|    auto relaxed = node->relaxed();
 1833|  2.83k|    if (relaxed) {
  ------------------
  |  Branch (1833:9): [True: 1.85k, False: 981]
  ------------------
 1834|  1.85k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
 1835|      0|        return make_relaxed_pos(node, shift, relaxed)
 1836|  1.85k|            .visit(v, std::forward<Args>(args)...);
 1837|  1.85k|    } else {
 1838|    981|        return make_regular_sub_pos(node, shift, size)
 1839|    981|            .visit(v, std::forward<Args>(args)...);
 1840|    981|    }
 1841|  2.83k|}
_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_:
 1805|  1.85k|    {
 1806|  1.85k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1807|  1.85k|    }
_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_:
 1378|  3.89k|    {
 1379|  3.89k|        assert(idx < count());
 1380|      0|        auto is_leaf = shift_ == BL;
 1381|  3.89k|        auto child   = node_->inner()[idx];
 1382|  3.89k|        return is_leaf ? make_full_leaf_pos(child).visit(v, args...)
  ------------------
  |  Branch (1382:16): [True: 2.76k, False: 1.12k]
  ------------------
 1383|  3.89k|                       : make_full_pos(child, shift_ - B).visit(v, args...);
 1384|  3.89k|    }
_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_:
 1028|    981|    {
 1029|    981|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1030|    981|    }
_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_:
 1785|  31.5k|    {
 1786|  31.5k|        auto child      = node_->inner()[offset];
 1787|  31.5k|        auto child_size = size(offset);
 1788|  31.5k|        auto is_leaf    = shift_ == BL;
 1789|  31.5k|        return is_leaf ? make_leaf_sub_pos(child, child_size).visit(v, args...)
  ------------------
  |  Branch (1789:16): [True: 11.0k, False: 20.4k]
  ------------------
 1790|  31.5k|                       : visit_maybe_relaxed_sub(
 1791|  20.4k|                             child, shift_ - B, child_size, v, args...);
 1792|  31.5k|    }
_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_:
 1830|   571k|{
 1831|   571k|    assert(node);
 1832|      0|    auto relaxed = node->relaxed();
 1833|   571k|    if (relaxed) {
  ------------------
  |  Branch (1833:9): [True: 556k, False: 15.4k]
  ------------------
 1834|   556k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
 1835|      0|        return make_relaxed_pos(node, shift, relaxed)
 1836|   556k|            .visit(v, std::forward<Args>(args)...);
 1837|   556k|    } else {
 1838|  15.4k|        return make_regular_sub_pos(node, shift, size)
 1839|  15.4k|            .visit(v, std::forward<Args>(args)...);
 1840|  15.4k|    }
 1841|   571k|}
_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_:
 1805|   556k|    {
 1806|   556k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1807|   556k|    }
_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_:
 1474|   556k|    {
 1475|   556k|        auto p = node_->inner();
 1476|   556k|        auto s = size_t{};
 1477|   556k|        auto n = count();
 1478|   556k|        if (shift_ == BL) {
  ------------------
  |  Branch (1478:13): [True: 309k, False: 247k]
  ------------------
 1479|  1.38M|            for (auto i = count_t{0}; i < n; ++i) {
  ------------------
  |  Branch (1479:39): [True: 1.07M, False: 308k]
  ------------------
 1480|  1.07M|                IMMER_PREFETCH(p + i + 1);
 1481|  1.07M|                if (!make_leaf_sub_pos(p[i], relaxed_->d.sizes[i] - s)
  ------------------
  |  Branch (1481:21): [True: 862, False: 1.07M]
  ------------------
 1482|  1.07M|                         .visit(v, args...))
 1483|    862|                    return false;
 1484|  1.07M|                s = relaxed_->d.sizes[i];
 1485|  1.07M|            }
 1486|   309k|        } else {
 1487|   247k|            auto ss = shift_ - B;
 1488|   796k|            for (auto i = count_t{0}; i < n; ++i) {
  ------------------
  |  Branch (1488:39): [True: 551k, False: 245k]
  ------------------
 1489|   551k|                if (!visit_maybe_relaxed_sub(
  ------------------
  |  Branch (1489:21): [True: 1.88k, False: 549k]
  ------------------
 1490|   551k|                        p[i], ss, relaxed_->d.sizes[i] - s, v, args...))
 1491|  1.88k|                    return false;
 1492|   549k|                s = relaxed_->d.sizes[i];
 1493|   549k|            }
 1494|   247k|        }
 1495|   553k|        return true;
 1496|   556k|    }
_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_:
 1028|  3.33k|    {
 1029|  3.33k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1030|  3.33k|    }
_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_:
 1775|  1.47k|    {
 1776|  1.47k|        assert(shift_ > BL);
 1777|      0|        auto child      = node_->inner()[0];
 1778|  1.47k|        auto child_size = relaxed_->d.sizes[0];
 1779|  1.47k|        return visit_maybe_relaxed_sub(
 1780|  1.47k|            child, shift_ - B, child_size, v, args...);
 1781|  1.47k|    }
_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_:
 1830|  1.47k|{
 1831|  1.47k|    assert(node);
 1832|      0|    auto relaxed = node->relaxed();
 1833|  1.47k|    if (relaxed) {
  ------------------
  |  Branch (1833:9): [True: 1.47k, False: 0]
  ------------------
 1834|  1.47k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
 1835|      0|        return make_relaxed_pos(node, shift, relaxed)
 1836|  1.47k|            .visit(v, std::forward<Args>(args)...);
 1837|  1.47k|    } else {
 1838|      0|        return make_regular_sub_pos(node, shift, size)
 1839|      0|            .visit(v, std::forward<Args>(args)...);
 1840|      0|    }
 1841|  1.47k|}
_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_:
 1805|  1.47k|    {
 1806|  1.47k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1807|  1.47k|    }
_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_:
 1830|  8.99k|{
 1831|  8.99k|    assert(node);
 1832|      0|    auto relaxed = node->relaxed();
 1833|  8.99k|    if (relaxed) {
  ------------------
  |  Branch (1833:9): [True: 2.53k, False: 6.46k]
  ------------------
 1834|  2.53k|        assert(size == relaxed->d.sizes[relaxed->d.count - 1]);
 1835|      0|        return make_relaxed_pos(node, shift, relaxed)
 1836|  2.53k|            .visit(v, std::forward<Args>(args)...);
 1837|  6.46k|    } else {
 1838|  6.46k|        return make_regular_sub_pos(node, shift, size)
 1839|  6.46k|            .visit(v, std::forward<Args>(args)...);
 1840|  6.46k|    }
 1841|  8.99k|}
_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_:
 1805|  2.53k|    {
 1806|  2.53k|        return Visitor::visit_relaxed(*this, std::forward<Args>(args)...);
 1807|  2.53k|    }
_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_:
 1028|  6.46k|    {
 1029|  6.46k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1030|  6.46k|    }
_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_:
 1028|  8.99k|    {
 1029|  8.99k|        return Visitor::visit_regular(*this, std::forward<Args>(args)...);
 1030|  8.99k|    }
_ZN5immer6detail4rbts12leaf_sub_posINS1_4nodeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEE5visitINS1_14equals_visitorEJRKPSC_EEEDcT_DpOT0_:
  143|  5.26k|    {
  144|  5.26k|        return Visitor::visit_leaf(*this, std::forward<Args>(args)...);
  145|  5.26k|    }

_ZN5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEC2Ev:
  106|  1.70M|    {
  107|  1.70M|        assert(check_tree());
  108|  1.70M|    }
_ZN5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE10empty_rootEv:
   51|  1.72M|    {
   52|  1.72M|        static const auto empty_ = []{
   53|  1.72M|            constexpr auto size = node_t::sizeof_inner_n(0);
   54|  1.72M|            static std::aligned_storage_t<size, alignof(std::max_align_t)> storage;
   55|  1.72M|            return node_t::make_inner_n_into(&storage, size, 0u);
   56|  1.72M|        }();
   57|  1.72M|        return empty_->inc();
   58|  1.72M|    }
_ZZN5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE10empty_rootEvENKUlvE_clEv:
   52|      1|        static const auto empty_ = []{
   53|      1|            constexpr auto size = node_t::sizeof_inner_n(0);
   54|      1|            static std::aligned_storage_t<size, alignof(std::max_align_t)> storage;
   55|      1|            return node_t::make_inner_n_into(&storage, size, 0u);
   56|      1|        }();
_ZN5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE10empty_tailEv:
   61|  1.70M|    {
   62|  1.70M|        static const auto empty_ = []{
   63|  1.70M|            constexpr auto size = node_t::sizeof_leaf_n(0);
   64|  1.70M|            static std::aligned_storage_t<size, alignof(std::max_align_t)> storage;
   65|  1.70M|            return node_t::make_leaf_n_into(&storage, size, 0u);
   66|  1.70M|        }();
   67|  1.70M|        return empty_->inc();
   68|  1.70M|    }
_ZZN5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE10empty_tailEvENKUlvE_clEv:
   62|      1|        static const auto empty_ = []{
   63|      1|            constexpr auto size = node_t::sizeof_leaf_n(0);
   64|      1|            static std::aligned_storage_t<size, alignof(std::max_align_t)> storage;
   65|      1|            return node_t::make_leaf_n_into(&storage, size, 0u);
   66|      1|        }();
_ZNK5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE10check_treeEv:
 1341|  3.58M|    {
 1342|  3.58M|        assert(shift <= sizeof(size_t) * 8 - BL);
 1343|      0|        assert(shift >= BL);
 1344|      0|        assert(tail_offset() <= size);
 1345|      0|        assert(tail_size() <= branches<BL>);
 1346|       |#if IMMER_DEBUG_DEEP_CHECK
 1347|       |        assert(check_root());
 1348|       |        assert(check_tail());
 1349|       |#endif
 1350|      0|        return true;
 1351|  3.58M|    }
_ZNK5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE11tail_offsetEv:
  166|  18.4M|    {
  167|  18.4M|        auto r = root->relaxed();
  168|  18.4M|        assert(r == nullptr || r->d.count);
  169|  18.4M|        return r      ? r->d.sizes[r->d.count - 1]
  ------------------
  |  Branch (169:16): [True: 9.38M, False: 9.03M]
  ------------------
  170|  18.4M|               : size ? (size - 1) & ~mask<BL>
  ------------------
  |  Branch (170:18): [True: 3.90M, False: 5.13M]
  ------------------
  171|       |                      /* otherwise */
  172|  9.03M|                      : 0;
  173|  18.4M|    }
_ZNK5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE9tail_sizeEv:
  163|  3.88M|    auto tail_size() const { return size - tail_offset(); }
_ZN5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EED2Ev:
  153|  3.58M|    ~rrbtree() { dec(); }
_ZNK5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE3decEv:
  161|  3.58M|    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_:
  177|  3.58M|    {
  178|  3.58M|        auto tail_off  = tail_offset();
  179|  3.58M|        auto tail_size = size - tail_off;
  180|       |
  181|  3.58M|        if (tail_off)
  ------------------
  |  Branch (181:13): [True: 1.73M, False: 1.84M]
  ------------------
  182|  1.73M|            visit_maybe_relaxed_sub(root, shift, tail_off, v, args...);
  183|  1.84M|        else
  184|  1.84M|            make_empty_regular_pos(root).visit(v, args...);
  185|       |
  186|  3.58M|        if (tail_size)
  ------------------
  |  Branch (186:13): [True: 1.87M, False: 1.70M]
  ------------------
  187|  1.87M|            make_leaf_sub_pos(tail, tail_size).visit(v, args...);
  188|  1.70M|        else
  189|  1.70M|            make_empty_leaf_pos(tail).visit(v, args...);
  190|  3.58M|    }
_ZNK5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE9push_backEi:
  469|   261k|    {
  470|   261k|        auto ts = tail_size();
  471|   261k|        if (ts < branches<BL>) {
  ------------------
  |  Branch (471:13): [True: 190k, False: 71.3k]
  ------------------
  472|   190k|            auto new_tail =
  473|   190k|                node_t::copy_leaf_emplace(tail, ts, std::move(value));
  474|   190k|            return {size + 1, shift, root->inc(), new_tail};
  475|   190k|        } else {
  476|  71.3k|            using std::get;
  477|  71.3k|            auto new_tail = node_t::make_leaf_n(1u, std::move(value));
  478|  71.3k|            auto tail_off = tail_offset();
  479|  71.3k|            IMMER_TRY {
  ------------------
  |  |   41|  71.3k|#define IMMER_TRY try
  ------------------
  480|  71.3k|                auto new_root =
  481|  71.3k|                    push_tail(root, shift, tail_off, tail, size - tail_off);
  482|  71.3k|                tail->inc();
  483|  71.3k|                return {size + 1, get<0>(new_root), get<1>(new_root), new_tail};
  484|  71.3k|            }
  485|  71.3k|            IMMER_CATCH (...) {
  486|      0|                node_t::delete_leaf(new_tail, 1u);
  487|      0|                IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
  488|      0|            }
  489|  71.3k|        }
  490|   261k|    }
_ZN5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEC2EmjPNS1_4nodeIiSA_Lj2ELj2EEESE_:
  115|  1.87M|    {
  116|  1.87M|        assert(check_tree());
  117|  1.87M|    }
_ZNK5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE9push_tailEPNS1_4nodeIiSA_Lj2ELj2EEEjmSE_j:
  338|   643k|    {
  339|   643k|        if (auto r = root->relaxed()) {
  ------------------
  |  Branch (339:18): [True: 280k, False: 363k]
  ------------------
  340|   280k|            auto new_root =
  341|   280k|                make_relaxed_pos(root, shift, r)
  342|   280k|                    .visit(push_tail_visitor<node_t>{}, tail, tail_size);
  343|   280k|            if (new_root)
  ------------------
  |  Branch (343:17): [True: 277k, False: 2.56k]
  ------------------
  344|   277k|                return std::make_tuple(shift, new_root);
  345|  2.56k|            else {
  346|  2.56k|                auto new_root = node_t::make_inner_r_n(2);
  347|  2.56k|                IMMER_TRY {
  ------------------
  |  |   41|  2.56k|#define IMMER_TRY try
  ------------------
  348|  2.56k|                    auto new_path        = node_t::make_path(shift, tail);
  349|  2.56k|                    new_root->inner()[0] = root->inc();
  350|  2.56k|                    new_root->inner()[1] = new_path;
  351|  2.56k|                    new_root->relaxed()->d.sizes[0] = size;
  352|  2.56k|                    new_root->relaxed()->d.sizes[1] = size + tail_size;
  353|  2.56k|                    assert(size);
  354|      0|                    assert(tail_size);
  355|      0|                    new_root->relaxed()->d.count = 2u;
  356|  2.56k|                }
  357|  2.56k|                IMMER_CATCH (...) {
  358|      0|                    node_t::delete_inner_r(new_root, 2);
  359|      0|                    IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
  360|      0|                }
  361|  2.56k|                return std::make_tuple(shift + B, new_root);
  362|  2.56k|            }
  363|   363k|        } else if (size == size_t{branches<B>} << shift) {
  ------------------
  |  Branch (363:20): [True: 5.49k, False: 358k]
  ------------------
  364|  5.49k|            auto new_root = node_t::make_inner_n(2);
  365|  5.49k|            IMMER_TRY {
  ------------------
  |  |   41|  5.49k|#define IMMER_TRY try
  ------------------
  366|  5.49k|                auto new_path        = node_t::make_path(shift, tail);
  367|  5.49k|                new_root->inner()[0] = root->inc();
  368|  5.49k|                new_root->inner()[1] = new_path;
  369|  5.49k|            }
  370|  5.49k|            IMMER_CATCH (...) {
  371|      0|                node_t::delete_inner(new_root, 2);
  372|      0|                IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
  373|      0|            }
  374|  5.49k|            return std::make_tuple(shift + B, new_root);
  375|   358k|        } else if (size) {
  ------------------
  |  Branch (375:20): [True: 345k, False: 12.4k]
  ------------------
  376|   345k|            auto new_root = make_regular_sub_pos(root, shift, size)
  377|   345k|                                .visit(push_tail_visitor<node_t>{}, tail);
  378|   345k|            return std::make_tuple(shift, new_root);
  379|   345k|        } else {
  380|  12.4k|            return std::make_tuple(shift, node_t::make_path(shift, tail));
  381|  12.4k|        }
  382|   643k|    }
_ZN5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEC2EOSB_:
  127|  1.61M|    {
  128|  1.61M|        swap(*this, other);
  129|  1.61M|    }
_ZN5immer6detail4rbts4swapERNS1_7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEESC_:
  145|  4.21M|    {
  146|  4.21M|        using std::swap;
  147|  4.21M|        swap(x.size, y.size);
  148|  4.21M|        swap(x.shift, y.shift);
  149|  4.21M|        swap(x.root, y.root);
  150|  4.21M|        swap(x.tail, y.tail);
  151|  4.21M|    }
_ZN5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEaSEOSB_:
  139|  2.60M|    {
  140|  2.60M|        swap(*this, other);
  141|  2.60M|        return *this;
  142|  2.60M|    }
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_:
  549|   273k|    {
  550|   273k|        auto tail_off = tail_offset();
  551|   273k|        if (idx >= tail_off) {
  ------------------
  |  Branch (551:13): [True: 90.7k, False: 182k]
  ------------------
  552|  90.7k|            auto tail_size = size - tail_off;
  553|  90.7k|            auto new_tail =
  554|  90.7k|                make_leaf_sub_pos(tail, tail_size)
  555|  90.7k|                    .visit(update_visitor<node_t>{}, idx - tail_off, fn);
  556|  90.7k|            return {size, shift, root->inc(), new_tail};
  557|   182k|        } else {
  558|   182k|            auto new_root = visit_maybe_relaxed_sub(
  559|   182k|                root, shift, tail_off, update_visitor<node_t>{}, idx, fn);
  560|   182k|            return {size, shift, new_root, tail->inc()};
  561|   182k|        }
  562|   273k|    }
_ZNK5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE4takeEm:
  616|  27.5k|    {
  617|  27.5k|        auto tail_off = tail_offset();
  618|  27.5k|        if (new_size == 0) {
  ------------------
  |  Branch (618:13): [True: 4.49k, False: 23.0k]
  ------------------
  619|  4.49k|            return {};
  620|  23.0k|        } else if (new_size >= size) {
  ------------------
  |  Branch (620:20): [True: 1.36k, False: 21.7k]
  ------------------
  621|  1.36k|            return *this;
  622|  21.7k|        } else if (new_size > tail_off) {
  ------------------
  |  Branch (622:20): [True: 1.53k, False: 20.1k]
  ------------------
  623|  1.53k|            auto new_tail = node_t::copy_leaf(tail, new_size - tail_off);
  624|  1.53k|            return {new_size, shift, root->inc(), new_tail};
  625|  20.1k|        } else {
  626|  20.1k|            using std::get;
  627|  20.1k|            auto l = new_size - 1;
  628|  20.1k|            auto v = slice_right_visitor<node_t>();
  629|  20.1k|            auto r = visit_maybe_relaxed_sub(root, shift, tail_off, v, l);
  630|  20.1k|            auto new_shift = get<0>(r);
  631|  20.1k|            auto new_root  = get<1>(r);
  632|  20.1k|            auto new_tail  = get<3>(r);
  633|  20.1k|            if (new_root) {
  ------------------
  |  Branch (633:17): [True: 15.8k, False: 4.30k]
  ------------------
  634|  15.8k|                IMMER_ASSERT_TAGGED(new_root->compute_shift() == get<0>(r));
  ------------------
  |  |   60|  15.8k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  635|      0|                assert(new_root->check(new_shift, new_size - get<2>(r)));
  636|      0|                return {new_size, new_shift, new_root, new_tail};
  637|  15.8k|            } else {
  638|  4.30k|                return {new_size, BL, empty_root(), new_tail};
  639|  4.30k|            }
  640|  20.1k|        }
  641|  27.5k|    }
_ZN5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEC2ERKSB_:
  121|  11.9k|    {
  122|  11.9k|        inc();
  123|  11.9k|    }
_ZNK5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE3incEv:
  156|  11.9k|    {
  157|  11.9k|        root->inc();
  158|  11.9k|        tail->inc();
  159|  11.9k|    }
_ZNK5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE4dropEm:
  680|  29.6k|    {
  681|  29.6k|        if (elems == 0) {
  ------------------
  |  Branch (681:13): [True: 2.92k, False: 26.7k]
  ------------------
  682|  2.92k|            return *this;
  683|  26.7k|        } else if (elems >= size) {
  ------------------
  |  Branch (683:20): [True: 2.63k, False: 24.1k]
  ------------------
  684|  2.63k|            return {};
  685|  24.1k|        } else if (elems == tail_offset()) {
  ------------------
  |  Branch (685:20): [True: 2.68k, False: 21.4k]
  ------------------
  686|  2.68k|            return {size - elems, BL, empty_root(), tail->inc()};
  687|  21.4k|        } else if (elems > tail_offset()) {
  ------------------
  |  Branch (687:20): [True: 1.63k, False: 19.8k]
  ------------------
  688|  1.63k|            auto tail_off = tail_offset();
  689|  1.63k|            auto new_tail =
  690|  1.63k|                node_t::copy_leaf(tail, elems - tail_off, size - tail_off);
  691|  1.63k|            return {size - elems, BL, empty_root(), new_tail};
  692|  19.8k|        } else {
  693|  19.8k|            using std::get;
  694|  19.8k|            auto v = slice_left_visitor<node_t>();
  695|  19.8k|            auto r =
  696|  19.8k|                visit_maybe_relaxed_sub(root, shift, tail_offset(), v, elems);
  697|  19.8k|            auto new_root  = get<1>(r);
  698|  19.8k|            auto new_shift = get<0>(r);
  699|  19.8k|            return {size - elems, new_shift, new_root, tail->inc()};
  700|  19.8k|        }
  701|  29.6k|    }
_ZN5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE8max_sizeEv:
   44|  2.66M|    {
   45|  2.66M|        auto S = sizeof(size_t) * 8;
   46|  2.66M|        return ((size_t{1} << BL) - std::min(size_t{BL}, size_t{2})) *
   47|  2.66M|               ipow((size_t{1} << B) - 2, (S - BL) / B);
   48|  2.66M|    }
_ZNK5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE6concatERKSB_:
  704|   990k|    {
  705|   990k|        assert(r.size + size <= max_size());
  706|      0|        using std::get;
  707|   990k|        if (size == 0)
  ------------------
  |  Branch (707:13): [True: 3.19k, False: 987k]
  ------------------
  708|  3.19k|            return r;
  709|   987k|        else if (r.size == 0)
  ------------------
  |  Branch (709:18): [True: 1.92k, False: 985k]
  ------------------
  710|  1.92k|            return *this;
  711|   985k|        else if (r.tail_offset() == 0) {
  ------------------
  |  Branch (711:18): [True: 588k, False: 396k]
  ------------------
  712|       |            // just concat the tail, similar to push_back
  713|   588k|            auto tail_offst = tail_offset();
  714|   588k|            auto tail_size  = size - tail_offst;
  715|   588k|            if (tail_size == branches<BL>) {
  ------------------
  |  Branch (715:17): [True: 167k, False: 421k]
  ------------------
  716|   167k|                auto new_root =
  717|   167k|                    push_tail(root, shift, tail_offst, tail, tail_size);
  718|   167k|                tail->inc();
  719|   167k|                return {size + r.size,
  720|   167k|                        get<0>(new_root),
  721|   167k|                        get<1>(new_root),
  722|   167k|                        r.tail->inc()};
  723|   421k|            } else if (tail_size + r.size <= branches<BL>) {
  ------------------
  |  Branch (723:24): [True: 16.4k, False: 404k]
  ------------------
  724|  16.4k|                auto new_tail =
  725|  16.4k|                    node_t::copy_leaf(tail, tail_size, r.tail, r.size);
  726|  16.4k|                return {size + r.size, shift, root->inc(), new_tail};
  727|   404k|            } else {
  728|   404k|                auto remaining = branches<BL> - tail_size;
  729|   404k|                auto add_tail =
  730|   404k|                    node_t::copy_leaf(tail, tail_size, r.tail, remaining);
  731|   404k|                IMMER_TRY {
  ------------------
  |  |   41|   404k|#define IMMER_TRY try
  ------------------
  732|   404k|                    auto new_tail =
  733|   404k|                        node_t::copy_leaf(r.tail, remaining, r.size);
  734|   404k|                    IMMER_TRY {
  ------------------
  |  |   41|   404k|#define IMMER_TRY try
  ------------------
  735|   404k|                        auto new_root = push_tail(
  736|   404k|                            root, shift, tail_offst, add_tail, branches<BL>);
  737|   404k|                        return {size + r.size,
  738|   404k|                                get<0>(new_root),
  739|   404k|                                get<1>(new_root),
  740|   404k|                                new_tail};
  741|   404k|                    }
  742|   404k|                    IMMER_CATCH (...) {
  743|      0|                        node_t::delete_leaf(new_tail, r.size - remaining);
  744|      0|                        IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
  745|      0|                    }
  746|   404k|                }
  747|   404k|                IMMER_CATCH (...) {
  748|      0|                    node_t::delete_leaf(add_tail, branches<BL>);
  749|      0|                    IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
  750|      0|                }
  751|   404k|            }
  752|   588k|        } else if (tail_offset() == 0) {
  ------------------
  |  Branch (752:20): [True: 4.91k, False: 392k]
  ------------------
  753|  4.91k|            auto tail_offst = tail_offset();
  754|  4.91k|            auto tail_size  = size - tail_offst;
  755|  4.91k|            auto concated =
  756|  4.91k|                concat_trees(tail, tail_size, r.root, r.shift, r.tail_offset());
  757|  4.91k|            auto new_shift = concated.shift();
  758|  4.91k|            auto new_root  = concated.node();
  759|  4.91k|            IMMER_ASSERT_TAGGED(new_shift == new_root->compute_shift());
  ------------------
  |  |   60|  4.91k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  760|      0|            assert(new_root->check(new_shift, size + r.tail_offset()));
  761|      0|            return {size + r.size, new_shift, new_root, r.tail->inc()};
  762|   392k|        } else {
  763|   392k|            auto tail_offst = tail_offset();
  764|   392k|            auto tail_size  = size - tail_offst;
  765|   392k|            auto concated   = concat_trees(root,
  766|   392k|                                         shift,
  767|   392k|                                         tail_offst,
  768|   392k|                                         tail,
  769|   392k|                                         tail_size,
  770|   392k|                                         r.root,
  771|   392k|                                         r.shift,
  772|   392k|                                         r.tail_offset());
  773|   392k|            auto new_shift  = concated.shift();
  774|   392k|            auto new_root   = concated.node();
  775|   392k|            IMMER_ASSERT_TAGGED(new_shift == new_root->compute_shift());
  ------------------
  |  |   60|   392k|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  776|      0|            assert(new_root->check(new_shift, size + r.tail_offset()));
  777|      0|            return {size + r.size, new_shift, new_root, r.tail->inc()};
  778|   392k|        }
  779|   990k|    }
_ZN5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE13push_back_mutENS9_5applyIS6_E4type4editEi:
  447|  34.0k|    {
  448|  34.0k|        auto ts = tail_size();
  449|  34.0k|        if (ts < branches<BL>) {
  ------------------
  |  Branch (449:13): [True: 20.4k, False: 13.6k]
  ------------------
  450|  20.4k|            ensure_mutable_tail(e, ts);
  451|  20.4k|            new (&tail->leaf()[ts]) T{std::move(value)};
  452|  20.4k|        } else {
  453|  13.6k|            using std::get;
  454|  13.6k|            auto new_tail = node_t::make_leaf_e(e, std::move(value));
  455|  13.6k|            auto tail_off = tail_offset();
  456|  13.6k|            IMMER_TRY {
  ------------------
  |  |   41|  13.6k|#define IMMER_TRY try
  ------------------
  457|  13.6k|                push_tail_mut(e, tail_off, tail, ts);
  458|  13.6k|                tail = new_tail;
  459|  13.6k|            }
  460|  13.6k|            IMMER_CATCH (...) {
  461|      0|                node_t::delete_leaf(new_tail, 1u);
  462|      0|                IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
  463|      0|            }
  464|  13.6k|        }
  465|  34.0k|        ++size;
  466|  34.0k|    }
_ZN5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE19ensure_mutable_tailENS9_5applyIS6_E4type4editEj:
  438|   231k|    {
  439|   231k|        if (!tail->can_mutate(e)) {
  ------------------
  |  Branch (439:13): [True: 10.0k, False: 221k]
  ------------------
  440|  10.0k|            auto new_tail = node_t::copy_leaf_e(e, tail, n);
  441|  10.0k|            dec_leaf(tail, n);
  442|  10.0k|            tail = new_tail;
  443|  10.0k|        }
  444|   231k|    }
_ZN5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE13push_tail_mutENS9_5applyIS6_E4type4editEmPNS1_4nodeIiSA_Lj2ELj2EEEj:
  386|   289k|    {
  387|   289k|        if (auto r = root->relaxed()) {
  ------------------
  |  Branch (387:18): [True: 44.6k, False: 244k]
  ------------------
  388|  44.6k|            auto new_root =
  389|  44.6k|                make_relaxed_pos(root, shift, r)
  390|  44.6k|                    .visit(push_tail_mut_visitor<node_t>{}, e, tail, tail_size);
  391|  44.6k|            if (new_root) {
  ------------------
  |  Branch (391:17): [True: 43.4k, False: 1.22k]
  ------------------
  392|  43.4k|                root = new_root;
  393|  43.4k|            } else {
  394|  1.22k|                auto new_root = node_t::make_inner_r_e(e);
  395|  1.22k|                IMMER_TRY {
  ------------------
  |  |   41|  1.22k|#define IMMER_TRY try
  ------------------
  396|  1.22k|                    auto new_path        = node_t::make_path_e(e, shift, tail);
  397|  1.22k|                    new_root->inner()[0] = root;
  398|  1.22k|                    new_root->inner()[1] = new_path;
  399|  1.22k|                    new_root->relaxed()->d.sizes[0] = tail_off;
  400|  1.22k|                    new_root->relaxed()->d.sizes[1] = tail_off + tail_size;
  401|  1.22k|                    assert(tail_off);
  402|      0|                    assert(tail_size);
  403|      0|                    new_root->relaxed()->d.count = 2u;
  404|  1.22k|                    root                         = new_root;
  405|  1.22k|                    shift += B;
  406|  1.22k|                }
  407|  1.22k|                IMMER_CATCH (...) {
  408|      0|                    node_t::delete_inner_r_e(new_root);
  409|      0|                    IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
  410|      0|                }
  411|  1.22k|            }
  412|   244k|        } else if (tail_off == size_t{branches<B>} << shift) {
  ------------------
  |  Branch (412:20): [True: 2.77k, False: 241k]
  ------------------
  413|  2.77k|            auto new_root = node_t::make_inner_e(e);
  414|  2.77k|            IMMER_TRY {
  ------------------
  |  |   41|  2.77k|#define IMMER_TRY try
  ------------------
  415|  2.77k|                auto new_path        = node_t::make_path_e(e, shift, tail);
  416|  2.77k|                new_root->inner()[0] = root;
  417|  2.77k|                new_root->inner()[1] = new_path;
  418|  2.77k|                root                 = new_root;
  419|  2.77k|                shift += B;
  420|  2.77k|            }
  421|  2.77k|            IMMER_CATCH (...) {
  422|      0|                node_t::delete_inner_e(new_root);
  423|      0|                IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
  424|      0|            }
  425|   241k|        } else if (tail_off) {
  ------------------
  |  Branch (425:20): [True: 238k, False: 2.70k]
  ------------------
  426|   238k|            auto new_root =
  427|   238k|                make_regular_sub_pos(root, shift, tail_off)
  428|   238k|                    .visit(push_tail_mut_visitor<node_t>{}, e, tail);
  429|   238k|            root = new_root;
  430|   238k|        } else {
  431|  2.70k|            auto new_root = node_t::make_path_e(e, shift, tail);
  432|  2.70k|            dec_empty_regular(root);
  433|  2.70k|            root = new_root;
  434|  2.70k|        }
  435|   289k|    }
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_:
  542|  65.4k|    {
  543|  65.4k|        auto& elem = get_mut(e, idx);
  544|  65.4k|        elem       = std::forward<FnT>(fn)(std::move(elem));
  545|  65.4k|    }
_ZN5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE7get_mutENS9_5applyIS6_E4type4editEm:
  508|  65.4k|    {
  509|  65.4k|        auto tail_off = tail_offset();
  510|  65.4k|        if (idx >= tail_off) {
  ------------------
  |  Branch (510:13): [True: 33.4k, False: 31.9k]
  ------------------
  511|  33.4k|            ensure_mutable_tail(e, size - tail_off);
  512|  33.4k|            return tail->leaf()[(idx - tail_off) & mask<BL>];
  513|  33.4k|        } else {
  514|  31.9k|            return visit_maybe_relaxed_sub(root,
  515|  31.9k|                                           shift,
  516|  31.9k|                                           tail_off,
  517|  31.9k|                                           get_mut_visitor<node_t>{},
  518|  31.9k|                                           idx,
  519|  31.9k|                                           e,
  520|  31.9k|                                           &root);
  521|  31.9k|        }
  522|  65.4k|    }
_ZN5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE8take_mutENS9_5applyIS6_E4type4editEm:
  575|  43.6k|    {
  576|  43.6k|        auto tail_off = tail_offset();
  577|  43.6k|        if (new_size == 0) {
  ------------------
  |  Branch (577:13): [True: 943, False: 42.6k]
  ------------------
  578|    943|            *this = {};
  579|  42.6k|        } else if (new_size >= size) {
  ------------------
  |  Branch (579:20): [True: 1.50k, False: 41.1k]
  ------------------
  580|  1.50k|            return;
  581|  41.1k|        } else if (new_size > tail_off) {
  ------------------
  |  Branch (581:20): [True: 811, False: 40.3k]
  ------------------
  582|    811|            auto ts    = size - tail_off;
  583|    811|            auto newts = new_size - tail_off;
  584|    811|            if (tail->can_mutate(e)) {
  ------------------
  |  Branch (584:17): [True: 549, False: 262]
  ------------------
  585|    549|                detail::destroy_n(tail->leaf() + newts, ts - newts);
  586|    549|            } else {
  587|    262|                auto new_tail = node_t::copy_leaf_e(e, tail, newts);
  588|    262|                dec_leaf(tail, ts);
  589|    262|                tail = new_tail;
  590|    262|            }
  591|    811|            size = new_size;
  592|    811|            return;
  593|  40.3k|        } else {
  594|  40.3k|            using std::get;
  595|  40.3k|            auto l = new_size - 1;
  596|  40.3k|            auto v = slice_right_mut_visitor<node_t>();
  597|  40.3k|            auto r = visit_maybe_relaxed_sub(root, shift, tail_off, v, l, e);
  598|  40.3k|            auto new_shift = get<0>(r);
  599|  40.3k|            auto new_root  = get<1>(r);
  600|  40.3k|            auto new_tail  = get<3>(r);
  601|  40.3k|            if (new_root) {
  ------------------
  |  Branch (601:17): [True: 30.8k, False: 9.53k]
  ------------------
  602|  30.8k|                root  = new_root;
  603|  30.8k|                shift = new_shift;
  604|  30.8k|            } else {
  605|  9.53k|                root  = empty_root();
  606|  9.53k|                shift = BL;
  607|  9.53k|            }
  608|  40.3k|            dec_leaf(tail, size - tail_off);
  609|  40.3k|            size = new_size;
  610|  40.3k|            tail = new_tail;
  611|  40.3k|            return;
  612|  40.3k|        }
  613|  43.6k|    }
_ZN5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE8drop_mutENS9_5applyIS6_E4type4editEm:
  644|  43.6k|    {
  645|  43.6k|        using std::get;
  646|  43.6k|        auto tail_off = tail_offset();
  647|  43.6k|        if (elems == 0) {
  ------------------
  |  Branch (647:13): [True: 3.60k, False: 39.9k]
  ------------------
  648|  3.60k|            return;
  649|  39.9k|        } else if (elems >= size) {
  ------------------
  |  Branch (649:20): [True: 264, False: 39.7k]
  ------------------
  650|    264|            *this = {};
  651|  39.7k|        } else if (elems == tail_off) {
  ------------------
  |  Branch (651:20): [True: 278, False: 39.4k]
  ------------------
  652|    278|            dec_inner(root, shift, tail_off);
  653|    278|            shift = BL;
  654|    278|            root  = empty_root();
  655|    278|            size -= elems;
  656|    278|            return;
  657|  39.4k|        } else if (elems > tail_off) {
  ------------------
  |  Branch (657:20): [True: 743, False: 38.7k]
  ------------------
  658|    743|            auto v = slice_left_mut_visitor<node_t>();
  659|    743|            tail   = get<1>(make_leaf_sub_pos(tail, size - tail_off)
  660|    743|                              .visit(v, elems - tail_off, e));
  661|    743|            if (tail_off) {
  ------------------
  |  Branch (661:17): [True: 435, False: 308]
  ------------------
  662|    435|                dec_inner(root, shift, tail_off);
  663|    435|                shift = BL;
  664|    435|                root  = empty_root();
  665|    435|            }
  666|    743|            size -= elems;
  667|    743|            return;
  668|  38.7k|        } else {
  669|  38.7k|            auto v = slice_left_mut_visitor<node_t>();
  670|  38.7k|            auto r =
  671|  38.7k|                visit_maybe_relaxed_sub(root, shift, tail_off, v, elems, e);
  672|  38.7k|            shift = get<0>(r);
  673|  38.7k|            root  = get<1>(r);
  674|  38.7k|            size -= elems;
  675|  38.7k|            return;
  676|  38.7k|        }
  677|  43.6k|    }
_ZN5immer6detail4rbts12concat_mut_lERNS1_7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENS9_5applyIS6_E4type4editERKSB_:
  785|   557k|    {
  786|   557k|        assert(&l != &r);
  787|      0|        assert(r.size < (std::numeric_limits<size_t>::max() - l.size));
  788|      0|        using std::get;
  789|   557k|        if (l.size == 0)
  ------------------
  |  Branch (789:13): [True: 348, False: 556k]
  ------------------
  790|    348|            l = r;
  791|   556k|        else if (r.size == 0)
  ------------------
  |  Branch (791:18): [True: 1.30k, False: 555k]
  ------------------
  792|  1.30k|            return;
  793|   555k|        else if (r.tail_offset() == 0) {
  ------------------
  |  Branch (793:18): [True: 276k, False: 279k]
  ------------------
  794|       |            // just concat the tail, similar to push_back
  795|   276k|            auto tail_offst = l.tail_offset();
  796|   276k|            auto tail_size  = l.size - tail_offst;
  797|   276k|            if (tail_size == branches<BL>) {
  ------------------
  |  Branch (797:17): [True: 103k, False: 172k]
  ------------------
  798|   103k|                l.push_tail_mut(el, tail_offst, l.tail, tail_size);
  799|   103k|                l.tail = r.tail->inc();
  800|   103k|                l.size += r.size;
  801|   103k|                return;
  802|   172k|            } else if (tail_size + r.size <= branches<BL>) {
  ------------------
  |  Branch (802:24): [True: 4.20k, False: 168k]
  ------------------
  803|  4.20k|                l.ensure_mutable_tail(el, tail_size);
  804|  4.20k|                detail::uninitialized_copy(r.tail->leaf(),
  805|  4.20k|                                           r.tail->leaf() + r.size,
  806|  4.20k|                                           l.tail->leaf() + tail_size);
  807|  4.20k|                l.size += r.size;
  808|  4.20k|                return;
  809|   168k|            } else {
  810|   168k|                auto remaining = branches<BL> - tail_size;
  811|   168k|                l.ensure_mutable_tail(el, tail_size);
  812|   168k|                detail::uninitialized_copy(r.tail->leaf(),
  813|   168k|                                           r.tail->leaf() + remaining,
  814|   168k|                                           l.tail->leaf() + tail_size);
  815|   168k|                IMMER_TRY {
  ------------------
  |  |   41|   168k|#define IMMER_TRY try
  ------------------
  816|   168k|                    auto new_tail =
  817|   168k|                        node_t::copy_leaf_e(el, r.tail, remaining, r.size);
  818|   168k|                    IMMER_TRY {
  ------------------
  |  |   41|   168k|#define IMMER_TRY try
  ------------------
  819|   168k|                        l.push_tail_mut(el, tail_offst, l.tail, branches<BL>);
  820|   168k|                        l.tail = new_tail;
  821|   168k|                        l.size += r.size;
  822|   168k|                        return;
  823|   168k|                    }
  824|   168k|                    IMMER_CATCH (...) {
  825|      0|                        node_t::delete_leaf(new_tail, r.size - remaining);
  826|      0|                        IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
  827|      0|                    }
  828|   168k|                }
  829|   168k|                IMMER_CATCH (...) {
  830|      0|                    detail::destroy_n(r.tail->leaf() + tail_size, remaining);
  831|      0|                    IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
  832|      0|                }
  833|   168k|            }
  834|   279k|        } else if (l.tail_offset() == 0) {
  ------------------
  |  Branch (834:20): [True: 528, False: 278k]
  ------------------
  835|    528|            if (supports_transient_concat) {
  ------------------
  |  Branch (835:17): [Folded - Ignored]
  ------------------
  836|      0|                auto tail_offst = l.tail_offset();
  837|      0|                auto tail_size  = l.size - tail_offst;
  838|      0|                auto concated =
  839|      0|                    concat_trees_mut(el,
  840|      0|                                     el,
  841|      0|                                     l.tail,
  842|      0|                                     tail_size,
  843|      0|                                     MemoryPolicy::transience_t::noone,
  844|      0|                                     r.root,
  845|      0|                                     r.shift,
  846|      0|                                     r.tail_offset());
  847|      0|                IMMER_ASSERT_TAGGED(concated.shift() ==
  ------------------
  |  |   60|      0|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  848|      0|                                    concated.node()->compute_shift());
  849|      0|                l.size += r.size;
  850|      0|                l.shift = concated.shift();
  851|      0|                l.root  = concated.node();
  852|      0|                l.tail  = r.tail;
  853|      0|                assert(l.check_tree());
  854|    528|            } else {
  855|    528|                auto tail_offst = l.tail_offset();
  856|    528|                auto tail_size  = l.size - tail_offst;
  857|    528|                auto concated   = concat_trees(
  858|    528|                    l.tail, tail_size, r.root, r.shift, r.tail_offset());
  859|    528|                l = {l.size + r.size,
  860|    528|                     concated.shift(),
  861|    528|                     concated.node(),
  862|    528|                     r.tail->inc()};
  863|    528|                assert(l.check_tree());
  864|      0|                return;
  865|    528|            }
  866|   278k|        } else {
  867|   278k|            if (supports_transient_concat) {
  ------------------
  |  Branch (867:17): [Folded - Ignored]
  ------------------
  868|      0|                auto tail_offst = l.tail_offset();
  869|      0|                auto tail_size  = l.size - tail_offst;
  870|      0|                assert(l.check_tree());
  871|      0|                assert(r.check_tree());
  872|      0|                auto concated =
  873|      0|                    concat_trees_mut(el,
  874|      0|                                     el,
  875|      0|                                     l.root,
  876|      0|                                     l.shift,
  877|      0|                                     tail_offst,
  878|      0|                                     l.tail,
  879|      0|                                     tail_size,
  880|      0|                                     MemoryPolicy::transience_t::noone,
  881|      0|                                     r.root,
  882|      0|                                     r.shift,
  883|      0|                                     r.tail_offset());
  884|      0|                IMMER_ASSERT_TAGGED(concated.shift() ==
  ------------------
  |  |   60|      0|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  885|      0|                                    concated.node()->compute_shift());
  886|      0|                l.size += r.size;
  887|      0|                l.shift = concated.shift();
  888|      0|                l.root  = concated.node();
  889|      0|                l.tail  = r.tail;
  890|      0|                assert(l.check_tree());
  891|   278k|            } else {
  892|   278k|                auto tail_offst = l.tail_offset();
  893|   278k|                auto tail_size  = l.size - tail_offst;
  894|   278k|                auto concated   = concat_trees(l.root,
  895|   278k|                                             l.shift,
  896|   278k|                                             tail_offst,
  897|   278k|                                             l.tail,
  898|   278k|                                             tail_size,
  899|   278k|                                             r.root,
  900|   278k|                                             r.shift,
  901|   278k|                                             r.tail_offset());
  902|   278k|                l               = {l.size + r.size,
  903|   278k|                     concated.shift(),
  904|   278k|                     concated.node(),
  905|   278k|                     r.tail->inc()};
  906|   278k|            }
  907|   278k|        }
  908|   557k|    }
_ZN5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEaSERKSB_:
  132|  2.56k|    {
  133|  2.56k|        auto next{other};
  134|  2.56k|        swap(*this, next);
  135|  2.56k|        return *this;
  136|  2.56k|    }
_ZN5immer6detail4rbts12concat_mut_rERKNS1_7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEERSB_NS9_5applyIS6_E4type4editE:
  911|  4.19k|    {
  912|  4.19k|        assert(&l != &r);
  913|      0|        assert(r.size < (std::numeric_limits<size_t>::max() - l.size));
  914|      0|        using std::get;
  915|  4.19k|        if (r.size == 0)
  ------------------
  |  Branch (915:13): [True: 325, False: 3.87k]
  ------------------
  916|    325|            r = std::move(l);
  917|  3.87k|        else if (l.size == 0)
  ------------------
  |  Branch (917:18): [True: 231, False: 3.64k]
  ------------------
  918|    231|            return;
  919|  3.64k|        else if (r.tail_offset() == 0) {
  ------------------
  |  Branch (919:18): [True: 1.02k, False: 2.61k]
  ------------------
  920|       |            // just concat the tail, similar to push_back
  921|  1.02k|            auto tail_offst = l.tail_offset();
  922|  1.02k|            auto tail_size  = l.size - tail_offst;
  923|  1.02k|            if (tail_size == branches<BL>) {
  ------------------
  |  Branch (923:17): [True: 277, False: 749]
  ------------------
  924|       |                // this could be improved by making sure that the
  925|       |                // newly created nodes as part of the `push_tail()`
  926|       |                // are tagged with `er`
  927|    277|                auto res =
  928|    277|                    l.push_tail(l.root, l.shift, tail_offst, l.tail, tail_size);
  929|    277|                l.tail->inc(); // note: leak if mutably concatenated
  930|       |                               // with itself, but this is forbidden
  931|       |                               // by the interface
  932|    277|                r = {l.size + r.size, get<0>(res), get<1>(res), r.tail->inc()};
  933|    277|                return;
  934|    749|            } else if (tail_size + r.size <= branches<BL>) {
  ------------------
  |  Branch (934:24): [True: 406, False: 343]
  ------------------
  935|       |                // doing this in a exception way mutating way is very
  936|       |                // tricky while potential performance gains are
  937|       |                // minimal (we need to move every element of the right
  938|       |                // tail anyways to make space for the left tail)
  939|       |                //
  940|       |                // we could however improve this by at least moving the
  941|       |                // elements of the right tail...
  942|    406|                auto new_tail =
  943|    406|                    node_t::copy_leaf(l.tail, tail_size, r.tail, r.size);
  944|    406|                r = {l.size + r.size, l.shift, l.root->inc(), new_tail};
  945|    406|                return;
  946|    406|            } else {
  947|       |                // like the immutable version
  948|    343|                auto remaining = branches<BL> - tail_size;
  949|    343|                auto add_tail  = node_t::copy_leaf_e(
  950|    343|                    er, l.tail, tail_size, r.tail, remaining);
  951|    343|                IMMER_TRY {
  ------------------
  |  |   41|    343|#define IMMER_TRY try
  ------------------
  952|    343|                    auto new_tail =
  953|    343|                        node_t::copy_leaf_e(er, r.tail, remaining, r.size);
  954|    343|                    IMMER_TRY {
  ------------------
  |  |   41|    343|#define IMMER_TRY try
  ------------------
  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|    343|                        auto new_root = l.push_tail(l.root,
  959|    343|                                                    l.shift,
  960|    343|                                                    tail_offst,
  961|    343|                                                    add_tail,
  962|    343|                                                    branches<BL>);
  963|    343|                        r             = {l.size + r.size,
  964|    343|                             get<0>(new_root),
  965|    343|                             get<1>(new_root),
  966|    343|                             new_tail};
  967|    343|                        return;
  968|    343|                    }
  969|    343|                    IMMER_CATCH (...) {
  970|      0|                        node_t::delete_leaf(new_tail, r.size - remaining);
  971|      0|                        IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
  972|      0|                    }
  973|    343|                }
  974|    343|                IMMER_CATCH (...) {
  975|      0|                    node_t::delete_leaf(add_tail, branches<BL>);
  976|      0|                    IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
  977|      0|                }
  978|    343|            }
  979|  2.61k|        } else if (l.tail_offset() == 0) {
  ------------------
  |  Branch (979:20): [True: 716, False: 1.89k]
  ------------------
  980|    716|            if (supports_transient_concat) {
  ------------------
  |  Branch (980:17): [Folded - Ignored]
  ------------------
  981|      0|                auto tail_offst = l.tail_offset();
  982|      0|                auto tail_size  = l.size - tail_offst;
  983|      0|                auto concated =
  984|      0|                    concat_trees_mut(er,
  985|      0|                                     MemoryPolicy::transience_t::noone,
  986|      0|                                     l.tail,
  987|      0|                                     tail_size,
  988|      0|                                     er,
  989|      0|                                     r.root,
  990|      0|                                     r.shift,
  991|      0|                                     r.tail_offset());
  992|      0|                IMMER_ASSERT_TAGGED(concated.shift() ==
  ------------------
  |  |   60|      0|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
  993|      0|                                    concated.node()->compute_shift());
  994|      0|                r.size += l.size;
  995|      0|                r.shift = concated.shift();
  996|      0|                r.root  = concated.node();
  997|      0|                assert(r.check_tree());
  998|    716|            } else {
  999|    716|                auto tail_offst = l.tail_offset();
 1000|    716|                auto tail_size  = l.size - tail_offst;
 1001|    716|                auto concated   = concat_trees(
 1002|    716|                    l.tail, tail_size, r.root, r.shift, r.tail_offset());
 1003|    716|                r = {l.size + r.size,
 1004|    716|                     concated.shift(),
 1005|    716|                     concated.node(),
 1006|    716|                     r.tail->inc()};
 1007|    716|                return;
 1008|    716|            }
 1009|  1.89k|        } else {
 1010|  1.89k|            if (supports_transient_concat) {
  ------------------
  |  Branch (1010:17): [Folded - Ignored]
  ------------------
 1011|      0|                auto tail_offst = l.tail_offset();
 1012|      0|                auto tail_size  = l.size - tail_offst;
 1013|      0|                auto concated =
 1014|      0|                    concat_trees_mut(er,
 1015|      0|                                     MemoryPolicy::transience_t::noone,
 1016|      0|                                     l.root,
 1017|      0|                                     l.shift,
 1018|      0|                                     tail_offst,
 1019|      0|                                     l.tail,
 1020|      0|                                     tail_size,
 1021|      0|                                     er,
 1022|      0|                                     r.root,
 1023|      0|                                     r.shift,
 1024|      0|                                     r.tail_offset());
 1025|      0|                IMMER_ASSERT_TAGGED(concated.shift() ==
  ------------------
  |  |   60|      0|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
 1026|      0|                                    concated.node()->compute_shift());
 1027|      0|                r.size += l.size;
 1028|      0|                r.shift = concated.shift();
 1029|      0|                r.root  = concated.node();
 1030|      0|                assert(r.check_tree());
 1031|      0|                return;
 1032|  1.89k|            } else {
 1033|  1.89k|                auto tail_offst = l.tail_offset();
 1034|  1.89k|                auto tail_size  = l.size - tail_offst;
 1035|  1.89k|                auto concated   = concat_trees(l.root,
 1036|  1.89k|                                             l.shift,
 1037|  1.89k|                                             tail_offst,
 1038|  1.89k|                                             l.tail,
 1039|  1.89k|                                             tail_size,
 1040|  1.89k|                                             r.root,
 1041|  1.89k|                                             r.shift,
 1042|  1.89k|                                             r.tail_offset());
 1043|  1.89k|                r               = {l.size + r.size,
 1044|  1.89k|                     concated.shift(),
 1045|  1.89k|                     concated.node(),
 1046|  1.89k|                     r.tail->inc()};
 1047|  1.89k|                return;
 1048|  1.89k|            }
 1049|  1.89k|        }
 1050|  4.19k|    }
_ZN5immer6detail4rbts15concat_mut_lr_lERNS1_7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEENS9_5applyIS6_E4type4editESC_SG_:
 1053|  27.5k|    {
 1054|  27.5k|        assert(&l != &r);
 1055|      0|        assert(r.size < (std::numeric_limits<size_t>::max() - l.size));
 1056|      0|        using std::get;
 1057|  27.5k|        if (l.size == 0)
  ------------------
  |  Branch (1057:13): [True: 1.88k, False: 25.6k]
  ------------------
 1058|  1.88k|            l = r;
 1059|  25.6k|        else if (r.size == 0)
  ------------------
  |  Branch (1059:18): [True: 1.76k, False: 23.9k]
  ------------------
 1060|  1.76k|            return;
 1061|  23.9k|        else if (r.tail_offset() == 0) {
  ------------------
  |  Branch (1061:18): [True: 5.35k, False: 18.5k]
  ------------------
 1062|       |            // just concat the tail, similar to push_back
 1063|  5.35k|            auto tail_offst = l.tail_offset();
 1064|  5.35k|            auto tail_size  = l.size - tail_offst;
 1065|  5.35k|            if (tail_size == branches<BL>) {
  ------------------
  |  Branch (1065:17): [True: 830, False: 4.52k]
  ------------------
 1066|    830|                l.push_tail_mut(el, tail_offst, l.tail, tail_size);
 1067|    830|                l.tail = r.tail->inc();
 1068|    830|                l.size += r.size;
 1069|    830|                return;
 1070|  4.52k|            } else if (tail_size + r.size <= branches<BL>) {
  ------------------
  |  Branch (1070:24): [True: 1.81k, False: 2.70k]
  ------------------
 1071|  1.81k|                l.ensure_mutable_tail(el, tail_size);
 1072|  1.81k|                if (r.tail->can_mutate(er))
  ------------------
  |  Branch (1072:21): [True: 499, False: 1.31k]
  ------------------
 1073|    499|                    detail::uninitialized_move(r.tail->leaf(),
 1074|    499|                                               r.tail->leaf() + r.size,
 1075|    499|                                               l.tail->leaf() + tail_size);
 1076|  1.31k|                else
 1077|  1.31k|                    detail::uninitialized_copy(r.tail->leaf(),
 1078|  1.31k|                                               r.tail->leaf() + r.size,
 1079|  1.31k|                                               l.tail->leaf() + tail_size);
 1080|  1.81k|                l.size += r.size;
 1081|  1.81k|                return;
 1082|  2.70k|            } else {
 1083|  2.70k|                auto remaining = branches<BL> - tail_size;
 1084|  2.70k|                l.ensure_mutable_tail(el, tail_size);
 1085|  2.70k|                if (r.tail->can_mutate(er))
  ------------------
  |  Branch (1085:21): [True: 966, False: 1.73k]
  ------------------
 1086|    966|                    detail::uninitialized_move(r.tail->leaf(),
 1087|    966|                                               r.tail->leaf() + remaining,
 1088|    966|                                               l.tail->leaf() + tail_size);
 1089|  1.73k|                else
 1090|  1.73k|                    detail::uninitialized_copy(r.tail->leaf(),
 1091|  1.73k|                                               r.tail->leaf() + remaining,
 1092|  1.73k|                                               l.tail->leaf() + tail_size);
 1093|  2.70k|                IMMER_TRY {
  ------------------
  |  |   41|  2.70k|#define IMMER_TRY try
  ------------------
 1094|  2.70k|                    auto new_tail =
 1095|  2.70k|                        node_t::copy_leaf_e(el, r.tail, remaining, r.size);
 1096|  2.70k|                    IMMER_TRY {
  ------------------
  |  |   41|  2.70k|#define IMMER_TRY try
  ------------------
 1097|  2.70k|                        l.push_tail_mut(el, tail_offst, l.tail, branches<BL>);
 1098|  2.70k|                        l.tail = new_tail;
 1099|  2.70k|                        l.size += r.size;
 1100|  2.70k|                        return;
 1101|  2.70k|                    }
 1102|  2.70k|                    IMMER_CATCH (...) {
 1103|      0|                        node_t::delete_leaf(new_tail, r.size - remaining);
 1104|      0|                        IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1105|      0|                    }
 1106|  2.70k|                }
 1107|  2.70k|                IMMER_CATCH (...) {
 1108|      0|                    detail::destroy_n(r.tail->leaf() + tail_size, remaining);
 1109|      0|                    IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
 1110|      0|                }
 1111|  2.70k|            }
 1112|  18.5k|        } else if (l.tail_offset() == 0) {
  ------------------
  |  Branch (1112:20): [True: 3.71k, False: 14.8k]
  ------------------
 1113|  3.71k|            if (supports_transient_concat) {
  ------------------
  |  Branch (1113:17): [Folded - Ignored]
  ------------------
 1114|      0|                auto tail_offst = l.tail_offset();
 1115|      0|                auto tail_size  = l.size - tail_offst;
 1116|      0|                auto concated   = concat_trees_mut(el,
 1117|      0|                                                 el,
 1118|      0|                                                 l.tail,
 1119|      0|                                                 tail_size,
 1120|      0|                                                 er,
 1121|      0|                                                 r.root,
 1122|      0|                                                 r.shift,
 1123|      0|                                                 r.tail_offset());
 1124|      0|                IMMER_ASSERT_TAGGED(concated.shift() ==
  ------------------
  |  |   60|      0|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
 1125|      0|                                    concated.node()->compute_shift());
 1126|      0|                l.size += r.size;
 1127|      0|                l.shift = concated.shift();
 1128|      0|                l.root  = concated.node();
 1129|      0|                l.tail  = r.tail;
 1130|      0|                assert(l.check_tree());
 1131|      0|                r.hard_reset();
 1132|      0|                return;
 1133|  3.71k|            } else {
 1134|  3.71k|                auto tail_offst = l.tail_offset();
 1135|  3.71k|                auto tail_size  = l.size - tail_offst;
 1136|  3.71k|                auto concated   = concat_trees(
 1137|  3.71k|                    l.tail, tail_size, r.root, r.shift, r.tail_offset());
 1138|  3.71k|                l = {l.size + r.size,
 1139|  3.71k|                     concated.shift(),
 1140|  3.71k|                     concated.node(),
 1141|  3.71k|                     r.tail->inc()};
 1142|  3.71k|                return;
 1143|  3.71k|            }
 1144|  14.8k|        } else {
 1145|  14.8k|            if (supports_transient_concat) {
  ------------------
  |  Branch (1145:17): [Folded - Ignored]
  ------------------
 1146|      0|                auto tail_offst = l.tail_offset();
 1147|      0|                auto tail_size  = l.size - tail_offst;
 1148|      0|                auto concated   = concat_trees_mut(el,
 1149|      0|                                                 el,
 1150|      0|                                                 l.root,
 1151|      0|                                                 l.shift,
 1152|      0|                                                 tail_offst,
 1153|      0|                                                 l.tail,
 1154|      0|                                                 tail_size,
 1155|      0|                                                 er,
 1156|      0|                                                 r.root,
 1157|      0|                                                 r.shift,
 1158|      0|                                                 r.tail_offset());
 1159|      0|                IMMER_ASSERT_TAGGED(concated.shift() ==
  ------------------
  |  |   60|      0|#define IMMER_ASSERT_TAGGED(assertion) assert(assertion)
  ------------------
 1160|      0|                                    concated.node()->compute_shift());
 1161|      0|                l.size += r.size;
 1162|      0|                l.shift = concated.shift();
 1163|      0|                l.root  = concated.node();
 1164|      0|                l.tail  = r.tail;
 1165|      0|                assert(l.check_tree());
 1166|      0|                r.hard_reset();
 1167|      0|                return;
 1168|  14.8k|            } else {
 1169|  14.8k|                auto tail_offst = l.tail_offset();
 1170|  14.8k|                auto tail_size  = l.size - tail_offst;
 1171|  14.8k|                auto concated   = concat_trees(l.root,
 1172|  14.8k|                                             l.shift,
 1173|  14.8k|                                             tail_offst,
 1174|  14.8k|                                             l.tail,
 1175|  14.8k|                                             tail_size,
 1176|  14.8k|                                             r.root,
 1177|  14.8k|                                             r.shift,
 1178|  14.8k|                                             r.tail_offset());
 1179|  14.8k|                l               = {l.size + r.size,
 1180|  14.8k|                     concated.shift(),
 1181|  14.8k|                     concated.node(),
 1182|  14.8k|                     r.tail->inc()};
 1183|  14.8k|                return;
 1184|  14.8k|            }
 1185|  14.8k|        }
 1186|  27.5k|    }
_ZNK5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE6equalsERKSB_:
  284|  27.0k|    {
  285|  27.0k|        using iter_t = rrbtree_iterator<T, MemoryPolicy, B, BL>;
  286|  27.0k|        if (size != other.size)
  ------------------
  |  Branch (286:13): [True: 6.18k, False: 20.8k]
  ------------------
  287|  6.18k|            return false;
  288|  20.8k|        if (size == 0)
  ------------------
  |  Branch (288:13): [True: 199, False: 20.6k]
  ------------------
  289|    199|            return true;
  290|  20.6k|        auto tail_off       = tail_offset();
  291|  20.6k|        auto tail_off_other = other.tail_offset();
  292|       |        // compare trees
  293|  20.6k|        if (tail_off > 0 && tail_off_other > 0) {
  ------------------
  |  Branch (293:13): [True: 19.2k, False: 1.35k]
  |  Branch (293:29): [True: 19.0k, False: 200]
  ------------------
  294|       |            // other.shift != shift is a theoretical possibility for
  295|       |            // relaxed trees that sadly we haven't managed to exercise
  296|       |            // in tests yet...
  297|  19.0k|            if (other.shift >= shift) {
  ------------------
  |  Branch (297:17): [True: 18.3k, False: 723]
  ------------------
  298|  18.3k|                if (!visit_maybe_relaxed_sub(other.root,
  ------------------
  |  Branch (298:21): [True: 9.79k, False: 8.54k]
  ------------------
  299|  18.3k|                                             other.shift,
  300|  18.3k|                                             tail_off_other,
  301|  18.3k|                                             equals_visitor::rrb{},
  302|  18.3k|                                             iter_t{other},
  303|  18.3k|                                             root,
  304|  18.3k|                                             shift,
  305|  18.3k|                                             tail_off))
  306|  9.79k|                    return false;
  307|  18.3k|            } else {
  308|    723|                if (!visit_maybe_relaxed_sub(root,
  ------------------
  |  Branch (308:21): [True: 321, False: 402]
  ------------------
  309|    723|                                             shift,
  310|    723|                                             tail_off,
  311|    723|                                             equals_visitor::rrb{},
  312|    723|                                             iter_t{*this},
  313|    723|                                             other.root,
  314|    723|                                             other.shift,
  315|    723|                                             tail_off_other))
  316|    321|                    return false;
  317|    723|            }
  318|  19.0k|        }
  319|  10.5k|        return tail_off == tail_off_other
  ------------------
  |  Branch (319:16): [True: 5.26k, False: 5.23k]
  ------------------
  320|  10.5k|                   ? make_leaf_sub_pos(tail, tail_size())
  321|  5.26k|                         .visit(equals_visitor{}, other.tail)
  322|  10.5k|               : tail_off > tail_off_other
  ------------------
  |  Branch (322:18): [True: 1.96k, False: 3.26k]
  ------------------
  323|  5.23k|                   ? std::equal(tail->leaf(),
  324|  1.96k|                                tail->leaf() + (size - tail_off),
  325|  1.96k|                                other.tail->leaf() +
  326|  1.96k|                                    (tail_off - tail_off_other))
  327|       |                   /* otherwise */
  328|  5.23k|                   : std::equal(tail->leaf(),
  329|  3.26k|                                tail->leaf() + (size - tail_off),
  330|  3.26k|                                iter_t{other} + tail_off);
  331|  20.6k|    }
_ZNK5immer6detail4rbts7rrbtreeIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE10region_forEm:
  493|  1.79M|    {
  494|  1.79M|        using std::get;
  495|  1.79M|        auto tail_off = tail_offset();
  496|  1.79M|        if (idx >= tail_off) {
  ------------------
  |  Branch (496:13): [True: 5.25k, False: 1.79M]
  ------------------
  497|  5.25k|            return std::make_tuple(tail->leaf(), tail_off, size);
  498|  1.79M|        } else {
  499|  1.79M|            auto subs = visit_maybe_relaxed_sub(
  500|  1.79M|                root, shift, tail_off, region_for_visitor<T>(), idx);
  501|  1.79M|            auto first = idx - get<1>(subs);
  502|  1.79M|            auto end   = first + get<2>(subs);
  503|  1.79M|            return std::make_tuple(get<0>(subs), first, end);
  504|  1.79M|        }
  505|  1.79M|    }

_ZNK5immer6detail4rbts16rrbtree_iteratorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE11dereferenceEv:
   88|  7.91M|    {
   89|  7.91M|        using std::get;
   90|  7.91M|        if (i_ < get<1>(curr_) || i_ >= get<2>(curr_))
  ------------------
  |  Branch (90:13): [True: 47.6k, False: 7.87M]
  |  Branch (90:35): [True: 1.75M, False: 6.12M]
  ------------------
   91|  1.79M|            curr_ = v_->region_for(i_);
   92|  7.91M|        return get<0>(curr_)[i_ - get<1>(curr_)];
   93|  7.91M|    }
_ZN5immer6detail4rbts16rrbtree_iteratorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE7advanceEl:
   72|   185k|    {
   73|   185k|        using std::get;
   74|   185k|        assert(n <= 0 || i_ + static_cast<size_t>(n) <= v_->size);
   75|      0|        assert(n >= 0 || static_cast<size_t>(-n) <= i_);
   76|      0|        i_ += n;
   77|   185k|    }
_ZN5immer6detail4rbts16rrbtree_iteratorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE9incrementEv:
   58|  6.15M|    {
   59|  6.15M|        using std::get;
   60|  6.15M|        assert(i_ < v_->size);
   61|      0|        ++i_;
   62|  6.15M|    }
_ZN5immer6detail4rbts16rrbtree_iteratorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEC2ERKNS1_7rrbtreeIiSA_Lj2ELj2EEE:
   42|  22.3k|    {}

_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|  17.3k|    {
   32|  17.3k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|  17.3k|    }
_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|  71.1k|    {
   32|  71.1k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|  71.1k|    }
_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.09k|    {
   38|  2.09k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  2.09k|    }
_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|  5.56k|    {
   38|  5.56k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  5.56k|    }
_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|  7.50k|    {
   38|  7.50k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  7.50k|    }
_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.31k|    {
   38|  1.31k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  1.31k|    }
_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|  2.45k|    {
   38|  2.45k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  2.45k|    }
_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|  9.86k|    {
   38|  9.86k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  9.86k|    }
_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|  9.86k|    {
   44|  9.86k|        return Deriv::visit_node(std::forward<Args>(args)...);
   45|  9.86k|    }
_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|  6.89k|    {
   32|  6.89k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|  6.89k|    }
_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|  6.89k|    {
   44|  6.89k|        return Deriv::visit_node(std::forward<Args>(args)...);
   45|  6.89k|    }
_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|  3.24M|    {
   50|  3.24M|        return Deriv::visit_node(std::forward<Args>(args)...);
   51|  3.24M|    }
_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|  30.3M|    {
   32|  30.3M|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|  30.3M|    }
_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|  30.3M|    {
   44|  30.3M|        return Deriv::visit_node(std::forward<Args>(args)...);
   45|  30.3M|    }
_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|  30.3M|    {
   32|  30.3M|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|  30.3M|    }
_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|  28.0k|    {
   32|  28.0k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|  28.0k|    }
_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|    416|    {
   38|    416|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|    416|    }
_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.42k|    {
   38|  1.42k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  1.42k|    }
_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|  1.61M|    {
   50|  1.61M|        return Deriv::visit_node(std::forward<Args>(args)...);
   51|  1.61M|    }
_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|  1.37M|    {
   38|  1.37M|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  1.37M|    }
_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|  1.37M|    {
   44|  1.37M|        return Deriv::visit_node(std::forward<Args>(args)...);
   45|  1.37M|    }
_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|  1.37M|    {
   38|  1.37M|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  1.37M|    }
_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|   822k|    {
   38|   822k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|   822k|    }
_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|   822k|    {
   44|   822k|        return Deriv::visit_node(std::forward<Args>(args)...);
   45|   822k|    }
_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|   822k|    {
   38|   822k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|   822k|    }
_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.97k|    {
   38|  2.97k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  2.97k|    }
_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.97k|    {
   44|  2.97k|        return Deriv::visit_node(std::forward<Args>(args)...);
   45|  2.97k|    }
_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|   671k|    {
   32|   671k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|   671k|    }
_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|   671k|    {
   44|   671k|        return Deriv::visit_node(std::forward<Args>(args)...);
   45|   671k|    }
_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|   642k|    {
   32|   642k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|   642k|    }
_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|   642k|    {
   44|   642k|        return Deriv::visit_node(std::forward<Args>(args)...);
   45|   642k|    }
_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|  2.88M|    {
   32|  2.88M|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|  2.88M|    }
_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|  6.14k|    {
   38|  6.14k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  6.14k|    }
_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|   779k|    {
   32|   779k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|   779k|    }
_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|   175k|    {
   38|   175k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|   175k|    }
_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.91k|    {
   38|  1.91k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  1.91k|    }
_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|   276k|    {
   38|   276k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|   276k|    }
_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|   139k|    {
   38|   139k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|   139k|    }
_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|   135k|    {
   38|   135k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|   135k|    }
_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|   942k|    {
   38|   942k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|   942k|    }
_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|  2.74M|    {
   32|  2.74M|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|  2.74M|    }
_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|  1.72k|    {
   38|  1.72k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  1.72k|    }
_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|   150k|    {
   32|   150k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|   150k|    }
_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|  2.33k|    {
   38|  2.33k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  2.33k|    }
_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|    469|    {
   32|    469|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|    469|    }
_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.04k|    {
   32|  1.04k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|  1.04k|    }
_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|  2.66M|    {
   32|  2.66M|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|  2.66M|    }
_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|  28.2k|    {
   38|  28.2k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  28.2k|    }
_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|  28.2k|    {
   44|  28.2k|        return Deriv::visit_node(std::forward<Args>(args)...);
   45|  28.2k|    }
_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|  16.5k|    {
   38|  16.5k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  16.5k|    }
_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|  16.5k|    {
   44|  16.5k|        return Deriv::visit_node(std::forward<Args>(args)...);
   45|  16.5k|    }
_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|  6.32k|    {
   32|  6.32k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|  6.32k|    }
_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|  6.32k|    {
   44|  6.32k|        return Deriv::visit_node(std::forward<Args>(args)...);
   45|  6.32k|    }
_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|  10.2k|    {
   38|  10.2k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  10.2k|    }
_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|  10.2k|    {
   44|  10.2k|        return Deriv::visit_node(std::forward<Args>(args)...);
   45|  10.2k|    }
_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|  10.0k|    {
   32|  10.0k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|  10.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|  10.0k|    {
   44|  10.0k|        return Deriv::visit_node(std::forward<Args>(args)...);
   45|  10.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|  22.5k|    {
   32|  22.5k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|  22.5k|    }
_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.28k|    {
   32|  2.28k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|  2.28k|    }
_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|  1.37k|    {
   32|  1.37k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|  1.37k|    }
_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.20k|    {
   38|  1.20k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  1.20k|    }
_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|  9.98M|    {
   32|  9.98M|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|  9.98M|    }
_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|   682k|    {
   38|   682k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|   682k|    }
_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|  1.99M|    {
   38|  1.99M|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  1.99M|    }
_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|   188k|    {
   38|   188k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|   188k|    }
_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|   197k|    {
   38|   197k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|   197k|    }
_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|    511|    {
   38|    511|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|    511|    }
_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|  16.7k|    {
   38|  16.7k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  16.7k|    }
_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|  9.43k|    {
   38|  9.43k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  9.43k|    }
_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.10k|    {
   38|  2.10k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  2.10k|    }
_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.83k|    {
   38|  2.83k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  2.83k|    }
_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|   556k|    {
   32|   556k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|   556k|    }
_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.47k|    {
   32|  1.47k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   33|  1.47k|    }
_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.47k|    {
   44|  1.47k|        return Deriv::visit_node(std::forward<Args>(args)...);
   45|  1.47k|    }
_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|  8.99k|    {
   38|  8.99k|        return Deriv::visit_inner(std::forward<Args>(args)...);
   39|  8.99k|    }
_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|  8.99k|    {
   44|  8.99k|        return Deriv::visit_node(std::forward<Args>(args)...);
   45|  8.99k|    }

_ZN5immer6detail15auto_const_castINS_15refcount_policyEEERT_RKS3_:
   45|   163M|{
   46|   163M|    return const_cast<T&>(x);
   47|   163M|}
_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_:
  231|  16.9M|{
  232|  16.9M|    std::forward<F>(f)(empty_t{});
  233|  16.9M|}
_ZN5immer6detail9destroy_nIPijEENSt3__19enable_ifIX20can_trivially_detroyIT_EES5_E4typeES5_T0_:
   90|  1.70M|{
   91|  1.70M|    return first + n;
   92|  1.70M|}
_ZN5immer6detail18uninitialized_copyIPiS2_S2_EENSt3__19enable_ifIX18can_trivially_copyIT_T1_EES6_E4typeES5_T0_S6_:
  138|  2.25M|{
  139|  2.25M|    return std::copy(first, last, out);
  140|  2.25M|}
_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_:
  245|   405k|{
  246|   405k|    return std::forward<F2>(f2)(empty_t{});
  247|   405k|}
_ZN5immer6detail4ipowImEET_S2_j:
  225|  85.2M|{
  226|  85.2M|    return pow == 0 ? 1 : num * ipow(num, pow - 1);
  ------------------
  |  Branch (226:12): [True: 2.66M, False: 82.6M]
  ------------------
  227|  85.2M|}
_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_:
  245|  92.5k|{
  246|  92.5k|    return std::forward<F2>(f2)(empty_t{});
  247|  92.5k|}
_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_:
  231|   154k|{
  232|   154k|    std::forward<F>(f)(empty_t{});
  233|   154k|}
_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_:
  245|  9.32k|{
  246|  9.32k|    return std::forward<F2>(f2)(empty_t{});
  247|  9.32k|}
_ZN5immer6detail9destroy_nIPimEENSt3__19enable_ifIX20can_trivially_detroyIT_EES5_E4typeES5_T0_:
   90|    549|{
   91|    549|    return first + n;
   92|    549|}
_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_:
  245|   151k|{
  246|   151k|    return std::forward<F2>(f2)(empty_t{});
  247|   151k|}
_ZN5immer6detail18uninitialized_moveIPiS2_EENSt3__19enable_ifIX18can_trivially_copyIT_T0_EES6_E4typeES5_S5_S6_:
  112|  1.46k|{
  113|  1.46k|    return std::copy(first, last, out);
  114|  1.46k|}
_ZN5immer6detail8as_constIiEEPKT_PS2_:
   29|  1.76M|{
   30|  1.76M|    return x;
   31|  1.76M|}
_ZN5immer6detail4makeINS_15debug_size_heapINS_8cpp_heapEEENS_3boxIiNS_13memory_policyINS_21free_list_heap_policyIS3_Lm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEEE6holderEJiEEEPT0_DpOT1_:
  162|  22.0k|{
  163|  22.0k|    auto ptr = Heap::allocate(sizeof(T));
  164|  22.0k|    IMMER_TRY {
  ------------------
  |  |   41|  22.0k|#define IMMER_TRY try
  ------------------
  165|  22.0k|        return new (ptr) T{std::forward<Args>(args)...};
  166|  22.0k|    }
  167|  22.0k|    IMMER_CATCH (...) {
  168|      0|        Heap::deallocate(sizeof(T), ptr);
  169|      0|        IMMER_RETHROW;
  ------------------
  |  |   44|      0|#define IMMER_RETHROW throw
  ------------------
  170|      0|    }
  171|  22.0k|}

_ZN5immer11flex_vectorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEC2Ev:
   96|  80.7k|    flex_vector() = default;
_ZNKR5immer11flex_vectorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE9push_backEi:
  242|   261k|    {
  243|   261k|        return impl_.push_back(std::move(value));
  244|   261k|    }
_ZN5immer11flex_vectorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEC2ENS_6detail4rbts7rrbtreeIiS8_Lj2ELj2EEE:
  532|  1.58M|    {
  533|       |#if IMMER_DEBUG_PRINT
  534|       |        // force the compiler to generate debug_print, so we can call
  535|       |        // it from a debugger
  536|       |        [](volatile auto) {}(&flex_vector::debug_print);
  537|       |#endif
  538|  1.58M|    }
_ZNK5immer11flex_vectorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE4sizeEv:
  177|  3.91M|    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_:
  319|   273k|    {
  320|   273k|        return impl_.update(index, std::forward<FnT>(fn));
  321|   273k|    }
_ZNKR5immer11flex_vectorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE4takeEm:
  346|  27.5k|    {
  347|  27.5k|        return impl_.take(elems);
  348|  27.5k|    }
_ZNKR5immer11flex_vectorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE4dropEm:
  372|  29.6k|    {
  373|  29.6k|        return impl_.drop(elems);
  374|  29.6k|    }
_ZN5immer11flex_vectorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE8max_sizeEv:
   90|  1.67M|    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_:
  399|   990k|    {
  400|   990k|        return l.impl_.concat(r.impl_);
  401|   990k|    }
_ZNO5immer11flex_vectorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE9push_backEi:
  247|  34.0k|    {
  248|  34.0k|        return push_back_move(move_t{}, std::move(value));
  249|  34.0k|    }
_ZN5immer11flex_vectorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE14push_back_moveENSt3__117integral_constantIbLb1EEEi:
  541|  34.0k|    {
  542|  34.0k|        impl_.push_back_mut({}, std::move(value));
  543|  34.0k|        return std::move(*this);
  544|  34.0k|    }
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_:
  325|  65.4k|    {
  326|  65.4k|        return update_move(move_t{}, index, std::forward<FnT>(fn));
  327|  65.4k|    }
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_:
  562|  65.4k|    {
  563|  65.4k|        impl_.update_mut({}, index, std::forward<Fn>(fn));
  564|  65.4k|        return std::move(*this);
  565|  65.4k|    }
_ZNO5immer11flex_vectorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE4takeEm:
  351|  43.6k|    {
  352|  43.6k|        return take_move(move_t{}, elems);
  353|  43.6k|    }
_ZN5immer11flex_vectorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE9take_moveENSt3__117integral_constantIbLb1EEEm:
  573|  43.6k|    {
  574|  43.6k|        impl_.take_mut({}, elems);
  575|  43.6k|        return std::move(*this);
  576|  43.6k|    }
_ZNO5immer11flex_vectorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE4dropEm:
  377|  43.6k|    {
  378|  43.6k|        return drop_move(move_t{}, elems);
  379|  43.6k|    }
_ZN5immer11flex_vectorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE9drop_moveENSt3__117integral_constantIbLb1EEEm:
  583|  43.6k|    {
  584|  43.6k|        impl_.drop_mut({}, elems);
  585|  43.6k|        return std::move(*this);
  586|  43.6k|    }
_ZN5immerplEONS_11flex_vectorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEERKS9_:
  405|   557k|    {
  406|   557k|        return concat_move(move_t{}, std::move(l), r);
  407|   557k|    }
_ZN5immer11flex_vectorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE11concat_moveENSt3__117integral_constantIbLb1EEEOS9_RKS9_:
  594|   557k|    {
  595|   557k|        concat_mut_l(l.impl_, {}, r.impl_);
  596|   557k|        return std::move(l);
  597|   557k|    }
_ZN5immerplERKNS_11flex_vectorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEEOS9_:
  411|  4.19k|    {
  412|  4.19k|        return concat_move(move_t{}, l, std::move(r));
  413|  4.19k|    }
_ZN5immer11flex_vectorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE11concat_moveENSt3__117integral_constantIbLb1EEERKS9_OS9_:
  600|  4.19k|    {
  601|  4.19k|        concat_mut_r(l.impl_, r.impl_, {});
  602|  4.19k|        return std::move(r);
  603|  4.19k|    }
_ZN5immerplEONS_11flex_vectorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEESA_:
  417|  27.5k|    {
  418|  27.5k|        return concat_move(move_t{}, std::move(l), std::move(r));
  419|  27.5k|    }
_ZN5immer11flex_vectorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE11concat_moveENSt3__117integral_constantIbLb1EEEOS9_SD_:
  606|  27.5k|    {
  607|  27.5k|        concat_mut_lr_l(l.impl_, {}, r.impl_, {});
  608|  27.5k|        return std::move(l);
  609|  27.5k|    }
_ZNK5immer11flex_vectorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EEeqERKS9_:
  218|  27.0k|    {
  219|  27.0k|        return impl_.equals(other.impl_);
  220|  27.0k|    }
_ZNKR5immer11flex_vectorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE5eraseEm:
  476|  3.36k|    {
  477|  3.36k|        return take(pos) + drop(pos + 1);
  478|  3.36k|    }
_ZNKR5immer11flex_vectorIiNS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEELj2ELj2EE6insertEmi:
  438|  22.0k|    {
  439|  22.0k|        return take(pos).push_back(std::move(value)) + drop(pos);
  440|  22.0k|    }

_ZN5immer8cpp_heap10deallocateEmPv:
   37|  15.8M|    {
   38|  15.8M|        ::operator delete(data);
   39|  15.8M|    }
_ZN5immer8cpp_heap8allocateIJEEEPvmDpT_:
   27|  15.8M|    {
   28|  15.8M|        return ::operator new(size);
   29|  15.8M|    }

_ZN5immer15debug_size_heapINS_8cpp_heapEE10deallocateIJEEEvmPvDpT_:
   55|  15.8M|    {
   56|  15.8M|        auto p = (std::size_t*) (((char*) data) - extra_size);
   57|  15.8M|        assert(*p == size);
   58|      0|        Base::deallocate(size + extra_size, p, tags...);
   59|  15.8M|    }
_ZN5immer15debug_size_heapINS_8cpp_heapEE8allocateIJEEEPvmDpT_:
   47|  15.8M|    {
   48|  15.8M|        auto p = (std::size_t*) Base::allocate(size + extra_size, tags...);
   49|  15.8M|        new (p) std::size_t{size};
   50|  15.8M|        return ((char*) p) + extra_size;
   51|  15.8M|    }

_ZN5immer14free_list_heapILm56ELm1024ENS_15debug_size_heapINS_8cpp_heapEEEE10deallocateIJEEEvmPvDpT_:
   53|  16.7M|    {
   54|  16.7M|        assert(size <= sizeof(free_list_node) + Size);
   55|      0|        assert(size >= sizeof(free_list_node));
   56|       |
   57|       |        // we use relaxed, because we are fine with temporarily having
   58|       |        // a few more/less buffers in free list
   59|  16.7M|        if (head().count.load(std::memory_order_relaxed) >= Limit) {
  ------------------
  |  Branch (59:13): [True: 15.7M, False: 955k]
  ------------------
   60|  15.7M|            base_t::deallocate(Size + sizeof(free_list_node), data);
   61|  15.7M|        } else {
   62|   955k|            auto n = static_cast<free_list_node*>(data);
   63|   955k|            do {
   64|   955k|                n->next = head().data;
   65|   955k|            } while (!head().data.compare_exchange_weak(n->next, n));
  ------------------
  |  Branch (65:22): [True: 0, False: 955k]
  ------------------
   66|   955k|            head().count.fetch_add(1u, std::memory_order_relaxed);
   67|   955k|        }
   68|  16.7M|    }
_ZN5immer14free_list_heapILm56ELm1024ENS_15debug_size_heapINS_8cpp_heapEEEE4headEv:
   78|  38.2M|    {
   79|  38.2M|        static head_t head_{{nullptr}, {0}};
   80|  38.2M|        return head_;
   81|  38.2M|    }
_ZN5immer14free_list_heapILm56ELm1024ENS_15debug_size_heapINS_8cpp_heapEEEE8allocateIJEEEPvmDpT_:
   35|  16.7M|    {
   36|  16.7M|        assert(size <= sizeof(free_list_node) + Size);
   37|      0|        assert(size >= sizeof(free_list_node));
   38|       |
   39|      0|        free_list_node* n;
   40|  16.7M|        do {
   41|  16.7M|            n = head().data;
   42|  16.7M|            if (!n) {
  ------------------
  |  Branch (42:17): [True: 15.7M, False: 954k]
  ------------------
   43|  15.7M|                auto p = base_t::allocate(Size + sizeof(free_list_node));
   44|  15.7M|                return static_cast<free_list_node*>(p);
   45|  15.7M|            }
   46|  16.7M|        } while (!head().data.compare_exchange_weak(n, n->next));
  ------------------
  |  Branch (46:18): [True: 0, False: 954k]
  ------------------
   47|   954k|        head().count.fetch_sub(1u, std::memory_order_relaxed);
   48|   954k|        return n;
   49|  16.7M|    }

_ZN5immer10split_heapILm56ENS_19with_free_list_nodeINS_27thread_local_free_list_heapILm56ELm1024ENS_14free_list_heapILm56ELm1024ENS_15debug_size_heapINS_8cpp_heapEEEEEEEEES6_E10deallocateIJEEEvmPvDpT_:
   33|  38.9M|    {
   34|  38.9M|        if (size <= Size)
  ------------------
  |  Branch (34:13): [True: 38.9M, False: 0]
  ------------------
   35|  38.9M|            SmallHeap::deallocate(size, data, tags...);
   36|      0|        else
   37|      0|            BigHeap::deallocate(size, data, tags...);
   38|  38.9M|    }
_ZN5immer10split_heapILm56ENS_19with_free_list_nodeINS_27thread_local_free_list_heapILm56ELm1024ENS_14free_list_heapILm56ELm1024ENS_15debug_size_heapINS_8cpp_heapEEEEEEEEES6_E8allocateIJEEEPvmDpT_:
   26|  22.4M|    {
   27|  22.4M|        return size <= Size ? SmallHeap::allocate(size, tags...)
  ------------------
  |  Branch (27:16): [True: 22.4M, False: 0]
  ------------------
   28|  22.4M|                            : BigHeap::allocate(size, tags...);
   29|  22.4M|    }
_ZN5immer10split_heapILm56ENS_19with_free_list_nodeINS_27thread_local_free_list_heapILm56ELm1024ENS_14free_list_heapILm56ELm1024ENS_15debug_size_heapINS_8cpp_heapEEEEEEEEES6_E8allocateIJNS_10norefs_tagEEEEPvmDpT_:
   26|  16.5M|    {
   27|  16.5M|        return size <= Size ? SmallHeap::allocate(size, tags...)
  ------------------
  |  Branch (27:16): [True: 16.5M, False: 0]
  ------------------
   28|  16.5M|                            : BigHeap::allocate(size, tags...);
   29|  16.5M|    }

_ZN5immer6detail30thread_local_free_list_storageINS0_26unsafe_free_list_heap_implIS1_Lm56ELm1024ENS_14free_list_heapILm56ELm1024ENS_15debug_size_heapINS_8cpp_heapEEEEEEEE4headEv:
   30|   188M|    {
   31|   188M|        thread_local static head_t head_{nullptr, 0};
   32|   188M|        return head_;
   33|   188M|    }
_ZN5immer6detail30thread_local_free_list_storageINS0_26unsafe_free_list_heap_implIS1_Lm56ELm1024ENS_14free_list_heapILm56ELm1024ENS_15debug_size_heapINS_8cpp_heapEEEEEEEE6head_tD2Ev:
   26|      1|        ~head_t() { Heap::clear(); }

_ZN5immer6detail26unsafe_free_list_heap_implINS0_30thread_local_free_list_storageELm56ELm1024ENS_14free_list_heapILm56ELm1024ENS_15debug_size_heapINS_8cpp_heapEEEEEE10deallocateIJEEEvmPvDpT_:
   65|  38.9M|    {
   66|  38.9M|        assert(size <= sizeof(free_list_node) + Size);
   67|      0|        assert(size >= sizeof(free_list_node));
   68|       |
   69|  38.9M|        if (storage::head().count >= Limit)
  ------------------
  |  Branch (69:13): [True: 16.7M, False: 22.1M]
  ------------------
   70|  16.7M|            base_t::deallocate(Size + sizeof(free_list_node), data);
   71|  22.1M|        else {
   72|  22.1M|            auto n               = static_cast<free_list_node*>(data);
   73|  22.1M|            n->next              = storage::head().data;
   74|  22.1M|            storage::head().data = n;
   75|  22.1M|            ++storage::head().count;
   76|  22.1M|        }
   77|  38.9M|    }
_ZN5immer6detail26unsafe_free_list_heap_implINS0_30thread_local_free_list_storageELm56ELm1024ENS_14free_list_heapILm56ELm1024ENS_15debug_size_heapINS_8cpp_heapEEEEEE5clearEv:
   80|      1|    {
   81|  1.02k|        while (storage::head().data) {
  ------------------
  |  Branch (81:16): [True: 1.02k, False: 1]
  ------------------
   82|  1.02k|            auto n = storage::head().data->next;
   83|  1.02k|            base_t::deallocate(Size + sizeof(free_list_node),
   84|  1.02k|                               storage::head().data);
   85|  1.02k|            storage::head().data = n;
   86|  1.02k|            --storage::head().count;
   87|  1.02k|        }
   88|      1|    }
_ZN5immer6detail26unsafe_free_list_heap_implINS0_30thread_local_free_list_storageELm56ELm1024ENS_14free_list_heapILm56ELm1024ENS_15debug_size_heapINS_8cpp_heapEEEEEE8allocateIJEEEPvmDpT_:
   49|  22.4M|    {
   50|  22.4M|        assert(size <= sizeof(free_list_node) + Size);
   51|      0|        assert(size >= sizeof(free_list_node));
   52|       |
   53|      0|        auto n = storage::head().data;
   54|  22.4M|        if (!n) {
  ------------------
  |  Branch (54:13): [True: 8.52M, False: 13.8M]
  ------------------
   55|  8.52M|            auto p = base_t::allocate(Size + sizeof(free_list_node));
   56|  8.52M|            return static_cast<free_list_node*>(p);
   57|  8.52M|        }
   58|  13.8M|        --storage::head().count;
   59|  13.8M|        storage::head().data = n->next;
   60|  13.8M|        return n;
   61|  22.4M|    }
_ZN5immer6detail26unsafe_free_list_heap_implINS0_30thread_local_free_list_storageELm56ELm1024ENS_14free_list_heapILm56ELm1024ENS_15debug_size_heapINS_8cpp_heapEEEEEE8allocateIJNS_10norefs_tagEEEEPvmDpT_:
   49|  16.5M|    {
   50|  16.5M|        assert(size <= sizeof(free_list_node) + Size);
   51|      0|        assert(size >= sizeof(free_list_node));
   52|       |
   53|      0|        auto n = storage::head().data;
   54|  16.5M|        if (!n) {
  ------------------
  |  Branch (54:13): [True: 8.22M, False: 8.27M]
  ------------------
   55|  8.22M|            auto p = base_t::allocate(Size + sizeof(free_list_node));
   56|  8.22M|            return static_cast<free_list_node*>(p);
   57|  8.22M|        }
   58|  8.27M|        --storage::head().count;
   59|  8.27M|        storage::head().data = n->next;
   60|  8.27M|        return n;
   61|  16.5M|    }

_ZN5immer9with_dataINS_14free_list_nodeENS_27thread_local_free_list_heapILm56ELm1024ENS_14free_list_heapILm56ELm1024ENS_15debug_size_heapINS_8cpp_heapEEEEEEEE10deallocateIJEEEvmPvDpT_:
   36|  38.9M|    {
   37|  38.9M|        auto dp = static_cast<T*>(p) - 1;
   38|  38.9M|        dp->~T();
   39|  38.9M|        base_t::deallocate(size + sizeof(T), dp, tags...);
   40|  38.9M|    }
_ZN5immer9with_dataINS_14free_list_nodeENS_27thread_local_free_list_heapILm56ELm1024ENS_14free_list_heapILm56ELm1024ENS_15debug_size_heapINS_8cpp_heapEEEEEEEE8allocateIJEEEPvmDpT_:
   29|  22.4M|    {
   30|  22.4M|        auto p = base_t::allocate(size + sizeof(T), tags...);
   31|  22.4M|        return new (p) T{} + 1;
   32|  22.4M|    }
_ZN5immer9with_dataINS_14free_list_nodeENS_27thread_local_free_list_heapILm56ELm1024ENS_14free_list_heapILm56ELm1024ENS_15debug_size_heapINS_8cpp_heapEEEEEEEE8allocateIJNS_10norefs_tagEEEEPvmDpT_:
   29|  16.5M|    {
   30|  16.5M|        auto p = base_t::allocate(size + sizeof(T), tags...);
   31|  16.5M|        return new (p) T{} + 1;
   32|  16.5M|    }

_ZN5immer15refcount_policyC2Ev:
   28|  38.9M|        : refcount{1} {};
_ZN5immer15refcount_policy3incEv:
   33|  61.1M|    void inc() { refcount.fetch_add(1, std::memory_order_relaxed); }
_ZN5immer15refcount_policy3decEv:
   35|   100M|    bool dec() { return 1 == refcount.fetch_sub(1, std::memory_order_acq_rel); }
_ZN5immer15refcount_policy6uniqueEv:
   37|  2.54M|    bool unique() { return refcount == 1; }

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

