blob: cb77bb2e2e23d4c68021d02d28f30c14af10d2eb [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
Gregory Szorc6244b512012-03-21 03:54:29 +000029/**
30 * @defgroup LLVMCExecutionEngine Execution Engine
31 * @ingroup LLVMC
32 *
33 * @{
34 */
35
Bob Wilsone46161f2009-06-24 21:09:18 +000036void LLVMLinkInJIT(void);
37void LLVMLinkInInterpreter(void);
38
Gordon Henriksen2e855e62007-12-23 16:59:28 +000039typedef struct LLVMOpaqueGenericValue *LLVMGenericValueRef;
40typedef struct LLVMOpaqueExecutionEngine *LLVMExecutionEngineRef;
41
42/*===-- Operations on generic values --------------------------------------===*/
43
44LLVMGenericValueRef LLVMCreateGenericValueOfInt(LLVMTypeRef Ty,
45 unsigned long long N,
Chris Lattnerd686c8e2010-01-09 22:27:07 +000046 LLVMBool IsSigned);
Gordon Henriksen2e855e62007-12-23 16:59:28 +000047
48LLVMGenericValueRef LLVMCreateGenericValueOfPointer(void *P);
49
50LLVMGenericValueRef LLVMCreateGenericValueOfFloat(LLVMTypeRef Ty, double N);
51
52unsigned LLVMGenericValueIntWidth(LLVMGenericValueRef GenValRef);
53
54unsigned long long LLVMGenericValueToInt(LLVMGenericValueRef GenVal,
Chris Lattnerd686c8e2010-01-09 22:27:07 +000055 LLVMBool IsSigned);
Gordon Henriksen2e855e62007-12-23 16:59:28 +000056
57void *LLVMGenericValueToPointer(LLVMGenericValueRef GenVal);
58
59double LLVMGenericValueToFloat(LLVMTypeRef TyRef, LLVMGenericValueRef GenVal);
60
61void LLVMDisposeGenericValue(LLVMGenericValueRef GenVal);
62
63/*===-- Operations on execution engines -----------------------------------===*/
64
Erick Tryzelaardf7df072010-03-02 23:58:54 +000065LLVMBool LLVMCreateExecutionEngineForModule(LLVMExecutionEngineRef *OutEE,
66 LLVMModuleRef M,
67 char **OutError);
68
69LLVMBool LLVMCreateInterpreterForModule(LLVMExecutionEngineRef *OutInterp,
70 LLVMModuleRef M,
71 char **OutError);
72
73LLVMBool LLVMCreateJITCompilerForModule(LLVMExecutionEngineRef *OutJIT,
74 LLVMModuleRef M,
75 unsigned OptLevel,
76 char **OutError);
77
78/** Deprecated: Use LLVMCreateExecutionEngineForModule instead. */
Chris Lattnerd686c8e2010-01-09 22:27:07 +000079LLVMBool LLVMCreateExecutionEngine(LLVMExecutionEngineRef *OutEE,
80 LLVMModuleProviderRef MP,
81 char **OutError);
Gordon Henriksen2e855e62007-12-23 16:59:28 +000082
Erick Tryzelaardf7df072010-03-02 23:58:54 +000083/** Deprecated: Use LLVMCreateInterpreterForModule instead. */
Chris Lattnerd686c8e2010-01-09 22:27:07 +000084LLVMBool LLVMCreateInterpreter(LLVMExecutionEngineRef *OutInterp,
85 LLVMModuleProviderRef MP,
86 char **OutError);
Gordon Henriksen2e855e62007-12-23 16:59:28 +000087
Erick Tryzelaardf7df072010-03-02 23:58:54 +000088/** Deprecated: Use LLVMCreateJITCompilerForModule instead. */
Chris Lattnerd686c8e2010-01-09 22:27:07 +000089LLVMBool LLVMCreateJITCompiler(LLVMExecutionEngineRef *OutJIT,
90 LLVMModuleProviderRef MP,
91 unsigned OptLevel,
92 char **OutError);
Gordon Henriksen2e855e62007-12-23 16:59:28 +000093
94void LLVMDisposeExecutionEngine(LLVMExecutionEngineRef EE);
95
96void LLVMRunStaticConstructors(LLVMExecutionEngineRef EE);
97
98void LLVMRunStaticDestructors(LLVMExecutionEngineRef EE);
99
100int LLVMRunFunctionAsMain(LLVMExecutionEngineRef EE, LLVMValueRef F,
101 unsigned ArgC, const char * const *ArgV,
102 const char * const *EnvP);
103
104LLVMGenericValueRef LLVMRunFunction(LLVMExecutionEngineRef EE, LLVMValueRef F,
105 unsigned NumArgs,
106 LLVMGenericValueRef *Args);
107
108void LLVMFreeMachineCodeForFunction(LLVMExecutionEngineRef EE, LLVMValueRef F);
109
Erick Tryzelaardf7df072010-03-02 23:58:54 +0000110void LLVMAddModule(LLVMExecutionEngineRef EE, LLVMModuleRef M);
111
112/** Deprecated: Use LLVMAddModule instead. */
Gordon Henriksen2e855e62007-12-23 16:59:28 +0000113void LLVMAddModuleProvider(LLVMExecutionEngineRef EE, LLVMModuleProviderRef MP);
114
Erick Tryzelaardf7df072010-03-02 23:58:54 +0000115LLVMBool LLVMRemoveModule(LLVMExecutionEngineRef EE, LLVMModuleRef M,
116 LLVMModuleRef *OutMod, char **OutError);
117
118/** Deprecated: Use LLVMRemoveModule instead. */
Chris Lattnerd686c8e2010-01-09 22:27:07 +0000119LLVMBool LLVMRemoveModuleProvider(LLVMExecutionEngineRef EE,
120 LLVMModuleProviderRef MP,
121 LLVMModuleRef *OutMod, char **OutError);
Gordon Henriksen2e855e62007-12-23 16:59:28 +0000122
Chris Lattnerd686c8e2010-01-09 22:27:07 +0000123LLVMBool LLVMFindFunction(LLVMExecutionEngineRef EE, const char *Name,
124 LLVMValueRef *OutFn);
Gordon Henriksen2e855e62007-12-23 16:59:28 +0000125
Duncan Sandsd90fee92010-07-19 09:33:13 +0000126void *LLVMRecompileAndRelinkFunction(LLVMExecutionEngineRef EE, LLVMValueRef Fn);
127
Erick Tryzelaar7c1483b2008-03-27 00:27:14 +0000128LLVMTargetDataRef LLVMGetExecutionEngineTargetData(LLVMExecutionEngineRef EE);
129
Gordon Henriksen54227f62008-06-20 02:16:11 +0000130void LLVMAddGlobalMapping(LLVMExecutionEngineRef EE, LLVMValueRef Global,
131 void* Addr);
132
Chris Lattner1e42c5b2009-01-21 18:11:10 +0000133void *LLVMGetPointerToGlobal(LLVMExecutionEngineRef EE, LLVMValueRef Global);
134
Gregory Szorc6244b512012-03-21 03:54:29 +0000135/**
136 * @}
137 */
138
Gordon Henriksen2e855e62007-12-23 16:59:28 +0000139#ifdef __cplusplus
140}
141
142namespace llvm {
Daniel Dunbardeb052a2009-07-12 23:50:34 +0000143 struct GenericValue;
Gordon Henriksen2e855e62007-12-23 16:59:28 +0000144 class ExecutionEngine;
145
146 #define DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \
147 inline ty *unwrap(ref P) { \
148 return reinterpret_cast<ty*>(P); \
149 } \
150 \
151 inline ref wrap(const ty *P) { \
152 return reinterpret_cast<ref>(const_cast<ty*>(P)); \
153 }
154
155 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(GenericValue, LLVMGenericValueRef )
156 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ExecutionEngine, LLVMExecutionEngineRef)
157
158 #undef DEFINE_SIMPLE_CONVERSION_FUNCTIONS
159}
Evan Cheng9313da52013-04-04 17:40:53 +0000160
161#endif /* defined(__cplusplus) */
Gordon Henriksen2e855e62007-12-23 16:59:28 +0000162
163#endif