diff options
author | Chris Lattner <sabre@nondot.org> | 2006-02-09 04:49:59 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2006-02-09 04:49:59 +0000 |
commit | 239862ce995adfd3b51062e62e54ef2db92b1150 (patch) | |
tree | 9a88cae0b79d7f1a8fb9462203a309ce1d087029 /lib/ExecutionEngine | |
parent | 3029f920519e0871a5aad5d7c592281093953733 (diff) | |
download | external_llvm-239862ce995adfd3b51062e62e54ef2db92b1150.zip external_llvm-239862ce995adfd3b51062e62e54ef2db92b1150.tar.gz external_llvm-239862ce995adfd3b51062e62e54ef2db92b1150.tar.bz2 |
simplify this code now that each constant pool entry is not separately allocated
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@26079 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/ExecutionEngine')
-rw-r--r-- | lib/ExecutionEngine/JIT/JITEmitter.cpp | 31 |
1 files changed, 16 insertions, 15 deletions
diff --git a/lib/ExecutionEngine/JIT/JITEmitter.cpp b/lib/ExecutionEngine/JIT/JITEmitter.cpp index 3f41222..a5bb7c6 100644 --- a/lib/ExecutionEngine/JIT/JITEmitter.cpp +++ b/lib/ExecutionEngine/JIT/JITEmitter.cpp @@ -419,18 +419,19 @@ namespace { // save CurBlock and CurByte here. unsigned char *SavedCurBlock, *SavedCurByte; - // ConstantPoolAddresses - Contains the location for each entry in the - // constant pool. - std::vector<void*> ConstantPoolAddresses; - /// Relocations - These are the relocations that the function needs, as /// emitted. std::vector<MachineRelocation> Relocations; + /// ConstantPool - The constant pool for the current function. + /// + MachineConstantPool *ConstantPool; + + /// ConstantPoolBase - A pointer to the first entry in the constant pool. + /// + void *ConstantPoolBase; public: - JITEmitter(JIT &jit) - :MemMgr(jit.getJITInfo().needsGOT()) - { + JITEmitter(JIT &jit) : MemMgr(jit.getJITInfo().needsGOT()) { TheJIT = &jit; DEBUG(std::cerr << (MemMgr.isManagingGOT() ? "JIT is managing GOT\n" @@ -562,7 +563,6 @@ void JITEmitter::finishFunction(MachineFunction &F) { << ": " << CurByte-CurBlock << " bytes of text, " << Relocations.size() << " relocations\n"); Relocations.clear(); - ConstantPoolAddresses.clear(); } void JITEmitter::emitConstantPool(MachineConstantPool *MCP) { @@ -572,14 +572,14 @@ void JITEmitter::emitConstantPool(MachineConstantPool *MCP) { unsigned Size = Constants.back().Offset; Size += TheJIT->getTargetData().getTypeSize(Constants.back().Val->getType()); - void *Addr = MemMgr.allocateConstant(Size, + ConstantPoolBase = MemMgr.allocateConstant(Size, 1 << MCP->getConstantPoolAlignment()); - - // FIXME: Can eliminate ConstantPoolAddresses! + ConstantPool = MCP; + + // Initialize the memory for all of the constant pool entries. for (unsigned i = 0, e = Constants.size(); i != e; ++i) { - void *CAddr = (char*)Addr+Constants[i].Offset; + void *CAddr = (char*)ConstantPoolBase+Constants[i].Offset; TheJIT->InitializeMemory(Constants[i].Val, CAddr); - ConstantPoolAddresses.push_back(CAddr); } } @@ -615,9 +615,10 @@ void JITEmitter::emitWordAt(unsigned W, unsigned *Ptr) { // method. // uint64_t JITEmitter::getConstantPoolEntryAddress(unsigned ConstantNum) { - assert(ConstantNum < ConstantPoolAddresses.size() && + assert(ConstantNum < ConstantPool->getConstants().size() && "Invalid ConstantPoolIndex!"); - return (intptr_t)ConstantPoolAddresses[ConstantNum]; + return (intptr_t)ConstantPoolBase + + ConstantPool->getConstants()[ConstantNum].Offset; } unsigned char* JITEmitter::allocateGlobal(unsigned size, unsigned alignment) |