Skip to content

Commit

Permalink
BumpPtrAllocator: Add a couple of convenient wrappers around identify…
Browse files Browse the repository at this point in the history
…Object().

This allows obtaining smaller, more readable identifiers
in a more comfortable way.

Differential Revision: https://reviews.llvm.org/D54486

llvm-svn: 348197
  • Loading branch information
haoNoQ committed Dec 3, 2018
1 parent 9dafa8a commit 18de5e4
Showing 1 changed file with 27 additions and 0 deletions.
27 changes: 27 additions & 0 deletions llvm/include/llvm/Support/Allocator.h
Original file line number Diff line number Diff line change
Expand Up @@ -311,6 +311,33 @@ class BumpPtrAllocatorImpl
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 TotalMemory = 0;
for (auto I = Slabs.begin(), E = Slabs.end(); I != E; ++I)
Expand Down

0 comments on commit 18de5e4

Please sign in to comment.