diff --git a/include/llvm/ADT/DenseMap.h b/include/llvm/ADT/DenseMap.h index 082fc35afa2..78caba52a51 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 #include @@ -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];