blob: b1d130c20fe7d9bead6a703b46f25b5e49fdd83a [file] [log] [blame]
Gordon Henriksen2e855e62007-12-23 16:59:28 +00001/*===-- llvm-c/ExecutionEngine.h - ExecutionEngine Lib C Iface --*- C++ -*-===*\
2|* *|
3|* The LLVM Compiler Infrastructure *|
4|* *|
Chris Lattner7ed47a12007-12-29 19:59:42 +00005|* This file is distributed under the University of Illinois Open Source *|
6|* License. See LICENSE.TXT for details. *|
Gordon Henriksen2e855e62007-12-23 16:59:28 +00007|* *|
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"
Erick Tryzelaar7c1483b2008-03-27 00:27:14 +000023#include "llvm-c/Target.h"
Gordon Henriksen2e855e62007-12-23 16:59:28 +000024
25#ifdef __cplusplus
26extern "C" {
27#endif
28
29typedef struct LLVMOpaqueGenericValue *LLVMGenericValueRef;
30typedef struct LLVMOpaqueExecutionEngine *LLVMExecutionEngineRef;
31
32/*===-- Operations on generic values --------------------------------------===*/
33
34LLVMGenericValueRef LLVMCreateGenericValueOfInt(LLVMTypeRef Ty,
35 unsigned long long N,
36 int IsSigned);
37
38LLVMGenericValueRef LLVMCreateGenericValueOfPointer(void *P);
39
40LLVMGenericValueRef LLVMCreateGenericValueOfFloat(LLVMTypeRef Ty, double N);
41
42unsigned LLVMGenericValueIntWidth(LLVMGenericValueRef GenValRef);
43
44unsigned long long LLVMGenericValueToInt(LLVMGenericValueRef GenVal,
45 int IsSigned);
46
47void *LLVMGenericValueToPointer(LLVMGenericValueRef GenVal);
48
49double LLVMGenericValueToFloat(LLVMTypeRef TyRef, LLVMGenericValueRef GenVal);
50
51void LLVMDisposeGenericValue(LLVMGenericValueRef GenVal);
52
53/*===-- Operations on execution engines -----------------------------------===*/
54
55int LLVMCreateExecutionEngine(LLVMExecutionEngineRef *OutEE,
56 LLVMModuleProviderRef MP,
57 char **OutError);
58
59int LLVMCreateInterpreter(LLVMExecutionEngineRef *OutInterp,
60 LLVMModuleProviderRef MP,
61 char **OutError);
62
63int LLVMCreateJITCompiler(LLVMExecutionEngineRef *OutJIT,
64 LLVMModuleProviderRef MP,
65 char **OutError);
66
67void LLVMDisposeExecutionEngine(LLVMExecutionEngineRef EE);
68
69void LLVMRunStaticConstructors(LLVMExecutionEngineRef EE);
70
71void LLVMRunStaticDestructors(LLVMExecutionEngineRef EE);
72
73int LLVMRunFunctionAsMain(LLVMExecutionEngineRef EE, LLVMValueRef F,
74 unsigned ArgC, const char * const *ArgV,
75 const char * const *EnvP);
76
77LLVMGenericValueRef LLVMRunFunction(LLVMExecutionEngineRef EE, LLVMValueRef F,
78 unsigned NumArgs,
79 LLVMGenericValueRef *Args);
80
81void LLVMFreeMachineCodeForFunction(LLVMExecutionEngineRef EE, LLVMValueRef F);
82
83void LLVMAddModuleProvider(LLVMExecutionEngineRef EE, LLVMModuleProviderRef MP);
84
85int LLVMRemoveModuleProvider(LLVMExecutionEngineRef EE,
86 LLVMModuleProviderRef MP,
87 LLVMModuleRef *OutMod, char **OutError);
88
89int LLVMFindFunction(LLVMExecutionEngineRef EE, const char *Name,
90 LLVMValueRef *OutFn);
91
Erick Tryzelaar7c1483b2008-03-27 00:27:14 +000092LLVMTargetDataRef LLVMGetExecutionEngineTargetData(LLVMExecutionEngineRef EE);
93
Gordon Henriksen2e855e62007-12-23 16:59:28 +000094#ifdef __cplusplus
95}
96
97namespace llvm {
98 class GenericValue;
99 class ExecutionEngine;
100
101 #define DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \
102 inline ty *unwrap(ref P) { \
103 return reinterpret_cast<ty*>(P); \
104 } \
105 \
106 inline ref wrap(const ty *P) { \
107 return reinterpret_cast<ref>(const_cast<ty*>(P)); \
108 }
109
110 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(GenericValue, LLVMGenericValueRef )
111 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ExecutionEngine, LLVMExecutionEngineRef)
112
113 #undef DEFINE_SIMPLE_CONVERSION_FUNCTIONS
114}
115
116#endif /* defined(__cplusplus) */
117
118#endif