LLVM 20.0.0git
LLJIT.h
Go to the documentation of this file.
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"
30#include "llvm-c/Types.h"
31
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 */
56 void *Ctx, LLVMOrcExecutionSessionRef ES, const char *Triple);
57
58/**
59 * A reference to an orc::LLJITBuilder instance.
60 */
61typedef struct LLVMOrcOpaqueLLJITBuilder *LLVMOrcLLJITBuilderRef;
62
63/**
64 * A reference to an orc::LLJIT instance.
65 */
66typedef 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 */
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 */
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 */
94
95/**
96 * Set an ObjectLinkingLayer creator function for this LLJIT instance.
97 */
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 */
117 LLVMOrcLLJITBuilderRef Builder);
118
119/**
120 * Dispose of an LLJIT instance.
121 */
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 */
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 */
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 */
145
146/**
147 * Returns the global prefix character according to the LLJIT's DataLayout.
148 */
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 */
159LLVMOrcLLJITMangleAndIntern(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 */
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 */
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 */
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 */
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 */
219 const char *Name);
220
221/**
222 * Returns a non-owning reference to the LLJIT instance's object linking layer.
223 */
225
226/**
227 * Returns a non-owning reference to the LLJIT instance's object linking layer.
228 */
231
232/**
233 * Returns a non-owning reference to the LLJIT instance's IR transform layer.
234 */
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 */
244
245/**
246 * @}
247 */
248
250
251#endif /* LLVM_C_LLJIT_H */
std::string Name
#define LLVM_C_EXTERN_C_BEGIN
Definition: ExternC.h:35
#define LLVM_C_EXTERN_C_END
Definition: ExternC.h:36
#define F(x, y, z)
Definition: MD5.cpp:55
struct LLVMOpaqueError * LLVMErrorRef
Opaque reference to an error instance.
Definition: Error.h:33
LLVMErrorRef LLVMOrcLLJITAddObjectFile(LLVMOrcLLJITRef J, LLVMOrcJITDylibRef JD, LLVMMemoryBufferRef ObjBuffer)
Add a buffer representing an object file to the given JITDylib in the given LLJIT instance.
LLVMErrorRef LLVMOrcLLJITAddLLVMIRModuleWithRT(LLVMOrcLLJITRef J, LLVMOrcResourceTrackerRef JD, LLVMOrcThreadSafeModuleRef TSM)
Add an IR module to the given ResourceTracker's JITDylib in the given LLJIT instance.
struct LLVMOrcOpaqueLLJIT * LLVMOrcLLJITRef
A reference to an orc::LLJIT instance.
Definition: LLJIT.h:66
LLVMOrcObjectLayerRef(* LLVMOrcLLJITBuilderObjectLinkingLayerCreatorFunction)(void *Ctx, LLVMOrcExecutionSessionRef ES, const char *Triple)
A function for constructing an ObjectLinkingLayer instance to be used by an LLJIT instance.
Definition: LLJIT.h:55
void LLVMOrcLLJITBuilderSetJITTargetMachineBuilder(LLVMOrcLLJITBuilderRef Builder, LLVMOrcJITTargetMachineBuilderRef JTMB)
Set the JITTargetMachineBuilder to be used when constructing the LLJIT instance.
LLVMErrorRef LLVMOrcDisposeLLJIT(LLVMOrcLLJITRef J)
Dispose of an LLJIT instance.
LLVMOrcObjectLayerRef LLVMOrcLLJITGetObjLinkingLayer(LLVMOrcLLJITRef J)
Returns a non-owning reference to the LLJIT instance's object linking layer.
LLVMErrorRef LLVMOrcLLJITAddLLVMIRModule(LLVMOrcLLJITRef J, LLVMOrcJITDylibRef JD, LLVMOrcThreadSafeModuleRef TSM)
Add an IR module to the given JITDylib in the given LLJIT instance.
LLVMErrorRef LLVMOrcLLJITAddObjectFileWithRT(LLVMOrcLLJITRef J, LLVMOrcResourceTrackerRef RT, LLVMMemoryBufferRef ObjBuffer)
Add a buffer representing an object file to the given ResourceTracker's JITDylib in the given LLJIT i...
LLVMOrcSymbolStringPoolEntryRef LLVMOrcLLJITMangleAndIntern(LLVMOrcLLJITRef J, const char *UnmangledName)
Mangles the given string according to the LLJIT instance's DataLayout, then interns the result in the...
LLVMOrcJITDylibRef LLVMOrcLLJITGetMainJITDylib(LLVMOrcLLJITRef J)
Return a reference to the Main JITDylib.
struct LLVMOrcOpaqueLLJITBuilder * LLVMOrcLLJITBuilderRef
A reference to an orc::LLJITBuilder instance.
Definition: LLJIT.h:61
void LLVMOrcLLJITBuilderSetObjectLinkingLayerCreator(LLVMOrcLLJITBuilderRef Builder, LLVMOrcLLJITBuilderObjectLinkingLayerCreatorFunction F, void *Ctx)
Set an ObjectLinkingLayer creator function for this LLJIT instance.
LLVMOrcIRTransformLayerRef LLVMOrcLLJITGetIRTransformLayer(LLVMOrcLLJITRef J)
Returns a non-owning reference to the LLJIT instance's IR transform layer.
const char * LLVMOrcLLJITGetTripleString(LLVMOrcLLJITRef J)
Return the target triple for this LLJIT instance.
LLVMOrcLLJITBuilderRef LLVMOrcCreateLLJITBuilder(void)
Create an LLVMOrcLLJITBuilder.
void LLVMOrcDisposeLLJITBuilder(LLVMOrcLLJITBuilderRef Builder)
Dispose of an LLVMOrcLLJITBuilderRef.
LLVMOrcExecutionSessionRef LLVMOrcLLJITGetExecutionSession(LLVMOrcLLJITRef J)
Get a reference to the ExecutionSession for this LLJIT instance.
LLVMOrcObjectTransformLayerRef LLVMOrcLLJITGetObjTransformLayer(LLVMOrcLLJITRef J)
Returns a non-owning reference to the LLJIT instance's object linking layer.
LLVMErrorRef LLVMOrcCreateLLJIT(LLVMOrcLLJITRef *Result, LLVMOrcLLJITBuilderRef Builder)
Create an LLJIT instance from an LLJITBuilder.
char LLVMOrcLLJITGetGlobalPrefix(LLVMOrcLLJITRef J)
Returns the global prefix character according to the LLJIT's DataLayout.
const char * LLVMOrcLLJITGetDataLayoutStr(LLVMOrcLLJITRef J)
Get the LLJIT instance's default data layout string.
LLVMErrorRef LLVMOrcLLJITLookup(LLVMOrcLLJITRef J, LLVMOrcExecutorAddress *Result, const char *Name)
Look up the given symbol in the main JITDylib of the given LLJIT instance.
struct LLVMOrcOpaqueObjectTransformLayer * LLVMOrcObjectTransformLayerRef
A reference to an orc::ObjectTransformLayer instance.
Definition: Orc.h:443
struct LLVMOrcOpaqueJITTargetMachineBuilder * LLVMOrcJITTargetMachineBuilderRef
A reference to an orc::JITTargetMachineBuilder instance.
Definition: Orc.h:403
struct LLVMOrcOpaqueThreadSafeModule * LLVMOrcThreadSafeModuleRef
A reference to an orc::ThreadSafeModule instance.
Definition: Orc.h:391
struct LLVMOrcOpaqueExecutionSession * LLVMOrcExecutionSessionRef
A reference to an orc::ExecutionSession instance.
Definition: Orc.h:88
struct LLVMOrcOpaqueResourceTracker * LLVMOrcResourceTrackerRef
A reference to an orc::ResourceTracker instance.
Definition: Orc.h:308
uint64_t LLVMOrcExecutorAddress
Represents an address in the executor process.
Definition: Orc.h:51
struct LLVMOrcOpaqueObjectLayer * LLVMOrcObjectLayerRef
A reference to an orc::ObjectLayer instance.
Definition: Orc.h:409
struct LLVMOrcOpaqueSymbolStringPoolEntry * LLVMOrcSymbolStringPoolEntryRef
A reference to an orc::SymbolStringPool table entry.
Definition: Orc.h:103
struct LLVMOrcOpaqueIRTransformLayer * LLVMOrcIRTransformLayerRef
A reference to an orc::IRTransformLayer instance.
Definition: Orc.h:419
struct LLVMOrcOpaqueJITDylib * LLVMOrcJITDylibRef
A reference to an orc::JITDylib instance.
Definition: Orc.h:159
struct LLVMOpaqueMemoryBuffer * LLVMMemoryBufferRef
LLVM uses a polymorphic type hierarchy which C cannot represent, therefore parameters must be passed ...
Definition: Types.h:48