[clang][NFC] simplify the unset check in `ParseLabeledStatement` (#117430)
[llvm-project.git] / llvm / include / llvm-c / ExecutionEngine.h
blobc5fc9bdb4d07f62462c65924e6ae8faf75748dec
1 /*===-- llvm-c/ExecutionEngine.h - ExecutionEngine Lib C Iface --*- 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 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 \*===----------------------------------------------------------------------===*/
19 #ifndef LLVM_C_EXECUTIONENGINE_H
20 #define LLVM_C_EXECUTIONENGINE_H
22 #include "llvm-c/ExternC.h"
23 #include "llvm-c/Target.h"
24 #include "llvm-c/TargetMachine.h"
25 #include "llvm-c/Types.h"
27 LLVM_C_EXTERN_C_BEGIN
29 /**
30 * @defgroup LLVMCExecutionEngine Execution Engine
31 * @ingroup LLVMC
33 * @{
36 void LLVMLinkInMCJIT(void);
37 void LLVMLinkInInterpreter(void);
39 typedef struct LLVMOpaqueGenericValue *LLVMGenericValueRef;
40 typedef struct LLVMOpaqueExecutionEngine *LLVMExecutionEngineRef;
41 typedef struct LLVMOpaqueMCJITMemoryManager *LLVMMCJITMemoryManagerRef;
43 struct LLVMMCJITCompilerOptions {
44 unsigned OptLevel;
45 LLVMCodeModel CodeModel;
46 LLVMBool NoFramePointerElim;
47 LLVMBool EnableFastISel;
48 LLVMMCJITMemoryManagerRef MCJMM;
51 /*===-- Operations on generic values --------------------------------------===*/
53 LLVMGenericValueRef LLVMCreateGenericValueOfInt(LLVMTypeRef Ty,
54 unsigned long long N,
55 LLVMBool IsSigned);
57 LLVMGenericValueRef LLVMCreateGenericValueOfPointer(void *P);
59 LLVMGenericValueRef LLVMCreateGenericValueOfFloat(LLVMTypeRef Ty, double N);
61 unsigned LLVMGenericValueIntWidth(LLVMGenericValueRef GenValRef);
63 unsigned long long LLVMGenericValueToInt(LLVMGenericValueRef GenVal,
64 LLVMBool IsSigned);
66 void *LLVMGenericValueToPointer(LLVMGenericValueRef GenVal);
68 double LLVMGenericValueToFloat(LLVMTypeRef TyRef, LLVMGenericValueRef GenVal);
70 void LLVMDisposeGenericValue(LLVMGenericValueRef GenVal);
72 /*===-- Operations on execution engines -----------------------------------===*/
74 LLVMBool LLVMCreateExecutionEngineForModule(LLVMExecutionEngineRef *OutEE,
75 LLVMModuleRef M,
76 char **OutError);
78 LLVMBool LLVMCreateInterpreterForModule(LLVMExecutionEngineRef *OutInterp,
79 LLVMModuleRef M,
80 char **OutError);
82 LLVMBool LLVMCreateJITCompilerForModule(LLVMExecutionEngineRef *OutJIT,
83 LLVMModuleRef M,
84 unsigned OptLevel,
85 char **OutError);
87 void LLVMInitializeMCJITCompilerOptions(
88 struct LLVMMCJITCompilerOptions *Options, size_t SizeOfOptions);
90 /**
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
93 * 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:
97 * LLVMMCJITCompilerOptions options;
98 * LLVMInitializeMCJITCompilerOptions(&options, sizeof(options));
99 * ... fill in those options you care about
100 * LLVMCreateMCJITCompilerForModule(&jit, mod, &options, sizeof(options),
101 * &error);
103 * Note that this is also correct, though possibly suboptimal:
105 * LLVMCreateMCJITCompilerForModule(&jit, mod, 0, 0, &error);
107 LLVMBool LLVMCreateMCJITCompilerForModule(
108 LLVMExecutionEngineRef *OutJIT, LLVMModuleRef M,
109 struct LLVMMCJITCompilerOptions *Options, size_t SizeOfOptions,
110 char **OutError);
112 void LLVMDisposeExecutionEngine(LLVMExecutionEngineRef EE);
114 void LLVMRunStaticConstructors(LLVMExecutionEngineRef EE);
116 void LLVMRunStaticDestructors(LLVMExecutionEngineRef EE);
118 int LLVMRunFunctionAsMain(LLVMExecutionEngineRef EE, LLVMValueRef F,
119 unsigned ArgC, const char * const *ArgV,
120 const char * const *EnvP);
122 LLVMGenericValueRef LLVMRunFunction(LLVMExecutionEngineRef EE, LLVMValueRef F,
123 unsigned NumArgs,
124 LLVMGenericValueRef *Args);
126 void LLVMFreeMachineCodeForFunction(LLVMExecutionEngineRef EE, LLVMValueRef F);
128 void LLVMAddModule(LLVMExecutionEngineRef EE, LLVMModuleRef M);
130 LLVMBool LLVMRemoveModule(LLVMExecutionEngineRef EE, LLVMModuleRef M,
131 LLVMModuleRef *OutMod, char **OutError);
133 LLVMBool LLVMFindFunction(LLVMExecutionEngineRef EE, const char *Name,
134 LLVMValueRef *OutFn);
136 void *LLVMRecompileAndRelinkFunction(LLVMExecutionEngineRef EE,
137 LLVMValueRef Fn);
139 LLVMTargetDataRef LLVMGetExecutionEngineTargetData(LLVMExecutionEngineRef EE);
140 LLVMTargetMachineRef
141 LLVMGetExecutionEngineTargetMachine(LLVMExecutionEngineRef EE);
143 void LLVMAddGlobalMapping(LLVMExecutionEngineRef EE, LLVMValueRef Global,
144 void* Addr);
146 void *LLVMGetPointerToGlobal(LLVMExecutionEngineRef EE, LLVMValueRef Global);
148 uint64_t LLVMGetGlobalValueAddress(LLVMExecutionEngineRef EE, const char *Name);
150 uint64_t LLVMGetFunctionAddress(LLVMExecutionEngineRef EE, const char *Name);
152 /// Returns true on error, false on success. If true is returned then the error
153 /// message is copied to OutStr and cleared in the ExecutionEngine instance.
154 LLVMBool LLVMExecutionEngineGetErrMsg(LLVMExecutionEngineRef EE,
155 char **OutError);
157 /*===-- Operations on memory managers -------------------------------------===*/
159 typedef uint8_t *(*LLVMMemoryManagerAllocateCodeSectionCallback)(
160 void *Opaque, uintptr_t Size, unsigned Alignment, unsigned SectionID,
161 const char *SectionName);
162 typedef uint8_t *(*LLVMMemoryManagerAllocateDataSectionCallback)(
163 void *Opaque, uintptr_t Size, unsigned Alignment, unsigned SectionID,
164 const char *SectionName, LLVMBool IsReadOnly);
165 typedef LLVMBool (*LLVMMemoryManagerFinalizeMemoryCallback)(
166 void *Opaque, char **ErrMsg);
167 typedef void (*LLVMMemoryManagerDestroyCallback)(void *Opaque);
170 * Create a simple custom MCJIT memory manager. This memory manager can
171 * intercept allocations in a module-oblivious way. This will return NULL
172 * if any of the passed functions are NULL.
174 * @param Opaque An opaque client object to pass back to the callbacks.
175 * @param AllocateCodeSection Allocate a block of memory for executable code.
176 * @param AllocateDataSection Allocate a block of memory for data.
177 * @param FinalizeMemory Set page permissions and flush cache. Return 0 on
178 * success, 1 on error.
180 LLVMMCJITMemoryManagerRef LLVMCreateSimpleMCJITMemoryManager(
181 void *Opaque,
182 LLVMMemoryManagerAllocateCodeSectionCallback AllocateCodeSection,
183 LLVMMemoryManagerAllocateDataSectionCallback AllocateDataSection,
184 LLVMMemoryManagerFinalizeMemoryCallback FinalizeMemory,
185 LLVMMemoryManagerDestroyCallback Destroy);
187 void LLVMDisposeMCJITMemoryManager(LLVMMCJITMemoryManagerRef MM);
189 /*===-- JIT Event Listener functions -------------------------------------===*/
191 LLVMJITEventListenerRef LLVMCreateGDBRegistrationListener(void);
192 LLVMJITEventListenerRef LLVMCreateIntelJITEventListener(void);
193 LLVMJITEventListenerRef LLVMCreateOProfileJITEventListener(void);
194 LLVMJITEventListenerRef LLVMCreatePerfJITEventListener(void);
197 * @}
200 LLVM_C_EXTERN_C_END
202 #endif