Implement the ExecutionEngine::getPointerToFunctionOrStub by forwarding the

request on to the TargetMachine if it supports the getJITStubForFunction method


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10431 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2003-12-12 07:12:02 +00:00
parent 65b05ce022
commit 993bdcec00
3 changed files with 29 additions and 0 deletions

View File

@ -66,6 +66,12 @@ public:
///
void *getPointerToFunction(Function *F);
/// getPointerToFunctionOrStub - If the specified function has been
/// code-gen'd, return a pointer to the function. If not, compile it, or use
/// a stub to implement lazy compilation if available.
///
void *getPointerToFunctionOrStub(Function *F);
/// recompileAndRelinkFunction - This method is used to force a function
/// which has already been compiled, to be compiled again, possibly
/// after it has been modified. Then the entry to the old copy is overwritten

View File

@ -77,6 +77,23 @@ void *VM::getPointerToFunction(Function *F) {
return Addr;
}
// getPointerToFunctionOrStub - If the specified function has been
// code-gen'd, return a pointer to the function. If not, compile it, or use
// a stub to implement lazy compilation if available.
//
void *VM::getPointerToFunctionOrStub(Function *F) {
// If we have already code generated the function, just return the address.
std::map<const GlobalValue*, void *>::iterator I = GlobalAddress.find(F);
if (I != GlobalAddress.end()) return I->second;
// If the target supports "stubs" for functions, get a stub now.
if (void *Ptr = TM.getJITStubForFunction(F, *MCE))
return Ptr;
// Otherwise, if the target doesn't support it, just codegen the function.
return getPointerToFunction(F);
}
/// recompileAndRelinkFunction - This method is used to force a function
/// which has already been compiled, to be compiled again, possibly
/// after it has been modified. Then the entry to the old copy is overwritten

View File

@ -66,6 +66,12 @@ public:
///
void *getPointerToFunction(Function *F);
/// getPointerToFunctionOrStub - If the specified function has been
/// code-gen'd, return a pointer to the function. If not, compile it, or use
/// a stub to implement lazy compilation if available.
///
void *getPointerToFunctionOrStub(Function *F);
/// recompileAndRelinkFunction - This method is used to force a function
/// which has already been compiled, to be compiled again, possibly
/// after it has been modified. Then the entry to the old copy is overwritten