From: Chris Lattner Date: Tue, 3 Feb 2009 07:39:50 +0000 (+0000) Subject: add a method to BumpPtrAllocator that allows allocating elements X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=commitdiff_plain;h=603884021010e227db6cc3fcc4c7f5e555e4a8dc;hp=3e62b2dc93dae6904f0717612782ab6ebf413e1d 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 --- diff --git a/include/llvm/Support/Allocator.h b/include/llvm/Support/Allocator.h index b60ebcaddf4..97c6d187a72 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 T *Allocate() { return static_cast(Allocate(sizeof(T),AlignOf::Alignment)); } + /// Allocate space for an array of objects. This does not construct the + /// objects though. template T *Allocate(size_t Num) { return static_cast(Allocate(Num * sizeof(T), AlignOf::Alignment)); } + /// Allocate space for a specific count of elements and with a specified + /// alignment. + template + T *Allocate(size_t Num, unsigned Alignment) { + // Round EltSize up to the specified alignment. + unsigned EltSize = (sizeof(T)+Alignment-1)&~Alignment; + return static_cast(Allocate(Num * EltSize, Alignment)); + } + + void Deallocate(void * /*Ptr*/) {} void PrintStats() const;