In TrimAllocationToSize, if a block is below the minimum allocation size,
authorNicolas Geoffray <nicolas.geoffray@lip6.fr>
Wed, 29 Jul 2009 22:55:02 +0000 (22:55 +0000)
committerNicolas Geoffray <nicolas.geoffray@lip6.fr>
Wed, 29 Jul 2009 22:55:02 +0000 (22:55 +0000)
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

index 2d64fcf..3f38f9c 100644 (file)
@@ -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);
       }