From d1b8c4240398bd1e4c507b1a62804f885b7139bc Mon Sep 17 00:00:00 2001 From: Kazu Hirata Date: Tue, 5 Aug 2025 08:44:38 -0700 Subject: [PATCH] [ADT] Use a range-based for loop in DenseMap.h (NFC) This patch teaches moveFromOldBuckets to take an iterator_range so that it can use a range-based for loop. --- llvm/include/llvm/ADT/DenseMap.h | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/llvm/include/llvm/ADT/DenseMap.h b/llvm/include/llvm/ADT/DenseMap.h index ea5eac4cc63f0..1f2721322e34a 100644 --- a/llvm/include/llvm/ADT/DenseMap.h +++ b/llvm/include/llvm/ADT/DenseMap.h @@ -454,28 +454,28 @@ class DenseMapBase : public DebugEpochBase { return NextPowerOf2(NumEntries * 4 / 3 + 1); } - void moveFromOldBuckets(BucketT *OldBucketsBegin, BucketT *OldBucketsEnd) { + void moveFromOldBuckets(iterator_range OldBuckets) { initEmpty(); // Insert all the old elements. const KeyT EmptyKey = getEmptyKey(); const KeyT TombstoneKey = getTombstoneKey(); - for (BucketT *B = OldBucketsBegin, *E = OldBucketsEnd; B != E; ++B) { - if (!KeyInfoT::isEqual(B->getFirst(), EmptyKey) && - !KeyInfoT::isEqual(B->getFirst(), TombstoneKey)) { + for (BucketT &B : OldBuckets) { + if (!KeyInfoT::isEqual(B.getFirst(), EmptyKey) && + !KeyInfoT::isEqual(B.getFirst(), TombstoneKey)) { // Insert the key/value into the new table. BucketT *DestBucket; - bool FoundVal = LookupBucketFor(B->getFirst(), DestBucket); + bool FoundVal = LookupBucketFor(B.getFirst(), DestBucket); (void)FoundVal; // silence warning. assert(!FoundVal && "Key already in new map?"); - DestBucket->getFirst() = std::move(B->getFirst()); - ::new (&DestBucket->getSecond()) ValueT(std::move(B->getSecond())); + DestBucket->getFirst() = std::move(B.getFirst()); + ::new (&DestBucket->getSecond()) ValueT(std::move(B.getSecond())); incrementNumEntries(); // Free the value. - B->getSecond().~ValueT(); + B.getSecond().~ValueT(); } - B->getFirst().~KeyT(); + B.getFirst().~KeyT(); } } @@ -867,7 +867,8 @@ class DenseMap : public DenseMapBase, return; } - this->moveFromOldBuckets(OldBuckets, OldBuckets + OldNumBuckets); + this->moveFromOldBuckets( + llvm::make_range(OldBuckets, OldBuckets + OldNumBuckets)); // Free the old table. deallocate_buffer(OldBuckets, sizeof(BucketT) * OldNumBuckets, @@ -952,6 +953,9 @@ class SmallDenseMap struct LargeRep { BucketT *Buckets; unsigned NumBuckets; + iterator_range buckets() { + return llvm::make_range(Buckets, Buckets + NumBuckets); + } }; /// A "union" of an inline bucket array and the struct representing @@ -1129,7 +1133,7 @@ class SmallDenseMap Small = false; new (getLargeRep()) LargeRep(allocateBuckets(AtLeast)); } - this->moveFromOldBuckets(TmpBegin, TmpEnd); + this->moveFromOldBuckets(llvm::make_range(TmpBegin, TmpEnd)); return; } @@ -1141,8 +1145,7 @@ class SmallDenseMap new (getLargeRep()) LargeRep(allocateBuckets(AtLeast)); } - this->moveFromOldBuckets(OldRep.Buckets, - OldRep.Buckets + OldRep.NumBuckets); + this->moveFromOldBuckets(OldRep.buckets()); // Free the old table. deallocate_buffer(OldRep.Buckets, sizeof(BucketT) * OldRep.NumBuckets,