diff options
-rw-r--r-- | include/llvm/ADT/DenseMap.h | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/include/llvm/ADT/DenseMap.h b/include/llvm/ADT/DenseMap.h index 082fc35..78caba5 100644 --- a/include/llvm/ADT/DenseMap.h +++ b/include/llvm/ADT/DenseMap.h @@ -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]; |