[llvm-commits] [llvm] r166493 - /llvm/trunk/include/llvm/ADT/DenseMap.h

Pete Cooper peter_cooper at apple.com
Tue Oct 23 12:34:36 PDT 2012


Author: pete
Date: Tue Oct 23 14:34:36 2012
New Revision: 166493

URL: http://llvm.org/viewvc/llvm-project?rev=166493&view=rev
Log:
Change DenseMap to use a power of 2 growth if one is given instead of the next power of 2.  This was causing DenseMaps to grow 4x instead of 2x.  I'll keep an eye on the buildbots as this could impact performance

Modified:
    llvm/trunk/include/llvm/ADT/DenseMap.h

Modified: llvm/trunk/include/llvm/ADT/DenseMap.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/DenseMap.h?rev=166493&r1=166492&r2=166493&view=diff
==============================================================================
--- llvm/trunk/include/llvm/ADT/DenseMap.h (original)
+++ llvm/trunk/include/llvm/ADT/DenseMap.h Tue Oct 23 14:34:36 2012
@@ -420,7 +420,7 @@
       NumBuckets = getNumBuckets();
     }
     if (NumBuckets-(NewNumEntries+getNumTombstones()) <= NumBuckets/8) {
-      this->grow(NumBuckets);
+      this->grow(NumBuckets * 2);
       LookupBucketFor(Key, TheBucket);
     }
     assert(TheBucket);
@@ -600,7 +600,8 @@
     unsigned OldNumBuckets = NumBuckets;
     BucketT *OldBuckets = Buckets;
 
-    allocateBuckets(std::max<unsigned>(64, NextPowerOf2(AtLeast)));
+    AtLeast = isPowerOf2_32(AtLeast) ? AtLeast : NextPowerOf2(AtLeast);
+    allocateBuckets(std::max<unsigned>(64, AtLeast));
     assert(Buckets);
     if (!OldBuckets) {
       this->BaseT::initEmpty();
@@ -826,8 +827,10 @@
   }
 
   void grow(unsigned AtLeast) {
-    if (AtLeast >= InlineBuckets)
-      AtLeast = std::max<unsigned>(64, NextPowerOf2(AtLeast));
+    if (AtLeast >= InlineBuckets) {
+      AtLeast = isPowerOf2_32(AtLeast) ? AtLeast : NextPowerOf2(AtLeast);
+      AtLeast = std::max<unsigned>(64, AtLeast);
+    }
 
     if (Small) {
       if (AtLeast < InlineBuckets)





More information about the llvm-commits mailing list