blob: 764afcf66fe4496775da49732a10145058797017 [file] [log] [blame]
Chris Lattner836f6752002-12-24 00:01:22 +00001//===-- 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
Brian Gaekec227c1f2003-08-13 18:16:50 +000022 FunctionPassManager PM; // Passes to compile a function
Chris Lattner836f6752002-12-24 00:01:22 +000023 MachineCodeEmitter *MCE; // MCE object
24
Chris Lattner836f6752002-12-24 00:01:22 +000025public:
26 VM(Module *M, TargetMachine *tm);
27 ~VM();
28
Brian Gaeke82d82772003-09-03 20:34:19 +000029 /// create - Create an return a new JIT compiler if there is one available
30 /// for the current target. Otherwise, return null.
31 ///
32 static ExecutionEngine *create(Module *M);
33
Chris Lattner836f6752002-12-24 00:01:22 +000034 /// run - Start execution with the specified function and arguments.
35 ///
36 virtual int run(const std::string &FnName,
John Criswell69582b32003-08-21 21:12:30 +000037 const std::vector<std::string> &Args,
38 const char ** envp);
Chris Lattner836f6752002-12-24 00:01:22 +000039
Chris Lattner0d448c02003-01-13 01:00:48 +000040 /// getPointerToNamedFunction - This method returns the address of the
41 /// specified function by using the dlsym function call. As such it is only
42 /// useful for resolving library symbols, not code generated symbols.
43 ///
44 void *getPointerToNamedFunction(const std::string &Name);
45
Chris Lattnerc309a762003-05-08 21:34:11 +000046 // CompilationCallback - Invoked the first time that a call site is found,
47 // which causes lazy compilation of the target function.
48 //
49 static void CompilationCallback();
Chris Lattner22080f92003-05-14 13:53:40 +000050
51 /// runAtExitHandlers - Before exiting the program, at_exit functions must be
52 /// called. This method calls them.
53 ///
54 static void runAtExitHandlers();
55
Chris Lattnerbba1b6d2003-06-01 23:24:36 +000056 /// getPointerToFunction - This returns the address of the specified function,
57 /// compiling it if necessary.
Brian Gaekec227c1f2003-08-13 18:16:50 +000058 void *getPointerToFunction(Function *F);
Chris Lattnerbba1b6d2003-06-01 23:24:36 +000059
Chris Lattner836f6752002-12-24 00:01:22 +000060private:
Misha Brukman906f5fa2003-06-02 03:23:16 +000061 static MachineCodeEmitter *createEmitter(VM &V);
Chris Lattner836f6752002-12-24 00:01:22 +000062 void setupPassManager();
Chris Lattner836f6752002-12-24 00:01:22 +000063};
64
65#endif