[llvm] RFC: [ADT] Use a storage policy in DenseMap/SmallDenseMap (NFC) (PR #168255)

Kazu Hirata via llvm-commits llvm-commits at lists.llvm.org
Sun Nov 16 16:29:13 PST 2025


================
@@ -518,43 +566,46 @@ class DenseMapBase : public DebugEpochBase {
     return const_iterator::makeIterator(TheBucket, buckets(), *this);
   }
 
-  unsigned getNumEntries() const { return derived().getNumEntries(); }
+  unsigned getNumEntries() const { return Storage.getNumEntries(); }
 
-  void setNumEntries(unsigned Num) { derived().setNumEntries(Num); }
+  void setNumEntries(unsigned Num) { Storage.setNumEntries(Num); }
 
   void incrementNumEntries() { setNumEntries(getNumEntries() + 1); }
 
   void decrementNumEntries() { setNumEntries(getNumEntries() - 1); }
 
-  unsigned getNumTombstones() const { return derived().getNumTombstones(); }
+  unsigned getNumTombstones() const { return Storage.getNumTombstones(); }
 
-  void setNumTombstones(unsigned Num) { derived().setNumTombstones(Num); }
+  void setNumTombstones(unsigned Num) { Storage.setNumTombstones(Num); }
 
   void incrementNumTombstones() { setNumTombstones(getNumTombstones() + 1); }
 
   void decrementNumTombstones() { setNumTombstones(getNumTombstones() - 1); }
 
-  const BucketT *getBuckets() const { return derived().getBuckets(); }
+  const BucketT *getBuckets() const { return Storage.getBuckets(); }
 
-  BucketT *getBuckets() { return derived().getBuckets(); }
+  BucketT *getBuckets() { return Storage.getBuckets(); }
 
-  unsigned getNumBuckets() const { return derived().getNumBuckets(); }
-
-  BucketT *getBucketsEnd() { return getBuckets() + getNumBuckets(); }
-
-  const BucketT *getBucketsEnd() const {
-    return getBuckets() + getNumBuckets();
-  }
+  unsigned getNumBuckets() const { return Storage.getNumBuckets(); }
 
   iterator_range<BucketT *> buckets() {
-    return llvm::make_range(getBuckets(), getBucketsEnd());
+    return {getBuckets(), getBuckets() + getNumBuckets()};
   }
 
   iterator_range<const BucketT *> buckets() const {
-    return llvm::make_range(getBuckets(), getBucketsEnd());
+    return {getBuckets(), getBuckets() + getNumBuckets()};
   }
 
-  void grow(unsigned AtLeast) { derived().grow(AtLeast); }
+  void grow(unsigned AtLeast) {
+    AtLeast = Storage.computeNumBuckets(AtLeast);
----------------
kazutakahirata wrote:

Fixed in this draft PR also.

https://github.com/llvm/llvm-project/pull/168255


More information about the llvm-commits mailing list