Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
14 | pmbaty | 1 | /*===-- llvm-c/Core.h - Core Library C Interface ------------------*- 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 libLLVMCore.a, which implements *| |
||
11 | |* the LLVM intermediate representation. *| |
||
12 | |* *| |
||
13 | \*===----------------------------------------------------------------------===*/ |
||
14 | |||
15 | #ifndef LLVM_C_CORE_H |
||
16 | #define LLVM_C_CORE_H |
||
17 | |||
18 | #include "llvm-c/Deprecated.h" |
||
19 | #include "llvm-c/ErrorHandling.h" |
||
20 | #include "llvm-c/ExternC.h" |
||
21 | |||
22 | #include "llvm-c/Types.h" |
||
23 | |||
24 | LLVM_C_EXTERN_C_BEGIN |
||
25 | |||
26 | /** |
||
27 | * @defgroup LLVMC LLVM-C: C interface to LLVM |
||
28 | * |
||
29 | * This module exposes parts of the LLVM library as a C API. |
||
30 | * |
||
31 | * @{ |
||
32 | */ |
||
33 | |||
34 | /** |
||
35 | * @defgroup LLVMCTransforms Transforms |
||
36 | */ |
||
37 | |||
38 | /** |
||
39 | * @defgroup LLVMCCore Core |
||
40 | * |
||
41 | * This modules provide an interface to libLLVMCore, which implements |
||
42 | * the LLVM intermediate representation as well as other related types |
||
43 | * and utilities. |
||
44 | * |
||
45 | * Many exotic languages can interoperate with C code but have a harder time |
||
46 | * with C++ due to name mangling. So in addition to C, this interface enables |
||
47 | * tools written in such languages. |
||
48 | * |
||
49 | * @{ |
||
50 | */ |
||
51 | |||
52 | /** |
||
53 | * @defgroup LLVMCCoreTypes Types and Enumerations |
||
54 | * |
||
55 | * @{ |
||
56 | */ |
||
57 | |||
58 | /// External users depend on the following values being stable. It is not safe |
||
59 | /// to reorder them. |
||
60 | typedef enum { |
||
61 | /* Terminator Instructions */ |
||
62 | LLVMRet = 1, |
||
63 | LLVMBr = 2, |
||
64 | LLVMSwitch = 3, |
||
65 | LLVMIndirectBr = 4, |
||
66 | LLVMInvoke = 5, |
||
67 | /* removed 6 due to API changes */ |
||
68 | LLVMUnreachable = 7, |
||
69 | LLVMCallBr = 67, |
||
70 | |||
71 | /* Standard Unary Operators */ |
||
72 | LLVMFNeg = 66, |
||
73 | |||
74 | /* Standard Binary Operators */ |
||
75 | LLVMAdd = 8, |
||
76 | LLVMFAdd = 9, |
||
77 | LLVMSub = 10, |
||
78 | LLVMFSub = 11, |
||
79 | LLVMMul = 12, |
||
80 | LLVMFMul = 13, |
||
81 | LLVMUDiv = 14, |
||
82 | LLVMSDiv = 15, |
||
83 | LLVMFDiv = 16, |
||
84 | LLVMURem = 17, |
||
85 | LLVMSRem = 18, |
||
86 | LLVMFRem = 19, |
||
87 | |||
88 | /* Logical Operators */ |
||
89 | LLVMShl = 20, |
||
90 | LLVMLShr = 21, |
||
91 | LLVMAShr = 22, |
||
92 | LLVMAnd = 23, |
||
93 | LLVMOr = 24, |
||
94 | LLVMXor = 25, |
||
95 | |||
96 | /* Memory Operators */ |
||
97 | LLVMAlloca = 26, |
||
98 | LLVMLoad = 27, |
||
99 | LLVMStore = 28, |
||
100 | LLVMGetElementPtr = 29, |
||
101 | |||
102 | /* Cast Operators */ |
||
103 | LLVMTrunc = 30, |
||
104 | LLVMZExt = 31, |
||
105 | LLVMSExt = 32, |
||
106 | LLVMFPToUI = 33, |
||
107 | LLVMFPToSI = 34, |
||
108 | LLVMUIToFP = 35, |
||
109 | LLVMSIToFP = 36, |
||
110 | LLVMFPTrunc = 37, |
||
111 | LLVMFPExt = 38, |
||
112 | LLVMPtrToInt = 39, |
||
113 | LLVMIntToPtr = 40, |
||
114 | LLVMBitCast = 41, |
||
115 | LLVMAddrSpaceCast = 60, |
||
116 | |||
117 | /* Other Operators */ |
||
118 | LLVMICmp = 42, |
||
119 | LLVMFCmp = 43, |
||
120 | LLVMPHI = 44, |
||
121 | LLVMCall = 45, |
||
122 | LLVMSelect = 46, |
||
123 | LLVMUserOp1 = 47, |
||
124 | LLVMUserOp2 = 48, |
||
125 | LLVMVAArg = 49, |
||
126 | LLVMExtractElement = 50, |
||
127 | LLVMInsertElement = 51, |
||
128 | LLVMShuffleVector = 52, |
||
129 | LLVMExtractValue = 53, |
||
130 | LLVMInsertValue = 54, |
||
131 | LLVMFreeze = 68, |
||
132 | |||
133 | /* Atomic operators */ |
||
134 | LLVMFence = 55, |
||
135 | LLVMAtomicCmpXchg = 56, |
||
136 | LLVMAtomicRMW = 57, |
||
137 | |||
138 | /* Exception Handling Operators */ |
||
139 | LLVMResume = 58, |
||
140 | LLVMLandingPad = 59, |
||
141 | LLVMCleanupRet = 61, |
||
142 | LLVMCatchRet = 62, |
||
143 | LLVMCatchPad = 63, |
||
144 | LLVMCleanupPad = 64, |
||
145 | LLVMCatchSwitch = 65 |
||
146 | } LLVMOpcode; |
||
147 | |||
148 | typedef enum { |
||
149 | LLVMVoidTypeKind, /**< type with no size */ |
||
150 | LLVMHalfTypeKind, /**< 16 bit floating point type */ |
||
151 | LLVMFloatTypeKind, /**< 32 bit floating point type */ |
||
152 | LLVMDoubleTypeKind, /**< 64 bit floating point type */ |
||
153 | LLVMX86_FP80TypeKind, /**< 80 bit floating point type (X87) */ |
||
154 | LLVMFP128TypeKind, /**< 128 bit floating point type (112-bit mantissa)*/ |
||
155 | LLVMPPC_FP128TypeKind, /**< 128 bit floating point type (two 64-bits) */ |
||
156 | LLVMLabelTypeKind, /**< Labels */ |
||
157 | LLVMIntegerTypeKind, /**< Arbitrary bit width integers */ |
||
158 | LLVMFunctionTypeKind, /**< Functions */ |
||
159 | LLVMStructTypeKind, /**< Structures */ |
||
160 | LLVMArrayTypeKind, /**< Arrays */ |
||
161 | LLVMPointerTypeKind, /**< Pointers */ |
||
162 | LLVMVectorTypeKind, /**< Fixed width SIMD vector type */ |
||
163 | LLVMMetadataTypeKind, /**< Metadata */ |
||
164 | LLVMX86_MMXTypeKind, /**< X86 MMX */ |
||
165 | LLVMTokenTypeKind, /**< Tokens */ |
||
166 | LLVMScalableVectorTypeKind, /**< Scalable SIMD vector type */ |
||
167 | LLVMBFloatTypeKind, /**< 16 bit brain floating point type */ |
||
168 | LLVMX86_AMXTypeKind, /**< X86 AMX */ |
||
169 | LLVMTargetExtTypeKind, /**< Target extension type */ |
||
170 | } LLVMTypeKind; |
||
171 | |||
172 | typedef enum { |
||
173 | LLVMExternalLinkage, /**< Externally visible function */ |
||
174 | LLVMAvailableExternallyLinkage, |
||
175 | LLVMLinkOnceAnyLinkage, /**< Keep one copy of function when linking (inline)*/ |
||
176 | LLVMLinkOnceODRLinkage, /**< Same, but only replaced by something |
||
177 | equivalent. */ |
||
178 | LLVMLinkOnceODRAutoHideLinkage, /**< Obsolete */ |
||
179 | LLVMWeakAnyLinkage, /**< Keep one copy of function when linking (weak) */ |
||
180 | LLVMWeakODRLinkage, /**< Same, but only replaced by something |
||
181 | equivalent. */ |
||
182 | LLVMAppendingLinkage, /**< Special purpose, only applies to global arrays */ |
||
183 | LLVMInternalLinkage, /**< Rename collisions when linking (static |
||
184 | functions) */ |
||
185 | LLVMPrivateLinkage, /**< Like Internal, but omit from symbol table */ |
||
186 | LLVMDLLImportLinkage, /**< Obsolete */ |
||
187 | LLVMDLLExportLinkage, /**< Obsolete */ |
||
188 | LLVMExternalWeakLinkage,/**< ExternalWeak linkage description */ |
||
189 | LLVMGhostLinkage, /**< Obsolete */ |
||
190 | LLVMCommonLinkage, /**< Tentative definitions */ |
||
191 | LLVMLinkerPrivateLinkage, /**< Like Private, but linker removes. */ |
||
192 | LLVMLinkerPrivateWeakLinkage /**< Like LinkerPrivate, but is weak. */ |
||
193 | } LLVMLinkage; |
||
194 | |||
195 | typedef enum { |
||
196 | LLVMDefaultVisibility, /**< The GV is visible */ |
||
197 | LLVMHiddenVisibility, /**< The GV is hidden */ |
||
198 | LLVMProtectedVisibility /**< The GV is protected */ |
||
199 | } LLVMVisibility; |
||
200 | |||
201 | typedef enum { |
||
202 | LLVMNoUnnamedAddr, /**< Address of the GV is significant. */ |
||
203 | LLVMLocalUnnamedAddr, /**< Address of the GV is locally insignificant. */ |
||
204 | LLVMGlobalUnnamedAddr /**< Address of the GV is globally insignificant. */ |
||
205 | } LLVMUnnamedAddr; |
||
206 | |||
207 | typedef enum { |
||
208 | LLVMDefaultStorageClass = 0, |
||
209 | LLVMDLLImportStorageClass = 1, /**< Function to be imported from DLL. */ |
||
210 | LLVMDLLExportStorageClass = 2 /**< Function to be accessible from DLL. */ |
||
211 | } LLVMDLLStorageClass; |
||
212 | |||
213 | typedef enum { |
||
214 | LLVMCCallConv = 0, |
||
215 | LLVMFastCallConv = 8, |
||
216 | LLVMColdCallConv = 9, |
||
217 | LLVMGHCCallConv = 10, |
||
218 | LLVMHiPECallConv = 11, |
||
219 | LLVMWebKitJSCallConv = 12, |
||
220 | LLVMAnyRegCallConv = 13, |
||
221 | LLVMPreserveMostCallConv = 14, |
||
222 | LLVMPreserveAllCallConv = 15, |
||
223 | LLVMSwiftCallConv = 16, |
||
224 | LLVMCXXFASTTLSCallConv = 17, |
||
225 | LLVMX86StdcallCallConv = 64, |
||
226 | LLVMX86FastcallCallConv = 65, |
||
227 | LLVMARMAPCSCallConv = 66, |
||
228 | LLVMARMAAPCSCallConv = 67, |
||
229 | LLVMARMAAPCSVFPCallConv = 68, |
||
230 | LLVMMSP430INTRCallConv = 69, |
||
231 | LLVMX86ThisCallCallConv = 70, |
||
232 | LLVMPTXKernelCallConv = 71, |
||
233 | LLVMPTXDeviceCallConv = 72, |
||
234 | LLVMSPIRFUNCCallConv = 75, |
||
235 | LLVMSPIRKERNELCallConv = 76, |
||
236 | LLVMIntelOCLBICallConv = 77, |
||
237 | LLVMX8664SysVCallConv = 78, |
||
238 | LLVMWin64CallConv = 79, |
||
239 | LLVMX86VectorCallCallConv = 80, |
||
240 | LLVMHHVMCallConv = 81, |
||
241 | LLVMHHVMCCallConv = 82, |
||
242 | LLVMX86INTRCallConv = 83, |
||
243 | LLVMAVRINTRCallConv = 84, |
||
244 | LLVMAVRSIGNALCallConv = 85, |
||
245 | LLVMAVRBUILTINCallConv = 86, |
||
246 | LLVMAMDGPUVSCallConv = 87, |
||
247 | LLVMAMDGPUGSCallConv = 88, |
||
248 | LLVMAMDGPUPSCallConv = 89, |
||
249 | LLVMAMDGPUCSCallConv = 90, |
||
250 | LLVMAMDGPUKERNELCallConv = 91, |
||
251 | LLVMX86RegCallCallConv = 92, |
||
252 | LLVMAMDGPUHSCallConv = 93, |
||
253 | LLVMMSP430BUILTINCallConv = 94, |
||
254 | LLVMAMDGPULSCallConv = 95, |
||
255 | LLVMAMDGPUESCallConv = 96 |
||
256 | } LLVMCallConv; |
||
257 | |||
258 | typedef enum { |
||
259 | LLVMArgumentValueKind, |
||
260 | LLVMBasicBlockValueKind, |
||
261 | LLVMMemoryUseValueKind, |
||
262 | LLVMMemoryDefValueKind, |
||
263 | LLVMMemoryPhiValueKind, |
||
264 | |||
265 | LLVMFunctionValueKind, |
||
266 | LLVMGlobalAliasValueKind, |
||
267 | LLVMGlobalIFuncValueKind, |
||
268 | LLVMGlobalVariableValueKind, |
||
269 | LLVMBlockAddressValueKind, |
||
270 | LLVMConstantExprValueKind, |
||
271 | LLVMConstantArrayValueKind, |
||
272 | LLVMConstantStructValueKind, |
||
273 | LLVMConstantVectorValueKind, |
||
274 | |||
275 | LLVMUndefValueValueKind, |
||
276 | LLVMConstantAggregateZeroValueKind, |
||
277 | LLVMConstantDataArrayValueKind, |
||
278 | LLVMConstantDataVectorValueKind, |
||
279 | LLVMConstantIntValueKind, |
||
280 | LLVMConstantFPValueKind, |
||
281 | LLVMConstantPointerNullValueKind, |
||
282 | LLVMConstantTokenNoneValueKind, |
||
283 | |||
284 | LLVMMetadataAsValueValueKind, |
||
285 | LLVMInlineAsmValueKind, |
||
286 | |||
287 | LLVMInstructionValueKind, |
||
288 | LLVMPoisonValueValueKind, |
||
289 | LLVMConstantTargetNoneValueKind, |
||
290 | } LLVMValueKind; |
||
291 | |||
292 | typedef enum { |
||
293 | LLVMIntEQ = 32, /**< equal */ |
||
294 | LLVMIntNE, /**< not equal */ |
||
295 | LLVMIntUGT, /**< unsigned greater than */ |
||
296 | LLVMIntUGE, /**< unsigned greater or equal */ |
||
297 | LLVMIntULT, /**< unsigned less than */ |
||
298 | LLVMIntULE, /**< unsigned less or equal */ |
||
299 | LLVMIntSGT, /**< signed greater than */ |
||
300 | LLVMIntSGE, /**< signed greater or equal */ |
||
301 | LLVMIntSLT, /**< signed less than */ |
||
302 | LLVMIntSLE /**< signed less or equal */ |
||
303 | } LLVMIntPredicate; |
||
304 | |||
305 | typedef enum { |
||
306 | LLVMRealPredicateFalse, /**< Always false (always folded) */ |
||
307 | LLVMRealOEQ, /**< True if ordered and equal */ |
||
308 | LLVMRealOGT, /**< True if ordered and greater than */ |
||
309 | LLVMRealOGE, /**< True if ordered and greater than or equal */ |
||
310 | LLVMRealOLT, /**< True if ordered and less than */ |
||
311 | LLVMRealOLE, /**< True if ordered and less than or equal */ |
||
312 | LLVMRealONE, /**< True if ordered and operands are unequal */ |
||
313 | LLVMRealORD, /**< True if ordered (no nans) */ |
||
314 | LLVMRealUNO, /**< True if unordered: isnan(X) | isnan(Y) */ |
||
315 | LLVMRealUEQ, /**< True if unordered or equal */ |
||
316 | LLVMRealUGT, /**< True if unordered or greater than */ |
||
317 | LLVMRealUGE, /**< True if unordered, greater than, or equal */ |
||
318 | LLVMRealULT, /**< True if unordered or less than */ |
||
319 | LLVMRealULE, /**< True if unordered, less than, or equal */ |
||
320 | LLVMRealUNE, /**< True if unordered or not equal */ |
||
321 | LLVMRealPredicateTrue /**< Always true (always folded) */ |
||
322 | } LLVMRealPredicate; |
||
323 | |||
324 | typedef enum { |
||
325 | LLVMLandingPadCatch, /**< A catch clause */ |
||
326 | LLVMLandingPadFilter /**< A filter clause */ |
||
327 | } LLVMLandingPadClauseTy; |
||
328 | |||
329 | typedef enum { |
||
330 | LLVMNotThreadLocal = 0, |
||
331 | LLVMGeneralDynamicTLSModel, |
||
332 | LLVMLocalDynamicTLSModel, |
||
333 | LLVMInitialExecTLSModel, |
||
334 | LLVMLocalExecTLSModel |
||
335 | } LLVMThreadLocalMode; |
||
336 | |||
337 | typedef enum { |
||
338 | LLVMAtomicOrderingNotAtomic = 0, /**< A load or store which is not atomic */ |
||
339 | LLVMAtomicOrderingUnordered = 1, /**< Lowest level of atomicity, guarantees |
||
340 | somewhat sane results, lock free. */ |
||
341 | LLVMAtomicOrderingMonotonic = 2, /**< guarantees that if you take all the |
||
342 | operations affecting a specific address, |
||
343 | a consistent ordering exists */ |
||
344 | LLVMAtomicOrderingAcquire = 4, /**< Acquire provides a barrier of the sort |
||
345 | necessary to acquire a lock to access other |
||
346 | memory with normal loads and stores. */ |
||
347 | LLVMAtomicOrderingRelease = 5, /**< Release is similar to Acquire, but with |
||
348 | a barrier of the sort necessary to release |
||
349 | a lock. */ |
||
350 | LLVMAtomicOrderingAcquireRelease = 6, /**< provides both an Acquire and a |
||
351 | Release barrier (for fences and |
||
352 | operations which both read and write |
||
353 | memory). */ |
||
354 | LLVMAtomicOrderingSequentiallyConsistent = 7 /**< provides Acquire semantics |
||
355 | for loads and Release |
||
356 | semantics for stores. |
||
357 | Additionally, it guarantees |
||
358 | that a total ordering exists |
||
359 | between all |
||
360 | SequentiallyConsistent |
||
361 | operations. */ |
||
362 | } LLVMAtomicOrdering; |
||
363 | |||
364 | typedef enum { |
||
365 | LLVMAtomicRMWBinOpXchg, /**< Set the new value and return the one old */ |
||
366 | LLVMAtomicRMWBinOpAdd, /**< Add a value and return the old one */ |
||
367 | LLVMAtomicRMWBinOpSub, /**< Subtract a value and return the old one */ |
||
368 | LLVMAtomicRMWBinOpAnd, /**< And a value and return the old one */ |
||
369 | LLVMAtomicRMWBinOpNand, /**< Not-And a value and return the old one */ |
||
370 | LLVMAtomicRMWBinOpOr, /**< OR a value and return the old one */ |
||
371 | LLVMAtomicRMWBinOpXor, /**< Xor a value and return the old one */ |
||
372 | LLVMAtomicRMWBinOpMax, /**< Sets the value if it's greater than the |
||
373 | original using a signed comparison and return |
||
374 | the old one */ |
||
375 | LLVMAtomicRMWBinOpMin, /**< Sets the value if it's Smaller than the |
||
376 | original using a signed comparison and return |
||
377 | the old one */ |
||
378 | LLVMAtomicRMWBinOpUMax, /**< Sets the value if it's greater than the |
||
379 | original using an unsigned comparison and return |
||
380 | the old one */ |
||
381 | LLVMAtomicRMWBinOpUMin, /**< Sets the value if it's greater than the |
||
382 | original using an unsigned comparison and return |
||
383 | the old one */ |
||
384 | LLVMAtomicRMWBinOpFAdd, /**< Add a floating point value and return the |
||
385 | old one */ |
||
386 | LLVMAtomicRMWBinOpFSub, /**< Subtract a floating point value and return the |
||
387 | old one */ |
||
388 | LLVMAtomicRMWBinOpFMax, /**< Sets the value if it's greater than the |
||
389 | original using an floating point comparison and |
||
390 | return the old one */ |
||
391 | LLVMAtomicRMWBinOpFMin, /**< Sets the value if it's smaller than the |
||
392 | original using an floating point comparison and |
||
393 | return the old one */ |
||
394 | } LLVMAtomicRMWBinOp; |
||
395 | |||
396 | typedef enum { |
||
397 | LLVMDSError, |
||
398 | LLVMDSWarning, |
||
399 | LLVMDSRemark, |
||
400 | LLVMDSNote |
||
401 | } LLVMDiagnosticSeverity; |
||
402 | |||
403 | typedef enum { |
||
404 | LLVMInlineAsmDialectATT, |
||
405 | LLVMInlineAsmDialectIntel |
||
406 | } LLVMInlineAsmDialect; |
||
407 | |||
408 | typedef enum { |
||
409 | /** |
||
410 | * Emits an error if two values disagree, otherwise the resulting value is |
||
411 | * that of the operands. |
||
412 | * |
||
413 | * @see Module::ModFlagBehavior::Error |
||
414 | */ |
||
415 | LLVMModuleFlagBehaviorError, |
||
416 | /** |
||
417 | * Emits a warning if two values disagree. The result value will be the |
||
418 | * operand for the flag from the first module being linked. |
||
419 | * |
||
420 | * @see Module::ModFlagBehavior::Warning |
||
421 | */ |
||
422 | LLVMModuleFlagBehaviorWarning, |
||
423 | /** |
||
424 | * Adds a requirement that another module flag be present and have a |
||
425 | * specified value after linking is performed. The value must be a metadata |
||
426 | * pair, where the first element of the pair is the ID of the module flag |
||
427 | * to be restricted, and the second element of the pair is the value the |
||
428 | * module flag should be restricted to. This behavior can be used to |
||
429 | * restrict the allowable results (via triggering of an error) of linking |
||
430 | * IDs with the **Override** behavior. |
||
431 | * |
||
432 | * @see Module::ModFlagBehavior::Require |
||
433 | */ |
||
434 | LLVMModuleFlagBehaviorRequire, |
||
435 | /** |
||
436 | * Uses the specified value, regardless of the behavior or value of the |
||
437 | * other module. If both modules specify **Override**, but the values |
||
438 | * differ, an error will be emitted. |
||
439 | * |
||
440 | * @see Module::ModFlagBehavior::Override |
||
441 | */ |
||
442 | LLVMModuleFlagBehaviorOverride, |
||
443 | /** |
||
444 | * Appends the two values, which are required to be metadata nodes. |
||
445 | * |
||
446 | * @see Module::ModFlagBehavior::Append |
||
447 | */ |
||
448 | LLVMModuleFlagBehaviorAppend, |
||
449 | /** |
||
450 | * Appends the two values, which are required to be metadata |
||
451 | * nodes. However, duplicate entries in the second list are dropped |
||
452 | * during the append operation. |
||
453 | * |
||
454 | * @see Module::ModFlagBehavior::AppendUnique |
||
455 | */ |
||
456 | LLVMModuleFlagBehaviorAppendUnique, |
||
457 | } LLVMModuleFlagBehavior; |
||
458 | |||
459 | /** |
||
460 | * Attribute index are either LLVMAttributeReturnIndex, |
||
461 | * LLVMAttributeFunctionIndex or a parameter number from 1 to N. |
||
462 | */ |
||
463 | enum { |
||
464 | LLVMAttributeReturnIndex = 0U, |
||
465 | // ISO C restricts enumerator values to range of 'int' |
||
466 | // (4294967295 is too large) |
||
467 | // LLVMAttributeFunctionIndex = ~0U, |
||
468 | LLVMAttributeFunctionIndex = -1, |
||
469 | }; |
||
470 | |||
471 | typedef unsigned LLVMAttributeIndex; |
||
472 | |||
473 | /** |
||
474 | * @} |
||
475 | */ |
||
476 | |||
477 | void LLVMInitializeCore(LLVMPassRegistryRef R); |
||
478 | |||
479 | /** Deallocate and destroy all ManagedStatic variables. |
||
480 | @see llvm::llvm_shutdown |
||
481 | @see ManagedStatic */ |
||
482 | void LLVMShutdown(void); |
||
483 | |||
484 | /*===-- Version query -----------------------------------------------------===*/ |
||
485 | |||
486 | /** |
||
487 | * Return the major, minor, and patch version of LLVM |
||
488 | * |
||
489 | * The version components are returned via the function's three output |
||
490 | * parameters or skipped if a NULL pointer was supplied. |
||
491 | */ |
||
492 | void LLVMGetVersion(unsigned *Major, unsigned *Minor, unsigned *Patch); |
||
493 | |||
494 | /*===-- Error handling ----------------------------------------------------===*/ |
||
495 | |||
496 | char *LLVMCreateMessage(const char *Message); |
||
497 | void LLVMDisposeMessage(char *Message); |
||
498 | |||
499 | /** |
||
500 | * @defgroup LLVMCCoreContext Contexts |
||
501 | * |
||
502 | * Contexts are execution states for the core LLVM IR system. |
||
503 | * |
||
504 | * Most types are tied to a context instance. Multiple contexts can |
||
505 | * exist simultaneously. A single context is not thread safe. However, |
||
506 | * different contexts can execute on different threads simultaneously. |
||
507 | * |
||
508 | * @{ |
||
509 | */ |
||
510 | |||
511 | typedef void (*LLVMDiagnosticHandler)(LLVMDiagnosticInfoRef, void *); |
||
512 | typedef void (*LLVMYieldCallback)(LLVMContextRef, void *); |
||
513 | |||
514 | /** |
||
515 | * Create a new context. |
||
516 | * |
||
517 | * Every call to this function should be paired with a call to |
||
518 | * LLVMContextDispose() or the context will leak memory. |
||
519 | */ |
||
520 | LLVMContextRef LLVMContextCreate(void); |
||
521 | |||
522 | /** |
||
523 | * Obtain the global context instance. |
||
524 | */ |
||
525 | LLVMContextRef LLVMGetGlobalContext(void); |
||
526 | |||
527 | /** |
||
528 | * Set the diagnostic handler for this context. |
||
529 | */ |
||
530 | void LLVMContextSetDiagnosticHandler(LLVMContextRef C, |
||
531 | LLVMDiagnosticHandler Handler, |
||
532 | void *DiagnosticContext); |
||
533 | |||
534 | /** |
||
535 | * Get the diagnostic handler of this context. |
||
536 | */ |
||
537 | LLVMDiagnosticHandler LLVMContextGetDiagnosticHandler(LLVMContextRef C); |
||
538 | |||
539 | /** |
||
540 | * Get the diagnostic context of this context. |
||
541 | */ |
||
542 | void *LLVMContextGetDiagnosticContext(LLVMContextRef C); |
||
543 | |||
544 | /** |
||
545 | * Set the yield callback function for this context. |
||
546 | * |
||
547 | * @see LLVMContext::setYieldCallback() |
||
548 | */ |
||
549 | void LLVMContextSetYieldCallback(LLVMContextRef C, LLVMYieldCallback Callback, |
||
550 | void *OpaqueHandle); |
||
551 | |||
552 | /** |
||
553 | * Retrieve whether the given context is set to discard all value names. |
||
554 | * |
||
555 | * @see LLVMContext::shouldDiscardValueNames() |
||
556 | */ |
||
557 | LLVMBool LLVMContextShouldDiscardValueNames(LLVMContextRef C); |
||
558 | |||
559 | /** |
||
560 | * Set whether the given context discards all value names. |
||
561 | * |
||
562 | * If true, only the names of GlobalValue objects will be available in the IR. |
||
563 | * This can be used to save memory and runtime, especially in release mode. |
||
564 | * |
||
565 | * @see LLVMContext::setDiscardValueNames() |
||
566 | */ |
||
567 | void LLVMContextSetDiscardValueNames(LLVMContextRef C, LLVMBool Discard); |
||
568 | |||
569 | /** |
||
570 | * Set whether the given context is in opaque pointer mode. |
||
571 | * |
||
572 | * @see LLVMContext::setOpaquePointers() |
||
573 | */ |
||
574 | void LLVMContextSetOpaquePointers(LLVMContextRef C, LLVMBool OpaquePointers); |
||
575 | |||
576 | /** |
||
577 | * Destroy a context instance. |
||
578 | * |
||
579 | * This should be called for every call to LLVMContextCreate() or memory |
||
580 | * will be leaked. |
||
581 | */ |
||
582 | void LLVMContextDispose(LLVMContextRef C); |
||
583 | |||
584 | /** |
||
585 | * Return a string representation of the DiagnosticInfo. Use |
||
586 | * LLVMDisposeMessage to free the string. |
||
587 | * |
||
588 | * @see DiagnosticInfo::print() |
||
589 | */ |
||
590 | char *LLVMGetDiagInfoDescription(LLVMDiagnosticInfoRef DI); |
||
591 | |||
592 | /** |
||
593 | * Return an enum LLVMDiagnosticSeverity. |
||
594 | * |
||
595 | * @see DiagnosticInfo::getSeverity() |
||
596 | */ |
||
597 | LLVMDiagnosticSeverity LLVMGetDiagInfoSeverity(LLVMDiagnosticInfoRef DI); |
||
598 | |||
599 | unsigned LLVMGetMDKindIDInContext(LLVMContextRef C, const char *Name, |
||
600 | unsigned SLen); |
||
601 | unsigned LLVMGetMDKindID(const char *Name, unsigned SLen); |
||
602 | |||
603 | /** |
||
604 | * Return an unique id given the name of a enum attribute, |
||
605 | * or 0 if no attribute by that name exists. |
||
606 | * |
||
607 | * See http://llvm.org/docs/LangRef.html#parameter-attributes |
||
608 | * and http://llvm.org/docs/LangRef.html#function-attributes |
||
609 | * for the list of available attributes. |
||
610 | * |
||
611 | * NB: Attribute names and/or id are subject to change without |
||
612 | * going through the C API deprecation cycle. |
||
613 | */ |
||
614 | unsigned LLVMGetEnumAttributeKindForName(const char *Name, size_t SLen); |
||
615 | unsigned LLVMGetLastEnumAttributeKind(void); |
||
616 | |||
617 | /** |
||
618 | * Create an enum attribute. |
||
619 | */ |
||
620 | LLVMAttributeRef LLVMCreateEnumAttribute(LLVMContextRef C, unsigned KindID, |
||
621 | uint64_t Val); |
||
622 | |||
623 | /** |
||
624 | * Get the unique id corresponding to the enum attribute |
||
625 | * passed as argument. |
||
626 | */ |
||
627 | unsigned LLVMGetEnumAttributeKind(LLVMAttributeRef A); |
||
628 | |||
629 | /** |
||
630 | * Get the enum attribute's value. 0 is returned if none exists. |
||
631 | */ |
||
632 | uint64_t LLVMGetEnumAttributeValue(LLVMAttributeRef A); |
||
633 | |||
634 | /** |
||
635 | * Create a type attribute |
||
636 | */ |
||
637 | LLVMAttributeRef LLVMCreateTypeAttribute(LLVMContextRef C, unsigned KindID, |
||
638 | LLVMTypeRef type_ref); |
||
639 | |||
640 | /** |
||
641 | * Get the type attribute's value. |
||
642 | */ |
||
643 | LLVMTypeRef LLVMGetTypeAttributeValue(LLVMAttributeRef A); |
||
644 | |||
645 | /** |
||
646 | * Create a string attribute. |
||
647 | */ |
||
648 | LLVMAttributeRef LLVMCreateStringAttribute(LLVMContextRef C, |
||
649 | const char *K, unsigned KLength, |
||
650 | const char *V, unsigned VLength); |
||
651 | |||
652 | /** |
||
653 | * Get the string attribute's kind. |
||
654 | */ |
||
655 | const char *LLVMGetStringAttributeKind(LLVMAttributeRef A, unsigned *Length); |
||
656 | |||
657 | /** |
||
658 | * Get the string attribute's value. |
||
659 | */ |
||
660 | const char *LLVMGetStringAttributeValue(LLVMAttributeRef A, unsigned *Length); |
||
661 | |||
662 | /** |
||
663 | * Check for the different types of attributes. |
||
664 | */ |
||
665 | LLVMBool LLVMIsEnumAttribute(LLVMAttributeRef A); |
||
666 | LLVMBool LLVMIsStringAttribute(LLVMAttributeRef A); |
||
667 | LLVMBool LLVMIsTypeAttribute(LLVMAttributeRef A); |
||
668 | |||
669 | /** |
||
670 | * Obtain a Type from a context by its registered name. |
||
671 | */ |
||
672 | LLVMTypeRef LLVMGetTypeByName2(LLVMContextRef C, const char *Name); |
||
673 | |||
674 | /** |
||
675 | * @} |
||
676 | */ |
||
677 | |||
678 | /** |
||
679 | * @defgroup LLVMCCoreModule Modules |
||
680 | * |
||
681 | * Modules represent the top-level structure in an LLVM program. An LLVM |
||
682 | * module is effectively a translation unit or a collection of |
||
683 | * translation units merged together. |
||
684 | * |
||
685 | * @{ |
||
686 | */ |
||
687 | |||
688 | /** |
||
689 | * Create a new, empty module in the global context. |
||
690 | * |
||
691 | * This is equivalent to calling LLVMModuleCreateWithNameInContext with |
||
692 | * LLVMGetGlobalContext() as the context parameter. |
||
693 | * |
||
694 | * Every invocation should be paired with LLVMDisposeModule() or memory |
||
695 | * will be leaked. |
||
696 | */ |
||
697 | LLVMModuleRef LLVMModuleCreateWithName(const char *ModuleID); |
||
698 | |||
699 | /** |
||
700 | * Create a new, empty module in a specific context. |
||
701 | * |
||
702 | * Every invocation should be paired with LLVMDisposeModule() or memory |
||
703 | * will be leaked. |
||
704 | */ |
||
705 | LLVMModuleRef LLVMModuleCreateWithNameInContext(const char *ModuleID, |
||
706 | LLVMContextRef C); |
||
707 | /** |
||
708 | * Return an exact copy of the specified module. |
||
709 | */ |
||
710 | LLVMModuleRef LLVMCloneModule(LLVMModuleRef M); |
||
711 | |||
712 | /** |
||
713 | * Destroy a module instance. |
||
714 | * |
||
715 | * This must be called for every created module or memory will be |
||
716 | * leaked. |
||
717 | */ |
||
718 | void LLVMDisposeModule(LLVMModuleRef M); |
||
719 | |||
720 | /** |
||
721 | * Obtain the identifier of a module. |
||
722 | * |
||
723 | * @param M Module to obtain identifier of |
||
724 | * @param Len Out parameter which holds the length of the returned string. |
||
725 | * @return The identifier of M. |
||
726 | * @see Module::getModuleIdentifier() |
||
727 | */ |
||
728 | const char *LLVMGetModuleIdentifier(LLVMModuleRef M, size_t *Len); |
||
729 | |||
730 | /** |
||
731 | * Set the identifier of a module to a string Ident with length Len. |
||
732 | * |
||
733 | * @param M The module to set identifier |
||
734 | * @param Ident The string to set M's identifier to |
||
735 | * @param Len Length of Ident |
||
736 | * @see Module::setModuleIdentifier() |
||
737 | */ |
||
738 | void LLVMSetModuleIdentifier(LLVMModuleRef M, const char *Ident, size_t Len); |
||
739 | |||
740 | /** |
||
741 | * Obtain the module's original source file name. |
||
742 | * |
||
743 | * @param M Module to obtain the name of |
||
744 | * @param Len Out parameter which holds the length of the returned string |
||
745 | * @return The original source file name of M |
||
746 | * @see Module::getSourceFileName() |
||
747 | */ |
||
748 | const char *LLVMGetSourceFileName(LLVMModuleRef M, size_t *Len); |
||
749 | |||
750 | /** |
||
751 | * Set the original source file name of a module to a string Name with length |
||
752 | * Len. |
||
753 | * |
||
754 | * @param M The module to set the source file name of |
||
755 | * @param Name The string to set M's source file name to |
||
756 | * @param Len Length of Name |
||
757 | * @see Module::setSourceFileName() |
||
758 | */ |
||
759 | void LLVMSetSourceFileName(LLVMModuleRef M, const char *Name, size_t Len); |
||
760 | |||
761 | /** |
||
762 | * Obtain the data layout for a module. |
||
763 | * |
||
764 | * @see Module::getDataLayoutStr() |
||
765 | * |
||
766 | * LLVMGetDataLayout is DEPRECATED, as the name is not only incorrect, |
||
767 | * but match the name of another method on the module. Prefer the use |
||
768 | * of LLVMGetDataLayoutStr, which is not ambiguous. |
||
769 | */ |
||
770 | const char *LLVMGetDataLayoutStr(LLVMModuleRef M); |
||
771 | const char *LLVMGetDataLayout(LLVMModuleRef M); |
||
772 | |||
773 | /** |
||
774 | * Set the data layout for a module. |
||
775 | * |
||
776 | * @see Module::setDataLayout() |
||
777 | */ |
||
778 | void LLVMSetDataLayout(LLVMModuleRef M, const char *DataLayoutStr); |
||
779 | |||
780 | /** |
||
781 | * Obtain the target triple for a module. |
||
782 | * |
||
783 | * @see Module::getTargetTriple() |
||
784 | */ |
||
785 | const char *LLVMGetTarget(LLVMModuleRef M); |
||
786 | |||
787 | /** |
||
788 | * Set the target triple for a module. |
||
789 | * |
||
790 | * @see Module::setTargetTriple() |
||
791 | */ |
||
792 | void LLVMSetTarget(LLVMModuleRef M, const char *Triple); |
||
793 | |||
794 | /** |
||
795 | * Returns the module flags as an array of flag-key-value triples. The caller |
||
796 | * is responsible for freeing this array by calling |
||
797 | * \c LLVMDisposeModuleFlagsMetadata. |
||
798 | * |
||
799 | * @see Module::getModuleFlagsMetadata() |
||
800 | */ |
||
801 | LLVMModuleFlagEntry *LLVMCopyModuleFlagsMetadata(LLVMModuleRef M, size_t *Len); |
||
802 | |||
803 | /** |
||
804 | * Destroys module flags metadata entries. |
||
805 | */ |
||
806 | void LLVMDisposeModuleFlagsMetadata(LLVMModuleFlagEntry *Entries); |
||
807 | |||
808 | /** |
||
809 | * Returns the flag behavior for a module flag entry at a specific index. |
||
810 | * |
||
811 | * @see Module::ModuleFlagEntry::Behavior |
||
812 | */ |
||
813 | LLVMModuleFlagBehavior |
||
814 | LLVMModuleFlagEntriesGetFlagBehavior(LLVMModuleFlagEntry *Entries, |
||
815 | unsigned Index); |
||
816 | |||
817 | /** |
||
818 | * Returns the key for a module flag entry at a specific index. |
||
819 | * |
||
820 | * @see Module::ModuleFlagEntry::Key |
||
821 | */ |
||
822 | const char *LLVMModuleFlagEntriesGetKey(LLVMModuleFlagEntry *Entries, |
||
823 | unsigned Index, size_t *Len); |
||
824 | |||
825 | /** |
||
826 | * Returns the metadata for a module flag entry at a specific index. |
||
827 | * |
||
828 | * @see Module::ModuleFlagEntry::Val |
||
829 | */ |
||
830 | LLVMMetadataRef LLVMModuleFlagEntriesGetMetadata(LLVMModuleFlagEntry *Entries, |
||
831 | unsigned Index); |
||
832 | |||
833 | /** |
||
834 | * Add a module-level flag to the module-level flags metadata if it doesn't |
||
835 | * already exist. |
||
836 | * |
||
837 | * @see Module::getModuleFlag() |
||
838 | */ |
||
839 | LLVMMetadataRef LLVMGetModuleFlag(LLVMModuleRef M, |
||
840 | const char *Key, size_t KeyLen); |
||
841 | |||
842 | /** |
||
843 | * Add a module-level flag to the module-level flags metadata if it doesn't |
||
844 | * already exist. |
||
845 | * |
||
846 | * @see Module::addModuleFlag() |
||
847 | */ |
||
848 | void LLVMAddModuleFlag(LLVMModuleRef M, LLVMModuleFlagBehavior Behavior, |
||
849 | const char *Key, size_t KeyLen, |
||
850 | LLVMMetadataRef Val); |
||
851 | |||
852 | /** |
||
853 | * Dump a representation of a module to stderr. |
||
854 | * |
||
855 | * @see Module::dump() |
||
856 | */ |
||
857 | void LLVMDumpModule(LLVMModuleRef M); |
||
858 | |||
859 | /** |
||
860 | * Print a representation of a module to a file. The ErrorMessage needs to be |
||
861 | * disposed with LLVMDisposeMessage. Returns 0 on success, 1 otherwise. |
||
862 | * |
||
863 | * @see Module::print() |
||
864 | */ |
||
865 | LLVMBool LLVMPrintModuleToFile(LLVMModuleRef M, const char *Filename, |
||
866 | char **ErrorMessage); |
||
867 | |||
868 | /** |
||
869 | * Return a string representation of the module. Use |
||
870 | * LLVMDisposeMessage to free the string. |
||
871 | * |
||
872 | * @see Module::print() |
||
873 | */ |
||
874 | char *LLVMPrintModuleToString(LLVMModuleRef M); |
||
875 | |||
876 | /** |
||
877 | * Get inline assembly for a module. |
||
878 | * |
||
879 | * @see Module::getModuleInlineAsm() |
||
880 | */ |
||
881 | const char *LLVMGetModuleInlineAsm(LLVMModuleRef M, size_t *Len); |
||
882 | |||
883 | /** |
||
884 | * Set inline assembly for a module. |
||
885 | * |
||
886 | * @see Module::setModuleInlineAsm() |
||
887 | */ |
||
888 | void LLVMSetModuleInlineAsm2(LLVMModuleRef M, const char *Asm, size_t Len); |
||
889 | |||
890 | /** |
||
891 | * Append inline assembly to a module. |
||
892 | * |
||
893 | * @see Module::appendModuleInlineAsm() |
||
894 | */ |
||
895 | void LLVMAppendModuleInlineAsm(LLVMModuleRef M, const char *Asm, size_t Len); |
||
896 | |||
897 | /** |
||
898 | * Create the specified uniqued inline asm string. |
||
899 | * |
||
900 | * @see InlineAsm::get() |
||
901 | */ |
||
902 | LLVMValueRef LLVMGetInlineAsm(LLVMTypeRef Ty, char *AsmString, |
||
903 | size_t AsmStringSize, char *Constraints, |
||
904 | size_t ConstraintsSize, LLVMBool HasSideEffects, |
||
905 | LLVMBool IsAlignStack, |
||
906 | LLVMInlineAsmDialect Dialect, LLVMBool CanThrow); |
||
907 | |||
908 | /** |
||
909 | * Obtain the context to which this module is associated. |
||
910 | * |
||
911 | * @see Module::getContext() |
||
912 | */ |
||
913 | LLVMContextRef LLVMGetModuleContext(LLVMModuleRef M); |
||
914 | |||
915 | /** Deprecated: Use LLVMGetTypeByName2 instead. */ |
||
916 | LLVMTypeRef LLVMGetTypeByName(LLVMModuleRef M, const char *Name); |
||
917 | |||
918 | /** |
||
919 | * Obtain an iterator to the first NamedMDNode in a Module. |
||
920 | * |
||
921 | * @see llvm::Module::named_metadata_begin() |
||
922 | */ |
||
923 | LLVMNamedMDNodeRef LLVMGetFirstNamedMetadata(LLVMModuleRef M); |
||
924 | |||
925 | /** |
||
926 | * Obtain an iterator to the last NamedMDNode in a Module. |
||
927 | * |
||
928 | * @see llvm::Module::named_metadata_end() |
||
929 | */ |
||
930 | LLVMNamedMDNodeRef LLVMGetLastNamedMetadata(LLVMModuleRef M); |
||
931 | |||
932 | /** |
||
933 | * Advance a NamedMDNode iterator to the next NamedMDNode. |
||
934 | * |
||
935 | * Returns NULL if the iterator was already at the end and there are no more |
||
936 | * named metadata nodes. |
||
937 | */ |
||
938 | LLVMNamedMDNodeRef LLVMGetNextNamedMetadata(LLVMNamedMDNodeRef NamedMDNode); |
||
939 | |||
940 | /** |
||
941 | * Decrement a NamedMDNode iterator to the previous NamedMDNode. |
||
942 | * |
||
943 | * Returns NULL if the iterator was already at the beginning and there are |
||
944 | * no previous named metadata nodes. |
||
945 | */ |
||
946 | LLVMNamedMDNodeRef LLVMGetPreviousNamedMetadata(LLVMNamedMDNodeRef NamedMDNode); |
||
947 | |||
948 | /** |
||
949 | * Retrieve a NamedMDNode with the given name, returning NULL if no such |
||
950 | * node exists. |
||
951 | * |
||
952 | * @see llvm::Module::getNamedMetadata() |
||
953 | */ |
||
954 | LLVMNamedMDNodeRef LLVMGetNamedMetadata(LLVMModuleRef M, |
||
955 | const char *Name, size_t NameLen); |
||
956 | |||
957 | /** |
||
958 | * Retrieve a NamedMDNode with the given name, creating a new node if no such |
||
959 | * node exists. |
||
960 | * |
||
961 | * @see llvm::Module::getOrInsertNamedMetadata() |
||
962 | */ |
||
963 | LLVMNamedMDNodeRef LLVMGetOrInsertNamedMetadata(LLVMModuleRef M, |
||
964 | const char *Name, |
||
965 | size_t NameLen); |
||
966 | |||
967 | /** |
||
968 | * Retrieve the name of a NamedMDNode. |
||
969 | * |
||
970 | * @see llvm::NamedMDNode::getName() |
||
971 | */ |
||
972 | const char *LLVMGetNamedMetadataName(LLVMNamedMDNodeRef NamedMD, |
||
973 | size_t *NameLen); |
||
974 | |||
975 | /** |
||
976 | * Obtain the number of operands for named metadata in a module. |
||
977 | * |
||
978 | * @see llvm::Module::getNamedMetadata() |
||
979 | */ |
||
980 | unsigned LLVMGetNamedMetadataNumOperands(LLVMModuleRef M, const char *Name); |
||
981 | |||
982 | /** |
||
983 | * Obtain the named metadata operands for a module. |
||
984 | * |
||
985 | * The passed LLVMValueRef pointer should refer to an array of |
||
986 | * LLVMValueRef at least LLVMGetNamedMetadataNumOperands long. This |
||
987 | * array will be populated with the LLVMValueRef instances. Each |
||
988 | * instance corresponds to a llvm::MDNode. |
||
989 | * |
||
990 | * @see llvm::Module::getNamedMetadata() |
||
991 | * @see llvm::MDNode::getOperand() |
||
992 | */ |
||
993 | void LLVMGetNamedMetadataOperands(LLVMModuleRef M, const char *Name, |
||
994 | LLVMValueRef *Dest); |
||
995 | |||
996 | /** |
||
997 | * Add an operand to named metadata. |
||
998 | * |
||
999 | * @see llvm::Module::getNamedMetadata() |
||
1000 | * @see llvm::MDNode::addOperand() |
||
1001 | */ |
||
1002 | void LLVMAddNamedMetadataOperand(LLVMModuleRef M, const char *Name, |
||
1003 | LLVMValueRef Val); |
||
1004 | |||
1005 | /** |
||
1006 | * Return the directory of the debug location for this value, which must be |
||
1007 | * an llvm::Instruction, llvm::GlobalVariable, or llvm::Function. |
||
1008 | * |
||
1009 | * @see llvm::Instruction::getDebugLoc() |
||
1010 | * @see llvm::GlobalVariable::getDebugInfo() |
||
1011 | * @see llvm::Function::getSubprogram() |
||
1012 | */ |
||
1013 | const char *LLVMGetDebugLocDirectory(LLVMValueRef Val, unsigned *Length); |
||
1014 | |||
1015 | /** |
||
1016 | * Return the filename of the debug location for this value, which must be |
||
1017 | * an llvm::Instruction, llvm::GlobalVariable, or llvm::Function. |
||
1018 | * |
||
1019 | * @see llvm::Instruction::getDebugLoc() |
||
1020 | * @see llvm::GlobalVariable::getDebugInfo() |
||
1021 | * @see llvm::Function::getSubprogram() |
||
1022 | */ |
||
1023 | const char *LLVMGetDebugLocFilename(LLVMValueRef Val, unsigned *Length); |
||
1024 | |||
1025 | /** |
||
1026 | * Return the line number of the debug location for this value, which must be |
||
1027 | * an llvm::Instruction, llvm::GlobalVariable, or llvm::Function. |
||
1028 | * |
||
1029 | * @see llvm::Instruction::getDebugLoc() |
||
1030 | * @see llvm::GlobalVariable::getDebugInfo() |
||
1031 | * @see llvm::Function::getSubprogram() |
||
1032 | */ |
||
1033 | unsigned LLVMGetDebugLocLine(LLVMValueRef Val); |
||
1034 | |||
1035 | /** |
||
1036 | * Return the column number of the debug location for this value, which must be |
||
1037 | * an llvm::Instruction. |
||
1038 | * |
||
1039 | * @see llvm::Instruction::getDebugLoc() |
||
1040 | */ |
||
1041 | unsigned LLVMGetDebugLocColumn(LLVMValueRef Val); |
||
1042 | |||
1043 | /** |
||
1044 | * Add a function to a module under a specified name. |
||
1045 | * |
||
1046 | * @see llvm::Function::Create() |
||
1047 | */ |
||
1048 | LLVMValueRef LLVMAddFunction(LLVMModuleRef M, const char *Name, |
||
1049 | LLVMTypeRef FunctionTy); |
||
1050 | |||
1051 | /** |
||
1052 | * Obtain a Function value from a Module by its name. |
||
1053 | * |
||
1054 | * The returned value corresponds to a llvm::Function value. |
||
1055 | * |
||
1056 | * @see llvm::Module::getFunction() |
||
1057 | */ |
||
1058 | LLVMValueRef LLVMGetNamedFunction(LLVMModuleRef M, const char *Name); |
||
1059 | |||
1060 | /** |
||
1061 | * Obtain an iterator to the first Function in a Module. |
||
1062 | * |
||
1063 | * @see llvm::Module::begin() |
||
1064 | */ |
||
1065 | LLVMValueRef LLVMGetFirstFunction(LLVMModuleRef M); |
||
1066 | |||
1067 | /** |
||
1068 | * Obtain an iterator to the last Function in a Module. |
||
1069 | * |
||
1070 | * @see llvm::Module::end() |
||
1071 | */ |
||
1072 | LLVMValueRef LLVMGetLastFunction(LLVMModuleRef M); |
||
1073 | |||
1074 | /** |
||
1075 | * Advance a Function iterator to the next Function. |
||
1076 | * |
||
1077 | * Returns NULL if the iterator was already at the end and there are no more |
||
1078 | * functions. |
||
1079 | */ |
||
1080 | LLVMValueRef LLVMGetNextFunction(LLVMValueRef Fn); |
||
1081 | |||
1082 | /** |
||
1083 | * Decrement a Function iterator to the previous Function. |
||
1084 | * |
||
1085 | * Returns NULL if the iterator was already at the beginning and there are |
||
1086 | * no previous functions. |
||
1087 | */ |
||
1088 | LLVMValueRef LLVMGetPreviousFunction(LLVMValueRef Fn); |
||
1089 | |||
1090 | /** Deprecated: Use LLVMSetModuleInlineAsm2 instead. */ |
||
1091 | void LLVMSetModuleInlineAsm(LLVMModuleRef M, const char *Asm); |
||
1092 | |||
1093 | /** |
||
1094 | * @} |
||
1095 | */ |
||
1096 | |||
1097 | /** |
||
1098 | * @defgroup LLVMCCoreType Types |
||
1099 | * |
||
1100 | * Types represent the type of a value. |
||
1101 | * |
||
1102 | * Types are associated with a context instance. The context internally |
||
1103 | * deduplicates types so there is only 1 instance of a specific type |
||
1104 | * alive at a time. In other words, a unique type is shared among all |
||
1105 | * consumers within a context. |
||
1106 | * |
||
1107 | * A Type in the C API corresponds to llvm::Type. |
||
1108 | * |
||
1109 | * Types have the following hierarchy: |
||
1110 | * |
||
1111 | * types: |
||
1112 | * integer type |
||
1113 | * real type |
||
1114 | * function type |
||
1115 | * sequence types: |
||
1116 | * array type |
||
1117 | * pointer type |
||
1118 | * vector type |
||
1119 | * void type |
||
1120 | * label type |
||
1121 | * opaque type |
||
1122 | * |
||
1123 | * @{ |
||
1124 | */ |
||
1125 | |||
1126 | /** |
||
1127 | * Obtain the enumerated type of a Type instance. |
||
1128 | * |
||
1129 | * @see llvm::Type:getTypeID() |
||
1130 | */ |
||
1131 | LLVMTypeKind LLVMGetTypeKind(LLVMTypeRef Ty); |
||
1132 | |||
1133 | /** |
||
1134 | * Whether the type has a known size. |
||
1135 | * |
||
1136 | * Things that don't have a size are abstract types, labels, and void.a |
||
1137 | * |
||
1138 | * @see llvm::Type::isSized() |
||
1139 | */ |
||
1140 | LLVMBool LLVMTypeIsSized(LLVMTypeRef Ty); |
||
1141 | |||
1142 | /** |
||
1143 | * Obtain the context to which this type instance is associated. |
||
1144 | * |
||
1145 | * @see llvm::Type::getContext() |
||
1146 | */ |
||
1147 | LLVMContextRef LLVMGetTypeContext(LLVMTypeRef Ty); |
||
1148 | |||
1149 | /** |
||
1150 | * Dump a representation of a type to stderr. |
||
1151 | * |
||
1152 | * @see llvm::Type::dump() |
||
1153 | */ |
||
1154 | void LLVMDumpType(LLVMTypeRef Val); |
||
1155 | |||
1156 | /** |
||
1157 | * Return a string representation of the type. Use |
||
1158 | * LLVMDisposeMessage to free the string. |
||
1159 | * |
||
1160 | * @see llvm::Type::print() |
||
1161 | */ |
||
1162 | char *LLVMPrintTypeToString(LLVMTypeRef Val); |
||
1163 | |||
1164 | /** |
||
1165 | * @defgroup LLVMCCoreTypeInt Integer Types |
||
1166 | * |
||
1167 | * Functions in this section operate on integer types. |
||
1168 | * |
||
1169 | * @{ |
||
1170 | */ |
||
1171 | |||
1172 | /** |
||
1173 | * Obtain an integer type from a context with specified bit width. |
||
1174 | */ |
||
1175 | LLVMTypeRef LLVMInt1TypeInContext(LLVMContextRef C); |
||
1176 | LLVMTypeRef LLVMInt8TypeInContext(LLVMContextRef C); |
||
1177 | LLVMTypeRef LLVMInt16TypeInContext(LLVMContextRef C); |
||
1178 | LLVMTypeRef LLVMInt32TypeInContext(LLVMContextRef C); |
||
1179 | LLVMTypeRef LLVMInt64TypeInContext(LLVMContextRef C); |
||
1180 | LLVMTypeRef LLVMInt128TypeInContext(LLVMContextRef C); |
||
1181 | LLVMTypeRef LLVMIntTypeInContext(LLVMContextRef C, unsigned NumBits); |
||
1182 | |||
1183 | /** |
||
1184 | * Obtain an integer type from the global context with a specified bit |
||
1185 | * width. |
||
1186 | */ |
||
1187 | LLVMTypeRef LLVMInt1Type(void); |
||
1188 | LLVMTypeRef LLVMInt8Type(void); |
||
1189 | LLVMTypeRef LLVMInt16Type(void); |
||
1190 | LLVMTypeRef LLVMInt32Type(void); |
||
1191 | LLVMTypeRef LLVMInt64Type(void); |
||
1192 | LLVMTypeRef LLVMInt128Type(void); |
||
1193 | LLVMTypeRef LLVMIntType(unsigned NumBits); |
||
1194 | unsigned LLVMGetIntTypeWidth(LLVMTypeRef IntegerTy); |
||
1195 | |||
1196 | /** |
||
1197 | * @} |
||
1198 | */ |
||
1199 | |||
1200 | /** |
||
1201 | * @defgroup LLVMCCoreTypeFloat Floating Point Types |
||
1202 | * |
||
1203 | * @{ |
||
1204 | */ |
||
1205 | |||
1206 | /** |
||
1207 | * Obtain a 16-bit floating point type from a context. |
||
1208 | */ |
||
1209 | LLVMTypeRef LLVMHalfTypeInContext(LLVMContextRef C); |
||
1210 | |||
1211 | /** |
||
1212 | * Obtain a 16-bit brain floating point type from a context. |
||
1213 | */ |
||
1214 | LLVMTypeRef LLVMBFloatTypeInContext(LLVMContextRef C); |
||
1215 | |||
1216 | /** |
||
1217 | * Obtain a 32-bit floating point type from a context. |
||
1218 | */ |
||
1219 | LLVMTypeRef LLVMFloatTypeInContext(LLVMContextRef C); |
||
1220 | |||
1221 | /** |
||
1222 | * Obtain a 64-bit floating point type from a context. |
||
1223 | */ |
||
1224 | LLVMTypeRef LLVMDoubleTypeInContext(LLVMContextRef C); |
||
1225 | |||
1226 | /** |
||
1227 | * Obtain a 80-bit floating point type (X87) from a context. |
||
1228 | */ |
||
1229 | LLVMTypeRef LLVMX86FP80TypeInContext(LLVMContextRef C); |
||
1230 | |||
1231 | /** |
||
1232 | * Obtain a 128-bit floating point type (112-bit mantissa) from a |
||
1233 | * context. |
||
1234 | */ |
||
1235 | LLVMTypeRef LLVMFP128TypeInContext(LLVMContextRef C); |
||
1236 | |||
1237 | /** |
||
1238 | * Obtain a 128-bit floating point type (two 64-bits) from a context. |
||
1239 | */ |
||
1240 | LLVMTypeRef LLVMPPCFP128TypeInContext(LLVMContextRef C); |
||
1241 | |||
1242 | /** |
||
1243 | * Obtain a floating point type from the global context. |
||
1244 | * |
||
1245 | * These map to the functions in this group of the same name. |
||
1246 | */ |
||
1247 | LLVMTypeRef LLVMHalfType(void); |
||
1248 | LLVMTypeRef LLVMBFloatType(void); |
||
1249 | LLVMTypeRef LLVMFloatType(void); |
||
1250 | LLVMTypeRef LLVMDoubleType(void); |
||
1251 | LLVMTypeRef LLVMX86FP80Type(void); |
||
1252 | LLVMTypeRef LLVMFP128Type(void); |
||
1253 | LLVMTypeRef LLVMPPCFP128Type(void); |
||
1254 | |||
1255 | /** |
||
1256 | * @} |
||
1257 | */ |
||
1258 | |||
1259 | /** |
||
1260 | * @defgroup LLVMCCoreTypeFunction Function Types |
||
1261 | * |
||
1262 | * @{ |
||
1263 | */ |
||
1264 | |||
1265 | /** |
||
1266 | * Obtain a function type consisting of a specified signature. |
||
1267 | * |
||
1268 | * The function is defined as a tuple of a return Type, a list of |
||
1269 | * parameter types, and whether the function is variadic. |
||
1270 | */ |
||
1271 | LLVMTypeRef LLVMFunctionType(LLVMTypeRef ReturnType, |
||
1272 | LLVMTypeRef *ParamTypes, unsigned ParamCount, |
||
1273 | LLVMBool IsVarArg); |
||
1274 | |||
1275 | /** |
||
1276 | * Returns whether a function type is variadic. |
||
1277 | */ |
||
1278 | LLVMBool LLVMIsFunctionVarArg(LLVMTypeRef FunctionTy); |
||
1279 | |||
1280 | /** |
||
1281 | * Obtain the Type this function Type returns. |
||
1282 | */ |
||
1283 | LLVMTypeRef LLVMGetReturnType(LLVMTypeRef FunctionTy); |
||
1284 | |||
1285 | /** |
||
1286 | * Obtain the number of parameters this function accepts. |
||
1287 | */ |
||
1288 | unsigned LLVMCountParamTypes(LLVMTypeRef FunctionTy); |
||
1289 | |||
1290 | /** |
||
1291 | * Obtain the types of a function's parameters. |
||
1292 | * |
||
1293 | * The Dest parameter should point to a pre-allocated array of |
||
1294 | * LLVMTypeRef at least LLVMCountParamTypes() large. On return, the |
||
1295 | * first LLVMCountParamTypes() entries in the array will be populated |
||
1296 | * with LLVMTypeRef instances. |
||
1297 | * |
||
1298 | * @param FunctionTy The function type to operate on. |
||
1299 | * @param Dest Memory address of an array to be filled with result. |
||
1300 | */ |
||
1301 | void LLVMGetParamTypes(LLVMTypeRef FunctionTy, LLVMTypeRef *Dest); |
||
1302 | |||
1303 | /** |
||
1304 | * @} |
||
1305 | */ |
||
1306 | |||
1307 | /** |
||
1308 | * @defgroup LLVMCCoreTypeStruct Structure Types |
||
1309 | * |
||
1310 | * These functions relate to LLVMTypeRef instances. |
||
1311 | * |
||
1312 | * @see llvm::StructType |
||
1313 | * |
||
1314 | * @{ |
||
1315 | */ |
||
1316 | |||
1317 | /** |
||
1318 | * Create a new structure type in a context. |
||
1319 | * |
||
1320 | * A structure is specified by a list of inner elements/types and |
||
1321 | * whether these can be packed together. |
||
1322 | * |
||
1323 | * @see llvm::StructType::create() |
||
1324 | */ |
||
1325 | LLVMTypeRef LLVMStructTypeInContext(LLVMContextRef C, LLVMTypeRef *ElementTypes, |
||
1326 | unsigned ElementCount, LLVMBool Packed); |
||
1327 | |||
1328 | /** |
||
1329 | * Create a new structure type in the global context. |
||
1330 | * |
||
1331 | * @see llvm::StructType::create() |
||
1332 | */ |
||
1333 | LLVMTypeRef LLVMStructType(LLVMTypeRef *ElementTypes, unsigned ElementCount, |
||
1334 | LLVMBool Packed); |
||
1335 | |||
1336 | /** |
||
1337 | * Create an empty structure in a context having a specified name. |
||
1338 | * |
||
1339 | * @see llvm::StructType::create() |
||
1340 | */ |
||
1341 | LLVMTypeRef LLVMStructCreateNamed(LLVMContextRef C, const char *Name); |
||
1342 | |||
1343 | /** |
||
1344 | * Obtain the name of a structure. |
||
1345 | * |
||
1346 | * @see llvm::StructType::getName() |
||
1347 | */ |
||
1348 | const char *LLVMGetStructName(LLVMTypeRef Ty); |
||
1349 | |||
1350 | /** |
||
1351 | * Set the contents of a structure type. |
||
1352 | * |
||
1353 | * @see llvm::StructType::setBody() |
||
1354 | */ |
||
1355 | void LLVMStructSetBody(LLVMTypeRef StructTy, LLVMTypeRef *ElementTypes, |
||
1356 | unsigned ElementCount, LLVMBool Packed); |
||
1357 | |||
1358 | /** |
||
1359 | * Get the number of elements defined inside the structure. |
||
1360 | * |
||
1361 | * @see llvm::StructType::getNumElements() |
||
1362 | */ |
||
1363 | unsigned LLVMCountStructElementTypes(LLVMTypeRef StructTy); |
||
1364 | |||
1365 | /** |
||
1366 | * Get the elements within a structure. |
||
1367 | * |
||
1368 | * The function is passed the address of a pre-allocated array of |
||
1369 | * LLVMTypeRef at least LLVMCountStructElementTypes() long. After |
||
1370 | * invocation, this array will be populated with the structure's |
||
1371 | * elements. The objects in the destination array will have a lifetime |
||
1372 | * of the structure type itself, which is the lifetime of the context it |
||
1373 | * is contained in. |
||
1374 | */ |
||
1375 | void LLVMGetStructElementTypes(LLVMTypeRef StructTy, LLVMTypeRef *Dest); |
||
1376 | |||
1377 | /** |
||
1378 | * Get the type of the element at a given index in the structure. |
||
1379 | * |
||
1380 | * @see llvm::StructType::getTypeAtIndex() |
||
1381 | */ |
||
1382 | LLVMTypeRef LLVMStructGetTypeAtIndex(LLVMTypeRef StructTy, unsigned i); |
||
1383 | |||
1384 | /** |
||
1385 | * Determine whether a structure is packed. |
||
1386 | * |
||
1387 | * @see llvm::StructType::isPacked() |
||
1388 | */ |
||
1389 | LLVMBool LLVMIsPackedStruct(LLVMTypeRef StructTy); |
||
1390 | |||
1391 | /** |
||
1392 | * Determine whether a structure is opaque. |
||
1393 | * |
||
1394 | * @see llvm::StructType::isOpaque() |
||
1395 | */ |
||
1396 | LLVMBool LLVMIsOpaqueStruct(LLVMTypeRef StructTy); |
||
1397 | |||
1398 | /** |
||
1399 | * Determine whether a structure is literal. |
||
1400 | * |
||
1401 | * @see llvm::StructType::isLiteral() |
||
1402 | */ |
||
1403 | LLVMBool LLVMIsLiteralStruct(LLVMTypeRef StructTy); |
||
1404 | |||
1405 | /** |
||
1406 | * @} |
||
1407 | */ |
||
1408 | |||
1409 | /** |
||
1410 | * @defgroup LLVMCCoreTypeSequential Sequential Types |
||
1411 | * |
||
1412 | * Sequential types represents "arrays" of types. This is a super class |
||
1413 | * for array, vector, and pointer types. |
||
1414 | * |
||
1415 | * @{ |
||
1416 | */ |
||
1417 | |||
1418 | /** |
||
1419 | * Obtain the element type of an array or vector type. |
||
1420 | * |
||
1421 | * This currently also works for pointer types, but this usage is deprecated. |
||
1422 | * |
||
1423 | * @see llvm::SequentialType::getElementType() |
||
1424 | */ |
||
1425 | LLVMTypeRef LLVMGetElementType(LLVMTypeRef Ty); |
||
1426 | |||
1427 | /** |
||
1428 | * Returns type's subtypes |
||
1429 | * |
||
1430 | * @see llvm::Type::subtypes() |
||
1431 | */ |
||
1432 | void LLVMGetSubtypes(LLVMTypeRef Tp, LLVMTypeRef *Arr); |
||
1433 | |||
1434 | /** |
||
1435 | * Return the number of types in the derived type. |
||
1436 | * |
||
1437 | * @see llvm::Type::getNumContainedTypes() |
||
1438 | */ |
||
1439 | unsigned LLVMGetNumContainedTypes(LLVMTypeRef Tp); |
||
1440 | |||
1441 | /** |
||
1442 | * Create a fixed size array type that refers to a specific type. |
||
1443 | * |
||
1444 | * The created type will exist in the context that its element type |
||
1445 | * exists in. |
||
1446 | * |
||
1447 | * @see llvm::ArrayType::get() |
||
1448 | */ |
||
1449 | LLVMTypeRef LLVMArrayType(LLVMTypeRef ElementType, unsigned ElementCount); |
||
1450 | |||
1451 | /** |
||
1452 | * Obtain the length of an array type. |
||
1453 | * |
||
1454 | * This only works on types that represent arrays. |
||
1455 | * |
||
1456 | * @see llvm::ArrayType::getNumElements() |
||
1457 | */ |
||
1458 | unsigned LLVMGetArrayLength(LLVMTypeRef ArrayTy); |
||
1459 | |||
1460 | /** |
||
1461 | * Create a pointer type that points to a defined type. |
||
1462 | * |
||
1463 | * The created type will exist in the context that its pointee type |
||
1464 | * exists in. |
||
1465 | * |
||
1466 | * @see llvm::PointerType::get() |
||
1467 | */ |
||
1468 | LLVMTypeRef LLVMPointerType(LLVMTypeRef ElementType, unsigned AddressSpace); |
||
1469 | |||
1470 | /** |
||
1471 | * Determine whether a pointer is opaque. |
||
1472 | * |
||
1473 | * True if this is an instance of an opaque PointerType. |
||
1474 | * |
||
1475 | * @see llvm::Type::isOpaquePointerTy() |
||
1476 | */ |
||
1477 | LLVMBool LLVMPointerTypeIsOpaque(LLVMTypeRef Ty); |
||
1478 | |||
1479 | /** |
||
1480 | * Create an opaque pointer type in a context. |
||
1481 | * |
||
1482 | * @see llvm::PointerType::get() |
||
1483 | */ |
||
1484 | LLVMTypeRef LLVMPointerTypeInContext(LLVMContextRef C, unsigned AddressSpace); |
||
1485 | |||
1486 | /** |
||
1487 | * Obtain the address space of a pointer type. |
||
1488 | * |
||
1489 | * This only works on types that represent pointers. |
||
1490 | * |
||
1491 | * @see llvm::PointerType::getAddressSpace() |
||
1492 | */ |
||
1493 | unsigned LLVMGetPointerAddressSpace(LLVMTypeRef PointerTy); |
||
1494 | |||
1495 | /** |
||
1496 | * Create a vector type that contains a defined type and has a specific |
||
1497 | * number of elements. |
||
1498 | * |
||
1499 | * The created type will exist in the context thats its element type |
||
1500 | * exists in. |
||
1501 | * |
||
1502 | * @see llvm::VectorType::get() |
||
1503 | */ |
||
1504 | LLVMTypeRef LLVMVectorType(LLVMTypeRef ElementType, unsigned ElementCount); |
||
1505 | |||
1506 | /** |
||
1507 | * Create a vector type that contains a defined type and has a scalable |
||
1508 | * number of elements. |
||
1509 | * |
||
1510 | * The created type will exist in the context thats its element type |
||
1511 | * exists in. |
||
1512 | * |
||
1513 | * @see llvm::ScalableVectorType::get() |
||
1514 | */ |
||
1515 | LLVMTypeRef LLVMScalableVectorType(LLVMTypeRef ElementType, |
||
1516 | unsigned ElementCount); |
||
1517 | |||
1518 | /** |
||
1519 | * Obtain the (possibly scalable) number of elements in a vector type. |
||
1520 | * |
||
1521 | * This only works on types that represent vectors (fixed or scalable). |
||
1522 | * |
||
1523 | * @see llvm::VectorType::getNumElements() |
||
1524 | */ |
||
1525 | unsigned LLVMGetVectorSize(LLVMTypeRef VectorTy); |
||
1526 | |||
1527 | /** |
||
1528 | * @} |
||
1529 | */ |
||
1530 | |||
1531 | /** |
||
1532 | * @defgroup LLVMCCoreTypeOther Other Types |
||
1533 | * |
||
1534 | * @{ |
||
1535 | */ |
||
1536 | |||
1537 | /** |
||
1538 | * Create a void type in a context. |
||
1539 | */ |
||
1540 | LLVMTypeRef LLVMVoidTypeInContext(LLVMContextRef C); |
||
1541 | |||
1542 | /** |
||
1543 | * Create a label type in a context. |
||
1544 | */ |
||
1545 | LLVMTypeRef LLVMLabelTypeInContext(LLVMContextRef C); |
||
1546 | |||
1547 | /** |
||
1548 | * Create a X86 MMX type in a context. |
||
1549 | */ |
||
1550 | LLVMTypeRef LLVMX86MMXTypeInContext(LLVMContextRef C); |
||
1551 | |||
1552 | /** |
||
1553 | * Create a X86 AMX type in a context. |
||
1554 | */ |
||
1555 | LLVMTypeRef LLVMX86AMXTypeInContext(LLVMContextRef C); |
||
1556 | |||
1557 | /** |
||
1558 | * Create a token type in a context. |
||
1559 | */ |
||
1560 | LLVMTypeRef LLVMTokenTypeInContext(LLVMContextRef C); |
||
1561 | |||
1562 | /** |
||
1563 | * Create a metadata type in a context. |
||
1564 | */ |
||
1565 | LLVMTypeRef LLVMMetadataTypeInContext(LLVMContextRef C); |
||
1566 | |||
1567 | /** |
||
1568 | * These are similar to the above functions except they operate on the |
||
1569 | * global context. |
||
1570 | */ |
||
1571 | LLVMTypeRef LLVMVoidType(void); |
||
1572 | LLVMTypeRef LLVMLabelType(void); |
||
1573 | LLVMTypeRef LLVMX86MMXType(void); |
||
1574 | LLVMTypeRef LLVMX86AMXType(void); |
||
1575 | |||
1576 | /** |
||
1577 | * Create a target extension type in LLVM context. |
||
1578 | */ |
||
1579 | LLVMTypeRef LLVMTargetExtTypeInContext(LLVMContextRef C, const char *Name, |
||
1580 | LLVMTypeRef *TypeParams, |
||
1581 | unsigned TypeParamCount, |
||
1582 | unsigned *IntParams, |
||
1583 | unsigned IntParamCount); |
||
1584 | |||
1585 | /** |
||
1586 | * @} |
||
1587 | */ |
||
1588 | |||
1589 | /** |
||
1590 | * @} |
||
1591 | */ |
||
1592 | |||
1593 | /** |
||
1594 | * @defgroup LLVMCCoreValues Values |
||
1595 | * |
||
1596 | * The bulk of LLVM's object model consists of values, which comprise a very |
||
1597 | * rich type hierarchy. |
||
1598 | * |
||
1599 | * LLVMValueRef essentially represents llvm::Value. There is a rich |
||
1600 | * hierarchy of classes within this type. Depending on the instance |
||
1601 | * obtained, not all APIs are available. |
||
1602 | * |
||
1603 | * Callers can determine the type of an LLVMValueRef by calling the |
||
1604 | * LLVMIsA* family of functions (e.g. LLVMIsAArgument()). These |
||
1605 | * functions are defined by a macro, so it isn't obvious which are |
||
1606 | * available by looking at the Doxygen source code. Instead, look at the |
||
1607 | * source definition of LLVM_FOR_EACH_VALUE_SUBCLASS and note the list |
||
1608 | * of value names given. These value names also correspond to classes in |
||
1609 | * the llvm::Value hierarchy. |
||
1610 | * |
||
1611 | * @{ |
||
1612 | */ |
||
1613 | |||
1614 | #define LLVM_FOR_EACH_VALUE_SUBCLASS(macro) \ |
||
1615 | macro(Argument) \ |
||
1616 | macro(BasicBlock) \ |
||
1617 | macro(InlineAsm) \ |
||
1618 | macro(User) \ |
||
1619 | macro(Constant) \ |
||
1620 | macro(BlockAddress) \ |
||
1621 | macro(ConstantAggregateZero) \ |
||
1622 | macro(ConstantArray) \ |
||
1623 | macro(ConstantDataSequential) \ |
||
1624 | macro(ConstantDataArray) \ |
||
1625 | macro(ConstantDataVector) \ |
||
1626 | macro(ConstantExpr) \ |
||
1627 | macro(ConstantFP) \ |
||
1628 | macro(ConstantInt) \ |
||
1629 | macro(ConstantPointerNull) \ |
||
1630 | macro(ConstantStruct) \ |
||
1631 | macro(ConstantTokenNone) \ |
||
1632 | macro(ConstantVector) \ |
||
1633 | macro(GlobalValue) \ |
||
1634 | macro(GlobalAlias) \ |
||
1635 | macro(GlobalObject) \ |
||
1636 | macro(Function) \ |
||
1637 | macro(GlobalVariable) \ |
||
1638 | macro(GlobalIFunc) \ |
||
1639 | macro(UndefValue) \ |
||
1640 | macro(PoisonValue) \ |
||
1641 | macro(Instruction) \ |
||
1642 | macro(UnaryOperator) \ |
||
1643 | macro(BinaryOperator) \ |
||
1644 | macro(CallInst) \ |
||
1645 | macro(IntrinsicInst) \ |
||
1646 | macro(DbgInfoIntrinsic) \ |
||
1647 | macro(DbgVariableIntrinsic) \ |
||
1648 | macro(DbgDeclareInst) \ |
||
1649 | macro(DbgLabelInst) \ |
||
1650 | macro(MemIntrinsic) \ |
||
1651 | macro(MemCpyInst) \ |
||
1652 | macro(MemMoveInst) \ |
||
1653 | macro(MemSetInst) \ |
||
1654 | macro(CmpInst) \ |
||
1655 | macro(FCmpInst) \ |
||
1656 | macro(ICmpInst) \ |
||
1657 | macro(ExtractElementInst) \ |
||
1658 | macro(GetElementPtrInst) \ |
||
1659 | macro(InsertElementInst) \ |
||
1660 | macro(InsertValueInst) \ |
||
1661 | macro(LandingPadInst) \ |
||
1662 | macro(PHINode) \ |
||
1663 | macro(SelectInst) \ |
||
1664 | macro(ShuffleVectorInst) \ |
||
1665 | macro(StoreInst) \ |
||
1666 | macro(BranchInst) \ |
||
1667 | macro(IndirectBrInst) \ |
||
1668 | macro(InvokeInst) \ |
||
1669 | macro(ReturnInst) \ |
||
1670 | macro(SwitchInst) \ |
||
1671 | macro(UnreachableInst) \ |
||
1672 | macro(ResumeInst) \ |
||
1673 | macro(CleanupReturnInst) \ |
||
1674 | macro(CatchReturnInst) \ |
||
1675 | macro(CatchSwitchInst) \ |
||
1676 | macro(CallBrInst) \ |
||
1677 | macro(FuncletPadInst) \ |
||
1678 | macro(CatchPadInst) \ |
||
1679 | macro(CleanupPadInst) \ |
||
1680 | macro(UnaryInstruction) \ |
||
1681 | macro(AllocaInst) \ |
||
1682 | macro(CastInst) \ |
||
1683 | macro(AddrSpaceCastInst) \ |
||
1684 | macro(BitCastInst) \ |
||
1685 | macro(FPExtInst) \ |
||
1686 | macro(FPToSIInst) \ |
||
1687 | macro(FPToUIInst) \ |
||
1688 | macro(FPTruncInst) \ |
||
1689 | macro(IntToPtrInst) \ |
||
1690 | macro(PtrToIntInst) \ |
||
1691 | macro(SExtInst) \ |
||
1692 | macro(SIToFPInst) \ |
||
1693 | macro(TruncInst) \ |
||
1694 | macro(UIToFPInst) \ |
||
1695 | macro(ZExtInst) \ |
||
1696 | macro(ExtractValueInst) \ |
||
1697 | macro(LoadInst) \ |
||
1698 | macro(VAArgInst) \ |
||
1699 | macro(FreezeInst) \ |
||
1700 | macro(AtomicCmpXchgInst) \ |
||
1701 | macro(AtomicRMWInst) \ |
||
1702 | macro(FenceInst) |
||
1703 | |||
1704 | /** |
||
1705 | * @defgroup LLVMCCoreValueGeneral General APIs |
||
1706 | * |
||
1707 | * Functions in this section work on all LLVMValueRef instances, |
||
1708 | * regardless of their sub-type. They correspond to functions available |
||
1709 | * on llvm::Value. |
||
1710 | * |
||
1711 | * @{ |
||
1712 | */ |
||
1713 | |||
1714 | /** |
||
1715 | * Obtain the type of a value. |
||
1716 | * |
||
1717 | * @see llvm::Value::getType() |
||
1718 | */ |
||
1719 | LLVMTypeRef LLVMTypeOf(LLVMValueRef Val); |
||
1720 | |||
1721 | /** |
||
1722 | * Obtain the enumerated type of a Value instance. |
||
1723 | * |
||
1724 | * @see llvm::Value::getValueID() |
||
1725 | */ |
||
1726 | LLVMValueKind LLVMGetValueKind(LLVMValueRef Val); |
||
1727 | |||
1728 | /** |
||
1729 | * Obtain the string name of a value. |
||
1730 | * |
||
1731 | * @see llvm::Value::getName() |
||
1732 | */ |
||
1733 | const char *LLVMGetValueName2(LLVMValueRef Val, size_t *Length); |
||
1734 | |||
1735 | /** |
||
1736 | * Set the string name of a value. |
||
1737 | * |
||
1738 | * @see llvm::Value::setName() |
||
1739 | */ |
||
1740 | void LLVMSetValueName2(LLVMValueRef Val, const char *Name, size_t NameLen); |
||
1741 | |||
1742 | /** |
||
1743 | * Dump a representation of a value to stderr. |
||
1744 | * |
||
1745 | * @see llvm::Value::dump() |
||
1746 | */ |
||
1747 | void LLVMDumpValue(LLVMValueRef Val); |
||
1748 | |||
1749 | /** |
||
1750 | * Return a string representation of the value. Use |
||
1751 | * LLVMDisposeMessage to free the string. |
||
1752 | * |
||
1753 | * @see llvm::Value::print() |
||
1754 | */ |
||
1755 | char *LLVMPrintValueToString(LLVMValueRef Val); |
||
1756 | |||
1757 | /** |
||
1758 | * Replace all uses of a value with another one. |
||
1759 | * |
||
1760 | * @see llvm::Value::replaceAllUsesWith() |
||
1761 | */ |
||
1762 | void LLVMReplaceAllUsesWith(LLVMValueRef OldVal, LLVMValueRef NewVal); |
||
1763 | |||
1764 | /** |
||
1765 | * Determine whether the specified value instance is constant. |
||
1766 | */ |
||
1767 | LLVMBool LLVMIsConstant(LLVMValueRef Val); |
||
1768 | |||
1769 | /** |
||
1770 | * Determine whether a value instance is undefined. |
||
1771 | */ |
||
1772 | LLVMBool LLVMIsUndef(LLVMValueRef Val); |
||
1773 | |||
1774 | /** |
||
1775 | * Determine whether a value instance is poisonous. |
||
1776 | */ |
||
1777 | LLVMBool LLVMIsPoison(LLVMValueRef Val); |
||
1778 | |||
1779 | /** |
||
1780 | * Convert value instances between types. |
||
1781 | * |
||
1782 | * Internally, an LLVMValueRef is "pinned" to a specific type. This |
||
1783 | * series of functions allows you to cast an instance to a specific |
||
1784 | * type. |
||
1785 | * |
||
1786 | * If the cast is not valid for the specified type, NULL is returned. |
||
1787 | * |
||
1788 | * @see llvm::dyn_cast_or_null<> |
||
1789 | */ |
||
1790 | #define LLVM_DECLARE_VALUE_CAST(name) \ |
||
1791 | LLVMValueRef LLVMIsA##name(LLVMValueRef Val); |
||
1792 | LLVM_FOR_EACH_VALUE_SUBCLASS(LLVM_DECLARE_VALUE_CAST) |
||
1793 | |||
1794 | LLVMValueRef LLVMIsAMDNode(LLVMValueRef Val); |
||
1795 | LLVMValueRef LLVMIsAMDString(LLVMValueRef Val); |
||
1796 | |||
1797 | /** Deprecated: Use LLVMGetValueName2 instead. */ |
||
1798 | const char *LLVMGetValueName(LLVMValueRef Val); |
||
1799 | /** Deprecated: Use LLVMSetValueName2 instead. */ |
||
1800 | void LLVMSetValueName(LLVMValueRef Val, const char *Name); |
||
1801 | |||
1802 | /** |
||
1803 | * @} |
||
1804 | */ |
||
1805 | |||
1806 | /** |
||
1807 | * @defgroup LLVMCCoreValueUses Usage |
||
1808 | * |
||
1809 | * This module defines functions that allow you to inspect the uses of a |
||
1810 | * LLVMValueRef. |
||
1811 | * |
||
1812 | * It is possible to obtain an LLVMUseRef for any LLVMValueRef instance. |
||
1813 | * Each LLVMUseRef (which corresponds to a llvm::Use instance) holds a |
||
1814 | * llvm::User and llvm::Value. |
||
1815 | * |
||
1816 | * @{ |
||
1817 | */ |
||
1818 | |||
1819 | /** |
||
1820 | * Obtain the first use of a value. |
||
1821 | * |
||
1822 | * Uses are obtained in an iterator fashion. First, call this function |
||
1823 | * to obtain a reference to the first use. Then, call LLVMGetNextUse() |
||
1824 | * on that instance and all subsequently obtained instances until |
||
1825 | * LLVMGetNextUse() returns NULL. |
||
1826 | * |
||
1827 | * @see llvm::Value::use_begin() |
||
1828 | */ |
||
1829 | LLVMUseRef LLVMGetFirstUse(LLVMValueRef Val); |
||
1830 | |||
1831 | /** |
||
1832 | * Obtain the next use of a value. |
||
1833 | * |
||
1834 | * This effectively advances the iterator. It returns NULL if you are on |
||
1835 | * the final use and no more are available. |
||
1836 | */ |
||
1837 | LLVMUseRef LLVMGetNextUse(LLVMUseRef U); |
||
1838 | |||
1839 | /** |
||
1840 | * Obtain the user value for a user. |
||
1841 | * |
||
1842 | * The returned value corresponds to a llvm::User type. |
||
1843 | * |
||
1844 | * @see llvm::Use::getUser() |
||
1845 | */ |
||
1846 | LLVMValueRef LLVMGetUser(LLVMUseRef U); |
||
1847 | |||
1848 | /** |
||
1849 | * Obtain the value this use corresponds to. |
||
1850 | * |
||
1851 | * @see llvm::Use::get(). |
||
1852 | */ |
||
1853 | LLVMValueRef LLVMGetUsedValue(LLVMUseRef U); |
||
1854 | |||
1855 | /** |
||
1856 | * @} |
||
1857 | */ |
||
1858 | |||
1859 | /** |
||
1860 | * @defgroup LLVMCCoreValueUser User value |
||
1861 | * |
||
1862 | * Function in this group pertain to LLVMValueRef instances that descent |
||
1863 | * from llvm::User. This includes constants, instructions, and |
||
1864 | * operators. |
||
1865 | * |
||
1866 | * @{ |
||
1867 | */ |
||
1868 | |||
1869 | /** |
||
1870 | * Obtain an operand at a specific index in a llvm::User value. |
||
1871 | * |
||
1872 | * @see llvm::User::getOperand() |
||
1873 | */ |
||
1874 | LLVMValueRef LLVMGetOperand(LLVMValueRef Val, unsigned Index); |
||
1875 | |||
1876 | /** |
||
1877 | * Obtain the use of an operand at a specific index in a llvm::User value. |
||
1878 | * |
||
1879 | * @see llvm::User::getOperandUse() |
||
1880 | */ |
||
1881 | LLVMUseRef LLVMGetOperandUse(LLVMValueRef Val, unsigned Index); |
||
1882 | |||
1883 | /** |
||
1884 | * Set an operand at a specific index in a llvm::User value. |
||
1885 | * |
||
1886 | * @see llvm::User::setOperand() |
||
1887 | */ |
||
1888 | void LLVMSetOperand(LLVMValueRef User, unsigned Index, LLVMValueRef Val); |
||
1889 | |||
1890 | /** |
||
1891 | * Obtain the number of operands in a llvm::User value. |
||
1892 | * |
||
1893 | * @see llvm::User::getNumOperands() |
||
1894 | */ |
||
1895 | int LLVMGetNumOperands(LLVMValueRef Val); |
||
1896 | |||
1897 | /** |
||
1898 | * @} |
||
1899 | */ |
||
1900 | |||
1901 | /** |
||
1902 | * @defgroup LLVMCCoreValueConstant Constants |
||
1903 | * |
||
1904 | * This section contains APIs for interacting with LLVMValueRef that |
||
1905 | * correspond to llvm::Constant instances. |
||
1906 | * |
||
1907 | * These functions will work for any LLVMValueRef in the llvm::Constant |
||
1908 | * class hierarchy. |
||
1909 | * |
||
1910 | * @{ |
||
1911 | */ |
||
1912 | |||
1913 | /** |
||
1914 | * Obtain a constant value referring to the null instance of a type. |
||
1915 | * |
||
1916 | * @see llvm::Constant::getNullValue() |
||
1917 | */ |
||
1918 | LLVMValueRef LLVMConstNull(LLVMTypeRef Ty); /* all zeroes */ |
||
1919 | |||
1920 | /** |
||
1921 | * Obtain a constant value referring to the instance of a type |
||
1922 | * consisting of all ones. |
||
1923 | * |
||
1924 | * This is only valid for integer types. |
||
1925 | * |
||
1926 | * @see llvm::Constant::getAllOnesValue() |
||
1927 | */ |
||
1928 | LLVMValueRef LLVMConstAllOnes(LLVMTypeRef Ty); |
||
1929 | |||
1930 | /** |
||
1931 | * Obtain a constant value referring to an undefined value of a type. |
||
1932 | * |
||
1933 | * @see llvm::UndefValue::get() |
||
1934 | */ |
||
1935 | LLVMValueRef LLVMGetUndef(LLVMTypeRef Ty); |
||
1936 | |||
1937 | /** |
||
1938 | * Obtain a constant value referring to a poison value of a type. |
||
1939 | * |
||
1940 | * @see llvm::PoisonValue::get() |
||
1941 | */ |
||
1942 | LLVMValueRef LLVMGetPoison(LLVMTypeRef Ty); |
||
1943 | |||
1944 | /** |
||
1945 | * Determine whether a value instance is null. |
||
1946 | * |
||
1947 | * @see llvm::Constant::isNullValue() |
||
1948 | */ |
||
1949 | LLVMBool LLVMIsNull(LLVMValueRef Val); |
||
1950 | |||
1951 | /** |
||
1952 | * Obtain a constant that is a constant pointer pointing to NULL for a |
||
1953 | * specified type. |
||
1954 | */ |
||
1955 | LLVMValueRef LLVMConstPointerNull(LLVMTypeRef Ty); |
||
1956 | |||
1957 | /** |
||
1958 | * @defgroup LLVMCCoreValueConstantScalar Scalar constants |
||
1959 | * |
||
1960 | * Functions in this group model LLVMValueRef instances that correspond |
||
1961 | * to constants referring to scalar types. |
||
1962 | * |
||
1963 | * For integer types, the LLVMTypeRef parameter should correspond to a |
||
1964 | * llvm::IntegerType instance and the returned LLVMValueRef will |
||
1965 | * correspond to a llvm::ConstantInt. |
||
1966 | * |
||
1967 | * For floating point types, the LLVMTypeRef returned corresponds to a |
||
1968 | * llvm::ConstantFP. |
||
1969 | * |
||
1970 | * @{ |
||
1971 | */ |
||
1972 | |||
1973 | /** |
||
1974 | * Obtain a constant value for an integer type. |
||
1975 | * |
||
1976 | * The returned value corresponds to a llvm::ConstantInt. |
||
1977 | * |
||
1978 | * @see llvm::ConstantInt::get() |
||
1979 | * |
||
1980 | * @param IntTy Integer type to obtain value of. |
||
1981 | * @param N The value the returned instance should refer to. |
||
1982 | * @param SignExtend Whether to sign extend the produced value. |
||
1983 | */ |
||
1984 | LLVMValueRef LLVMConstInt(LLVMTypeRef IntTy, unsigned long long N, |
||
1985 | LLVMBool SignExtend); |
||
1986 | |||
1987 | /** |
||
1988 | * Obtain a constant value for an integer of arbitrary precision. |
||
1989 | * |
||
1990 | * @see llvm::ConstantInt::get() |
||
1991 | */ |
||
1992 | LLVMValueRef LLVMConstIntOfArbitraryPrecision(LLVMTypeRef IntTy, |
||
1993 | unsigned NumWords, |
||
1994 | const uint64_t Words[]); |
||
1995 | |||
1996 | /** |
||
1997 | * Obtain a constant value for an integer parsed from a string. |
||
1998 | * |
||
1999 | * A similar API, LLVMConstIntOfStringAndSize is also available. If the |
||
2000 | * string's length is available, it is preferred to call that function |
||
2001 | * instead. |
||
2002 | * |
||
2003 | * @see llvm::ConstantInt::get() |
||
2004 | */ |
||
2005 | LLVMValueRef LLVMConstIntOfString(LLVMTypeRef IntTy, const char *Text, |
||
2006 | uint8_t Radix); |
||
2007 | |||
2008 | /** |
||
2009 | * Obtain a constant value for an integer parsed from a string with |
||
2010 | * specified length. |
||
2011 | * |
||
2012 | * @see llvm::ConstantInt::get() |
||
2013 | */ |
||
2014 | LLVMValueRef LLVMConstIntOfStringAndSize(LLVMTypeRef IntTy, const char *Text, |
||
2015 | unsigned SLen, uint8_t Radix); |
||
2016 | |||
2017 | /** |
||
2018 | * Obtain a constant value referring to a double floating point value. |
||
2019 | */ |
||
2020 | LLVMValueRef LLVMConstReal(LLVMTypeRef RealTy, double N); |
||
2021 | |||
2022 | /** |
||
2023 | * Obtain a constant for a floating point value parsed from a string. |
||
2024 | * |
||
2025 | * A similar API, LLVMConstRealOfStringAndSize is also available. It |
||
2026 | * should be used if the input string's length is known. |
||
2027 | */ |
||
2028 | LLVMValueRef LLVMConstRealOfString(LLVMTypeRef RealTy, const char *Text); |
||
2029 | |||
2030 | /** |
||
2031 | * Obtain a constant for a floating point value parsed from a string. |
||
2032 | */ |
||
2033 | LLVMValueRef LLVMConstRealOfStringAndSize(LLVMTypeRef RealTy, const char *Text, |
||
2034 | unsigned SLen); |
||
2035 | |||
2036 | /** |
||
2037 | * Obtain the zero extended value for an integer constant value. |
||
2038 | * |
||
2039 | * @see llvm::ConstantInt::getZExtValue() |
||
2040 | */ |
||
2041 | unsigned long long LLVMConstIntGetZExtValue(LLVMValueRef ConstantVal); |
||
2042 | |||
2043 | /** |
||
2044 | * Obtain the sign extended value for an integer constant value. |
||
2045 | * |
||
2046 | * @see llvm::ConstantInt::getSExtValue() |
||
2047 | */ |
||
2048 | long long LLVMConstIntGetSExtValue(LLVMValueRef ConstantVal); |
||
2049 | |||
2050 | /** |
||
2051 | * Obtain the double value for an floating point constant value. |
||
2052 | * losesInfo indicates if some precision was lost in the conversion. |
||
2053 | * |
||
2054 | * @see llvm::ConstantFP::getDoubleValue |
||
2055 | */ |
||
2056 | double LLVMConstRealGetDouble(LLVMValueRef ConstantVal, LLVMBool *losesInfo); |
||
2057 | |||
2058 | /** |
||
2059 | * @} |
||
2060 | */ |
||
2061 | |||
2062 | /** |
||
2063 | * @defgroup LLVMCCoreValueConstantComposite Composite Constants |
||
2064 | * |
||
2065 | * Functions in this group operate on composite constants. |
||
2066 | * |
||
2067 | * @{ |
||
2068 | */ |
||
2069 | |||
2070 | /** |
||
2071 | * Create a ConstantDataSequential and initialize it with a string. |
||
2072 | * |
||
2073 | * @see llvm::ConstantDataArray::getString() |
||
2074 | */ |
||
2075 | LLVMValueRef LLVMConstStringInContext(LLVMContextRef C, const char *Str, |
||
2076 | unsigned Length, LLVMBool DontNullTerminate); |
||
2077 | |||
2078 | /** |
||
2079 | * Create a ConstantDataSequential with string content in the global context. |
||
2080 | * |
||
2081 | * This is the same as LLVMConstStringInContext except it operates on the |
||
2082 | * global context. |
||
2083 | * |
||
2084 | * @see LLVMConstStringInContext() |
||
2085 | * @see llvm::ConstantDataArray::getString() |
||
2086 | */ |
||
2087 | LLVMValueRef LLVMConstString(const char *Str, unsigned Length, |
||
2088 | LLVMBool DontNullTerminate); |
||
2089 | |||
2090 | /** |
||
2091 | * Returns true if the specified constant is an array of i8. |
||
2092 | * |
||
2093 | * @see ConstantDataSequential::getAsString() |
||
2094 | */ |
||
2095 | LLVMBool LLVMIsConstantString(LLVMValueRef c); |
||
2096 | |||
2097 | /** |
||
2098 | * Get the given constant data sequential as a string. |
||
2099 | * |
||
2100 | * @see ConstantDataSequential::getAsString() |
||
2101 | */ |
||
2102 | const char *LLVMGetAsString(LLVMValueRef c, size_t *Length); |
||
2103 | |||
2104 | /** |
||
2105 | * Create an anonymous ConstantStruct with the specified values. |
||
2106 | * |
||
2107 | * @see llvm::ConstantStruct::getAnon() |
||
2108 | */ |
||
2109 | LLVMValueRef LLVMConstStructInContext(LLVMContextRef C, |
||
2110 | LLVMValueRef *ConstantVals, |
||
2111 | unsigned Count, LLVMBool Packed); |
||
2112 | |||
2113 | /** |
||
2114 | * Create a ConstantStruct in the global Context. |
||
2115 | * |
||
2116 | * This is the same as LLVMConstStructInContext except it operates on the |
||
2117 | * global Context. |
||
2118 | * |
||
2119 | * @see LLVMConstStructInContext() |
||
2120 | */ |
||
2121 | LLVMValueRef LLVMConstStruct(LLVMValueRef *ConstantVals, unsigned Count, |
||
2122 | LLVMBool Packed); |
||
2123 | |||
2124 | /** |
||
2125 | * Create a ConstantArray from values. |
||
2126 | * |
||
2127 | * @see llvm::ConstantArray::get() |
||
2128 | */ |
||
2129 | LLVMValueRef LLVMConstArray(LLVMTypeRef ElementTy, |
||
2130 | LLVMValueRef *ConstantVals, unsigned Length); |
||
2131 | |||
2132 | /** |
||
2133 | * Create a non-anonymous ConstantStruct from values. |
||
2134 | * |
||
2135 | * @see llvm::ConstantStruct::get() |
||
2136 | */ |
||
2137 | LLVMValueRef LLVMConstNamedStruct(LLVMTypeRef StructTy, |
||
2138 | LLVMValueRef *ConstantVals, |
||
2139 | unsigned Count); |
||
2140 | |||
2141 | /** |
||
2142 | * Get element of a constant aggregate (struct, array or vector) at the |
||
2143 | * specified index. Returns null if the index is out of range, or it's not |
||
2144 | * possible to determine the element (e.g., because the constant is a |
||
2145 | * constant expression.) |
||
2146 | * |
||
2147 | * @see llvm::Constant::getAggregateElement() |
||
2148 | */ |
||
2149 | LLVMValueRef LLVMGetAggregateElement(LLVMValueRef C, unsigned Idx); |
||
2150 | |||
2151 | /** |
||
2152 | * Get an element at specified index as a constant. |
||
2153 | * |
||
2154 | * @see ConstantDataSequential::getElementAsConstant() |
||
2155 | */ |
||
2156 | LLVM_ATTRIBUTE_C_DEPRECATED( |
||
2157 | LLVMValueRef LLVMGetElementAsConstant(LLVMValueRef C, unsigned idx), |
||
2158 | "Use LLVMGetAggregateElement instead"); |
||
2159 | |||
2160 | /** |
||
2161 | * Create a ConstantVector from values. |
||
2162 | * |
||
2163 | * @see llvm::ConstantVector::get() |
||
2164 | */ |
||
2165 | LLVMValueRef LLVMConstVector(LLVMValueRef *ScalarConstantVals, unsigned Size); |
||
2166 | |||
2167 | /** |
||
2168 | * @} |
||
2169 | */ |
||
2170 | |||
2171 | /** |
||
2172 | * @defgroup LLVMCCoreValueConstantExpressions Constant Expressions |
||
2173 | * |
||
2174 | * Functions in this group correspond to APIs on llvm::ConstantExpr. |
||
2175 | * |
||
2176 | * @see llvm::ConstantExpr. |
||
2177 | * |
||
2178 | * @{ |
||
2179 | */ |
||
2180 | LLVMOpcode LLVMGetConstOpcode(LLVMValueRef ConstantVal); |
||
2181 | LLVMValueRef LLVMAlignOf(LLVMTypeRef Ty); |
||
2182 | LLVMValueRef LLVMSizeOf(LLVMTypeRef Ty); |
||
2183 | LLVMValueRef LLVMConstNeg(LLVMValueRef ConstantVal); |
||
2184 | LLVMValueRef LLVMConstNSWNeg(LLVMValueRef ConstantVal); |
||
2185 | LLVMValueRef LLVMConstNUWNeg(LLVMValueRef ConstantVal); |
||
2186 | LLVMValueRef LLVMConstNot(LLVMValueRef ConstantVal); |
||
2187 | LLVMValueRef LLVMConstAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); |
||
2188 | LLVMValueRef LLVMConstNSWAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); |
||
2189 | LLVMValueRef LLVMConstNUWAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); |
||
2190 | LLVMValueRef LLVMConstSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); |
||
2191 | LLVMValueRef LLVMConstNSWSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); |
||
2192 | LLVMValueRef LLVMConstNUWSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); |
||
2193 | LLVMValueRef LLVMConstMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); |
||
2194 | LLVMValueRef LLVMConstNSWMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); |
||
2195 | LLVMValueRef LLVMConstNUWMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); |
||
2196 | LLVMValueRef LLVMConstAnd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); |
||
2197 | LLVMValueRef LLVMConstOr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); |
||
2198 | LLVMValueRef LLVMConstXor(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); |
||
2199 | LLVMValueRef LLVMConstICmp(LLVMIntPredicate Predicate, |
||
2200 | LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); |
||
2201 | LLVMValueRef LLVMConstFCmp(LLVMRealPredicate Predicate, |
||
2202 | LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); |
||
2203 | LLVMValueRef LLVMConstShl(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); |
||
2204 | LLVMValueRef LLVMConstLShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); |
||
2205 | LLVMValueRef LLVMConstAShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); |
||
2206 | LLVMValueRef LLVMConstGEP2(LLVMTypeRef Ty, LLVMValueRef ConstantVal, |
||
2207 | LLVMValueRef *ConstantIndices, unsigned NumIndices); |
||
2208 | LLVMValueRef LLVMConstInBoundsGEP2(LLVMTypeRef Ty, LLVMValueRef ConstantVal, |
||
2209 | LLVMValueRef *ConstantIndices, |
||
2210 | unsigned NumIndices); |
||
2211 | LLVMValueRef LLVMConstTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType); |
||
2212 | LLVMValueRef LLVMConstSExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType); |
||
2213 | LLVMValueRef LLVMConstZExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType); |
||
2214 | LLVMValueRef LLVMConstFPTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType); |
||
2215 | LLVMValueRef LLVMConstFPExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType); |
||
2216 | LLVMValueRef LLVMConstUIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType); |
||
2217 | LLVMValueRef LLVMConstSIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType); |
||
2218 | LLVMValueRef LLVMConstFPToUI(LLVMValueRef ConstantVal, LLVMTypeRef ToType); |
||
2219 | LLVMValueRef LLVMConstFPToSI(LLVMValueRef ConstantVal, LLVMTypeRef ToType); |
||
2220 | LLVMValueRef LLVMConstPtrToInt(LLVMValueRef ConstantVal, LLVMTypeRef ToType); |
||
2221 | LLVMValueRef LLVMConstIntToPtr(LLVMValueRef ConstantVal, LLVMTypeRef ToType); |
||
2222 | LLVMValueRef LLVMConstBitCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType); |
||
2223 | LLVMValueRef LLVMConstAddrSpaceCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType); |
||
2224 | LLVMValueRef LLVMConstZExtOrBitCast(LLVMValueRef ConstantVal, |
||
2225 | LLVMTypeRef ToType); |
||
2226 | LLVMValueRef LLVMConstSExtOrBitCast(LLVMValueRef ConstantVal, |
||
2227 | LLVMTypeRef ToType); |
||
2228 | LLVMValueRef LLVMConstTruncOrBitCast(LLVMValueRef ConstantVal, |
||
2229 | LLVMTypeRef ToType); |
||
2230 | LLVMValueRef LLVMConstPointerCast(LLVMValueRef ConstantVal, |
||
2231 | LLVMTypeRef ToType); |
||
2232 | LLVMValueRef LLVMConstIntCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType, |
||
2233 | LLVMBool isSigned); |
||
2234 | LLVMValueRef LLVMConstFPCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType); |
||
2235 | LLVMValueRef LLVMConstSelect(LLVMValueRef ConstantCondition, |
||
2236 | LLVMValueRef ConstantIfTrue, |
||
2237 | LLVMValueRef ConstantIfFalse); |
||
2238 | LLVMValueRef LLVMConstExtractElement(LLVMValueRef VectorConstant, |
||
2239 | LLVMValueRef IndexConstant); |
||
2240 | LLVMValueRef LLVMConstInsertElement(LLVMValueRef VectorConstant, |
||
2241 | LLVMValueRef ElementValueConstant, |
||
2242 | LLVMValueRef IndexConstant); |
||
2243 | LLVMValueRef LLVMConstShuffleVector(LLVMValueRef VectorAConstant, |
||
2244 | LLVMValueRef VectorBConstant, |
||
2245 | LLVMValueRef MaskConstant); |
||
2246 | LLVMValueRef LLVMBlockAddress(LLVMValueRef F, LLVMBasicBlockRef BB); |
||
2247 | |||
2248 | /** Deprecated: Use LLVMGetInlineAsm instead. */ |
||
2249 | LLVMValueRef LLVMConstInlineAsm(LLVMTypeRef Ty, |
||
2250 | const char *AsmString, const char *Constraints, |
||
2251 | LLVMBool HasSideEffects, LLVMBool IsAlignStack); |
||
2252 | |||
2253 | /** |
||
2254 | * @} |
||
2255 | */ |
||
2256 | |||
2257 | /** |
||
2258 | * @defgroup LLVMCCoreValueConstantGlobals Global Values |
||
2259 | * |
||
2260 | * This group contains functions that operate on global values. Functions in |
||
2261 | * this group relate to functions in the llvm::GlobalValue class tree. |
||
2262 | * |
||
2263 | * @see llvm::GlobalValue |
||
2264 | * |
||
2265 | * @{ |
||
2266 | */ |
||
2267 | |||
2268 | LLVMModuleRef LLVMGetGlobalParent(LLVMValueRef Global); |
||
2269 | LLVMBool LLVMIsDeclaration(LLVMValueRef Global); |
||
2270 | LLVMLinkage LLVMGetLinkage(LLVMValueRef Global); |
||
2271 | void LLVMSetLinkage(LLVMValueRef Global, LLVMLinkage Linkage); |
||
2272 | const char *LLVMGetSection(LLVMValueRef Global); |
||
2273 | void LLVMSetSection(LLVMValueRef Global, const char *Section); |
||
2274 | LLVMVisibility LLVMGetVisibility(LLVMValueRef Global); |
||
2275 | void LLVMSetVisibility(LLVMValueRef Global, LLVMVisibility Viz); |
||
2276 | LLVMDLLStorageClass LLVMGetDLLStorageClass(LLVMValueRef Global); |
||
2277 | void LLVMSetDLLStorageClass(LLVMValueRef Global, LLVMDLLStorageClass Class); |
||
2278 | LLVMUnnamedAddr LLVMGetUnnamedAddress(LLVMValueRef Global); |
||
2279 | void LLVMSetUnnamedAddress(LLVMValueRef Global, LLVMUnnamedAddr UnnamedAddr); |
||
2280 | |||
2281 | /** |
||
2282 | * Returns the "value type" of a global value. This differs from the formal |
||
2283 | * type of a global value which is always a pointer type. |
||
2284 | * |
||
2285 | * @see llvm::GlobalValue::getValueType() |
||
2286 | */ |
||
2287 | LLVMTypeRef LLVMGlobalGetValueType(LLVMValueRef Global); |
||
2288 | |||
2289 | /** Deprecated: Use LLVMGetUnnamedAddress instead. */ |
||
2290 | LLVMBool LLVMHasUnnamedAddr(LLVMValueRef Global); |
||
2291 | /** Deprecated: Use LLVMSetUnnamedAddress instead. */ |
||
2292 | void LLVMSetUnnamedAddr(LLVMValueRef Global, LLVMBool HasUnnamedAddr); |
||
2293 | |||
2294 | /** |
||
2295 | * @defgroup LLVMCCoreValueWithAlignment Values with alignment |
||
2296 | * |
||
2297 | * Functions in this group only apply to values with alignment, i.e. |
||
2298 | * global variables, load and store instructions. |
||
2299 | */ |
||
2300 | |||
2301 | /** |
||
2302 | * Obtain the preferred alignment of the value. |
||
2303 | * @see llvm::AllocaInst::getAlignment() |
||
2304 | * @see llvm::LoadInst::getAlignment() |
||
2305 | * @see llvm::StoreInst::getAlignment() |
||
2306 | * @see llvm::AtomicRMWInst::setAlignment() |
||
2307 | * @see llvm::AtomicCmpXchgInst::setAlignment() |
||
2308 | * @see llvm::GlobalValue::getAlignment() |
||
2309 | */ |
||
2310 | unsigned LLVMGetAlignment(LLVMValueRef V); |
||
2311 | |||
2312 | /** |
||
2313 | * Set the preferred alignment of the value. |
||
2314 | * @see llvm::AllocaInst::setAlignment() |
||
2315 | * @see llvm::LoadInst::setAlignment() |
||
2316 | * @see llvm::StoreInst::setAlignment() |
||
2317 | * @see llvm::AtomicRMWInst::setAlignment() |
||
2318 | * @see llvm::AtomicCmpXchgInst::setAlignment() |
||
2319 | * @see llvm::GlobalValue::setAlignment() |
||
2320 | */ |
||
2321 | void LLVMSetAlignment(LLVMValueRef V, unsigned Bytes); |
||
2322 | |||
2323 | /** |
||
2324 | * Sets a metadata attachment, erasing the existing metadata attachment if |
||
2325 | * it already exists for the given kind. |
||
2326 | * |
||
2327 | * @see llvm::GlobalObject::setMetadata() |
||
2328 | */ |
||
2329 | void LLVMGlobalSetMetadata(LLVMValueRef Global, unsigned Kind, |
||
2330 | LLVMMetadataRef MD); |
||
2331 | |||
2332 | /** |
||
2333 | * Erases a metadata attachment of the given kind if it exists. |
||
2334 | * |
||
2335 | * @see llvm::GlobalObject::eraseMetadata() |
||
2336 | */ |
||
2337 | void LLVMGlobalEraseMetadata(LLVMValueRef Global, unsigned Kind); |
||
2338 | |||
2339 | /** |
||
2340 | * Removes all metadata attachments from this value. |
||
2341 | * |
||
2342 | * @see llvm::GlobalObject::clearMetadata() |
||
2343 | */ |
||
2344 | void LLVMGlobalClearMetadata(LLVMValueRef Global); |
||
2345 | |||
2346 | /** |
||
2347 | * Retrieves an array of metadata entries representing the metadata attached to |
||
2348 | * this value. The caller is responsible for freeing this array by calling |
||
2349 | * \c LLVMDisposeValueMetadataEntries. |
||
2350 | * |
||
2351 | * @see llvm::GlobalObject::getAllMetadata() |
||
2352 | */ |
||
2353 | LLVMValueMetadataEntry *LLVMGlobalCopyAllMetadata(LLVMValueRef Value, |
||
2354 | size_t *NumEntries); |
||
2355 | |||
2356 | /** |
||
2357 | * Destroys value metadata entries. |
||
2358 | */ |
||
2359 | void LLVMDisposeValueMetadataEntries(LLVMValueMetadataEntry *Entries); |
||
2360 | |||
2361 | /** |
||
2362 | * Returns the kind of a value metadata entry at a specific index. |
||
2363 | */ |
||
2364 | unsigned LLVMValueMetadataEntriesGetKind(LLVMValueMetadataEntry *Entries, |
||
2365 | unsigned Index); |
||
2366 | |||
2367 | /** |
||
2368 | * Returns the underlying metadata node of a value metadata entry at a |
||
2369 | * specific index. |
||
2370 | */ |
||
2371 | LLVMMetadataRef |
||
2372 | LLVMValueMetadataEntriesGetMetadata(LLVMValueMetadataEntry *Entries, |
||
2373 | unsigned Index); |
||
2374 | |||
2375 | /** |
||
2376 | * @} |
||
2377 | */ |
||
2378 | |||
2379 | /** |
||
2380 | * @defgroup LLVMCoreValueConstantGlobalVariable Global Variables |
||
2381 | * |
||
2382 | * This group contains functions that operate on global variable values. |
||
2383 | * |
||
2384 | * @see llvm::GlobalVariable |
||
2385 | * |
||
2386 | * @{ |
||
2387 | */ |
||
2388 | LLVMValueRef LLVMAddGlobal(LLVMModuleRef M, LLVMTypeRef Ty, const char *Name); |
||
2389 | LLVMValueRef LLVMAddGlobalInAddressSpace(LLVMModuleRef M, LLVMTypeRef Ty, |
||
2390 | const char *Name, |
||
2391 | unsigned AddressSpace); |
||
2392 | LLVMValueRef LLVMGetNamedGlobal(LLVMModuleRef M, const char *Name); |
||
2393 | LLVMValueRef LLVMGetFirstGlobal(LLVMModuleRef M); |
||
2394 | LLVMValueRef LLVMGetLastGlobal(LLVMModuleRef M); |
||
2395 | LLVMValueRef LLVMGetNextGlobal(LLVMValueRef GlobalVar); |
||
2396 | LLVMValueRef LLVMGetPreviousGlobal(LLVMValueRef GlobalVar); |
||
2397 | void LLVMDeleteGlobal(LLVMValueRef GlobalVar); |
||
2398 | LLVMValueRef LLVMGetInitializer(LLVMValueRef GlobalVar); |
||
2399 | void LLVMSetInitializer(LLVMValueRef GlobalVar, LLVMValueRef ConstantVal); |
||
2400 | LLVMBool LLVMIsThreadLocal(LLVMValueRef GlobalVar); |
||
2401 | void LLVMSetThreadLocal(LLVMValueRef GlobalVar, LLVMBool IsThreadLocal); |
||
2402 | LLVMBool LLVMIsGlobalConstant(LLVMValueRef GlobalVar); |
||
2403 | void LLVMSetGlobalConstant(LLVMValueRef GlobalVar, LLVMBool IsConstant); |
||
2404 | LLVMThreadLocalMode LLVMGetThreadLocalMode(LLVMValueRef GlobalVar); |
||
2405 | void LLVMSetThreadLocalMode(LLVMValueRef GlobalVar, LLVMThreadLocalMode Mode); |
||
2406 | LLVMBool LLVMIsExternallyInitialized(LLVMValueRef GlobalVar); |
||
2407 | void LLVMSetExternallyInitialized(LLVMValueRef GlobalVar, LLVMBool IsExtInit); |
||
2408 | |||
2409 | /** |
||
2410 | * @} |
||
2411 | */ |
||
2412 | |||
2413 | /** |
||
2414 | * @defgroup LLVMCoreValueConstantGlobalAlias Global Aliases |
||
2415 | * |
||
2416 | * This group contains function that operate on global alias values. |
||
2417 | * |
||
2418 | * @see llvm::GlobalAlias |
||
2419 | * |
||
2420 | * @{ |
||
2421 | */ |
||
2422 | |||
2423 | /** |
||
2424 | * Add a GlobalAlias with the given value type, address space and aliasee. |
||
2425 | * |
||
2426 | * @see llvm::GlobalAlias::create() |
||
2427 | */ |
||
2428 | LLVMValueRef LLVMAddAlias2(LLVMModuleRef M, LLVMTypeRef ValueTy, |
||
2429 | unsigned AddrSpace, LLVMValueRef Aliasee, |
||
2430 | const char *Name); |
||
2431 | |||
2432 | /** |
||
2433 | * Obtain a GlobalAlias value from a Module by its name. |
||
2434 | * |
||
2435 | * The returned value corresponds to a llvm::GlobalAlias value. |
||
2436 | * |
||
2437 | * @see llvm::Module::getNamedAlias() |
||
2438 | */ |
||
2439 | LLVMValueRef LLVMGetNamedGlobalAlias(LLVMModuleRef M, |
||
2440 | const char *Name, size_t NameLen); |
||
2441 | |||
2442 | /** |
||
2443 | * Obtain an iterator to the first GlobalAlias in a Module. |
||
2444 | * |
||
2445 | * @see llvm::Module::alias_begin() |
||
2446 | */ |
||
2447 | LLVMValueRef LLVMGetFirstGlobalAlias(LLVMModuleRef M); |
||
2448 | |||
2449 | /** |
||
2450 | * Obtain an iterator to the last GlobalAlias in a Module. |
||
2451 | * |
||
2452 | * @see llvm::Module::alias_end() |
||
2453 | */ |
||
2454 | LLVMValueRef LLVMGetLastGlobalAlias(LLVMModuleRef M); |
||
2455 | |||
2456 | /** |
||
2457 | * Advance a GlobalAlias iterator to the next GlobalAlias. |
||
2458 | * |
||
2459 | * Returns NULL if the iterator was already at the end and there are no more |
||
2460 | * global aliases. |
||
2461 | */ |
||
2462 | LLVMValueRef LLVMGetNextGlobalAlias(LLVMValueRef GA); |
||
2463 | |||
2464 | /** |
||
2465 | * Decrement a GlobalAlias iterator to the previous GlobalAlias. |
||
2466 | * |
||
2467 | * Returns NULL if the iterator was already at the beginning and there are |
||
2468 | * no previous global aliases. |
||
2469 | */ |
||
2470 | LLVMValueRef LLVMGetPreviousGlobalAlias(LLVMValueRef GA); |
||
2471 | |||
2472 | /** |
||
2473 | * Retrieve the target value of an alias. |
||
2474 | */ |
||
2475 | LLVMValueRef LLVMAliasGetAliasee(LLVMValueRef Alias); |
||
2476 | |||
2477 | /** |
||
2478 | * Set the target value of an alias. |
||
2479 | */ |
||
2480 | void LLVMAliasSetAliasee(LLVMValueRef Alias, LLVMValueRef Aliasee); |
||
2481 | |||
2482 | /** |
||
2483 | * @} |
||
2484 | */ |
||
2485 | |||
2486 | /** |
||
2487 | * @defgroup LLVMCCoreValueFunction Function values |
||
2488 | * |
||
2489 | * Functions in this group operate on LLVMValueRef instances that |
||
2490 | * correspond to llvm::Function instances. |
||
2491 | * |
||
2492 | * @see llvm::Function |
||
2493 | * |
||
2494 | * @{ |
||
2495 | */ |
||
2496 | |||
2497 | /** |
||
2498 | * Remove a function from its containing module and deletes it. |
||
2499 | * |
||
2500 | * @see llvm::Function::eraseFromParent() |
||
2501 | */ |
||
2502 | void LLVMDeleteFunction(LLVMValueRef Fn); |
||
2503 | |||
2504 | /** |
||
2505 | * Check whether the given function has a personality function. |
||
2506 | * |
||
2507 | * @see llvm::Function::hasPersonalityFn() |
||
2508 | */ |
||
2509 | LLVMBool LLVMHasPersonalityFn(LLVMValueRef Fn); |
||
2510 | |||
2511 | /** |
||
2512 | * Obtain the personality function attached to the function. |
||
2513 | * |
||
2514 | * @see llvm::Function::getPersonalityFn() |
||
2515 | */ |
||
2516 | LLVMValueRef LLVMGetPersonalityFn(LLVMValueRef Fn); |
||
2517 | |||
2518 | /** |
||
2519 | * Set the personality function attached to the function. |
||
2520 | * |
||
2521 | * @see llvm::Function::setPersonalityFn() |
||
2522 | */ |
||
2523 | void LLVMSetPersonalityFn(LLVMValueRef Fn, LLVMValueRef PersonalityFn); |
||
2524 | |||
2525 | /** |
||
2526 | * Obtain the intrinsic ID number which matches the given function name. |
||
2527 | * |
||
2528 | * @see llvm::Function::lookupIntrinsicID() |
||
2529 | */ |
||
2530 | unsigned LLVMLookupIntrinsicID(const char *Name, size_t NameLen); |
||
2531 | |||
2532 | /** |
||
2533 | * Obtain the ID number from a function instance. |
||
2534 | * |
||
2535 | * @see llvm::Function::getIntrinsicID() |
||
2536 | */ |
||
2537 | unsigned LLVMGetIntrinsicID(LLVMValueRef Fn); |
||
2538 | |||
2539 | /** |
||
2540 | * Create or insert the declaration of an intrinsic. For overloaded intrinsics, |
||
2541 | * parameter types must be provided to uniquely identify an overload. |
||
2542 | * |
||
2543 | * @see llvm::Intrinsic::getDeclaration() |
||
2544 | */ |
||
2545 | LLVMValueRef LLVMGetIntrinsicDeclaration(LLVMModuleRef Mod, |
||
2546 | unsigned ID, |
||
2547 | LLVMTypeRef *ParamTypes, |
||
2548 | size_t ParamCount); |
||
2549 | |||
2550 | /** |
||
2551 | * Retrieves the type of an intrinsic. For overloaded intrinsics, parameter |
||
2552 | * types must be provided to uniquely identify an overload. |
||
2553 | * |
||
2554 | * @see llvm::Intrinsic::getType() |
||
2555 | */ |
||
2556 | LLVMTypeRef LLVMIntrinsicGetType(LLVMContextRef Ctx, unsigned ID, |
||
2557 | LLVMTypeRef *ParamTypes, size_t ParamCount); |
||
2558 | |||
2559 | /** |
||
2560 | * Retrieves the name of an intrinsic. |
||
2561 | * |
||
2562 | * @see llvm::Intrinsic::getName() |
||
2563 | */ |
||
2564 | const char *LLVMIntrinsicGetName(unsigned ID, size_t *NameLength); |
||
2565 | |||
2566 | /** Deprecated: Use LLVMIntrinsicCopyOverloadedName2 instead. */ |
||
2567 | const char *LLVMIntrinsicCopyOverloadedName(unsigned ID, |
||
2568 | LLVMTypeRef *ParamTypes, |
||
2569 | size_t ParamCount, |
||
2570 | size_t *NameLength); |
||
2571 | |||
2572 | /** |
||
2573 | * Copies the name of an overloaded intrinsic identified by a given list of |
||
2574 | * parameter types. |
||
2575 | * |
||
2576 | * Unlike LLVMIntrinsicGetName, the caller is responsible for freeing the |
||
2577 | * returned string. |
||
2578 | * |
||
2579 | * This version also supports unnamed types. |
||
2580 | * |
||
2581 | * @see llvm::Intrinsic::getName() |
||
2582 | */ |
||
2583 | const char *LLVMIntrinsicCopyOverloadedName2(LLVMModuleRef Mod, unsigned ID, |
||
2584 | LLVMTypeRef *ParamTypes, |
||
2585 | size_t ParamCount, |
||
2586 | size_t *NameLength); |
||
2587 | |||
2588 | /** |
||
2589 | * Obtain if the intrinsic identified by the given ID is overloaded. |
||
2590 | * |
||
2591 | * @see llvm::Intrinsic::isOverloaded() |
||
2592 | */ |
||
2593 | LLVMBool LLVMIntrinsicIsOverloaded(unsigned ID); |
||
2594 | |||
2595 | /** |
||
2596 | * Obtain the calling function of a function. |
||
2597 | * |
||
2598 | * The returned value corresponds to the LLVMCallConv enumeration. |
||
2599 | * |
||
2600 | * @see llvm::Function::getCallingConv() |
||
2601 | */ |
||
2602 | unsigned LLVMGetFunctionCallConv(LLVMValueRef Fn); |
||
2603 | |||
2604 | /** |
||
2605 | * Set the calling convention of a function. |
||
2606 | * |
||
2607 | * @see llvm::Function::setCallingConv() |
||
2608 | * |
||
2609 | * @param Fn Function to operate on |
||
2610 | * @param CC LLVMCallConv to set calling convention to |
||
2611 | */ |
||
2612 | void LLVMSetFunctionCallConv(LLVMValueRef Fn, unsigned CC); |
||
2613 | |||
2614 | /** |
||
2615 | * Obtain the name of the garbage collector to use during code |
||
2616 | * generation. |
||
2617 | * |
||
2618 | * @see llvm::Function::getGC() |
||
2619 | */ |
||
2620 | const char *LLVMGetGC(LLVMValueRef Fn); |
||
2621 | |||
2622 | /** |
||
2623 | * Define the garbage collector to use during code generation. |
||
2624 | * |
||
2625 | * @see llvm::Function::setGC() |
||
2626 | */ |
||
2627 | void LLVMSetGC(LLVMValueRef Fn, const char *Name); |
||
2628 | |||
2629 | /** |
||
2630 | * Add an attribute to a function. |
||
2631 | * |
||
2632 | * @see llvm::Function::addAttribute() |
||
2633 | */ |
||
2634 | void LLVMAddAttributeAtIndex(LLVMValueRef F, LLVMAttributeIndex Idx, |
||
2635 | LLVMAttributeRef A); |
||
2636 | unsigned LLVMGetAttributeCountAtIndex(LLVMValueRef F, LLVMAttributeIndex Idx); |
||
2637 | void LLVMGetAttributesAtIndex(LLVMValueRef F, LLVMAttributeIndex Idx, |
||
2638 | LLVMAttributeRef *Attrs); |
||
2639 | LLVMAttributeRef LLVMGetEnumAttributeAtIndex(LLVMValueRef F, |
||
2640 | LLVMAttributeIndex Idx, |
||
2641 | unsigned KindID); |
||
2642 | LLVMAttributeRef LLVMGetStringAttributeAtIndex(LLVMValueRef F, |
||
2643 | LLVMAttributeIndex Idx, |
||
2644 | const char *K, unsigned KLen); |
||
2645 | void LLVMRemoveEnumAttributeAtIndex(LLVMValueRef F, LLVMAttributeIndex Idx, |
||
2646 | unsigned KindID); |
||
2647 | void LLVMRemoveStringAttributeAtIndex(LLVMValueRef F, LLVMAttributeIndex Idx, |
||
2648 | const char *K, unsigned KLen); |
||
2649 | |||
2650 | /** |
||
2651 | * Add a target-dependent attribute to a function |
||
2652 | * @see llvm::AttrBuilder::addAttribute() |
||
2653 | */ |
||
2654 | void LLVMAddTargetDependentFunctionAttr(LLVMValueRef Fn, const char *A, |
||
2655 | const char *V); |
||
2656 | |||
2657 | /** |
||
2658 | * @defgroup LLVMCCoreValueFunctionParameters Function Parameters |
||
2659 | * |
||
2660 | * Functions in this group relate to arguments/parameters on functions. |
||
2661 | * |
||
2662 | * Functions in this group expect LLVMValueRef instances that correspond |
||
2663 | * to llvm::Function instances. |
||
2664 | * |
||
2665 | * @{ |
||
2666 | */ |
||
2667 | |||
2668 | /** |
||
2669 | * Obtain the number of parameters in a function. |
||
2670 | * |
||
2671 | * @see llvm::Function::arg_size() |
||
2672 | */ |
||
2673 | unsigned LLVMCountParams(LLVMValueRef Fn); |
||
2674 | |||
2675 | /** |
||
2676 | * Obtain the parameters in a function. |
||
2677 | * |
||
2678 | * The takes a pointer to a pre-allocated array of LLVMValueRef that is |
||
2679 | * at least LLVMCountParams() long. This array will be filled with |
||
2680 | * LLVMValueRef instances which correspond to the parameters the |
||
2681 | * function receives. Each LLVMValueRef corresponds to a llvm::Argument |
||
2682 | * instance. |
||
2683 | * |
||
2684 | * @see llvm::Function::arg_begin() |
||
2685 | */ |
||
2686 | void LLVMGetParams(LLVMValueRef Fn, LLVMValueRef *Params); |
||
2687 | |||
2688 | /** |
||
2689 | * Obtain the parameter at the specified index. |
||
2690 | * |
||
2691 | * Parameters are indexed from 0. |
||
2692 | * |
||
2693 | * @see llvm::Function::arg_begin() |
||
2694 | */ |
||
2695 | LLVMValueRef LLVMGetParam(LLVMValueRef Fn, unsigned Index); |
||
2696 | |||
2697 | /** |
||
2698 | * Obtain the function to which this argument belongs. |
||
2699 | * |
||
2700 | * Unlike other functions in this group, this one takes an LLVMValueRef |
||
2701 | * that corresponds to a llvm::Attribute. |
||
2702 | * |
||
2703 | * The returned LLVMValueRef is the llvm::Function to which this |
||
2704 | * argument belongs. |
||
2705 | */ |
||
2706 | LLVMValueRef LLVMGetParamParent(LLVMValueRef Inst); |
||
2707 | |||
2708 | /** |
||
2709 | * Obtain the first parameter to a function. |
||
2710 | * |
||
2711 | * @see llvm::Function::arg_begin() |
||
2712 | */ |
||
2713 | LLVMValueRef LLVMGetFirstParam(LLVMValueRef Fn); |
||
2714 | |||
2715 | /** |
||
2716 | * Obtain the last parameter to a function. |
||
2717 | * |
||
2718 | * @see llvm::Function::arg_end() |
||
2719 | */ |
||
2720 | LLVMValueRef LLVMGetLastParam(LLVMValueRef Fn); |
||
2721 | |||
2722 | /** |
||
2723 | * Obtain the next parameter to a function. |
||
2724 | * |
||
2725 | * This takes an LLVMValueRef obtained from LLVMGetFirstParam() (which is |
||
2726 | * actually a wrapped iterator) and obtains the next parameter from the |
||
2727 | * underlying iterator. |
||
2728 | */ |
||
2729 | LLVMValueRef LLVMGetNextParam(LLVMValueRef Arg); |
||
2730 | |||
2731 | /** |
||
2732 | * Obtain the previous parameter to a function. |
||
2733 | * |
||
2734 | * This is the opposite of LLVMGetNextParam(). |
||
2735 | */ |
||
2736 | LLVMValueRef LLVMGetPreviousParam(LLVMValueRef Arg); |
||
2737 | |||
2738 | /** |
||
2739 | * Set the alignment for a function parameter. |
||
2740 | * |
||
2741 | * @see llvm::Argument::addAttr() |
||
2742 | * @see llvm::AttrBuilder::addAlignmentAttr() |
||
2743 | */ |
||
2744 | void LLVMSetParamAlignment(LLVMValueRef Arg, unsigned Align); |
||
2745 | |||
2746 | /** |
||
2747 | * @} |
||
2748 | */ |
||
2749 | |||
2750 | /** |
||
2751 | * @defgroup LLVMCCoreValueGlobalIFunc IFuncs |
||
2752 | * |
||
2753 | * Functions in this group relate to indirect functions. |
||
2754 | * |
||
2755 | * Functions in this group expect LLVMValueRef instances that correspond |
||
2756 | * to llvm::GlobalIFunc instances. |
||
2757 | * |
||
2758 | * @{ |
||
2759 | */ |
||
2760 | |||
2761 | /** |
||
2762 | * Add a global indirect function to a module under a specified name. |
||
2763 | * |
||
2764 | * @see llvm::GlobalIFunc::create() |
||
2765 | */ |
||
2766 | LLVMValueRef LLVMAddGlobalIFunc(LLVMModuleRef M, |
||
2767 | const char *Name, size_t NameLen, |
||
2768 | LLVMTypeRef Ty, unsigned AddrSpace, |
||
2769 | LLVMValueRef Resolver); |
||
2770 | |||
2771 | /** |
||
2772 | * Obtain a GlobalIFunc value from a Module by its name. |
||
2773 | * |
||
2774 | * The returned value corresponds to a llvm::GlobalIFunc value. |
||
2775 | * |
||
2776 | * @see llvm::Module::getNamedIFunc() |
||
2777 | */ |
||
2778 | LLVMValueRef LLVMGetNamedGlobalIFunc(LLVMModuleRef M, |
||
2779 | const char *Name, size_t NameLen); |
||
2780 | |||
2781 | /** |
||
2782 | * Obtain an iterator to the first GlobalIFunc in a Module. |
||
2783 | * |
||
2784 | * @see llvm::Module::ifunc_begin() |
||
2785 | */ |
||
2786 | LLVMValueRef LLVMGetFirstGlobalIFunc(LLVMModuleRef M); |
||
2787 | |||
2788 | /** |
||
2789 | * Obtain an iterator to the last GlobalIFunc in a Module. |
||
2790 | * |
||
2791 | * @see llvm::Module::ifunc_end() |
||
2792 | */ |
||
2793 | LLVMValueRef LLVMGetLastGlobalIFunc(LLVMModuleRef M); |
||
2794 | |||
2795 | /** |
||
2796 | * Advance a GlobalIFunc iterator to the next GlobalIFunc. |
||
2797 | * |
||
2798 | * Returns NULL if the iterator was already at the end and there are no more |
||
2799 | * global aliases. |
||
2800 | */ |
||
2801 | LLVMValueRef LLVMGetNextGlobalIFunc(LLVMValueRef IFunc); |
||
2802 | |||
2803 | /** |
||
2804 | * Decrement a GlobalIFunc iterator to the previous GlobalIFunc. |
||
2805 | * |
||
2806 | * Returns NULL if the iterator was already at the beginning and there are |
||
2807 | * no previous global aliases. |
||
2808 | */ |
||
2809 | LLVMValueRef LLVMGetPreviousGlobalIFunc(LLVMValueRef IFunc); |
||
2810 | |||
2811 | /** |
||
2812 | * Retrieves the resolver function associated with this indirect function, or |
||
2813 | * NULL if it doesn't not exist. |
||
2814 | * |
||
2815 | * @see llvm::GlobalIFunc::getResolver() |
||
2816 | */ |
||
2817 | LLVMValueRef LLVMGetGlobalIFuncResolver(LLVMValueRef IFunc); |
||
2818 | |||
2819 | /** |
||
2820 | * Sets the resolver function associated with this indirect function. |
||
2821 | * |
||
2822 | * @see llvm::GlobalIFunc::setResolver() |
||
2823 | */ |
||
2824 | void LLVMSetGlobalIFuncResolver(LLVMValueRef IFunc, LLVMValueRef Resolver); |
||
2825 | |||
2826 | /** |
||
2827 | * Remove a global indirect function from its parent module and delete it. |
||
2828 | * |
||
2829 | * @see llvm::GlobalIFunc::eraseFromParent() |
||
2830 | */ |
||
2831 | void LLVMEraseGlobalIFunc(LLVMValueRef IFunc); |
||
2832 | |||
2833 | /** |
||
2834 | * Remove a global indirect function from its parent module. |
||
2835 | * |
||
2836 | * This unlinks the global indirect function from its containing module but |
||
2837 | * keeps it alive. |
||
2838 | * |
||
2839 | * @see llvm::GlobalIFunc::removeFromParent() |
||
2840 | */ |
||
2841 | void LLVMRemoveGlobalIFunc(LLVMValueRef IFunc); |
||
2842 | |||
2843 | /** |
||
2844 | * @} |
||
2845 | */ |
||
2846 | |||
2847 | /** |
||
2848 | * @} |
||
2849 | */ |
||
2850 | |||
2851 | /** |
||
2852 | * @} |
||
2853 | */ |
||
2854 | |||
2855 | /** |
||
2856 | * @} |
||
2857 | */ |
||
2858 | |||
2859 | /** |
||
2860 | * @defgroup LLVMCCoreValueMetadata Metadata |
||
2861 | * |
||
2862 | * @{ |
||
2863 | */ |
||
2864 | |||
2865 | /** |
||
2866 | * Create an MDString value from a given string value. |
||
2867 | * |
||
2868 | * The MDString value does not take ownership of the given string, it remains |
||
2869 | * the responsibility of the caller to free it. |
||
2870 | * |
||
2871 | * @see llvm::MDString::get() |
||
2872 | */ |
||
2873 | LLVMMetadataRef LLVMMDStringInContext2(LLVMContextRef C, const char *Str, |
||
2874 | size_t SLen); |
||
2875 | |||
2876 | /** |
||
2877 | * Create an MDNode value with the given array of operands. |
||
2878 | * |
||
2879 | * @see llvm::MDNode::get() |
||
2880 | */ |
||
2881 | LLVMMetadataRef LLVMMDNodeInContext2(LLVMContextRef C, LLVMMetadataRef *MDs, |
||
2882 | size_t Count); |
||
2883 | |||
2884 | /** |
||
2885 | * Obtain a Metadata as a Value. |
||
2886 | */ |
||
2887 | LLVMValueRef LLVMMetadataAsValue(LLVMContextRef C, LLVMMetadataRef MD); |
||
2888 | |||
2889 | /** |
||
2890 | * Obtain a Value as a Metadata. |
||
2891 | */ |
||
2892 | LLVMMetadataRef LLVMValueAsMetadata(LLVMValueRef Val); |
||
2893 | |||
2894 | /** |
||
2895 | * Obtain the underlying string from a MDString value. |
||
2896 | * |
||
2897 | * @param V Instance to obtain string from. |
||
2898 | * @param Length Memory address which will hold length of returned string. |
||
2899 | * @return String data in MDString. |
||
2900 | */ |
||
2901 | const char *LLVMGetMDString(LLVMValueRef V, unsigned *Length); |
||
2902 | |||
2903 | /** |
||
2904 | * Obtain the number of operands from an MDNode value. |
||
2905 | * |
||
2906 | * @param V MDNode to get number of operands from. |
||
2907 | * @return Number of operands of the MDNode. |
||
2908 | */ |
||
2909 | unsigned LLVMGetMDNodeNumOperands(LLVMValueRef V); |
||
2910 | |||
2911 | /** |
||
2912 | * Obtain the given MDNode's operands. |
||
2913 | * |
||
2914 | * The passed LLVMValueRef pointer should point to enough memory to hold all of |
||
2915 | * the operands of the given MDNode (see LLVMGetMDNodeNumOperands) as |
||
2916 | * LLVMValueRefs. This memory will be populated with the LLVMValueRefs of the |
||
2917 | * MDNode's operands. |
||
2918 | * |
||
2919 | * @param V MDNode to get the operands from. |
||
2920 | * @param Dest Destination array for operands. |
||
2921 | */ |
||
2922 | void LLVMGetMDNodeOperands(LLVMValueRef V, LLVMValueRef *Dest); |
||
2923 | |||
2924 | /** Deprecated: Use LLVMMDStringInContext2 instead. */ |
||
2925 | LLVMValueRef LLVMMDStringInContext(LLVMContextRef C, const char *Str, |
||
2926 | unsigned SLen); |
||
2927 | /** Deprecated: Use LLVMMDStringInContext2 instead. */ |
||
2928 | LLVMValueRef LLVMMDString(const char *Str, unsigned SLen); |
||
2929 | /** Deprecated: Use LLVMMDNodeInContext2 instead. */ |
||
2930 | LLVMValueRef LLVMMDNodeInContext(LLVMContextRef C, LLVMValueRef *Vals, |
||
2931 | unsigned Count); |
||
2932 | /** Deprecated: Use LLVMMDNodeInContext2 instead. */ |
||
2933 | LLVMValueRef LLVMMDNode(LLVMValueRef *Vals, unsigned Count); |
||
2934 | |||
2935 | /** |
||
2936 | * @} |
||
2937 | */ |
||
2938 | |||
2939 | /** |
||
2940 | * @defgroup LLVMCCoreValueBasicBlock Basic Block |
||
2941 | * |
||
2942 | * A basic block represents a single entry single exit section of code. |
||
2943 | * Basic blocks contain a list of instructions which form the body of |
||
2944 | * the block. |
||
2945 | * |
||
2946 | * Basic blocks belong to functions. They have the type of label. |
||
2947 | * |
||
2948 | * Basic blocks are themselves values. However, the C API models them as |
||
2949 | * LLVMBasicBlockRef. |
||
2950 | * |
||
2951 | * @see llvm::BasicBlock |
||
2952 | * |
||
2953 | * @{ |
||
2954 | */ |
||
2955 | |||
2956 | /** |
||
2957 | * Convert a basic block instance to a value type. |
||
2958 | */ |
||
2959 | LLVMValueRef LLVMBasicBlockAsValue(LLVMBasicBlockRef BB); |
||
2960 | |||
2961 | /** |
||
2962 | * Determine whether an LLVMValueRef is itself a basic block. |
||
2963 | */ |
||
2964 | LLVMBool LLVMValueIsBasicBlock(LLVMValueRef Val); |
||
2965 | |||
2966 | /** |
||
2967 | * Convert an LLVMValueRef to an LLVMBasicBlockRef instance. |
||
2968 | */ |
||
2969 | LLVMBasicBlockRef LLVMValueAsBasicBlock(LLVMValueRef Val); |
||
2970 | |||
2971 | /** |
||
2972 | * Obtain the string name of a basic block. |
||
2973 | */ |
||
2974 | const char *LLVMGetBasicBlockName(LLVMBasicBlockRef BB); |
||
2975 | |||
2976 | /** |
||
2977 | * Obtain the function to which a basic block belongs. |
||
2978 | * |
||
2979 | * @see llvm::BasicBlock::getParent() |
||
2980 | */ |
||
2981 | LLVMValueRef LLVMGetBasicBlockParent(LLVMBasicBlockRef BB); |
||
2982 | |||
2983 | /** |
||
2984 | * Obtain the terminator instruction for a basic block. |
||
2985 | * |
||
2986 | * If the basic block does not have a terminator (it is not well-formed |
||
2987 | * if it doesn't), then NULL is returned. |
||
2988 | * |
||
2989 | * The returned LLVMValueRef corresponds to an llvm::Instruction. |
||
2990 | * |
||
2991 | * @see llvm::BasicBlock::getTerminator() |
||
2992 | */ |
||
2993 | LLVMValueRef LLVMGetBasicBlockTerminator(LLVMBasicBlockRef BB); |
||
2994 | |||
2995 | /** |
||
2996 | * Obtain the number of basic blocks in a function. |
||
2997 | * |
||
2998 | * @param Fn Function value to operate on. |
||
2999 | */ |
||
3000 | unsigned LLVMCountBasicBlocks(LLVMValueRef Fn); |
||
3001 | |||
3002 | /** |
||
3003 | * Obtain all of the basic blocks in a function. |
||
3004 | * |
||
3005 | * This operates on a function value. The BasicBlocks parameter is a |
||
3006 | * pointer to a pre-allocated array of LLVMBasicBlockRef of at least |
||
3007 | * LLVMCountBasicBlocks() in length. This array is populated with |
||
3008 | * LLVMBasicBlockRef instances. |
||
3009 | */ |
||
3010 | void LLVMGetBasicBlocks(LLVMValueRef Fn, LLVMBasicBlockRef *BasicBlocks); |
||
3011 | |||
3012 | /** |
||
3013 | * Obtain the first basic block in a function. |
||
3014 | * |
||
3015 | * The returned basic block can be used as an iterator. You will likely |
||
3016 | * eventually call into LLVMGetNextBasicBlock() with it. |
||
3017 | * |
||
3018 | * @see llvm::Function::begin() |
||
3019 | */ |
||
3020 | LLVMBasicBlockRef LLVMGetFirstBasicBlock(LLVMValueRef Fn); |
||
3021 | |||
3022 | /** |
||
3023 | * Obtain the last basic block in a function. |
||
3024 | * |
||
3025 | * @see llvm::Function::end() |
||
3026 | */ |
||
3027 | LLVMBasicBlockRef LLVMGetLastBasicBlock(LLVMValueRef Fn); |
||
3028 | |||
3029 | /** |
||
3030 | * Advance a basic block iterator. |
||
3031 | */ |
||
3032 | LLVMBasicBlockRef LLVMGetNextBasicBlock(LLVMBasicBlockRef BB); |
||
3033 | |||
3034 | /** |
||
3035 | * Go backwards in a basic block iterator. |
||
3036 | */ |
||
3037 | LLVMBasicBlockRef LLVMGetPreviousBasicBlock(LLVMBasicBlockRef BB); |
||
3038 | |||
3039 | /** |
||
3040 | * Obtain the basic block that corresponds to the entry point of a |
||
3041 | * function. |
||
3042 | * |
||
3043 | * @see llvm::Function::getEntryBlock() |
||
3044 | */ |
||
3045 | LLVMBasicBlockRef LLVMGetEntryBasicBlock(LLVMValueRef Fn); |
||
3046 | |||
3047 | /** |
||
3048 | * Insert the given basic block after the insertion point of the given builder. |
||
3049 | * |
||
3050 | * The insertion point must be valid. |
||
3051 | * |
||
3052 | * @see llvm::Function::BasicBlockListType::insertAfter() |
||
3053 | */ |
||
3054 | void LLVMInsertExistingBasicBlockAfterInsertBlock(LLVMBuilderRef Builder, |
||
3055 | LLVMBasicBlockRef BB); |
||
3056 | |||
3057 | /** |
||
3058 | * Append the given basic block to the basic block list of the given function. |
||
3059 | * |
||
3060 | * @see llvm::Function::BasicBlockListType::push_back() |
||
3061 | */ |
||
3062 | void LLVMAppendExistingBasicBlock(LLVMValueRef Fn, |
||
3063 | LLVMBasicBlockRef BB); |
||
3064 | |||
3065 | /** |
||
3066 | * Create a new basic block without inserting it into a function. |
||
3067 | * |
||
3068 | * @see llvm::BasicBlock::Create() |
||
3069 | */ |
||
3070 | LLVMBasicBlockRef LLVMCreateBasicBlockInContext(LLVMContextRef C, |
||
3071 | const char *Name); |
||
3072 | |||
3073 | /** |
||
3074 | * Append a basic block to the end of a function. |
||
3075 | * |
||
3076 | * @see llvm::BasicBlock::Create() |
||
3077 | */ |
||
3078 | LLVMBasicBlockRef LLVMAppendBasicBlockInContext(LLVMContextRef C, |
||
3079 | LLVMValueRef Fn, |
||
3080 | const char *Name); |
||
3081 | |||
3082 | /** |
||
3083 | * Append a basic block to the end of a function using the global |
||
3084 | * context. |
||
3085 | * |
||
3086 | * @see llvm::BasicBlock::Create() |
||
3087 | */ |
||
3088 | LLVMBasicBlockRef LLVMAppendBasicBlock(LLVMValueRef Fn, const char *Name); |
||
3089 | |||
3090 | /** |
||
3091 | * Insert a basic block in a function before another basic block. |
||
3092 | * |
||
3093 | * The function to add to is determined by the function of the |
||
3094 | * passed basic block. |
||
3095 | * |
||
3096 | * @see llvm::BasicBlock::Create() |
||
3097 | */ |
||
3098 | LLVMBasicBlockRef LLVMInsertBasicBlockInContext(LLVMContextRef C, |
||
3099 | LLVMBasicBlockRef BB, |
||
3100 | const char *Name); |
||
3101 | |||
3102 | /** |
||
3103 | * Insert a basic block in a function using the global context. |
||
3104 | * |
||
3105 | * @see llvm::BasicBlock::Create() |
||
3106 | */ |
||
3107 | LLVMBasicBlockRef LLVMInsertBasicBlock(LLVMBasicBlockRef InsertBeforeBB, |
||
3108 | const char *Name); |
||
3109 | |||
3110 | /** |
||
3111 | * Remove a basic block from a function and delete it. |
||
3112 | * |
||
3113 | * This deletes the basic block from its containing function and deletes |
||
3114 | * the basic block itself. |
||
3115 | * |
||
3116 | * @see llvm::BasicBlock::eraseFromParent() |
||
3117 | */ |
||
3118 | void LLVMDeleteBasicBlock(LLVMBasicBlockRef BB); |
||
3119 | |||
3120 | /** |
||
3121 | * Remove a basic block from a function. |
||
3122 | * |
||
3123 | * This deletes the basic block from its containing function but keep |
||
3124 | * the basic block alive. |
||
3125 | * |
||
3126 | * @see llvm::BasicBlock::removeFromParent() |
||
3127 | */ |
||
3128 | void LLVMRemoveBasicBlockFromParent(LLVMBasicBlockRef BB); |
||
3129 | |||
3130 | /** |
||
3131 | * Move a basic block to before another one. |
||
3132 | * |
||
3133 | * @see llvm::BasicBlock::moveBefore() |
||
3134 | */ |
||
3135 | void LLVMMoveBasicBlockBefore(LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos); |
||
3136 | |||
3137 | /** |
||
3138 | * Move a basic block to after another one. |
||
3139 | * |
||
3140 | * @see llvm::BasicBlock::moveAfter() |
||
3141 | */ |
||
3142 | void LLVMMoveBasicBlockAfter(LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos); |
||
3143 | |||
3144 | /** |
||
3145 | * Obtain the first instruction in a basic block. |
||
3146 | * |
||
3147 | * The returned LLVMValueRef corresponds to a llvm::Instruction |
||
3148 | * instance. |
||
3149 | */ |
||
3150 | LLVMValueRef LLVMGetFirstInstruction(LLVMBasicBlockRef BB); |
||
3151 | |||
3152 | /** |
||
3153 | * Obtain the last instruction in a basic block. |
||
3154 | * |
||
3155 | * The returned LLVMValueRef corresponds to an LLVM:Instruction. |
||
3156 | */ |
||
3157 | LLVMValueRef LLVMGetLastInstruction(LLVMBasicBlockRef BB); |
||
3158 | |||
3159 | /** |
||
3160 | * @} |
||
3161 | */ |
||
3162 | |||
3163 | /** |
||
3164 | * @defgroup LLVMCCoreValueInstruction Instructions |
||
3165 | * |
||
3166 | * Functions in this group relate to the inspection and manipulation of |
||
3167 | * individual instructions. |
||
3168 | * |
||
3169 | * In the C++ API, an instruction is modeled by llvm::Instruction. This |
||
3170 | * class has a large number of descendents. llvm::Instruction is a |
||
3171 | * llvm::Value and in the C API, instructions are modeled by |
||
3172 | * LLVMValueRef. |
||
3173 | * |
||
3174 | * This group also contains sub-groups which operate on specific |
||
3175 | * llvm::Instruction types, e.g. llvm::CallInst. |
||
3176 | * |
||
3177 | * @{ |
||
3178 | */ |
||
3179 | |||
3180 | /** |
||
3181 | * Determine whether an instruction has any metadata attached. |
||
3182 | */ |
||
3183 | int LLVMHasMetadata(LLVMValueRef Val); |
||
3184 | |||
3185 | /** |
||
3186 | * Return metadata associated with an instruction value. |
||
3187 | */ |
||
3188 | LLVMValueRef LLVMGetMetadata(LLVMValueRef Val, unsigned KindID); |
||
3189 | |||
3190 | /** |
||
3191 | * Set metadata associated with an instruction value. |
||
3192 | */ |
||
3193 | void LLVMSetMetadata(LLVMValueRef Val, unsigned KindID, LLVMValueRef Node); |
||
3194 | |||
3195 | /** |
||
3196 | * Returns the metadata associated with an instruction value, but filters out |
||
3197 | * all the debug locations. |
||
3198 | * |
||
3199 | * @see llvm::Instruction::getAllMetadataOtherThanDebugLoc() |
||
3200 | */ |
||
3201 | LLVMValueMetadataEntry * |
||
3202 | LLVMInstructionGetAllMetadataOtherThanDebugLoc(LLVMValueRef Instr, |
||
3203 | size_t *NumEntries); |
||
3204 | |||
3205 | /** |
||
3206 | * Obtain the basic block to which an instruction belongs. |
||
3207 | * |
||
3208 | * @see llvm::Instruction::getParent() |
||
3209 | */ |
||
3210 | LLVMBasicBlockRef LLVMGetInstructionParent(LLVMValueRef Inst); |
||
3211 | |||
3212 | /** |
||
3213 | * Obtain the instruction that occurs after the one specified. |
||
3214 | * |
||
3215 | * The next instruction will be from the same basic block. |
||
3216 | * |
||
3217 | * If this is the last instruction in a basic block, NULL will be |
||
3218 | * returned. |
||
3219 | */ |
||
3220 | LLVMValueRef LLVMGetNextInstruction(LLVMValueRef Inst); |
||
3221 | |||
3222 | /** |
||
3223 | * Obtain the instruction that occurred before this one. |
||
3224 | * |
||
3225 | * If the instruction is the first instruction in a basic block, NULL |
||
3226 | * will be returned. |
||
3227 | */ |
||
3228 | LLVMValueRef LLVMGetPreviousInstruction(LLVMValueRef Inst); |
||
3229 | |||
3230 | /** |
||
3231 | * Remove an instruction. |
||
3232 | * |
||
3233 | * The instruction specified is removed from its containing building |
||
3234 | * block but is kept alive. |
||
3235 | * |
||
3236 | * @see llvm::Instruction::removeFromParent() |
||
3237 | */ |
||
3238 | void LLVMInstructionRemoveFromParent(LLVMValueRef Inst); |
||
3239 | |||
3240 | /** |
||
3241 | * Remove and delete an instruction. |
||
3242 | * |
||
3243 | * The instruction specified is removed from its containing building |
||
3244 | * block and then deleted. |
||
3245 | * |
||
3246 | * @see llvm::Instruction::eraseFromParent() |
||
3247 | */ |
||
3248 | void LLVMInstructionEraseFromParent(LLVMValueRef Inst); |
||
3249 | |||
3250 | /** |
||
3251 | * Delete an instruction. |
||
3252 | * |
||
3253 | * The instruction specified is deleted. It must have previously been |
||
3254 | * removed from its containing building block. |
||
3255 | * |
||
3256 | * @see llvm::Value::deleteValue() |
||
3257 | */ |
||
3258 | void LLVMDeleteInstruction(LLVMValueRef Inst); |
||
3259 | |||
3260 | /** |
||
3261 | * Obtain the code opcode for an individual instruction. |
||
3262 | * |
||
3263 | * @see llvm::Instruction::getOpCode() |
||
3264 | */ |
||
3265 | LLVMOpcode LLVMGetInstructionOpcode(LLVMValueRef Inst); |
||
3266 | |||
3267 | /** |
||
3268 | * Obtain the predicate of an instruction. |
||
3269 | * |
||
3270 | * This is only valid for instructions that correspond to llvm::ICmpInst |
||
3271 | * or llvm::ConstantExpr whose opcode is llvm::Instruction::ICmp. |
||
3272 | * |
||
3273 | * @see llvm::ICmpInst::getPredicate() |
||
3274 | */ |
||
3275 | LLVMIntPredicate LLVMGetICmpPredicate(LLVMValueRef Inst); |
||
3276 | |||
3277 | /** |
||
3278 | * Obtain the float predicate of an instruction. |
||
3279 | * |
||
3280 | * This is only valid for instructions that correspond to llvm::FCmpInst |
||
3281 | * or llvm::ConstantExpr whose opcode is llvm::Instruction::FCmp. |
||
3282 | * |
||
3283 | * @see llvm::FCmpInst::getPredicate() |
||
3284 | */ |
||
3285 | LLVMRealPredicate LLVMGetFCmpPredicate(LLVMValueRef Inst); |
||
3286 | |||
3287 | /** |
||
3288 | * Create a copy of 'this' instruction that is identical in all ways |
||
3289 | * except the following: |
||
3290 | * * The instruction has no parent |
||
3291 | * * The instruction has no name |
||
3292 | * |
||
3293 | * @see llvm::Instruction::clone() |
||
3294 | */ |
||
3295 | LLVMValueRef LLVMInstructionClone(LLVMValueRef Inst); |
||
3296 | |||
3297 | /** |
||
3298 | * Determine whether an instruction is a terminator. This routine is named to |
||
3299 | * be compatible with historical functions that did this by querying the |
||
3300 | * underlying C++ type. |
||
3301 | * |
||
3302 | * @see llvm::Instruction::isTerminator() |
||
3303 | */ |
||
3304 | LLVMValueRef LLVMIsATerminatorInst(LLVMValueRef Inst); |
||
3305 | |||
3306 | /** |
||
3307 | * @defgroup LLVMCCoreValueInstructionCall Call Sites and Invocations |
||
3308 | * |
||
3309 | * Functions in this group apply to instructions that refer to call |
||
3310 | * sites and invocations. These correspond to C++ types in the |
||
3311 | * llvm::CallInst class tree. |
||
3312 | * |
||
3313 | * @{ |
||
3314 | */ |
||
3315 | |||
3316 | /** |
||
3317 | * Obtain the argument count for a call instruction. |
||
3318 | * |
||
3319 | * This expects an LLVMValueRef that corresponds to a llvm::CallInst, |
||
3320 | * llvm::InvokeInst, or llvm:FuncletPadInst. |
||
3321 | * |
||
3322 | * @see llvm::CallInst::getNumArgOperands() |
||
3323 | * @see llvm::InvokeInst::getNumArgOperands() |
||
3324 | * @see llvm::FuncletPadInst::getNumArgOperands() |
||
3325 | */ |
||
3326 | unsigned LLVMGetNumArgOperands(LLVMValueRef Instr); |
||
3327 | |||
3328 | /** |
||
3329 | * Set the calling convention for a call instruction. |
||
3330 | * |
||
3331 | * This expects an LLVMValueRef that corresponds to a llvm::CallInst or |
||
3332 | * llvm::InvokeInst. |
||
3333 | * |
||
3334 | * @see llvm::CallInst::setCallingConv() |
||
3335 | * @see llvm::InvokeInst::setCallingConv() |
||
3336 | */ |
||
3337 | void LLVMSetInstructionCallConv(LLVMValueRef Instr, unsigned CC); |
||
3338 | |||
3339 | /** |
||
3340 | * Obtain the calling convention for a call instruction. |
||
3341 | * |
||
3342 | * This is the opposite of LLVMSetInstructionCallConv(). Reads its |
||
3343 | * usage. |
||
3344 | * |
||
3345 | * @see LLVMSetInstructionCallConv() |
||
3346 | */ |
||
3347 | unsigned LLVMGetInstructionCallConv(LLVMValueRef Instr); |
||
3348 | |||
3349 | void LLVMSetInstrParamAlignment(LLVMValueRef Instr, LLVMAttributeIndex Idx, |
||
3350 | unsigned Align); |
||
3351 | |||
3352 | void LLVMAddCallSiteAttribute(LLVMValueRef C, LLVMAttributeIndex Idx, |
||
3353 | LLVMAttributeRef A); |
||
3354 | unsigned LLVMGetCallSiteAttributeCount(LLVMValueRef C, LLVMAttributeIndex Idx); |
||
3355 | void LLVMGetCallSiteAttributes(LLVMValueRef C, LLVMAttributeIndex Idx, |
||
3356 | LLVMAttributeRef *Attrs); |
||
3357 | LLVMAttributeRef LLVMGetCallSiteEnumAttribute(LLVMValueRef C, |
||
3358 | LLVMAttributeIndex Idx, |
||
3359 | unsigned KindID); |
||
3360 | LLVMAttributeRef LLVMGetCallSiteStringAttribute(LLVMValueRef C, |
||
3361 | LLVMAttributeIndex Idx, |
||
3362 | const char *K, unsigned KLen); |
||
3363 | void LLVMRemoveCallSiteEnumAttribute(LLVMValueRef C, LLVMAttributeIndex Idx, |
||
3364 | unsigned KindID); |
||
3365 | void LLVMRemoveCallSiteStringAttribute(LLVMValueRef C, LLVMAttributeIndex Idx, |
||
3366 | const char *K, unsigned KLen); |
||
3367 | |||
3368 | /** |
||
3369 | * Obtain the function type called by this instruction. |
||
3370 | * |
||
3371 | * @see llvm::CallBase::getFunctionType() |
||
3372 | */ |
||
3373 | LLVMTypeRef LLVMGetCalledFunctionType(LLVMValueRef C); |
||
3374 | |||
3375 | /** |
||
3376 | * Obtain the pointer to the function invoked by this instruction. |
||
3377 | * |
||
3378 | * This expects an LLVMValueRef that corresponds to a llvm::CallInst or |
||
3379 | * llvm::InvokeInst. |
||
3380 | * |
||
3381 | * @see llvm::CallInst::getCalledOperand() |
||
3382 | * @see llvm::InvokeInst::getCalledOperand() |
||
3383 | */ |
||
3384 | LLVMValueRef LLVMGetCalledValue(LLVMValueRef Instr); |
||
3385 | |||
3386 | /** |
||
3387 | * Obtain whether a call instruction is a tail call. |
||
3388 | * |
||
3389 | * This only works on llvm::CallInst instructions. |
||
3390 | * |
||
3391 | * @see llvm::CallInst::isTailCall() |
||
3392 | */ |
||
3393 | LLVMBool LLVMIsTailCall(LLVMValueRef CallInst); |
||
3394 | |||
3395 | /** |
||
3396 | * Set whether a call instruction is a tail call. |
||
3397 | * |
||
3398 | * This only works on llvm::CallInst instructions. |
||
3399 | * |
||
3400 | * @see llvm::CallInst::setTailCall() |
||
3401 | */ |
||
3402 | void LLVMSetTailCall(LLVMValueRef CallInst, LLVMBool IsTailCall); |
||
3403 | |||
3404 | /** |
||
3405 | * Return the normal destination basic block. |
||
3406 | * |
||
3407 | * This only works on llvm::InvokeInst instructions. |
||
3408 | * |
||
3409 | * @see llvm::InvokeInst::getNormalDest() |
||
3410 | */ |
||
3411 | LLVMBasicBlockRef LLVMGetNormalDest(LLVMValueRef InvokeInst); |
||
3412 | |||
3413 | /** |
||
3414 | * Return the unwind destination basic block. |
||
3415 | * |
||
3416 | * Works on llvm::InvokeInst, llvm::CleanupReturnInst, and |
||
3417 | * llvm::CatchSwitchInst instructions. |
||
3418 | * |
||
3419 | * @see llvm::InvokeInst::getUnwindDest() |
||
3420 | * @see llvm::CleanupReturnInst::getUnwindDest() |
||
3421 | * @see llvm::CatchSwitchInst::getUnwindDest() |
||
3422 | */ |
||
3423 | LLVMBasicBlockRef LLVMGetUnwindDest(LLVMValueRef InvokeInst); |
||
3424 | |||
3425 | /** |
||
3426 | * Set the normal destination basic block. |
||
3427 | * |
||
3428 | * This only works on llvm::InvokeInst instructions. |
||
3429 | * |
||
3430 | * @see llvm::InvokeInst::setNormalDest() |
||
3431 | */ |
||
3432 | void LLVMSetNormalDest(LLVMValueRef InvokeInst, LLVMBasicBlockRef B); |
||
3433 | |||
3434 | /** |
||
3435 | * Set the unwind destination basic block. |
||
3436 | * |
||
3437 | * Works on llvm::InvokeInst, llvm::CleanupReturnInst, and |
||
3438 | * llvm::CatchSwitchInst instructions. |
||
3439 | * |
||
3440 | * @see llvm::InvokeInst::setUnwindDest() |
||
3441 | * @see llvm::CleanupReturnInst::setUnwindDest() |
||
3442 | * @see llvm::CatchSwitchInst::setUnwindDest() |
||
3443 | */ |
||
3444 | void LLVMSetUnwindDest(LLVMValueRef InvokeInst, LLVMBasicBlockRef B); |
||
3445 | |||
3446 | /** |
||
3447 | * @} |
||
3448 | */ |
||
3449 | |||
3450 | /** |
||
3451 | * @defgroup LLVMCCoreValueInstructionTerminator Terminators |
||
3452 | * |
||
3453 | * Functions in this group only apply to instructions for which |
||
3454 | * LLVMIsATerminatorInst returns true. |
||
3455 | * |
||
3456 | * @{ |
||
3457 | */ |
||
3458 | |||
3459 | /** |
||
3460 | * Return the number of successors that this terminator has. |
||
3461 | * |
||
3462 | * @see llvm::Instruction::getNumSuccessors |
||
3463 | */ |
||
3464 | unsigned LLVMGetNumSuccessors(LLVMValueRef Term); |
||
3465 | |||
3466 | /** |
||
3467 | * Return the specified successor. |
||
3468 | * |
||
3469 | * @see llvm::Instruction::getSuccessor |
||
3470 | */ |
||
3471 | LLVMBasicBlockRef LLVMGetSuccessor(LLVMValueRef Term, unsigned i); |
||
3472 | |||
3473 | /** |
||
3474 | * Update the specified successor to point at the provided block. |
||
3475 | * |
||
3476 | * @see llvm::Instruction::setSuccessor |
||
3477 | */ |
||
3478 | void LLVMSetSuccessor(LLVMValueRef Term, unsigned i, LLVMBasicBlockRef block); |
||
3479 | |||
3480 | /** |
||
3481 | * Return if a branch is conditional. |
||
3482 | * |
||
3483 | * This only works on llvm::BranchInst instructions. |
||
3484 | * |
||
3485 | * @see llvm::BranchInst::isConditional |
||
3486 | */ |
||
3487 | LLVMBool LLVMIsConditional(LLVMValueRef Branch); |
||
3488 | |||
3489 | /** |
||
3490 | * Return the condition of a branch instruction. |
||
3491 | * |
||
3492 | * This only works on llvm::BranchInst instructions. |
||
3493 | * |
||
3494 | * @see llvm::BranchInst::getCondition |
||
3495 | */ |
||
3496 | LLVMValueRef LLVMGetCondition(LLVMValueRef Branch); |
||
3497 | |||
3498 | /** |
||
3499 | * Set the condition of a branch instruction. |
||
3500 | * |
||
3501 | * This only works on llvm::BranchInst instructions. |
||
3502 | * |
||
3503 | * @see llvm::BranchInst::setCondition |
||
3504 | */ |
||
3505 | void LLVMSetCondition(LLVMValueRef Branch, LLVMValueRef Cond); |
||
3506 | |||
3507 | /** |
||
3508 | * Obtain the default destination basic block of a switch instruction. |
||
3509 | * |
||
3510 | * This only works on llvm::SwitchInst instructions. |
||
3511 | * |
||
3512 | * @see llvm::SwitchInst::getDefaultDest() |
||
3513 | */ |
||
3514 | LLVMBasicBlockRef LLVMGetSwitchDefaultDest(LLVMValueRef SwitchInstr); |
||
3515 | |||
3516 | /** |
||
3517 | * @} |
||
3518 | */ |
||
3519 | |||
3520 | /** |
||
3521 | * @defgroup LLVMCCoreValueInstructionAlloca Allocas |
||
3522 | * |
||
3523 | * Functions in this group only apply to instructions that map to |
||
3524 | * llvm::AllocaInst instances. |
||
3525 | * |
||
3526 | * @{ |
||
3527 | */ |
||
3528 | |||
3529 | /** |
||
3530 | * Obtain the type that is being allocated by the alloca instruction. |
||
3531 | */ |
||
3532 | LLVMTypeRef LLVMGetAllocatedType(LLVMValueRef Alloca); |
||
3533 | |||
3534 | /** |
||
3535 | * @} |
||
3536 | */ |
||
3537 | |||
3538 | /** |
||
3539 | * @defgroup LLVMCCoreValueInstructionGetElementPointer GEPs |
||
3540 | * |
||
3541 | * Functions in this group only apply to instructions that map to |
||
3542 | * llvm::GetElementPtrInst instances. |
||
3543 | * |
||
3544 | * @{ |
||
3545 | */ |
||
3546 | |||
3547 | /** |
||
3548 | * Check whether the given GEP operator is inbounds. |
||
3549 | */ |
||
3550 | LLVMBool LLVMIsInBounds(LLVMValueRef GEP); |
||
3551 | |||
3552 | /** |
||
3553 | * Set the given GEP instruction to be inbounds or not. |
||
3554 | */ |
||
3555 | void LLVMSetIsInBounds(LLVMValueRef GEP, LLVMBool InBounds); |
||
3556 | |||
3557 | /** |
||
3558 | * Get the source element type of the given GEP operator. |
||
3559 | */ |
||
3560 | LLVMTypeRef LLVMGetGEPSourceElementType(LLVMValueRef GEP); |
||
3561 | |||
3562 | /** |
||
3563 | * @} |
||
3564 | */ |
||
3565 | |||
3566 | /** |
||
3567 | * @defgroup LLVMCCoreValueInstructionPHINode PHI Nodes |
||
3568 | * |
||
3569 | * Functions in this group only apply to instructions that map to |
||
3570 | * llvm::PHINode instances. |
||
3571 | * |
||
3572 | * @{ |
||
3573 | */ |
||
3574 | |||
3575 | /** |
||
3576 | * Add an incoming value to the end of a PHI list. |
||
3577 | */ |
||
3578 | void LLVMAddIncoming(LLVMValueRef PhiNode, LLVMValueRef *IncomingValues, |
||
3579 | LLVMBasicBlockRef *IncomingBlocks, unsigned Count); |
||
3580 | |||
3581 | /** |
||
3582 | * Obtain the number of incoming basic blocks to a PHI node. |
||
3583 | */ |
||
3584 | unsigned LLVMCountIncoming(LLVMValueRef PhiNode); |
||
3585 | |||
3586 | /** |
||
3587 | * Obtain an incoming value to a PHI node as an LLVMValueRef. |
||
3588 | */ |
||
3589 | LLVMValueRef LLVMGetIncomingValue(LLVMValueRef PhiNode, unsigned Index); |
||
3590 | |||
3591 | /** |
||
3592 | * Obtain an incoming value to a PHI node as an LLVMBasicBlockRef. |
||
3593 | */ |
||
3594 | LLVMBasicBlockRef LLVMGetIncomingBlock(LLVMValueRef PhiNode, unsigned Index); |
||
3595 | |||
3596 | /** |
||
3597 | * @} |
||
3598 | */ |
||
3599 | |||
3600 | /** |
||
3601 | * @defgroup LLVMCCoreValueInstructionExtractValue ExtractValue |
||
3602 | * @defgroup LLVMCCoreValueInstructionInsertValue InsertValue |
||
3603 | * |
||
3604 | * Functions in this group only apply to instructions that map to |
||
3605 | * llvm::ExtractValue and llvm::InsertValue instances. |
||
3606 | * |
||
3607 | * @{ |
||
3608 | */ |
||
3609 | |||
3610 | /** |
||
3611 | * Obtain the number of indices. |
||
3612 | * NB: This also works on GEP operators. |
||
3613 | */ |
||
3614 | unsigned LLVMGetNumIndices(LLVMValueRef Inst); |
||
3615 | |||
3616 | /** |
||
3617 | * Obtain the indices as an array. |
||
3618 | */ |
||
3619 | const unsigned *LLVMGetIndices(LLVMValueRef Inst); |
||
3620 | |||
3621 | /** |
||
3622 | * @} |
||
3623 | */ |
||
3624 | |||
3625 | /** |
||
3626 | * @} |
||
3627 | */ |
||
3628 | |||
3629 | /** |
||
3630 | * @} |
||
3631 | */ |
||
3632 | |||
3633 | /** |
||
3634 | * @defgroup LLVMCCoreInstructionBuilder Instruction Builders |
||
3635 | * |
||
3636 | * An instruction builder represents a point within a basic block and is |
||
3637 | * the exclusive means of building instructions using the C interface. |
||
3638 | * |
||
3639 | * @{ |
||
3640 | */ |
||
3641 | |||
3642 | LLVMBuilderRef LLVMCreateBuilderInContext(LLVMContextRef C); |
||
3643 | LLVMBuilderRef LLVMCreateBuilder(void); |
||
3644 | void LLVMPositionBuilder(LLVMBuilderRef Builder, LLVMBasicBlockRef Block, |
||
3645 | LLVMValueRef Instr); |
||
3646 | void LLVMPositionBuilderBefore(LLVMBuilderRef Builder, LLVMValueRef Instr); |
||
3647 | void LLVMPositionBuilderAtEnd(LLVMBuilderRef Builder, LLVMBasicBlockRef Block); |
||
3648 | LLVMBasicBlockRef LLVMGetInsertBlock(LLVMBuilderRef Builder); |
||
3649 | void LLVMClearInsertionPosition(LLVMBuilderRef Builder); |
||
3650 | void LLVMInsertIntoBuilder(LLVMBuilderRef Builder, LLVMValueRef Instr); |
||
3651 | void LLVMInsertIntoBuilderWithName(LLVMBuilderRef Builder, LLVMValueRef Instr, |
||
3652 | const char *Name); |
||
3653 | void LLVMDisposeBuilder(LLVMBuilderRef Builder); |
||
3654 | |||
3655 | /* Metadata */ |
||
3656 | |||
3657 | /** |
||
3658 | * Get location information used by debugging information. |
||
3659 | * |
||
3660 | * @see llvm::IRBuilder::getCurrentDebugLocation() |
||
3661 | */ |
||
3662 | LLVMMetadataRef LLVMGetCurrentDebugLocation2(LLVMBuilderRef Builder); |
||
3663 | |||
3664 | /** |
||
3665 | * Set location information used by debugging information. |
||
3666 | * |
||
3667 | * To clear the location metadata of the given instruction, pass NULL to \p Loc. |
||
3668 | * |
||
3669 | * @see llvm::IRBuilder::SetCurrentDebugLocation() |
||
3670 | */ |
||
3671 | void LLVMSetCurrentDebugLocation2(LLVMBuilderRef Builder, LLVMMetadataRef Loc); |
||
3672 | |||
3673 | /** |
||
3674 | * Attempts to set the debug location for the given instruction using the |
||
3675 | * current debug location for the given builder. If the builder has no current |
||
3676 | * debug location, this function is a no-op. |
||
3677 | * |
||
3678 | * @deprecated LLVMSetInstDebugLocation is deprecated in favor of the more general |
||
3679 | * LLVMAddMetadataToInst. |
||
3680 | * |
||
3681 | * @see llvm::IRBuilder::SetInstDebugLocation() |
||
3682 | */ |
||
3683 | void LLVMSetInstDebugLocation(LLVMBuilderRef Builder, LLVMValueRef Inst); |
||
3684 | |||
3685 | /** |
||
3686 | * Adds the metadata registered with the given builder to the given instruction. |
||
3687 | * |
||
3688 | * @see llvm::IRBuilder::AddMetadataToInst() |
||
3689 | */ |
||
3690 | void LLVMAddMetadataToInst(LLVMBuilderRef Builder, LLVMValueRef Inst); |
||
3691 | |||
3692 | /** |
||
3693 | * Get the dafult floating-point math metadata for a given builder. |
||
3694 | * |
||
3695 | * @see llvm::IRBuilder::getDefaultFPMathTag() |
||
3696 | */ |
||
3697 | LLVMMetadataRef LLVMBuilderGetDefaultFPMathTag(LLVMBuilderRef Builder); |
||
3698 | |||
3699 | /** |
||
3700 | * Set the default floating-point math metadata for the given builder. |
||
3701 | * |
||
3702 | * To clear the metadata, pass NULL to \p FPMathTag. |
||
3703 | * |
||
3704 | * @see llvm::IRBuilder::setDefaultFPMathTag() |
||
3705 | */ |
||
3706 | void LLVMBuilderSetDefaultFPMathTag(LLVMBuilderRef Builder, |
||
3707 | LLVMMetadataRef FPMathTag); |
||
3708 | |||
3709 | /** |
||
3710 | * Deprecated: Passing the NULL location will crash. |
||
3711 | * Use LLVMGetCurrentDebugLocation2 instead. |
||
3712 | */ |
||
3713 | void LLVMSetCurrentDebugLocation(LLVMBuilderRef Builder, LLVMValueRef L); |
||
3714 | /** |
||
3715 | * Deprecated: Returning the NULL location will crash. |
||
3716 | * Use LLVMGetCurrentDebugLocation2 instead. |
||
3717 | */ |
||
3718 | LLVMValueRef LLVMGetCurrentDebugLocation(LLVMBuilderRef Builder); |
||
3719 | |||
3720 | /* Terminators */ |
||
3721 | LLVMValueRef LLVMBuildRetVoid(LLVMBuilderRef); |
||
3722 | LLVMValueRef LLVMBuildRet(LLVMBuilderRef, LLVMValueRef V); |
||
3723 | LLVMValueRef LLVMBuildAggregateRet(LLVMBuilderRef, LLVMValueRef *RetVals, |
||
3724 | unsigned N); |
||
3725 | LLVMValueRef LLVMBuildBr(LLVMBuilderRef, LLVMBasicBlockRef Dest); |
||
3726 | LLVMValueRef LLVMBuildCondBr(LLVMBuilderRef, LLVMValueRef If, |
||
3727 | LLVMBasicBlockRef Then, LLVMBasicBlockRef Else); |
||
3728 | LLVMValueRef LLVMBuildSwitch(LLVMBuilderRef, LLVMValueRef V, |
||
3729 | LLVMBasicBlockRef Else, unsigned NumCases); |
||
3730 | LLVMValueRef LLVMBuildIndirectBr(LLVMBuilderRef B, LLVMValueRef Addr, |
||
3731 | unsigned NumDests); |
||
3732 | LLVMValueRef LLVMBuildInvoke2(LLVMBuilderRef, LLVMTypeRef Ty, LLVMValueRef Fn, |
||
3733 | LLVMValueRef *Args, unsigned NumArgs, |
||
3734 | LLVMBasicBlockRef Then, LLVMBasicBlockRef Catch, |
||
3735 | const char *Name); |
||
3736 | LLVMValueRef LLVMBuildUnreachable(LLVMBuilderRef); |
||
3737 | |||
3738 | /* Exception Handling */ |
||
3739 | LLVMValueRef LLVMBuildResume(LLVMBuilderRef B, LLVMValueRef Exn); |
||
3740 | LLVMValueRef LLVMBuildLandingPad(LLVMBuilderRef B, LLVMTypeRef Ty, |
||
3741 | LLVMValueRef PersFn, unsigned NumClauses, |
||
3742 | const char *Name); |
||
3743 | LLVMValueRef LLVMBuildCleanupRet(LLVMBuilderRef B, LLVMValueRef CatchPad, |
||
3744 | LLVMBasicBlockRef BB); |
||
3745 | LLVMValueRef LLVMBuildCatchRet(LLVMBuilderRef B, LLVMValueRef CatchPad, |
||
3746 | LLVMBasicBlockRef BB); |
||
3747 | LLVMValueRef LLVMBuildCatchPad(LLVMBuilderRef B, LLVMValueRef ParentPad, |
||
3748 | LLVMValueRef *Args, unsigned NumArgs, |
||
3749 | const char *Name); |
||
3750 | LLVMValueRef LLVMBuildCleanupPad(LLVMBuilderRef B, LLVMValueRef ParentPad, |
||
3751 | LLVMValueRef *Args, unsigned NumArgs, |
||
3752 | const char *Name); |
||
3753 | LLVMValueRef LLVMBuildCatchSwitch(LLVMBuilderRef B, LLVMValueRef ParentPad, |
||
3754 | LLVMBasicBlockRef UnwindBB, |
||
3755 | unsigned NumHandlers, const char *Name); |
||
3756 | |||
3757 | /* Add a case to the switch instruction */ |
||
3758 | void LLVMAddCase(LLVMValueRef Switch, LLVMValueRef OnVal, |
||
3759 | LLVMBasicBlockRef Dest); |
||
3760 | |||
3761 | /* Add a destination to the indirectbr instruction */ |
||
3762 | void LLVMAddDestination(LLVMValueRef IndirectBr, LLVMBasicBlockRef Dest); |
||
3763 | |||
3764 | /* Get the number of clauses on the landingpad instruction */ |
||
3765 | unsigned LLVMGetNumClauses(LLVMValueRef LandingPad); |
||
3766 | |||
3767 | /* Get the value of the clause at index Idx on the landingpad instruction */ |
||
3768 | LLVMValueRef LLVMGetClause(LLVMValueRef LandingPad, unsigned Idx); |
||
3769 | |||
3770 | /* Add a catch or filter clause to the landingpad instruction */ |
||
3771 | void LLVMAddClause(LLVMValueRef LandingPad, LLVMValueRef ClauseVal); |
||
3772 | |||
3773 | /* Get the 'cleanup' flag in the landingpad instruction */ |
||
3774 | LLVMBool LLVMIsCleanup(LLVMValueRef LandingPad); |
||
3775 | |||
3776 | /* Set the 'cleanup' flag in the landingpad instruction */ |
||
3777 | void LLVMSetCleanup(LLVMValueRef LandingPad, LLVMBool Val); |
||
3778 | |||
3779 | /* Add a destination to the catchswitch instruction */ |
||
3780 | void LLVMAddHandler(LLVMValueRef CatchSwitch, LLVMBasicBlockRef Dest); |
||
3781 | |||
3782 | /* Get the number of handlers on the catchswitch instruction */ |
||
3783 | unsigned LLVMGetNumHandlers(LLVMValueRef CatchSwitch); |
||
3784 | |||
3785 | /** |
||
3786 | * Obtain the basic blocks acting as handlers for a catchswitch instruction. |
||
3787 | * |
||
3788 | * The Handlers parameter should point to a pre-allocated array of |
||
3789 | * LLVMBasicBlockRefs at least LLVMGetNumHandlers() large. On return, the |
||
3790 | * first LLVMGetNumHandlers() entries in the array will be populated |
||
3791 | * with LLVMBasicBlockRef instances. |
||
3792 | * |
||
3793 | * @param CatchSwitch The catchswitch instruction to operate on. |
||
3794 | * @param Handlers Memory address of an array to be filled with basic blocks. |
||
3795 | */ |
||
3796 | void LLVMGetHandlers(LLVMValueRef CatchSwitch, LLVMBasicBlockRef *Handlers); |
||
3797 | |||
3798 | /* Funclets */ |
||
3799 | |||
3800 | /* Get the number of funcletpad arguments. */ |
||
3801 | LLVMValueRef LLVMGetArgOperand(LLVMValueRef Funclet, unsigned i); |
||
3802 | |||
3803 | /* Set a funcletpad argument at the given index. */ |
||
3804 | void LLVMSetArgOperand(LLVMValueRef Funclet, unsigned i, LLVMValueRef value); |
||
3805 | |||
3806 | /** |
||
3807 | * Get the parent catchswitch instruction of a catchpad instruction. |
||
3808 | * |
||
3809 | * This only works on llvm::CatchPadInst instructions. |
||
3810 | * |
||
3811 | * @see llvm::CatchPadInst::getCatchSwitch() |
||
3812 | */ |
||
3813 | LLVMValueRef LLVMGetParentCatchSwitch(LLVMValueRef CatchPad); |
||
3814 | |||
3815 | /** |
||
3816 | * Set the parent catchswitch instruction of a catchpad instruction. |
||
3817 | * |
||
3818 | * This only works on llvm::CatchPadInst instructions. |
||
3819 | * |
||
3820 | * @see llvm::CatchPadInst::setCatchSwitch() |
||
3821 | */ |
||
3822 | void LLVMSetParentCatchSwitch(LLVMValueRef CatchPad, LLVMValueRef CatchSwitch); |
||
3823 | |||
3824 | /* Arithmetic */ |
||
3825 | LLVMValueRef LLVMBuildAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, |
||
3826 | const char *Name); |
||
3827 | LLVMValueRef LLVMBuildNSWAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, |
||
3828 | const char *Name); |
||
3829 | LLVMValueRef LLVMBuildNUWAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, |
||
3830 | const char *Name); |
||
3831 | LLVMValueRef LLVMBuildFAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, |
||
3832 | const char *Name); |
||
3833 | LLVMValueRef LLVMBuildSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, |
||
3834 | const char *Name); |
||
3835 | LLVMValueRef LLVMBuildNSWSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, |
||
3836 | const char *Name); |
||
3837 | LLVMValueRef LLVMBuildNUWSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, |
||
3838 | const char *Name); |
||
3839 | LLVMValueRef LLVMBuildFSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, |
||
3840 | const char *Name); |
||
3841 | LLVMValueRef LLVMBuildMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, |
||
3842 | const char *Name); |
||
3843 | LLVMValueRef LLVMBuildNSWMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, |
||
3844 | const char *Name); |
||
3845 | LLVMValueRef LLVMBuildNUWMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, |
||
3846 | const char *Name); |
||
3847 | LLVMValueRef LLVMBuildFMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, |
||
3848 | const char *Name); |
||
3849 | LLVMValueRef LLVMBuildUDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, |
||
3850 | const char *Name); |
||
3851 | LLVMValueRef LLVMBuildExactUDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, |
||
3852 | const char *Name); |
||
3853 | LLVMValueRef LLVMBuildSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, |
||
3854 | const char *Name); |
||
3855 | LLVMValueRef LLVMBuildExactSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, |
||
3856 | const char *Name); |
||
3857 | LLVMValueRef LLVMBuildFDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, |
||
3858 | const char *Name); |
||
3859 | LLVMValueRef LLVMBuildURem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, |
||
3860 | const char *Name); |
||
3861 | LLVMValueRef LLVMBuildSRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, |
||
3862 | const char *Name); |
||
3863 | LLVMValueRef LLVMBuildFRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, |
||
3864 | const char *Name); |
||
3865 | LLVMValueRef LLVMBuildShl(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, |
||
3866 | const char *Name); |
||
3867 | LLVMValueRef LLVMBuildLShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, |
||
3868 | const char *Name); |
||
3869 | LLVMValueRef LLVMBuildAShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, |
||
3870 | const char *Name); |
||
3871 | LLVMValueRef LLVMBuildAnd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, |
||
3872 | const char *Name); |
||
3873 | LLVMValueRef LLVMBuildOr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, |
||
3874 | const char *Name); |
||
3875 | LLVMValueRef LLVMBuildXor(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, |
||
3876 | const char *Name); |
||
3877 | LLVMValueRef LLVMBuildBinOp(LLVMBuilderRef B, LLVMOpcode Op, |
||
3878 | LLVMValueRef LHS, LLVMValueRef RHS, |
||
3879 | const char *Name); |
||
3880 | LLVMValueRef LLVMBuildNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name); |
||
3881 | LLVMValueRef LLVMBuildNSWNeg(LLVMBuilderRef B, LLVMValueRef V, |
||
3882 | const char *Name); |
||
3883 | LLVMValueRef LLVMBuildNUWNeg(LLVMBuilderRef B, LLVMValueRef V, |
||
3884 | const char *Name); |
||
3885 | LLVMValueRef LLVMBuildFNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name); |
||
3886 | LLVMValueRef LLVMBuildNot(LLVMBuilderRef, LLVMValueRef V, const char *Name); |
||
3887 | |||
3888 | /* Memory */ |
||
3889 | LLVMValueRef LLVMBuildMalloc(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name); |
||
3890 | LLVMValueRef LLVMBuildArrayMalloc(LLVMBuilderRef, LLVMTypeRef Ty, |
||
3891 | LLVMValueRef Val, const char *Name); |
||
3892 | |||
3893 | /** |
||
3894 | * Creates and inserts a memset to the specified pointer and the |
||
3895 | * specified value. |
||
3896 | * |
||
3897 | * @see llvm::IRRBuilder::CreateMemSet() |
||
3898 | */ |
||
3899 | LLVMValueRef LLVMBuildMemSet(LLVMBuilderRef B, LLVMValueRef Ptr, |
||
3900 | LLVMValueRef Val, LLVMValueRef Len, |
||
3901 | unsigned Align); |
||
3902 | /** |
||
3903 | * Creates and inserts a memcpy between the specified pointers. |
||
3904 | * |
||
3905 | * @see llvm::IRRBuilder::CreateMemCpy() |
||
3906 | */ |
||
3907 | LLVMValueRef LLVMBuildMemCpy(LLVMBuilderRef B, |
||
3908 | LLVMValueRef Dst, unsigned DstAlign, |
||
3909 | LLVMValueRef Src, unsigned SrcAlign, |
||
3910 | LLVMValueRef Size); |
||
3911 | /** |
||
3912 | * Creates and inserts a memmove between the specified pointers. |
||
3913 | * |
||
3914 | * @see llvm::IRRBuilder::CreateMemMove() |
||
3915 | */ |
||
3916 | LLVMValueRef LLVMBuildMemMove(LLVMBuilderRef B, |
||
3917 | LLVMValueRef Dst, unsigned DstAlign, |
||
3918 | LLVMValueRef Src, unsigned SrcAlign, |
||
3919 | LLVMValueRef Size); |
||
3920 | |||
3921 | LLVMValueRef LLVMBuildAlloca(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name); |
||
3922 | LLVMValueRef LLVMBuildArrayAlloca(LLVMBuilderRef, LLVMTypeRef Ty, |
||
3923 | LLVMValueRef Val, const char *Name); |
||
3924 | LLVMValueRef LLVMBuildFree(LLVMBuilderRef, LLVMValueRef PointerVal); |
||
3925 | LLVMValueRef LLVMBuildLoad2(LLVMBuilderRef, LLVMTypeRef Ty, |
||
3926 | LLVMValueRef PointerVal, const char *Name); |
||
3927 | LLVMValueRef LLVMBuildStore(LLVMBuilderRef, LLVMValueRef Val, LLVMValueRef Ptr); |
||
3928 | LLVMValueRef LLVMBuildGEP2(LLVMBuilderRef B, LLVMTypeRef Ty, |
||
3929 | LLVMValueRef Pointer, LLVMValueRef *Indices, |
||
3930 | unsigned NumIndices, const char *Name); |
||
3931 | LLVMValueRef LLVMBuildInBoundsGEP2(LLVMBuilderRef B, LLVMTypeRef Ty, |
||
3932 | LLVMValueRef Pointer, LLVMValueRef *Indices, |
||
3933 | unsigned NumIndices, const char *Name); |
||
3934 | LLVMValueRef LLVMBuildStructGEP2(LLVMBuilderRef B, LLVMTypeRef Ty, |
||
3935 | LLVMValueRef Pointer, unsigned Idx, |
||
3936 | const char *Name); |
||
3937 | LLVMValueRef LLVMBuildGlobalString(LLVMBuilderRef B, const char *Str, |
||
3938 | const char *Name); |
||
3939 | LLVMValueRef LLVMBuildGlobalStringPtr(LLVMBuilderRef B, const char *Str, |
||
3940 | const char *Name); |
||
3941 | LLVMBool LLVMGetVolatile(LLVMValueRef MemoryAccessInst); |
||
3942 | void LLVMSetVolatile(LLVMValueRef MemoryAccessInst, LLVMBool IsVolatile); |
||
3943 | LLVMBool LLVMGetWeak(LLVMValueRef CmpXchgInst); |
||
3944 | void LLVMSetWeak(LLVMValueRef CmpXchgInst, LLVMBool IsWeak); |
||
3945 | LLVMAtomicOrdering LLVMGetOrdering(LLVMValueRef MemoryAccessInst); |
||
3946 | void LLVMSetOrdering(LLVMValueRef MemoryAccessInst, LLVMAtomicOrdering Ordering); |
||
3947 | LLVMAtomicRMWBinOp LLVMGetAtomicRMWBinOp(LLVMValueRef AtomicRMWInst); |
||
3948 | void LLVMSetAtomicRMWBinOp(LLVMValueRef AtomicRMWInst, LLVMAtomicRMWBinOp BinOp); |
||
3949 | |||
3950 | /* Casts */ |
||
3951 | LLVMValueRef LLVMBuildTrunc(LLVMBuilderRef, LLVMValueRef Val, |
||
3952 | LLVMTypeRef DestTy, const char *Name); |
||
3953 | LLVMValueRef LLVMBuildZExt(LLVMBuilderRef, LLVMValueRef Val, |
||
3954 | LLVMTypeRef DestTy, const char *Name); |
||
3955 | LLVMValueRef LLVMBuildSExt(LLVMBuilderRef, LLVMValueRef Val, |
||
3956 | LLVMTypeRef DestTy, const char *Name); |
||
3957 | LLVMValueRef LLVMBuildFPToUI(LLVMBuilderRef, LLVMValueRef Val, |
||
3958 | LLVMTypeRef DestTy, const char *Name); |
||
3959 | LLVMValueRef LLVMBuildFPToSI(LLVMBuilderRef, LLVMValueRef Val, |
||
3960 | LLVMTypeRef DestTy, const char *Name); |
||
3961 | LLVMValueRef LLVMBuildUIToFP(LLVMBuilderRef, LLVMValueRef Val, |
||
3962 | LLVMTypeRef DestTy, const char *Name); |
||
3963 | LLVMValueRef LLVMBuildSIToFP(LLVMBuilderRef, LLVMValueRef Val, |
||
3964 | LLVMTypeRef DestTy, const char *Name); |
||
3965 | LLVMValueRef LLVMBuildFPTrunc(LLVMBuilderRef, LLVMValueRef Val, |
||
3966 | LLVMTypeRef DestTy, const char *Name); |
||
3967 | LLVMValueRef LLVMBuildFPExt(LLVMBuilderRef, LLVMValueRef Val, |
||
3968 | LLVMTypeRef DestTy, const char *Name); |
||
3969 | LLVMValueRef LLVMBuildPtrToInt(LLVMBuilderRef, LLVMValueRef Val, |
||
3970 | LLVMTypeRef DestTy, const char *Name); |
||
3971 | LLVMValueRef LLVMBuildIntToPtr(LLVMBuilderRef, LLVMValueRef Val, |
||
3972 | LLVMTypeRef DestTy, const char *Name); |
||
3973 | LLVMValueRef LLVMBuildBitCast(LLVMBuilderRef, LLVMValueRef Val, |
||
3974 | LLVMTypeRef DestTy, const char *Name); |
||
3975 | LLVMValueRef LLVMBuildAddrSpaceCast(LLVMBuilderRef, LLVMValueRef Val, |
||
3976 | LLVMTypeRef DestTy, const char *Name); |
||
3977 | LLVMValueRef LLVMBuildZExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val, |
||
3978 | LLVMTypeRef DestTy, const char *Name); |
||
3979 | LLVMValueRef LLVMBuildSExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val, |
||
3980 | LLVMTypeRef DestTy, const char *Name); |
||
3981 | LLVMValueRef LLVMBuildTruncOrBitCast(LLVMBuilderRef, LLVMValueRef Val, |
||
3982 | LLVMTypeRef DestTy, const char *Name); |
||
3983 | LLVMValueRef LLVMBuildCast(LLVMBuilderRef B, LLVMOpcode Op, LLVMValueRef Val, |
||
3984 | LLVMTypeRef DestTy, const char *Name); |
||
3985 | LLVMValueRef LLVMBuildPointerCast(LLVMBuilderRef, LLVMValueRef Val, |
||
3986 | LLVMTypeRef DestTy, const char *Name); |
||
3987 | LLVMValueRef LLVMBuildIntCast2(LLVMBuilderRef, LLVMValueRef Val, |
||
3988 | LLVMTypeRef DestTy, LLVMBool IsSigned, |
||
3989 | const char *Name); |
||
3990 | LLVMValueRef LLVMBuildFPCast(LLVMBuilderRef, LLVMValueRef Val, |
||
3991 | LLVMTypeRef DestTy, const char *Name); |
||
3992 | |||
3993 | /** Deprecated: This cast is always signed. Use LLVMBuildIntCast2 instead. */ |
||
3994 | LLVMValueRef LLVMBuildIntCast(LLVMBuilderRef, LLVMValueRef Val, /*Signed cast!*/ |
||
3995 | LLVMTypeRef DestTy, const char *Name); |
||
3996 | |||
3997 | LLVMOpcode LLVMGetCastOpcode(LLVMValueRef Src, LLVMBool SrcIsSigned, |
||
3998 | LLVMTypeRef DestTy, LLVMBool DestIsSigned); |
||
3999 | |||
4000 | /* Comparisons */ |
||
4001 | LLVMValueRef LLVMBuildICmp(LLVMBuilderRef, LLVMIntPredicate Op, |
||
4002 | LLVMValueRef LHS, LLVMValueRef RHS, |
||
4003 | const char *Name); |
||
4004 | LLVMValueRef LLVMBuildFCmp(LLVMBuilderRef, LLVMRealPredicate Op, |
||
4005 | LLVMValueRef LHS, LLVMValueRef RHS, |
||
4006 | const char *Name); |
||
4007 | |||
4008 | /* Miscellaneous instructions */ |
||
4009 | LLVMValueRef LLVMBuildPhi(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name); |
||
4010 | LLVMValueRef LLVMBuildCall2(LLVMBuilderRef, LLVMTypeRef, LLVMValueRef Fn, |
||
4011 | LLVMValueRef *Args, unsigned NumArgs, |
||
4012 | const char *Name); |
||
4013 | LLVMValueRef LLVMBuildSelect(LLVMBuilderRef, LLVMValueRef If, |
||
4014 | LLVMValueRef Then, LLVMValueRef Else, |
||
4015 | const char *Name); |
||
4016 | LLVMValueRef LLVMBuildVAArg(LLVMBuilderRef, LLVMValueRef List, LLVMTypeRef Ty, |
||
4017 | const char *Name); |
||
4018 | LLVMValueRef LLVMBuildExtractElement(LLVMBuilderRef, LLVMValueRef VecVal, |
||
4019 | LLVMValueRef Index, const char *Name); |
||
4020 | LLVMValueRef LLVMBuildInsertElement(LLVMBuilderRef, LLVMValueRef VecVal, |
||
4021 | LLVMValueRef EltVal, LLVMValueRef Index, |
||
4022 | const char *Name); |
||
4023 | LLVMValueRef LLVMBuildShuffleVector(LLVMBuilderRef, LLVMValueRef V1, |
||
4024 | LLVMValueRef V2, LLVMValueRef Mask, |
||
4025 | const char *Name); |
||
4026 | LLVMValueRef LLVMBuildExtractValue(LLVMBuilderRef, LLVMValueRef AggVal, |
||
4027 | unsigned Index, const char *Name); |
||
4028 | LLVMValueRef LLVMBuildInsertValue(LLVMBuilderRef, LLVMValueRef AggVal, |
||
4029 | LLVMValueRef EltVal, unsigned Index, |
||
4030 | const char *Name); |
||
4031 | LLVMValueRef LLVMBuildFreeze(LLVMBuilderRef, LLVMValueRef Val, |
||
4032 | const char *Name); |
||
4033 | |||
4034 | LLVMValueRef LLVMBuildIsNull(LLVMBuilderRef, LLVMValueRef Val, |
||
4035 | const char *Name); |
||
4036 | LLVMValueRef LLVMBuildIsNotNull(LLVMBuilderRef, LLVMValueRef Val, |
||
4037 | const char *Name); |
||
4038 | LLVMValueRef LLVMBuildPtrDiff2(LLVMBuilderRef, LLVMTypeRef ElemTy, |
||
4039 | LLVMValueRef LHS, LLVMValueRef RHS, |
||
4040 | const char *Name); |
||
4041 | LLVMValueRef LLVMBuildFence(LLVMBuilderRef B, LLVMAtomicOrdering ordering, |
||
4042 | LLVMBool singleThread, const char *Name); |
||
4043 | LLVMValueRef LLVMBuildAtomicRMW(LLVMBuilderRef B, LLVMAtomicRMWBinOp op, |
||
4044 | LLVMValueRef PTR, LLVMValueRef Val, |
||
4045 | LLVMAtomicOrdering ordering, |
||
4046 | LLVMBool singleThread); |
||
4047 | LLVMValueRef LLVMBuildAtomicCmpXchg(LLVMBuilderRef B, LLVMValueRef Ptr, |
||
4048 | LLVMValueRef Cmp, LLVMValueRef New, |
||
4049 | LLVMAtomicOrdering SuccessOrdering, |
||
4050 | LLVMAtomicOrdering FailureOrdering, |
||
4051 | LLVMBool SingleThread); |
||
4052 | |||
4053 | /** |
||
4054 | * Get the number of elements in the mask of a ShuffleVector instruction. |
||
4055 | */ |
||
4056 | unsigned LLVMGetNumMaskElements(LLVMValueRef ShuffleVectorInst); |
||
4057 | |||
4058 | /** |
||
4059 | * \returns a constant that specifies that the result of a \c ShuffleVectorInst |
||
4060 | * is undefined. |
||
4061 | */ |
||
4062 | int LLVMGetUndefMaskElem(void); |
||
4063 | |||
4064 | /** |
||
4065 | * Get the mask value at position Elt in the mask of a ShuffleVector |
||
4066 | * instruction. |
||
4067 | * |
||
4068 | * \Returns the result of \c LLVMGetUndefMaskElem() if the mask value is undef |
||
4069 | * at that position. |
||
4070 | */ |
||
4071 | int LLVMGetMaskValue(LLVMValueRef ShuffleVectorInst, unsigned Elt); |
||
4072 | |||
4073 | LLVMBool LLVMIsAtomicSingleThread(LLVMValueRef AtomicInst); |
||
4074 | void LLVMSetAtomicSingleThread(LLVMValueRef AtomicInst, LLVMBool SingleThread); |
||
4075 | |||
4076 | LLVMAtomicOrdering LLVMGetCmpXchgSuccessOrdering(LLVMValueRef CmpXchgInst); |
||
4077 | void LLVMSetCmpXchgSuccessOrdering(LLVMValueRef CmpXchgInst, |
||
4078 | LLVMAtomicOrdering Ordering); |
||
4079 | LLVMAtomicOrdering LLVMGetCmpXchgFailureOrdering(LLVMValueRef CmpXchgInst); |
||
4080 | void LLVMSetCmpXchgFailureOrdering(LLVMValueRef CmpXchgInst, |
||
4081 | LLVMAtomicOrdering Ordering); |
||
4082 | |||
4083 | /** |
||
4084 | * @} |
||
4085 | */ |
||
4086 | |||
4087 | /** |
||
4088 | * @defgroup LLVMCCoreModuleProvider Module Providers |
||
4089 | * |
||
4090 | * @{ |
||
4091 | */ |
||
4092 | |||
4093 | /** |
||
4094 | * Changes the type of M so it can be passed to FunctionPassManagers and the |
||
4095 | * JIT. They take ModuleProviders for historical reasons. |
||
4096 | */ |
||
4097 | LLVMModuleProviderRef |
||
4098 | LLVMCreateModuleProviderForExistingModule(LLVMModuleRef M); |
||
4099 | |||
4100 | /** |
||
4101 | * Destroys the module M. |
||
4102 | */ |
||
4103 | void LLVMDisposeModuleProvider(LLVMModuleProviderRef M); |
||
4104 | |||
4105 | /** |
||
4106 | * @} |
||
4107 | */ |
||
4108 | |||
4109 | /** |
||
4110 | * @defgroup LLVMCCoreMemoryBuffers Memory Buffers |
||
4111 | * |
||
4112 | * @{ |
||
4113 | */ |
||
4114 | |||
4115 | LLVMBool LLVMCreateMemoryBufferWithContentsOfFile(const char *Path, |
||
4116 | LLVMMemoryBufferRef *OutMemBuf, |
||
4117 | char **OutMessage); |
||
4118 | LLVMBool LLVMCreateMemoryBufferWithSTDIN(LLVMMemoryBufferRef *OutMemBuf, |
||
4119 | char **OutMessage); |
||
4120 | LLVMMemoryBufferRef LLVMCreateMemoryBufferWithMemoryRange(const char *InputData, |
||
4121 | size_t InputDataLength, |
||
4122 | const char *BufferName, |
||
4123 | LLVMBool RequiresNullTerminator); |
||
4124 | LLVMMemoryBufferRef LLVMCreateMemoryBufferWithMemoryRangeCopy(const char *InputData, |
||
4125 | size_t InputDataLength, |
||
4126 | const char *BufferName); |
||
4127 | const char *LLVMGetBufferStart(LLVMMemoryBufferRef MemBuf); |
||
4128 | size_t LLVMGetBufferSize(LLVMMemoryBufferRef MemBuf); |
||
4129 | void LLVMDisposeMemoryBuffer(LLVMMemoryBufferRef MemBuf); |
||
4130 | |||
4131 | /** |
||
4132 | * @} |
||
4133 | */ |
||
4134 | |||
4135 | /** |
||
4136 | * @defgroup LLVMCCorePassRegistry Pass Registry |
||
4137 | * @ingroup LLVMCCore |
||
4138 | * |
||
4139 | * @{ |
||
4140 | */ |
||
4141 | |||
4142 | /** Return the global pass registry, for use with initialization functions. |
||
4143 | @see llvm::PassRegistry::getPassRegistry */ |
||
4144 | LLVMPassRegistryRef LLVMGetGlobalPassRegistry(void); |
||
4145 | |||
4146 | /** |
||
4147 | * @} |
||
4148 | */ |
||
4149 | |||
4150 | /** |
||
4151 | * @defgroup LLVMCCorePassManagers Pass Managers |
||
4152 | * @ingroup LLVMCCore |
||
4153 | * |
||
4154 | * @{ |
||
4155 | */ |
||
4156 | |||
4157 | /** Constructs a new whole-module pass pipeline. This type of pipeline is |
||
4158 | suitable for link-time optimization and whole-module transformations. |
||
4159 | @see llvm::PassManager::PassManager */ |
||
4160 | LLVMPassManagerRef LLVMCreatePassManager(void); |
||
4161 | |||
4162 | /** Constructs a new function-by-function pass pipeline over the module |
||
4163 | provider. It does not take ownership of the module provider. This type of |
||
4164 | pipeline is suitable for code generation and JIT compilation tasks. |
||
4165 | @see llvm::FunctionPassManager::FunctionPassManager */ |
||
4166 | LLVMPassManagerRef LLVMCreateFunctionPassManagerForModule(LLVMModuleRef M); |
||
4167 | |||
4168 | /** Deprecated: Use LLVMCreateFunctionPassManagerForModule instead. */ |
||
4169 | LLVMPassManagerRef LLVMCreateFunctionPassManager(LLVMModuleProviderRef MP); |
||
4170 | |||
4171 | /** Initializes, executes on the provided module, and finalizes all of the |
||
4172 | passes scheduled in the pass manager. Returns 1 if any of the passes |
||
4173 | modified the module, 0 otherwise. |
||
4174 | @see llvm::PassManager::run(Module&) */ |
||
4175 | LLVMBool LLVMRunPassManager(LLVMPassManagerRef PM, LLVMModuleRef M); |
||
4176 | |||
4177 | /** Initializes all of the function passes scheduled in the function pass |
||
4178 | manager. Returns 1 if any of the passes modified the module, 0 otherwise. |
||
4179 | @see llvm::FunctionPassManager::doInitialization */ |
||
4180 | LLVMBool LLVMInitializeFunctionPassManager(LLVMPassManagerRef FPM); |
||
4181 | |||
4182 | /** Executes all of the function passes scheduled in the function pass manager |
||
4183 | on the provided function. Returns 1 if any of the passes modified the |
||
4184 | function, false otherwise. |
||
4185 | @see llvm::FunctionPassManager::run(Function&) */ |
||
4186 | LLVMBool LLVMRunFunctionPassManager(LLVMPassManagerRef FPM, LLVMValueRef F); |
||
4187 | |||
4188 | /** Finalizes all of the function passes scheduled in the function pass |
||
4189 | manager. Returns 1 if any of the passes modified the module, 0 otherwise. |
||
4190 | @see llvm::FunctionPassManager::doFinalization */ |
||
4191 | LLVMBool LLVMFinalizeFunctionPassManager(LLVMPassManagerRef FPM); |
||
4192 | |||
4193 | /** Frees the memory of a pass pipeline. For function pipelines, does not free |
||
4194 | the module provider. |
||
4195 | @see llvm::PassManagerBase::~PassManagerBase. */ |
||
4196 | void LLVMDisposePassManager(LLVMPassManagerRef PM); |
||
4197 | |||
4198 | /** |
||
4199 | * @} |
||
4200 | */ |
||
4201 | |||
4202 | /** |
||
4203 | * @defgroup LLVMCCoreThreading Threading |
||
4204 | * |
||
4205 | * Handle the structures needed to make LLVM safe for multithreading. |
||
4206 | * |
||
4207 | * @{ |
||
4208 | */ |
||
4209 | |||
4210 | /** Deprecated: Multi-threading can only be enabled/disabled with the compile |
||
4211 | time define LLVM_ENABLE_THREADS. This function always returns |
||
4212 | LLVMIsMultithreaded(). */ |
||
4213 | LLVMBool LLVMStartMultithreaded(void); |
||
4214 | |||
4215 | /** Deprecated: Multi-threading can only be enabled/disabled with the compile |
||
4216 | time define LLVM_ENABLE_THREADS. */ |
||
4217 | void LLVMStopMultithreaded(void); |
||
4218 | |||
4219 | /** Check whether LLVM is executing in thread-safe mode or not. |
||
4220 | @see llvm::llvm_is_multithreaded */ |
||
4221 | LLVMBool LLVMIsMultithreaded(void); |
||
4222 | |||
4223 | /** |
||
4224 | * @} |
||
4225 | */ |
||
4226 | |||
4227 | /** |
||
4228 | * @} |
||
4229 | */ |
||
4230 | |||
4231 | /** |
||
4232 | * @} |
||
4233 | */ |
||
4234 | |||
4235 | LLVM_C_EXTERN_C_END |
||
4236 | |||
4237 | #endif /* LLVM_C_CORE_H */ |