summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorPete Cooper <peter_cooper@apple.com>2012-10-23 19:34:36 +0000
committerPete Cooper <peter_cooper@apple.com>2012-10-23 19:34:36 +0000
commit2430973fb657eb84dfbacb1e8886d3a29190e0b5 (patch)
treeaca6274e4728043ef1c6ed768a6d7e5a4566982f /include
parentfbaf206f470b5a6a54811547641ee41368a2cccd (diff)
downloadllvm-2430973fb657eb84dfbacb1e8886d3a29190e0b5.tar.gz
llvm-2430973fb657eb84dfbacb1e8886d3a29190e0b5.tar.bz2
llvm-2430973fb657eb84dfbacb1e8886d3a29190e0b5.tar.xz
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
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@166493 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r--include/llvm/ADT/DenseMap.h11
1 files changed, 7 insertions, 4 deletions
diff --git a/include/llvm/ADT/DenseMap.h b/include/llvm/ADT/DenseMap.h
index 0ae54f4292..ce07f8e9c5 100644
--- a/include/llvm/ADT/DenseMap.h
+++ b/include/llvm/ADT/DenseMap.h
@@ -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)