forked from OSchip/llvm-project
SmallPtrSet: Reuse DenseMapInfo's pointer hash function instead of inventing a bad one ourselves.
DenseMap's hash function uses slightly more entropy and reduces hash collisions significantly. I also experimented with Hashing.h, but it didn't gave a lot of improvement while being much more expensive to compute. llvm-svn: 154996
This commit is contained in:
parent
b0e9789899
commit
94988cb34c
|
@ -126,9 +126,6 @@ protected:
|
|||
private:
|
||||
bool isSmall() const { return CurArray == SmallArray; }
|
||||
|
||||
unsigned Hash(const void *Ptr) const {
|
||||
return static_cast<unsigned>(((uintptr_t)Ptr >> 4) & (CurArraySize-1));
|
||||
}
|
||||
const void * const *FindBucketFor(const void *Ptr) const;
|
||||
void shrink_and_clear();
|
||||
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "llvm/ADT/SmallPtrSet.h"
|
||||
#include "llvm/ADT/DenseMapInfo.h"
|
||||
#include "llvm/Support/MathExtras.h"
|
||||
#include <algorithm>
|
||||
#include <cstdlib>
|
||||
|
@ -102,7 +103,7 @@ bool SmallPtrSetImpl::erase_imp(const void * Ptr) {
|
|||
}
|
||||
|
||||
const void * const *SmallPtrSetImpl::FindBucketFor(const void *Ptr) const {
|
||||
unsigned Bucket = Hash(Ptr);
|
||||
unsigned Bucket = DenseMapInfo<void *>::getHashValue(Ptr) & (CurArraySize-1);
|
||||
unsigned ArraySize = CurArraySize;
|
||||
unsigned ProbeAmt = 1;
|
||||
const void *const *Array = CurArray;
|
||||
|
|
Loading…
Reference in New Issue