summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2009-02-03 07:39:50 +0000
committerChris Lattner <sabre@nondot.org>2009-02-03 07:39:50 +0000
commit603884021010e227db6cc3fcc4c7f5e555e4a8dc (patch)
treee97c4e7789e7b1b2fef66d1d8a3617077db68cf4 /include
parent3e62b2dc93dae6904f0717612782ab6ebf413e1d (diff)
downloadllvm-603884021010e227db6cc3fcc4c7f5e555e4a8dc.tar.gz
llvm-603884021010e227db6cc3fcc4c7f5e555e4a8dc.tar.bz2
llvm-603884021010e227db6cc3fcc4c7f5e555e4a8dc.tar.xz
add a method to BumpPtrAllocator that allows allocating elements
with a specified alignment. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@63629 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r--include/llvm/Support/Allocator.h14
1 files changed, 14 insertions, 0 deletions
diff --git a/include/llvm/Support/Allocator.h b/include/llvm/Support/Allocator.h
index b60ebcaddf..97c6d187a7 100644
--- a/include/llvm/Support/Allocator.h
+++ b/include/llvm/Support/Allocator.h
@@ -58,16 +58,30 @@ public:
void *Allocate(size_t Size, size_t Alignment);
+ /// Allocate space, but do not construct, one object.
+ ///
template <typename T>
T *Allocate() {
return static_cast<T*>(Allocate(sizeof(T),AlignOf<T>::Alignment));
}
+ /// Allocate space for an array of objects. This does not construct the
+ /// objects though.
template <typename T>
T *Allocate(size_t Num) {
return static_cast<T*>(Allocate(Num * sizeof(T), AlignOf<T>::Alignment));
}
+ /// Allocate space for a specific count of elements and with a specified
+ /// alignment.
+ template <typename T>
+ T *Allocate(size_t Num, unsigned Alignment) {
+ // Round EltSize up to the specified alignment.
+ unsigned EltSize = (sizeof(T)+Alignment-1)&~Alignment;
+ return static_cast<T*>(Allocate(Num * EltSize, Alignment));
+ }
+
+
void Deallocate(void * /*Ptr*/) {}
void PrintStats() const;