X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=include%2Fllvm%2FSupport%2FAllocator.h;h=c0414f970a29533c80bebcbdddc1656594406df8;hb=f2e19d5dcfa13472493bb18339555686182b7df9;hp=f0c713af86d9ea6583a5dde98540e79e60521e2f;hpb=3f4c81de0ac7ff75e538dd68ef4ecfa204760bc9;p=oota-llvm.git diff --git a/include/llvm/Support/Allocator.h b/include/llvm/Support/Allocator.h index f0c713af86d..c0414f970a2 100644 --- a/include/llvm/Support/Allocator.h +++ b/include/llvm/Support/Allocator.h @@ -18,24 +18,24 @@ #include namespace llvm { - + class MallocAllocator { public: MallocAllocator() {} ~MallocAllocator() {} - + void Reset() {} void *Allocate(size_t Size, size_t /*Alignment*/) { return malloc(Size); } - + template T *Allocate() { return static_cast(malloc(sizeof(T))); } - + template - T *Allocate(size_t Num) { + T *Allocate(size_t Num) { return static_cast(malloc(sizeof(T)*Num)); } - + void Deallocate(const void *Ptr) { free(const_cast(Ptr)); } void PrintStats() const {} @@ -53,7 +53,7 @@ class BumpPtrAllocator { public: BumpPtrAllocator(); ~BumpPtrAllocator(); - + void Reset(); void *Allocate(size_t Size, size_t Alignment); @@ -61,23 +61,23 @@ public: /// Allocate space, but do not construct, one object. /// template - T *Allocate() { + 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) { + 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) { + T *Allocate(size_t Num, size_t Alignment) { // Round EltSize up to the specified alignment. - unsigned EltSize = (sizeof(T)+Alignment-1)&~Alignment; + size_t EltSize = (sizeof(T)+Alignment-1)&(-Alignment); return static_cast(Allocate(Num * EltSize, Alignment)); }