1 /*===-- llvm-c/ExecutionEngine.h - ExecutionEngine Lib C Iface --*- C++ -*-===*\
3 |* The LLVM Compiler Infrastructure *|
5 |* This file is distributed under the University of Illinois Open Source *|
6 |* License. See LICENSE.TXT for details. *|
8 |*===----------------------------------------------------------------------===*|
10 |* This header declares the C interface to libLLVMExecutionEngine.o, which *|
11 |* implements various analyses of the LLVM IR. *|
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. *|
17 \*===----------------------------------------------------------------------===*/
19 #ifndef LLVM_C_EXECUTIONENGINE_H
20 #define LLVM_C_EXECUTIONENGINE_H
22 #include "llvm-c/Core.h"
23 #include "llvm-c/Target.h"
30 * @defgroup LLVMCExecutionEngine Execution Engine
36 void LLVMLinkInJIT(void);
37 void LLVMLinkInInterpreter(void);
39 typedef struct LLVMOpaqueGenericValue *LLVMGenericValueRef;
40 typedef struct LLVMOpaqueExecutionEngine *LLVMExecutionEngineRef;
42 /*===-- Operations on generic values --------------------------------------===*/
44 LLVMGenericValueRef LLVMCreateGenericValueOfInt(LLVMTypeRef Ty,
48 LLVMGenericValueRef LLVMCreateGenericValueOfPointer(void *P);
50 LLVMGenericValueRef LLVMCreateGenericValueOfFloat(LLVMTypeRef Ty, double N);
52 unsigned LLVMGenericValueIntWidth(LLVMGenericValueRef GenValRef);
54 unsigned long long LLVMGenericValueToInt(LLVMGenericValueRef GenVal,
57 void *LLVMGenericValueToPointer(LLVMGenericValueRef GenVal);
59 double LLVMGenericValueToFloat(LLVMTypeRef TyRef, LLVMGenericValueRef GenVal);
61 void LLVMDisposeGenericValue(LLVMGenericValueRef GenVal);
63 /*===-- Operations on execution engines -----------------------------------===*/
65 LLVMBool LLVMCreateExecutionEngineForModule(LLVMExecutionEngineRef *OutEE,
69 LLVMBool LLVMCreateInterpreterForModule(LLVMExecutionEngineRef *OutInterp,
73 LLVMBool LLVMCreateJITCompilerForModule(LLVMExecutionEngineRef *OutJIT,
78 /** Deprecated: Use LLVMCreateExecutionEngineForModule instead. */
79 LLVMBool LLVMCreateExecutionEngine(LLVMExecutionEngineRef *OutEE,
80 LLVMModuleProviderRef MP,
83 /** Deprecated: Use LLVMCreateInterpreterForModule instead. */
84 LLVMBool LLVMCreateInterpreter(LLVMExecutionEngineRef *OutInterp,
85 LLVMModuleProviderRef MP,
88 /** Deprecated: Use LLVMCreateJITCompilerForModule instead. */
89 LLVMBool LLVMCreateJITCompiler(LLVMExecutionEngineRef *OutJIT,
90 LLVMModuleProviderRef MP,
94 void LLVMDisposeExecutionEngine(LLVMExecutionEngineRef EE);
96 void LLVMRunStaticConstructors(LLVMExecutionEngineRef EE);
98 void LLVMRunStaticDestructors(LLVMExecutionEngineRef EE);
100 int LLVMRunFunctionAsMain(LLVMExecutionEngineRef EE, LLVMValueRef F,
101 unsigned ArgC, const char * const *ArgV,
102 const char * const *EnvP);
104 LLVMGenericValueRef LLVMRunFunction(LLVMExecutionEngineRef EE, LLVMValueRef F,
106 LLVMGenericValueRef *Args);
108 void LLVMFreeMachineCodeForFunction(LLVMExecutionEngineRef EE, LLVMValueRef F);
110 void LLVMAddModule(LLVMExecutionEngineRef EE, LLVMModuleRef M);
112 /** Deprecated: Use LLVMAddModule instead. */
113 void LLVMAddModuleProvider(LLVMExecutionEngineRef EE, LLVMModuleProviderRef MP);
115 LLVMBool LLVMRemoveModule(LLVMExecutionEngineRef EE, LLVMModuleRef M,
116 LLVMModuleRef *OutMod, char **OutError);
118 /** Deprecated: Use LLVMRemoveModule instead. */
119 LLVMBool LLVMRemoveModuleProvider(LLVMExecutionEngineRef EE,
120 LLVMModuleProviderRef MP,
121 LLVMModuleRef *OutMod, char **OutError);
123 LLVMBool LLVMFindFunction(LLVMExecutionEngineRef EE, const char *Name,
124 LLVMValueRef *OutFn);
126 void *LLVMRecompileAndRelinkFunction(LLVMExecutionEngineRef EE, LLVMValueRef Fn);
128 LLVMTargetDataRef LLVMGetExecutionEngineTargetData(LLVMExecutionEngineRef EE);
130 void LLVMAddGlobalMapping(LLVMExecutionEngineRef EE, LLVMValueRef Global,
133 void *LLVMGetPointerToGlobal(LLVMExecutionEngineRef EE, LLVMValueRef Global);
144 class ExecutionEngine;
146 #define DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \
147 inline ty *unwrap(ref P) { \
148 return reinterpret_cast<ty*>(P); \
151 inline ref wrap(const ty *P) { \
152 return reinterpret_cast<ref>(const_cast<ty*>(P)); \
155 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(GenericValue, LLVMGenericValueRef )
156 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ExecutionEngine, LLVMExecutionEngineRef)
158 #undef DEFINE_SIMPLE_CONVERSION_FUNCTIONS
161 #endif /* defined(__cplusplus) */