[llvm] [FoldingSet] Switch to linear probing and Algorithm R deletion (PR #218190)
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Wed Aug 26 10:53:20 PDT 2026
================
@@ -207,145 +175,110 @@ FoldingSetBase::~FoldingSetBase() { free(Buckets); }
void FoldingSetBase::clear() {
incrementEpoch();
- // Set all but the last bucket to null pointers.
- memset(Buckets, 0, NumBuckets * sizeof(void *));
-
- // Set the very last bucket to be a non-null "pointer".
- Buckets[NumBuckets] = reinterpret_cast<void *>(-1);
-
- // Reset the node count to zero.
+ // Stale hashes are unreachable, so only the occupancy needs resetting.
+ if (NumBuckets)
+ memset(Buckets, 0, NumBuckets * sizeof(void *));
NumNodes = 0;
}
-void FoldingSetBase::GrowBucketCount(unsigned NewBucketCount,
- const FoldingSetInfo &Info) {
- assert((NewBucketCount > NumBuckets) &&
- "Can't shrink a folding set with GrowBucketCount");
- assert(isPowerOf2_32(NewBucketCount) && "Bad bucket count!");
+void FoldingSetBase::placeNode(Node *N, uint32_t Hash) {
+ unsigned Mask = NumBuckets - 1;
+ unsigned I = Hash & Mask;
+ while (Buckets[I]) {
+ // A second copy of N hashes here too, so the probe always passes it.
----------------
MaskRay wrote:
Deleted
https://github.com/llvm/llvm-project/pull/218190
More information about the llvm-commits
mailing list