blob: 8b654d5a5ca2febbbb379d5199d3a35bc45827c1 [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);
Andrew Kaylord2755af2013-04-29 17:49:40 +000037void LLVMLinkInMCJIT(void);
Bob Wilsone46161f2009-06-24 21:09:18 +000038void LLVMLinkInInterpreter(void);
39
Gordon Henriksen2e855e62007-12-23 16:59:28 +000040typedef struct LLVMOpaqueGenericValue *LLVMGenericValueRef;
41typedef struct LLVMOpaqueExecutionEngine *LLVMExecutionEngineRef;
42
Andrew Kaylord2755af2013-04-29 17:49:40 +000043struct LLVMMCJITCompilerOptions {
44 unsigned OptLevel;
45 LLVMBool NoFramePointerElim;
46};
47
Gordon Henriksen2e855e62007-12-23 16:59:28 +000048/*===-- Operations on generic values --------------------------------------===*/
49
50LLVMGenericValueRef LLVMCreateGenericValueOfInt(LLVMTypeRef Ty,
51 unsigned long long N,
Chris Lattnerd686c8e2010-01-09 22:27:07 +000052 LLVMBool IsSigned);
Gordon Henriksen2e855e62007-12-23 16:59:28 +000053
54LLVMGenericValueRef LLVMCreateGenericValueOfPointer(void *P);
55
56LLVMGenericValueRef LLVMCreateGenericValueOfFloat(LLVMTypeRef Ty, double N);
57
58unsigned LLVMGenericValueIntWidth(LLVMGenericValueRef GenValRef);
59
60unsigned long long LLVMGenericValueToInt(LLVMGenericValueRef GenVal,
Chris Lattnerd686c8e2010-01-09 22:27:07 +000061 LLVMBool IsSigned);
Gordon Henriksen2e855e62007-12-23 16:59:28 +000062
63void *LLVMGenericValueToPointer(LLVMGenericValueRef GenVal);
64
65double LLVMGenericValueToFloat(LLVMTypeRef TyRef, LLVMGenericValueRef GenVal);
66
67void LLVMDisposeGenericValue(LLVMGenericValueRef GenVal);
68
69/*===-- Operations on execution engines -----------------------------------===*/
70
Erick Tryzelaardf7df072010-03-02 23:58:54 +000071LLVMBool LLVMCreateExecutionEngineForModule(LLVMExecutionEngineRef *OutEE,
72 LLVMModuleRef M,
73 char **OutError);
74
75LLVMBool LLVMCreateInterpreterForModule(LLVMExecutionEngineRef *OutInterp,
76 LLVMModuleRef M,
77 char **OutError);
78
79LLVMBool LLVMCreateJITCompilerForModule(LLVMExecutionEngineRef *OutJIT,
80 LLVMModuleRef M,
81 unsigned OptLevel,
82 char **OutError);
83
Andrew Kaylord2755af2013-04-29 17:49:40 +000084/**
85 * Create an MCJIT execution engine for a module, with the given options. It is
86 * the responsibility of the caller to ensure that all fields in Options up to
87 * the given SizeOfOptions are initialized. It is correct to pass a smaller value
88 * of SizeOfOptions that omits some fields, and it is also correct to set any
89 * field to zero. The canonical way of using this is:
90 *
91 * LLVMMCJITCompilerOptions options;
92 * memset(&options, 0, sizeof(options));
93 * ... fill in those options you care about
94 * LLVMCreateMCJITCompilerForModule(&jit, mod, &options, sizeof(options), &error);
95 *
96 * Note that this is also correct, though possibly suboptimal:
97 *
98 * LLVMCreateMCJITCompilerForModule(&jit, mod, 0, 0, &error);
99 */
100LLVMBool LLVMCreateMCJITCompilerForModule(LLVMExecutionEngineRef *OutJIT,
101 LLVMModuleRef M,
102 struct LLVMMCJITCompilerOptions *Options,
103 size_t SizeOfOptions,
104 char **OutError);
105
Erick Tryzelaardf7df072010-03-02 23:58:54 +0000106/** Deprecated: Use LLVMCreateExecutionEngineForModule instead. */
Chris Lattnerd686c8e2010-01-09 22:27:07 +0000107LLVMBool LLVMCreateExecutionEngine(LLVMExecutionEngineRef *OutEE,
108 LLVMModuleProviderRef MP,
109 char **OutError);
Gordon Henriksen2e855e62007-12-23 16:59:28 +0000110
Erick Tryzelaardf7df072010-03-02 23:58:54 +0000111/** Deprecated: Use LLVMCreateInterpreterForModule instead. */
Chris Lattnerd686c8e2010-01-09 22:27:07 +0000112LLVMBool LLVMCreateInterpreter(LLVMExecutionEngineRef *OutInterp,
113 LLVMModuleProviderRef MP,
114 char **OutError);
Gordon Henriksen2e855e62007-12-23 16:59:28 +0000115
Erick Tryzelaardf7df072010-03-02 23:58:54 +0000116/** Deprecated: Use LLVMCreateJITCompilerForModule instead. */
Chris Lattnerd686c8e2010-01-09 22:27:07 +0000117LLVMBool LLVMCreateJITCompiler(LLVMExecutionEngineRef *OutJIT,
118 LLVMModuleProviderRef MP,
119 unsigned OptLevel,
120 char **OutError);
Gordon Henriksen2e855e62007-12-23 16:59:28 +0000121
122void LLVMDisposeExecutionEngine(LLVMExecutionEngineRef EE);
123
124void LLVMRunStaticConstructors(LLVMExecutionEngineRef EE);
125
126void LLVMRunStaticDestructors(LLVMExecutionEngineRef EE);
127
128int LLVMRunFunctionAsMain(LLVMExecutionEngineRef EE, LLVMValueRef F,
129 unsigned ArgC, const char * const *ArgV,
130 const char * const *EnvP);
131
132LLVMGenericValueRef LLVMRunFunction(LLVMExecutionEngineRef EE, LLVMValueRef F,
133 unsigned NumArgs,
134 LLVMGenericValueRef *Args);
135
136void LLVMFreeMachineCodeForFunction(LLVMExecutionEngineRef EE, LLVMValueRef F);
137
Erick Tryzelaardf7df072010-03-02 23:58:54 +0000138void LLVMAddModule(LLVMExecutionEngineRef EE, LLVMModuleRef M);
139
140/** Deprecated: Use LLVMAddModule instead. */
Gordon Henriksen2e855e62007-12-23 16:59:28 +0000141void LLVMAddModuleProvider(LLVMExecutionEngineRef EE, LLVMModuleProviderRef MP);
142
Erick Tryzelaardf7df072010-03-02 23:58:54 +0000143LLVMBool LLVMRemoveModule(LLVMExecutionEngineRef EE, LLVMModuleRef M,
144 LLVMModuleRef *OutMod, char **OutError);
145
146/** Deprecated: Use LLVMRemoveModule instead. */
Chris Lattnerd686c8e2010-01-09 22:27:07 +0000147LLVMBool LLVMRemoveModuleProvider(LLVMExecutionEngineRef EE,
148 LLVMModuleProviderRef MP,
149 LLVMModuleRef *OutMod, char **OutError);
Gordon Henriksen2e855e62007-12-23 16:59:28 +0000150
Chris Lattnerd686c8e2010-01-09 22:27:07 +0000151LLVMBool LLVMFindFunction(LLVMExecutionEngineRef EE, const char *Name,
152 LLVMValueRef *OutFn);
Gordon Henriksen2e855e62007-12-23 16:59:28 +0000153
Duncan Sandsd90fee92010-07-19 09:33:13 +0000154void *LLVMRecompileAndRelinkFunction(LLVMExecutionEngineRef EE, LLVMValueRef Fn);
155
Erick Tryzelaar7c1483b2008-03-27 00:27:14 +0000156LLVMTargetDataRef LLVMGetExecutionEngineTargetData(LLVMExecutionEngineRef EE);
157
Gordon Henriksen54227f62008-06-20 02:16:11 +0000158void LLVMAddGlobalMapping(LLVMExecutionEngineRef EE, LLVMValueRef Global,
159 void* Addr);
160
Chris Lattner1e42c5b2009-01-21 18:11:10 +0000161void *LLVMGetPointerToGlobal(LLVMExecutionEngineRef EE, LLVMValueRef Global);
162
Gregory Szorc6244b512012-03-21 03:54:29 +0000163/**
164 * @}
165 */
166
Gordon Henriksen2e855e62007-12-23 16:59:28 +0000167#ifdef __cplusplus
Eric Christopher3e397312013-04-22 22:47:22 +0000168}
Evan Cheng9313da52013-04-04 17:40:53 +0000169#endif /* defined(__cplusplus) */
Gordon Henriksen2e855e62007-12-23 16:59:28 +0000170
171#endif