JIT.h revision 69582b35b6aa4e48cbbad7f6f1193c967da96b25
1//===-- VM.h - Definitions for Virtual Machine ------------------*- C++ -*-===// 2// 3// This file defines the top-level Virtual Machine data structure. 4// 5//===----------------------------------------------------------------------===// 6 7#ifndef VM_H 8#define VM_H 9 10#include "../ExecutionEngine.h" 11#include "llvm/PassManager.h" 12#include <map> 13 14class Function; 15class GlobalValue; 16class Constant; 17class TargetMachine; 18class MachineCodeEmitter; 19 20class VM : public ExecutionEngine { 21 TargetMachine &TM; // The current target we are compiling to 22 FunctionPassManager PM; // Passes to compile a function 23 MachineCodeEmitter *MCE; // MCE object 24 25public: 26 VM(Module *M, TargetMachine *tm); 27 ~VM(); 28 29 /// run - Start execution with the specified function and arguments. 30 /// 31 virtual int run(const std::string &FnName, 32 const std::vector<std::string> &Args, 33 const char ** envp); 34 35 /// getPointerToNamedFunction - This method returns the address of the 36 /// specified function by using the dlsym function call. As such it is only 37 /// useful for resolving library symbols, not code generated symbols. 38 /// 39 void *getPointerToNamedFunction(const std::string &Name); 40 41 // CompilationCallback - Invoked the first time that a call site is found, 42 // which causes lazy compilation of the target function. 43 // 44 static void CompilationCallback(); 45 46 /// runAtExitHandlers - Before exiting the program, at_exit functions must be 47 /// called. This method calls them. 48 /// 49 static void runAtExitHandlers(); 50 51 /// getPointerToFunction - This returns the address of the specified function, 52 /// compiling it if necessary. 53 void *getPointerToFunction(Function *F); 54 55private: 56 static MachineCodeEmitter *createEmitter(VM &V); 57 void setupPassManager(); 58}; 59 60#endif 61