• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*===-- llvm-c/ExecutionEngine.h - ExecutionEngine Lib C Iface --*- C++ -*-===*\
2 |*                                                                            *|
3 |*                     The LLVM Compiler Infrastructure                       *|
4 |*                                                                            *|
5 |* This file is distributed under the University of Illinois Open Source      *|
6 |* License. See LICENSE.TXT for details.                                      *|
7 |*                                                                            *|
8 |*===----------------------------------------------------------------------===*|
9 |*                                                                            *|
10 |* This header declares the C interface to libLLVMExecutionEngine.o, which    *|
11 |* implements various analyses of the LLVM IR.                                *|
12 |*                                                                            *|
13 |* Many exotic languages can interoperate with C code but have a harder time  *|
14 |* with C++ due to name mangling. So in addition to C, this interface enables *|
15 |* tools written in such languages.                                           *|
16 |*                                                                            *|
17 \*===----------------------------------------------------------------------===*/
18 
19 #ifndef LLVM_C_EXECUTIONENGINE_H
20 #define LLVM_C_EXECUTIONENGINE_H
21 
22 #include "llvm-c/Core.h"
23 #include "llvm-c/Target.h"
24 
25 #ifdef __cplusplus
26 extern "C" {
27 #endif
28 
29 void LLVMLinkInJIT(void);
30 void LLVMLinkInInterpreter(void);
31 
32 typedef struct LLVMOpaqueGenericValue *LLVMGenericValueRef;
33 typedef struct LLVMOpaqueExecutionEngine *LLVMExecutionEngineRef;
34 
35 /*===-- Operations on generic values --------------------------------------===*/
36 
37 LLVMGenericValueRef LLVMCreateGenericValueOfInt(LLVMTypeRef Ty,
38                                                 unsigned long long N,
39                                                 LLVMBool IsSigned);
40 
41 LLVMGenericValueRef LLVMCreateGenericValueOfPointer(void *P);
42 
43 LLVMGenericValueRef LLVMCreateGenericValueOfFloat(LLVMTypeRef Ty, double N);
44 
45 unsigned LLVMGenericValueIntWidth(LLVMGenericValueRef GenValRef);
46 
47 unsigned long long LLVMGenericValueToInt(LLVMGenericValueRef GenVal,
48                                          LLVMBool IsSigned);
49 
50 void *LLVMGenericValueToPointer(LLVMGenericValueRef GenVal);
51 
52 double LLVMGenericValueToFloat(LLVMTypeRef TyRef, LLVMGenericValueRef GenVal);
53 
54 void LLVMDisposeGenericValue(LLVMGenericValueRef GenVal);
55 
56 /*===-- Operations on execution engines -----------------------------------===*/
57 
58 LLVMBool LLVMCreateExecutionEngineForModule(LLVMExecutionEngineRef *OutEE,
59                                             LLVMModuleRef M,
60                                             char **OutError);
61 
62 LLVMBool LLVMCreateInterpreterForModule(LLVMExecutionEngineRef *OutInterp,
63                                         LLVMModuleRef M,
64                                         char **OutError);
65 
66 LLVMBool LLVMCreateJITCompilerForModule(LLVMExecutionEngineRef *OutJIT,
67                                         LLVMModuleRef M,
68                                         unsigned OptLevel,
69                                         char **OutError);
70 
71 /** Deprecated: Use LLVMCreateExecutionEngineForModule instead. */
72 LLVMBool LLVMCreateExecutionEngine(LLVMExecutionEngineRef *OutEE,
73                                    LLVMModuleProviderRef MP,
74                                    char **OutError);
75 
76 /** Deprecated: Use LLVMCreateInterpreterForModule instead. */
77 LLVMBool LLVMCreateInterpreter(LLVMExecutionEngineRef *OutInterp,
78                                LLVMModuleProviderRef MP,
79                                char **OutError);
80 
81 /** Deprecated: Use LLVMCreateJITCompilerForModule instead. */
82 LLVMBool LLVMCreateJITCompiler(LLVMExecutionEngineRef *OutJIT,
83                                LLVMModuleProviderRef MP,
84                                unsigned OptLevel,
85                                char **OutError);
86 
87 void LLVMDisposeExecutionEngine(LLVMExecutionEngineRef EE);
88 
89 void LLVMRunStaticConstructors(LLVMExecutionEngineRef EE);
90 
91 void LLVMRunStaticDestructors(LLVMExecutionEngineRef EE);
92 
93 int LLVMRunFunctionAsMain(LLVMExecutionEngineRef EE, LLVMValueRef F,
94                           unsigned ArgC, const char * const *ArgV,
95                           const char * const *EnvP);
96 
97 LLVMGenericValueRef LLVMRunFunction(LLVMExecutionEngineRef EE, LLVMValueRef F,
98                                     unsigned NumArgs,
99                                     LLVMGenericValueRef *Args);
100 
101 void LLVMFreeMachineCodeForFunction(LLVMExecutionEngineRef EE, LLVMValueRef F);
102 
103 void LLVMAddModule(LLVMExecutionEngineRef EE, LLVMModuleRef M);
104 
105 /** Deprecated: Use LLVMAddModule instead. */
106 void LLVMAddModuleProvider(LLVMExecutionEngineRef EE, LLVMModuleProviderRef MP);
107 
108 LLVMBool LLVMRemoveModule(LLVMExecutionEngineRef EE, LLVMModuleRef M,
109                           LLVMModuleRef *OutMod, char **OutError);
110 
111 /** Deprecated: Use LLVMRemoveModule instead. */
112 LLVMBool LLVMRemoveModuleProvider(LLVMExecutionEngineRef EE,
113                                   LLVMModuleProviderRef MP,
114                                   LLVMModuleRef *OutMod, char **OutError);
115 
116 LLVMBool LLVMFindFunction(LLVMExecutionEngineRef EE, const char *Name,
117                           LLVMValueRef *OutFn);
118 
119 void *LLVMRecompileAndRelinkFunction(LLVMExecutionEngineRef EE, LLVMValueRef Fn);
120 
121 LLVMTargetDataRef LLVMGetExecutionEngineTargetData(LLVMExecutionEngineRef EE);
122 
123 void LLVMAddGlobalMapping(LLVMExecutionEngineRef EE, LLVMValueRef Global,
124                           void* Addr);
125 
126 void *LLVMGetPointerToGlobal(LLVMExecutionEngineRef EE, LLVMValueRef Global);
127 
128 #ifdef __cplusplus
129 }
130 
131 namespace llvm {
132   struct GenericValue;
133   class ExecutionEngine;
134 
135   #define DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref)   \
136     inline ty *unwrap(ref P) {                          \
137       return reinterpret_cast<ty*>(P);                  \
138     }                                                   \
139                                                         \
140     inline ref wrap(const ty *P) {                      \
141       return reinterpret_cast<ref>(const_cast<ty*>(P)); \
142     }
143 
144   DEFINE_SIMPLE_CONVERSION_FUNCTIONS(GenericValue,    LLVMGenericValueRef   )
145   DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ExecutionEngine, LLVMExecutionEngineRef)
146 
147   #undef DEFINE_SIMPLE_CONVERSION_FUNCTIONS
148 }
149 
150 #endif /* defined(__cplusplus) */
151 
152 #endif
153