Zap some more unused static method decls
[oota-llvm.git] / include / llvm / ExecutionEngine / ExecutionEngine.h
1 //===- ExecutionEngine.h - Abstract Execution Engine Interface --*- C++ -*-===//
2 //
3 // This file defines the abstract interface that implements execution support
4 // for LLVM.
5 //
6 //===----------------------------------------------------------------------===//
7
8 #ifndef EXECUTION_ENGINE_H
9 #define EXECUTION_ENGINE_H
10
11 #include <vector>
12 #include <string>
13 #include <map>
14 #include <cassert>
15 class Constant;
16 class Type;
17 class GlobalValue;
18 class Function;
19 class Module;
20 class TargetData;
21 union GenericValue;
22
23 class ExecutionEngine {
24   Module &CurMod;
25   const TargetData *TD;
26
27 protected:
28   // GlobalAddress - A mapping between LLVM global values and their actualized
29   // version...
30   std::map<const GlobalValue*, void *> GlobalAddress;
31
32   void setTargetData(const TargetData &td) {
33     TD = &td;
34   }
35 public:
36   ExecutionEngine(Module *M) : CurMod(*M) {
37     assert(M && "Module is null?");
38   }
39   virtual ~ExecutionEngine();
40   
41   Module &getModule() const { return CurMod; }
42   const TargetData &getTargetData() const { return *TD; }
43
44   /// run - Start execution with the specified function, arguments, and
45   ///       environment.
46   ///
47   virtual int run(const std::string &FnName,
48                   const std::vector<std::string> &Args,
49                   const char ** envp) = 0;
50
51   static ExecutionEngine *create (Module *M, bool ForceInterpreter,
52                                   bool TraceMode);
53
54   void addGlobalMapping(const Function *F, void *Addr) {
55     void *&CurVal = GlobalAddress[(const GlobalValue*)F];
56     assert(CurVal == 0 && "GlobalMapping already established!");
57     CurVal = Addr;
58   }
59
60   // getPointerToGlobalIfAvailable - This returns the address of the specified
61   // global value if it is available, otherwise it returns null.
62   //
63   void *getPointerToGlobalIfAvailable(const GlobalValue *GV) {
64     std::map<const GlobalValue*, void*>::iterator I = GlobalAddress.find(GV);
65     return I != GlobalAddress.end() ? I->second : 0;
66   }
67
68   // getPointerToGlobal - This returns the address of the specified global
69   // value.  This may involve code generation if it's a function.
70   //
71   void *getPointerToGlobal(const GlobalValue *GV);
72
73   // getPointerToFunction - The different EE's represent function bodies in
74   // different ways.  They should each implement this to say what a function
75   // pointer should look like.
76   //
77   virtual void *getPointerToFunction(Function *F) = 0;
78
79 protected:
80   void emitGlobals();
81
82 public:   // FIXME: protected:   // API shared among subclasses
83   GenericValue getConstantValue(const Constant *C);
84   void StoreValueToMemory(GenericValue Val, GenericValue *Ptr, const Type *Ty);
85   GenericValue LoadValueFromMemory(GenericValue *Ptr, const Type *Ty);
86   void *CreateArgv(const std::vector<std::string> &InputArgv);
87   void InitializeMemory(const Constant *Init, void *Addr);
88 };
89
90 #endif