diff options
author | Chris Lattner <sabre@nondot.org> | 2003-12-20 01:46:27 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2003-12-20 01:46:27 +0000 |
commit | 9bcae072d16f7ae0f611f3de142a3ee398e6d5cb (patch) | |
tree | 294d509637917f05090d0a6bc9d09555eca88439 /llvm/lib/ExecutionEngine/JIT/JIT.h | |
parent | 32ccf7e196c2abbbd7e301a9d423cd9c309f5418 (diff) | |
download | bcm5719-llvm-9bcae072d16f7ae0f611f3de142a3ee398e6d5cb.tar.gz bcm5719-llvm-9bcae072d16f7ae0f611f3de142a3ee398e6d5cb.zip |
Cleanup the JIT as per PR176. This renames the VM class to JIT, and merges the
VM.cpp and JIT.cpp files into JIT.cpp. This also splits some nasty code out
into TargetSelect.cpp so that people hopefully won't notice it. :)
llvm-svn: 10544
Diffstat (limited to 'llvm/lib/ExecutionEngine/JIT/JIT.h')
-rw-r--r-- | llvm/lib/ExecutionEngine/JIT/JIT.h | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/llvm/lib/ExecutionEngine/JIT/JIT.h b/llvm/lib/ExecutionEngine/JIT/JIT.h new file mode 100644 index 00000000000..adf4e46e779 --- /dev/null +++ b/llvm/lib/ExecutionEngine/JIT/JIT.h @@ -0,0 +1,93 @@ +//===-- JIT.h - Class definition for the JIT --------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file was developed by the LLVM research group and is distributed under +// the University of Illinois Open Source License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file defines the top-level JIT data structure. +// +//===----------------------------------------------------------------------===// + +#ifndef JIT_H +#define JIT_H + +#include "llvm/ExecutionEngine/ExecutionEngine.h" +#include "llvm/PassManager.h" +#include <map> + +namespace llvm { + +class Function; +class GlobalValue; +class Constant; +class TargetMachine; +class TargetJITInfo; +class MachineCodeEmitter; + +class JIT : public ExecutionEngine { + TargetMachine &TM; // The current target we are compiling to + TargetJITInfo &TJI; // The JITInfo for the target we are compiling to + + FunctionPassManager PM; // Passes to compile a function + MachineCodeEmitter *MCE; // MCE object + + JIT(ModuleProvider *MP, TargetMachine &tm, TargetJITInfo &tji); +public: + ~JIT(); + + /// create - Create an return a new JIT compiler if there is one available + /// for the current target. Otherwise, return null. + /// + static ExecutionEngine *create(ModuleProvider *MP); + + /// run - Start execution with the specified function and arguments. + /// + virtual GenericValue run(Function *F, + const std::vector<GenericValue> &ArgValues); + + /// getPointerToNamedFunction - This method returns the address of the + /// specified function by using the dlsym function call. As such it is only + /// useful for resolving library symbols, not code generated symbols. + /// + void *getPointerToNamedFunction(const std::string &Name); + + // CompilationCallback - Invoked the first time that a call site is found, + // which causes lazy compilation of the target function. + // + static void CompilationCallback(); + + /// runAtExitHandlers - Before exiting the program, at_exit functions must be + /// called. This method calls them. + /// + static void runAtExitHandlers(); + + /// getPointerToFunction - This returns the address of the specified function, + /// compiling it if necessary. + /// + 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 + /// with a branch to the new copy. If there was no old copy, this acts + /// just like JIT::getPointerToFunction(). + /// + void *recompileAndRelinkFunction(Function *F); + +private: + static MachineCodeEmitter *createEmitter(JIT &J); + void runJITOnFunction (Function *F); +}; + +} // End llvm namespace + +#endif |