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"
29 void LLVMLinkInJIT(void);
30 void LLVMLinkInInterpreter(void);
32 typedef struct LLVMOpaqueGenericValue
*LLVMGenericValueRef
;
33 typedef struct LLVMOpaqueExecutionEngine
*LLVMExecutionEngineRef
;
35 /*===-- Operations on generic values --------------------------------------===*/
37 LLVMGenericValueRef
LLVMCreateGenericValueOfInt(LLVMTypeRef Ty
,
41 LLVMGenericValueRef
LLVMCreateGenericValueOfPointer(void *P
);
43 LLVMGenericValueRef
LLVMCreateGenericValueOfFloat(LLVMTypeRef Ty
, double N
);
45 unsigned LLVMGenericValueIntWidth(LLVMGenericValueRef GenValRef
);
47 unsigned long long LLVMGenericValueToInt(LLVMGenericValueRef GenVal
,
50 void *LLVMGenericValueToPointer(LLVMGenericValueRef GenVal
);
52 double LLVMGenericValueToFloat(LLVMTypeRef TyRef
, LLVMGenericValueRef GenVal
);
54 void LLVMDisposeGenericValue(LLVMGenericValueRef GenVal
);
56 /*===-- Operations on execution engines -----------------------------------===*/
58 LLVMBool
LLVMCreateExecutionEngineForModule(LLVMExecutionEngineRef
*OutEE
,
62 LLVMBool
LLVMCreateInterpreterForModule(LLVMExecutionEngineRef
*OutInterp
,
66 LLVMBool
LLVMCreateJITCompilerForModule(LLVMExecutionEngineRef
*OutJIT
,
71 /** Deprecated: Use LLVMCreateExecutionEngineForModule instead. */
72 LLVMBool
LLVMCreateExecutionEngine(LLVMExecutionEngineRef
*OutEE
,
73 LLVMModuleProviderRef MP
,
76 /** Deprecated: Use LLVMCreateInterpreterForModule instead. */
77 LLVMBool
LLVMCreateInterpreter(LLVMExecutionEngineRef
*OutInterp
,
78 LLVMModuleProviderRef MP
,
81 /** Deprecated: Use LLVMCreateJITCompilerForModule instead. */
82 LLVMBool
LLVMCreateJITCompiler(LLVMExecutionEngineRef
*OutJIT
,
83 LLVMModuleProviderRef MP
,
87 void LLVMDisposeExecutionEngine(LLVMExecutionEngineRef EE
);
89 void LLVMRunStaticConstructors(LLVMExecutionEngineRef EE
);
91 void LLVMRunStaticDestructors(LLVMExecutionEngineRef EE
);
93 int LLVMRunFunctionAsMain(LLVMExecutionEngineRef EE
, LLVMValueRef F
,
94 unsigned ArgC
, const char * const *ArgV
,
95 const char * const *EnvP
);
97 LLVMGenericValueRef
LLVMRunFunction(LLVMExecutionEngineRef EE
, LLVMValueRef F
,
99 LLVMGenericValueRef
*Args
);
101 void LLVMFreeMachineCodeForFunction(LLVMExecutionEngineRef EE
, LLVMValueRef F
);
103 void LLVMAddModule(LLVMExecutionEngineRef EE
, LLVMModuleRef M
);
105 /** Deprecated: Use LLVMAddModule instead. */
106 void LLVMAddModuleProvider(LLVMExecutionEngineRef EE
, LLVMModuleProviderRef MP
);
108 LLVMBool
LLVMRemoveModule(LLVMExecutionEngineRef EE
, LLVMModuleRef M
,
109 LLVMModuleRef
*OutMod
, char **OutError
);
111 /** Deprecated: Use LLVMRemoveModule instead. */
112 LLVMBool
LLVMRemoveModuleProvider(LLVMExecutionEngineRef EE
,
113 LLVMModuleProviderRef MP
,
114 LLVMModuleRef
*OutMod
, char **OutError
);
116 LLVMBool
LLVMFindFunction(LLVMExecutionEngineRef EE
, const char *Name
,
117 LLVMValueRef
*OutFn
);
119 void *LLVMRecompileAndRelinkFunction(LLVMExecutionEngineRef EE
, LLVMValueRef Fn
);
121 LLVMTargetDataRef
LLVMGetExecutionEngineTargetData(LLVMExecutionEngineRef EE
);
123 void LLVMAddGlobalMapping(LLVMExecutionEngineRef EE
, LLVMValueRef Global
,
126 void *LLVMGetPointerToGlobal(LLVMExecutionEngineRef EE
, LLVMValueRef Global
);
133 class ExecutionEngine
;
135 #define DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \
136 inline ty *unwrap(ref P) { \
137 return reinterpret_cast<ty*>(P); \
140 inline ref wrap(const ty *P) { \
141 return reinterpret_cast<ref>(const_cast<ty*>(P)); \
144 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(GenericValue
, LLVMGenericValueRef
)
145 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ExecutionEngine
, LLVMExecutionEngineRef
)
147 #undef DEFINE_SIMPLE_CONVERSION_FUNCTIONS
150 #endif /* defined(__cplusplus) */