25void SmallPtrSetImplBase::shrink_and_clear() {
40std::pair<const void *const *, bool>
41SmallPtrSetImplBase::insert_imp_big(
const void *Ptr) {
48 const void **Bucket =
const_cast<const void**
>(FindBucketFor(Ptr));
50 return {Bucket,
false};
56 return {Bucket,
true};
59const void *
const *SmallPtrSetImplBase::doFind(
const void *Ptr)
const {
61 unsigned BucketNo = DenseMapInfo<void *>::getHashValue(Ptr) &
Mask;
63 const void *
const *Bucket =
CurArray + BucketNo;
68 BucketNo = (BucketNo + 1) & Mask;
72const void *
const *SmallPtrSetImplBase::FindBucketFor(
const void *Ptr)
const {
74 unsigned Bucket = DenseMapInfo<void *>::getHashValue(Ptr) &
Mask;
78 return Array + Bucket;
80 return Array + Bucket;
81 Bucket = (Bucket + 1) & Mask;
94 if (((
I - Ideal) & Mask) < ((J - Ideal) & Mask)) {
109 const void **NewBuckets = (
const void**)
safe_malloc(
sizeof(
void*) * NewSize);
114 memset(
CurArray, -1, NewSize*
sizeof(
void*));
117 for (
const void *&Bucket : OldBuckets) {
120 *
const_cast<void **
>(FindBucketFor(Bucket)) =
const_cast<void *
>(Bucket);
124 free(OldBuckets.begin());
145 const void **RHSSmallStorage,
147 moveHelper(SmallStorage, SmallSize, RHSSmallStorage, std::move(that));
152 assert(&RHS !=
this &&
"Self-copy should be handled by the caller.");
154 if (
isSmall() && RHS.isSmall())
156 "Cannot assign sets with different small sizes");
170 sizeof(
void*) * RHS.CurArraySize);
191 const void **RHSSmallStorage,
195 moveHelper(SmallStorage, SmallSize, RHSSmallStorage, std::move(RHS));
198void SmallPtrSetImplBase::moveHelper(
const void **SmallStorage,
200 const void **RHSSmallStorage,
202 assert(&RHS !=
this &&
"Self-move should be handled by the caller.");
210 RHS.CurArray = RHSSmallStorage;
219 RHS.CurArraySize = SmallSize;
225 const void **RHSSmallStorage,
227 if (
this == &RHS)
return;
232 std::swap(this->CurArraySize, RHS.CurArraySize);
241 unsigned MinEntries = std::min(this->
NumEntries, RHS.NumEntries);
242 std::swap_ranges(this->
CurArray, this->
CurArray + MinEntries, RHS.CurArray);
245 RHS.CurArray + MinEntries);
247 std::copy(RHS.CurArray + MinEntries, RHS.CurArray + RHS.NumEntries,
248 this->CurArray + MinEntries);
250 assert(this->CurArraySize == RHS.CurArraySize);
259 const void **LargeSideInlineStorage =
260 this->
isSmall() ? RHSSmallStorage : SmallStorage;
266 LargeSide.
CurArray = LargeSideInlineStorage;
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
#define LLVM_UNLIKELY(EXPR)
#define LLVM_LIKELY(EXPR)
This file defines DenseMapInfo traits for DenseMap.
This file defines counterparts of C library allocation functions defined in the namespace 'std'.
This file defines the SmallPtrSet class.
LocallyHashedType DenseMapInfo< LocallyHashedType >::Empty
SmallPtrSetImplBase - This is the common code shared among all the SmallPtrSet<>'s,...
iterator_range< const void ** > buckets()
LLVM_ABI SmallPtrSetImplBase(const void **SmallStorage, const SmallPtrSetImplBase &that)
unsigned NumEntries
Number of elements in CurArray that contain a value.
const void ** CurArray
The current set of buckets, in either small or big representation.
bool IsSmall
Whether the set is in small representation.
LLVM_ABI void copyFrom(const void **SmallStorage, const SmallPtrSetImplBase &RHS)
LLVM_ABI void moveFrom(const void **SmallStorage, unsigned SmallSize, const void **RHSSmallStorage, SmallPtrSetImplBase &&RHS)
iterator_range< const void ** > small_buckets()
unsigned CurArraySize
CurArraySize - The allocated size of CurArray, always a power of two.
LLVM_ABI void eraseFromBucket(const void **Bucket)
Erase the entry at Bucket and close the resulting hole via Knuth TAOCP 6.4 Algorithm R.
static void * getEmptyMarker()
LLVM_ABI void Grow(unsigned NewSize)
Allocate a larger backing store for the buckets and move it over.
LLVM_ABI void swap(const void **SmallStorage, const void **RHSSmallStorage, SmallPtrSetImplBase &RHS)
swap - Swaps the elements of two sets.
constexpr std::underlying_type_t< E > Mask()
Get a bitmask with 1s in all places up to the high-order bit of E's largest value.
This is an optimization pass for GlobalISel generic memory operations.
unsigned Log2_32_Ceil(uint32_t Value)
Return the ceil log base 2 of the specified value, 32 if the value is zero.
LLVM_ATTRIBUTE_RETURNS_NONNULL void * safe_malloc(size_t Sz)
LLVM_ATTRIBUTE_RETURNS_NONNULL void * safe_realloc(void *Ptr, size_t Sz)
OutputIt copy(R &&Range, OutputIt Out)
void swap(llvm::BitVector &LHS, llvm::BitVector &RHS)
Implement std::swap in terms of BitVector swap.
An information struct used to provide DenseMap with the various necessary components for a given valu...