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

llvm-svn: 166493
This commit is contained in:
Pete Cooper 2012-10-23 19:34:36 +00:00
parent 8ba353da39
commit 41ef09a4b5
1 changed files with 7 additions and 4 deletions

View File

@ -420,7 +420,7 @@ private:
NumBuckets = getNumBuckets();
}
if (NumBuckets-(NewNumEntries+getNumTombstones()) <= NumBuckets/8) {
this->grow(NumBuckets);
this->grow(NumBuckets * 2);
LookupBucketFor(Key, TheBucket);
}
assert(TheBucket);
@ -600,7 +600,8 @@ public:
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 @@ public:
}
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)