mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 18:54:02 +01:00
baba8dd94a
Fixes issue encountered in D56362, where I tried to use a SmallSetVector<Instruction*, 128> with an excessively large number of inline elements. This triggers an "Must allocate more buckets than are inline" assertion inside allocateBuckets() under certain usage patterns. The issue is as follows: The grow() method is used either to grow the map, or to rehash it and remove tombstones. The latter is done if the fraction of empty (non-used, non-tombstone) elements is below 1/8. In this case grow() is invoked with the current number of buckets. This is currently incorrectly handled for dense maps using the small rep. The current implementation will switch them over to the large rep, which violates the invariant that the large rep is only used if there are more than InlineBuckets buckets. This patch fixes the issue by staying in the small rep and only moving the buckets. An alternative, if we do want to switch to the large rep in this case, would be to relax the assertion in allocateBuckets(). Differential Revision: https://reviews.llvm.org/D56455 |
||
---|---|---|
.. | ||
AllocatorList.h | ||
Any.h | ||
APFloat.h | ||
APInt.h | ||
APSInt.h | ||
ArrayRef.h | ||
bit.h | ||
BitmaskEnum.h | ||
BitVector.h | ||
BreadthFirstIterator.h | ||
CachedHashString.h | ||
DAGDeltaAlgorithm.h | ||
DeltaAlgorithm.h | ||
DenseMap.h | ||
DenseMapInfo.h | ||
DenseSet.h | ||
DepthFirstIterator.h | ||
DirectedGraph.h | ||
edit_distance.h | ||
EnumeratedArray.h | ||
EpochTracker.h | ||
EquivalenceClasses.h | ||
fallible_iterator.h | ||
FloatingPointMode.h | ||
FoldingSet.h | ||
FunctionExtras.h | ||
GraphTraits.h | ||
Hashing.h | ||
ilist_base.h | ||
ilist_iterator.h | ||
ilist_node_base.h | ||
ilist_node_options.h | ||
ilist_node.h | ||
ilist.h | ||
ImmutableList.h | ||
ImmutableMap.h | ||
ImmutableSet.h | ||
IndexedMap.h | ||
IntEqClasses.h | ||
IntervalMap.h | ||
IntrusiveRefCntPtr.h | ||
iterator_range.h | ||
iterator.h | ||
MapVector.h | ||
None.h | ||
Optional.h | ||
PackedVector.h | ||
PointerEmbeddedInt.h | ||
PointerIntPair.h | ||
PointerSumType.h | ||
PointerUnion.h | ||
PostOrderIterator.h | ||
PriorityQueue.h | ||
PriorityWorklist.h | ||
SCCIterator.h | ||
ScopedHashTable.h | ||
ScopeExit.h | ||
Sequence.h | ||
SetOperations.h | ||
SetVector.h | ||
simple_ilist.h | ||
SmallBitVector.h | ||
SmallPtrSet.h | ||
SmallSet.h | ||
SmallString.h | ||
SmallVector.h | ||
SparseBitVector.h | ||
SparseMultiSet.h | ||
SparseSet.h | ||
Statistic.h | ||
STLExtras.h | ||
StringExtras.h | ||
StringMap.h | ||
StringRef.h | ||
StringSet.h | ||
StringSwitch.h | ||
TinyPtrVector.h | ||
Triple.h | ||
Twine.h | ||
UniqueVector.h |