diff options
author | Chris Lattner <sabre@nondot.org> | 2003-12-20 03:36:47 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2003-12-20 03:36:47 +0000 |
commit | c07ed1387503d25c0b93fcf617f69329d73fc589 (patch) | |
tree | 0e4f7ecf9cc5a7b3e891af61bda90a5ee3a4853e /lib/ExecutionEngine/ExecutionEngine.cpp | |
parent | 1514b5b334c72e1e190fe1ce2bce7bf7d8a91c1a (diff) |
Implement PR135, lazy emission of global variables
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10549 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/ExecutionEngine/ExecutionEngine.cpp')
-rw-r--r-- | lib/ExecutionEngine/ExecutionEngine.cpp | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/lib/ExecutionEngine/ExecutionEngine.cpp b/lib/ExecutionEngine/ExecutionEngine.cpp index 42c95727e2..c820f63c29 100644 --- a/lib/ExecutionEngine/ExecutionEngine.cpp +++ b/lib/ExecutionEngine/ExecutionEngine.cpp @@ -155,7 +155,8 @@ GenericValue ExecutionEngine::getConstantValue(const Constant *C) { const_cast<Function*>(dyn_cast<Function>(CPR->getValue()))) Result = PTOGV(getPointerToFunctionOrStub(F)); else - Result = PTOGV(getPointerToGlobal(CPR->getValue())); + Result = PTOGV(getOrEmitGlobalVariable( + cast<GlobalVariable>(CPR->getValue()))); } else { assert(0 && "Unknown constant pointer type!"); @@ -374,7 +375,6 @@ void ExecutionEngine::emitGlobals() { // Allocate some memory for it! unsigned Size = TD.getTypeSize(Ty); addGlobalMapping(I, new char[Size]); - NumInitBytes += Size; DEBUG(std::cerr << "Global '" << I->getName() << "' -> " << (void*)GlobalAddress[I] << "\n"); @@ -401,12 +401,15 @@ void ExecutionEngine::emitGlobals() { // EmitGlobalVariable - This method emits the specified global variable to the // address specified in GlobalAddresses, or allocates new memory if it's not // already in the map. -void ExecutionEngine::EmitGlobalVariable(GlobalVariable *GV) { +void ExecutionEngine::EmitGlobalVariable(const GlobalVariable *GV) { void *&GA = GlobalAddress[GV]; + const Type *ElTy = GV->getType()->getElementType(); if (GA == 0) { // If it's not already specified, allocate memory for the global. - GA = new char[getTargetData().getTypeSize(GV->getType()->getElementType())]; + GA = new char[getTargetData().getTypeSize(ElTy)]; } + InitializeMemory(GV->getInitializer(), GA); + NumInitBytes += getTargetData().getTypeSize(ElTy); ++NumGlobals; } |