|
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 LLVMTargetDataRef LLVMGetExecutionEngineTargetData(LLVMExecutionEngineRef EE); |
|
120 |
|
121 void LLVMAddGlobalMapping(LLVMExecutionEngineRef EE, LLVMValueRef Global, |
|
122 void* Addr); |
|
123 |
|
124 void *LLVMGetPointerToGlobal(LLVMExecutionEngineRef EE, LLVMValueRef Global); |
|
125 |
|
126 #ifdef __cplusplus |
|
127 } |
|
128 |
|
129 namespace llvm { |
|
130 struct GenericValue; |
|
131 class ExecutionEngine; |
|
132 |
|
133 #define DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \ |
|
134 inline ty *unwrap(ref P) { \ |
|
135 return reinterpret_cast<ty*>(P); \ |
|
136 } \ |
|
137 \ |
|
138 inline ref wrap(const ty *P) { \ |
|
139 return reinterpret_cast<ref>(const_cast<ty*>(P)); \ |
|
140 } |
|
141 |
|
142 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(GenericValue, LLVMGenericValueRef ) |
|
143 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ExecutionEngine, LLVMExecutionEngineRef) |
|
144 |
|
145 #undef DEFINE_SIMPLE_CONVERSION_FUNCTIONS |
|
146 } |
|
147 |
|
148 #endif /* defined(__cplusplus) */ |
|
149 |
|
150 #endif |