From 956a86445cf8cd2961c42f2a3a47baefd7ed8533 Mon Sep 17 00:00:00 2001 From: Nicolas Geoffray Date: Wed, 29 Jul 2009 22:55:02 +0000 Subject: [PATCH] In TrimAllocationToSize, if a block is below the minimum allocation size, there is no new block added to the free list. Therefore on the next startFunctionBody call, a new slab must be allocated. llvm-svn: 77520 --- llvm/lib/ExecutionEngine/JIT/JITMemoryManager.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/llvm/lib/ExecutionEngine/JIT/JITMemoryManager.cpp b/llvm/lib/ExecutionEngine/JIT/JITMemoryManager.cpp index 2d64fcf..3f38f9c 100644 --- a/llvm/lib/ExecutionEngine/JIT/JITMemoryManager.cpp +++ b/llvm/lib/ExecutionEngine/JIT/JITMemoryManager.cpp @@ -351,9 +351,12 @@ namespace { iter = iter->Next; } + largest = largest - sizeof(MemoryRangeHeader); + // If this block isn't big enough for the allocation desired, allocate // another block of memory and add it to the free list. - if (largest - sizeof(MemoryRangeHeader) < ActualSize) { + if (largest < ActualSize || + largest <= FreeRangeHeader::getMinBlockSize()) { DOUT << "JIT: Allocating another slab of memory for function."; candidateBlock = allocateNewCodeSlab((size_t)ActualSize); } -- 2.7.4