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
LLVMTargetDataRef LLVMGetExecutionEngineTargetData(LLVMExecutionEngineRef EE);
121
void LLVMAddGlobalMapping(LLVMExecutionEngineRef EE, LLVMValueRef Global,
124
void *LLVMGetPointerToGlobal(LLVMExecutionEngineRef EE, LLVMValueRef Global);
131
class ExecutionEngine;
133
#define DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \
134
inline ty *unwrap(ref P) { \
135
return reinterpret_cast<ty*>(P); \
138
inline ref wrap(const ty *P) { \
139
return reinterpret_cast<ref>(const_cast<ty*>(P)); \
142
DEFINE_SIMPLE_CONVERSION_FUNCTIONS(GenericValue, LLVMGenericValueRef )
143
DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ExecutionEngine, LLVMExecutionEngineRef)
145
#undef DEFINE_SIMPLE_CONVERSION_FUNCTIONS
148
#endif /* defined(__cplusplus) */