diff options
-rw-r--r-- | llvm/include/llvm/Support/Allocator.h | 21 | ||||
-rw-r--r-- | llvm/lib/ExecutionEngine/JIT/JITMemoryManager.cpp | 14 | ||||
-rw-r--r-- | llvm/unittests/Support/AllocatorTest.cpp | 2 |
3 files changed, 12 insertions, 25 deletions
diff --git a/llvm/include/llvm/Support/Allocator.h b/llvm/include/llvm/Support/Allocator.h index 5565c1ccf12..742812d75f6 100644 --- a/llvm/include/llvm/Support/Allocator.h +++ b/llvm/include/llvm/Support/Allocator.h @@ -135,19 +135,6 @@ public: void PrintStats() const {} }; -/// MallocSlabAllocator - The default slab allocator for the bump allocator -/// is an adapter class for MallocAllocator that just forwards the method -/// calls and translates the arguments. -class MallocSlabAllocator { - /// Allocator - The underlying allocator that we forward to. - /// - MallocAllocator Allocator; - -public: - void *Allocate(size_t Size) { return Allocator.Allocate(Size, 0); } - void Deallocate(void *Slab, size_t Size) { Allocator.Deallocate(Slab, Size); } -}; - namespace detail { // We call out to an external function to actually print the message as the @@ -167,10 +154,10 @@ void printBumpPtrAllocatorStats(unsigned NumSlabs, size_t BytesAllocated, /// Note that this also has a threshold for forcing allocations above a certain /// size into their own slab. /// -/// The BumpPtrAllocatorImpl template defaults to using a MallocSlabAllocator +/// The BumpPtrAllocatorImpl template defaults to using a MallocAllocator /// object, which wraps malloc, to allocate memory, but it can be changed to /// use a custom allocator. -template <typename AllocatorT = MallocSlabAllocator, size_t SlabSize = 4096, +template <typename AllocatorT = MallocAllocator, size_t SlabSize = 4096, size_t SizeThreshold = SlabSize> class BumpPtrAllocatorImpl : public AllocatorBase< @@ -241,7 +228,7 @@ public: // If Size is really big, allocate a separate slab for it. size_t PaddedSize = Size + Alignment - 1; if (PaddedSize > SizeThreshold) { - void *NewSlab = Allocator.Allocate(PaddedSize); + void *NewSlab = Allocator.Allocate(PaddedSize, 0); CustomSizedSlabs.push_back(std::make_pair(NewSlab, PaddedSize)); Ptr = alignPtr((char *)NewSlab, Alignment); @@ -319,7 +306,7 @@ private: void StartNewSlab() { size_t AllocatedSlabSize = computeSlabSize(Slabs.size()); - void *NewSlab = Allocator.Allocate(AllocatedSlabSize); + void *NewSlab = Allocator.Allocate(AllocatedSlabSize, 0); Slabs.push_back(NewSlab); CurPtr = (char *)(NewSlab); End = ((char *)NewSlab) + AllocatedSlabSize; diff --git a/llvm/lib/ExecutionEngine/JIT/JITMemoryManager.cpp b/llvm/lib/ExecutionEngine/JIT/JITMemoryManager.cpp index 1aadcce2664..acd034b83e6 100644 --- a/llvm/lib/ExecutionEngine/JIT/JITMemoryManager.cpp +++ b/llvm/lib/ExecutionEngine/JIT/JITMemoryManager.cpp @@ -269,11 +269,11 @@ namespace { class DefaultJITMemoryManager; - class JITSlabAllocator { + class JITAllocator { DefaultJITMemoryManager &JMM; public: - JITSlabAllocator(DefaultJITMemoryManager &jmm) : JMM(jmm) { } - void *Allocate(size_t Size); + JITAllocator(DefaultJITMemoryManager &jmm) : JMM(jmm) { } + void *Allocate(size_t Size, size_t /*Alignment*/); void Deallocate(void *Slab, size_t Size); }; @@ -312,9 +312,9 @@ namespace { // Memory slabs allocated by the JIT. We refer to them as slabs so we don't // confuse them with the blocks of memory described above. std::vector<sys::MemoryBlock> CodeSlabs; - BumpPtrAllocatorImpl<JITSlabAllocator, DefaultSlabSize, + BumpPtrAllocatorImpl<JITAllocator, DefaultSlabSize, DefaultSizeThreshold> StubAllocator; - BumpPtrAllocatorImpl<JITSlabAllocator, DefaultSlabSize, + BumpPtrAllocatorImpl<JITAllocator, DefaultSlabSize, DefaultSizeThreshold> DataAllocator; // Circular list of free blocks. @@ -568,12 +568,12 @@ namespace { }; } -void *JITSlabAllocator::Allocate(size_t Size) { +void *JITAllocator::Allocate(size_t Size, size_t /*Alignment*/) { sys::MemoryBlock B = JMM.allocateNewSlab(Size); return B.base(); } -void JITSlabAllocator::Deallocate(void *Slab, size_t Size) { +void JITAllocator::Deallocate(void *Slab, size_t Size) { sys::MemoryBlock B(Slab, Size); sys::Memory::ReleaseRWX(B); } diff --git a/llvm/unittests/Support/AllocatorTest.cpp b/llvm/unittests/Support/AllocatorTest.cpp index 0ba45d78c2c..8c2ddadf7fa 100644 --- a/llvm/unittests/Support/AllocatorTest.cpp +++ b/llvm/unittests/Support/AllocatorTest.cpp @@ -108,7 +108,7 @@ class MockSlabAllocator { public: ~MockSlabAllocator() { } - void *Allocate(size_t Size) { + void *Allocate(size_t Size, size_t /*Alignment*/) { // Allocate space for the alignment, the slab, and a void* that goes right // before the slab. size_t Alignment = 4096; |