[llvm] [ADT] Remove bucket_begin, bucket_end, and FoldingSetBucketIterator (NFC) (PR #216548)

Kazu Hirata via llvm-commits llvm-commits at lists.llvm.org
Sun Aug 16 00:41:34 PDT 2026


https://github.com/kazutakahirata created https://github.com/llvm/llvm-project/pull/216548

This patch removes bucket_begin, bucket_end, and the underlying
FoldingSetBucketIterator and FoldingSetBucketIteratorImpl classes in
FoldingSet.

These were added on February 4, 2008 in commit
e2887863563fe5d2fdd8e1219b76fdc1ee9ec37d for ImutAVLTree in
ImmutableSet.h.  The last use was removed on November 30, 2010 in commit
dbd89971ffb3a222dc91513585e8d6b5bc7882db when ImmutableSet switched
from FoldingSet to DenseSet.

Assisted-by: Antigravity


>From c544d97e07b742ecd0c113768d84e34f253081b5 Mon Sep 17 00:00:00 2001
From: Kazu Hirata <kazu at google.com>
Date: Sat, 15 Aug 2026 12:42:25 -0700
Subject: [PATCH] [ADT] Remove bucket_begin, bucket_end, and
 FoldingSetBucketIterator (NFC)

This patch removes bucket_begin, bucket_end, and the underlying
FoldingSetBucketIterator and FoldingSetBucketIteratorImpl classes in
FoldingSet.

These were added on February 4, 2008 in commit
e2887863563fe5d2fdd8e1219b76fdc1ee9ec37d for ImutAVLTree in
ImmutableSet.h.  The last use was removed on November 30, 2010 in commit
dbd89971ffb3a222dc91513585e8d6b5bc7882db when ImmutableSet switched
from FoldingSet to DenseSet.

Assisted-by: Antigravity
---
 llvm/include/llvm/ADT/FoldingSet.h | 60 +-----------------------------
 llvm/lib/Support/FoldingSet.cpp    |  7 ----
 2 files changed, 1 insertion(+), 66 deletions(-)

diff --git a/llvm/include/llvm/ADT/FoldingSet.h b/llvm/include/llvm/ADT/FoldingSet.h
index cde22fe35e390..8a62bb411397d 100644
--- a/llvm/include/llvm/ADT/FoldingSet.h
+++ b/llvm/include/llvm/ADT/FoldingSet.h
@@ -402,8 +402,7 @@ class FoldingSetBase {
 
 // Convenience type to hide the implementation of the folding set.
 using FoldingSetNode = FoldingSetBase::Node;
-template<class T> class FoldingSetIterator;
-template<class T> class FoldingSetBucketIterator;
+template <class T> class FoldingSetIterator;
 
 // Definitions of FoldingSetTrait and ContextualFoldingSetTrait functions, which
 // require the definition of FoldingSetNodeID.
@@ -463,16 +462,6 @@ template <class Derived, class T> class FoldingSetImpl : public FoldingSetBase {
   const_iterator begin() const { return const_iterator(Buckets); }
   const_iterator end() const { return const_iterator(Buckets+NumBuckets); }
 
-  using bucket_iterator = FoldingSetBucketIterator<T>;
-
-  bucket_iterator bucket_begin(unsigned hash) {
-    return bucket_iterator(Buckets + (hash & (NumBuckets-1)));
-  }
-
-  bucket_iterator bucket_end(unsigned hash) {
-    return bucket_iterator(Buckets + (hash & (NumBuckets-1)), true);
-  }
-
   /// Increase the number of buckets such that adding the \p EltCount th node
   /// won't cause a rebucket operation. reserve is permitted to allocate more
   /// space than requested by EltCount.
@@ -733,53 +722,6 @@ template <class T> class FoldingSetIterator : public FoldingSetIteratorImpl {
   }
 };
 
-//===----------------------------------------------------------------------===//
-/// This is the common bucket iterator support shared by all folding sets, which
-/// knows how to walk a particular bucket of a folding set hash table.
-class FoldingSetBucketIteratorImpl {
-protected:
-  void *Ptr;
-
-  LLVM_ABI explicit FoldingSetBucketIteratorImpl(void **Bucket);
-
-  FoldingSetBucketIteratorImpl(void **Bucket, bool) : Ptr(Bucket) {}
-
-  void advance() {
-    void *Probe = static_cast<FoldingSetNode*>(Ptr)->getNextInBucket();
-    uintptr_t x = reinterpret_cast<uintptr_t>(Probe) & ~0x1;
-    Ptr = reinterpret_cast<void*>(x);
-  }
-
-public:
-  bool operator==(const FoldingSetBucketIteratorImpl &RHS) const {
-    return Ptr == RHS.Ptr;
-  }
-  bool operator!=(const FoldingSetBucketIteratorImpl &RHS) const {
-    return Ptr != RHS.Ptr;
-  }
-};
-
-template <class T>
-class FoldingSetBucketIterator : public FoldingSetBucketIteratorImpl {
-public:
-  explicit FoldingSetBucketIterator(void **Bucket) :
-    FoldingSetBucketIteratorImpl(Bucket) {}
-
-  FoldingSetBucketIterator(void **Bucket, bool) :
-    FoldingSetBucketIteratorImpl(Bucket, true) {}
-
-  T &operator*() const { return *static_cast<T*>(Ptr); }
-  T *operator->() const { return static_cast<T*>(Ptr); }
-
-  inline FoldingSetBucketIterator &operator++() { // Preincrement
-    advance();
-    return *this;
-  }
-  FoldingSetBucketIterator operator++(int) {      // Postincrement
-    FoldingSetBucketIterator tmp = *this; ++*this; return tmp;
-  }
-};
-
 //===----------------------------------------------------------------------===//
 /// This template class is used to "wrap" arbitrary types in an enclosing object
 /// so that they can be inserted into FoldingSets.
diff --git a/llvm/lib/Support/FoldingSet.cpp b/llvm/lib/Support/FoldingSet.cpp
index 3df1e655a2ea1..c8c732f852beb 100644
--- a/llvm/lib/Support/FoldingSet.cpp
+++ b/llvm/lib/Support/FoldingSet.cpp
@@ -416,10 +416,3 @@ void FoldingSetIteratorImpl::advance() {
     NodePtr = static_cast<FoldingSetNode*>(*Bucket);
   }
 }
-
-//===----------------------------------------------------------------------===//
-// FoldingSetBucketIteratorImpl Implementation
-
-FoldingSetBucketIteratorImpl::FoldingSetBucketIteratorImpl(void **Bucket) {
-  Ptr = (!*Bucket || !GetNextPtr(*Bucket)) ? (void*) Bucket : *Bucket;
-}



More information about the llvm-commits mailing list