LLVM  12.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"
29 #include "llvm-c/TargetMachine.h"
30 #include "llvm-c/Types.h"
31 
33 
34 /**
35  * A function for constructing an ObjectLinkingLayer instance to be used
36  * by an LLJIT instance.
37  *
38  * Clients can call LLVMOrcLLJITBuilderSetObjectLinkingLayerCreator to
39  * set the creator function to use when constructing an LLJIT instance.
40  * This can be used to override the default linking layer implementation
41  * that would otherwise be chosen by LLJITBuilder.
42  *
43  * Object linking layers returned by this function will become owned by the
44  * LLJIT instance. The client is not responsible for managing their lifetimes
45  * after the function returns.
46  */
47 typedef LLVMOrcObjectLayerRef (
49  void *Ctx, LLVMOrcExecutionSessionRef ES, const char *Triple);
50 
51 /**
52  * A reference to an orc::LLJITBuilder instance.
53  */
54 typedef struct LLVMOrcOpaqueLLJITBuilder *LLVMOrcLLJITBuilderRef;
55 
56 /**
57  * A reference to an orc::LLJIT instance.
58  */
59 typedef struct LLVMOrcOpaqueLLJIT *LLVMOrcLLJITRef;
60 
61 /**
62  * Create an LLVMOrcLLJITBuilder.
63  *
64  * The client owns the resulting LLJITBuilder and should dispose of it using
65  * LLVMOrcDisposeLLJITBuilder once they are done with it.
66  */
68 
69 /**
70  * Dispose of an LLVMOrcLLJITBuilderRef. This should only be called if ownership
71  * has not been passed to LLVMOrcCreateLLJIT (e.g. because some error prevented
72  * that function from being called).
73  */
75 
76 /**
77  * Set the JITTargetMachineBuilder to be used when constructing the LLJIT
78  * instance. Calling this function is optional: if it is not called then the
79  * LLJITBuilder will use JITTargeTMachineBuilder::detectHost to construct a
80  * JITTargetMachineBuilder.
81  */
84 
85 /**
86  * Set an ObjectLinkingLayer creator function for this LLJIT instance.
87  */
91 
92 /**
93  * Create an LLJIT instance from an LLJITBuilder.
94  *
95  * This operation takes ownership of the Builder argument: clients should not
96  * dispose of the builder after calling this function (even if the function
97  * returns an error). If a null Builder argument is provided then a
98  * default-constructed LLJITBuilder will be used.
99  *
100  * On success the resulting LLJIT instance is uniquely owned by the client and
101  * automatically manages the memory of all JIT'd code and all modules that are
102  * transferred to it (e.g. via LLVMOrcLLJITAddLLVMIRModule). Disposing of the
103  * LLJIT instance will free all memory managed by the JIT, including JIT'd code
104  * and not-yet compiled modules.
105  */
108 
109 /**
110  * Dispose of an LLJIT instance.
111  */
113 
114 /**
115  * Get a reference to the ExecutionSession for this LLJIT instance.
116  *
117  * The ExecutionSession is owned by the LLJIT instance. The client is not
118  * responsible for managing its memory.
119  */
121 
122 /**
123  * Return a reference to the Main JITDylib.
124  *
125  * The JITDylib is owned by the LLJIT instance. The client is not responsible
126  * for managing its memory.
127  */
129 
130 /**
131  * Return the target triple for this LLJIT instance. This string is owned by
132  * the LLJIT instance and should not be freed by the client.
133  */
135 
136 /**
137  * Returns the global prefix character according to the LLJIT's DataLayout.
138  */
140 
141 /**
142  * Mangles the given string according to the LLJIT instance's DataLayout, then
143  * interns the result in the SymbolStringPool and returns a reference to the
144  * pool entry. Clients should call LLVMOrcReleaseSymbolStringPoolEntry to
145  * decrement the ref-count on the pool entry once they are finished with this
146  * value.
147  */
149 LLVMOrcLLJITMangleAndIntern(LLVMOrcLLJITRef J, const char *UnmangledName);
150 
151 /**
152  * Add a buffer representing an object file to the given JITDylib in the given
153  * LLJIT instance. This operation transfers ownership of the buffer to the
154  * LLJIT instance. The buffer should not be disposed of or referenced once this
155  * function returns.
156  *
157  * Resources associated with the given object will be tracked by the given
158  * JITDylib's default resource tracker.
159  */
161  LLVMMemoryBufferRef ObjBuffer);
162 
163 /**
164  * Add a buffer representing an object file to the given ResourceTracker's
165  * JITDylib in the given LLJIT instance. This operation transfers ownership of
166  * the buffer to the LLJIT instance. The buffer should not be disposed of or
167  * referenced once this function returns.
168  *
169  * Resources associated with the given object will be tracked by ResourceTracker
170  * RT.
171  */
174  LLVMMemoryBufferRef ObjBuffer);
175 
176 /**
177  * Add an IR module to the given JITDylib in the given LLJIT instance. This
178  * operation transfers ownership of the TSM argument to the LLJIT instance.
179  * The TSM argument should not be disposed of or referenced once this
180  * function returns.
181  *
182  * Resources associated with the given Module will be tracked by the given
183  * JITDylib's default resource tracker.
184  */
188 
189 /**
190  * Add an IR module to the given ResourceTracker's JITDylib in the given LLJIT
191  * instance. This operation transfers ownership of the TSM argument to the LLJIT
192  * instance. The TSM argument should not be disposed of or referenced once this
193  * function returns.
194  *
195  * Resources associated with the given Module will be tracked by ResourceTracker
196  * RT.
197  */
201 
202 /**
203  * Look up the given symbol in the main JITDylib of the given LLJIT instance.
204  *
205  * This operation does not take ownership of the Name argument.
206  */
208  LLVMOrcJITTargetAddress *Result,
209  const char *Name);
210 
212 
213 #endif /* LLVM_C_LLJIT_H */
struct LLVMOrcOpaqueLLJITBuilder * LLVMOrcLLJITBuilderRef
A reference to an orc::LLJITBuilder instance.
Definition: LLJIT.h:54
struct LLVMOpaqueMemoryBuffer * LLVMMemoryBufferRef
LLVM uses a polymorphic type hierarchy which C cannot represent, therefore parameters must be passed ...
Definition: Types.h:48
F(f)
LLVMErrorRef LLVMOrcLLJITAddLLVMIRModuleWithRT(LLVMOrcLLJITRef J, LLVMOrcResourceTrackerRef JD, LLVMOrcThreadSafeModuleRef TSM)
Add an IR module to the given ResourceTracker's JITDylib in the given LLJIT instance.
LLVMErrorRef LLVMOrcLLJITAddLLVMIRModule(LLVMOrcLLJITRef J, LLVMOrcJITDylibRef JD, LLVMOrcThreadSafeModuleRef TSM)
Add an IR module to the given JITDylib in the given LLJIT instance.
struct LLVMOrcOpaqueLLJIT * LLVMOrcLLJITRef
A reference to an orc::LLJIT instance.
Definition: LLJIT.h:59
void LLVMOrcLLJITBuilderSetJITTargetMachineBuilder(LLVMOrcLLJITBuilderRef Builder, LLVMOrcJITTargetMachineBuilderRef JTMB)
Set the JITTargetMachineBuilder to be used when constructing the LLJIT instance.
LLVMOrcSymbolStringPoolEntryRef LLVMOrcLLJITMangleAndIntern(LLVMOrcLLJITRef J, const char *UnmangledName)
Mangles the given string according to the LLJIT instance's DataLayout, then interns the result in the...
LLVM_C_EXTERN_C_BEGIN typedef 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:48
LLVMOrcExecutionSessionRef LLVMOrcLLJITGetExecutionSession(LLVMOrcLLJITRef J)
Get a reference to the ExecutionSession for this LLJIT instance.
struct LLVMOpaqueError * LLVMErrorRef
Opaque reference to an error instance.
Definition: Error.h:26
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...
struct LLVMOrcOpaqueObjectLayer * LLVMOrcObjectLayerRef
A reference to an orc::ObjectLayer instance.
Definition: Orc.h:256
struct LLVMOrcOpaqueResourceTracker * LLVMOrcResourceTrackerRef
A reference to an orc::ResourceTracker instance.
Definition: Orc.h:170
const char * LLVMOrcLLJITGetTripleString(LLVMOrcLLJITRef J)
Return the target triple for this LLJIT instance.
assume Assume Builder
LLVMErrorRef LLVMOrcDisposeLLJIT(LLVMOrcLLJITRef J)
Dispose of an LLJIT instance.
void LLVMOrcLLJITBuilderSetObjectLinkingLayerCreator(LLVMOrcLLJITBuilderRef Builder, LLVMOrcLLJITBuilderObjectLinkingLayerCreatorFunction F, void *Ctx)
Set an ObjectLinkingLayer creator function for this LLJIT instance.
struct LLVMOrcOpaqueJITDylib * LLVMOrcJITDylibRef
A reference to an orc::JITDylib instance.
Definition: Orc.h:165
LLVMErrorRef LLVMOrcLLJITLookup(LLVMOrcLLJITRef J, LLVMOrcJITTargetAddress *Result, const char *Name)
Look up the given symbol in the main JITDylib of the given LLJIT instance.
LLVM_C_EXTERN_C_BEGIN typedef uint64_t LLVMOrcJITTargetAddress
Represents an address in the target process.
Definition: Orc.h:39
struct LLVMOrcOpaqueThreadSafeModule * LLVMOrcThreadSafeModuleRef
A reference to an orc::ThreadSafeModule instance.
Definition: Orc.h:245
LLVMErrorRef LLVMOrcCreateLLJIT(LLVMOrcLLJITRef *Result, LLVMOrcLLJITBuilderRef Builder)
Create an LLJIT instance from an LLJITBuilder.
LLVMOrcJITDylibRef LLVMOrcLLJITGetMainJITDylib(LLVMOrcLLJITRef J)
Return a reference to the Main JITDylib.
void LLVMOrcDisposeLLJITBuilder(LLVMOrcLLJITBuilderRef Builder)
Dispose of an LLVMOrcLLJITBuilderRef.
char LLVMOrcLLJITGetGlobalPrefix(LLVMOrcLLJITRef J)
Returns the global prefix character according to the LLJIT's DataLayout.
struct LLVMOrcOpaqueExecutionSession * LLVMOrcExecutionSessionRef
A reference to an orc::ExecutionSession instance.
Definition: Orc.h:73
LLVMOrcLLJITBuilderRef LLVMOrcCreateLLJITBuilder(void)
Create an LLVMOrcLLJITBuilder.
LLVMErrorRef LLVMOrcLLJITAddObjectFile(LLVMOrcLLJITRef J, LLVMOrcJITDylibRef JD, LLVMMemoryBufferRef ObjBuffer)
Add a buffer representing an object file to the given JITDylib in the given LLJIT instance.
#define LLVM_C_EXTERN_C_END
Definition: ExternC.h:36
#define LLVM_C_EXTERN_C_BEGIN
Definition: ExternC.h:35
struct LLVMOrcOpaqueJITTargetMachineBuilder * LLVMOrcJITTargetMachineBuilderRef
A reference to an orc::JITTargetMachineBuilder instance.
Definition: Orc.h:250
struct LLVMOrcOpaqueSymbolStringPoolEntry * LLVMOrcSymbolStringPoolEntryRef
A reference to an orc::SymbolStringPool table entry.
Definition: Orc.h:88