Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
14 pmbaty 1
/*===----------- llvm-c/LLJIT.h - OrcV2 LLJIT C bindings --------*- C++ -*-===*\
2
|*                                                                            *|
3
|* Part of the LLVM Project, under the Apache License v2.0 with LLVM          *|
4
|* Exceptions.                                                                *|
5
|* See https://llvm.org/LICENSE.txt for license information.                  *|
6
|* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception                    *|
7
|*                                                                            *|
8
|*===----------------------------------------------------------------------===*|
9
|*                                                                            *|
10
|* This header declares the C interface to the LLJIT class in                 *|
11
|* libLLVMOrcJIT.a, which provides a simple MCJIT-like ORC JIT.               *|
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
|* Note: This interface is experimental. It is *NOT* stable, and may be       *|
18
|*       changed without warning. Only C API usage documentation is           *|
19
|*       provided. See the C++ documentation for all higher level ORC API     *|
20
|*       details.                                                             *|
21
|*                                                                            *|
22
\*===----------------------------------------------------------------------===*/
23
 
24
#ifndef LLVM_C_LLJIT_H
25
#define LLVM_C_LLJIT_H
26
 
27
#include "llvm-c/Error.h"
28
#include "llvm-c/Orc.h"
29
#include "llvm-c/TargetMachine.h"
30
#include "llvm-c/Types.h"
31
 
32
LLVM_C_EXTERN_C_BEGIN
33
 
34
/**
35
 * @defgroup LLVMCExecutionEngineLLJIT LLJIT
36
 * @ingroup LLVMCExecutionEngine
37
 *
38
 * @{
39
 */
40
 
41
/**
42
 * A function for constructing an ObjectLinkingLayer instance to be used
43
 * by an LLJIT instance.
44
 *
45
 * Clients can call LLVMOrcLLJITBuilderSetObjectLinkingLayerCreator to
46
 * set the creator function to use when constructing an LLJIT instance.
47
 * This can be used to override the default linking layer implementation
48
 * that would otherwise be chosen by LLJITBuilder.
49
 *
50
 * Object linking layers returned by this function will become owned by the
51
 * LLJIT instance. The client is not responsible for managing their lifetimes
52
 * after the function returns.
53
 */
54
typedef LLVMOrcObjectLayerRef (
55
    *LLVMOrcLLJITBuilderObjectLinkingLayerCreatorFunction)(
56
    void *Ctx, LLVMOrcExecutionSessionRef ES, const char *Triple);
57
 
58
/**
59
 * A reference to an orc::LLJITBuilder instance.
60
 */
61
typedef struct LLVMOrcOpaqueLLJITBuilder *LLVMOrcLLJITBuilderRef;
62
 
63
/**
64
 * A reference to an orc::LLJIT instance.
65
 */
66
typedef struct LLVMOrcOpaqueLLJIT *LLVMOrcLLJITRef;
67
 
68
/**
69
 * Create an LLVMOrcLLJITBuilder.
70
 *
71
 * The client owns the resulting LLJITBuilder and should dispose of it using
72
 * LLVMOrcDisposeLLJITBuilder once they are done with it.
73
 */
74
LLVMOrcLLJITBuilderRef LLVMOrcCreateLLJITBuilder(void);
75
 
76
/**
77
 * Dispose of an LLVMOrcLLJITBuilderRef. This should only be called if ownership
78
 * has not been passed to LLVMOrcCreateLLJIT (e.g. because some error prevented
79
 * that function from being called).
80
 */
81
void LLVMOrcDisposeLLJITBuilder(LLVMOrcLLJITBuilderRef Builder);
82
 
83
/**
84
 * Set the JITTargetMachineBuilder to be used when constructing the LLJIT
85
 * instance. Calling this function is optional: if it is not called then the
86
 * LLJITBuilder will use JITTargeTMachineBuilder::detectHost to construct a
87
 * JITTargetMachineBuilder.
88
 *
89
 * This function takes ownership of the JTMB argument: clients should not
90
 * dispose of the JITTargetMachineBuilder after calling this function.
91
 */
92
void LLVMOrcLLJITBuilderSetJITTargetMachineBuilder(
93
    LLVMOrcLLJITBuilderRef Builder, LLVMOrcJITTargetMachineBuilderRef JTMB);
94
 
95
/**
96
 * Set an ObjectLinkingLayer creator function for this LLJIT instance.
97
 */
98
void LLVMOrcLLJITBuilderSetObjectLinkingLayerCreator(
99
    LLVMOrcLLJITBuilderRef Builder,
100
    LLVMOrcLLJITBuilderObjectLinkingLayerCreatorFunction F, void *Ctx);
101
 
102
/**
103
 * Create an LLJIT instance from an LLJITBuilder.
104
 *
105
 * This operation takes ownership of the Builder argument: clients should not
106
 * dispose of the builder after calling this function (even if the function
107
 * returns an error). If a null Builder argument is provided then a
108
 * default-constructed LLJITBuilder will be used.
109
 *
110
 * On success the resulting LLJIT instance is uniquely owned by the client and
111
 * automatically manages the memory of all JIT'd code and all modules that are
112
 * transferred to it (e.g. via LLVMOrcLLJITAddLLVMIRModule). Disposing of the
113
 * LLJIT instance will free all memory managed by the JIT, including JIT'd code
114
 * and not-yet compiled modules.
115
 */
116
LLVMErrorRef LLVMOrcCreateLLJIT(LLVMOrcLLJITRef *Result,
117
                                LLVMOrcLLJITBuilderRef Builder);
118
 
119
/**
120
 * Dispose of an LLJIT instance.
121
 */
122
LLVMErrorRef LLVMOrcDisposeLLJIT(LLVMOrcLLJITRef J);
123
 
124
/**
125
 * Get a reference to the ExecutionSession for this LLJIT instance.
126
 *
127
 * The ExecutionSession is owned by the LLJIT instance. The client is not
128
 * responsible for managing its memory.
129
 */
130
LLVMOrcExecutionSessionRef LLVMOrcLLJITGetExecutionSession(LLVMOrcLLJITRef J);
131
 
132
/**
133
 * Return a reference to the Main JITDylib.
134
 *
135
 * The JITDylib is owned by the LLJIT instance. The client is not responsible
136
 * for managing its memory.
137
 */
138
LLVMOrcJITDylibRef LLVMOrcLLJITGetMainJITDylib(LLVMOrcLLJITRef J);
139
 
140
/**
141
 * Return the target triple for this LLJIT instance. This string is owned by
142
 * the LLJIT instance and should not be freed by the client.
143
 */
144
const char *LLVMOrcLLJITGetTripleString(LLVMOrcLLJITRef J);
145
 
146
/**
147
 * Returns the global prefix character according to the LLJIT's DataLayout.
148
 */
149
char LLVMOrcLLJITGetGlobalPrefix(LLVMOrcLLJITRef J);
150
 
151
/**
152
 * Mangles the given string according to the LLJIT instance's DataLayout, then
153
 * interns the result in the SymbolStringPool and returns a reference to the
154
 * pool entry. Clients should call LLVMOrcReleaseSymbolStringPoolEntry to
155
 * decrement the ref-count on the pool entry once they are finished with this
156
 * value.
157
 */
158
LLVMOrcSymbolStringPoolEntryRef
159
LLVMOrcLLJITMangleAndIntern(LLVMOrcLLJITRef J, const char *UnmangledName);
160
 
161
/**
162
 * Add a buffer representing an object file to the given JITDylib in the given
163
 * LLJIT instance. This operation transfers ownership of the buffer to the
164
 * LLJIT instance. The buffer should not be disposed of or referenced once this
165
 * function returns.
166
 *
167
 * Resources associated with the given object will be tracked by the given
168
 * JITDylib's default resource tracker.
169
 */
170
LLVMErrorRef LLVMOrcLLJITAddObjectFile(LLVMOrcLLJITRef J, LLVMOrcJITDylibRef JD,
171
                                       LLVMMemoryBufferRef ObjBuffer);
172
 
173
/**
174
 * Add a buffer representing an object file to the given ResourceTracker's
175
 * JITDylib in the given LLJIT instance. This operation transfers ownership of
176
 * the buffer to the LLJIT instance. The buffer should not be disposed of or
177
 * referenced once this function returns.
178
 *
179
 * Resources associated with the given object will be tracked by ResourceTracker
180
 * RT.
181
 */
182
LLVMErrorRef LLVMOrcLLJITAddObjectFileWithRT(LLVMOrcLLJITRef J,
183
                                             LLVMOrcResourceTrackerRef RT,
184
                                             LLVMMemoryBufferRef ObjBuffer);
185
 
186
/**
187
 * Add an IR module to the given JITDylib in the given LLJIT instance. This
188
 * operation transfers ownership of the TSM argument to the LLJIT instance.
189
 * The TSM argument should not be disposed of or referenced once this
190
 * function returns.
191
 *
192
 * Resources associated with the given Module will be tracked by the given
193
 * JITDylib's default resource tracker.
194
 */
195
LLVMErrorRef LLVMOrcLLJITAddLLVMIRModule(LLVMOrcLLJITRef J,
196
                                         LLVMOrcJITDylibRef JD,
197
                                         LLVMOrcThreadSafeModuleRef TSM);
198
 
199
/**
200
 * Add an IR module to the given ResourceTracker's JITDylib in the given LLJIT
201
 * instance. This operation transfers ownership of the TSM argument to the LLJIT
202
 * instance. The TSM argument should not be disposed of or referenced once this
203
 * function returns.
204
 *
205
 * Resources associated with the given Module will be tracked by ResourceTracker
206
 * RT.
207
 */
208
LLVMErrorRef LLVMOrcLLJITAddLLVMIRModuleWithRT(LLVMOrcLLJITRef J,
209
                                               LLVMOrcResourceTrackerRef JD,
210
                                               LLVMOrcThreadSafeModuleRef TSM);
211
 
212
/**
213
 * Look up the given symbol in the main JITDylib of the given LLJIT instance.
214
 *
215
 * This operation does not take ownership of the Name argument.
216
 */
217
LLVMErrorRef LLVMOrcLLJITLookup(LLVMOrcLLJITRef J,
218
                                LLVMOrcExecutorAddress *Result,
219
                                const char *Name);
220
 
221
/**
222
 * Returns a non-owning reference to the LLJIT instance's object linking layer.
223
 */
224
LLVMOrcObjectLayerRef LLVMOrcLLJITGetObjLinkingLayer(LLVMOrcLLJITRef J);
225
 
226
/**
227
 * Returns a non-owning reference to the LLJIT instance's object linking layer.
228
 */
229
LLVMOrcObjectTransformLayerRef
230
LLVMOrcLLJITGetObjTransformLayer(LLVMOrcLLJITRef J);
231
 
232
/**
233
 * Returns a non-owning reference to the LLJIT instance's IR transform layer.
234
 */
235
LLVMOrcIRTransformLayerRef LLVMOrcLLJITGetIRTransformLayer(LLVMOrcLLJITRef J);
236
 
237
/**
238
 * Get the LLJIT instance's default data layout string.
239
 *
240
 * This string is owned by the LLJIT instance and does not need to be freed
241
 * by the caller.
242
 */
243
const char *LLVMOrcLLJITGetDataLayoutStr(LLVMOrcLLJITRef J);
244
 
245
/**
246
 * @}
247
 */
248
 
249
LLVM_C_EXTERN_C_END
250
 
251
#endif /* LLVM_C_LLJIT_H */