1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-25 12:12:47 +01:00
llvm-mirror/unittests/ADT
Guillaume Chatelet 9871a892f8 [ADT] Add Bitfield utilities
Context:
--------
There are places in LLVM where we need to pack typed fields into opaque values.
For instance, the `XXXInst` classes in `llvm/include/llvm/IR/Instructions.h` that extract informations from `Value::SubclassData` via `getSubclassDataFromInstruction()`.
The bit twiddling is done manually: this impairs readability and prevent consistent handling of out of range values (e.g. 435b458ad0/llvm/include/llvm/IR/Instructions.h (L564))
More importantly, the bit pattern is scattered throughout the implementation making it hard to pack additionnal fields or check for overlapping bits.

Design decisions:
-----------------
The Bitfield structs are to be declared together so it is clear which bits are used or not.
The code is designed with simplicity in mind, hence a few limitations:
 - Storage is limited to a single integer,
 - Enum values have to be `unsigned`,
 - Storage type has to be `unsigned`,
 - There are no automatic detection of overlapping fields (packed bitfield declaration should help though),
 - The interface is C like so `storage` needs to be passed in everytime (code is simpler and lifetime considerations more obvious)

RFC: http://lists.llvm.org/pipermail/llvm-dev/2020-June/142196.html

Differential Revision: https://reviews.llvm.org/D81580
2020-06-29 12:48:44 +00:00
..
AnyTest.cpp
APFloatTest.cpp Make IEEEFloat::roundToIntegral more standard conformant 2020-03-11 10:38:46 +07:00
APIntTest.cpp [APInt] set all bits for getBitsSetWithWrap if loBit == hiBit 2020-06-08 22:55:24 -04:00
APSIntTest.cpp ADT: Fix that APSInt's string constructor claims it requires 5 bits to store a zero 2020-06-10 16:36:33 +02:00
ArrayRefTest.cpp
BitFieldsTest.cpp [ADT] Add Bitfield utilities 2020-06-29 12:48:44 +00:00
BitmaskEnumTest.cpp
BitVectorTest.cpp Fix bug in SmallBitVector::find_next_unset 2020-04-24 13:50:30 -07:00
BreadthFirstIteratorTest.cpp
BumpPtrListTest.cpp
CMakeLists.txt [ADT] Add Bitfield utilities 2020-06-29 12:48:44 +00:00
CoalescingBitVectorTest.cpp [LiveDebugValues] Speed up removeEntryValue, NFC 2020-06-01 11:02:36 -07:00
DAGDeltaAlgorithmTest.cpp
DeltaAlgorithmTest.cpp
DenseMapTest.cpp [ADT] Allow K to be incomplete during DenseMap<K*, V> instantiation 2020-02-28 14:24:04 -08:00
DenseSetTest.cpp [ADT] Add DenseSetImpl(begin, end) 2020-05-01 10:10:45 -07:00
DepthFirstIteratorTest.cpp
DirectedGraphTest.cpp
EnumeratedArrayTest.cpp
EquivalenceClassesTest.cpp
FallibleIteratorTest.cpp
FloatingPointMode.cpp Separately track input and output denormal mode 2020-02-04 12:59:21 -05:00
FoldingSet.cpp
FunctionExtrasTest.cpp
FunctionRefTest.cpp FunctionRef: Strip cv qualifiers in the converting constructor 2020-03-27 16:31:58 -07:00
HashingTest.cpp
IListBaseTest.cpp
IListIteratorTest.cpp
IListNodeBaseTest.cpp
IListNodeTest.cpp
IListSentinelTest.cpp
IListTest.cpp
ImmutableListTest.cpp
ImmutableMapTest.cpp
ImmutableSetTest.cpp
IntEqClassesTest.cpp
IntervalMapTest.cpp [ADT] Add CoalescingBitVector, implemented using IntervalMap [1/3] 2020-02-27 12:39:46 -08:00
IntrusiveRefCntPtrTest.cpp
IteratorTest.cpp
MappedIteratorTest.cpp
MapVectorTest.cpp Github access test: remove unnecessary whitespaces. 2020-05-20 09:53:44 +01:00
OptionalTest.cpp Revert "Unconditionally enable lvalue function designators; NFC" 2020-01-22 12:40:39 -05:00
PackedVectorTest.cpp
PointerEmbeddedIntTest.cpp PointerLikeTypeTraits: Standardize NumLowBitsAvailable on static constexpr rather than anonymous enum 2020-01-16 15:30:50 -08:00
PointerIntPairTest.cpp PointerLikeTypeTraits: Standardize NumLowBitsAvailable on static constexpr rather than anonymous enum 2020-01-16 15:30:50 -08:00
PointerSumTypeTest.cpp
PointerUnionTest.cpp Removed PointerUnion3 and PointerUnion4 aliases in favor of the variadic template 2020-01-14 18:56:29 +01:00
PostOrderIteratorTest.cpp
PriorityWorklistTest.cpp
RangeAdapterTest.cpp
SCCIteratorTest.cpp
ScopeExitTest.cpp
SequenceTest.cpp
SetVectorTest.cpp
SimpleIListTest.cpp [ADT/STLExtras.h] - Add llvm::is_sorted wrapper and update callers. 2020-04-14 14:11:02 +03:00
SmallPtrSetTest.cpp
SmallSetTest.cpp
SmallStringTest.cpp [SmallString] Add explicit conversion to std::string 2020-01-29 10:17:10 -08:00
SmallVectorTest.cpp
SparseBitVectorTest.cpp
SparseMultiSetTest.cpp
SparseSetTest.cpp
StatisticTest.cpp
STLExtrasTest.cpp - Add hasNItemsOrLess and container variants of hasNItems, hasNItemsOrMore, and hasNItemsOrLess 2020-06-22 15:07:36 -07:00
StringExtrasTest.cpp [unittest, ADT] Add unit tests for itostr & utostr 2020-06-23 14:48:37 +01:00
StringMapTest.cpp [clang-tidy] remove duplicate fixes of alias checkers 2020-06-19 20:40:59 +01:00
StringRefTest.cpp [ADT] Implicitly convert between StringRef and std::string_view when we have C++17 2020-01-28 13:56:12 +01:00
StringSetTest.cpp NFC: Clean up the implementation of StringPool a bit, and remove dependence on some "implicitly MallocAllocator" based methods on StringMapEntry. This allows reducing the #includes in StringMapEntry.h. 2020-04-12 16:37:17 -07:00
StringSwitchTest.cpp
TestGraph.h
TinyPtrVectorTest.cpp
TripleTest.cpp Revert rGf0bab7875e78e01c149d12302dcc4b6d4c43e25c - "Triple.h - reduce Twine.h include to forward declarations. NFC." 2020-06-26 14:46:40 +01:00
TwineTest.cpp
TypeSwitchTest.cpp [llvm][ADT] Move TypeSwitch class from MLIR to LLVM 2020-04-14 15:14:41 -07:00
TypeTraitsTest.cpp [mlir][NFC] Remove the STLExtras.h header file now that it has been merged into LLVM. 2020-04-14 15:14:41 -07:00
WaymarkingTest.cpp [ADT] Implement the Waymarking as an independent utility 2020-03-31 17:08:24 +03:00