_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEED2Ev:
 1237|  1.51k|    ~raw_hash_set() { destroy_slots(); }
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE13destroy_slotsEv:
 2010|  1.51k|    void destroy_slots() {
 2011|  1.51k|        if (!capacity_)
  ------------------
  |  Branch (2011:13): [True: 911, False: 607]
  ------------------
 2012|    911|            return;
 2013|       |        
 2014|    607|        PHMAP_IF_CONSTEXPR((!std::is_trivially_destructible<typename PolicyTraits::value_type>::value ||
  ------------------
  |  |  650|    607|    #define PHMAP_IF_CONSTEXPR(expr) if constexpr ((expr))
  |  |  ------------------
  |  |  |  Branch (650:52): [Folded - Ignored]
  |  |  |  Branch (650:53): [Folded - Ignored]
  |  |  |  Branch (650:53): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2015|    607|                            std::is_same<typename Policy::is_flat, std::false_type>::value)) {
 2016|       |            // node map, or not trivially destructible... we  need to iterate and destroy values one by one
 2017|       |            // std::cout << "either this is a node map or " << type_name<typename PolicyTraits::value_type>()  << " is not trivially_destructible\n";
 2018|    607|            for (size_t i = 0; i != capacity_; ++i) {
 2019|    607|                if (IsFull(ctrl_[i])) {
 2020|    607|                    PolicyTraits::destroy(&alloc_ref(), slots_ + i);
 2021|    607|                }
 2022|    607|            }
 2023|    607|        } 
 2024|    607|        auto layout = MakeLayout(capacity_);
 2025|       |        // Unpoison before returning the memory to the allocator.
 2026|    607|        SanitizerUnpoisonMemoryRegion(slots_, sizeof(slot_type) * capacity_);
 2027|    607|        Deallocate<Layout::Alignment()>(&alloc_ref(), ctrl_, layout.AllocSize());
 2028|    607|        ctrl_ = EmptyGroup();
 2029|    607|        slots_ = nullptr;
 2030|    607|        size_ = 0;
 2031|    607|        capacity_ = 0;
 2032|    607|        growth_left() = 0;
 2033|    607|    }
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE10MakeLayoutEm:
  879|  5.90k|    static Layout MakeLayout(size_t capacity) {
  880|  5.90k|        assert(IsValidCapacity(capacity));
  881|  5.90k|        return Layout(capacity + Group::kWidth + 1, capacity);
  882|  5.90k|    }
_ZN5phmap4priv15IsValidCapacityEm:
  539|  14.0k|inline bool IsValidCapacity(size_t n) { return ((n + 1) & n) == 0 && n > 0; }
  ------------------
  |  Branch (539:48): [True: 14.0k, False: 0]
  |  Branch (539:70): [True: 14.0k, False: 0]
  ------------------
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE9alloc_refEv:
 2330|  1.50M|    allocator_type& alloc_ref() { return std::get<3>(settings_); }
_ZN5phmap4priv10EmptyGroupEv:
  332|  2.63k|inline ctrl_t* EmptyGroup() {
  333|  2.63k|  alignas(16) static constexpr ctrl_t empty_group[] = {
  334|  2.63k|      kSentinel, kEmpty, kEmpty, kEmpty, kEmpty, kEmpty, kEmpty, kEmpty,
  335|  2.63k|      kEmpty,    kEmpty, kEmpty, kEmpty, kEmpty, kEmpty, kEmpty, kEmpty};
  336|  2.63k|  return const_cast<ctrl_t*>(empty_group);
  337|  2.63k|}
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE11growth_leftEv:
 2296|  1.07M|    size_t& growth_left() { return std::get<0>(settings_); }
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEES9_EENS0_13StringHashEqTIcE4HashENSC_2EqENS7_INS3_4pairIKS9_S9_EEEEED2Ev:
 1237|    506|    ~raw_hash_set() { destroy_slots(); }
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEES9_EENS0_13StringHashEqTIcE4HashENSC_2EqENS7_INS3_4pairIKS9_S9_EEEEE13destroy_slotsEv:
 2010|    506|    void destroy_slots() {
 2011|    506|        if (!capacity_)
  ------------------
  |  Branch (2011:13): [True: 506, False: 0]
  ------------------
 2012|    506|            return;
 2013|       |        
 2014|      0|        PHMAP_IF_CONSTEXPR((!std::is_trivially_destructible<typename PolicyTraits::value_type>::value ||
  ------------------
  |  |  650|      0|    #define PHMAP_IF_CONSTEXPR(expr) if constexpr ((expr))
  |  |  ------------------
  |  |  |  Branch (650:52): [Folded - Ignored]
  |  |  |  Branch (650:53): [Folded - Ignored]
  |  |  |  Branch (650:53): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2015|      0|                            std::is_same<typename Policy::is_flat, std::false_type>::value)) {
 2016|       |            // node map, or not trivially destructible... we  need to iterate and destroy values one by one
 2017|       |            // std::cout << "either this is a node map or " << type_name<typename PolicyTraits::value_type>()  << " is not trivially_destructible\n";
 2018|      0|            for (size_t i = 0; i != capacity_; ++i) {
  ------------------
  |  Branch (2018:32): [True: 0, False: 0]
  ------------------
 2019|      0|                if (IsFull(ctrl_[i])) {
  ------------------
  |  Branch (2019:21): [True: 0, False: 0]
  ------------------
 2020|      0|                    PolicyTraits::destroy(&alloc_ref(), slots_ + i);
 2021|      0|                }
 2022|      0|            }
 2023|      0|        } 
 2024|      0|        auto layout = MakeLayout(capacity_);
 2025|       |        // Unpoison before returning the memory to the allocator.
 2026|      0|        SanitizerUnpoisonMemoryRegion(slots_, sizeof(slot_type) * capacity_);
 2027|      0|        Deallocate<Layout::Alignment()>(&alloc_ref(), ctrl_, layout.AllocSize());
 2028|      0|        ctrl_ = EmptyGroup();
 2029|      0|        slots_ = nullptr;
 2030|      0|        size_ = 0;
 2031|      0|        capacity_ = 0;
 2032|      0|        growth_left() = 0;
 2033|      0|    }
_ZN5phmap4priv6IsFullEa:
  367|  2.58M|inline bool IsFull(ctrl_t c)           { return c >= static_cast<ctrl_t>(0); }
_ZN5phmap13flat_hash_mapIjiNS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS5_4pairIKjiEEEEEC2Ev:
 4742|  1.01k|    flat_hash_map() {}
_ZN5phmap4priv12raw_hash_mapINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEEC2Ev:
 2385|  1.01k|    raw_hash_map() {}
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEEC2Ev:
 1055|  1.51k|        std::is_nothrow_default_constructible<allocator_type>::value) {}
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE6insertISC_Li0ELi0ELPSC_0EEENSA_INSE_8iteratorEbEEOT_:
 1294|  8.01M|    std::pair<iterator, bool> insert(T&& value) {
 1295|  8.01M|        return emplace(std::forward<T>(value));
 1296|  8.01M|    }
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE7emplaceIJSC_ELi0EEENSA_INSE_8iteratorEbEEDpOT_:
 1433|  8.01M|    std::pair<iterator, bool> emplace(Args&&... args) {
 1434|  8.01M|        return PolicyTraits::apply(EmplaceDecomposable{*this},
 1435|  8.01M|                                   std::forward<Args>(args)...);
 1436|  8.01M|    }
_ZN5phmap4priv17FlatHashMapPolicyIjiE5applyINS0_12raw_hash_setIS2_NS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS9_4pairIKjiEEEEE19EmplaceDecomposableEJSD_EEEDTclsr5phmap4privE13DecomposePairclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSH_DpOSI_:
 4315|  8.01M|    apply(F&& f, Args&&... args) {
 4316|  8.01M|        return phmap::priv::DecomposePair(std::forward<F>(f),
 4317|  8.01M|                                                        std::forward<Args>(args)...);
 4318|  8.01M|    }
_ZN5phmap4priv13DecomposePairINS0_12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS9_4pairIKjiEEEEE19EmplaceDecomposableEJSD_EEEDTclsr15memory_internalE17DecomposePairImplclsr3stdE7forwardIT_Efp_Ecl8PairArgsspclsr3stdE7forwardIT0_Efp0_EEEEOSH_DpOSI_:
 4210|  8.01M|        std::forward<F>(f), PairArgs(std::forward<Args>(args)...))) {
 4211|  8.01M|    return memory_internal::DecomposePairImpl(
 4212|  8.01M|        std::forward<F>(f), PairArgs(std::forward<Args>(args)...));
 4213|  8.01M|}
_ZN5phmap4priv15memory_internal17DecomposePairImplINS0_12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINSA_4pairIKjiEEEEE19EmplaceDecomposableEOSD_NSA_5tupleIJOiEEEEEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEL_ZNSA_19piecewise_constructEEclsr3stdE7declvalINSJ_IJSN_EEEEEclsr3stdE7declvalIT1_EEEEOSM_NSC_ISQ_SR_EE:
  750|  8.01M|DecomposePairImpl(F&& f, std::pair<std::tuple<K>, V> p) {
  751|  8.01M|    const auto& key = std::get<0>(p.first);
  752|  8.01M|    return std::forward<F>(f)(key, std::piecewise_construct, std::move(p.first),
  753|  8.01M|                              std::move(p.second));
  754|  8.01M|}
_ZNK5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE19EmplaceDecomposableclIjJRKNS8_21piecewise_construct_tENS8_5tupleIJOSB_EEENSK_IJOiEEEEEENSA_INSE_8iteratorEbEERKT_DpOT0_:
 1913|  8.01M|        std::pair<iterator, bool> operator()(const K& key, Args&&... args) const {
 1914|  8.01M|            return s.emplace_decomposable(key, s.hash(key), std::forward<Args>(args)...);
 1915|  8.01M|        }
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE20emplace_decomposableIjJRKNS8_21piecewise_construct_tENS8_5tupleIJOSB_EEENSJ_IJOiEEEEEENSA_INSE_8iteratorEbEERKT_mDpOT0_:
 1899|  8.01M|    {
 1900|  8.01M|        size_t offset = _find_key(key, hashval);
 1901|  8.01M|        if (offset == (size_t)-1) {
  ------------------
  |  Branch (1901:13): [True: 536k, False: 7.48M]
  ------------------
 1902|   536k|            offset = prepare_insert(hashval);
 1903|   536k|            emplace_at(offset, std::forward<Args>(args)...);
 1904|   536k|            this->set_ctrl(offset, H2(hashval));
 1905|   536k|            return {iterator_at(offset), true};
 1906|   536k|        }
 1907|  7.48M|        return {iterator_at(offset), false};
 1908|  8.01M|    }
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE9_find_keyIjEEmRKT_m:
 2199|  8.01M|    size_t _find_key(const K& key, size_t hashval) {
 2200|  8.01M|        auto seq = probe(hashval);
 2201|  9.05M|        while (true) {
  ------------------
  |  Branch (2201:16): [Folded - Ignored]
  ------------------
 2202|  9.05M|            Group g{ctrl_ + seq.offset()};
 2203|  10.4M|            for (uint32_t i : g.Match((h2_t)H2(hashval))) {
  ------------------
  |  Branch (2203:29): [True: 10.4M, False: 1.57M]
  ------------------
 2204|  10.4M|                if (PHMAP_PREDICT_TRUE(PolicyTraits::apply(
  ------------------
  |  |  249|  10.4M|    #define PHMAP_PREDICT_TRUE(x) (__builtin_expect(!!(x), 1))
  |  |  ------------------
  |  |  |  Branch (249:35): [True: 7.48M, False: 2.95M]
  |  |  ------------------
  ------------------
 2205|  10.4M|                                          EqualElement<K>{key, eq_ref()},
 2206|  10.4M|                                          PolicyTraits::element(slots_ + seq.offset((size_t)i)))))
 2207|  7.48M|                    return seq.offset((size_t)i);
 2208|  10.4M|            }
 2209|  1.57M|            if (PHMAP_PREDICT_TRUE(g.MatchEmpty())) break;
  ------------------
  |  |  249|  1.57M|    #define PHMAP_PREDICT_TRUE(x) (__builtin_expect(!!(x), 1))
  |  |  ------------------
  |  |  |  Branch (249:35): [True: 536k, False: 1.03M]
  |  |  ------------------
  ------------------
 2210|  1.03M|            seq.next();
 2211|  1.03M|        }
 2212|   536k|        return (size_t)-1;
 2213|  8.01M|    }
_ZNK5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE5probeEm:
 2281|  10.0M|    probe_seq<Group::kWidth> probe(size_t hashval) const {
 2282|  10.0M|        return probe_seq<Group::kWidth>(H1(hashval, ctrl_), capacity_);
 2283|  10.0M|    }
_ZN5phmap4priv2H1EmPKa:
  357|  10.0M|inline size_t H1(size_t hashval, const ctrl_t* ) {
  358|  10.0M|    return (hashval >> 7);
  359|  10.0M|}
_ZN5phmap4priv9probe_seqILm16EEC2Emm:
  148|  10.0M|    probe_seq(size_t hashval, size_t mask) {
  149|  10.0M|        assert(((mask + 1) & mask) == 0 && "not a mask");
  150|  10.0M|        mask_ = mask;
  151|  10.0M|        offset_ = hashval & mask_;
  152|  10.0M|    }
_ZNK5phmap4priv9probe_seqILm16EE6offsetEv:
  153|  11.1M|    size_t offset() const { return offset_; }
_ZN5phmap4priv13GroupSse2ImplC2EPKa:
  407|  11.3M|    explicit GroupSse2Impl(const ctrl_t* pos) {
  408|  11.3M|        ctrl = _mm_loadu_si128(reinterpret_cast<const __m128i*>(pos));
  409|  11.3M|    }
_ZNK5phmap4priv13GroupSse2Impl5MatchEh:
  413|  11.1M|    BitMask<uint32_t, kWidth> Match(h2_t hash) const {
  414|  11.1M|        auto match = _mm_set1_epi8((char)hash);
  415|  11.1M|        return BitMask<uint32_t, kWidth>(
  416|  11.1M|            static_cast<uint32_t>(_mm_movemask_epi8(_mm_cmpeq_epi8(match, ctrl))));
  417|  11.1M|    }
_ZN5phmap4priv7BitMaskIjLi16ELi0EEC2Ej:
  251|  22.3M|    explicit BitMask(T mask) : mask_(mask) {}
_ZNK5phmap4priv7BitMaskIjLi16ELi0EE5beginEv:
  269|  9.57M|    BitMask begin() const { return *this; }
_ZNK5phmap4priv7BitMaskIjLi16ELi0EE3endEv:
  270|  9.57M|    BitMask end() const { return BitMask(0); }
_ZN5phmap4privneERKNS0_7BitMaskIjLi16ELi0EEES4_:
  286|  12.5M|    friend bool operator!=(const BitMask& a, const BitMask& b) {
  287|  12.5M|        return a.mask_ != b.mask_;
  288|  12.5M|    }
_ZNK5phmap4priv7BitMaskIjLi16ELi0EEdeEv:
  259|  10.9M|    uint32_t operator*() const { return LowestBitSet(); }
_ZNK5phmap4priv7BitMaskIjLi16ELi0EE12LowestBitSetEv:
  261|  12.4M|    uint32_t LowestBitSet() const {
  262|  12.4M|        return priv::TrailingZeros(mask_) >> Shift;
  263|  12.4M|    }
_ZN5phmap4priv13TrailingZerosIjEEjT_:
  208|  12.6M|uint32_t TrailingZeros(T x) {
  209|  12.6M|    uint32_t res;
  210|  12.6M|    PHMAP_IF_CONSTEXPR(sizeof(T) == 8)
  ------------------
  |  |  650|  12.6M|    #define PHMAP_IF_CONSTEXPR(expr) if constexpr ((expr))
  |  |  ------------------
  |  |  |  Branch (650:52): [Folded - Ignored]
  |  |  ------------------
  ------------------
  211|      0|        res = base_internal::CountTrailingZerosNonZero64(static_cast<uint64_t>(x));
  212|  12.6M|    else
  213|  12.6M|        res = base_internal::CountTrailingZerosNonZero32(static_cast<uint32_t>(x));
  214|  12.6M|    return res;
  215|  12.6M|}
_ZN5phmap4priv17FlatHashMapPolicyIjiE5applyINS0_12raw_hash_setIS2_NS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS9_4pairIKjiEEEEE12EqualElementIjEEJRSD_EEEDTclsr5phmap4privE13DecomposePairclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSJ_DpOSK_:
 4315|  10.4M|    apply(F&& f, Args&&... args) {
 4316|  10.4M|        return phmap::priv::DecomposePair(std::forward<F>(f),
 4317|  10.4M|                                                        std::forward<Args>(args)...);
 4318|  10.4M|    }
_ZN5phmap4priv13DecomposePairINS0_12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS9_4pairIKjiEEEEE12EqualElementIjEEJRSD_EEEDTclsr15memory_internalE17DecomposePairImplclsr3stdE7forwardIT_Efp_Ecl8PairArgsspclsr3stdE7forwardIT0_Efp0_EEEEOSJ_DpOSK_:
 4210|  10.4M|        std::forward<F>(f), PairArgs(std::forward<Args>(args)...))) {
 4211|  10.4M|    return memory_internal::DecomposePairImpl(
 4212|  10.4M|        std::forward<F>(f), PairArgs(std::forward<Args>(args)...));
 4213|  10.4M|}
_ZN5phmap4priv15memory_internal17DecomposePairImplINS0_12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINSA_4pairIKjiEEEEE12EqualElementIjEERSD_NSA_5tupleIJRKiEEEEEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEL_ZNSA_19piecewise_constructEEclsr3stdE7declvalINSK_IJSP_EEEEEclsr3stdE7declvalIT1_EEEEOSO_NSC_ISS_ST_EE:
  750|  10.4M|DecomposePairImpl(F&& f, std::pair<std::tuple<K>, V> p) {
  751|  10.4M|    const auto& key = std::get<0>(p.first);
  752|  10.4M|    return std::forward<F>(f)(key, std::piecewise_construct, std::move(p.first),
  753|  10.4M|                              std::move(p.second));
  754|  10.4M|}
_ZNK5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE12EqualElementIjEclIjJRKNS8_21piecewise_construct_tENS8_5tupleIJRSB_EEENSL_IJRKiEEEEEEbRKT_DpOT0_:
 1889|  10.4M|        bool operator()(const K2& lhs, Args&&...) const {
 1890|  10.4M|            return eq(lhs, rhs);
 1891|  10.4M|        }
_ZN5phmap4priv8PairArgsIKjiEENSt3__14pairINS3_5tupleIJRKT_EEENS5_IJRKT0_EEEEERKNS4_IS6_SA_EE:
 4188|  11.9M|    const std::pair<F, S>& p) {
 4189|  11.9M|    return PairArgs(p.first, p.second);
 4190|  11.9M|}
_ZN5phmap4priv8PairArgsIRKjRKiEENSt3__14pairINS6_5tupleIJOT_EEENS8_IJOT0_EEEEESA_SD_:
 4181|  11.9M|std::pair<std::tuple<F&&>, std::tuple<S&&>> PairArgs(F&& f, S&& s) {
 4182|  11.9M|  return {std::piecewise_construct, std::forward_as_tuple(std::forward<F>(f)),
 4183|  11.9M|          std::forward_as_tuple(std::forward<S>(s))};
 4184|  11.9M|}
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE6eq_refEv:
 2328|  10.4M|    key_equal& eq_ref() { return std::get<2>(settings_); }
_ZN5phmap4priv17FlatHashMapPolicyIjiE7elementEPNS0_13map_slot_typeIjiEE:
 4322|  12.4M|    static std::pair<const K, V>& element(slot_type* slot) { return slot->value; }
_ZNK5phmap4priv9probe_seqILm16EE6offsetEm:
  154|  19.9M|    size_t offset(size_t i) const { return (offset_ + i) & mask_; }
_ZN5phmap4priv7BitMaskIjLi16ELi0EEppEv:
  253|  2.96M|    BitMask& operator++() {    // ++iterator
  254|  2.96M|        mask_ &= (mask_ - 1);  // clear the least significant bit set
  255|  2.96M|        return *this;
  256|  2.96M|    }
_ZNK5phmap4priv13GroupSse2Impl10MatchEmptyEv:
  421|  1.57M|    BitMask<uint32_t, kWidth> MatchEmpty() const {
  422|       |#if PHMAP_HAVE_SSSE3
  423|       |        // This only works because kEmpty is -128.
  424|       |        return BitMask<uint32_t, kWidth>(
  425|       |            static_cast<uint32_t>(_mm_movemask_epi8(_mm_sign_epi8(ctrl, ctrl))));
  426|       |#else
  427|  1.57M|        return Match(static_cast<h2_t>(kEmpty));
  428|  1.57M|#endif
  429|  1.57M|    }
_ZNK5phmap4priv7BitMaskIjLi16ELi0EEcvbEv:
  258|  3.15M|    explicit operator bool() const { return mask_ != 0; }
_ZN5phmap4priv9probe_seqILm16EE4nextEv:
  156|  1.11M|    void next() {
  157|  1.11M|        index_ += Width;
  158|  1.11M|        offset_ += index_;
  159|  1.11M|        offset_ &= mask_;
  160|  1.11M|    }
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE14prepare_insertEm:
 2223|   536k|    size_t prepare_insert(size_t hashval) PHMAP_ATTRIBUTE_NOINLINE {
 2224|   536k|        auto target = find_first_non_full(hashval);
 2225|   536k|        if (PHMAP_PREDICT_FALSE(growth_left() == 0 &&
  ------------------
  |  |  248|   539k|    #define PHMAP_PREDICT_FALSE(x) (__builtin_expect(x, 0))
  |  |  ------------------
  |  |  |  Branch (248:36): [True: 2.81k, False: 533k]
  |  |  |  Branch (248:54): [True: 2.81k, False: 533k]
  |  |  |  Branch (248:54): [True: 2.81k, False: 0]
  |  |  ------------------
  ------------------
 2226|   536k|                               !IsDeleted(ctrl_[target.offset]))) {
 2227|  2.81k|            rehash_and_grow_if_necessary();
 2228|  2.81k|            target = find_first_non_full(hashval);
 2229|  2.81k|        }
 2230|   536k|        ++size_;
 2231|   536k|        growth_left() -= IsEmpty(ctrl_[target.offset]);
 2232|       |        // set_ctrl(target.offset, H2(hashval));
 2233|   536k|        infoz_.RecordInsert(hashval, target.probe_length);
 2234|   536k|        return target.offset;
 2235|   536k|    }
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE19find_first_non_fullEm:
 2172|  1.49M|    FindInfo find_first_non_full(size_t hashval) {
 2173|  1.49M|        auto seq = probe(hashval);
 2174|  1.57M|        while (true) {
  ------------------
  |  Branch (2174:16): [Folded - Ignored]
  ------------------
 2175|  1.57M|            Group g{ctrl_ + seq.offset()};
 2176|  1.57M|            auto mask = g.MatchEmptyOrDeleted();
 2177|  1.57M|            if (mask) {
  ------------------
  |  Branch (2177:17): [True: 1.49M, False: 80.3k]
  ------------------
 2178|  1.49M|                return {seq.offset((size_t)mask.LowestBitSet()), seq.getindex()};
 2179|  1.49M|            }
 2180|  80.3k|            assert(seq.getindex() < capacity_ && "full table!");
 2181|  80.3k|            seq.next();
 2182|  80.3k|        }
 2183|  1.49M|    }
_ZNK5phmap4priv13GroupSse2Impl19MatchEmptyOrDeletedEv:
  433|  1.57M|    BitMask<uint32_t, kWidth> MatchEmptyOrDeleted() const {
  434|  1.57M|        auto special = _mm_set1_epi8(static_cast<char>(kSentinel));
  435|  1.57M|        return BitMask<uint32_t, kWidth>(
  436|  1.57M|            static_cast<uint32_t>(_mm_movemask_epi8(_mm_cmpgt_epi8_fixed(special, ctrl))));
  437|  1.57M|    }
_ZN5phmap4priv20_mm_cmpgt_epi8_fixedEDv2_xS1_:
  385|  1.78M|inline __m128i _mm_cmpgt_epi8_fixed(__m128i a, __m128i b) {
  386|       |#if defined(__GNUC__) && !defined(__clang__)
  387|       |  #pragma GCC diagnostic push
  388|       |  #pragma GCC diagnostic ignored "-Woverflow"
  389|       |
  390|       |  if (std::is_unsigned<char>::value) {
  391|       |    const __m128i mask = _mm_set1_epi8(static_cast<char>(0x80));
  392|       |    const __m128i diff = _mm_subs_epi8(b, a);
  393|       |    return _mm_cmpeq_epi8(_mm_and_si128(diff, mask), mask);
  394|       |  }
  395|       |
  396|       |  #pragma GCC diagnostic pop
  397|       |#endif
  398|  1.78M|  return _mm_cmpgt_epi8(a, b);
  399|  1.78M|}
_ZNK5phmap4priv9probe_seqILm16EE8getindexEv:
  162|  1.57M|    size_t getindex() const { return index_; }
_ZN5phmap4priv9IsDeletedEa:
  368|  2.81k|inline bool IsDeleted(ctrl_t c)        { return c == kDeleted; }
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE28rehash_and_grow_if_necessaryEv:
 2125|  2.81k|    void rehash_and_grow_if_necessary() {
 2126|  2.81k|        if (capacity_ == 0) {
  ------------------
  |  Branch (2126:13): [True: 470, False: 2.34k]
  ------------------
 2127|    470|            resize(1);
 2128|  2.34k|        } else if (size() <= CapacityToGrowth(capacity()) / 2) {
  ------------------
  |  Branch (2128:20): [True: 0, False: 2.34k]
  ------------------
 2129|       |            // Squash DELETED without growing if there is enough capacity.
 2130|      0|            drop_deletes_without_resize();
 2131|  2.34k|        } else {
 2132|       |            // Otherwise grow the container.
 2133|  2.34k|            resize(capacity_ * 2 + 1);
 2134|  2.34k|        }
 2135|  2.81k|    }
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE6resizeEm:
 2035|  2.81k|    void resize(size_t new_capacity) {
 2036|  2.81k|        assert(IsValidCapacity(new_capacity));
 2037|  2.81k|        auto* old_ctrl = ctrl_;
 2038|  2.81k|        auto* old_slots = slots_;
 2039|  2.81k|        const size_t old_capacity = capacity_;
 2040|  2.81k|        initialize_slots(new_capacity);
 2041|  2.81k|        capacity_ = new_capacity;
 2042|       |
 2043|  1.09M|        for (size_t i = 0; i != old_capacity; ++i) {
  ------------------
  |  Branch (2043:28): [True: 1.09M, False: 2.81k]
  ------------------
 2044|  1.09M|            if (IsFull(old_ctrl[i])) {
  ------------------
  |  Branch (2044:17): [True: 958k, False: 135k]
  ------------------
 2045|   958k|                size_t hashval = PolicyTraits::apply(HashElement{hash_ref()},
 2046|   958k|                                                     PolicyTraits::element(old_slots + i));
 2047|   958k|                auto target = find_first_non_full(hashval);
 2048|   958k|                size_t new_i = target.offset;
 2049|   958k|                set_ctrl(new_i, H2(hashval));
 2050|   958k|                PolicyTraits::transfer(&alloc_ref(), slots_ + new_i, old_slots + i);
 2051|   958k|            }
 2052|  1.09M|        }
 2053|  2.81k|        if (old_capacity) {
  ------------------
  |  Branch (2053:13): [True: 2.34k, False: 470]
  ------------------
 2054|  2.34k|            SanitizerUnpoisonMemoryRegion(old_slots,
 2055|  2.34k|                                          sizeof(slot_type) * old_capacity);
 2056|  2.34k|            auto layout = MakeLayout(old_capacity);
 2057|  2.34k|            Deallocate<Layout::Alignment()>(&alloc_ref(), old_ctrl,
 2058|  2.34k|                                            layout.AllocSize());
 2059|  2.34k|        }
 2060|  2.81k|    }
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE16initialize_slotsEm:
 1993|  2.95k|    void initialize_slots(size_t new_capacity) {
 1994|  2.95k|        assert(new_capacity);
 1995|  2.95k|        if (std::is_same<SlotAlloc, std::allocator<slot_type>>::value && 
  ------------------
  |  Branch (1995:13): [Folded - Ignored]
  ------------------
 1996|  2.95k|            slots_ == nullptr) {
  ------------------
  |  Branch (1996:13): [True: 607, False: 2.34k]
  ------------------
 1997|    607|            infoz_ = Sample();
 1998|    607|        }
 1999|       |
 2000|  2.95k|        auto layout = MakeLayout(new_capacity);
 2001|  2.95k|        char* mem = static_cast<char*>(
 2002|  2.95k|            Allocate<Layout::Alignment()>(&alloc_ref(), layout.AllocSize()));
 2003|  2.95k|        ctrl_ = reinterpret_cast<ctrl_t*>(layout.template Pointer<0>(mem));
 2004|  2.95k|        slots_ = layout.template Pointer<1>(mem);
 2005|  2.95k|        reset_ctrl(new_capacity);
 2006|  2.95k|        reset_growth_left(new_capacity);
 2007|  2.95k|        infoz_.RecordStorageChanged(size_, new_capacity);
 2008|  2.95k|    }
phashmap_fuzz.cc:_ZN5phmap4privL6SampleEv:
  678|    607|static inline HashtablezInfoHandle Sample() { return HashtablezInfoHandle(); }
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE10reset_ctrlEm:
 2286|  2.95k|    void reset_ctrl(size_t new_capacity) {
 2287|  2.95k|        std::memset(ctrl_, kEmpty, new_capacity + Group::kWidth);
 2288|  2.95k|        ctrl_[new_capacity] = kSentinel;
 2289|  2.95k|        SanitizerPoisonMemoryRegion(slots_, sizeof(slot_type) * new_capacity);
 2290|  2.95k|    }
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE17reset_growth_leftEm:
 2292|  2.95k|    void reset_growth_left(size_t new_capacity) {
 2293|  2.95k|        growth_left() = CapacityToGrowth(new_capacity) - size_;
 2294|  2.95k|    }
_ZN5phmap4priv20HashtablezInfoHandle20RecordStorageChangedEmm:
  670|  2.95k|    inline void RecordStorageChanged(size_t , size_t ) {}
_ZN5phmap4priv17FlatHashMapPolicyIjiE5applyINS0_12raw_hash_setIS2_NS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS9_4pairIKjiEEEEE11HashElementEJRSD_EEEDTclsr5phmap4privE13DecomposePairclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSI_DpOSJ_:
 4315|   958k|    apply(F&& f, Args&&... args) {
 4316|   958k|        return phmap::priv::DecomposePair(std::forward<F>(f),
 4317|   958k|                                                        std::forward<Args>(args)...);
 4318|   958k|    }
_ZN5phmap4priv13DecomposePairINS0_12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS9_4pairIKjiEEEEE11HashElementEJRSD_EEEDTclsr15memory_internalE17DecomposePairImplclsr3stdE7forwardIT_Efp_Ecl8PairArgsspclsr3stdE7forwardIT0_Efp0_EEEEOSI_DpOSJ_:
 4210|   958k|        std::forward<F>(f), PairArgs(std::forward<Args>(args)...))) {
 4211|   958k|    return memory_internal::DecomposePairImpl(
 4212|   958k|        std::forward<F>(f), PairArgs(std::forward<Args>(args)...));
 4213|   958k|}
_ZN5phmap4priv15memory_internal17DecomposePairImplINS0_12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINSA_4pairIKjiEEEEE11HashElementERSD_NSA_5tupleIJRKiEEEEEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEL_ZNSA_19piecewise_constructEEclsr3stdE7declvalINSJ_IJSO_EEEEEclsr3stdE7declvalIT1_EEEEOSN_NSC_ISR_SS_EE:
  750|  1.47M|DecomposePairImpl(F&& f, std::pair<std::tuple<K>, V> p) {
  751|  1.47M|    const auto& key = std::get<0>(p.first);
  752|  1.47M|    return std::forward<F>(f)(key, std::piecewise_construct, std::move(p.first),
  753|  1.47M|                              std::move(p.second));
  754|  1.47M|}
_ZNK5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE11HashElementclIjJRKNS8_21piecewise_construct_tENS8_5tupleIJRSB_EEENSK_IJRKiEEEEEEmRKT_DpOT0_:
 1879|  1.47M|        size_t operator()(const K& key, Args&&...) const {
 1880|  1.47M|            return phmap_mix<sizeof(size_t)>()(h(key));
 1881|  1.47M|        }
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE8hash_refEv:
 2326|   959k|    hasher& hash_ref() { return std::get<1>(settings_); }
_ZN5phmap4priv17FlatHashMapPolicyIjiE8transferINSt3__19allocatorINS4_4pairIKjiEEEEEEvPT_PNS0_13map_slot_typeIjiEESE_:
 4308|   958k|                         slot_type* old_slot) {
 4309|   958k|        slot_policy::transfer(alloc, new_slot, old_slot);
 4310|   958k|    }
_ZNK5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE4sizeEv:
 1261|  3.35k|    size_t size() const { return size_; }
_ZN5phmap4priv16CapacityToGrowthEm:
  577|  5.29k|{
  578|  5.29k|    assert(IsValidCapacity(capacity));
  579|       |    // `capacity*7/8`
  580|  5.29k|    PHMAP_IF_CONSTEXPR (Group::kWidth == 8) {
  ------------------
  |  |  650|  5.29k|    #define PHMAP_IF_CONSTEXPR(expr) if constexpr ((expr))
  |  |  ------------------
  |  |  |  Branch (650:52): [Folded - Ignored]
  |  |  ------------------
  ------------------
  581|      0|        if (capacity == 7) {
  ------------------
  |  Branch (581:13): [True: 0, False: 0]
  ------------------
  582|       |            // x-x/8 does not work when x==7.
  583|      0|            return 6;
  584|      0|        }
  585|      0|    }
  586|  5.29k|    return capacity - capacity / 8;
  587|  5.29k|}
_ZNK5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE8capacityEv:
 1262|  2.69k|    size_t capacity() const { return capacity_; }
_ZN5phmap4priv7IsEmptyEa:
  366|   536k|inline bool IsEmpty(ctrl_t c)          { return c == kEmpty; }
_ZN5phmap4priv20HashtablezInfoHandle12RecordInsertEmm:
  672|   536k|    inline void RecordInsert(size_t , size_t ) {}
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE10emplace_atIJRKNS8_21piecewise_construct_tENS8_5tupleIJOSB_EEENSJ_IJOiEEEEEEvmDpOT_:
 2246|   536k|    void emplace_at(size_t i, Args&&... args) {
 2247|   536k|        PolicyTraits::construct(&alloc_ref(), slots_ + i,
 2248|   536k|                                std::forward<Args>(args)...);
 2249|       |        
 2250|       |#ifdef PHMAP_CHECK_CONSTRUCTED_VALUE
 2251|       |        // this check can be costly, so do it only when requested
 2252|       |        assert(PolicyTraits::apply(FindElement{*this}, *iterator_at(i)) ==
 2253|       |               iterator_at(i) &&
 2254|       |               "constructed value does not match the lookup key");
 2255|       |#endif
 2256|   536k|    }
_ZN5phmap4priv17FlatHashMapPolicyIjiE9constructINSt3__19allocatorINS4_4pairIKjiEEEEJRKNS4_21piecewise_construct_tENS4_5tupleIJOS7_EEENSD_IJOiEEEEEEvPT_PNS0_13map_slot_typeIjiEEDpOT0_:
 4297|   536k|    static void construct(Allocator* alloc, slot_type* slot, Args&&... args) {
 4298|   536k|        slot_policy::construct(alloc, slot, std::forward<Args>(args)...);
 4299|   536k|    }
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE8set_ctrlEma:
 2264|  1.49M|    void set_ctrl(size_t i, ctrl_t h) {
 2265|  1.49M|        assert(i < capacity_);
 2266|       |
 2267|  1.49M|        if (IsFull(h)) {
  ------------------
  |  Branch (2267:13): [True: 1.49M, False: 0]
  ------------------
 2268|  1.49M|            SanitizerUnpoisonObject(slots_ + i);
 2269|  1.49M|        } else {
 2270|      0|            SanitizerPoisonObject(slots_ + i);
 2271|      0|        }
 2272|       |
 2273|  1.49M|        ctrl_[i] = h;
 2274|  1.49M|        ctrl_[((i - Group::kWidth) & capacity_) + 1 +
 2275|  1.49M|              ((Group::kWidth - 1) & capacity_)] = h;
 2276|  1.49M|    }
_ZN5phmap4priv2H2Em:
  364|  11.0M|inline ctrl_t H2(size_t hashval)       { return (ctrl_t)(hashval & 0x7F); }
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE11iterator_atEm:
 2258|  8.01M|    iterator iterator_at(size_t i) { return {ctrl_ + i, slots_ + i}; }
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE8iteratorC2EPaPNS0_13map_slot_typeIjiEE:
  989|  8.01M|        iterator(ctrl_t* ctrl, slot_type* slot) : ctrl_(ctrl), slot_(slot) {}
_ZNK5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE4hashIjEEmRKT_:
 1841|  8.01M|    size_t hash(const K& key) const {
 1842|  8.01M|        return HashElement{hash_ref()}(key);
 1843|  8.01M|    }
_ZNK5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE8hash_refEv:
 2327|  8.54M|    const hasher& hash_ref() const { return std::get<1>(settings_); }
_ZNK5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE11HashElementclIjJEEEmRKT_DpOT0_:
 1879|  8.01M|        size_t operator()(const K& key, Args&&...) const {
 1880|  8.01M|            return phmap_mix<sizeof(size_t)>()(h(key));
 1881|  8.01M|        }
_ZN5phmap4priv8PairArgsIKjiEENSt3__14pairINS3_5tupleIJOT_EEENS5_IJOT0_EEEEEONS4_IS6_S9_EE:
 4193|  8.01M|std::pair<std::tuple<F&&>, std::tuple<S&&>> PairArgs(std::pair<F, S>&& p) {
 4194|  8.01M|    return PairArgs(std::forward<F>(p.first), std::forward<S>(p.second));
 4195|  8.01M|}
_ZN5phmap4priv8PairArgsIKjiEENSt3__14pairINS3_5tupleIJOT_EEENS5_IJOT0_EEEEES7_SA_:
 4181|  8.01M|std::pair<std::tuple<F&&>, std::tuple<S&&>> PairArgs(F&& f, S&& s) {
 4182|  8.01M|  return {std::piecewise_construct, std::forward_as_tuple(std::forward<F>(f)),
 4183|  8.01M|          std::forward_as_tuple(std::forward<S>(s))};
 4184|  8.01M|}
_ZNK5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE11growth_leftEv:
 2298|    470|    const size_t& growth_left() const { return std::get<0>(settings_); }
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE4swapERSE_:
 1668|    506|         IsNoThrowSwappable<allocator_type>(typename AllocTraits::propagate_on_container_swap{}))) {
 1669|    506|        using std::swap;
 1670|    506|        swap(ctrl_, that.ctrl_);
 1671|    506|        swap(slots_, that.slots_);
 1672|    506|        swap(size_, that.size_);
 1673|    506|        swap(capacity_, that.capacity_);
 1674|    506|        swap(growth_left(), that.growth_left());
 1675|    506|        swap(hash_ref(), that.hash_ref());
 1676|    506|        swap(eq_ref(), that.eq_ref());
 1677|    506|        swap(infoz_, that.infoz_);
 1678|    506|        SwapAlloc(alloc_ref(), that.alloc_ref(), typename AllocTraits::propagate_on_container_swap{});
 1679|    506|    }
_ZN5phmap4priv4swapERNS0_20HashtablezInfoHandleES2_:
  675|    506|                            HashtablezInfoHandle& ) noexcept {}
_ZN5phmap4priv9SwapAllocINSt3__19allocatorINS2_4pairIKjiEEEEEEvRT_S9_NS2_17integral_constantIbLb0EEE:
  141|    506|               std::false_type /* propagate_on_container_swap */) {}
_ZN5phmap4priveqERKNS0_12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEEESG_:
 1820|    506|    friend bool operator==(const raw_hash_set& a, const raw_hash_set& b) {
 1821|    506|        if (a.size() != b.size()) return false;
  ------------------
  |  Branch (1821:13): [True: 333, False: 173]
  ------------------
 1822|    173|        const raw_hash_set* outer = &a;
 1823|    173|        const raw_hash_set* inner = &b;
 1824|    173|        if (outer->capacity() > inner->capacity()) 
  ------------------
  |  Branch (1824:13): [True: 0, False: 173]
  ------------------
 1825|      0|            std::swap(outer, inner);
 1826|    173|        for (const value_type& elem : *outer)
  ------------------
  |  Branch (1826:37): [True: 521k, False: 42]
  ------------------
 1827|   521k|            if (!inner->has_element(elem)) return false;
  ------------------
  |  Branch (1827:17): [True: 131, False: 521k]
  ------------------
 1828|     42|        return true;
 1829|    173|    }
_ZNK5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE5beginEv:
 1253|    173|    const_iterator begin() const {
 1254|    173|        return const_cast<raw_hash_set*>(this)->begin();
 1255|    173|    }
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE5beginEv:
 1239|    173|    iterator begin() {
 1240|    173|        auto it = iterator_at(0);
 1241|    173|        it.skip_empty_or_deleted();
 1242|    173|        return it;
 1243|    173|    }
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE8iterator21skip_empty_or_deletedEv:
  991|   521k|        void skip_empty_or_deleted() {
  992|   727k|            while (IsEmptyOrDeleted(*ctrl_)) {
  ------------------
  |  Branch (992:20): [True: 206k, False: 521k]
  ------------------
  993|       |                // ctrl is not necessarily aligned to Group::kWidth. It is also likely
  994|       |                // to read past the space for ctrl bytes and into slots. This is ok
  995|       |                // because ctrl has sizeof() == 1 and slot has sizeof() >= 1 so there
  996|       |                // is no way to read outside the combined slot array.
  997|   206k|                uint32_t shift = Group{ctrl_}.CountLeadingEmptyOrDeleted();
  998|   206k|                ctrl_ += shift;
  999|   206k|                slot_ += shift;
 1000|   206k|            }
 1001|   521k|        }
_ZN5phmap4priv16IsEmptyOrDeletedEa:
  369|   728k|inline bool IsEmptyOrDeleted(ctrl_t c) { return c < kSentinel; }
_ZNK5phmap4priv13GroupSse2Impl26CountLeadingEmptyOrDeletedEv:
  441|   206k|    uint32_t CountLeadingEmptyOrDeleted() const {
  442|   206k|        auto special = _mm_set1_epi8(static_cast<char>(kSentinel));
  443|   206k|        return TrailingZeros(
  444|   206k|            static_cast<uint32_t>(_mm_movemask_epi8(_mm_cmpgt_epi8_fixed(special, ctrl)) + 1));
  445|   206k|    }
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE14const_iteratorC2ENSE_8iteratorE:
 1024|    346|        const_iterator(iterator i) : inner_(std::move(i)) {}
_ZNK5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE3endEv:
 1256|    173|    const_iterator end() const { return const_cast<raw_hash_set*>(this)->end(); }
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE3endEv:
 1245|    173|    {
 1246|       |#if 0 // PHMAP_BIDIRECTIONAL
 1247|       |        return iterator_at(capacity_); 
 1248|       |#else
 1249|    173|        return {ctrl_ + capacity_};
 1250|    173|#endif
 1251|    173|    }
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE8iteratorC2EPa:
  988|    173|        iterator(ctrl_t* ctrl) : ctrl_(ctrl) {}  // for end()
_ZN5phmap4privneERKNS0_12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE14const_iteratorESH_:
 1038|   521k|        friend bool operator!=(const const_iterator& a, const const_iterator& b) {
 1039|   521k|            return !(a == b);
 1040|   521k|        }
_ZN5phmap4priveqERKNS0_12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE14const_iteratorESH_:
 1035|   521k|        friend bool operator==(const const_iterator& a, const const_iterator& b) {
 1036|   521k|            return a.inner_ == b.inner_;
 1037|   521k|        }
_ZN5phmap4priveqERKNS0_12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE8iteratorESH_:
  980|   521k|        friend bool operator==(const iterator& a, const iterator& b) {
  981|   521k|            return a.ctrl_ == b.ctrl_;
  982|   521k|        }
_ZNK5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE14const_iteratordeEv:
 1026|   521k|        reference operator*() const { return *inner_; }
_ZNK5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE8iteratordeEv:
  942|   521k|        reference operator*() const { return PolicyTraits::element(slot_); }
_ZNK5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE11has_elementERKSC_:
 2153|   521k|    bool has_element(const value_type& elem) const {
 2154|   521k|        size_t hashval = PolicyTraits::apply(HashElement{hash_ref()}, elem);
 2155|   521k|        return has_element(elem, hashval);
 2156|   521k|    }
_ZN5phmap4priv17FlatHashMapPolicyIjiE5applyINS0_12raw_hash_setIS2_NS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS9_4pairIKjiEEEEE11HashElementEJRKSD_EEEDTclsr5phmap4privE13DecomposePairclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSJ_DpOSK_:
 4315|   521k|    apply(F&& f, Args&&... args) {
 4316|   521k|        return phmap::priv::DecomposePair(std::forward<F>(f),
 4317|   521k|                                                        std::forward<Args>(args)...);
 4318|   521k|    }
_ZN5phmap4priv13DecomposePairINS0_12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS9_4pairIKjiEEEEE11HashElementEJRKSD_EEEDTclsr15memory_internalE17DecomposePairImplclsr3stdE7forwardIT_Efp_Ecl8PairArgsspclsr3stdE7forwardIT0_Efp0_EEEEOSJ_DpOSK_:
 4210|   521k|        std::forward<F>(f), PairArgs(std::forward<Args>(args)...))) {
 4211|   521k|    return memory_internal::DecomposePairImpl(
 4212|   521k|        std::forward<F>(f), PairArgs(std::forward<Args>(args)...));
 4213|   521k|}
_ZNK5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE11has_elementERKSC_m:
 2137|   521k|    bool has_element(const value_type& elem, size_t hashval) const {
 2138|   521k|        auto seq = probe(hashval);
 2139|   522k|        while (true) {
  ------------------
  |  Branch (2139:16): [Folded - Ignored]
  ------------------
 2140|   522k|            Group g{ctrl_ + seq.offset()};
 2141|   523k|            for (uint32_t i : g.Match((h2_t)H2(hashval))) {
  ------------------
  |  Branch (2141:29): [True: 523k, False: 1.60k]
  ------------------
 2142|   523k|                if (PHMAP_PREDICT_TRUE(PolicyTraits::element(slots_ + seq.offset((size_t)i)) ==
  ------------------
  |  |  249|   523k|    #define PHMAP_PREDICT_TRUE(x) (__builtin_expect(!!(x), 1))
  |  |  ------------------
  |  |  |  Branch (249:35): [True: 521k, False: 2.56k]
  |  |  ------------------
  ------------------
 2143|   523k|                                      elem))
 2144|   521k|                    return true;
 2145|   523k|            }
 2146|  1.60k|            if (PHMAP_PREDICT_TRUE(g.MatchEmpty())) return false;
  ------------------
  |  |  249|  1.60k|    #define PHMAP_PREDICT_TRUE(x) (__builtin_expect(!!(x), 1))
  |  |  ------------------
  |  |  |  Branch (249:35): [True: 131, False: 1.46k]
  |  |  ------------------
  ------------------
 2147|  1.46k|            seq.next();
 2148|  1.46k|            assert(seq.getindex() < capacity_ && "full table!");
 2149|  1.46k|        }
 2150|      0|        return false;
 2151|   521k|    }
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE14const_iteratorppEv:
 1029|   521k|        const_iterator& operator++() {
 1030|   521k|            ++inner_;
 1031|   521k|            return *this;
 1032|   521k|        }
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE8iteratorppEv:
  948|   521k|        iterator& operator++() {
  949|   521k|            ++ctrl_;
  950|   521k|            ++slot_;
  951|   521k|            skip_empty_or_deleted();
  952|   521k|            return *this;
  953|   521k|        }
_ZN5phmap13flat_hash_mapINSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEES7_NS_4priv13StringHashEqTIcE4HashENSA_2EqENS5_INS1_4pairIKS7_S7_EEEEEC2Ev:
 4742|    506|    flat_hash_map() {}
_ZN5phmap4priv12raw_hash_mapINS0_17FlatHashMapPolicyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEES9_EENS0_13StringHashEqTIcE4HashENSC_2EqENS7_INS3_4pairIKS9_S9_EEEEEC2Ev:
 2385|    506|    raw_hash_map() {}
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEES9_EENS0_13StringHashEqTIcE4HashENSC_2EqENS7_INS3_4pairIKS9_S9_EEEEEC2Ev:
 1055|    506|        std::is_nothrow_default_constructible<allocator_type>::value) {}
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEES9_EENS0_13StringHashEqTIcE4HashENSC_2EqENS7_INS3_4pairIKS9_S9_EEEEE5beginEv:
 1239|    506|    iterator begin() {
 1240|    506|        auto it = iterator_at(0);
 1241|    506|        it.skip_empty_or_deleted();
 1242|    506|        return it;
 1243|    506|    }
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEES9_EENS0_13StringHashEqTIcE4HashENSC_2EqENS7_INS3_4pairIKS9_S9_EEEEE11iterator_atEm:
 2258|    506|    iterator iterator_at(size_t i) { return {ctrl_ + i, slots_ + i}; }
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEES9_EENS0_13StringHashEqTIcE4HashENSC_2EqENS7_INS3_4pairIKS9_S9_EEEEE8iteratorC2EPaPNS0_13map_slot_typeIS9_S9_EE:
  989|    506|        iterator(ctrl_t* ctrl, slot_type* slot) : ctrl_(ctrl), slot_(slot) {}
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEES9_EENS0_13StringHashEqTIcE4HashENSC_2EqENS7_INS3_4pairIKS9_S9_EEEEE8iterator21skip_empty_or_deletedEv:
  991|    506|        void skip_empty_or_deleted() {
  992|    506|            while (IsEmptyOrDeleted(*ctrl_)) {
  ------------------
  |  Branch (992:20): [True: 0, False: 506]
  ------------------
  993|       |                // ctrl is not necessarily aligned to Group::kWidth. It is also likely
  994|       |                // to read past the space for ctrl bytes and into slots. This is ok
  995|       |                // because ctrl has sizeof() == 1 and slot has sizeof() >= 1 so there
  996|       |                // is no way to read outside the combined slot array.
  997|      0|                uint32_t shift = Group{ctrl_}.CountLeadingEmptyOrDeleted();
  998|      0|                ctrl_ += shift;
  999|      0|                slot_ += shift;
 1000|      0|            }
 1001|    506|        }
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEES9_EENS0_13StringHashEqTIcE4HashENSC_2EqENS7_INS3_4pairIKS9_S9_EEEEE3endEv:
 1245|    506|    {
 1246|       |#if 0 // PHMAP_BIDIRECTIONAL
 1247|       |        return iterator_at(capacity_); 
 1248|       |#else
 1249|    506|        return {ctrl_ + capacity_};
 1250|    506|#endif
 1251|    506|    }
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEES9_EENS0_13StringHashEqTIcE4HashENSC_2EqENS7_INS3_4pairIKS9_S9_EEEEE8iteratorC2EPa:
  988|    506|        iterator(ctrl_t* ctrl) : ctrl_(ctrl) {}  // for end()
_ZN5phmap4privneERKNS0_12raw_hash_setINS0_17FlatHashMapPolicyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEES9_EENS0_13StringHashEqTIcE4HashENSC_2EqENS7_INS3_4pairIKS9_S9_EEEEE8iteratorESM_:
  983|    506|        friend bool operator!=(const iterator& a, const iterator& b) {
  984|    506|            return !(a == b);
  985|    506|        }
_ZN5phmap4priveqERKNS0_12raw_hash_setINS0_17FlatHashMapPolicyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEES9_EENS0_13StringHashEqTIcE4HashENSC_2EqENS7_INS3_4pairIKS9_S9_EEEEE8iteratorESM_:
  980|    506|        friend bool operator==(const iterator& a, const iterator& b) {
  981|    506|            return a.ctrl_ == b.ctrl_;
  982|    506|        }

_ZN5phmap4priv6LayoutIJaNS0_13map_slot_typeIjiEEEEC2Emm:
 4164|  5.90k|        : internal_layout::LayoutType<sizeof...(Ts), Ts...>(sizes...) {}
_ZN5phmap4priv15internal_layout10LayoutImplINSt3__15tupleIJaNS0_13map_slot_typeIjiEEEEENS_16integer_sequenceImJLm0ELm1EEEES9_EC2Emm:
 3869|  5.90k|        : size_{sizes...} {}
_ZN5phmap4priv29SanitizerUnpoisonMemoryRegionEPKvm:
 4231|  1.49M|inline void SanitizerUnpoisonMemoryRegion(const void* m, size_t s) {
 4232|       |#ifdef ADDRESS_SANITIZER
 4233|       |    ASAN_UNPOISON_MEMORY_REGION(m, s);
 4234|       |#endif
 4235|       |#ifdef MEMORY_SANITIZER
 4236|       |    __msan_unpoison(m, s);
 4237|       |#endif
 4238|  1.49M|    (void)m;
 4239|  1.49M|    (void)s;
 4240|  1.49M|}
_ZN5phmap4priv10DeallocateILm4ENSt3__19allocatorINS2_4pairIKjiEEEEEEvPT0_Pvm:
 4203|  2.95k|void Deallocate(Alloc* alloc, void* p, size_t n) {
 4204|  2.95k|  static_assert(Alignment > 0, "");
 4205|  2.95k|  assert(n && "n must be positive");
 4206|  2.95k|  struct alignas(Alignment) M {};
 4207|  2.95k|  using A = typename phmap::allocator_traits<Alloc>::template rebind_alloc<M>;
 4208|  2.95k|  using AT = typename phmap::allocator_traits<Alloc>::template rebind_traits<M>;
 4209|  2.95k|  A mem_alloc(*alloc);
 4210|  2.95k|  AT::deallocate(mem_alloc, static_cast<M*>(p),
 4211|  2.95k|                 (n + sizeof(M) - 1) / sizeof(M));
 4212|  2.95k|}
_ZN5phmap16allocator_traitsINSt3__19allocatorIZNS_4priv10DeallocateILm4ENS2_INS1_4pairIKjiEEEEEEvPT0_PvmE1MEEE10deallocateERSD_PSC_m:
 1486|  2.95k|                           size_type n) {
 1487|  2.95k|        a.deallocate(p, n);
 1488|  2.95k|    }
_ZNK5phmap4priv15internal_layout10LayoutImplINSt3__15tupleIJaNS0_13map_slot_typeIjiEEEEENS_16integer_sequenceImJLm0ELm1EEEES9_E9AllocSizeEv:
 4084|  5.90k|    constexpr size_t AllocSize() const {
 4085|  5.90k|        static_assert(NumTypes == NumSizes, "You must specify sizes of all fields");
 4086|  5.90k|        return Offset<NumTypes - 1>() +
 4087|  5.90k|            SizeOf<ElementType<NumTypes - 1>>::value * size_[NumTypes - 1];
 4088|  5.90k|    }
_ZNK5phmap4priv15internal_layout10LayoutImplINSt3__15tupleIJaNS0_13map_slot_typeIjiEEEEENS_16integer_sequenceImJLm0ELm1EEEES9_E6OffsetILm1ELi0EEEmv:
 3891|  8.85k|        constexpr size_t Offset() const {
 3892|  8.85k|        static_assert(N < NumOffsets, "Index out of bounds");
 3893|  8.85k|        return adl_barrier::Align(
 3894|  8.85k|            Offset<N - 1>() + SizeOf<ElementType<N - 1>>::value * size_[N - 1],
 3895|  8.85k|            ElementAlignment<N>::value);
 3896|  8.85k|    }
_ZN5phmap4priv15internal_layout11adl_barrier5AlignEmm:
 3785|  8.85k|constexpr size_t Align(size_t n, size_t m) { return (n + m - 1) & ~(m - 1); }
_ZNK5phmap4priv15internal_layout10LayoutImplINSt3__15tupleIJaNS0_13map_slot_typeIjiEEEEENS_16integer_sequenceImJLm0ELm1EEEES9_E6OffsetILm0ELi0EEEmv:
 3886|  11.8k|        constexpr size_t Offset() const {
 3887|  11.8k|        return 0;
 3888|  11.8k|    }
_ZN5phmap4priv18hash_policy_traitsINS0_17FlatHashMapPolicyIjiEEvE5applyINS0_12raw_hash_setIS3_NS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINSB_4pairIKjiEEEEE19EmplaceDecomposableEJSF_ES3_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSK_DpOSL_:
  547|  8.01M|        -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  548|  8.01M|        return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  549|  8.01M|    }
_ZN5phmap4priv18hash_policy_traitsINS0_17FlatHashMapPolicyIjiEEvE5applyINS0_12raw_hash_setIS3_NS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINSB_4pairIKjiEEEEE12EqualElementIjEEJRSF_ES3_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSM_DpOSN_:
  547|  10.4M|        -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  548|  10.4M|        return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  549|  10.4M|    }
_ZNK5phmap7EqualToIjEclERKjS3_:
   78|  10.4M|    {
   79|  10.4M|        return std::equal_to<T>()(a, b);
   80|  10.4M|    }
_ZN5phmap4priv18hash_policy_traitsINS0_17FlatHashMapPolicyIjiEEvE7elementIS3_EEDTclsrT_7elementfp_EEPNS0_13map_slot_typeIjiEE:
  501|  12.4M|    static auto element(slot_type* slot) -> decltype(P::element(slot)) {
  502|  12.4M|        return P::element(slot);
  503|  12.4M|    }
_ZN5phmap4priv8AllocateILm4ENSt3__19allocatorINS2_4pairIKjiEEEEEEPvPT0_m:
 4185|  2.95k|void* Allocate(Alloc* alloc, size_t n) {
 4186|  2.95k|  static_assert(Alignment > 0, "");
 4187|  2.95k|  assert(n && "n must be positive");
 4188|  2.95k|  struct alignas(Alignment) M {};
 4189|  2.95k|  using A = typename phmap::allocator_traits<Alloc>::template rebind_alloc<M>;
 4190|  2.95k|  using AT = typename phmap::allocator_traits<Alloc>::template rebind_traits<M>;
 4191|  2.95k|  A mem_alloc(*alloc);
 4192|  2.95k|  void* p = AT::allocate(mem_alloc, (n + sizeof(M) - 1) / sizeof(M));
 4193|  2.95k|  assert(reinterpret_cast<uintptr_t>(p) % Alignment == 0 &&
 4194|  2.95k|         "allocator does not respect alignment");
 4195|  2.95k|  return p;
 4196|  2.95k|}
_ZN5phmap16allocator_traitsINSt3__19allocatorIZNS_4priv8AllocateILm4ENS2_INS1_4pairIKjiEEEEEEPvPT0_mE1MEEE8allocateERSD_m:
 1471|  2.95k|                            size_type n) {
 1472|  2.95k|        return a.allocate(n);
 1473|  2.95k|    }
_ZNK5phmap4priv15internal_layout10LayoutImplINSt3__15tupleIJaNS0_13map_slot_typeIjiEEEEENS_16integer_sequenceImJLm0ELm1EEEES9_E7PointerILm0EcEEPNS3_11conditionalIXsr3std8is_constIT0_EE5valueEKNS3_13tuple_elementIXT_ES7_E4typeESG_E4typeEPSD_:
 3962|  2.95k|        CopyConst<Char, ElementType<N>>* Pointer(Char* p) const {
 3963|  2.95k|        using C = typename std::remove_const<Char>::type;
 3964|  2.95k|        static_assert(
 3965|  2.95k|            std::is_same<C, char>() || std::is_same<C, unsigned char>() ||
 3966|  2.95k|            std::is_same<C, signed char>(),
 3967|  2.95k|            "The argument must be a pointer to [const] [signed|unsigned] char");
 3968|  2.95k|        constexpr size_t alignment = Alignment();
 3969|  2.95k|        (void)alignment;
 3970|  2.95k|        assert(reinterpret_cast<uintptr_t>(p) % alignment == 0);
 3971|  2.95k|        return reinterpret_cast<CopyConst<Char, ElementType<N>>*>(p + Offset<N>());
 3972|  2.95k|    }
_ZNK5phmap4priv15internal_layout10LayoutImplINSt3__15tupleIJaNS0_13map_slot_typeIjiEEEEENS_16integer_sequenceImJLm0ELm1EEEES9_E7PointerILm1EcEEPNS3_11conditionalIXsr3std8is_constIT0_EE5valueEKNS3_13tuple_elementIXT_ES7_E4typeESG_E4typeEPSD_:
 3962|  2.95k|        CopyConst<Char, ElementType<N>>* Pointer(Char* p) const {
 3963|  2.95k|        using C = typename std::remove_const<Char>::type;
 3964|  2.95k|        static_assert(
 3965|  2.95k|            std::is_same<C, char>() || std::is_same<C, unsigned char>() ||
 3966|  2.95k|            std::is_same<C, signed char>(),
 3967|  2.95k|            "The argument must be a pointer to [const] [signed|unsigned] char");
 3968|  2.95k|        constexpr size_t alignment = Alignment();
 3969|  2.95k|        (void)alignment;
 3970|  2.95k|        assert(reinterpret_cast<uintptr_t>(p) % alignment == 0);
 3971|  2.95k|        return reinterpret_cast<CopyConst<Char, ElementType<N>>*>(p + Offset<N>());
 3972|  2.95k|    }
_ZN5phmap4priv27SanitizerPoisonMemoryRegionEPKvm:
 4220|  2.95k|inline void SanitizerPoisonMemoryRegion(const void* m, size_t s) {
 4221|       |#ifdef ADDRESS_SANITIZER
 4222|       |    ASAN_POISON_MEMORY_REGION(m, s);
 4223|       |#endif
 4224|       |#ifdef MEMORY_SANITIZER
 4225|       |    __msan_poison(m, s);
 4226|       |#endif
 4227|  2.95k|    (void)m;
 4228|  2.95k|    (void)s;
 4229|  2.95k|}
_ZN5phmap4priv18hash_policy_traitsINS0_17FlatHashMapPolicyIjiEEvE5applyINS0_12raw_hash_setIS3_NS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINSB_4pairIKjiEEEEE11HashElementEJRSF_ES3_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSL_DpOSM_:
  547|   958k|        -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  548|   958k|        return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  549|   958k|    }
_ZN5phmap4priv18hash_policy_traitsINS0_17FlatHashMapPolicyIjiEEvE8transferINSt3__19allocatorINS6_4pairIKjiEEEEEEvPT_PNS0_13map_slot_typeIjiEESG_:
  494|   958k|    static void transfer(Alloc* alloc, slot_type* new_slot, slot_type* old_slot) {
  495|   958k|        transfer_impl(alloc, new_slot, old_slot, 0);
  496|   958k|    }
_ZN5phmap4priv18hash_policy_traitsINS0_17FlatHashMapPolicyIjiEEvE13transfer_implINSt3__19allocatorINS6_4pairIKjiEEEES3_EEDTcvvclsrT0_8transferfp_fp0_fp1_EEPT_PNS0_13map_slot_typeIjiEESI_i:
  572|   958k|        -> decltype((void)P::transfer(alloc, new_slot, old_slot)) {
  573|   958k|        P::transfer(alloc, new_slot, old_slot);
  574|   958k|    }
_ZN5phmap4priv15map_slot_policyIjiE8transferINSt3__19allocatorINS4_4pairIKjiEEEEEEvPT_PNS0_13map_slot_typeIjiEESE_:
 4532|   958k|                         slot_type* old_slot) {
 4533|   958k|        emplace(new_slot);
 4534|   958k|        if (kMutableKeys::value) {
  ------------------
  |  Branch (4534:13): [Folded - Ignored]
  ------------------
 4535|   958k|            phmap::allocator_traits<Allocator>::construct(
 4536|   958k|                *alloc, &new_slot->mutable_value, std::move(old_slot->mutable_value));
 4537|   958k|        } else {
 4538|      0|            phmap::allocator_traits<Allocator>::construct(*alloc, &new_slot->value,
 4539|      0|                                                         std::move(old_slot->value));
 4540|      0|        }
 4541|   958k|        destroy(alloc, old_slot);
 4542|   958k|    }
_ZN5phmap4priv15map_slot_policyIjiE7emplaceEPNS0_13map_slot_typeIjiEE:
 4476|  1.49M|    static void emplace(slot_type* slot) {
 4477|       |        // The construction of union doesn't do anything at runtime but it allows us
 4478|       |        // to access its members without violating aliasing rules.
 4479|  1.49M|        new (slot) slot_type;
 4480|  1.49M|    }
_ZN5phmap4priv13map_slot_typeIjiEC2Ev:
 4453|  1.49M|    map_slot_type() {}
_ZN5phmap16allocator_traitsINSt3__19allocatorINS1_4pairIKjiEEEEE9constructINS3_IjiEEJS9_EEEvRS6_PT_DpOT0_:
 1496|   958k|                          Args&&... args) {
 1497|   958k|        construct_impl(0, a, p, std::forward<Args>(args)...);
 1498|   958k|    }
_ZN5phmap16allocator_traitsINSt3__19allocatorINS1_4pairIKjiEEEEE14construct_implIS6_JRPNS3_IjiEES9_EEEDTclsr3std16allocator_traitsIT_EE9constructfp0_spclsr3stdE7forwardIT0_Efp1_EEEiRSC_DpOSD_:
 1534|   958k|        -> decltype(std::allocator_traits<A>::construct(a, std::forward<Args>(args)...)) {
 1535|   958k|        std::allocator_traits<A>::construct(a, std::forward<Args>(args)...);
 1536|   958k|    }
_ZN5phmap4priv15map_slot_policyIjiE7destroyINSt3__19allocatorINS4_4pairIKjiEEEEEEvPT_PNS0_13map_slot_typeIjiEE:
 4522|   958k|    static void destroy(Allocator* alloc, slot_type* slot) {
 4523|   958k|        if (kMutableKeys::value) {
  ------------------
  |  Branch (4523:13): [Folded - Ignored]
  ------------------
 4524|   958k|            phmap::allocator_traits<Allocator>::destroy(*alloc, &slot->mutable_value);
 4525|   958k|        } else {
 4526|      0|            phmap::allocator_traits<Allocator>::destroy(*alloc, &slot->value);
 4527|      0|        }
 4528|   958k|    }
_ZN5phmap16allocator_traitsINSt3__19allocatorINS1_4pairIKjiEEEEE7destroyINS3_IjiEEEEvRS6_PT_:
 1503|   958k|    static void destroy(Alloc& a, T* p) {  // NOLINT(runtime/references)
 1504|   958k|        destroy_impl(0, a, p);
 1505|   958k|    }
_ZN5phmap16allocator_traitsINSt3__19allocatorINS1_4pairIKjiEEEEE12destroy_implIS6_NS3_IjiEEEEDTclsr3std16allocator_traitsIT_EE7destroyfp0_fp1_EEiRSA_PT0_:
 1545|   958k|                             T* p) -> decltype(std::allocator_traits<A>::destroy(a, p)) {
 1546|   958k|        std::allocator_traits<A>::destroy(a, p);
 1547|   958k|    }
_ZN5phmap4priv18hash_policy_traitsINS0_17FlatHashMapPolicyIjiEEvE9constructINSt3__19allocatorINS6_4pairIKjiEEEEJRKNS6_21piecewise_construct_tENS6_5tupleIJOS9_EEENSF_IJOiEEEEEEvPT_PNS0_13map_slot_typeIjiEEDpOT0_:
  471|   536k|    static void construct(Alloc* alloc, slot_type* slot, Args&&... args) {
  472|   536k|        Policy::construct(alloc, slot, std::forward<Args>(args)...);
  473|   536k|    }
_ZN5phmap4priv15map_slot_policyIjiE9constructINSt3__19allocatorINS4_4pairIKjiEEEEJRKNS4_21piecewise_construct_tENS4_5tupleIJOS7_EEENSD_IJOiEEEEEEvPT_PNS0_13map_slot_typeIjiEEDpOT0_:
 4497|   536k|    static void construct(Allocator* alloc, slot_type* slot, Args&&... args) {
 4498|   536k|        emplace(slot);
 4499|   536k|        if (kMutableKeys::value) {
  ------------------
  |  Branch (4499:13): [Folded - Ignored]
  ------------------
 4500|   536k|            phmap::allocator_traits<Allocator>::construct(*alloc, &slot->mutable_value,
 4501|   536k|                                                         std::forward<Args>(args)...);
 4502|   536k|        } else {
 4503|      0|            phmap::allocator_traits<Allocator>::construct(*alloc, &slot->value,
 4504|      0|                                                         std::forward<Args>(args)...);
 4505|      0|        }
 4506|   536k|    }
_ZN5phmap16allocator_traitsINSt3__19allocatorINS1_4pairIKjiEEEEE9constructINS3_IjiEEJRKNS1_21piecewise_construct_tENS1_5tupleIJOS4_EEENSD_IJOiEEEEEEvRS6_PT_DpOT0_:
 1496|   536k|                          Args&&... args) {
 1497|   536k|        construct_impl(0, a, p, std::forward<Args>(args)...);
 1498|   536k|    }
_ZN5phmap16allocator_traitsINSt3__19allocatorINS1_4pairIKjiEEEEE14construct_implIS6_JRPNS3_IjiEERKNS1_21piecewise_construct_tENS1_5tupleIJOS4_EEENSF_IJOiEEEEEEDTclsr3std16allocator_traitsIT_EE9constructfp0_spclsr3stdE7forwardIT0_Efp1_EEEiRSK_DpOSL_:
 1534|   536k|        -> decltype(std::allocator_traits<A>::construct(a, std::forward<Args>(args)...)) {
 1535|   536k|        std::allocator_traits<A>::construct(a, std::forward<Args>(args)...);
 1536|   536k|    }
_ZN5phmap4priv23SanitizerUnpoisonObjectINS0_13map_slot_typeIjiEEEEvPKT_:
 4248|  1.49M|inline void SanitizerUnpoisonObject(const T* object) {
 4249|  1.49M|    SanitizerUnpoisonMemoryRegion(object, sizeof(T));
 4250|  1.49M|}
_ZN5phmap4priv18hash_policy_traitsINS0_17FlatHashMapPolicyIjiEEvE5applyINS0_12raw_hash_setIS3_NS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINSB_4pairIKjiEEEEE11HashElementEJRKSF_ES3_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSM_DpOSN_:
  547|   521k|        -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  548|   521k|        return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  549|   521k|    }

_ZN5phmap13base_internal27CountTrailingZerosNonZero32Ej:
  396|  12.6M|PHMAP_BASE_INTERNAL_FORCEINLINE uint32_t CountTrailingZerosNonZero32(uint32_t n) {
  397|       |#if defined(_MSC_VER) && !defined(__clang__)
  398|       |    unsigned long result = 0;  // NOLINT(runtime/int)
  399|       |    _BitScanForward(&result, n);
  400|       |    return (uint32_t)result;
  401|       |#elif defined(__GNUC__) || defined(__clang__)
  402|       |    static_assert(sizeof(int) == sizeof(n),
  403|  12.6M|                  "__builtin_ctz does not take 32-bit arg");
  404|  12.6M|    return __builtin_ctz(n);
  405|       |#else
  406|       |    return CountTrailingZerosNonZero32Slow(n);
  407|       |#endif
  408|  12.6M|}
_Z7umul128mmPm:
  187|  9.49M|    {
  188|  9.49M|        auto result = static_cast<phmap_uint128>(a) * static_cast<phmap_uint128>(b);
  189|  9.49M|        *high = static_cast<uint64_t>(result >> 64);
  190|  9.49M|        return static_cast<uint64_t>(result);
  191|  9.49M|    }

_ZN5phmap19BinaryOutputArchiveC2EPKc:
  168|    506|    BinaryOutputArchive(const char *file_path) {
  169|    506|        ofs_.open(file_path, std::ofstream::out | std::ofstream::trunc | std::ofstream::binary);
  170|    506|    }
_ZN5phmap18BinaryInputArchiveC2EPKc:
  201|    506|    BinaryInputArchive(const char * file_path) {
  202|    506|        ifs_.open(file_path, std::ofstream::in | std::ofstream::binary);
  203|    506|    }
_ZN5phmap18BinaryInputArchiveD2Ev:
  205|    506|    ~BinaryInputArchive() = default;
_ZN5phmap19BinaryOutputArchiveD2Ev:
  172|    506|    ~BinaryOutputArchive() = default;
_ZNK5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE10phmap_dumpINS_19BinaryOutputArchiveEEEbRT_:
   54|    506|bool raw_hash_set<Policy, Hash, Eq, Alloc>::phmap_dump(OutputArchive& ar) const {
   55|    506|    static_assert(type_traits_internal::IsTriviallyCopyable<value_type>::value,
   56|    506|                    "value_type should be trivially copyable");
   57|       |
   58|    506|    ar.saveBinary(&s_version, sizeof(size_t));
   59|    506|    ar.saveBinary(&size_, sizeof(size_t));
   60|    506|    ar.saveBinary(&capacity_, sizeof(size_t));
   61|    506|    if (size_ == 0)
  ------------------
  |  Branch (61:9): [True: 36, False: 470]
  ------------------
   62|     36|        return true;
   63|    470|    ar.saveBinary(ctrl_,  sizeof(ctrl_t) * (capacity_ + Group::kWidth + 1));
   64|    470|    ar.saveBinary(slots_, sizeof(slot_type) * capacity_);
   65|    470|    ar.saveBinary(&growth_left(), sizeof(size_t));
   66|    470|    return true;
   67|    506|}
_ZN5phmap19BinaryOutputArchive10saveBinaryEPKvm:
  176|  2.92k|    bool saveBinary(const void *p, size_t sz) {
  177|  2.92k|        ofs_.write(reinterpret_cast<const char*>(p), (std::streamsize)sz);
  178|  2.92k|        return true;
  179|  2.92k|    }
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE10phmap_loadINS_18BinaryInputArchiveEEEbRT_:
   71|    506|bool raw_hash_set<Policy, Hash, Eq, Alloc>::phmap_load(InputArchive& ar) {
   72|    506|    static_assert(type_traits_internal::IsTriviallyCopyable<value_type>::value,
   73|    506|                    "value_type should be trivially copyable");
   74|    506|    raw_hash_set<Policy, Hash, Eq, Alloc>().swap(*this); // clear any existing content
   75|       |
   76|    506|    size_t version = 0;
   77|    506|    ar.loadBinary(&version, sizeof(size_t));
   78|    506|    if (version < s_version_base) {
  ------------------
  |  Branch (78:9): [True: 369, False: 137]
  ------------------
   79|       |        // we didn't store the version, version actually contains the size
   80|    369|        size_ = version;
   81|    369|    } else {
   82|    137|        ar.loadBinary(&size_, sizeof(size_t));
   83|    137|    }
   84|    506|    ar.loadBinary(&capacity_, sizeof(size_t));
   85|       |
   86|    506|    if (capacity_) {
  ------------------
  |  Branch (86:9): [True: 137, False: 369]
  ------------------
   87|       |        // allocate memory for ctrl_ and slots_
   88|    137|        initialize_slots(capacity_);
   89|    137|    }
   90|    506|    if (size_ == 0)
  ------------------
  |  Branch (90:9): [True: 369, False: 137]
  ------------------
   91|    369|        return true;
   92|    137|    ar.loadBinary(ctrl_,  sizeof(ctrl_t) * (capacity_ + Group::kWidth + 1));
   93|    137|    ar.loadBinary(slots_, sizeof(slot_type) * capacity_);
   94|    137|    if (version >= s_version_base) {
  ------------------
  |  Branch (94:9): [True: 137, False: 0]
  ------------------
   95|       |        // growth_left should be restored after calling initialize_slots() which resets it.
   96|    137|        ar.loadBinary(&growth_left(), sizeof(size_t));
   97|    137|    }
   98|    137|    return true;
   99|    506|}
_ZN5phmap18BinaryInputArchive10loadBinaryEPvm:
  209|  1.56k|    bool loadBinary(void* p, size_t sz) {
  210|  1.56k|        ifs_.read(reinterpret_cast<char*>(p),  (std::streamsize)sz);
  211|  1.56k|        return true;
  212|  1.56k|    }

_ZNK5phmap9phmap_mixILi8EEclEm:
   71|  9.49M|        {
   72|  9.49M|            static constexpr uint64_t k = 0xde5fb9d2630458e9ULL;
   73|  9.49M|            uint64_t h;
   74|  9.49M|            uint64_t l = umul128(a, k, &h);
   75|  9.49M|            return static_cast<size_t>(h + l);
   76|  9.49M|        }
_ZNK5phmap4HashIjEclEj:
  235|  9.49M|    { return static_cast<size_t>(val); }

_Z14serialise_testPKhm:
   22|    506|void serialise_test(const uint8_t *data, size_t size) {
   23|    506|    phmap::flat_hash_map<unsigned int, int> table;
   24|    506|    FuzzedDataProvider fuzzed_data(data, size);
   25|    506|    const int num_items = fuzzed_data.ConsumeIntegral<int16_t>();
   26|       |
   27|  8.01M|    for (int i=0; i < num_items; ++i)  {
  ------------------
  |  Branch (27:19): [True: 8.01M, False: 506]
  ------------------
   28|  8.01M|        table.insert(typename phmap::flat_hash_map<unsigned int, int>::value_type(
   29|  8.01M|                    fuzzed_data.ConsumeIntegral<uint32_t>(), 
   30|  8.01M|                    fuzzed_data.ConsumeIntegral<int32_t>()));
   31|  8.01M|    }
   32|       |
   33|    506|    phmap::BinaryOutputArchive ar_out("/dump.data");
   34|    506|    table.phmap_dump(ar_out);
   35|       |
   36|       |    //MapType table_in;
   37|    506|    phmap::flat_hash_map<unsigned int, int> table_in;
   38|    506|    phmap::BinaryInputArchive ar_in("/dump.data");
   39|    506|    table_in.phmap_load(ar_in);
   40|       |
   41|    506|    if(table == table_in) {
  ------------------
  |  Branch (41:8): [True: 42, False: 464]
  ------------------
   42|     42|        unlink("/dump.data");
   43|     42|        return;
   44|     42|    }
   45|    464|    unlink("/dump.data");
   46|    464|}
_Z16test_assignmentsPKhm:
   49|    506|test_assignments(const uint8_t *data, size_t size) {
   50|    506|    phmap::flat_hash_map<std::string, std::string> email;
   51|    506|    FuzzedDataProvider fuzzed_data(data, size);
   52|    506|    const int num_items = fuzzed_data.ConsumeIntegral<int16_t>();
   53|  8.01M|    for (int i=0; i < num_items; ++i) {
  ------------------
  |  Branch (53:19): [True: 8.01M, False: 506]
  ------------------
   54|  8.01M|            phmap::flat_hash_map<std::string, std::string>::value_type(
   55|  8.01M|                    fuzzed_data.ConsumeRandomLengthString(), 
   56|  8.01M|                    fuzzed_data.ConsumeRandomLengthString());
   57|  8.01M|    }
   58|       |    // Iterate through all of the items.
   59|    506|    for (const auto& n: email) {}
  ------------------
  |  Branch (59:23): [True: 0, False: 506]
  ------------------
   60|    506|}
LLVMFuzzerTestOneInput:
   62|    506|extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
   63|    506|    serialise_test(data, size);
   64|    506|    test_assignments(data, size);
   65|    506|    return 0;
   66|    506|}

