diff options
author | Dan Gohman <gohman@apple.com> | 2008-07-28 21:51:04 +0000 |
---|---|---|
committer | Dan Gohman <gohman@apple.com> | 2008-07-28 21:51:04 +0000 |
commit | fed90b6d097d50881afb45e4d79f430db66dd741 (patch) | |
tree | 7ec1a6f6b2a8a37e054b84505502b3346c6680c7 /include/llvm/ADT/SparseBitVector.h | |
parent | 80e051dfdede65678ac66f1552278338bc1a1b33 (diff) | |
download | external_llvm-fed90b6d097d50881afb45e4d79f430db66dd741.zip external_llvm-fed90b6d097d50881afb45e4d79f430db66dd741.tar.gz external_llvm-fed90b6d097d50881afb45e4d79f430db66dd741.tar.bz2 |
Fold the useful features of alist and alist_node into ilist, and
a new ilist_node class, and remove them. Unlike alist_node,
ilist_node doesn't attempt to manage storage itself, so it avoids
the associated problems, including being opaque in gdb.
Adjust the Recycler class so that it doesn't depend on alist_node.
Also, change it to use explicit Size and Align parameters, allowing
it to work when the largest-sized node doesn't have the greatest
alignment requirement.
Change MachineInstr's MachineMemOperand list from a pool-backed
alist to a std::list for now.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@54146 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/ADT/SparseBitVector.h')
-rw-r--r-- | include/llvm/ADT/SparseBitVector.h | 38 |
1 files changed, 3 insertions, 35 deletions
diff --git a/include/llvm/ADT/SparseBitVector.h b/include/llvm/ADT/SparseBitVector.h index adeb541..efd0acc 100644 --- a/include/llvm/ADT/SparseBitVector.h +++ b/include/llvm/ADT/SparseBitVector.h @@ -39,7 +39,8 @@ namespace llvm { template <unsigned ElementSize = 128> -struct SparseBitVectorElement { +struct SparseBitVectorElement + : ilist_node<SparseBitVectorElement<ElementSize> > { public: typedef unsigned long BitWord; enum { @@ -48,56 +49,23 @@ public: BITS_PER_ELEMENT = ElementSize }; - SparseBitVectorElement<ElementSize> *getNext() const { - return Next; - } - SparseBitVectorElement<ElementSize> *getPrev() const { - return Prev; - } - - void setNext(SparseBitVectorElement<ElementSize> *RHS) { - Next = RHS; - } - void setPrev(SparseBitVectorElement<ElementSize> *RHS) { - Prev = RHS; - } - private: - SparseBitVectorElement<ElementSize> *Next; - SparseBitVectorElement<ElementSize> *Prev; // Index of Element in terms of where first bit starts. unsigned ElementIndex; BitWord Bits[BITWORDS_PER_ELEMENT]; // Needed for sentinels + friend class ilist_sentinel_traits<SparseBitVectorElement>; SparseBitVectorElement() { ElementIndex = ~0U; memset(&Bits[0], 0, sizeof (BitWord) * BITWORDS_PER_ELEMENT); } - friend struct ilist_traits<SparseBitVectorElement<ElementSize> >; public: explicit SparseBitVectorElement(unsigned Idx) { ElementIndex = Idx; memset(&Bits[0], 0, sizeof (BitWord) * BITWORDS_PER_ELEMENT); } - ~SparseBitVectorElement() { - } - - // Copy ctor. - SparseBitVectorElement(const SparseBitVectorElement &RHS) { - ElementIndex = RHS.ElementIndex; - std::copy(&RHS.Bits[0], &RHS.Bits[BITWORDS_PER_ELEMENT], Bits); - } - - // Assignment - SparseBitVectorElement& operator=(const SparseBitVectorElement& RHS) { - ElementIndex = RHS.ElementIndex; - std::copy(&RHS.Bits[0], &RHS.Bits[BITWORDS_PER_ELEMENT], Bits); - - return *this; - } - // Comparison. bool operator==(const SparseBitVectorElement &RHS) const { if (ElementIndex != RHS.ElementIndex) |