From c07ed1387503d25c0b93fcf617f69329d73fc589 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Sat, 20 Dec 2003 03:36:47 +0000 Subject: Implement PR135, lazy emission of global variables git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10549 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/ExecutionEngine/ExecutionEngine.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'lib/ExecutionEngine/ExecutionEngine.cpp') 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(dyn_cast(CPR->getValue()))) Result = PTOGV(getPointerToFunctionOrStub(F)); else - Result = PTOGV(getPointerToGlobal(CPR->getValue())); + Result = PTOGV(getOrEmitGlobalVariable( + cast(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; } -- cgit v1.2.3-18-g5258