Make the heuristic for shrinking DenseMap smarter.
authorOwen Anderson <resistor@mac.com>
Fri, 20 Jul 2007 18:56:46 +0000 (18:56 +0000)
committerOwen Anderson <resistor@mac.com>
Fri, 20 Jul 2007 18:56:46 +0000 (18:56 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40114 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/ADT/DenseMap.h

index 082fc35afa29f675f6bacf8c0c2c1d7c967d5582..78caba52a51c24b078a5b0d894bf9e1716117ed3 100644 (file)
@@ -15,6 +15,7 @@
 #define LLVM_ADT_DENSEMAP_H
 
 #include "llvm/Support/DataTypes.h"
+#include "llvm/Support/MathExtras.h"
 #include <cassert>
 #include <utility>
 
@@ -300,8 +301,9 @@ private:
     unsigned OldNumBuckets = NumBuckets;
     BucketT *OldBuckets = Buckets;
     
-    // Halve the number of buckets.
-    NumBuckets >>= 1;
+    // Reduce the number of buckets.
+    NumBuckets = NumEntries > 32 ? 1 << (Log2_32_Ceil(NumEntries) + 1)
+                                 : 64;
     NumTombstones = 0;
     Buckets = (BucketT*)new char[sizeof(BucketT)*NumBuckets];