blob: 5a98a77c5bd23545e76653ee45fee5563084d66a [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
Bob Wilsone46161f2009-06-24 21:09:18 +000029void LLVMLinkInJIT(void);
30void LLVMLinkInInterpreter(void);
31
Gordon Henriksen2e855e62007-12-23 16:59:28 +000032typedef struct LLVMOpaqueGenericValue *LLVMGenericValueRef;
33typedef struct LLVMOpaqueExecutionEngine *LLVMExecutionEngineRef;
34
35/*===-- Operations on generic values --------------------------------------===*/
36
37LLVMGenericValueRef LLVMCreateGenericValueOfInt(LLVMTypeRef Ty,
38 unsigned long long N,
Chris Lattnerd686c8e2010-01-09 22:27:07 +000039 LLVMBool IsSigned);
Gordon Henriksen2e855e62007-12-23 16:59:28 +000040
41LLVMGenericValueRef LLVMCreateGenericValueOfPointer(void *P);
42
43LLVMGenericValueRef LLVMCreateGenericValueOfFloat(LLVMTypeRef Ty, double N);
44
45unsigned LLVMGenericValueIntWidth(LLVMGenericValueRef GenValRef);
46
47unsigned long long LLVMGenericValueToInt(LLVMGenericValueRef GenVal,
Chris Lattnerd686c8e2010-01-09 22:27:07 +000048 LLVMBool IsSigned);
Gordon Henriksen2e855e62007-12-23 16:59:28 +000049
50void *LLVMGenericValueToPointer(LLVMGenericValueRef GenVal);
51
52double LLVMGenericValueToFloat(LLVMTypeRef TyRef, LLVMGenericValueRef GenVal);
53
54void LLVMDisposeGenericValue(LLVMGenericValueRef GenVal);
55
56/*===-- Operations on execution engines -----------------------------------===*/
57
Erick Tryzelaardf7df072010-03-02 23:58:54 +000058LLVMBool LLVMCreateExecutionEngineForModule(LLVMExecutionEngineRef *OutEE,
59 LLVMModuleRef M,
60 char **OutError);
61
62LLVMBool LLVMCreateInterpreterForModule(LLVMExecutionEngineRef *OutInterp,
63 LLVMModuleRef M,
64 char **OutError);
65
66LLVMBool LLVMCreateJITCompilerForModule(LLVMExecutionEngineRef *OutJIT,
67 LLVMModuleRef M,
68 unsigned OptLevel,
69 char **OutError);
70
71/** Deprecated: Use LLVMCreateExecutionEngineForModule instead. */
Chris Lattnerd686c8e2010-01-09 22:27:07 +000072LLVMBool LLVMCreateExecutionEngine(LLVMExecutionEngineRef *OutEE,
73 LLVMModuleProviderRef MP,
74 char **OutError);
Gordon Henriksen2e855e62007-12-23 16:59:28 +000075
Erick Tryzelaardf7df072010-03-02 23:58:54 +000076/** Deprecated: Use LLVMCreateInterpreterForModule instead. */
Chris Lattnerd686c8e2010-01-09 22:27:07 +000077LLVMBool LLVMCreateInterpreter(LLVMExecutionEngineRef *OutInterp,
78 LLVMModuleProviderRef MP,
79 char **OutError);
Gordon Henriksen2e855e62007-12-23 16:59:28 +000080
Erick Tryzelaardf7df072010-03-02 23:58:54 +000081/** Deprecated: Use LLVMCreateJITCompilerForModule instead. */
Chris Lattnerd686c8e2010-01-09 22:27:07 +000082LLVMBool LLVMCreateJITCompiler(LLVMExecutionEngineRef *OutJIT,
83 LLVMModuleProviderRef MP,
84 unsigned OptLevel,
85 char **OutError);
Gordon Henriksen2e855e62007-12-23 16:59:28 +000086
87void LLVMDisposeExecutionEngine(LLVMExecutionEngineRef EE);
88
89void LLVMRunStaticConstructors(LLVMExecutionEngineRef EE);
90
91void LLVMRunStaticDestructors(LLVMExecutionEngineRef EE);
92
93int LLVMRunFunctionAsMain(LLVMExecutionEngineRef EE, LLVMValueRef F,
94 unsigned ArgC, const char * const *ArgV,
95 const char * const *EnvP);
96
97LLVMGenericValueRef LLVMRunFunction(LLVMExecutionEngineRef EE, LLVMValueRef F,
98 unsigned NumArgs,
99 LLVMGenericValueRef *Args);
100
101void LLVMFreeMachineCodeForFunction(LLVMExecutionEngineRef EE, LLVMValueRef F);
102
Erick Tryzelaardf7df072010-03-02 23:58:54 +0000103void LLVMAddModule(LLVMExecutionEngineRef EE, LLVMModuleRef M);
104
105/** Deprecated: Use LLVMAddModule instead. */
Gordon Henriksen2e855e62007-12-23 16:59:28 +0000106void LLVMAddModuleProvider(LLVMExecutionEngineRef EE, LLVMModuleProviderRef MP);
107
Erick Tryzelaardf7df072010-03-02 23:58:54 +0000108LLVMBool LLVMRemoveModule(LLVMExecutionEngineRef EE, LLVMModuleRef M,
109 LLVMModuleRef *OutMod, char **OutError);
110
111/** Deprecated: Use LLVMRemoveModule instead. */
Chris Lattnerd686c8e2010-01-09 22:27:07 +0000112LLVMBool LLVMRemoveModuleProvider(LLVMExecutionEngineRef EE,
113 LLVMModuleProviderRef MP,
114 LLVMModuleRef *OutMod, char **OutError);
Gordon Henriksen2e855e62007-12-23 16:59:28 +0000115
Chris Lattnerd686c8e2010-01-09 22:27:07 +0000116LLVMBool LLVMFindFunction(LLVMExecutionEngineRef EE, const char *Name,
117 LLVMValueRef *OutFn);
Gordon Henriksen2e855e62007-12-23 16:59:28 +0000118
Erick Tryzelaar7c1483b2008-03-27 00:27:14 +0000119LLVMTargetDataRef LLVMGetExecutionEngineTargetData(LLVMExecutionEngineRef EE);
120
Gordon Henriksen54227f62008-06-20 02:16:11 +0000121void LLVMAddGlobalMapping(LLVMExecutionEngineRef EE, LLVMValueRef Global,
122 void* Addr);
123
Chris Lattner1e42c5b2009-01-21 18:11:10 +0000124void *LLVMGetPointerToGlobal(LLVMExecutionEngineRef EE, LLVMValueRef Global);
125
Gordon Henriksen2e855e62007-12-23 16:59:28 +0000126#ifdef __cplusplus
127}
128
129namespace llvm {
Daniel Dunbardeb052a2009-07-12 23:50:34 +0000130 struct GenericValue;
Gordon Henriksen2e855e62007-12-23 16:59:28 +0000131 class ExecutionEngine;
132
133 #define DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \
134 inline ty *unwrap(ref P) { \
135 return reinterpret_cast<ty*>(P); \
136 } \
137 \
138 inline ref wrap(const ty *P) { \
139 return reinterpret_cast<ref>(const_cast<ty*>(P)); \
140 }
141
142 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(GenericValue, LLVMGenericValueRef )
143 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ExecutionEngine, LLVMExecutionEngineRef)
144
145 #undef DEFINE_SIMPLE_CONVERSION_FUNCTIONS
146}
147
148#endif /* defined(__cplusplus) */
149
150#endif