From d71a03337021cab34e001438150d0005085e7740 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Mon, 8 Dec 2003 08:22:01 +0000 Subject: [PATCH] add two new virtual functions: The first returns a function pointer or a stub if it's not already generated The second exposes what was previously JIT specific state to general clients llvm-svn: 10319 --- .../llvm/ExecutionEngine/ExecutionEngine.h | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/llvm/include/llvm/ExecutionEngine/ExecutionEngine.h b/llvm/include/llvm/ExecutionEngine/ExecutionEngine.h index 5dd74b7cdedf..f6f725a78a36 100644 --- a/llvm/include/llvm/ExecutionEngine/ExecutionEngine.h +++ b/llvm/include/llvm/ExecutionEngine/ExecutionEngine.h @@ -86,9 +86,26 @@ public: // virtual void *getPointerToFunction(Function *F) = 0; + // 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. + // + virtual void *getPointerToFunctionOrStub(Function *F) { + // Default implementation, just codegen the function. + return getPointerToFunction(F); + } + void StoreValueToMemory(GenericValue Val, GenericValue *Ptr, const Type *Ty); void InitializeMemory(const Constant *Init, void *Addr); + /// 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 + /// with a branch to the new copy. If there was no old copy, this acts + /// just like VM::getPointerToFunction(). + /// + virtual void *recompileAndRelinkFunction(Function *F) = 0; + protected: void emitGlobals(); GenericValue getConstantValue(const Constant *C);