mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-28 03:25:23 +00:00
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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@154996 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -126,9 +126,6 @@ protected:
|
|||||||
private:
|
private:
|
||||||
bool isSmall() const { return CurArray == SmallArray; }
|
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;
|
const void * const *FindBucketFor(const void *Ptr) const;
|
||||||
void shrink_and_clear();
|
void shrink_and_clear();
|
||||||
|
|
||||||
|
@@ -13,6 +13,7 @@
|
|||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
#include "llvm/ADT/SmallPtrSet.h"
|
#include "llvm/ADT/SmallPtrSet.h"
|
||||||
|
#include "llvm/ADT/DenseMapInfo.h"
|
||||||
#include "llvm/Support/MathExtras.h"
|
#include "llvm/Support/MathExtras.h"
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
@@ -102,7 +103,7 @@ bool SmallPtrSetImpl::erase_imp(const void * Ptr) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const void * const *SmallPtrSetImpl::FindBucketFor(const void *Ptr) const {
|
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 ArraySize = CurArraySize;
|
||||||
unsigned ProbeAmt = 1;
|
unsigned ProbeAmt = 1;
|
||||||
const void *const *Array = CurArray;
|
const void *const *Array = CurArray;
|
||||||
|
Reference in New Issue
Block a user