forked from OSchip/llvm-project
BumpPtrAllocator: Add a couple of convenient wrappers around identifyObject().
This allows obtaining smaller, more readable identifiers in a more comfortable way. Differential Revision: https://reviews.llvm.org/D54486 llvm-svn: 348197
This commit is contained in:
parent
9dafa8a2c6
commit
18de5e4657
|
@ -311,6 +311,33 @@ public:
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// A wrapper around identifyObject that additionally asserts that
|
||||||
|
/// the object is indeed within the allocator.
|
||||||
|
/// \return An index uniquely and reproducibly identifying
|
||||||
|
/// an input pointer \p Ptr in the given allocator.
|
||||||
|
int64_t identifyKnownObject(const void *Ptr) {
|
||||||
|
Optional<int64_t> Out = identifyObject(Ptr);
|
||||||
|
assert(Out && "Wrong allocator used");
|
||||||
|
return *Out;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// A wrapper around identifyKnownObject. Accepts type information
|
||||||
|
/// about the object and produces a smaller identifier by relying on
|
||||||
|
/// the alignment information. Note that sub-classes may have different
|
||||||
|
/// alignment, so the most base class should be passed as template parameter
|
||||||
|
/// in order to obtain correct results. For that reason automatic template
|
||||||
|
/// parameter deduction is disabled.
|
||||||
|
/// \return An index uniquely and reproducibly identifying
|
||||||
|
/// an input pointer \p Ptr in the given allocator. This identifier is
|
||||||
|
/// different from the ones produced by identifyObject and
|
||||||
|
/// identifyAlignedObject.
|
||||||
|
template <typename T>
|
||||||
|
int64_t identifyKnownAlignedObject(const void *Ptr) {
|
||||||
|
int64_t Out = identifyKnownObject(Ptr);
|
||||||
|
assert(Out % alignof(T) == 0 && "Wrong alignment information");
|
||||||
|
return Out / alignof(T);
|
||||||
|
}
|
||||||
|
|
||||||
size_t getTotalMemory() const {
|
size_t getTotalMemory() const {
|
||||||
size_t TotalMemory = 0;
|
size_t TotalMemory = 0;
|
||||||
for (auto I = Slabs.begin(), E = Slabs.end(); I != E; ++I)
|
for (auto I = Slabs.begin(), E = Slabs.end(); I != E; ++I)
|
||||||
|
|
Loading…
Reference in New Issue