Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / include / llvm-c / LLJIT.h
bloba06133aac4fb0630d417fbf3c0fb74b54862889d
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 \*===----------------------------------------------------------------------===*/
24 #ifndef LLVM_C_LLJIT_H
25 #define LLVM_C_LLJIT_H
27 #include "llvm-c/Error.h"
28 #include "llvm-c/Orc.h"
29 #include "llvm-c/TargetMachine.h"
30 #include "llvm-c/Types.h"
32 LLVM_C_EXTERN_C_BEGIN
34 /**
35 * @defgroup LLVMCExecutionEngineLLJIT LLJIT
36 * @ingroup LLVMCExecutionEngine
38 * @{
41 /**
42 * A function for constructing an ObjectLinkingLayer instance to be used
43 * by an LLJIT instance.
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.
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.
54 typedef LLVMOrcObjectLayerRef (
55 *LLVMOrcLLJITBuilderObjectLinkingLayerCreatorFunction)(
56 void *Ctx, LLVMOrcExecutionSessionRef ES, const char *Triple);
58 /**
59 * A reference to an orc::LLJITBuilder instance.
61 typedef struct LLVMOrcOpaqueLLJITBuilder *LLVMOrcLLJITBuilderRef;
63 /**
64 * A reference to an orc::LLJIT instance.
66 typedef struct LLVMOrcOpaqueLLJIT *LLVMOrcLLJITRef;
68 /**
69 * Create an LLVMOrcLLJITBuilder.
71 * The client owns the resulting LLJITBuilder and should dispose of it using
72 * LLVMOrcDisposeLLJITBuilder once they are done with it.
74 LLVMOrcLLJITBuilderRef LLVMOrcCreateLLJITBuilder(void);
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).
81 void LLVMOrcDisposeLLJITBuilder(LLVMOrcLLJITBuilderRef Builder);
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.
89 * This function takes ownership of the JTMB argument: clients should not
90 * dispose of the JITTargetMachineBuilder after calling this function.
92 void LLVMOrcLLJITBuilderSetJITTargetMachineBuilder(
93 LLVMOrcLLJITBuilderRef Builder, LLVMOrcJITTargetMachineBuilderRef JTMB);
95 /**
96 * Set an ObjectLinkingLayer creator function for this LLJIT instance.
98 void LLVMOrcLLJITBuilderSetObjectLinkingLayerCreator(
99 LLVMOrcLLJITBuilderRef Builder,
100 LLVMOrcLLJITBuilderObjectLinkingLayerCreatorFunction F, void *Ctx);
103 * Create an LLJIT instance from an LLJITBuilder.
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.
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.
116 LLVMErrorRef LLVMOrcCreateLLJIT(LLVMOrcLLJITRef *Result,
117 LLVMOrcLLJITBuilderRef Builder);
120 * Dispose of an LLJIT instance.
122 LLVMErrorRef LLVMOrcDisposeLLJIT(LLVMOrcLLJITRef J);
125 * Get a reference to the ExecutionSession for this LLJIT instance.
127 * The ExecutionSession is owned by the LLJIT instance. The client is not
128 * responsible for managing its memory.
130 LLVMOrcExecutionSessionRef LLVMOrcLLJITGetExecutionSession(LLVMOrcLLJITRef J);
133 * Return a reference to the Main JITDylib.
135 * The JITDylib is owned by the LLJIT instance. The client is not responsible
136 * for managing its memory.
138 LLVMOrcJITDylibRef LLVMOrcLLJITGetMainJITDylib(LLVMOrcLLJITRef J);
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.
144 const char *LLVMOrcLLJITGetTripleString(LLVMOrcLLJITRef J);
147 * Returns the global prefix character according to the LLJIT's DataLayout.
149 char LLVMOrcLLJITGetGlobalPrefix(LLVMOrcLLJITRef J);
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.
158 LLVMOrcSymbolStringPoolEntryRef
159 LLVMOrcLLJITMangleAndIntern(LLVMOrcLLJITRef J, const char *UnmangledName);
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.
167 * Resources associated with the given object will be tracked by the given
168 * JITDylib's default resource tracker.
170 LLVMErrorRef LLVMOrcLLJITAddObjectFile(LLVMOrcLLJITRef J, LLVMOrcJITDylibRef JD,
171 LLVMMemoryBufferRef ObjBuffer);
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.
179 * Resources associated with the given object will be tracked by ResourceTracker
180 * RT.
182 LLVMErrorRef LLVMOrcLLJITAddObjectFileWithRT(LLVMOrcLLJITRef J,
183 LLVMOrcResourceTrackerRef RT,
184 LLVMMemoryBufferRef ObjBuffer);
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.
192 * Resources associated with the given Module will be tracked by the given
193 * JITDylib's default resource tracker.
195 LLVMErrorRef LLVMOrcLLJITAddLLVMIRModule(LLVMOrcLLJITRef J,
196 LLVMOrcJITDylibRef JD,
197 LLVMOrcThreadSafeModuleRef TSM);
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.
205 * Resources associated with the given Module will be tracked by ResourceTracker
206 * RT.
208 LLVMErrorRef LLVMOrcLLJITAddLLVMIRModuleWithRT(LLVMOrcLLJITRef J,
209 LLVMOrcResourceTrackerRef JD,
210 LLVMOrcThreadSafeModuleRef TSM);
213 * Look up the given symbol in the main JITDylib of the given LLJIT instance.
215 * This operation does not take ownership of the Name argument.
217 LLVMErrorRef LLVMOrcLLJITLookup(LLVMOrcLLJITRef J,
218 LLVMOrcExecutorAddress *Result,
219 const char *Name);
222 * Returns a non-owning reference to the LLJIT instance's object linking layer.
224 LLVMOrcObjectLayerRef LLVMOrcLLJITGetObjLinkingLayer(LLVMOrcLLJITRef J);
227 * Returns a non-owning reference to the LLJIT instance's object linking layer.
229 LLVMOrcObjectTransformLayerRef
230 LLVMOrcLLJITGetObjTransformLayer(LLVMOrcLLJITRef J);
233 * Returns a non-owning reference to the LLJIT instance's IR transform layer.
235 LLVMOrcIRTransformLayerRef LLVMOrcLLJITGetIRTransformLayer(LLVMOrcLLJITRef J);
238 * Get the LLJIT instance's default data layout string.
240 * This string is owned by the LLJIT instance and does not need to be freed
241 * by the caller.
243 const char *LLVMOrcLLJITGetDataLayoutStr(LLVMOrcLLJITRef J);
246 * @}
249 LLVM_C_EXTERN_C_END
251 #endif /* LLVM_C_LLJIT_H */