25 void SmallPtrSetImplBase::shrink_and_clear() {
26 assert(!isSmall() &&
"Can't shrink a small set!");
40 std::pair<const void *const *, bool>
41 SmallPtrSetImplBase::insert_imp_big(
const void *Ptr) {
52 const void **Bucket =
const_cast<const void**
>(FindBucketFor(Ptr));
54 return std::make_pair(Bucket,
false);
63 return std::make_pair(Bucket,
true);
66 const void *
const *SmallPtrSetImplBase::FindBucketFor(
const void *Ptr)
const {
69 unsigned ProbeAmt = 1;
71 const void *
const *Tombstone =
nullptr;
77 return Tombstone ? Tombstone : Array+Bucket;
86 Tombstone = Array+Bucket;
89 Bucket = (Bucket + ProbeAmt++) & (ArraySize-1);
95 void SmallPtrSetImplBase::Grow(
unsigned NewSize) {
98 bool WasSmall = isSmall();
101 const void **NewBuckets = (
const void**)
safe_malloc(
sizeof(
void*) * NewSize);
109 for (
const void **BucketPtr = OldBuckets; BucketPtr != OldEnd; ++BucketPtr) {
111 const void *Elt = *BucketPtr;
113 *
const_cast<void**
>(FindBucketFor(Elt)) = const_cast<void*>(Elt);
127 if (that.isSmall()) {
142 MoveHelper(SmallSize, std::move(that));
146 assert(&RHS !=
this &&
"Self-copy should be handled by the caller.");
148 if (isSmall() && RHS.isSmall())
150 "Cannot assign sets with different small sizes");
186 MoveHelper(SmallSize, std::move(RHS));
189 void SmallPtrSetImplBase::MoveHelper(
unsigned SmallSize,
191 assert(&RHS !=
this &&
"Self-move should be handled by the caller.");
215 if (
this == &RHS)
return;
218 if (!this->isSmall() && !RHS.isSmall()) {
230 if (!this->isSmall() && RHS.isSmall()) {
243 if (this->isSmall() && !RHS.isSmall()) {
256 assert(this->isSmall() && RHS.isSmall());
257 unsigned MinNonEmpty = std::min(this->NumNonEmpty, RHS.
NumNonEmpty);
260 if (this->NumNonEmpty > MinNonEmpty) {
266 this->SmallArray + MinNonEmpty);
static void * getTombstoneMarker()
unsigned Log2_32_Ceil(uint32_t Value)
Return the ceil log base 2 of the specified value, 32 if the value is zero.
This class represents lattice values for constants.
void MoveFrom(unsigned SmallSize, SmallPtrSetImplBase &&RHS)
unsigned NumNonEmpty
Number of elements in CurArray that contain a value or are a tombstone.
#define LLVM_UNLIKELY(EXPR)
void swap(SmallPtrSetImplBase &RHS)
swap - Swaps the elements of two sets.
void incrementEpoch()
Calling incrementEpoch invalidates all handles pointing into the calling instance.
unsigned CurArraySize
CurArraySize - The allocated size of CurArray, always a power of two.
const void ** CurArray
CurArray - This is the current set of buckets.
static void * getEmptyMarker()
const void ** EndPointer() const
void CopyFrom(const SmallPtrSetImplBase &RHS)
LLVM_ATTRIBUTE_RETURNS_NONNULL void * safe_realloc(void *Ptr, size_t Sz)
LLVM_ATTRIBUTE_RETURNS_NONNULL void * safe_malloc(size_t Sz)
const void ** SmallArray
SmallArray - Points to a fixed size set of buckets, used in 'small mode'.
SmallPtrSetImplBase(const void **SmallStorage, const SmallPtrSetImplBase &that)
void swap(llvm::BitVector &LHS, llvm::BitVector &RHS)
Implement std::swap in terms of BitVector swap.
SmallPtrSetImplBase - This is the common code shared among all the SmallPtrSet<>'s, which is almost everything.
unsigned NumTombstones
Number of tombstones in CurArray.
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
#define LLVM_LIKELY(EXPR)
OutputIt copy(R &&Range, OutputIt Out)