_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEED2Ev:
 1242|  1.45k|    ~raw_hash_set() { destroy_slots(); }
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE13destroy_slotsEv:
 2013|  1.45k|    void destroy_slots() {
 2014|  1.45k|        if (!capacity_) return;
  ------------------
  |  Branch (2014:13): [True: 881, False: 574]
  ------------------
 2015|  2.37M|        for (size_t i = 0; i != capacity_; ++i) {
  ------------------
  |  Branch (2015:28): [True: 2.37M, False: 574]
  ------------------
 2016|  2.37M|            if (IsFull(ctrl_[i])) {
  ------------------
  |  Branch (2016:17): [True: 1.17M, False: 1.19M]
  ------------------
 2017|  1.17M|                PolicyTraits::destroy(&alloc_ref(), slots_ + i);
 2018|  1.17M|            }
 2019|  2.37M|        }
 2020|    574|        auto layout = MakeLayout(capacity_);
 2021|       |        // Unpoison before returning the memory to the allocator.
 2022|    574|        SanitizerUnpoisonMemoryRegion(slots_, sizeof(slot_type) * capacity_);
 2023|    574|        Deallocate<Layout::Alignment()>(&alloc_ref(), ctrl_, layout.AllocSize());
 2024|    574|        ctrl_ = EmptyGroup();
 2025|    574|        slots_ = nullptr;
 2026|    574|        size_ = 0;
 2027|    574|        capacity_ = 0;
 2028|    574|        growth_left() = 0;
 2029|    574|    }
_ZN5phmap4priv6IsFullEa:
  363|  5.20M|inline bool IsFull(ctrl_t c)           { return c >= static_cast<ctrl_t>(0); }
_ZN5phmap4priv17FlatHashMapPolicyIjiE7destroyINSt3__19allocatorINS4_4pairIKjiEEEEEEvPT_PNS0_13map_slot_typeIjiEE:
 4236|  1.17M|    static void destroy(Allocator* alloc, slot_type* slot) {
 4237|  1.17M|        slot_policy::destroy(alloc, slot);
 4238|  1.17M|    }
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE9alloc_refEv:
 2318|  2.81M|    allocator_type& alloc_ref() { return std::get<3>(settings_); }
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE10MakeLayoutEm:
  884|  5.58k|    static Layout MakeLayout(size_t capacity) {
  885|  5.58k|        assert(IsValidCapacity(capacity));
  886|      0|        return Layout(capacity + Group::kWidth + 1, capacity);
  887|  5.58k|    }
_ZN5phmap4priv15IsValidCapacityEm:
  542|  13.2k|inline bool IsValidCapacity(size_t n) { return ((n + 1) & n) == 0 && n > 0; }
  ------------------
  |  Branch (542:48): [True: 13.2k, False: 0]
  |  Branch (542:70): [True: 13.2k, False: 0]
  ------------------
_ZN5phmap4priv10EmptyGroupEv:
  328|  2.51k|inline ctrl_t* EmptyGroup() {
  329|  2.51k|  alignas(16) static constexpr ctrl_t empty_group[] = {
  330|  2.51k|      kSentinel, kEmpty, kEmpty, kEmpty, kEmpty, kEmpty, kEmpty, kEmpty,
  331|  2.51k|      kEmpty,    kEmpty, kEmpty, kEmpty, kEmpty, kEmpty, kEmpty, kEmpty};
  332|  2.51k|  return const_cast<ctrl_t*>(empty_group);
  333|  2.51k|}
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE11growth_leftEv:
 2284|  1.18M|    size_t& growth_left() { return std::get<0>(settings_); }
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEES9_EENS_4HashIS9_EENS_7EqualToIS9_EENS7_INS3_4pairIKS9_S9_EEEEED2Ev:
 1242|    485|    ~raw_hash_set() { destroy_slots(); }
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEES9_EENS_4HashIS9_EENS_7EqualToIS9_EENS7_INS3_4pairIKS9_S9_EEEEE13destroy_slotsEv:
 2013|    485|    void destroy_slots() {
 2014|    485|        if (!capacity_) return;
  ------------------
  |  Branch (2014:13): [True: 485, False: 0]
  ------------------
 2015|      0|        for (size_t i = 0; i != capacity_; ++i) {
  ------------------
  |  Branch (2015:28): [True: 0, False: 0]
  ------------------
 2016|      0|            if (IsFull(ctrl_[i])) {
  ------------------
  |  Branch (2016:17): [True: 0, False: 0]
  ------------------
 2017|      0|                PolicyTraits::destroy(&alloc_ref(), slots_ + i);
 2018|      0|            }
 2019|      0|        }
 2020|      0|        auto layout = MakeLayout(capacity_);
 2021|       |        // Unpoison before returning the memory to the allocator.
 2022|      0|        SanitizerUnpoisonMemoryRegion(slots_, sizeof(slot_type) * capacity_);
 2023|      0|        Deallocate<Layout::Alignment()>(&alloc_ref(), ctrl_, layout.AllocSize());
 2024|      0|        ctrl_ = EmptyGroup();
 2025|      0|        slots_ = nullptr;
 2026|      0|        size_ = 0;
 2027|      0|        capacity_ = 0;
 2028|      0|        growth_left() = 0;
 2029|      0|    }
_ZN5phmap13flat_hash_mapIjiNS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS5_4pairIKjiEEEEEC2Ev:
 4674|    970|    flat_hash_map() {}
_ZN5phmap4priv12raw_hash_mapINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEEC2Ev:
 2373|    970|    raw_hash_map() {}
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEEC2Ev:
 1060|  1.45k|        std::is_nothrow_default_constructible<allocator_type>::value) {}
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE6insertISC_Li0ELi0ELPSC_0EEENSA_INSE_8iteratorEbEEOT_:
 1304|  8.71M|    std::pair<iterator, bool> insert(T&& value) {
 1305|  8.71M|        return emplace(std::forward<T>(value));
 1306|  8.71M|    }
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE7emplaceIJSC_ELi0EEENSA_INSE_8iteratorEbEEDpOT_:
 1443|  8.71M|    std::pair<iterator, bool> emplace(Args&&... args) {
 1444|  8.71M|        return PolicyTraits::apply(EmplaceDecomposable{*this},
 1445|  8.71M|                                   std::forward<Args>(args)...);
 1446|  8.71M|    }
_ZN5phmap4priv17FlatHashMapPolicyIjiE5applyINS0_12raw_hash_setIS2_NS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS9_4pairIKjiEEEEE19EmplaceDecomposableEJSD_EEEDTclsr5phmap4privE13DecomposePairclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSH_DpOSI_:
 4249|  8.71M|    apply(F&& f, Args&&... args) {
 4250|  8.71M|        return phmap::priv::DecomposePair(std::forward<F>(f),
 4251|  8.71M|                                                        std::forward<Args>(args)...);
 4252|  8.71M|    }
_ZN5phmap4priv13DecomposePairINS0_12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS9_4pairIKjiEEEEE19EmplaceDecomposableEJSD_EEEDTclsr15memory_internalE17DecomposePairImplclsr3stdE7forwardIT_Efp_Ecl8PairArgsspclsr3stdE7forwardIT0_Efp0_EEEEOSH_DpOSI_:
 4146|  8.71M|        std::forward<F>(f), PairArgs(std::forward<Args>(args)...))) {
 4147|  8.71M|    return memory_internal::DecomposePairImpl(
 4148|  8.71M|        std::forward<F>(f), PairArgs(std::forward<Args>(args)...));
 4149|  8.71M|}
_ZN5phmap4priv15memory_internal17DecomposePairImplINS0_12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINSA_4pairIKjiEEEEE19EmplaceDecomposableEOSD_NSA_5tupleIJOiEEEEEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEL_ZNSA_L19piecewise_constructEEclsr3stdE7declvalINSJ_IJSN_EEEEEclsr3stdE7declvalIT1_EEEEOSM_NSC_ISQ_SR_EE:
  755|  8.71M|DecomposePairImpl(F&& f, std::pair<std::tuple<K>, V> p) {
  756|  8.71M|    const auto& key = std::get<0>(p.first);
  757|  8.71M|    return std::forward<F>(f)(key, std::piecewise_construct, std::move(p.first),
  758|  8.71M|                              std::move(p.second));
  759|  8.71M|}
_ZNK5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE19EmplaceDecomposableclIjJRKNS8_21piecewise_construct_tENS8_5tupleIJOSB_EEENSK_IJOiEEEEEENSA_INSE_8iteratorEbEERKT_DpOT0_:
 1916|  8.71M|        std::pair<iterator, bool> operator()(const K& key, Args&&... args) const {
 1917|  8.71M|            return s.emplace_decomposable(key, s.hash(key), std::forward<Args>(args)...);
 1918|  8.71M|        }
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE20emplace_decomposableIjJRKNS8_21piecewise_construct_tENS8_5tupleIJOSB_EEENSJ_IJOiEEEEEENSA_INSE_8iteratorEbEERKT_mDpOT0_:
 1904|  8.71M|    {
 1905|  8.71M|        auto res = find_or_prepare_insert(key, hashval);
 1906|  8.71M|        if (res.second) {
  ------------------
  |  Branch (1906:13): [True: 591k, False: 8.12M]
  ------------------
 1907|   591k|            emplace_at(res.first, std::forward<Args>(args)...);
 1908|   591k|            this->set_ctrl(res.first, H2(hashval));
 1909|   591k|        }
 1910|  8.71M|        return {iterator_at(res.first), res.second};
 1911|  8.71M|    }
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE22find_or_prepare_insertIjEENSA_ImbEERKT_m:
 2195|  8.71M|    std::pair<size_t, bool> find_or_prepare_insert(const K& key, size_t hashval) {
 2196|  8.71M|        auto seq = probe(hashval);
 2197|  9.70M|        while (true) {
  ------------------
  |  Branch (2197:16): [Folded - Ignored]
  ------------------
 2198|  9.70M|            Group g{ctrl_ + seq.offset()};
 2199|  10.4M|            for (uint32_t i : g.Match((h2_t)H2(hashval))) {
  ------------------
  |  Branch (2199:29): [True: 10.4M, False: 1.57M]
  ------------------
 2200|  10.4M|                if (PHMAP_PREDICT_TRUE(PolicyTraits::apply(
  ------------------
  |  |  249|  10.4M|    #define PHMAP_PREDICT_TRUE(x) (__builtin_expect(!!(x), 1))
  |  |  ------------------
  |  |  |  Branch (249:35): [True: 8.12M, False: 2.30M]
  |  |  ------------------
  ------------------
 2201|  10.4M|                                          EqualElement<K>{key, eq_ref()},
 2202|  10.4M|                                          PolicyTraits::element(slots_ + seq.offset((size_t)i)))))
 2203|  8.12M|                    return {seq.offset((size_t)i), false};
 2204|  10.4M|            }
 2205|  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: 591k, False: 988k]
  |  |  ------------------
  ------------------
 2206|   988k|            seq.next();
 2207|   988k|        }
 2208|   591k|        return {prepare_insert(hashval), true};
 2209|  8.71M|    }
_ZNK5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE5probeEm:
 2269|  10.9M|    probe_seq<Group::kWidth> probe(size_t hashval) const {
 2270|  10.9M|        return probe_seq<Group::kWidth>(H1(hashval, ctrl_), capacity_);
 2271|  10.9M|    }
_ZN5phmap4priv2H1EmPKa:
  353|  10.9M|inline size_t H1(size_t hashval, const ctrl_t* ) {
  354|  10.9M|    return (hashval >> 7);
  355|  10.9M|}
_ZN5phmap4priv9probe_seqILm16EEC2Emm:
  148|  10.9M|    probe_seq(size_t hashval, size_t mask) {
  149|  10.9M|        assert(((mask + 1) & mask) == 0 && "not a mask");
  150|      0|        mask_ = mask;
  151|  10.9M|        offset_ = hashval & mask_;
  152|  10.9M|    }
_ZNK5phmap4priv9probe_seqILm16EE6offsetEv:
  153|  12.0M|    size_t offset() const { return offset_; }
_ZN5phmap4priv13GroupSse2ImplC2EPKa:
  403|  12.2M|    explicit GroupSse2Impl(const ctrl_t* pos) {
  404|  12.2M|        ctrl = _mm_loadu_si128(reinterpret_cast<const __m128i*>(pos));
  405|  12.2M|    }
_ZNK5phmap4priv13GroupSse2Impl5MatchEh:
  409|  11.8M|    BitMask<uint32_t, kWidth> Match(h2_t hash) const {
  410|  11.8M|        auto match = _mm_set1_epi8((char)hash);
  411|  11.8M|        return BitMask<uint32_t, kWidth>(
  412|  11.8M|            static_cast<uint32_t>(_mm_movemask_epi8(_mm_cmpeq_epi8(match, ctrl))));
  413|  11.8M|    }
_ZN5phmap4priv7BitMaskIjLi16ELi0EEC2Ej:
  247|  23.8M|    explicit BitMask(T mask) : mask_(mask) {}
_ZNK5phmap4priv7BitMaskIjLi16ELi0EE5beginEv:
  265|  10.2M|    BitMask begin() const { return *this; }
_ZNK5phmap4priv7BitMaskIjLi16ELi0EE3endEv:
  266|  10.2M|    BitMask end() const { return BitMask(0); }
_ZN5phmap4privneERKNS0_7BitMaskIjLi16ELi0EEES4_:
  282|  12.5M|    friend bool operator!=(const BitMask& a, const BitMask& b) {
  283|  12.5M|        return a.mask_ != b.mask_;
  284|  12.5M|    }
_ZNK5phmap4priv7BitMaskIjLi16ELi0EEdeEv:
  255|  11.0M|    uint32_t operator*() const { return LowestBitSet(); }
_ZNK5phmap4priv7BitMaskIjLi16ELi0EE12LowestBitSetEv:
  257|  12.6M|    uint32_t LowestBitSet() const {
  258|  12.6M|        return priv::TrailingZeros(mask_) >> Shift;
  259|  12.6M|    }
_ZN5phmap4priv13TrailingZerosIjEEjT_:
  208|  12.8M|uint32_t TrailingZeros(T x) {
  209|  12.8M|    PHMAP_IF_CONSTEXPR(sizeof(T) == 8)
  ------------------
  |  |  645|  12.8M|    #define PHMAP_IF_CONSTEXPR(expr) if ((expr))
  |  |  ------------------
  |  |  |  Branch (645:42): [Folded - Ignored]
  |  |  ------------------
  ------------------
  210|      0|        return base_internal::CountTrailingZerosNonZero64(static_cast<uint64_t>(x));
  211|  12.8M|    else
  212|  12.8M|        return base_internal::CountTrailingZerosNonZero32(static_cast<uint32_t>(x));
  213|  12.8M|}
_ZN5phmap4priv17FlatHashMapPolicyIjiE5applyINS0_12raw_hash_setIS2_NS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS9_4pairIKjiEEEEE12EqualElementIjEEJRSD_EEEDTclsr5phmap4privE13DecomposePairclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSJ_DpOSK_:
 4249|  10.4M|    apply(F&& f, Args&&... args) {
 4250|  10.4M|        return phmap::priv::DecomposePair(std::forward<F>(f),
 4251|  10.4M|                                                        std::forward<Args>(args)...);
 4252|  10.4M|    }
_ZN5phmap4priv13DecomposePairINS0_12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS9_4pairIKjiEEEEE12EqualElementIjEEJRSD_EEEDTclsr15memory_internalE17DecomposePairImplclsr3stdE7forwardIT_Efp_Ecl8PairArgsspclsr3stdE7forwardIT0_Efp0_EEEEOSJ_DpOSK_:
 4146|  10.4M|        std::forward<F>(f), PairArgs(std::forward<Args>(args)...))) {
 4147|  10.4M|    return memory_internal::DecomposePairImpl(
 4148|  10.4M|        std::forward<F>(f), PairArgs(std::forward<Args>(args)...));
 4149|  10.4M|}
_ZN5phmap4priv15memory_internal17DecomposePairImplINS0_12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINSA_4pairIKjiEEEEE12EqualElementIjEERSD_NSA_5tupleIJRKiEEEEEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEL_ZNSA_L19piecewise_constructEEclsr3stdE7declvalINSK_IJSP_EEEEEclsr3stdE7declvalIT1_EEEEOSO_NSC_ISS_ST_EE:
  755|  10.4M|DecomposePairImpl(F&& f, std::pair<std::tuple<K>, V> p) {
  756|  10.4M|    const auto& key = std::get<0>(p.first);
  757|  10.4M|    return std::forward<F>(f)(key, std::piecewise_construct, std::move(p.first),
  758|  10.4M|                              std::move(p.second));
  759|  10.4M|}
_ZNK5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE12EqualElementIjEclIjJRKNS8_21piecewise_construct_tENS8_5tupleIJRSB_EEENSL_IJRKiEEEEEEbRKT_DpOT0_:
 1894|  10.4M|        bool operator()(const K2& lhs, Args&&...) const {
 1895|  10.4M|            return eq(lhs, rhs);
 1896|  10.4M|        }
_ZN5phmap4priv8PairArgsIKjiEENSt3__14pairINS3_5tupleIJRKT_EEENS5_IJRKT0_EEEEERKNS4_IS6_SA_EE:
 4124|  12.0M|    const std::pair<F, S>& p) {
 4125|  12.0M|    return PairArgs(p.first, p.second);
 4126|  12.0M|}
_ZN5phmap4priv8PairArgsIRKjRKiEENSt3__14pairINS6_5tupleIJOT_EEENS8_IJOT0_EEEEESA_SD_:
 4117|  12.0M|std::pair<std::tuple<F&&>, std::tuple<S&&>> PairArgs(F&& f, S&& s) {
 4118|  12.0M|  return {std::piecewise_construct, std::forward_as_tuple(std::forward<F>(f)),
 4119|  12.0M|          std::forward_as_tuple(std::forward<S>(s))};
 4120|  12.0M|}
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE6eq_refEv:
 2316|  10.4M|    key_equal& eq_ref() { return std::get<2>(settings_); }
_ZN5phmap4priv17FlatHashMapPolicyIjiE7elementEPNS0_13map_slot_typeIjiEE:
 4256|  12.6M|    static std::pair<const K, V>& element(slot_type* slot) { return slot->value; }
_ZNK5phmap4priv9probe_seqILm16EE6offsetEm:
  154|  20.7M|    size_t offset(size_t i) const { return (offset_ + i) & mask_; }
_ZN5phmap4priv7BitMaskIjLi16ELi0EEppEv:
  249|  2.30M|    BitMask& operator++() {    // ++iterator
  250|  2.30M|        mask_ &= (mask_ - 1);  // clear the least significant bit set
  251|  2.30M|        return *this;
  252|  2.30M|    }
_ZNK5phmap4priv13GroupSse2Impl10MatchEmptyEv:
  417|  1.58M|    BitMask<uint32_t, kWidth> MatchEmpty() const {
  418|       |#if PHMAP_HAVE_SSSE3
  419|       |        // This only works because kEmpty is -128.
  420|       |        return BitMask<uint32_t, kWidth>(
  421|       |            static_cast<uint32_t>(_mm_movemask_epi8(_mm_sign_epi8(ctrl, ctrl))));
  422|       |#else
  423|  1.58M|        return Match(static_cast<h2_t>(kEmpty));
  424|  1.58M|#endif
  425|  1.58M|    }
_ZNK5phmap4priv7BitMaskIjLi16ELi0EEcvbEv:
  254|  3.30M|    explicit operator bool() const { return mask_ != 0; }
_ZN5phmap4priv9probe_seqILm16EE4nextEv:
  156|  1.07M|    void next() {
  157|  1.07M|        index_ += Width;
  158|  1.07M|        offset_ += index_;
  159|  1.07M|        offset_ &= mask_;
  160|  1.07M|    }
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE14prepare_insertEm:
 2211|   591k|    size_t prepare_insert(size_t hashval) PHMAP_ATTRIBUTE_NOINLINE {
 2212|   591k|        auto target = find_first_non_full(hashval);
 2213|   591k|        if (PHMAP_PREDICT_FALSE(growth_left() == 0 &&
  ------------------
  |  |  248|   594k|    #define PHMAP_PREDICT_FALSE(x) (__builtin_expect(x, 0))
  |  |  ------------------
  |  |  |  Branch (248:36): [True: 2.67k, False: 588k]
  |  |  |  Branch (248:54): [True: 2.67k, False: 588k]
  |  |  |  Branch (248:54): [True: 2.67k, False: 0]
  |  |  ------------------
  ------------------
 2214|   591k|                               !IsDeleted(ctrl_[target.offset]))) {
 2215|  2.67k|            rehash_and_grow_if_necessary();
 2216|  2.67k|            target = find_first_non_full(hashval);
 2217|  2.67k|        }
 2218|   591k|        ++size_;
 2219|   591k|        growth_left() -= IsEmpty(ctrl_[target.offset]);
 2220|       |        // set_ctrl(target.offset, H2(hashval));
 2221|   591k|        infoz_.RecordInsert(hashval, target.probe_length);
 2222|   591k|        return target.offset;
 2223|   591k|    }
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE19find_first_non_fullEm:
 2168|  1.63M|    FindInfo find_first_non_full(size_t hashval) {
 2169|  1.63M|        auto seq = probe(hashval);
 2170|  1.72M|        while (true) {
  ------------------
  |  Branch (2170:16): [Folded - Ignored]
  ------------------
 2171|  1.72M|            Group g{ctrl_ + seq.offset()};
 2172|  1.72M|            auto mask = g.MatchEmptyOrDeleted();
 2173|  1.72M|            if (mask) {
  ------------------
  |  Branch (2173:17): [True: 1.63M, False: 87.0k]
  ------------------
 2174|  1.63M|                return {seq.offset((size_t)mask.LowestBitSet()), seq.getindex()};
 2175|  1.63M|            }
 2176|  87.0k|            assert(seq.getindex() < capacity_ && "full table!");
 2177|      0|            seq.next();
 2178|  87.0k|        }
 2179|  1.63M|    }
_ZNK5phmap4priv13GroupSse2Impl19MatchEmptyOrDeletedEv:
  433|  1.72M|    BitMask<uint32_t, kWidth> MatchEmptyOrDeleted() const {
  434|  1.72M|        auto special = _mm_set1_epi8(static_cast<uint8_t>(kSentinel));
  435|  1.72M|        return BitMask<uint32_t, kWidth>(
  436|  1.72M|            static_cast<uint32_t>(_mm_movemask_epi8(_mm_cmpgt_epi8_fixed(special, ctrl))));
  437|  1.72M|    }
_ZN5phmap4priv20_mm_cmpgt_epi8_fixedEDv2_xS1_:
  381|  1.94M|inline __m128i _mm_cmpgt_epi8_fixed(__m128i a, __m128i b) {
  382|       |#if defined(__GNUC__) && !defined(__clang__)
  383|       |  #pragma GCC diagnostic push
  384|       |  #pragma GCC diagnostic ignored "-Woverflow"
  385|       |
  386|       |  if (std::is_unsigned<char>::value) {
  387|       |    const __m128i mask = _mm_set1_epi8(static_cast<char>(0x80));
  388|       |    const __m128i diff = _mm_subs_epi8(b, a);
  389|       |    return _mm_cmpeq_epi8(_mm_and_si128(diff, mask), mask);
  390|       |  }
  391|       |
  392|       |  #pragma GCC diagnostic pop
  393|       |#endif
  394|  1.94M|  return _mm_cmpgt_epi8(a, b);
  395|  1.94M|}
_ZNK5phmap4priv9probe_seqILm16EE8getindexEv:
  162|  1.72M|    size_t getindex() const { return index_; }
_ZN5phmap4priv9IsDeletedEa:
  364|  2.67k|inline bool IsDeleted(ctrl_t c)        { return c == kDeleted; }
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE28rehash_and_grow_if_necessaryEv:
 2121|  2.67k|    void rehash_and_grow_if_necessary() {
 2122|  2.67k|        if (capacity_ == 0) {
  ------------------
  |  Branch (2122:13): [True: 450, False: 2.22k]
  ------------------
 2123|    450|            resize(1);
 2124|  2.22k|        } else if (size() <= CapacityToGrowth(capacity()) / 2) {
  ------------------
  |  Branch (2124:20): [True: 0, False: 2.22k]
  ------------------
 2125|       |            // Squash DELETED without growing if there is enough capacity.
 2126|      0|            drop_deletes_without_resize();
 2127|  2.22k|        } else {
 2128|       |            // Otherwise grow the container.
 2129|  2.22k|            resize(capacity_ * 2 + 1);
 2130|  2.22k|        }
 2131|  2.67k|    }
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE6resizeEm:
 2031|  2.67k|    void resize(size_t new_capacity) {
 2032|  2.67k|        assert(IsValidCapacity(new_capacity));
 2033|      0|        auto* old_ctrl = ctrl_;
 2034|  2.67k|        auto* old_slots = slots_;
 2035|  2.67k|        const size_t old_capacity = capacity_;
 2036|  2.67k|        initialize_slots(new_capacity);
 2037|  2.67k|        capacity_ = new_capacity;
 2038|       |
 2039|  1.19M|        for (size_t i = 0; i != old_capacity; ++i) {
  ------------------
  |  Branch (2039:28): [True: 1.19M, False: 2.67k]
  ------------------
 2040|  1.19M|            if (IsFull(old_ctrl[i])) {
  ------------------
  |  Branch (2040:17): [True: 1.04M, False: 147k]
  ------------------
 2041|  1.04M|                size_t hashval = PolicyTraits::apply(HashElement{hash_ref()},
 2042|  1.04M|                                                     PolicyTraits::element(old_slots + i));
 2043|  1.04M|                auto target = find_first_non_full(hashval);
 2044|  1.04M|                size_t new_i = target.offset;
 2045|  1.04M|                set_ctrl(new_i, H2(hashval));
 2046|  1.04M|                PolicyTraits::transfer(&alloc_ref(), slots_ + new_i, old_slots + i);
 2047|  1.04M|            }
 2048|  1.19M|        }
 2049|  2.67k|        if (old_capacity) {
  ------------------
  |  Branch (2049:13): [True: 2.22k, False: 450]
  ------------------
 2050|  2.22k|            SanitizerUnpoisonMemoryRegion(old_slots,
 2051|  2.22k|                                          sizeof(slot_type) * old_capacity);
 2052|  2.22k|            auto layout = MakeLayout(old_capacity);
 2053|  2.22k|            Deallocate<Layout::Alignment()>(&alloc_ref(), old_ctrl,
 2054|  2.22k|                                            layout.AllocSize());
 2055|  2.22k|        }
 2056|  2.67k|    }
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE16initialize_slotsEm:
 1996|  2.79k|    void initialize_slots(size_t new_capacity) {
 1997|  2.79k|        assert(new_capacity);
 1998|  2.79k|        if (std::is_same<SlotAlloc, std::allocator<slot_type>>::value && 
  ------------------
  |  Branch (1998:13): [Folded - Ignored]
  ------------------
 1999|  2.79k|            slots_ == nullptr) {
  ------------------
  |  Branch (1999:13): [True: 574, False: 2.22k]
  ------------------
 2000|    574|            infoz_ = Sample();
 2001|    574|        }
 2002|       |
 2003|  2.79k|        auto layout = MakeLayout(new_capacity);
 2004|  2.79k|        char* mem = static_cast<char*>(
 2005|  2.79k|            Allocate<Layout::Alignment()>(&alloc_ref(), layout.AllocSize()));
 2006|  2.79k|        ctrl_ = reinterpret_cast<ctrl_t*>(layout.template Pointer<0>(mem));
 2007|  2.79k|        slots_ = layout.template Pointer<1>(mem);
 2008|  2.79k|        reset_ctrl(new_capacity);
 2009|  2.79k|        reset_growth_left(new_capacity);
 2010|  2.79k|        infoz_.RecordStorageChanged(size_, new_capacity);
 2011|  2.79k|    }
phashmap_fuzz.cc:_ZN5phmap4privL6SampleEv:
  683|    574|static inline HashtablezInfoHandle Sample() { return HashtablezInfoHandle(); }
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE10reset_ctrlEm:
 2274|  2.79k|    void reset_ctrl(size_t capacity) {
 2275|  2.79k|        std::memset(ctrl_, kEmpty, capacity + Group::kWidth);
 2276|  2.79k|        ctrl_[capacity] = kSentinel;
 2277|  2.79k|        SanitizerPoisonMemoryRegion(slots_, sizeof(slot_type) * capacity);
 2278|  2.79k|    }
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE17reset_growth_leftEm:
 2280|  2.79k|    void reset_growth_left(size_t capacity) {
 2281|  2.79k|        growth_left() = CapacityToGrowth(capacity) - size_;
 2282|  2.79k|    }
_ZN5phmap4priv20HashtablezInfoHandle20RecordStorageChangedEmm:
  675|  2.79k|    inline void RecordStorageChanged(size_t , size_t ) {}
_ZN5phmap4priv17FlatHashMapPolicyIjiE5applyINS0_12raw_hash_setIS2_NS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS9_4pairIKjiEEEEE11HashElementEJRSD_EEEDTclsr5phmap4privE13DecomposePairclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSI_DpOSJ_:
 4249|  1.04M|    apply(F&& f, Args&&... args) {
 4250|  1.04M|        return phmap::priv::DecomposePair(std::forward<F>(f),
 4251|  1.04M|                                                        std::forward<Args>(args)...);
 4252|  1.04M|    }
_ZN5phmap4priv13DecomposePairINS0_12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS9_4pairIKjiEEEEE11HashElementEJRSD_EEEDTclsr15memory_internalE17DecomposePairImplclsr3stdE7forwardIT_Efp_Ecl8PairArgsspclsr3stdE7forwardIT0_Efp0_EEEEOSI_DpOSJ_:
 4146|  1.04M|        std::forward<F>(f), PairArgs(std::forward<Args>(args)...))) {
 4147|  1.04M|    return memory_internal::DecomposePairImpl(
 4148|  1.04M|        std::forward<F>(f), PairArgs(std::forward<Args>(args)...));
 4149|  1.04M|}
_ZN5phmap4priv15memory_internal17DecomposePairImplINS0_12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINSA_4pairIKjiEEEEE11HashElementERSD_NSA_5tupleIJRKiEEEEEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEL_ZNSA_L19piecewise_constructEEclsr3stdE7declvalINSJ_IJSO_EEEEEclsr3stdE7declvalIT1_EEEEOSN_NSC_ISR_SS_EE:
  755|  1.62M|DecomposePairImpl(F&& f, std::pair<std::tuple<K>, V> p) {
  756|  1.62M|    const auto& key = std::get<0>(p.first);
  757|  1.62M|    return std::forward<F>(f)(key, std::piecewise_construct, std::move(p.first),
  758|  1.62M|                              std::move(p.second));
  759|  1.62M|}
_ZNK5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE11HashElementclIjJRKNS8_21piecewise_construct_tENS8_5tupleIJRSB_EEENSK_IJRKiEEEEEEmRKT_DpOT0_:
 1884|  1.62M|        size_t operator()(const K& key, Args&&...) const {
 1885|  1.62M|            return phmap_mix<sizeof(size_t)>()(h(key));
 1886|  1.62M|        }
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE8hash_refEv:
 2314|  1.04M|    hasher& hash_ref() { return std::get<1>(settings_); }
_ZN5phmap4priv17FlatHashMapPolicyIjiE8transferINSt3__19allocatorINS4_4pairIKjiEEEEEEvPT_PNS0_13map_slot_typeIjiEESE_:
 4242|  1.04M|                         slot_type* old_slot) {
 4243|  1.04M|        slot_policy::transfer(alloc, new_slot, old_slot);
 4244|  1.04M|    }
_ZNK5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE4sizeEv:
 1266|  3.19k|    size_t size() const { return size_; }
_ZN5phmap4priv16CapacityToGrowthEm:
  580|  5.01k|{
  581|  5.01k|    assert(IsValidCapacity(capacity));
  582|       |    // `capacity*7/8`
  583|  5.01k|    PHMAP_IF_CONSTEXPR (Group::kWidth == 8) {
  ------------------
  |  |  645|  5.01k|    #define PHMAP_IF_CONSTEXPR(expr) if ((expr))
  |  |  ------------------
  |  |  |  Branch (645:42): [Folded - Ignored]
  |  |  ------------------
  ------------------
  584|      0|        if (capacity == 7)
  ------------------
  |  Branch (584:13): [True: 0, False: 0]
  ------------------
  585|      0|        {
  586|       |            // x-x/8 does not work when x==7.
  587|      0|            return 6;
  588|      0|        }
  589|      0|    }
  590|  5.01k|    return capacity - capacity / 8;
  591|  5.01k|}
_ZNK5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE8capacityEv:
 1267|  2.53k|    size_t capacity() const { return capacity_; }
_ZN5phmap4priv7IsEmptyEa:
  362|   591k|inline bool IsEmpty(ctrl_t c)          { return c == kEmpty; }
_ZN5phmap4priv20HashtablezInfoHandle12RecordInsertEmm:
  677|   591k|    inline void RecordInsert(size_t , size_t ) {}
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE10emplace_atIJRKNS8_21piecewise_construct_tENS8_5tupleIJOSB_EEENSJ_IJOiEEEEEEvmDpOT_:
 2234|   591k|    void emplace_at(size_t i, Args&&... args) {
 2235|   591k|        PolicyTraits::construct(&alloc_ref(), slots_ + i,
 2236|   591k|                                std::forward<Args>(args)...);
 2237|       |        
 2238|       |#ifdef PHMAP_CHECK_CONSTRUCTED_VALUE
 2239|       |        // this check can be costly, so do it only when requested
 2240|       |        assert(PolicyTraits::apply(FindElement{*this}, *iterator_at(i)) ==
 2241|       |               iterator_at(i) &&
 2242|       |               "constructed value does not match the lookup key");
 2243|       |#endif
 2244|   591k|    }
_ZN5phmap4priv17FlatHashMapPolicyIjiE9constructINSt3__19allocatorINS4_4pairIKjiEEEEJRKNS4_21piecewise_construct_tENS4_5tupleIJOS7_EEENSD_IJOiEEEEEEvPT_PNS0_13map_slot_typeIjiEEDpOT0_:
 4231|   591k|    static void construct(Allocator* alloc, slot_type* slot, Args&&... args) {
 4232|   591k|        slot_policy::construct(alloc, slot, std::forward<Args>(args)...);
 4233|   591k|    }
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE8set_ctrlEma:
 2252|  1.63M|    void set_ctrl(size_t i, ctrl_t h) {
 2253|  1.63M|        assert(i < capacity_);
 2254|       |
 2255|  1.63M|        if (IsFull(h)) {
  ------------------
  |  Branch (2255:13): [True: 1.63M, False: 0]
  ------------------
 2256|  1.63M|            SanitizerUnpoisonObject(slots_ + i);
 2257|  1.63M|        } else {
 2258|      0|            SanitizerPoisonObject(slots_ + i);
 2259|      0|        }
 2260|       |
 2261|  1.63M|        ctrl_[i] = h;
 2262|  1.63M|        ctrl_[((i - Group::kWidth) & capacity_) + 1 +
 2263|  1.63M|              ((Group::kWidth - 1) & capacity_)] = h;
 2264|  1.63M|    }
_ZN5phmap4priv2H2Em:
  360|  11.9M|inline h2_t H2(size_t hashval)       { return (h2_t)(ctrl_t)(hashval & 0x7F); }
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE11iterator_atEm:
 2246|  8.71M|    iterator iterator_at(size_t i) { return {ctrl_ + i, slots_ + i}; }
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE8iteratorC2EPaPNS0_13map_slot_typeIjiEE:
  994|  8.71M|        iterator(ctrl_t* ctrl, slot_type* slot) : ctrl_(ctrl), slot_(slot) {}
_ZNK5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE4hashIjEEmRKT_:
 1846|  8.71M|    size_t hash(const K& key) const {
 1847|  8.71M|        return HashElement{hash_ref()}(key);
 1848|  8.71M|    }
_ZNK5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE8hash_refEv:
 2315|  9.29M|    const hasher& hash_ref() const { return std::get<1>(settings_); }
_ZNK5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE11HashElementclIjJEEEmRKT_DpOT0_:
 1884|  8.71M|        size_t operator()(const K& key, Args&&...) const {
 1885|  8.71M|            return phmap_mix<sizeof(size_t)>()(h(key));
 1886|  8.71M|        }
_ZN5phmap4priv8PairArgsIKjiEENSt3__14pairINS3_5tupleIJOT_EEENS5_IJOT0_EEEEEONS4_IS6_S9_EE:
 4129|  8.71M|std::pair<std::tuple<F&&>, std::tuple<S&&>> PairArgs(std::pair<F, S>&& p) {
 4130|  8.71M|    return PairArgs(std::forward<F>(p.first), std::forward<S>(p.second));
 4131|  8.71M|}
_ZN5phmap4priv8PairArgsIKjiEENSt3__14pairINS3_5tupleIJOT_EEENS5_IJOT0_EEEEES7_SA_:
 4117|  8.71M|std::pair<std::tuple<F&&>, std::tuple<S&&>> PairArgs(F&& f, S&& s) {
 4118|  8.71M|  return {std::piecewise_construct, std::forward_as_tuple(std::forward<F>(f)),
 4119|  8.71M|          std::forward_as_tuple(std::forward<S>(s))};
 4120|  8.71M|}
_ZNK5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE11growth_leftEv:
 2286|    450|    const size_t& growth_left() const { return std::get<0>(settings_); }
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE4swapERSE_:
 1673|    485|         IsNoThrowSwappable<allocator_type>(typename AllocTraits::propagate_on_container_swap{}))) {
 1674|    485|        using std::swap;
 1675|    485|        swap(ctrl_, that.ctrl_);
 1676|    485|        swap(slots_, that.slots_);
 1677|    485|        swap(size_, that.size_);
 1678|    485|        swap(capacity_, that.capacity_);
 1679|    485|        swap(growth_left(), that.growth_left());
 1680|    485|        swap(hash_ref(), that.hash_ref());
 1681|    485|        swap(eq_ref(), that.eq_ref());
 1682|    485|        swap(infoz_, that.infoz_);
 1683|    485|        SwapAlloc(alloc_ref(), that.alloc_ref(), typename AllocTraits::propagate_on_container_swap{});
 1684|    485|    }
_ZN5phmap4priv4swapERNS0_20HashtablezInfoHandleES2_:
  680|    485|                            HashtablezInfoHandle& ) noexcept {}
_ZN5phmap4priv9SwapAllocINSt3__19allocatorINS2_4pairIKjiEEEEEEvRT_S9_NS2_17integral_constantIbLb0EEE:
  141|    485|               std::false_type /* propagate_on_container_swap */) {}
_ZN5phmap4priveqERKNS0_12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEEESG_:
 1825|    485|    friend bool operator==(const raw_hash_set& a, const raw_hash_set& b) {
 1826|    485|        if (a.size() != b.size()) return false;
  ------------------
  |  Branch (1826:13): [True: 326, False: 159]
  ------------------
 1827|    159|        const raw_hash_set* outer = &a;
 1828|    159|        const raw_hash_set* inner = &b;
 1829|    159|        if (outer->capacity() > inner->capacity()) 
  ------------------
  |  Branch (1829:13): [True: 0, False: 159]
  ------------------
 1830|      0|            std::swap(outer, inner);
 1831|    159|        for (const value_type& elem : *outer)
  ------------------
  |  Branch (1831:37): [True: 578k, False: 49]
  ------------------
 1832|   578k|            if (!inner->has_element(elem)) return false;
  ------------------
  |  Branch (1832:17): [True: 110, False: 578k]
  ------------------
 1833|     49|        return true;
 1834|    159|    }
_ZNK5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE5beginEv:
 1258|    159|    const_iterator begin() const {
 1259|    159|        return const_cast<raw_hash_set*>(this)->begin();
 1260|    159|    }
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE5beginEv:
 1244|    159|    iterator begin() {
 1245|    159|        auto it = iterator_at(0);
 1246|    159|        it.skip_empty_or_deleted();
 1247|    159|        return it;
 1248|    159|    }
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE8iterator21skip_empty_or_deletedEv:
  996|   578k|        void skip_empty_or_deleted() {
  997|   803k|            while (IsEmptyOrDeleted(*ctrl_)) {
  ------------------
  |  Branch (997:20): [True: 224k, False: 578k]
  ------------------
  998|       |                // ctrl is not necessarily aligned to Group::kWidth. It is also likely
  999|       |                // to read past the space for ctrl bytes and into slots. This is ok
 1000|       |                // because ctrl has sizeof() == 1 and slot has sizeof() >= 1 so there
 1001|       |                // is no way to read outside the combined slot array.
 1002|   224k|                uint32_t shift = Group{ctrl_}.CountLeadingEmptyOrDeleted();
 1003|   224k|                ctrl_ += shift;
 1004|   224k|                slot_ += shift;
 1005|   224k|            }
 1006|   578k|        }
_ZN5phmap4priv16IsEmptyOrDeletedEa:
  365|   803k|inline bool IsEmptyOrDeleted(ctrl_t c) { return c < kSentinel; }
_ZNK5phmap4priv13GroupSse2Impl26CountLeadingEmptyOrDeletedEv:
  441|   224k|    uint32_t CountLeadingEmptyOrDeleted() const {
  442|   224k|        auto special = _mm_set1_epi8(static_cast<uint8_t>(kSentinel));
  443|   224k|        return TrailingZeros(
  444|   224k|            static_cast<uint32_t>(_mm_movemask_epi8(_mm_cmpgt_epi8_fixed(special, ctrl)) + 1));
  445|   224k|    }
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE14const_iteratorC2ENSE_8iteratorE:
 1029|    318|        const_iterator(iterator i) : inner_(std::move(i)) {}
_ZNK5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE3endEv:
 1261|    159|    const_iterator end() const { return const_cast<raw_hash_set*>(this)->end(); }
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE3endEv:
 1250|    159|    {
 1251|       |#if 0 // PHMAP_BIDIRECTIONAL
 1252|       |        return iterator_at(capacity_); 
 1253|       |#else
 1254|    159|        return {ctrl_ + capacity_};
 1255|    159|#endif
 1256|    159|    }
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE8iteratorC2EPa:
  993|    159|        iterator(ctrl_t* ctrl) : ctrl_(ctrl) {}  // for end()
_ZN5phmap4privneERKNS0_12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE14const_iteratorESH_:
 1043|   578k|        friend bool operator!=(const const_iterator& a, const const_iterator& b) {
 1044|   578k|            return !(a == b);
 1045|   578k|        }
_ZN5phmap4priveqERKNS0_12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE14const_iteratorESH_:
 1040|   578k|        friend bool operator==(const const_iterator& a, const const_iterator& b) {
 1041|   578k|            return a.inner_ == b.inner_;
 1042|   578k|        }
_ZN5phmap4priveqERKNS0_12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE8iteratorESH_:
  985|   578k|        friend bool operator==(const iterator& a, const iterator& b) {
  986|   578k|            return a.ctrl_ == b.ctrl_;
  987|   578k|        }
_ZNK5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE14const_iteratordeEv:
 1031|   578k|        reference operator*() const { return *inner_; }
_ZNK5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE8iteratordeEv:
  947|   578k|        reference operator*() const { return PolicyTraits::element(slot_); }
_ZNK5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE11has_elementERKSC_:
 2149|   578k|    bool has_element(const value_type& elem) const {
 2150|   578k|        size_t hashval = PolicyTraits::apply(HashElement{hash_ref()}, elem);
 2151|   578k|        return has_element(elem, hashval);
 2152|   578k|    }
_ZN5phmap4priv17FlatHashMapPolicyIjiE5applyINS0_12raw_hash_setIS2_NS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS9_4pairIKjiEEEEE11HashElementEJRKSD_EEEDTclsr5phmap4privE13DecomposePairclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSJ_DpOSK_:
 4249|   578k|    apply(F&& f, Args&&... args) {
 4250|   578k|        return phmap::priv::DecomposePair(std::forward<F>(f),
 4251|   578k|                                                        std::forward<Args>(args)...);
 4252|   578k|    }
_ZN5phmap4priv13DecomposePairINS0_12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS9_4pairIKjiEEEEE11HashElementEJRKSD_EEEDTclsr15memory_internalE17DecomposePairImplclsr3stdE7forwardIT_Efp_Ecl8PairArgsspclsr3stdE7forwardIT0_Efp0_EEEEOSJ_DpOSK_:
 4146|   578k|        std::forward<F>(f), PairArgs(std::forward<Args>(args)...))) {
 4147|   578k|    return memory_internal::DecomposePairImpl(
 4148|   578k|        std::forward<F>(f), PairArgs(std::forward<Args>(args)...));
 4149|   578k|}
_ZNK5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE11has_elementERKSC_m:
 2133|   578k|    bool has_element(const value_type& elem, size_t hashval) const {
 2134|   578k|        auto seq = probe(hashval);
 2135|   579k|        while (true) {
  ------------------
  |  Branch (2135:16): [Folded - Ignored]
  ------------------
 2136|   579k|            Group g{ctrl_ + seq.offset()};
 2137|   580k|            for (uint32_t i : g.Match((h2_t)H2(hashval))) {
  ------------------
  |  Branch (2137:29): [True: 580k, False: 1.51k]
  ------------------
 2138|   580k|                if (PHMAP_PREDICT_TRUE(PolicyTraits::element(slots_ + seq.offset((size_t)i)) ==
  ------------------
  |  |  249|   580k|    #define PHMAP_PREDICT_TRUE(x) (__builtin_expect(!!(x), 1))
  |  |  ------------------
  |  |  |  Branch (249:35): [True: 578k, False: 2.64k]
  |  |  ------------------
  ------------------
 2139|   580k|                                      elem))
 2140|   578k|                    return true;
 2141|   580k|            }
 2142|  1.51k|            if (PHMAP_PREDICT_TRUE(g.MatchEmpty())) return false;
  ------------------
  |  |  249|  1.51k|    #define PHMAP_PREDICT_TRUE(x) (__builtin_expect(!!(x), 1))
  |  |  ------------------
  |  |  |  Branch (249:35): [True: 110, False: 1.40k]
  |  |  ------------------
  ------------------
 2143|  1.40k|            seq.next();
 2144|  1.40k|            assert(seq.getindex() < capacity_ && "full table!");
 2145|  1.40k|        }
 2146|      0|        return false;
 2147|   578k|    }
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE14const_iteratorppEv:
 1034|   578k|        const_iterator& operator++() {
 1035|   578k|            ++inner_;
 1036|   578k|            return *this;
 1037|   578k|        }
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyIjiEENS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINS8_4pairIKjiEEEEE8iteratorppEv:
  953|   578k|        iterator& operator++() {
  954|   578k|            ++ctrl_;
  955|   578k|            ++slot_;
  956|   578k|            skip_empty_or_deleted();
  957|   578k|            return *this;
  958|   578k|        }
_ZN5phmap13flat_hash_mapINSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEES7_NS_4HashIS7_EENS_7EqualToIS7_EENS5_INS1_4pairIKS7_S7_EEEEEC2Ev:
 4674|    485|    flat_hash_map() {}
_ZN5phmap4priv12raw_hash_mapINS0_17FlatHashMapPolicyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEES9_EENS_4HashIS9_EENS_7EqualToIS9_EENS7_INS3_4pairIKS9_S9_EEEEEC2Ev:
 2373|    485|    raw_hash_map() {}
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEES9_EENS_4HashIS9_EENS_7EqualToIS9_EENS7_INS3_4pairIKS9_S9_EEEEEC2Ev:
 1060|    485|        std::is_nothrow_default_constructible<allocator_type>::value) {}
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEES9_EENS_4HashIS9_EENS_7EqualToIS9_EENS7_INS3_4pairIKS9_S9_EEEEE5beginEv:
 1244|    485|    iterator begin() {
 1245|    485|        auto it = iterator_at(0);
 1246|    485|        it.skip_empty_or_deleted();
 1247|    485|        return it;
 1248|    485|    }
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEES9_EENS_4HashIS9_EENS_7EqualToIS9_EENS7_INS3_4pairIKS9_S9_EEEEE11iterator_atEm:
 2246|    485|    iterator iterator_at(size_t i) { return {ctrl_ + i, slots_ + i}; }
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEES9_EENS_4HashIS9_EENS_7EqualToIS9_EENS7_INS3_4pairIKS9_S9_EEEEE8iteratorC2EPaPNS0_13map_slot_typeIS9_S9_EE:
  994|    485|        iterator(ctrl_t* ctrl, slot_type* slot) : ctrl_(ctrl), slot_(slot) {}
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEES9_EENS_4HashIS9_EENS_7EqualToIS9_EENS7_INS3_4pairIKS9_S9_EEEEE8iterator21skip_empty_or_deletedEv:
  996|    485|        void skip_empty_or_deleted() {
  997|    485|            while (IsEmptyOrDeleted(*ctrl_)) {
  ------------------
  |  Branch (997:20): [True: 0, False: 485]
  ------------------
  998|       |                // ctrl is not necessarily aligned to Group::kWidth. It is also likely
  999|       |                // to read past the space for ctrl bytes and into slots. This is ok
 1000|       |                // because ctrl has sizeof() == 1 and slot has sizeof() >= 1 so there
 1001|       |                // is no way to read outside the combined slot array.
 1002|      0|                uint32_t shift = Group{ctrl_}.CountLeadingEmptyOrDeleted();
 1003|      0|                ctrl_ += shift;
 1004|      0|                slot_ += shift;
 1005|      0|            }
 1006|    485|        }
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEES9_EENS_4HashIS9_EENS_7EqualToIS9_EENS7_INS3_4pairIKS9_S9_EEEEE3endEv:
 1250|    485|    {
 1251|       |#if 0 // PHMAP_BIDIRECTIONAL
 1252|       |        return iterator_at(capacity_); 
 1253|       |#else
 1254|    485|        return {ctrl_ + capacity_};
 1255|    485|#endif
 1256|    485|    }
_ZN5phmap4priv12raw_hash_setINS0_17FlatHashMapPolicyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEES9_EENS_4HashIS9_EENS_7EqualToIS9_EENS7_INS3_4pairIKS9_S9_EEEEE8iteratorC2EPa:
  993|    485|        iterator(ctrl_t* ctrl) : ctrl_(ctrl) {}  // for end()
_ZN5phmap4privneERKNS0_12raw_hash_setINS0_17FlatHashMapPolicyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEES9_EENS_4HashIS9_EENS_7EqualToIS9_EENS7_INS3_4pairIKS9_S9_EEEEE8iteratorESM_:
  988|    485|        friend bool operator!=(const iterator& a, const iterator& b) {
  989|    485|            return !(a == b);
  990|    485|        }
_ZN5phmap4priveqERKNS0_12raw_hash_setINS0_17FlatHashMapPolicyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEES9_EENS_4HashIS9_EENS_7EqualToIS9_EENS7_INS3_4pairIKS9_S9_EEEEE8iteratorESM_:
  985|    485|        friend bool operator==(const iterator& a, const iterator& b) {
  986|    485|            return a.ctrl_ == b.ctrl_;
  987|    485|        }

_ZN5phmap4priv18hash_policy_traitsINS0_17FlatHashMapPolicyIjiEEvE7destroyINSt3__19allocatorINS6_4pairIKjiEEEEEEvPT_PNS0_13map_slot_typeIjiEE:
  448|  1.17M|    static void destroy(Alloc* alloc, slot_type* slot) {
  449|  1.17M|        Policy::destroy(alloc, slot);
  450|  1.17M|    }
_ZN5phmap4priv15map_slot_policyIjiE7destroyINSt3__19allocatorINS4_4pairIKjiEEEEEEvPT_PNS0_13map_slot_typeIjiEE:
 4485|  2.21M|    static void destroy(Allocator* alloc, slot_type* slot) {
 4486|  2.21M|        if (kMutableKeys::value) {
  ------------------
  |  Branch (4486:13): [Folded - Ignored]
  ------------------
 4487|  2.21M|            phmap::allocator_traits<Allocator>::destroy(*alloc, &slot->mutable_value);
 4488|  2.21M|        } else {
 4489|      0|            phmap::allocator_traits<Allocator>::destroy(*alloc, &slot->value);
 4490|      0|        }
 4491|  2.21M|    }
_ZN5phmap16allocator_traitsINSt3__19allocatorINS1_4pairIKjiEEEEE7destroyINS3_IjiEEEEvRS6_PT_:
 1471|  2.21M|    static void destroy(Alloc& a, T* p) {  // NOLINT(runtime/references)
 1472|  2.21M|        destroy_impl(0, a, p);
 1473|  2.21M|    }
_ZN5phmap16allocator_traitsINSt3__19allocatorINS1_4pairIKjiEEEEE12destroy_implIS6_NS3_IjiEEEEDTclsr3std16allocator_traitsIT_EE7destroyfp0_fp1_EEiRSA_PT0_:
 1513|  2.21M|                             T* p) -> decltype(std::allocator_traits<A>::destroy(a, p)) {
 1514|  2.21M|        std::allocator_traits<A>::destroy(a, p);
 1515|  2.21M|    }
_ZN5phmap4priv6LayoutIJaNS0_13map_slot_typeIjiEEEEC2Emm:
 4127|  5.58k|        : internal_layout::LayoutType<sizeof...(Ts), Ts...>(sizes...) {}
_ZN5phmap4priv15internal_layout10LayoutImplINSt3__15tupleIJaNS0_13map_slot_typeIjiEEEEENS_16integer_sequenceImJLm0ELm1EEEES9_EC2Emm:
 3832|  5.58k|        : size_{sizes...} {}
_ZN5phmap4priv29SanitizerUnpoisonMemoryRegionEPKvm:
 4194|  1.63M|inline void SanitizerUnpoisonMemoryRegion(const void* m, size_t s) {
 4195|       |#ifdef ADDRESS_SANITIZER
 4196|       |    ASAN_UNPOISON_MEMORY_REGION(m, s);
 4197|       |#endif
 4198|       |#ifdef MEMORY_SANITIZER
 4199|       |    __msan_unpoison(m, s);
 4200|       |#endif
 4201|  1.63M|    (void)m;
 4202|  1.63M|    (void)s;
 4203|  1.63M|}
_ZN5phmap4priv10DeallocateILm4ENSt3__19allocatorINS2_4pairIKjiEEEEEEvPT0_Pvm:
 4166|  2.79k|void Deallocate(Alloc* alloc, void* p, size_t n) {
 4167|  2.79k|  static_assert(Alignment > 0, "");
 4168|  2.79k|  assert(n && "n must be positive");
 4169|      0|  struct alignas(Alignment) M {};
 4170|  2.79k|  using A = typename phmap::allocator_traits<Alloc>::template rebind_alloc<M>;
 4171|  2.79k|  using AT = typename phmap::allocator_traits<Alloc>::template rebind_traits<M>;
 4172|  2.79k|  A mem_alloc(*alloc);
 4173|  2.79k|  AT::deallocate(mem_alloc, static_cast<M*>(p),
 4174|  2.79k|                 (n + sizeof(M) - 1) / sizeof(M));
 4175|  2.79k|}
_ZN5phmap16allocator_traitsINSt3__19allocatorIZNS_4priv10DeallocateILm4ENS2_INS1_4pairIKjiEEEEEEvPT0_PvmE1MEEE10deallocateERSD_PSC_m:
 1454|  2.79k|                           size_type n) {
 1455|  2.79k|        a.deallocate(p, n);
 1456|  2.79k|    }
_ZNK5phmap4priv15internal_layout10LayoutImplINSt3__15tupleIJaNS0_13map_slot_typeIjiEEEEENS_16integer_sequenceImJLm0ELm1EEEES9_E9AllocSizeEv:
 4047|  5.58k|    constexpr size_t AllocSize() const {
 4048|  5.58k|        static_assert(NumTypes == NumSizes, "You must specify sizes of all fields");
 4049|  5.58k|        return Offset<NumTypes - 1>() +
 4050|  5.58k|            SizeOf<ElementType<NumTypes - 1>>::value * size_[NumTypes - 1];
 4051|  5.58k|    }
_ZNK5phmap4priv15internal_layout10LayoutImplINSt3__15tupleIJaNS0_13map_slot_typeIjiEEEEENS_16integer_sequenceImJLm0ELm1EEEES9_E6OffsetILm1ELi0EEEmv:
 3854|  8.38k|        constexpr size_t Offset() const {
 3855|  8.38k|        static_assert(N < NumOffsets, "Index out of bounds");
 3856|  8.38k|        return adl_barrier::Align(
 3857|  8.38k|            Offset<N - 1>() + SizeOf<ElementType<N - 1>>::value * size_[N - 1],
 3858|  8.38k|            ElementAlignment<N>::value);
 3859|  8.38k|    }
_ZN5phmap4priv15internal_layout11adl_barrier5AlignEmm:
 3748|  8.38k|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:
 3849|  11.1k|        constexpr size_t Offset() const {
 3850|  11.1k|        return 0;
 3851|  11.1k|    }
_ZN5phmap4priv18hash_policy_traitsINS0_17FlatHashMapPolicyIjiEEvE5applyINS0_12raw_hash_setIS3_NS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINSB_4pairIKjiEEEEE19EmplaceDecomposableEJSF_ES3_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSK_DpOSL_:
  517|  8.71M|        -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  518|  8.71M|        return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  519|  8.71M|    }
_ZN5phmap4priv18hash_policy_traitsINS0_17FlatHashMapPolicyIjiEEvE5applyINS0_12raw_hash_setIS3_NS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINSB_4pairIKjiEEEEE12EqualElementIjEEJRSF_ES3_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSM_DpOSN_:
  517|  10.4M|        -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  518|  10.4M|        return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  519|  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:
  471|  12.6M|    static auto element(slot_type* slot) -> decltype(P::element(slot)) {
  472|  12.6M|        return P::element(slot);
  473|  12.6M|    }
_ZN5phmap4priv8AllocateILm4ENSt3__19allocatorINS2_4pairIKjiEEEEEEPvPT0_m:
 4148|  2.79k|void* Allocate(Alloc* alloc, size_t n) {
 4149|  2.79k|  static_assert(Alignment > 0, "");
 4150|  2.79k|  assert(n && "n must be positive");
 4151|      0|  struct alignas(Alignment) M {};
 4152|  2.79k|  using A = typename phmap::allocator_traits<Alloc>::template rebind_alloc<M>;
 4153|  2.79k|  using AT = typename phmap::allocator_traits<Alloc>::template rebind_traits<M>;
 4154|  2.79k|  A mem_alloc(*alloc);
 4155|  2.79k|  void* p = AT::allocate(mem_alloc, (n + sizeof(M) - 1) / sizeof(M));
 4156|  2.79k|  assert(reinterpret_cast<uintptr_t>(p) % Alignment == 0 &&
 4157|  2.79k|         "allocator does not respect alignment");
 4158|      0|  return p;
 4159|  2.79k|}
_ZN5phmap16allocator_traitsINSt3__19allocatorIZNS_4priv8AllocateILm4ENS2_INS1_4pairIKjiEEEEEEPvPT0_mE1MEEE8allocateERSD_m:
 1439|  2.79k|                            size_type n) {
 1440|  2.79k|        return a.allocate(n);
 1441|  2.79k|    }
_ZNK5phmap4priv15internal_layout10LayoutImplINSt3__15tupleIJaNS0_13map_slot_typeIjiEEEEENS_16integer_sequenceImJLm0ELm1EEEES9_E7PointerILm0EcEEPNS3_11conditionalIXsr3std8is_constIT0_EE5valueEKNS3_13tuple_elementIXT_ES7_E4typeESG_E4typeEPSD_:
 3925|  2.79k|        CopyConst<Char, ElementType<N>>* Pointer(Char* p) const {
 3926|  2.79k|        using C = typename std::remove_const<Char>::type;
 3927|  2.79k|        static_assert(
 3928|  2.79k|            std::is_same<C, char>() || std::is_same<C, unsigned char>() ||
 3929|  2.79k|            std::is_same<C, signed char>(),
 3930|  2.79k|            "The argument must be a pointer to [const] [signed|unsigned] char");
 3931|  2.79k|        constexpr size_t alignment = Alignment();
 3932|  2.79k|        (void)alignment;
 3933|  2.79k|        assert(reinterpret_cast<uintptr_t>(p) % alignment == 0);
 3934|      0|        return reinterpret_cast<CopyConst<Char, ElementType<N>>*>(p + Offset<N>());
 3935|  2.79k|    }
_ZNK5phmap4priv15internal_layout10LayoutImplINSt3__15tupleIJaNS0_13map_slot_typeIjiEEEEENS_16integer_sequenceImJLm0ELm1EEEES9_E7PointerILm1EcEEPNS3_11conditionalIXsr3std8is_constIT0_EE5valueEKNS3_13tuple_elementIXT_ES7_E4typeESG_E4typeEPSD_:
 3925|  2.79k|        CopyConst<Char, ElementType<N>>* Pointer(Char* p) const {
 3926|  2.79k|        using C = typename std::remove_const<Char>::type;
 3927|  2.79k|        static_assert(
 3928|  2.79k|            std::is_same<C, char>() || std::is_same<C, unsigned char>() ||
 3929|  2.79k|            std::is_same<C, signed char>(),
 3930|  2.79k|            "The argument must be a pointer to [const] [signed|unsigned] char");
 3931|  2.79k|        constexpr size_t alignment = Alignment();
 3932|  2.79k|        (void)alignment;
 3933|  2.79k|        assert(reinterpret_cast<uintptr_t>(p) % alignment == 0);
 3934|      0|        return reinterpret_cast<CopyConst<Char, ElementType<N>>*>(p + Offset<N>());
 3935|  2.79k|    }
_ZN5phmap4priv27SanitizerPoisonMemoryRegionEPKvm:
 4183|  2.79k|inline void SanitizerPoisonMemoryRegion(const void* m, size_t s) {
 4184|       |#ifdef ADDRESS_SANITIZER
 4185|       |    ASAN_POISON_MEMORY_REGION(m, s);
 4186|       |#endif
 4187|       |#ifdef MEMORY_SANITIZER
 4188|       |    __msan_poison(m, s);
 4189|       |#endif
 4190|  2.79k|    (void)m;
 4191|  2.79k|    (void)s;
 4192|  2.79k|}
_ZN5phmap4priv18hash_policy_traitsINS0_17FlatHashMapPolicyIjiEEvE5applyINS0_12raw_hash_setIS3_NS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINSB_4pairIKjiEEEEE11HashElementEJRSF_ES3_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSL_DpOSM_:
  517|  1.04M|        -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  518|  1.04M|        return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  519|  1.04M|    }
_ZN5phmap4priv18hash_policy_traitsINS0_17FlatHashMapPolicyIjiEEvE8transferINSt3__19allocatorINS6_4pairIKjiEEEEEEvPT_PNS0_13map_slot_typeIjiEESG_:
  464|  1.04M|    static void transfer(Alloc* alloc, slot_type* new_slot, slot_type* old_slot) {
  465|  1.04M|        transfer_impl(alloc, new_slot, old_slot, 0);
  466|  1.04M|    }
_ZN5phmap4priv18hash_policy_traitsINS0_17FlatHashMapPolicyIjiEEvE13transfer_implINSt3__19allocatorINS6_4pairIKjiEEEES3_EEDTcvvclsrT0_8transferfp_fp0_fp1_EEPT_PNS0_13map_slot_typeIjiEESI_i:
  542|  1.04M|        -> decltype((void)P::transfer(alloc, new_slot, old_slot)) {
  543|  1.04M|        P::transfer(alloc, new_slot, old_slot);
  544|  1.04M|    }
_ZN5phmap4priv15map_slot_policyIjiE8transferINSt3__19allocatorINS4_4pairIKjiEEEEEEvPT_PNS0_13map_slot_typeIjiEESE_:
 4495|  1.04M|                         slot_type* old_slot) {
 4496|  1.04M|        emplace(new_slot);
 4497|  1.04M|        if (kMutableKeys::value) {
  ------------------
  |  Branch (4497:13): [Folded - Ignored]
  ------------------
 4498|  1.04M|            phmap::allocator_traits<Allocator>::construct(
 4499|  1.04M|                *alloc, &new_slot->mutable_value, std::move(old_slot->mutable_value));
 4500|  1.04M|        } else {
 4501|      0|            phmap::allocator_traits<Allocator>::construct(*alloc, &new_slot->value,
 4502|      0|                                                         std::move(old_slot->value));
 4503|      0|        }
 4504|  1.04M|        destroy(alloc, old_slot);
 4505|  1.04M|    }
_ZN5phmap4priv15map_slot_policyIjiE7emplaceEPNS0_13map_slot_typeIjiEE:
 4439|  1.63M|    static void emplace(slot_type* slot) {
 4440|       |        // The construction of union doesn't do anything at runtime but it allows us
 4441|       |        // to access its members without violating aliasing rules.
 4442|  1.63M|        new (slot) slot_type;
 4443|  1.63M|    }
_ZN5phmap4priv13map_slot_typeIjiEC2Ev:
 4416|  1.63M|    map_slot_type() {}
_ZN5phmap16allocator_traitsINSt3__19allocatorINS1_4pairIKjiEEEEE9constructINS3_IjiEEJS9_EEEvRS6_PT_DpOT0_:
 1464|  1.04M|                          Args&&... args) {
 1465|  1.04M|        construct_impl(0, a, p, std::forward<Args>(args)...);
 1466|  1.04M|    }
_ZN5phmap16allocator_traitsINSt3__19allocatorINS1_4pairIKjiEEEEE14construct_implIS6_JRPNS3_IjiEES9_EEEDTclsr3std16allocator_traitsIT_EE9constructfp0_spclsr3stdE7forwardIT0_Efp1_EEEiRSC_DpOSD_:
 1502|  1.04M|        -> decltype(std::allocator_traits<A>::construct(a, std::forward<Args>(args)...)) {
 1503|  1.04M|        std::allocator_traits<A>::construct(a, std::forward<Args>(args)...);
 1504|  1.04M|    }
_ZN5phmap4priv18hash_policy_traitsINS0_17FlatHashMapPolicyIjiEEvE9constructINSt3__19allocatorINS6_4pairIKjiEEEEJRKNS6_21piecewise_construct_tENS6_5tupleIJOS9_EEENSF_IJOiEEEEEEvPT_PNS0_13map_slot_typeIjiEEDpOT0_:
  441|   591k|    static void construct(Alloc* alloc, slot_type* slot, Args&&... args) {
  442|   591k|        Policy::construct(alloc, slot, std::forward<Args>(args)...);
  443|   591k|    }
_ZN5phmap4priv15map_slot_policyIjiE9constructINSt3__19allocatorINS4_4pairIKjiEEEEJRKNS4_21piecewise_construct_tENS4_5tupleIJOS7_EEENSD_IJOiEEEEEEvPT_PNS0_13map_slot_typeIjiEEDpOT0_:
 4460|   591k|    static void construct(Allocator* alloc, slot_type* slot, Args&&... args) {
 4461|   591k|        emplace(slot);
 4462|   591k|        if (kMutableKeys::value) {
  ------------------
  |  Branch (4462:13): [Folded - Ignored]
  ------------------
 4463|   591k|            phmap::allocator_traits<Allocator>::construct(*alloc, &slot->mutable_value,
 4464|   591k|                                                         std::forward<Args>(args)...);
 4465|   591k|        } else {
 4466|      0|            phmap::allocator_traits<Allocator>::construct(*alloc, &slot->value,
 4467|      0|                                                         std::forward<Args>(args)...);
 4468|      0|        }
 4469|   591k|    }
_ZN5phmap16allocator_traitsINSt3__19allocatorINS1_4pairIKjiEEEEE9constructINS3_IjiEEJRKNS1_21piecewise_construct_tENS1_5tupleIJOS4_EEENSD_IJOiEEEEEEvRS6_PT_DpOT0_:
 1464|   591k|                          Args&&... args) {
 1465|   591k|        construct_impl(0, a, p, std::forward<Args>(args)...);
 1466|   591k|    }
_ZN5phmap16allocator_traitsINSt3__19allocatorINS1_4pairIKjiEEEEE14construct_implIS6_JRPNS3_IjiEERKNS1_21piecewise_construct_tENS1_5tupleIJOS4_EEENSF_IJOiEEEEEEDTclsr3std16allocator_traitsIT_EE9constructfp0_spclsr3stdE7forwardIT0_Efp1_EEEiRSK_DpOSL_:
 1502|   591k|        -> decltype(std::allocator_traits<A>::construct(a, std::forward<Args>(args)...)) {
 1503|   591k|        std::allocator_traits<A>::construct(a, std::forward<Args>(args)...);
 1504|   591k|    }
_ZN5phmap4priv23SanitizerUnpoisonObjectINS0_13map_slot_typeIjiEEEEvPKT_:
 4211|  1.63M|inline void SanitizerUnpoisonObject(const T* object) {
 4212|  1.63M|    SanitizerUnpoisonMemoryRegion(object, sizeof(T));
 4213|  1.63M|}
_ZN5phmap4priv18hash_policy_traitsINS0_17FlatHashMapPolicyIjiEEvE5applyINS0_12raw_hash_setIS3_NS_4HashIjEENS_7EqualToIjEENSt3__19allocatorINSB_4pairIKjiEEEEE11HashElementEJRKSF_ES3_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSM_DpOSN_:
  517|   578k|        -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  518|   578k|        return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  519|   578k|    }

_ZN5phmap13base_internal27CountTrailingZerosNonZero32Ej:
  396|  12.8M|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|  12.8M|    static_assert(sizeof(int) == sizeof(n),
  403|  12.8M|                  "__builtin_ctz does not take 32-bit arg");
  404|  12.8M|    return __builtin_ctz(n);
  405|       |#else
  406|       |    return CountTrailingZerosNonZero32Slow(n);
  407|       |#endif
  408|  12.8M|}
_Z7umul128mmPm:
  187|  10.3M|    {
  188|  10.3M|        auto result = static_cast<phmap_uint128>(a) * static_cast<phmap_uint128>(b);
  189|  10.3M|        *high = static_cast<uint64_t>(result >> 64);
  190|  10.3M|        return static_cast<uint64_t>(result);
  191|  10.3M|    }

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

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

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

