blob: 8fae77def443b97e05d27bfc8ef430f9a2e949c1 [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"
Filip Pizlo0e1327e2013-05-01 22:58:00 +000024#include "llvm-c/TargetMachine.h"
Gordon Henriksen2e855e62007-12-23 16:59:28 +000025
26#ifdef __cplusplus
27extern "C" {
28#endif
29
Gregory Szorc6244b512012-03-21 03:54:29 +000030/**
31 * @defgroup LLVMCExecutionEngine Execution Engine
32 * @ingroup LLVMC
33 *
34 * @{
35 */
36
Bob Wilsone46161f2009-06-24 21:09:18 +000037void LLVMLinkInJIT(void);
Andrew Kaylord2755af2013-04-29 17:49:40 +000038void LLVMLinkInMCJIT(void);
Bob Wilsone46161f2009-06-24 21:09:18 +000039void LLVMLinkInInterpreter(void);
40
Gordon Henriksen2e855e62007-12-23 16:59:28 +000041typedef struct LLVMOpaqueGenericValue *LLVMGenericValueRef;
42typedef struct LLVMOpaqueExecutionEngine *LLVMExecutionEngineRef;
43
Andrew Kaylord2755af2013-04-29 17:49:40 +000044struct LLVMMCJITCompilerOptions {
45 unsigned OptLevel;
Filip Pizlo0e1327e2013-05-01 22:58:00 +000046 LLVMCodeModel CodeModel;
Andrew Kaylord2755af2013-04-29 17:49:40 +000047 LLVMBool NoFramePointerElim;
Filip Pizlo0e1327e2013-05-01 22:58:00 +000048 LLVMBool EnableFastISel;
Andrew Kaylord2755af2013-04-29 17:49:40 +000049};
50
Gordon Henriksen2e855e62007-12-23 16:59:28 +000051/*===-- Operations on generic values --------------------------------------===*/
52
53LLVMGenericValueRef LLVMCreateGenericValueOfInt(LLVMTypeRef Ty,
54 unsigned long long N,
Chris Lattnerd686c8e2010-01-09 22:27:07 +000055 LLVMBool IsSigned);
Gordon Henriksen2e855e62007-12-23 16:59:28 +000056
57LLVMGenericValueRef LLVMCreateGenericValueOfPointer(void *P);
58
59LLVMGenericValueRef LLVMCreateGenericValueOfFloat(LLVMTypeRef Ty, double N);
60
61unsigned LLVMGenericValueIntWidth(LLVMGenericValueRef GenValRef);
62
63unsigned long long LLVMGenericValueToInt(LLVMGenericValueRef GenVal,
Chris Lattnerd686c8e2010-01-09 22:27:07 +000064 LLVMBool IsSigned);
Gordon Henriksen2e855e62007-12-23 16:59:28 +000065
66void *LLVMGenericValueToPointer(LLVMGenericValueRef GenVal);
67
68double LLVMGenericValueToFloat(LLVMTypeRef TyRef, LLVMGenericValueRef GenVal);
69
70void LLVMDisposeGenericValue(LLVMGenericValueRef GenVal);
71
72/*===-- Operations on execution engines -----------------------------------===*/
73
Erick Tryzelaardf7df072010-03-02 23:58:54 +000074LLVMBool LLVMCreateExecutionEngineForModule(LLVMExecutionEngineRef *OutEE,
75 LLVMModuleRef M,
76 char **OutError);
77
78LLVMBool LLVMCreateInterpreterForModule(LLVMExecutionEngineRef *OutInterp,
79 LLVMModuleRef M,
80 char **OutError);
81
82LLVMBool LLVMCreateJITCompilerForModule(LLVMExecutionEngineRef *OutJIT,
83 LLVMModuleRef M,
84 unsigned OptLevel,
85 char **OutError);
86
Filip Pizlo0e1327e2013-05-01 22:58:00 +000087void LLVMInitializeMCJITCompilerOptions(
88 struct LLVMMCJITCompilerOptions *Options, size_t SizeOfOptions);
89
Andrew Kaylord2755af2013-04-29 17:49:40 +000090/**
91 * Create an MCJIT execution engine for a module, with the given options. It is
92 * the responsibility of the caller to ensure that all fields in Options up to
Filip Pizlo0e1327e2013-05-01 22:58:00 +000093 * the given SizeOfOptions are initialized. It is correct to pass a smaller
94 * value of SizeOfOptions that omits some fields. The canonical way of using
95 * this is:
Andrew Kaylord2755af2013-04-29 17:49:40 +000096 *
97 * LLVMMCJITCompilerOptions options;
Filip Pizlo0e1327e2013-05-01 22:58:00 +000098 * LLVMInitializeMCJITCompilerOptions(&options, sizeof(options));
Andrew Kaylord2755af2013-04-29 17:49:40 +000099 * ... fill in those options you care about
Filip Pizlo0e1327e2013-05-01 22:58:00 +0000100 * LLVMCreateMCJITCompilerForModule(&jit, mod, &options, sizeof(options),
101 * &error);
Andrew Kaylord2755af2013-04-29 17:49:40 +0000102 *
103 * Note that this is also correct, though possibly suboptimal:
104 *
105 * LLVMCreateMCJITCompilerForModule(&jit, mod, 0, 0, &error);
106 */
Filip Pizlo0e1327e2013-05-01 22:58:00 +0000107LLVMBool LLVMCreateMCJITCompilerForModule(
108 LLVMExecutionEngineRef *OutJIT, LLVMModuleRef M,
109 struct LLVMMCJITCompilerOptions *Options, size_t SizeOfOptions,
110 char **OutError);
Andrew Kaylord2755af2013-04-29 17:49:40 +0000111
Erick Tryzelaardf7df072010-03-02 23:58:54 +0000112/** Deprecated: Use LLVMCreateExecutionEngineForModule instead. */
Chris Lattnerd686c8e2010-01-09 22:27:07 +0000113LLVMBool LLVMCreateExecutionEngine(LLVMExecutionEngineRef *OutEE,
114 LLVMModuleProviderRef MP,
115 char **OutError);
Gordon Henriksen2e855e62007-12-23 16:59:28 +0000116
Erick Tryzelaardf7df072010-03-02 23:58:54 +0000117/** Deprecated: Use LLVMCreateInterpreterForModule instead. */
Chris Lattnerd686c8e2010-01-09 22:27:07 +0000118LLVMBool LLVMCreateInterpreter(LLVMExecutionEngineRef *OutInterp,
119 LLVMModuleProviderRef MP,
120 char **OutError);
Gordon Henriksen2e855e62007-12-23 16:59:28 +0000121
Erick Tryzelaardf7df072010-03-02 23:58:54 +0000122/** Deprecated: Use LLVMCreateJITCompilerForModule instead. */
Chris Lattnerd686c8e2010-01-09 22:27:07 +0000123LLVMBool LLVMCreateJITCompiler(LLVMExecutionEngineRef *OutJIT,
124 LLVMModuleProviderRef MP,
125 unsigned OptLevel,
126 char **OutError);
Gordon Henriksen2e855e62007-12-23 16:59:28 +0000127
128void LLVMDisposeExecutionEngine(LLVMExecutionEngineRef EE);
129
130void LLVMRunStaticConstructors(LLVMExecutionEngineRef EE);
131
132void LLVMRunStaticDestructors(LLVMExecutionEngineRef EE);
133
134int LLVMRunFunctionAsMain(LLVMExecutionEngineRef EE, LLVMValueRef F,
135 unsigned ArgC, const char * const *ArgV,
136 const char * const *EnvP);
137
138LLVMGenericValueRef LLVMRunFunction(LLVMExecutionEngineRef EE, LLVMValueRef F,
139 unsigned NumArgs,
140 LLVMGenericValueRef *Args);
141
142void LLVMFreeMachineCodeForFunction(LLVMExecutionEngineRef EE, LLVMValueRef F);
143
Erick Tryzelaardf7df072010-03-02 23:58:54 +0000144void LLVMAddModule(LLVMExecutionEngineRef EE, LLVMModuleRef M);
145
146/** Deprecated: Use LLVMAddModule instead. */
Gordon Henriksen2e855e62007-12-23 16:59:28 +0000147void LLVMAddModuleProvider(LLVMExecutionEngineRef EE, LLVMModuleProviderRef MP);
148
Erick Tryzelaardf7df072010-03-02 23:58:54 +0000149LLVMBool LLVMRemoveModule(LLVMExecutionEngineRef EE, LLVMModuleRef M,
150 LLVMModuleRef *OutMod, char **OutError);
151
152/** Deprecated: Use LLVMRemoveModule instead. */
Chris Lattnerd686c8e2010-01-09 22:27:07 +0000153LLVMBool LLVMRemoveModuleProvider(LLVMExecutionEngineRef EE,
154 LLVMModuleProviderRef MP,
155 LLVMModuleRef *OutMod, char **OutError);
Gordon Henriksen2e855e62007-12-23 16:59:28 +0000156
Chris Lattnerd686c8e2010-01-09 22:27:07 +0000157LLVMBool LLVMFindFunction(LLVMExecutionEngineRef EE, const char *Name,
158 LLVMValueRef *OutFn);
Gordon Henriksen2e855e62007-12-23 16:59:28 +0000159
Filip Pizlo0e1327e2013-05-01 22:58:00 +0000160void *LLVMRecompileAndRelinkFunction(LLVMExecutionEngineRef EE,
161 LLVMValueRef Fn);
Duncan Sandsd90fee92010-07-19 09:33:13 +0000162
Erick Tryzelaar7c1483b2008-03-27 00:27:14 +0000163LLVMTargetDataRef LLVMGetExecutionEngineTargetData(LLVMExecutionEngineRef EE);
164
Gordon Henriksen54227f62008-06-20 02:16:11 +0000165void LLVMAddGlobalMapping(LLVMExecutionEngineRef EE, LLVMValueRef Global,
166 void* Addr);
167
Chris Lattner1e42c5b2009-01-21 18:11:10 +0000168void *LLVMGetPointerToGlobal(LLVMExecutionEngineRef EE, LLVMValueRef Global);
169
Gregory Szorc6244b512012-03-21 03:54:29 +0000170/**
171 * @}
172 */
173
Gordon Henriksen2e855e62007-12-23 16:59:28 +0000174#ifdef __cplusplus
Eric Christopher3e397312013-04-22 22:47:22 +0000175}
Evan Cheng9313da52013-04-04 17:40:53 +0000176#endif /* defined(__cplusplus) */
Gordon Henriksen2e855e62007-12-23 16:59:28 +0000177
178#endif