diff options
-rw-r--r-- | lib/ExecutionEngine/JIT/JITEmitter.cpp | 25 |
1 files changed, 5 insertions, 20 deletions
diff --git a/lib/ExecutionEngine/JIT/JITEmitter.cpp b/lib/ExecutionEngine/JIT/JITEmitter.cpp index be60b239a3..32d0651f22 100644 --- a/lib/ExecutionEngine/JIT/JITEmitter.cpp +++ b/lib/ExecutionEngine/JIT/JITEmitter.cpp @@ -187,28 +187,13 @@ void Emitter::finishFunction(MachineFunction &F) { void Emitter::emitConstantPool(MachineConstantPool *MCP) { const std::vector<Constant*> &Constants = MCP->getConstants(); - if (Constants.size() == 0) return; - - std::vector<unsigned> ConstantSizes; - unsigned TotalSize = 0; - // Calculate how much space we will need for all the constants for (unsigned i = 0, e = Constants.size(); i != e; ++i) { + // For now we just allocate some memory on the heap, this can be + // dramatically improved. const Type *Ty = ((Value*)Constants[i])->getType(); - unsigned TySize = TheVM->getTargetData().getTypeSize(Ty); - ConstantSizes.push_back(TySize); - TotalSize += TySize; - } - // Allocate a 'pool' of memory just once - void *ConstPool = malloc(TotalSize); - if (!ConstPool) { - perror("malloc"); - abort(); - } - // Initialize each slot in the 'pool' appropriately - for (unsigned i = 0, e = Constants.size(); i != e; ++i) { - TheVM->InitializeMemory(Constants[i], ConstPool); - ConstantPoolAddresses.push_back(ConstPool); - ConstPool = (void*) ((intptr_t)ConstPool + ConstantSizes[i]); + void *Addr = malloc(TheVM->getTargetData().getTypeSize(Ty)); + TheVM->InitializeMemory(Constants[i], Addr); + ConstantPoolAddresses.push_back(Addr); } } |