blob: f9717cc5f55121f1997fb8a3452b566e4560f1f4 [file] [log] [blame]
Gordon Henriksen76a03742007-09-18 03:18:57 +00001/*===-- llvm-c/Core.h - Core Library C Interface ------------------*- C -*-===*\
2|* *|
3|* The LLVM Compiler Infrastructure *|
4|* *|
Chris Lattnere9cc7422007-12-29 19:59:42 +00005|* This file is distributed under the University of Illinois Open Source *|
6|* License. See LICENSE.TXT for details. *|
Gordon Henriksen76a03742007-09-18 03:18:57 +00007|* *|
8|*===----------------------------------------------------------------------===*|
9|* *|
10|* This header declares the C interface to libLLVMCore.a, which implements *|
11|* the LLVM intermediate representation. *|
12|* *|
Gordon Henriksen76a03742007-09-18 03:18:57 +000013\*===----------------------------------------------------------------------===*/
14
15#ifndef LLVM_C_CORE_H
16#define LLVM_C_CORE_H
17
Michael J. Spencerab425d82010-11-29 18:47:54 +000018#include "llvm/Support/DataTypes.h"
Erick Tryzelaardd991352009-08-16 23:36:46 +000019
Evan Cheng2e254d02013-04-04 17:40:53 +000020#ifdef __cplusplus
Gordon Henriksen76a03742007-09-18 03:18:57 +000021extern "C" {
22#endif
23
Gregory Szorc34c863a2012-03-21 03:54:29 +000024/**
25 * @defgroup LLVMC LLVM-C: C interface to LLVM
26 *
27 * This module exposes parts of the LLVM library as a C API.
28 *
29 * @{
30 */
31
32/**
33 * @defgroup LLVMCTransforms Transforms
34 */
35
36/**
37 * @defgroup LLVMCCore Core
38 *
39 * This modules provide an interface to libLLVMCore, which implements
40 * the LLVM intermediate representation as well as other related types
41 * and utilities.
42 *
43 * LLVM uses a polymorphic type hierarchy which C cannot represent, therefore
44 * parameters must be passed as base types. Despite the declared types, most
45 * of the functions provided operate only on branches of the type hierarchy.
46 * The declared parameter names are descriptive and specify which type is
47 * required. Additionally, each type hierarchy is documented along with the
48 * functions that operate upon it. For more detail, refer to LLVM's C++ code.
Eli Bendersky870d0572012-08-10 18:26:20 +000049 * If in doubt, refer to Core.cpp, which performs parameter downcasts in the
Gregory Szorc34c863a2012-03-21 03:54:29 +000050 * form unwrap<RequiredType>(Param).
51 *
52 * Many exotic languages can interoperate with C code but have a harder time
53 * with C++ due to name mangling. So in addition to C, this interface enables
54 * tools written in such languages.
55 *
Gregory Szorc34c863a2012-03-21 03:54:29 +000056 * @{
57 */
58
59/**
60 * @defgroup LLVMCCoreTypes Types and Enumerations
61 *
62 * @{
63 */
Gordon Henriksen76a03742007-09-18 03:18:57 +000064
Chris Lattner25963c62010-01-09 22:27:07 +000065typedef int LLVMBool;
66
Gordon Henriksen76a03742007-09-18 03:18:57 +000067/* Opaque types. */
Gordon Henriksen4a4d7352007-12-30 17:46:33 +000068
69/**
Gregory Szorc34c863a2012-03-21 03:54:29 +000070 * The top-level container for all LLVM global data. See the LLVMContext class.
Owen Anderson6773d382009-07-01 16:58:40 +000071 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +000072typedef struct LLVMOpaqueContext *LLVMContextRef;
Owen Anderson6773d382009-07-01 16:58:40 +000073
74/**
Gordon Henriksen4a4d7352007-12-30 17:46:33 +000075 * The top-level container for all other LLVM Intermediate Representation (IR)
Gregory Szorc34c863a2012-03-21 03:54:29 +000076 * objects.
77 *
78 * @see llvm::Module
Gordon Henriksen4a4d7352007-12-30 17:46:33 +000079 */
Gordon Henriksen76a03742007-09-18 03:18:57 +000080typedef struct LLVMOpaqueModule *LLVMModuleRef;
Gordon Henriksen4a4d7352007-12-30 17:46:33 +000081
82/**
Gregory Szorc34c863a2012-03-21 03:54:29 +000083 * Each value in the LLVM IR has a type, an LLVMTypeRef.
84 *
85 * @see llvm::Type
Gordon Henriksen4a4d7352007-12-30 17:46:33 +000086 */
Gordon Henriksen76a03742007-09-18 03:18:57 +000087typedef struct LLVMOpaqueType *LLVMTypeRef;
Gordon Henriksen4a4d7352007-12-30 17:46:33 +000088
Gregory Szorc34c863a2012-03-21 03:54:29 +000089/**
90 * Represents an individual value in LLVM IR.
91 *
92 * This models llvm::Value.
93 */
Gordon Henriksen76a03742007-09-18 03:18:57 +000094typedef struct LLVMOpaqueValue *LLVMValueRef;
Gregory Szorc34c863a2012-03-21 03:54:29 +000095
96/**
Eli Bendersky870d0572012-08-10 18:26:20 +000097 * Represents a basic block of instructions in LLVM IR.
Gregory Szorc34c863a2012-03-21 03:54:29 +000098 *
99 * This models llvm::BasicBlock.
100 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000101typedef struct LLVMOpaqueBasicBlock *LLVMBasicBlockRef;
Gregory Szorc34c863a2012-03-21 03:54:29 +0000102
103/**
104 * Represents an LLVM basic block builder.
105 *
106 * This models llvm::IRBuilder.
107 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000108typedef struct LLVMOpaqueBuilder *LLVMBuilderRef;
Gordon Henriksen34eb6d82007-12-19 22:30:40 +0000109
Gregory Szorc34c863a2012-03-21 03:54:29 +0000110/**
111 * Interface used to provide a module to JIT or interpreter.
112 * This is now just a synonym for llvm::Module, but we have to keep using the
113 * different type to keep binary compatibility.
Gordon Henriksen34eb6d82007-12-19 22:30:40 +0000114 */
Gordon Henriksen0a68fe22007-12-12 01:04:30 +0000115typedef struct LLVMOpaqueModuleProvider *LLVMModuleProviderRef;
Gordon Henriksen76a03742007-09-18 03:18:57 +0000116
Gregory Szorc34c863a2012-03-21 03:54:29 +0000117/**
118 * Used to provide a module to JIT or interpreter.
119 *
120 * @see llvm::MemoryBuffer
Gordon Henriksen34eb6d82007-12-19 22:30:40 +0000121 */
122typedef struct LLVMOpaqueMemoryBuffer *LLVMMemoryBufferRef;
123
Gregory Szorc34c863a2012-03-21 03:54:29 +0000124/** @see llvm::PassManagerBase */
Gordon Henriksen878114b2008-03-16 04:20:44 +0000125typedef struct LLVMOpaquePassManager *LLVMPassManagerRef;
126
Gregory Szorc34c863a2012-03-21 03:54:29 +0000127/** @see llvm::PassRegistry */
Owen Anderson4698c5d2010-10-07 17:55:47 +0000128typedef struct LLVMOpaquePassRegistry *LLVMPassRegistryRef;
129
Gregory Szorc34c863a2012-03-21 03:54:29 +0000130/**
131 * Used to get the users and usees of a Value.
132 *
133 * @see llvm::Use */
Erick Tryzelaar9f9857e2010-03-02 20:32:28 +0000134typedef struct LLVMOpaqueUse *LLVMUseRef;
Chris Lattner40cf28d2009-10-12 04:01:02 +0000135
Gordon Henriksen76a03742007-09-18 03:18:57 +0000136typedef enum {
Devang Patel4c758ea2008-09-25 21:00:45 +0000137 LLVMZExtAttribute = 1<<0,
138 LLVMSExtAttribute = 1<<1,
139 LLVMNoReturnAttribute = 1<<2,
140 LLVMInRegAttribute = 1<<3,
141 LLVMStructRetAttribute = 1<<4,
142 LLVMNoUnwindAttribute = 1<<5,
143 LLVMNoAliasAttribute = 1<<6,
144 LLVMByValAttribute = 1<<7,
145 LLVMNestAttribute = 1<<8,
146 LLVMReadNoneAttribute = 1<<9,
Anton Korobeynikovc8ce7b082009-07-17 18:07:26 +0000147 LLVMReadOnlyAttribute = 1<<10,
Anton Korobeynikov9750be92009-07-17 18:57:16 +0000148 LLVMNoInlineAttribute = 1<<11,
149 LLVMAlwaysInlineAttribute = 1<<12,
150 LLVMOptimizeForSizeAttribute = 1<<13,
151 LLVMStackProtectAttribute = 1<<14,
152 LLVMStackProtectReqAttribute = 1<<15,
Erick Tryzelaar8f69fea2010-03-03 23:51:25 +0000153 LLVMAlignment = 31<<16,
Anton Korobeynikov9750be92009-07-17 18:57:16 +0000154 LLVMNoCaptureAttribute = 1<<21,
155 LLVMNoRedZoneAttribute = 1<<22,
156 LLVMNoImplicitFloatAttribute = 1<<23,
Jakob Stoklund Olesen74bb06c2010-02-06 01:16:28 +0000157 LLVMNakedAttribute = 1<<24,
Erick Tryzelaar8f69fea2010-03-03 23:51:25 +0000158 LLVMInlineHintAttribute = 1<<25,
Torok Edwin1db48c02011-10-06 12:13:32 +0000159 LLVMStackAlignment = 7<<26,
160 LLVMReturnsTwice = 1 << 29,
161 LLVMUWTable = 1 << 30,
Chandler Carruth44d69d92012-01-25 07:40:15 +0000162 LLVMNonLazyBind = 1 << 31
163
Bill Wendlingd154e2832013-01-23 06:41:41 +0000164 /* FIXME: These attributes are currently not included in the C API as
Nuno Lopesdef4229972012-09-02 14:19:21 +0000165 a temporary measure until the API/ABI impact to the C API is understood
166 and the path forward agreed upon.
Bill Wendlingd154e2832013-01-23 06:41:41 +0000167 LLVMAddressSafety = 1ULL << 32,
Andrea Di Biagio377496b2013-08-23 11:53:55 +0000168 LLVMStackProtectStrongAttribute = 1ULL<<33,
169 LLVMCold = 1ULL << 34,
170 LLVMOptimizeNone = 1ULL << 35
Nuno Lopesdef4229972012-09-02 14:19:21 +0000171 */
Devang Patel4c758ea2008-09-25 21:00:45 +0000172} LLVMAttribute;
Gordon Henriksen2d9cc212008-04-28 17:37:06 +0000173
174typedef enum {
Bill Wendlingda52cec2010-02-15 20:53:17 +0000175 /* Terminator Instructions */
Chris Lattner40cf28d2009-10-12 04:01:02 +0000176 LLVMRet = 1,
177 LLVMBr = 2,
178 LLVMSwitch = 3,
Bill Wendling07d6d762010-02-15 20:50:51 +0000179 LLVMIndirectBr = 4,
180 LLVMInvoke = 5,
Bill Wendling46ffaa92011-08-02 06:20:17 +0000181 /* removed 6 due to API changes */
Bill Wendling2641d132011-07-27 21:00:28 +0000182 LLVMUnreachable = 7,
Bill Wendling07d6d762010-02-15 20:50:51 +0000183
Bill Wendlingda52cec2010-02-15 20:53:17 +0000184 /* Standard Binary Operators */
Bill Wendling2641d132011-07-27 21:00:28 +0000185 LLVMAdd = 8,
186 LLVMFAdd = 9,
187 LLVMSub = 10,
188 LLVMFSub = 11,
189 LLVMMul = 12,
190 LLVMFMul = 13,
191 LLVMUDiv = 14,
192 LLVMSDiv = 15,
193 LLVMFDiv = 16,
194 LLVMURem = 17,
195 LLVMSRem = 18,
196 LLVMFRem = 19,
Bill Wendling07d6d762010-02-15 20:50:51 +0000197
Bill Wendlingda52cec2010-02-15 20:53:17 +0000198 /* Logical Operators */
Bill Wendling2641d132011-07-27 21:00:28 +0000199 LLVMShl = 20,
200 LLVMLShr = 21,
201 LLVMAShr = 22,
202 LLVMAnd = 23,
203 LLVMOr = 24,
204 LLVMXor = 25,
Bill Wendling07d6d762010-02-15 20:50:51 +0000205
Bill Wendlingda52cec2010-02-15 20:53:17 +0000206 /* Memory Operators */
Bill Wendling2641d132011-07-27 21:00:28 +0000207 LLVMAlloca = 26,
208 LLVMLoad = 27,
209 LLVMStore = 28,
210 LLVMGetElementPtr = 29,
Bill Wendling07d6d762010-02-15 20:50:51 +0000211
Bill Wendlingda52cec2010-02-15 20:53:17 +0000212 /* Cast Operators */
Bill Wendling2641d132011-07-27 21:00:28 +0000213 LLVMTrunc = 30,
214 LLVMZExt = 31,
215 LLVMSExt = 32,
216 LLVMFPToUI = 33,
217 LLVMFPToSI = 34,
218 LLVMUIToFP = 35,
219 LLVMSIToFP = 36,
220 LLVMFPTrunc = 37,
221 LLVMFPExt = 38,
222 LLVMPtrToInt = 39,
223 LLVMIntToPtr = 40,
224 LLVMBitCast = 41,
Bill Wendling07d6d762010-02-15 20:50:51 +0000225
Bill Wendlingda52cec2010-02-15 20:53:17 +0000226 /* Other Operators */
Bill Wendling2641d132011-07-27 21:00:28 +0000227 LLVMICmp = 42,
228 LLVMFCmp = 43,
229 LLVMPHI = 44,
230 LLVMCall = 45,
231 LLVMSelect = 46,
Torok Edwin05dc9d62011-10-06 12:39:34 +0000232 LLVMUserOp1 = 47,
233 LLVMUserOp2 = 48,
Bill Wendling2641d132011-07-27 21:00:28 +0000234 LLVMVAArg = 49,
235 LLVMExtractElement = 50,
236 LLVMInsertElement = 51,
237 LLVMShuffleVector = 52,
238 LLVMExtractValue = 53,
239 LLVMInsertValue = 54,
Eli Friedman4fc946c2011-07-27 18:59:19 +0000240
241 /* Atomic operators */
Bill Wendling2641d132011-07-27 21:00:28 +0000242 LLVMFence = 55,
Eli Friedmanc9a551e2011-07-28 21:48:00 +0000243 LLVMAtomicCmpXchg = 56,
Bill Wendlingf891bf82011-07-31 06:30:59 +0000244 LLVMAtomicRMW = 57,
245
246 /* Exception Handling Operators */
Bill Wendlingfae14752011-08-12 20:24:12 +0000247 LLVMResume = 58,
Bill Wendling0aef16a2012-02-06 21:44:22 +0000248 LLVMLandingPad = 59
Bill Wendling2641d132011-07-27 21:00:28 +0000249
Chris Lattner40cf28d2009-10-12 04:01:02 +0000250} LLVMOpcode;
251
252typedef enum {
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000253 LLVMVoidTypeKind, /**< type with no size */
Dan Gohman518cda42011-12-17 00:04:22 +0000254 LLVMHalfTypeKind, /**< 16 bit floating point type */
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000255 LLVMFloatTypeKind, /**< 32 bit floating point type */
256 LLVMDoubleTypeKind, /**< 64 bit floating point type */
257 LLVMX86_FP80TypeKind, /**< 80 bit floating point type (X87) */
258 LLVMFP128TypeKind, /**< 128 bit floating point type (112-bit mantissa)*/
259 LLVMPPC_FP128TypeKind, /**< 128 bit floating point type (two 64-bits) */
260 LLVMLabelTypeKind, /**< Labels */
261 LLVMIntegerTypeKind, /**< Arbitrary bit width integers */
262 LLVMFunctionTypeKind, /**< Functions */
263 LLVMStructTypeKind, /**< Structures */
264 LLVMArrayTypeKind, /**< Arrays */
265 LLVMPointerTypeKind, /**< Pointers */
Chris Lattnerdac44ec2009-07-15 22:00:31 +0000266 LLVMVectorTypeKind, /**< SIMD 'packed' format, or other vector type */
Dale Johannesenbaa5d042010-09-10 20:55:01 +0000267 LLVMMetadataTypeKind, /**< Metadata */
268 LLVMX86_MMXTypeKind /**< X86 MMX */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000269} LLVMTypeKind;
270
271typedef enum {
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000272 LLVMExternalLinkage, /**< Externally visible function */
Chris Lattner2dba0f02009-04-13 06:25:37 +0000273 LLVMAvailableExternallyLinkage,
Duncan Sands12da8ce2009-03-07 15:45:40 +0000274 LLVMLinkOnceAnyLinkage, /**< Keep one copy of function when linking (inline)*/
275 LLVMLinkOnceODRLinkage, /**< Same, but only replaced by something
276 equivalent. */
Bill Wendling34bc34e2012-08-17 18:33:14 +0000277 LLVMLinkOnceODRAutoHideLinkage, /**< Like LinkOnceODR, but possibly hidden. */
Duncan Sands12da8ce2009-03-07 15:45:40 +0000278 LLVMWeakAnyLinkage, /**< Keep one copy of function when linking (weak) */
279 LLVMWeakODRLinkage, /**< Same, but only replaced by something
280 equivalent. */
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000281 LLVMAppendingLinkage, /**< Special purpose, only applies to global arrays */
282 LLVMInternalLinkage, /**< Rename collisions when linking (static
283 functions) */
Duncan Sands12da8ce2009-03-07 15:45:40 +0000284 LLVMPrivateLinkage, /**< Like Internal, but omit from symbol table */
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000285 LLVMDLLImportLinkage, /**< Function to be imported from DLL */
286 LLVMDLLExportLinkage, /**< Function to be accessible from DLL */
Duncan Sandse2881052009-03-11 08:08:06 +0000287 LLVMExternalWeakLinkage,/**< ExternalWeak linkage description */
Jeffrey Yasskin091217b2010-01-27 20:34:15 +0000288 LLVMGhostLinkage, /**< Obsolete */
Bill Wendling002b1672009-07-20 18:22:52 +0000289 LLVMCommonLinkage, /**< Tentative definitions */
Bill Wendling03bcd6e2010-07-01 21:55:59 +0000290 LLVMLinkerPrivateLinkage, /**< Like Private, but linker removes. */
Bill Wendling34bc34e2012-08-17 18:33:14 +0000291 LLVMLinkerPrivateWeakLinkage /**< Like LinkerPrivate, but is weak. */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000292} LLVMLinkage;
293
294typedef enum {
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000295 LLVMDefaultVisibility, /**< The GV is visible */
296 LLVMHiddenVisibility, /**< The GV is hidden */
297 LLVMProtectedVisibility /**< The GV is protected */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000298} LLVMVisibility;
299
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000300typedef enum {
301 LLVMCCallConv = 0,
302 LLVMFastCallConv = 8,
303 LLVMColdCallConv = 9,
304 LLVMX86StdcallCallConv = 64,
305 LLVMX86FastcallCallConv = 65
306} LLVMCallConv;
307
308typedef enum {
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000309 LLVMIntEQ = 32, /**< equal */
310 LLVMIntNE, /**< not equal */
311 LLVMIntUGT, /**< unsigned greater than */
312 LLVMIntUGE, /**< unsigned greater or equal */
313 LLVMIntULT, /**< unsigned less than */
314 LLVMIntULE, /**< unsigned less or equal */
315 LLVMIntSGT, /**< signed greater than */
316 LLVMIntSGE, /**< signed greater or equal */
317 LLVMIntSLT, /**< signed less than */
318 LLVMIntSLE /**< signed less or equal */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000319} LLVMIntPredicate;
320
321typedef enum {
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000322 LLVMRealPredicateFalse, /**< Always false (always folded) */
323 LLVMRealOEQ, /**< True if ordered and equal */
324 LLVMRealOGT, /**< True if ordered and greater than */
325 LLVMRealOGE, /**< True if ordered and greater than or equal */
326 LLVMRealOLT, /**< True if ordered and less than */
327 LLVMRealOLE, /**< True if ordered and less than or equal */
328 LLVMRealONE, /**< True if ordered and operands are unequal */
329 LLVMRealORD, /**< True if ordered (no nans) */
330 LLVMRealUNO, /**< True if unordered: isnan(X) | isnan(Y) */
331 LLVMRealUEQ, /**< True if unordered or equal */
332 LLVMRealUGT, /**< True if unordered or greater than */
333 LLVMRealUGE, /**< True if unordered, greater than, or equal */
334 LLVMRealULT, /**< True if unordered or less than */
335 LLVMRealULE, /**< True if unordered, less than, or equal */
336 LLVMRealUNE, /**< True if unordered or not equal */
337 LLVMRealPredicateTrue /**< Always true (always folded) */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000338} LLVMRealPredicate;
339
Bill Wendlingfae14752011-08-12 20:24:12 +0000340typedef enum {
341 LLVMLandingPadCatch, /**< A catch clause */
342 LLVMLandingPadFilter /**< A filter clause */
343} LLVMLandingPadClauseTy;
344
Hans Wennborg5ff71202013-04-16 08:58:59 +0000345typedef enum {
346 LLVMNotThreadLocal = 0,
347 LLVMGeneralDynamicTLSModel,
348 LLVMLocalDynamicTLSModel,
349 LLVMInitialExecTLSModel,
350 LLVMLocalExecTLSModel
351} LLVMThreadLocalMode;
352
Carlo Kokda0ac722013-04-23 13:45:37 +0000353typedef enum {
Carlo Kok8c6719b2013-04-23 13:21:19 +0000354 LLVMAtomicOrderingNotAtomic = 0, /**< A load or store which is not atomic */
355 LLVMAtomicOrderingUnordered = 1, /**< Lowest level of atomicity, guarantees
356 somewhat sane results, lock free. */
357 LLVMAtomicOrderingMonotonic = 2, /**< guarantees that if you take all the
358 operations affecting a specific address,
359 a consistent ordering exists */
360 LLVMAtomicOrderingAcquire = 4, /**< Acquire provides a barrier of the sort
361 necessary to acquire a lock to access other
362 memory with normal loads and stores. */
363 LLVMAtomicOrderingRelease = 5, /**< Release is similar to Acquire, but with
364 a barrier of the sort necessary to release
365 a lock. */
366 LLVMAtomicOrderingAcquireRelease = 6, /**< provides both an Acquire and a
367 Release barrier (for fences and
368 operations which both read and write
369 memory). */
370 LLVMAtomicOrderingSequentiallyConsistent = 7 /**< provides Acquire semantics
371 for loads and Release
372 semantics for stores.
373 Additionally, it guarantees
374 that a total ordering exists
375 between all
376 SequentiallyConsistent
377 operations. */
Carlo Kokda0ac722013-04-23 13:45:37 +0000378} LLVMAtomicOrdering;
Carlo Kok8c6719b2013-04-23 13:21:19 +0000379
Carlo Kokda0ac722013-04-23 13:45:37 +0000380typedef enum {
Carlo Kok8c6719b2013-04-23 13:21:19 +0000381 LLVMAtomicRMWBinOpXchg, /**< Set the new value and return the one old */
382 LLVMAtomicRMWBinOpAdd, /**< Add a value and return the old one */
383 LLVMAtomicRMWBinOpSub, /**< Subtract a value and return the old one */
384 LLVMAtomicRMWBinOpAnd, /**< And a value and return the old one */
385 LLVMAtomicRMWBinOpNand, /**< Not-And a value and return the old one */
386 LLVMAtomicRMWBinOpOr, /**< OR a value and return the old one */
387 LLVMAtomicRMWBinOpXor, /**< Xor a value and return the old one */
388 LLVMAtomicRMWBinOpMax, /**< Sets the value if it's greater than the
389 original using a signed comparison and return
390 the old one */
391 LLVMAtomicRMWBinOpMin, /**< Sets the value if it's Smaller than the
392 original using a signed comparison and return
393 the old one */
394 LLVMAtomicRMWBinOpUMax, /**< Sets the value if it's greater than the
395 original using an unsigned comparison and return
396 the old one */
397 LLVMAtomicRMWBinOpUMin /**< Sets the value if it's greater than the
398 original using an unsigned comparison and return
399 the old one */
Carlo Kokda0ac722013-04-23 13:45:37 +0000400} LLVMAtomicRMWBinOp;
Carlo Kok8c6719b2013-04-23 13:21:19 +0000401
Gregory Szorc34c863a2012-03-21 03:54:29 +0000402/**
403 * @}
404 */
405
Nick Lewycky0db26542011-05-15 07:20:34 +0000406void LLVMInitializeCore(LLVMPassRegistryRef R);
407
Duncan Sands1cba0a82013-02-17 16:35:51 +0000408/** Deallocate and destroy all ManagedStatic variables.
409 @see llvm::llvm_shutdown
410 @see ManagedStatic */
411void LLVMShutdown();
412
Gordon Henriksen76a03742007-09-18 03:18:57 +0000413
Gordon Henriksen34eb6d82007-12-19 22:30:40 +0000414/*===-- Error handling ----------------------------------------------------===*/
415
Filip Pizlo3fdbaff2013-05-22 02:46:43 +0000416char *LLVMCreateMessage(const char *Message);
Gordon Henriksen34eb6d82007-12-19 22:30:40 +0000417void LLVMDisposeMessage(char *Message);
418
Filip Pizloa535b142013-10-17 01:38:28 +0000419typedef void (*LLVMFatalErrorHandler)(const char *Reason);
420
421/**
422 * Install a fatal error handler. By default, if LLVM detects a fatal error, it
423 * will call exit(1). This may not be appropriate in many contexts. For example,
424 * doing exit(1) will bypass many crash reporting/tracing system tools. This
425 * function allows you to install a callback that will be invoked prior to the
426 * call to exit(1).
427 */
428void LLVMInstallFatalErrorHandler(LLVMFatalErrorHandler Handler);
429
430/**
431 * Reset the fatal error handler. This resets LLVM's fatal error handling
432 * behavior to the default.
433 */
434void LLVMResetFatalErrorHandler(void);
Gordon Henriksen34eb6d82007-12-19 22:30:40 +0000435
Gregory Szorc34c863a2012-03-21 03:54:29 +0000436/**
437 * @defgroup LLVMCCoreContext Contexts
438 *
439 * Contexts are execution states for the core LLVM IR system.
440 *
441 * Most types are tied to a context instance. Multiple contexts can
442 * exist simultaneously. A single context is not thread safe. However,
443 * different contexts can execute on different threads simultaneously.
444 *
445 * @{
446 */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000447
Gregory Szorc34c863a2012-03-21 03:54:29 +0000448/**
449 * Create a new context.
450 *
451 * Every call to this function should be paired with a call to
452 * LLVMContextDispose() or the context will leak memory.
453 */
Erick Tryzelaarf34cb0c2009-08-30 23:38:06 +0000454LLVMContextRef LLVMContextCreate(void);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000455
456/**
457 * Obtain the global context instance.
458 */
Erick Tryzelaarf34cb0c2009-08-30 23:38:06 +0000459LLVMContextRef LLVMGetGlobalContext(void);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000460
461/**
462 * Destroy a context instance.
463 *
464 * This should be called for every call to LLVMContextCreate() or memory
465 * will be leaked.
466 */
Owen Anderson6773d382009-07-01 16:58:40 +0000467void LLVMContextDispose(LLVMContextRef C);
468
Erick Tryzelaard8531fa2010-02-28 09:45:59 +0000469unsigned LLVMGetMDKindIDInContext(LLVMContextRef C, const char* Name,
470 unsigned SLen);
471unsigned LLVMGetMDKindID(const char* Name, unsigned SLen);
472
Gregory Szorc34c863a2012-03-21 03:54:29 +0000473/**
474 * @}
475 */
476
Gregory Szorc52d26602012-03-21 07:28:27 +0000477/**
478 * @defgroup LLVMCCoreModule Modules
Gregory Szorc34c863a2012-03-21 03:54:29 +0000479 *
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +0000480 * Modules represent the top-level structure in an LLVM program. An LLVM
Gregory Szorc34c863a2012-03-21 03:54:29 +0000481 * module is effectively a translation unit or a collection of
482 * translation units merged together.
483 *
484 * @{
485 */
486
Gregory Szorc34c863a2012-03-21 03:54:29 +0000487/**
488 * Create a new, empty module in the global context.
489 *
490 * This is equivalent to calling LLVMModuleCreateWithNameInContext with
491 * LLVMGetGlobalContext() as the context parameter.
492 *
493 * Every invocation should be paired with LLVMDisposeModule() or memory
494 * will be leaked.
495 */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000496LLVMModuleRef LLVMModuleCreateWithName(const char *ModuleID);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000497
498/**
499 * Create a new, empty module in a specific context.
500 *
501 * Every invocation should be paired with LLVMDisposeModule() or memory
502 * will be leaked.
503 */
Owen Anderson31d44e42009-07-02 07:17:57 +0000504LLVMModuleRef LLVMModuleCreateWithNameInContext(const char *ModuleID,
505 LLVMContextRef C);
Gordon Henriksena49d4352008-03-07 19:13:06 +0000506
Gregory Szorc34c863a2012-03-21 03:54:29 +0000507/**
508 * Destroy a module instance.
509 *
510 * This must be called for every created module or memory will be
511 * leaked.
512 */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000513void LLVMDisposeModule(LLVMModuleRef M);
514
Gregory Szorc34c863a2012-03-21 03:54:29 +0000515/**
516 * Obtain the data layout for a module.
517 *
518 * @see Module::getDataLayout()
519 */
Gordon Henriksen05568bb2007-12-27 20:13:47 +0000520const char *LLVMGetDataLayout(LLVMModuleRef M);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000521
522/**
523 * Set the data layout for a module.
524 *
525 * @see Module::setDataLayout()
526 */
Gordon Henriksen05568bb2007-12-27 20:13:47 +0000527void LLVMSetDataLayout(LLVMModuleRef M, const char *Triple);
528
Gregory Szorc34c863a2012-03-21 03:54:29 +0000529/**
530 * Obtain the target triple for a module.
531 *
532 * @see Module::getTargetTriple()
533 */
Gordon Henriksen05568bb2007-12-27 20:13:47 +0000534const char *LLVMGetTarget(LLVMModuleRef M);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000535
536/**
537 * Set the target triple for a module.
538 *
539 * @see Module::setTargetTriple()
540 */
Gordon Henriksen05568bb2007-12-27 20:13:47 +0000541void LLVMSetTarget(LLVMModuleRef M, const char *Triple);
542
Gregory Szorc34c863a2012-03-21 03:54:29 +0000543/**
544 * Dump a representation of a module to stderr.
545 *
546 * @see Module::dump()
547 */
Gordon Henriksen6c6075e2008-03-14 23:58:56 +0000548void LLVMDumpModule(LLVMModuleRef M);
549
Gregory Szorc34c863a2012-03-21 03:54:29 +0000550/**
Hans Wennborgb7ef2fe2012-05-09 16:54:17 +0000551 * Print a representation of a module to a file. The ErrorMessage needs to be
552 * disposed with LLVMDisposeMessage. Returns 0 on success, 1 otherwise.
553 *
554 * @see Module::print()
555 */
556LLVMBool LLVMPrintModuleToFile(LLVMModuleRef M, const char *Filename,
557 char **ErrorMessage);
558
559/**
Anders Waldenborg84355db2013-10-16 18:00:54 +0000560 * Return a string representation of the module. Use
561 * LLVMDisposeMessage to free the string.
562 *
563 * @see Module::print()
564 */
565char *LLVMPrintModuleToString(LLVMModuleRef M);
566
567/**
Gregory Szorc34c863a2012-03-21 03:54:29 +0000568 * Set inline assembly for a module.
569 *
570 * @see Module::setModuleInlineAsm()
571 */
Chris Lattner26941452010-04-10 17:52:58 +0000572void LLVMSetModuleInlineAsm(LLVMModuleRef M, const char *Asm);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000573
Gregory Szorc34c863a2012-03-21 03:54:29 +0000574/**
575 * Obtain the context to which this module is associated.
576 *
577 * @see Module::getContext()
578 */
Chris Lattnera7e04b02010-11-28 20:03:44 +0000579LLVMContextRef LLVMGetModuleContext(LLVMModuleRef M);
580
Gregory Szorc34c863a2012-03-21 03:54:29 +0000581/**
582 * Obtain a Type from a module by its registered name.
583 */
584LLVMTypeRef LLVMGetTypeByName(LLVMModuleRef M, const char *Name);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000585
Gregory Szorc34c863a2012-03-21 03:54:29 +0000586/**
587 * Obtain the number of operands for named metadata in a module.
588 *
589 * @see llvm::Module::getNamedMetadata()
590 */
591unsigned LLVMGetNamedMetadataNumOperands(LLVMModuleRef M, const char* name);
592
593/**
594 * Obtain the named metadata operands for a module.
595 *
596 * The passed LLVMValueRef pointer should refer to an array of
597 * LLVMValueRef at least LLVMGetNamedMetadataNumOperands long. This
598 * array will be populated with the LLVMValueRef instances. Each
599 * instance corresponds to a llvm::MDNode.
600 *
601 * @see llvm::Module::getNamedMetadata()
602 * @see llvm::MDNode::getOperand()
603 */
604void LLVMGetNamedMetadataOperands(LLVMModuleRef M, const char* name, LLVMValueRef *Dest);
605
606/**
607 * Add an operand to named metadata.
608 *
609 * @see llvm::Module::getNamedMetadata()
610 * @see llvm::MDNode::addOperand()
611 */
612void LLVMAddNamedMetadataOperand(LLVMModuleRef M, const char* name,
613 LLVMValueRef Val);
614
Gregory Szorc52d26602012-03-21 07:28:27 +0000615/**
616 * Add a function to a module under a specified name.
617 *
618 * @see llvm::Function::Create()
619 */
620LLVMValueRef LLVMAddFunction(LLVMModuleRef M, const char *Name,
621 LLVMTypeRef FunctionTy);
622
623/**
624 * Obtain a Function value from a Module by its name.
625 *
626 * The returned value corresponds to a llvm::Function value.
627 *
628 * @see llvm::Module::getFunction()
629 */
630LLVMValueRef LLVMGetNamedFunction(LLVMModuleRef M, const char *Name);
631
632/**
633 * Obtain an iterator to the first Function in a Module.
634 *
635 * @see llvm::Module::begin()
636 */
637LLVMValueRef LLVMGetFirstFunction(LLVMModuleRef M);
638
639/**
640 * Obtain an iterator to the last Function in a Module.
641 *
642 * @see llvm::Module::end()
643 */
644LLVMValueRef LLVMGetLastFunction(LLVMModuleRef M);
645
646/**
647 * Advance a Function iterator to the next Function.
648 *
649 * Returns NULL if the iterator was already at the end and there are no more
650 * functions.
651 */
652LLVMValueRef LLVMGetNextFunction(LLVMValueRef Fn);
653
654/**
655 * Decrement a Function iterator to the previous Function.
656 *
657 * Returns NULL if the iterator was already at the beginning and there are
658 * no previous functions.
659 */
660LLVMValueRef LLVMGetPreviousFunction(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000661
662/**
663 * @}
664 */
665
666/**
667 * @defgroup LLVMCCoreType Types
668 *
669 * Types represent the type of a value.
670 *
671 * Types are associated with a context instance. The context internally
672 * deduplicates types so there is only 1 instance of a specific type
673 * alive at a time. In other words, a unique type is shared among all
674 * consumers within a context.
675 *
676 * A Type in the C API corresponds to llvm::Type.
677 *
678 * Types have the following hierarchy:
679 *
Gordon Henriksen76a03742007-09-18 03:18:57 +0000680 * types:
681 * integer type
682 * real type
683 * function type
684 * sequence types:
685 * array type
686 * pointer type
687 * vector type
688 * void type
689 * label type
690 * opaque type
Gregory Szorc34c863a2012-03-21 03:54:29 +0000691 *
692 * @{
Gordon Henriksen76a03742007-09-18 03:18:57 +0000693 */
694
Gregory Szorc34c863a2012-03-21 03:54:29 +0000695/**
696 * Obtain the enumerated type of a Type instance.
697 *
698 * @see llvm::Type:getTypeID()
699 */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000700LLVMTypeKind LLVMGetTypeKind(LLVMTypeRef Ty);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000701
702/**
703 * Whether the type has a known size.
704 *
705 * Things that don't have a size are abstract types, labels, and void.a
706 *
707 * @see llvm::Type::isSized()
708 */
Torok Edwin1cd9ade2011-10-06 12:13:28 +0000709LLVMBool LLVMTypeIsSized(LLVMTypeRef Ty);
Gordon Henriksena49d4352008-03-07 19:13:06 +0000710
Gregory Szorc34c863a2012-03-21 03:54:29 +0000711/**
712 * Obtain the context to which this type instance is associated.
713 *
714 * @see llvm::Type::getContext()
715 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000716LLVMContextRef LLVMGetTypeContext(LLVMTypeRef Ty);
717
Gregory Szorc34c863a2012-03-21 03:54:29 +0000718/**
Anders Waldenborgb822cff2013-10-16 21:30:25 +0000719 * Dump a representation of a type to stderr.
720 *
721 * @see llvm::Type::dump()
722 */
723void LLVMDumpType(LLVMTypeRef Val);
724
725/**
Gregory Szorc34c863a2012-03-21 03:54:29 +0000726 * @defgroup LLVMCCoreTypeInt Integer Types
727 *
728 * Functions in this section operate on integer types.
729 *
730 * @{
731 */
732
733/**
734 * Obtain an integer type from a context with specified bit width.
735 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000736LLVMTypeRef LLVMInt1TypeInContext(LLVMContextRef C);
737LLVMTypeRef LLVMInt8TypeInContext(LLVMContextRef C);
738LLVMTypeRef LLVMInt16TypeInContext(LLVMContextRef C);
739LLVMTypeRef LLVMInt32TypeInContext(LLVMContextRef C);
740LLVMTypeRef LLVMInt64TypeInContext(LLVMContextRef C);
741LLVMTypeRef LLVMIntTypeInContext(LLVMContextRef C, unsigned NumBits);
742
Gregory Szorc34c863a2012-03-21 03:54:29 +0000743/**
744 * Obtain an integer type from the global context with a specified bit
745 * width.
746 */
Gordon Henriksena735a9c2008-05-04 12:55:34 +0000747LLVMTypeRef LLVMInt1Type(void);
748LLVMTypeRef LLVMInt8Type(void);
749LLVMTypeRef LLVMInt16Type(void);
750LLVMTypeRef LLVMInt32Type(void);
751LLVMTypeRef LLVMInt64Type(void);
Gordon Henriksened7beaa2007-10-06 16:05:20 +0000752LLVMTypeRef LLVMIntType(unsigned NumBits);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000753unsigned LLVMGetIntTypeWidth(LLVMTypeRef IntegerTy);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000754
Gregory Szorc34c863a2012-03-21 03:54:29 +0000755/**
756 * @}
757 */
758
759/**
760 * @defgroup LLVMCCoreTypeFloat Floating Point Types
761 *
762 * @{
763 */
764
765/**
766 * Obtain a 16-bit floating point type from a context.
767 */
Dan Gohman518cda42011-12-17 00:04:22 +0000768LLVMTypeRef LLVMHalfTypeInContext(LLVMContextRef C);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000769
770/**
771 * Obtain a 32-bit floating point type from a context.
772 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000773LLVMTypeRef LLVMFloatTypeInContext(LLVMContextRef C);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000774
775/**
776 * Obtain a 64-bit floating point type from a context.
777 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000778LLVMTypeRef LLVMDoubleTypeInContext(LLVMContextRef C);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000779
780/**
781 * Obtain a 80-bit floating point type (X87) from a context.
782 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000783LLVMTypeRef LLVMX86FP80TypeInContext(LLVMContextRef C);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000784
785/**
786 * Obtain a 128-bit floating point type (112-bit mantissa) from a
787 * context.
788 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000789LLVMTypeRef LLVMFP128TypeInContext(LLVMContextRef C);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000790
791/**
792 * Obtain a 128-bit floating point type (two 64-bits) from a context.
793 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000794LLVMTypeRef LLVMPPCFP128TypeInContext(LLVMContextRef C);
795
Gregory Szorc34c863a2012-03-21 03:54:29 +0000796/**
797 * Obtain a floating point type from the global context.
798 *
799 * These map to the functions in this group of the same name.
800 */
Dan Gohman518cda42011-12-17 00:04:22 +0000801LLVMTypeRef LLVMHalfType(void);
Gordon Henriksena735a9c2008-05-04 12:55:34 +0000802LLVMTypeRef LLVMFloatType(void);
803LLVMTypeRef LLVMDoubleType(void);
804LLVMTypeRef LLVMX86FP80Type(void);
805LLVMTypeRef LLVMFP128Type(void);
806LLVMTypeRef LLVMPPCFP128Type(void);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000807
Gregory Szorc34c863a2012-03-21 03:54:29 +0000808/**
809 * @}
810 */
811
812/**
813 * @defgroup LLVMCCoreTypeFunction Function Types
814 *
815 * @{
816 */
817
818/**
819 * Obtain a function type consisting of a specified signature.
820 *
821 * The function is defined as a tuple of a return Type, a list of
822 * parameter types, and whether the function is variadic.
823 */
Gordon Henriksened7beaa2007-10-06 16:05:20 +0000824LLVMTypeRef LLVMFunctionType(LLVMTypeRef ReturnType,
825 LLVMTypeRef *ParamTypes, unsigned ParamCount,
Chris Lattner25963c62010-01-09 22:27:07 +0000826 LLVMBool IsVarArg);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000827
828/**
829 * Returns whether a function type is variadic.
830 */
Chris Lattner25963c62010-01-09 22:27:07 +0000831LLVMBool LLVMIsFunctionVarArg(LLVMTypeRef FunctionTy);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000832
833/**
834 * Obtain the Type this function Type returns.
835 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000836LLVMTypeRef LLVMGetReturnType(LLVMTypeRef FunctionTy);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000837
838/**
839 * Obtain the number of parameters this function accepts.
840 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000841unsigned LLVMCountParamTypes(LLVMTypeRef FunctionTy);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000842
843/**
844 * Obtain the types of a function's parameters.
845 *
846 * The Dest parameter should point to a pre-allocated array of
847 * LLVMTypeRef at least LLVMCountParamTypes() large. On return, the
848 * first LLVMCountParamTypes() entries in the array will be populated
849 * with LLVMTypeRef instances.
850 *
851 * @param FunctionTy The function type to operate on.
852 * @param Dest Memory address of an array to be filled with result.
853 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000854void LLVMGetParamTypes(LLVMTypeRef FunctionTy, LLVMTypeRef *Dest);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000855
Gregory Szorc34c863a2012-03-21 03:54:29 +0000856/**
857 * @}
858 */
859
860/**
861 * @defgroup LLVMCCoreTypeStruct Structure Types
862 *
863 * These functions relate to LLVMTypeRef instances.
864 *
865 * @see llvm::StructType
866 *
867 * @{
868 */
869
870/**
871 * Create a new structure type in a context.
872 *
873 * A structure is specified by a list of inner elements/types and
874 * whether these can be packed together.
875 *
876 * @see llvm::StructType::create()
877 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000878LLVMTypeRef LLVMStructTypeInContext(LLVMContextRef C, LLVMTypeRef *ElementTypes,
Chris Lattner25963c62010-01-09 22:27:07 +0000879 unsigned ElementCount, LLVMBool Packed);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000880
881/**
882 * Create a new structure type in the global context.
883 *
884 * @see llvm::StructType::create()
885 */
Gordon Henriksened7beaa2007-10-06 16:05:20 +0000886LLVMTypeRef LLVMStructType(LLVMTypeRef *ElementTypes, unsigned ElementCount,
Chris Lattner25963c62010-01-09 22:27:07 +0000887 LLVMBool Packed);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000888
889/**
890 * Create an empty structure in a context having a specified name.
891 *
892 * @see llvm::StructType::create()
893 */
Chris Lattnere71ccde2011-07-14 05:53:17 +0000894LLVMTypeRef LLVMStructCreateNamed(LLVMContextRef C, const char *Name);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000895
896/**
897 * Obtain the name of a structure.
898 *
899 * @see llvm::StructType::getName()
900 */
Torok Edwin0d5f6ae2011-10-06 12:12:50 +0000901const char *LLVMGetStructName(LLVMTypeRef Ty);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000902
903/**
904 * Set the contents of a structure type.
905 *
906 * @see llvm::StructType::setBody()
907 */
Chris Lattnere71ccde2011-07-14 05:53:17 +0000908void LLVMStructSetBody(LLVMTypeRef StructTy, LLVMTypeRef *ElementTypes,
909 unsigned ElementCount, LLVMBool Packed);
910
Gregory Szorc34c863a2012-03-21 03:54:29 +0000911/**
912 * Get the number of elements defined inside the structure.
913 *
914 * @see llvm::StructType::getNumElements()
915 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000916unsigned LLVMCountStructElementTypes(LLVMTypeRef StructTy);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000917
918/**
919 * Get the elements within a structure.
920 *
921 * The function is passed the address of a pre-allocated array of
922 * LLVMTypeRef at least LLVMCountStructElementTypes() long. After
923 * invocation, this array will be populated with the structure's
924 * elements. The objects in the destination array will have a lifetime
925 * of the structure type itself, which is the lifetime of the context it
926 * is contained in.
927 */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000928void LLVMGetStructElementTypes(LLVMTypeRef StructTy, LLVMTypeRef *Dest);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000929
930/**
931 * Determine whether a structure is packed.
932 *
933 * @see llvm::StructType::isPacked()
934 */
Chris Lattner25963c62010-01-09 22:27:07 +0000935LLVMBool LLVMIsPackedStruct(LLVMTypeRef StructTy);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000936
937/**
938 * Determine whether a structure is opaque.
939 *
940 * @see llvm::StructType::isOpaque()
941 */
Chris Lattner17cf05b2011-07-14 16:20:28 +0000942LLVMBool LLVMIsOpaqueStruct(LLVMTypeRef StructTy);
943
Gregory Szorc34c863a2012-03-21 03:54:29 +0000944/**
945 * @}
946 */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000947
Gregory Szorc34c863a2012-03-21 03:54:29 +0000948
949/**
950 * @defgroup LLVMCCoreTypeSequential Sequential Types
951 *
952 * Sequential types represents "arrays" of types. This is a super class
953 * for array, vector, and pointer types.
954 *
955 * @{
956 */
957
958/**
959 * Obtain the type of elements within a sequential type.
960 *
961 * This works on array, vector, and pointer types.
962 *
963 * @see llvm::SequentialType::getElementType()
964 */
965LLVMTypeRef LLVMGetElementType(LLVMTypeRef Ty);
966
967/**
968 * Create a fixed size array type that refers to a specific type.
969 *
970 * The created type will exist in the context that its element type
971 * exists in.
972 *
973 * @see llvm::ArrayType::get()
974 */
Gordon Henriksened7beaa2007-10-06 16:05:20 +0000975LLVMTypeRef LLVMArrayType(LLVMTypeRef ElementType, unsigned ElementCount);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000976
977/**
978 * Obtain the length of an array type.
979 *
980 * This only works on types that represent arrays.
981 *
982 * @see llvm::ArrayType::getNumElements()
983 */
984unsigned LLVMGetArrayLength(LLVMTypeRef ArrayTy);
985
986/**
987 * Create a pointer type that points to a defined type.
988 *
989 * The created type will exist in the context that its pointee type
990 * exists in.
991 *
992 * @see llvm::PointerType::get()
993 */
Gordon Henriksen5a3fe032007-12-17 16:08:32 +0000994LLVMTypeRef LLVMPointerType(LLVMTypeRef ElementType, unsigned AddressSpace);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000995
996/**
997 * Obtain the address space of a pointer type.
998 *
999 * This only works on types that represent pointers.
1000 *
1001 * @see llvm::PointerType::getAddressSpace()
1002 */
1003unsigned LLVMGetPointerAddressSpace(LLVMTypeRef PointerTy);
1004
1005/**
1006 * Create a vector type that contains a defined type and has a specific
1007 * number of elements.
1008 *
1009 * The created type will exist in the context thats its element type
1010 * exists in.
1011 *
1012 * @see llvm::VectorType::get()
1013 */
Gordon Henriksened7beaa2007-10-06 16:05:20 +00001014LLVMTypeRef LLVMVectorType(LLVMTypeRef ElementType, unsigned ElementCount);
Gordon Henriksen76a03742007-09-18 03:18:57 +00001015
Gregory Szorc34c863a2012-03-21 03:54:29 +00001016/**
1017 * Obtain the number of elements in a vector type.
1018 *
1019 * This only works on types that represent vectors.
1020 *
1021 * @see llvm::VectorType::getNumElements()
1022 */
Gordon Henriksen76a03742007-09-18 03:18:57 +00001023unsigned LLVMGetVectorSize(LLVMTypeRef VectorTy);
1024
Gregory Szorc34c863a2012-03-21 03:54:29 +00001025/**
1026 * @}
1027 */
1028
1029/**
1030 * @defgroup LLVMCCoreTypeOther Other Types
1031 *
1032 * @{
1033 */
1034
1035/**
1036 * Create a void type in a context.
1037 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +00001038LLVMTypeRef LLVMVoidTypeInContext(LLVMContextRef C);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001039
1040/**
1041 * Create a label type in a context.
1042 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +00001043LLVMTypeRef LLVMLabelTypeInContext(LLVMContextRef C);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001044
1045/**
1046 * Create a X86 MMX type in a context.
1047 */
Dale Johannesen95b67af2010-09-10 21:58:02 +00001048LLVMTypeRef LLVMX86MMXTypeInContext(LLVMContextRef C);
Erick Tryzelaar262332f2009-08-14 00:01:31 +00001049
Gregory Szorc34c863a2012-03-21 03:54:29 +00001050/**
1051 * These are similar to the above functions except they operate on the
1052 * global context.
1053 */
Gordon Henriksena735a9c2008-05-04 12:55:34 +00001054LLVMTypeRef LLVMVoidType(void);
1055LLVMTypeRef LLVMLabelType(void);
Dale Johannesen95b67af2010-09-10 21:58:02 +00001056LLVMTypeRef LLVMX86MMXType(void);
Gordon Henriksen76a03742007-09-18 03:18:57 +00001057
Gregory Szorc34c863a2012-03-21 03:54:29 +00001058/**
1059 * @}
1060 */
Gordon Henriksen76a03742007-09-18 03:18:57 +00001061
Gregory Szorc34c863a2012-03-21 03:54:29 +00001062/**
1063 * @}
1064 */
1065
1066/**
1067 * @defgroup LLVMCCoreValues Values
1068 *
1069 * The bulk of LLVM's object model consists of values, which comprise a very
Gordon Henriksen76a03742007-09-18 03:18:57 +00001070 * rich type hierarchy.
Gregory Szorc34c863a2012-03-21 03:54:29 +00001071 *
1072 * LLVMValueRef essentially represents llvm::Value. There is a rich
1073 * hierarchy of classes within this type. Depending on the instance
Eli Benderskyc52863c2012-08-10 18:30:44 +00001074 * obtained, not all APIs are available.
Gregory Szorc34c863a2012-03-21 03:54:29 +00001075 *
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +00001076 * Callers can determine the type of an LLVMValueRef by calling the
Gregory Szorc34c863a2012-03-21 03:54:29 +00001077 * LLVMIsA* family of functions (e.g. LLVMIsAArgument()). These
1078 * functions are defined by a macro, so it isn't obvious which are
1079 * available by looking at the Doxygen source code. Instead, look at the
1080 * source definition of LLVM_FOR_EACH_VALUE_SUBCLASS and note the list
1081 * of value names given. These value names also correspond to classes in
1082 * the llvm::Value hierarchy.
1083 *
1084 * @{
Gordon Henriksen76a03742007-09-18 03:18:57 +00001085 */
1086
Gordon Henriksen29e38942008-12-19 18:39:45 +00001087#define LLVM_FOR_EACH_VALUE_SUBCLASS(macro) \
1088 macro(Argument) \
1089 macro(BasicBlock) \
1090 macro(InlineAsm) \
Torok Edwind09b7572011-10-14 20:37:56 +00001091 macro(MDNode) \
1092 macro(MDString) \
Gordon Henriksen29e38942008-12-19 18:39:45 +00001093 macro(User) \
1094 macro(Constant) \
Torok Edwind09b7572011-10-14 20:37:56 +00001095 macro(BlockAddress) \
Gordon Henriksen29e38942008-12-19 18:39:45 +00001096 macro(ConstantAggregateZero) \
1097 macro(ConstantArray) \
1098 macro(ConstantExpr) \
1099 macro(ConstantFP) \
1100 macro(ConstantInt) \
1101 macro(ConstantPointerNull) \
1102 macro(ConstantStruct) \
1103 macro(ConstantVector) \
1104 macro(GlobalValue) \
1105 macro(Function) \
1106 macro(GlobalAlias) \
1107 macro(GlobalVariable) \
1108 macro(UndefValue) \
1109 macro(Instruction) \
1110 macro(BinaryOperator) \
1111 macro(CallInst) \
1112 macro(IntrinsicInst) \
1113 macro(DbgInfoIntrinsic) \
1114 macro(DbgDeclareInst) \
Gordon Henriksen29e38942008-12-19 18:39:45 +00001115 macro(MemIntrinsic) \
1116 macro(MemCpyInst) \
1117 macro(MemMoveInst) \
1118 macro(MemSetInst) \
1119 macro(CmpInst) \
Torok Edwind09b7572011-10-14 20:37:56 +00001120 macro(FCmpInst) \
1121 macro(ICmpInst) \
Gordon Henriksen29e38942008-12-19 18:39:45 +00001122 macro(ExtractElementInst) \
1123 macro(GetElementPtrInst) \
1124 macro(InsertElementInst) \
1125 macro(InsertValueInst) \
Bill Wendlingfae14752011-08-12 20:24:12 +00001126 macro(LandingPadInst) \
Gordon Henriksen29e38942008-12-19 18:39:45 +00001127 macro(PHINode) \
1128 macro(SelectInst) \
1129 macro(ShuffleVectorInst) \
1130 macro(StoreInst) \
1131 macro(TerminatorInst) \
1132 macro(BranchInst) \
Torok Edwind09b7572011-10-14 20:37:56 +00001133 macro(IndirectBrInst) \
Gordon Henriksen29e38942008-12-19 18:39:45 +00001134 macro(InvokeInst) \
1135 macro(ReturnInst) \
1136 macro(SwitchInst) \
1137 macro(UnreachableInst) \
Bill Wendlingf891bf82011-07-31 06:30:59 +00001138 macro(ResumeInst) \
Duncan Sands5e37e992013-05-06 08:55:45 +00001139 macro(UnaryInstruction) \
1140 macro(AllocaInst) \
1141 macro(CastInst) \
1142 macro(BitCastInst) \
1143 macro(FPExtInst) \
1144 macro(FPToSIInst) \
1145 macro(FPToUIInst) \
1146 macro(FPTruncInst) \
1147 macro(IntToPtrInst) \
1148 macro(PtrToIntInst) \
1149 macro(SExtInst) \
1150 macro(SIToFPInst) \
1151 macro(TruncInst) \
1152 macro(UIToFPInst) \
1153 macro(ZExtInst) \
1154 macro(ExtractValueInst) \
1155 macro(LoadInst) \
1156 macro(VAArgInst)
Gordon Henriksen29e38942008-12-19 18:39:45 +00001157
Gregory Szorc34c863a2012-03-21 03:54:29 +00001158/**
1159 * @defgroup LLVMCCoreValueGeneral General APIs
1160 *
1161 * Functions in this section work on all LLVMValueRef instances,
1162 * regardless of their sub-type. They correspond to functions available
1163 * on llvm::Value.
1164 *
1165 * @{
1166 */
Gordon Henriksen76a03742007-09-18 03:18:57 +00001167
Gregory Szorc34c863a2012-03-21 03:54:29 +00001168/**
1169 * Obtain the type of a value.
1170 *
1171 * @see llvm::Value::getType()
1172 */
1173LLVMTypeRef LLVMTypeOf(LLVMValueRef Val);
1174
1175/**
1176 * Obtain the string name of a value.
1177 *
1178 * @see llvm::Value::getName()
1179 */
1180const char *LLVMGetValueName(LLVMValueRef Val);
1181
1182/**
1183 * Set the string name of a value.
1184 *
1185 * @see llvm::Value::setName()
1186 */
1187void LLVMSetValueName(LLVMValueRef Val, const char *Name);
1188
1189/**
1190 * Dump a representation of a value to stderr.
1191 *
1192 * @see llvm::Value::dump()
1193 */
1194void LLVMDumpValue(LLVMValueRef Val);
1195
1196/**
1197 * Replace all uses of a value with another one.
1198 *
1199 * @see llvm::Value::replaceAllUsesWith()
1200 */
1201void LLVMReplaceAllUsesWith(LLVMValueRef OldVal, LLVMValueRef NewVal);
1202
1203/**
1204 * Determine whether the specified constant instance is constant.
1205 */
1206LLVMBool LLVMIsConstant(LLVMValueRef Val);
1207
1208/**
1209 * Determine whether a value instance is undefined.
1210 */
1211LLVMBool LLVMIsUndef(LLVMValueRef Val);
1212
1213/**
1214 * Convert value instances between types.
1215 *
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +00001216 * Internally, an LLVMValueRef is "pinned" to a specific type. This
Gregory Szorc34c863a2012-03-21 03:54:29 +00001217 * series of functions allows you to cast an instance to a specific
1218 * type.
1219 *
1220 * If the cast is not valid for the specified type, NULL is returned.
1221 *
1222 * @see llvm::dyn_cast_or_null<>
1223 */
Gordon Henriksen29e38942008-12-19 18:39:45 +00001224#define LLVM_DECLARE_VALUE_CAST(name) \
1225 LLVMValueRef LLVMIsA##name(LLVMValueRef Val);
1226LLVM_FOR_EACH_VALUE_SUBCLASS(LLVM_DECLARE_VALUE_CAST)
1227
Gregory Szorc34c863a2012-03-21 03:54:29 +00001228/**
1229 * @}
1230 */
1231
1232/**
1233 * @defgroup LLVMCCoreValueUses Usage
1234 *
1235 * This module defines functions that allow you to inspect the uses of a
1236 * LLVMValueRef.
1237 *
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +00001238 * It is possible to obtain an LLVMUseRef for any LLVMValueRef instance.
Gregory Szorc34c863a2012-03-21 03:54:29 +00001239 * Each LLVMUseRef (which corresponds to a llvm::Use instance) holds a
1240 * llvm::User and llvm::Value.
1241 *
1242 * @{
1243 */
1244
1245/**
1246 * Obtain the first use of a value.
1247 *
1248 * Uses are obtained in an iterator fashion. First, call this function
1249 * to obtain a reference to the first use. Then, call LLVMGetNextUse()
Eli Benderskyc52863c2012-08-10 18:30:44 +00001250 * on that instance and all subsequently obtained instances until
Gregory Szorc34c863a2012-03-21 03:54:29 +00001251 * LLVMGetNextUse() returns NULL.
1252 *
1253 * @see llvm::Value::use_begin()
1254 */
Erick Tryzelaar9f9857e2010-03-02 20:32:28 +00001255LLVMUseRef LLVMGetFirstUse(LLVMValueRef Val);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001256
1257/**
1258 * Obtain the next use of a value.
1259 *
1260 * This effectively advances the iterator. It returns NULL if you are on
1261 * the final use and no more are available.
1262 */
Erick Tryzelaar9f9857e2010-03-02 20:32:28 +00001263LLVMUseRef LLVMGetNextUse(LLVMUseRef U);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001264
1265/**
1266 * Obtain the user value for a user.
1267 *
1268 * The returned value corresponds to a llvm::User type.
1269 *
1270 * @see llvm::Use::getUser()
1271 */
Erick Tryzelaar9f9857e2010-03-02 20:32:28 +00001272LLVMValueRef LLVMGetUser(LLVMUseRef U);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001273
1274/**
1275 * Obtain the value this use corresponds to.
1276 *
1277 * @see llvm::Use::get().
1278 */
Erick Tryzelaar9f9857e2010-03-02 20:32:28 +00001279LLVMValueRef LLVMGetUsedValue(LLVMUseRef U);
Chris Lattner40cf28d2009-10-12 04:01:02 +00001280
Gregory Szorc34c863a2012-03-21 03:54:29 +00001281/**
1282 * @}
1283 */
1284
1285/**
Gregory Szorc52d26602012-03-21 07:28:27 +00001286 * @defgroup LLVMCCoreValueUser User value
Gregory Szorc34c863a2012-03-21 03:54:29 +00001287 *
1288 * Function in this group pertain to LLVMValueRef instances that descent
1289 * from llvm::User. This includes constants, instructions, and
1290 * operators.
1291 *
1292 * @{
1293 */
1294
1295/**
1296 * Obtain an operand at a specific index in a llvm::User value.
1297 *
1298 * @see llvm::User::getOperand()
1299 */
Chris Lattner40cf28d2009-10-12 04:01:02 +00001300LLVMValueRef LLVMGetOperand(LLVMValueRef Val, unsigned Index);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001301
1302/**
1303 * Set an operand at a specific index in a llvm::User value.
1304 *
1305 * @see llvm::User::setOperand()
1306 */
Erick Tryzelaarb4d48702010-08-20 14:51:22 +00001307void LLVMSetOperand(LLVMValueRef User, unsigned Index, LLVMValueRef Val);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001308
1309/**
1310 * Obtain the number of operands in a llvm::User value.
1311 *
1312 * @see llvm::User::getNumOperands()
1313 */
Erick Tryzelaarb4d48702010-08-20 14:51:22 +00001314int LLVMGetNumOperands(LLVMValueRef Val);
Chris Lattner40cf28d2009-10-12 04:01:02 +00001315
Gregory Szorc34c863a2012-03-21 03:54:29 +00001316/**
1317 * @}
1318 */
1319
1320/**
Gregory Szorc52d26602012-03-21 07:28:27 +00001321 * @defgroup LLVMCCoreValueConstant Constants
Gregory Szorc34c863a2012-03-21 03:54:29 +00001322 *
1323 * This section contains APIs for interacting with LLVMValueRef that
1324 * correspond to llvm::Constant instances.
1325 *
1326 * These functions will work for any LLVMValueRef in the llvm::Constant
1327 * class hierarchy.
1328 *
1329 * @{
1330 */
1331
1332/**
1333 * Obtain a constant value referring to the null instance of a type.
1334 *
1335 * @see llvm::Constant::getNullValue()
1336 */
Gordon Henriksen1046c732007-10-06 15:11:06 +00001337LLVMValueRef LLVMConstNull(LLVMTypeRef Ty); /* all zeroes */
Gregory Szorc34c863a2012-03-21 03:54:29 +00001338
1339/**
1340 * Obtain a constant value referring to the instance of a type
1341 * consisting of all ones.
1342 *
1343 * This is only valid for integer types.
1344 *
1345 * @see llvm::Constant::getAllOnesValue()
1346 */
1347LLVMValueRef LLVMConstAllOnes(LLVMTypeRef Ty);
1348
1349/**
1350 * Obtain a constant value referring to an undefined value of a type.
1351 *
1352 * @see llvm::UndefValue::get()
1353 */
Gordon Henriksen76a03742007-09-18 03:18:57 +00001354LLVMValueRef LLVMGetUndef(LLVMTypeRef Ty);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001355
1356/**
1357 * Determine whether a value instance is null.
1358 *
1359 * @see llvm::Constant::isNullValue()
1360 */
Chris Lattner25963c62010-01-09 22:27:07 +00001361LLVMBool LLVMIsNull(LLVMValueRef Val);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001362
1363/**
1364 * Obtain a constant that is a constant pointer pointing to NULL for a
1365 * specified type.
1366 */
Chris Lattner7f318242009-07-06 17:29:59 +00001367LLVMValueRef LLVMConstPointerNull(LLVMTypeRef Ty);
Gordon Henriksen76a03742007-09-18 03:18:57 +00001368
Gregory Szorc34c863a2012-03-21 03:54:29 +00001369/**
1370 * @defgroup LLVMCCoreValueConstantScalar Scalar constants
1371 *
1372 * Functions in this group model LLVMValueRef instances that correspond
1373 * to constants referring to scalar types.
1374 *
1375 * For integer types, the LLVMTypeRef parameter should correspond to a
1376 * llvm::IntegerType instance and the returned LLVMValueRef will
1377 * correspond to a llvm::ConstantInt.
1378 *
1379 * For floating point types, the LLVMTypeRef returned corresponds to a
1380 * llvm::ConstantFP.
1381 *
1382 * @{
1383 */
Erick Tryzelaard8531fa2010-02-28 09:45:59 +00001384
Gregory Szorc34c863a2012-03-21 03:54:29 +00001385/**
1386 * Obtain a constant value for an integer type.
1387 *
1388 * The returned value corresponds to a llvm::ConstantInt.
1389 *
1390 * @see llvm::ConstantInt::get()
1391 *
1392 * @param IntTy Integer type to obtain value of.
1393 * @param N The value the returned instance should refer to.
1394 * @param SignExtend Whether to sign extend the produced value.
1395 */
Gordon Henriksen1046c732007-10-06 15:11:06 +00001396LLVMValueRef LLVMConstInt(LLVMTypeRef IntTy, unsigned long long N,
Chris Lattner25963c62010-01-09 22:27:07 +00001397 LLVMBool SignExtend);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001398
1399/**
1400 * Obtain a constant value for an integer of arbitrary precision.
1401 *
1402 * @see llvm::ConstantInt::get()
1403 */
Chris Lattner4329e072010-11-23 02:47:22 +00001404LLVMValueRef LLVMConstIntOfArbitraryPrecision(LLVMTypeRef IntTy,
1405 unsigned NumWords,
1406 const uint64_t Words[]);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001407
1408/**
1409 * Obtain a constant value for an integer parsed from a string.
1410 *
1411 * A similar API, LLVMConstIntOfStringAndSize is also available. If the
1412 * string's length is available, it is preferred to call that function
1413 * instead.
1414 *
1415 * @see llvm::ConstantInt::get()
1416 */
Erick Tryzelaardd991352009-08-16 23:36:46 +00001417LLVMValueRef LLVMConstIntOfString(LLVMTypeRef IntTy, const char *Text,
1418 uint8_t Radix);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001419
1420/**
1421 * Obtain a constant value for an integer parsed from a string with
1422 * specified length.
1423 *
1424 * @see llvm::ConstantInt::get()
1425 */
Erick Tryzelaardd991352009-08-16 23:36:46 +00001426LLVMValueRef LLVMConstIntOfStringAndSize(LLVMTypeRef IntTy, const char *Text,
1427 unsigned SLen, uint8_t Radix);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001428
1429/**
1430 * Obtain a constant value referring to a double floating point value.
1431 */
Gordon Henriksen1046c732007-10-06 15:11:06 +00001432LLVMValueRef LLVMConstReal(LLVMTypeRef RealTy, double N);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001433
1434/**
1435 * Obtain a constant for a floating point value parsed from a string.
1436 *
1437 * A similar API, LLVMConstRealOfStringAndSize is also available. It
1438 * should be used if the input string's length is known.
1439 */
Gordon Henriksen931e1212008-02-02 01:07:50 +00001440LLVMValueRef LLVMConstRealOfString(LLVMTypeRef RealTy, const char *Text);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001441
1442/**
1443 * Obtain a constant for a floating point value parsed from a string.
1444 */
Erick Tryzelaardd991352009-08-16 23:36:46 +00001445LLVMValueRef LLVMConstRealOfStringAndSize(LLVMTypeRef RealTy, const char *Text,
1446 unsigned SLen);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001447
1448/**
1449 * Obtain the zero extended value for an integer constant value.
1450 *
1451 * @see llvm::ConstantInt::getZExtValue()
1452 */
Chris Lattner40cf28d2009-10-12 04:01:02 +00001453unsigned long long LLVMConstIntGetZExtValue(LLVMValueRef ConstantVal);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001454
1455/**
1456 * Obtain the sign extended value for an integer constant value.
1457 *
1458 * @see llvm::ConstantInt::getSExtValue()
1459 */
Chris Lattner40cf28d2009-10-12 04:01:02 +00001460long long LLVMConstIntGetSExtValue(LLVMValueRef ConstantVal);
Erick Tryzelaardd991352009-08-16 23:36:46 +00001461
Gregory Szorc34c863a2012-03-21 03:54:29 +00001462/**
1463 * @}
1464 */
1465
1466/**
Gregory Szorc52d26602012-03-21 07:28:27 +00001467 * @defgroup LLVMCCoreValueConstantComposite Composite Constants
1468 *
1469 * Functions in this group operate on composite constants.
Gregory Szorc34c863a2012-03-21 03:54:29 +00001470 *
1471 * @{
1472 */
1473
1474/**
Gregory Szorc52d26602012-03-21 07:28:27 +00001475 * Create a ConstantDataSequential and initialize it with a string.
Gregory Szorc34c863a2012-03-21 03:54:29 +00001476 *
Gregory Szorc52d26602012-03-21 07:28:27 +00001477 * @see llvm::ConstantDataArray::getString()
Gregory Szorc34c863a2012-03-21 03:54:29 +00001478 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +00001479LLVMValueRef LLVMConstStringInContext(LLVMContextRef C, const char *Str,
Chris Lattner25963c62010-01-09 22:27:07 +00001480 unsigned Length, LLVMBool DontNullTerminate);
Gregory Szorc52d26602012-03-21 07:28:27 +00001481
1482/**
1483 * Create a ConstantDataSequential with string content in the global context.
1484 *
1485 * This is the same as LLVMConstStringInContext except it operates on the
1486 * global context.
1487 *
1488 * @see LLVMConstStringInContext()
1489 * @see llvm::ConstantDataArray::getString()
1490 */
1491LLVMValueRef LLVMConstString(const char *Str, unsigned Length,
1492 LLVMBool DontNullTerminate);
1493
1494/**
1495 * Create an anonymous ConstantStruct with the specified values.
1496 *
1497 * @see llvm::ConstantStruct::getAnon()
1498 */
1499LLVMValueRef LLVMConstStructInContext(LLVMContextRef C,
Erick Tryzelaar262332f2009-08-14 00:01:31 +00001500 LLVMValueRef *ConstantVals,
Chris Lattner25963c62010-01-09 22:27:07 +00001501 unsigned Count, LLVMBool Packed);
Erick Tryzelaar262332f2009-08-14 00:01:31 +00001502
Gregory Szorc52d26602012-03-21 07:28:27 +00001503/**
1504 * Create a ConstantStruct in the global Context.
1505 *
1506 * This is the same as LLVMConstStructInContext except it operates on the
1507 * global Context.
1508 *
1509 * @see LLVMConstStructInContext()
1510 */
Gordon Henriksen1046c732007-10-06 15:11:06 +00001511LLVMValueRef LLVMConstStruct(LLVMValueRef *ConstantVals, unsigned Count,
Chris Lattner25963c62010-01-09 22:27:07 +00001512 LLVMBool Packed);
Gregory Szorc52d26602012-03-21 07:28:27 +00001513
1514/**
1515 * Create a ConstantArray from values.
1516 *
1517 * @see llvm::ConstantArray::get()
1518 */
1519LLVMValueRef LLVMConstArray(LLVMTypeRef ElementTy,
1520 LLVMValueRef *ConstantVals, unsigned Length);
1521
1522/**
1523 * Create a non-anonymous ConstantStruct from values.
1524 *
1525 * @see llvm::ConstantStruct::get()
1526 */
Rafael Espindola784ad242011-07-14 19:09:08 +00001527LLVMValueRef LLVMConstNamedStruct(LLVMTypeRef StructTy,
1528 LLVMValueRef *ConstantVals,
1529 unsigned Count);
Gregory Szorc52d26602012-03-21 07:28:27 +00001530
1531/**
1532 * Create a ConstantVector from values.
1533 *
1534 * @see llvm::ConstantVector::get()
1535 */
Gordon Henriksen1046c732007-10-06 15:11:06 +00001536LLVMValueRef LLVMConstVector(LLVMValueRef *ScalarConstantVals, unsigned Size);
Gordon Henriksen76a03742007-09-18 03:18:57 +00001537
Gregory Szorc52d26602012-03-21 07:28:27 +00001538/**
1539 * @}
1540 */
1541
1542/**
1543 * @defgroup LLVMCCoreValueConstantExpressions Constant Expressions
1544 *
1545 * Functions in this group correspond to APIs on llvm::ConstantExpr.
1546 *
1547 * @see llvm::ConstantExpr.
1548 *
1549 * @{
1550 */
Chris Lattner40cf28d2009-10-12 04:01:02 +00001551LLVMOpcode LLVMGetConstOpcode(LLVMValueRef ConstantVal);
Erick Tryzelaarfd529d72009-08-19 08:36:49 +00001552LLVMValueRef LLVMAlignOf(LLVMTypeRef Ty);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001553LLVMValueRef LLVMSizeOf(LLVMTypeRef Ty);
1554LLVMValueRef LLVMConstNeg(LLVMValueRef ConstantVal);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +00001555LLVMValueRef LLVMConstNSWNeg(LLVMValueRef ConstantVal);
1556LLVMValueRef LLVMConstNUWNeg(LLVMValueRef ConstantVal);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +00001557LLVMValueRef LLVMConstFNeg(LLVMValueRef ConstantVal);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001558LLVMValueRef LLVMConstNot(LLVMValueRef ConstantVal);
1559LLVMValueRef LLVMConstAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Dan Gohmane4ca02d2009-09-03 23:34:49 +00001560LLVMValueRef LLVMConstNSWAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +00001561LLVMValueRef LLVMConstNUWAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +00001562LLVMValueRef LLVMConstFAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001563LLVMValueRef LLVMConstSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +00001564LLVMValueRef LLVMConstNSWSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1565LLVMValueRef LLVMConstNUWSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +00001566LLVMValueRef LLVMConstFSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001567LLVMValueRef LLVMConstMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +00001568LLVMValueRef LLVMConstNSWMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1569LLVMValueRef LLVMConstNUWMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +00001570LLVMValueRef LLVMConstFMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001571LLVMValueRef LLVMConstUDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1572LLVMValueRef LLVMConstSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Dan Gohmane4ca02d2009-09-03 23:34:49 +00001573LLVMValueRef LLVMConstExactSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001574LLVMValueRef LLVMConstFDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1575LLVMValueRef LLVMConstURem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1576LLVMValueRef LLVMConstSRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1577LLVMValueRef LLVMConstFRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1578LLVMValueRef LLVMConstAnd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1579LLVMValueRef LLVMConstOr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1580LLVMValueRef LLVMConstXor(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1581LLVMValueRef LLVMConstICmp(LLVMIntPredicate Predicate,
1582 LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1583LLVMValueRef LLVMConstFCmp(LLVMRealPredicate Predicate,
1584 LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1585LLVMValueRef LLVMConstShl(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1586LLVMValueRef LLVMConstLShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1587LLVMValueRef LLVMConstAShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1588LLVMValueRef LLVMConstGEP(LLVMValueRef ConstantVal,
1589 LLVMValueRef *ConstantIndices, unsigned NumIndices);
Dan Gohmane4ca02d2009-09-03 23:34:49 +00001590LLVMValueRef LLVMConstInBoundsGEP(LLVMValueRef ConstantVal,
1591 LLVMValueRef *ConstantIndices,
1592 unsigned NumIndices);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001593LLVMValueRef LLVMConstTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1594LLVMValueRef LLVMConstSExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1595LLVMValueRef LLVMConstZExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1596LLVMValueRef LLVMConstFPTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1597LLVMValueRef LLVMConstFPExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1598LLVMValueRef LLVMConstUIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1599LLVMValueRef LLVMConstSIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1600LLVMValueRef LLVMConstFPToUI(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1601LLVMValueRef LLVMConstFPToSI(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1602LLVMValueRef LLVMConstPtrToInt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1603LLVMValueRef LLVMConstIntToPtr(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1604LLVMValueRef LLVMConstBitCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +00001605LLVMValueRef LLVMConstZExtOrBitCast(LLVMValueRef ConstantVal,
1606 LLVMTypeRef ToType);
1607LLVMValueRef LLVMConstSExtOrBitCast(LLVMValueRef ConstantVal,
1608 LLVMTypeRef ToType);
1609LLVMValueRef LLVMConstTruncOrBitCast(LLVMValueRef ConstantVal,
1610 LLVMTypeRef ToType);
1611LLVMValueRef LLVMConstPointerCast(LLVMValueRef ConstantVal,
1612 LLVMTypeRef ToType);
1613LLVMValueRef LLVMConstIntCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType,
Chris Lattner25963c62010-01-09 22:27:07 +00001614 LLVMBool isSigned);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +00001615LLVMValueRef LLVMConstFPCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001616LLVMValueRef LLVMConstSelect(LLVMValueRef ConstantCondition,
1617 LLVMValueRef ConstantIfTrue,
1618 LLVMValueRef ConstantIfFalse);
1619LLVMValueRef LLVMConstExtractElement(LLVMValueRef VectorConstant,
1620 LLVMValueRef IndexConstant);
1621LLVMValueRef LLVMConstInsertElement(LLVMValueRef VectorConstant,
1622 LLVMValueRef ElementValueConstant,
1623 LLVMValueRef IndexConstant);
1624LLVMValueRef LLVMConstShuffleVector(LLVMValueRef VectorAConstant,
1625 LLVMValueRef VectorBConstant,
1626 LLVMValueRef MaskConstant);
Dan Gohmand5104a52008-11-03 22:55:43 +00001627LLVMValueRef LLVMConstExtractValue(LLVMValueRef AggConstant, unsigned *IdxList,
1628 unsigned NumIdx);
1629LLVMValueRef LLVMConstInsertValue(LLVMValueRef AggConstant,
1630 LLVMValueRef ElementValueConstant,
1631 unsigned *IdxList, unsigned NumIdx);
Chris Lattner25963c62010-01-09 22:27:07 +00001632LLVMValueRef LLVMConstInlineAsm(LLVMTypeRef Ty,
Chris Lattner3d1f5522008-12-17 21:39:50 +00001633 const char *AsmString, const char *Constraints,
Chris Lattner25963c62010-01-09 22:27:07 +00001634 LLVMBool HasSideEffects, LLVMBool IsAlignStack);
Erick Tryzelaar0fb26ef2010-02-28 09:46:06 +00001635LLVMValueRef LLVMBlockAddress(LLVMValueRef F, LLVMBasicBlockRef BB);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001636
Gregory Szorc52d26602012-03-21 07:28:27 +00001637/**
1638 * @}
1639 */
1640
1641/**
1642 * @defgroup LLVMCCoreValueConstantGlobals Global Values
1643 *
1644 * This group contains functions that operate on global values. Functions in
1645 * this group relate to functions in the llvm::GlobalValue class tree.
1646 *
1647 * @see llvm::GlobalValue
1648 *
1649 * @{
1650 */
1651
Gordon Henriksen265f7802008-03-19 01:11:35 +00001652LLVMModuleRef LLVMGetGlobalParent(LLVMValueRef Global);
Chris Lattner25963c62010-01-09 22:27:07 +00001653LLVMBool LLVMIsDeclaration(LLVMValueRef Global);
Gordon Henriksen76a03742007-09-18 03:18:57 +00001654LLVMLinkage LLVMGetLinkage(LLVMValueRef Global);
1655void LLVMSetLinkage(LLVMValueRef Global, LLVMLinkage Linkage);
1656const char *LLVMGetSection(LLVMValueRef Global);
1657void LLVMSetSection(LLVMValueRef Global, const char *Section);
1658LLVMVisibility LLVMGetVisibility(LLVMValueRef Global);
1659void LLVMSetVisibility(LLVMValueRef Global, LLVMVisibility Viz);
1660unsigned LLVMGetAlignment(LLVMValueRef Global);
1661void LLVMSetAlignment(LLVMValueRef Global, unsigned Bytes);
1662
Gregory Szorc52d26602012-03-21 07:28:27 +00001663/**
1664 * @defgroup LLVMCoreValueConstantGlobalVariable Global Variables
1665 *
1666 * This group contains functions that operate on global variable values.
1667 *
1668 * @see llvm::GlobalVariable
1669 *
1670 * @{
1671 */
Gordon Henriksen76a03742007-09-18 03:18:57 +00001672LLVMValueRef LLVMAddGlobal(LLVMModuleRef M, LLVMTypeRef Ty, const char *Name);
Erick Tryzelaar06894b32010-02-28 09:46:13 +00001673LLVMValueRef LLVMAddGlobalInAddressSpace(LLVMModuleRef M, LLVMTypeRef Ty,
1674 const char *Name,
1675 unsigned AddressSpace);
Gordon Henriksen783f7bb2007-10-08 03:45:09 +00001676LLVMValueRef LLVMGetNamedGlobal(LLVMModuleRef M, const char *Name);
Gordon Henriksen07a45f42008-03-23 22:21:29 +00001677LLVMValueRef LLVMGetFirstGlobal(LLVMModuleRef M);
1678LLVMValueRef LLVMGetLastGlobal(LLVMModuleRef M);
1679LLVMValueRef LLVMGetNextGlobal(LLVMValueRef GlobalVar);
1680LLVMValueRef LLVMGetPreviousGlobal(LLVMValueRef GlobalVar);
Gordon Henriksen76a03742007-09-18 03:18:57 +00001681void LLVMDeleteGlobal(LLVMValueRef GlobalVar);
Gordon Henriksen76a03742007-09-18 03:18:57 +00001682LLVMValueRef LLVMGetInitializer(LLVMValueRef GlobalVar);
1683void LLVMSetInitializer(LLVMValueRef GlobalVar, LLVMValueRef ConstantVal);
Chris Lattner25963c62010-01-09 22:27:07 +00001684LLVMBool LLVMIsThreadLocal(LLVMValueRef GlobalVar);
1685void LLVMSetThreadLocal(LLVMValueRef GlobalVar, LLVMBool IsThreadLocal);
1686LLVMBool LLVMIsGlobalConstant(LLVMValueRef GlobalVar);
1687void LLVMSetGlobalConstant(LLVMValueRef GlobalVar, LLVMBool IsConstant);
Hans Wennborg5ff71202013-04-16 08:58:59 +00001688LLVMThreadLocalMode LLVMGetThreadLocalMode(LLVMValueRef GlobalVar);
1689void LLVMSetThreadLocalMode(LLVMValueRef GlobalVar, LLVMThreadLocalMode Mode);
1690LLVMBool LLVMIsExternallyInitialized(LLVMValueRef GlobalVar);
1691void LLVMSetExternallyInitialized(LLVMValueRef GlobalVar, LLVMBool IsExtInit);
Gordon Henriksen76a03742007-09-18 03:18:57 +00001692
Gregory Szorc52d26602012-03-21 07:28:27 +00001693/**
1694 * @}
1695 */
1696
1697/**
1698 * @defgroup LLVMCoreValueConstantGlobalAlias Global Aliases
1699 *
1700 * This group contains function that operate on global alias values.
1701 *
1702 * @see llvm::GlobalAlias
1703 *
1704 * @{
1705 */
Chris Lattner3d1f5522008-12-17 21:39:50 +00001706LLVMValueRef LLVMAddAlias(LLVMModuleRef M, LLVMTypeRef Ty, LLVMValueRef Aliasee,
1707 const char *Name);
1708
Gregory Szorc34c863a2012-03-21 03:54:29 +00001709/**
1710 * @}
1711 */
1712
1713/**
1714 * @defgroup LLVMCCoreValueFunction Function values
1715 *
1716 * Functions in this group operate on LLVMValueRef instances that
1717 * correspond to llvm::Function instances.
1718 *
1719 * @see llvm::Function
1720 *
1721 * @{
1722 */
1723
1724/**
1725 * Remove a function from its containing module and deletes it.
1726 *
1727 * @see llvm::Function::eraseFromParent()
1728 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00001729void LLVMDeleteFunction(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001730
1731/**
1732 * Obtain the ID number from a function instance.
1733 *
1734 * @see llvm::Function::getIntrinsicID()
1735 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00001736unsigned LLVMGetIntrinsicID(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001737
1738/**
1739 * Obtain the calling function of a function.
1740 *
1741 * The returned value corresponds to the LLVMCallConv enumeration.
1742 *
1743 * @see llvm::Function::getCallingConv()
1744 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00001745unsigned LLVMGetFunctionCallConv(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001746
1747/**
1748 * Set the calling convention of a function.
1749 *
1750 * @see llvm::Function::setCallingConv()
1751 *
1752 * @param Fn Function to operate on
1753 * @param CC LLVMCallConv to set calling convention to
1754 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00001755void LLVMSetFunctionCallConv(LLVMValueRef Fn, unsigned CC);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001756
1757/**
1758 * Obtain the name of the garbage collector to use during code
1759 * generation.
1760 *
1761 * @see llvm::Function::getGC()
1762 */
Gordon Henriksend930f912008-08-17 18:44:35 +00001763const char *LLVMGetGC(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001764
1765/**
1766 * Define the garbage collector to use during code generation.
1767 *
1768 * @see llvm::Function::setGC()
1769 */
Gordon Henriksend930f912008-08-17 18:44:35 +00001770void LLVMSetGC(LLVMValueRef Fn, const char *Name);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001771
1772/**
1773 * Add an attribute to a function.
1774 *
1775 * @see llvm::Function::addAttribute()
1776 */
Duncan Sands7374a012009-05-06 12:21:17 +00001777void LLVMAddFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001778
1779/**
Tom Stellarde8f35e12013-04-16 23:12:43 +00001780 * Add a target-dependent attribute to a fuction
1781 * @see llvm::AttrBuilder::addAttribute()
1782 */
1783void LLVMAddTargetDependentFunctionAttr(LLVMValueRef Fn, const char *A,
1784 const char *V);
1785
1786/**
Gregory Szorc34c863a2012-03-21 03:54:29 +00001787 * Obtain an attribute from a function.
1788 *
1789 * @see llvm::Function::getAttributes()
1790 */
Chris Lattner40cf28d2009-10-12 04:01:02 +00001791LLVMAttribute LLVMGetFunctionAttr(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001792
1793/**
1794 * Remove an attribute from a function.
1795 */
Duncan Sands7374a012009-05-06 12:21:17 +00001796void LLVMRemoveFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00001797
Gregory Szorc34c863a2012-03-21 03:54:29 +00001798/**
1799 * @defgroup LLVMCCoreValueFunctionParameters Function Parameters
1800 *
1801 * Functions in this group relate to arguments/parameters on functions.
1802 *
1803 * Functions in this group expect LLVMValueRef instances that correspond
1804 * to llvm::Function instances.
1805 *
1806 * @{
1807 */
1808
1809/**
1810 * Obtain the number of parameters in a function.
1811 *
1812 * @see llvm::Function::arg_size()
1813 */
Gordon Henriksen265f7802008-03-19 01:11:35 +00001814unsigned LLVMCountParams(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001815
1816/**
1817 * Obtain the parameters in a function.
1818 *
1819 * The takes a pointer to a pre-allocated array of LLVMValueRef that is
1820 * at least LLVMCountParams() long. This array will be filled with
1821 * LLVMValueRef instances which correspond to the parameters the
1822 * function receives. Each LLVMValueRef corresponds to a llvm::Argument
1823 * instance.
1824 *
1825 * @see llvm::Function::arg_begin()
1826 */
Gordon Henriksen265f7802008-03-19 01:11:35 +00001827void LLVMGetParams(LLVMValueRef Fn, LLVMValueRef *Params);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001828
1829/**
1830 * Obtain the parameter at the specified index.
1831 *
1832 * Parameters are indexed from 0.
1833 *
1834 * @see llvm::Function::arg_begin()
1835 */
Gordon Henriksen265f7802008-03-19 01:11:35 +00001836LLVMValueRef LLVMGetParam(LLVMValueRef Fn, unsigned Index);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001837
1838/**
1839 * Obtain the function to which this argument belongs.
1840 *
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +00001841 * Unlike other functions in this group, this one takes an LLVMValueRef
Gregory Szorc34c863a2012-03-21 03:54:29 +00001842 * that corresponds to a llvm::Attribute.
1843 *
1844 * The returned LLVMValueRef is the llvm::Function to which this
1845 * argument belongs.
1846 */
Gordon Henriksen265f7802008-03-19 01:11:35 +00001847LLVMValueRef LLVMGetParamParent(LLVMValueRef Inst);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001848
1849/**
1850 * Obtain the first parameter to a function.
1851 *
1852 * @see llvm::Function::arg_begin()
1853 */
Gordon Henriksen07a45f42008-03-23 22:21:29 +00001854LLVMValueRef LLVMGetFirstParam(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001855
1856/**
1857 * Obtain the last parameter to a function.
1858 *
1859 * @see llvm::Function::arg_end()
1860 */
Gordon Henriksen07a45f42008-03-23 22:21:29 +00001861LLVMValueRef LLVMGetLastParam(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001862
1863/**
1864 * Obtain the next parameter to a function.
1865 *
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +00001866 * This takes an LLVMValueRef obtained from LLVMGetFirstParam() (which is
Gregory Szorc34c863a2012-03-21 03:54:29 +00001867 * actually a wrapped iterator) and obtains the next parameter from the
1868 * underlying iterator.
1869 */
Gordon Henriksen07a45f42008-03-23 22:21:29 +00001870LLVMValueRef LLVMGetNextParam(LLVMValueRef Arg);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001871
1872/**
1873 * Obtain the previous parameter to a function.
1874 *
1875 * This is the opposite of LLVMGetNextParam().
1876 */
Gordon Henriksen07a45f42008-03-23 22:21:29 +00001877LLVMValueRef LLVMGetPreviousParam(LLVMValueRef Arg);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001878
1879/**
1880 * Add an attribute to a function argument.
1881 *
1882 * @see llvm::Argument::addAttr()
1883 */
Devang Patel4c758ea2008-09-25 21:00:45 +00001884void LLVMAddAttribute(LLVMValueRef Arg, LLVMAttribute PA);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001885
1886/**
1887 * Remove an attribute from a function argument.
1888 *
1889 * @see llvm::Argument::removeAttr()
1890 */
Devang Patel4c758ea2008-09-25 21:00:45 +00001891void LLVMRemoveAttribute(LLVMValueRef Arg, LLVMAttribute PA);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001892
1893/**
1894 * Get an attribute from a function argument.
1895 */
Chris Lattner40cf28d2009-10-12 04:01:02 +00001896LLVMAttribute LLVMGetAttribute(LLVMValueRef Arg);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001897
1898/**
1899 * Set the alignment for a function parameter.
1900 *
1901 * @see llvm::Argument::addAttr()
Bill Wendling50d27842012-10-15 20:35:56 +00001902 * @see llvm::AttrBuilder::addAlignmentAttr()
Gregory Szorc34c863a2012-03-21 03:54:29 +00001903 */
Gordon Henriksen2d9cc212008-04-28 17:37:06 +00001904void LLVMSetParamAlignment(LLVMValueRef Arg, unsigned align);
Gordon Henriksen265f7802008-03-19 01:11:35 +00001905
Gregory Szorc34c863a2012-03-21 03:54:29 +00001906/**
1907 * @}
1908 */
1909
1910/**
1911 * @}
1912 */
1913
1914/**
Gregory Szorc52d26602012-03-21 07:28:27 +00001915 * @}
1916 */
1917
1918/**
1919 * @}
1920 */
1921
1922/**
1923 * @defgroup LLVMCCoreValueMetadata Metadata
1924 *
1925 * @{
1926 */
1927
1928/**
1929 * Obtain a MDString value from a context.
1930 *
1931 * The returned instance corresponds to the llvm::MDString class.
1932 *
1933 * The instance is specified by string data of a specified length. The
1934 * string content is copied, so the backing memory can be freed after
1935 * this function returns.
1936 */
1937LLVMValueRef LLVMMDStringInContext(LLVMContextRef C, const char *Str,
1938 unsigned SLen);
1939
1940/**
1941 * Obtain a MDString value from the global context.
1942 */
1943LLVMValueRef LLVMMDString(const char *Str, unsigned SLen);
1944
1945/**
1946 * Obtain a MDNode value from a context.
1947 *
1948 * The returned value corresponds to the llvm::MDNode class.
1949 */
1950LLVMValueRef LLVMMDNodeInContext(LLVMContextRef C, LLVMValueRef *Vals,
1951 unsigned Count);
1952
1953/**
1954 * Obtain a MDNode value from the global context.
1955 */
1956LLVMValueRef LLVMMDNode(LLVMValueRef *Vals, unsigned Count);
1957
1958/**
1959 * Obtain the underlying string from a MDString value.
1960 *
1961 * @param V Instance to obtain string from.
1962 * @param Len Memory address which will hold length of returned string.
1963 * @return String data in MDString.
1964 */
1965const char *LLVMGetMDString(LLVMValueRef V, unsigned* Len);
1966
1967/**
Duncan Sands12ccbe72012-09-19 20:29:39 +00001968 * Obtain the number of operands from an MDNode value.
1969 *
1970 * @param V MDNode to get number of operands from.
1971 * @return Number of operands of the MDNode.
1972 */
1973unsigned LLVMGetMDNodeNumOperands(LLVMValueRef V);
1974
1975/**
1976 * Obtain the given MDNode's operands.
1977 *
1978 * The passed LLVMValueRef pointer should point to enough memory to hold all of
1979 * the operands of the given MDNode (see LLVMGetMDNodeNumOperands) as
1980 * LLVMValueRefs. This memory will be populated with the LLVMValueRefs of the
1981 * MDNode's operands.
1982 *
1983 * @param V MDNode to get the operands from.
1984 * @param Dest Destination array for operands.
1985 */
1986void LLVMGetMDNodeOperands(LLVMValueRef V, LLVMValueRef *Dest);
1987
1988/**
Gregory Szorc52d26602012-03-21 07:28:27 +00001989 * @}
1990 */
1991
1992/**
Gregory Szorc34c863a2012-03-21 03:54:29 +00001993 * @defgroup LLVMCCoreValueBasicBlock Basic Block
1994 *
1995 * A basic block represents a single entry single exit section of code.
1996 * Basic blocks contain a list of instructions which form the body of
1997 * the block.
1998 *
1999 * Basic blocks belong to functions. They have the type of label.
2000 *
2001 * Basic blocks are themselves values. However, the C API models them as
2002 * LLVMBasicBlockRef.
2003 *
2004 * @see llvm::BasicBlock
2005 *
2006 * @{
2007 */
2008
2009/**
2010 * Convert a basic block instance to a value type.
2011 */
Gordon Henriksen07a45f42008-03-23 22:21:29 +00002012LLVMValueRef LLVMBasicBlockAsValue(LLVMBasicBlockRef BB);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002013
2014/**
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +00002015 * Determine whether an LLVMValueRef is itself a basic block.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002016 */
Chris Lattner25963c62010-01-09 22:27:07 +00002017LLVMBool LLVMValueIsBasicBlock(LLVMValueRef Val);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002018
2019/**
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +00002020 * Convert an LLVMValueRef to an LLVMBasicBlockRef instance.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002021 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002022LLVMBasicBlockRef LLVMValueAsBasicBlock(LLVMValueRef Val);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002023
2024/**
2025 * Obtain the function to which a basic block belongs.
2026 *
2027 * @see llvm::BasicBlock::getParent()
2028 */
Gordon Henriksen07a45f42008-03-23 22:21:29 +00002029LLVMValueRef LLVMGetBasicBlockParent(LLVMBasicBlockRef BB);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002030
2031/**
2032 * Obtain the terminator instruction for a basic block.
2033 *
2034 * If the basic block does not have a terminator (it is not well-formed
2035 * if it doesn't), then NULL is returned.
2036 *
2037 * The returned LLVMValueRef corresponds to a llvm::TerminatorInst.
2038 *
2039 * @see llvm::BasicBlock::getTerminator()
2040 */
Nate Begeman43c322b2011-08-23 20:27:46 +00002041LLVMValueRef LLVMGetBasicBlockTerminator(LLVMBasicBlockRef BB);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002042
2043/**
2044 * Obtain the number of basic blocks in a function.
2045 *
2046 * @param Fn Function value to operate on.
2047 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002048unsigned LLVMCountBasicBlocks(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002049
2050/**
2051 * Obtain all of the basic blocks in a function.
2052 *
2053 * This operates on a function value. The BasicBlocks parameter is a
2054 * pointer to a pre-allocated array of LLVMBasicBlockRef of at least
2055 * LLVMCountBasicBlocks() in length. This array is populated with
2056 * LLVMBasicBlockRef instances.
2057 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002058void LLVMGetBasicBlocks(LLVMValueRef Fn, LLVMBasicBlockRef *BasicBlocks);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002059
2060/**
2061 * Obtain the first basic block in a function.
2062 *
2063 * The returned basic block can be used as an iterator. You will likely
2064 * eventually call into LLVMGetNextBasicBlock() with it.
2065 *
2066 * @see llvm::Function::begin()
2067 */
Gordon Henriksen054817c2008-03-19 03:47:18 +00002068LLVMBasicBlockRef LLVMGetFirstBasicBlock(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002069
2070/**
2071 * Obtain the last basic block in a function.
2072 *
2073 * @see llvm::Function::end()
2074 */
Gordon Henriksen054817c2008-03-19 03:47:18 +00002075LLVMBasicBlockRef LLVMGetLastBasicBlock(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002076
2077/**
2078 * Advance a basic block iterator.
2079 */
Gordon Henriksen054817c2008-03-19 03:47:18 +00002080LLVMBasicBlockRef LLVMGetNextBasicBlock(LLVMBasicBlockRef BB);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002081
2082/**
2083 * Go backwards in a basic block iterator.
2084 */
Gordon Henriksen054817c2008-03-19 03:47:18 +00002085LLVMBasicBlockRef LLVMGetPreviousBasicBlock(LLVMBasicBlockRef BB);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002086
2087/**
2088 * Obtain the basic block that corresponds to the entry point of a
2089 * function.
2090 *
2091 * @see llvm::Function::getEntryBlock()
2092 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002093LLVMBasicBlockRef LLVMGetEntryBasicBlock(LLVMValueRef Fn);
Erick Tryzelaar262332f2009-08-14 00:01:31 +00002094
Gregory Szorc34c863a2012-03-21 03:54:29 +00002095/**
2096 * Append a basic block to the end of a function.
2097 *
2098 * @see llvm::BasicBlock::Create()
2099 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +00002100LLVMBasicBlockRef LLVMAppendBasicBlockInContext(LLVMContextRef C,
2101 LLVMValueRef Fn,
2102 const char *Name);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002103
2104/**
2105 * Append a basic block to the end of a function using the global
2106 * context.
2107 *
2108 * @see llvm::BasicBlock::Create()
2109 */
2110LLVMBasicBlockRef LLVMAppendBasicBlock(LLVMValueRef Fn, const char *Name);
2111
2112/**
2113 * Insert a basic block in a function before another basic block.
2114 *
2115 * The function to add to is determined by the function of the
2116 * passed basic block.
2117 *
2118 * @see llvm::BasicBlock::Create()
2119 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +00002120LLVMBasicBlockRef LLVMInsertBasicBlockInContext(LLVMContextRef C,
2121 LLVMBasicBlockRef BB,
2122 const char *Name);
2123
Gregory Szorc34c863a2012-03-21 03:54:29 +00002124/**
2125 * Insert a basic block in a function using the global context.
2126 *
2127 * @see llvm::BasicBlock::Create()
2128 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002129LLVMBasicBlockRef LLVMInsertBasicBlock(LLVMBasicBlockRef InsertBeforeBB,
2130 const char *Name);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002131
2132/**
2133 * Remove a basic block from a function and delete it.
2134 *
2135 * This deletes the basic block from its containing function and deletes
2136 * the basic block itself.
2137 *
2138 * @see llvm::BasicBlock::eraseFromParent()
2139 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002140void LLVMDeleteBasicBlock(LLVMBasicBlockRef BB);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002141
2142/**
2143 * Remove a basic block from a function.
2144 *
2145 * This deletes the basic block from its containing function but keep
2146 * the basic block alive.
2147 *
2148 * @see llvm::BasicBlock::removeFromParent()
2149 */
Nate Begeman43c322b2011-08-23 20:27:46 +00002150void LLVMRemoveBasicBlockFromParent(LLVMBasicBlockRef BB);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002151
Gregory Szorc34c863a2012-03-21 03:54:29 +00002152/**
2153 * Move a basic block to before another one.
2154 *
2155 * @see llvm::BasicBlock::moveBefore()
2156 */
Duncan Sandsb1d61aa2010-07-19 15:31:07 +00002157void LLVMMoveBasicBlockBefore(LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002158
2159/**
2160 * Move a basic block to after another one.
2161 *
2162 * @see llvm::BasicBlock::moveAfter()
2163 */
Duncan Sandsb1d61aa2010-07-19 15:31:07 +00002164void LLVMMoveBasicBlockAfter(LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos);
2165
Gregory Szorc34c863a2012-03-21 03:54:29 +00002166/**
2167 * Obtain the first instruction in a basic block.
2168 *
2169 * The returned LLVMValueRef corresponds to a llvm::Instruction
2170 * instance.
2171 */
Gordon Henriksen054817c2008-03-19 03:47:18 +00002172LLVMValueRef LLVMGetFirstInstruction(LLVMBasicBlockRef BB);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002173
2174/**
2175 * Obtain the last instruction in a basic block.
2176 *
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +00002177 * The returned LLVMValueRef corresponds to an LLVM:Instruction.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002178 */
Gordon Henriksen054817c2008-03-19 03:47:18 +00002179LLVMValueRef LLVMGetLastInstruction(LLVMBasicBlockRef BB);
Nate Begeman43c322b2011-08-23 20:27:46 +00002180
Gregory Szorc34c863a2012-03-21 03:54:29 +00002181/**
2182 * @}
2183 */
2184
2185/**
2186 * @defgroup LLVMCCoreValueInstruction Instructions
2187 *
2188 * Functions in this group relate to the inspection and manipulation of
2189 * individual instructions.
2190 *
2191 * In the C++ API, an instruction is modeled by llvm::Instruction. This
2192 * class has a large number of descendents. llvm::Instruction is a
2193 * llvm::Value and in the C API, instructions are modeled by
2194 * LLVMValueRef.
2195 *
2196 * This group also contains sub-groups which operate on specific
2197 * llvm::Instruction types, e.g. llvm::CallInst.
2198 *
2199 * @{
2200 */
2201
2202/**
2203 * Determine whether an instruction has any metadata attached.
2204 */
2205int LLVMHasMetadata(LLVMValueRef Val);
2206
2207/**
2208 * Return metadata associated with an instruction value.
2209 */
2210LLVMValueRef LLVMGetMetadata(LLVMValueRef Val, unsigned KindID);
2211
2212/**
2213 * Set metadata associated with an instruction value.
2214 */
2215void LLVMSetMetadata(LLVMValueRef Val, unsigned KindID, LLVMValueRef Node);
2216
2217/**
2218 * Obtain the basic block to which an instruction belongs.
2219 *
2220 * @see llvm::Instruction::getParent()
2221 */
Nate Begeman43c322b2011-08-23 20:27:46 +00002222LLVMBasicBlockRef LLVMGetInstructionParent(LLVMValueRef Inst);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002223
2224/**
2225 * Obtain the instruction that occurs after the one specified.
2226 *
2227 * The next instruction will be from the same basic block.
2228 *
2229 * If this is the last instruction in a basic block, NULL will be
2230 * returned.
2231 */
Gordon Henriksen054817c2008-03-19 03:47:18 +00002232LLVMValueRef LLVMGetNextInstruction(LLVMValueRef Inst);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002233
2234/**
Benjamin Kramerbde91762012-06-02 10:20:22 +00002235 * Obtain the instruction that occurred before this one.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002236 *
2237 * If the instruction is the first instruction in a basic block, NULL
2238 * will be returned.
2239 */
Gordon Henriksen054817c2008-03-19 03:47:18 +00002240LLVMValueRef LLVMGetPreviousInstruction(LLVMValueRef Inst);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002241
2242/**
2243 * Remove and delete an instruction.
2244 *
2245 * The instruction specified is removed from its containing building
2246 * block and then deleted.
2247 *
2248 * @see llvm::Instruction::eraseFromParent()
2249 */
Devang Pateldbebc6f2011-10-03 20:59:18 +00002250void LLVMInstructionEraseFromParent(LLVMValueRef Inst);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002251
2252/**
2253 * Obtain the code opcode for an individual instruction.
2254 *
2255 * @see llvm::Instruction::getOpCode()
2256 */
Torok Edwinab6158e2011-10-14 20:37:49 +00002257LLVMOpcode LLVMGetInstructionOpcode(LLVMValueRef Inst);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002258
2259/**
2260 * Obtain the predicate of an instruction.
2261 *
2262 * This is only valid for instructions that correspond to llvm::ICmpInst
2263 * or llvm::ConstantExpr whose opcode is llvm::Instruction::ICmp.
2264 *
2265 * @see llvm::ICmpInst::getPredicate()
2266 */
Torok Edwin60c40de2011-10-06 12:13:20 +00002267LLVMIntPredicate LLVMGetICmpPredicate(LLVMValueRef Inst);
Gordon Henriksen265f7802008-03-19 01:11:35 +00002268
Gregory Szorc34c863a2012-03-21 03:54:29 +00002269/**
2270 * @defgroup LLVMCCoreValueInstructionCall Call Sites and Invocations
2271 *
2272 * Functions in this group apply to instructions that refer to call
2273 * sites and invocations. These correspond to C++ types in the
2274 * llvm::CallInst class tree.
2275 *
2276 * @{
2277 */
2278
2279/**
2280 * Set the calling convention for a call instruction.
2281 *
2282 * This expects an LLVMValueRef that corresponds to a llvm::CallInst or
2283 * llvm::InvokeInst.
2284 *
2285 * @see llvm::CallInst::setCallingConv()
2286 * @see llvm::InvokeInst::setCallingConv()
2287 */
Gordon Henriksen1158c532007-12-29 20:45:00 +00002288void LLVMSetInstructionCallConv(LLVMValueRef Instr, unsigned CC);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002289
2290/**
2291 * Obtain the calling convention for a call instruction.
2292 *
2293 * This is the opposite of LLVMSetInstructionCallConv(). Reads its
2294 * usage.
2295 *
2296 * @see LLVMSetInstructionCallConv()
2297 */
Gordon Henriksen1158c532007-12-29 20:45:00 +00002298unsigned LLVMGetInstructionCallConv(LLVMValueRef Instr);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002299
2300
Devang Patel4c758ea2008-09-25 21:00:45 +00002301void LLVMAddInstrAttribute(LLVMValueRef Instr, unsigned index, LLVMAttribute);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002302void LLVMRemoveInstrAttribute(LLVMValueRef Instr, unsigned index,
Devang Patel4c758ea2008-09-25 21:00:45 +00002303 LLVMAttribute);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002304void LLVMSetInstrParamAlignment(LLVMValueRef Instr, unsigned index,
Gordon Henriksen2d9cc212008-04-28 17:37:06 +00002305 unsigned align);
Gordon Henriksen1158c532007-12-29 20:45:00 +00002306
Gregory Szorc34c863a2012-03-21 03:54:29 +00002307/**
2308 * Obtain whether a call instruction is a tail call.
2309 *
2310 * This only works on llvm::CallInst instructions.
2311 *
2312 * @see llvm::CallInst::isTailCall()
2313 */
Chris Lattner25963c62010-01-09 22:27:07 +00002314LLVMBool LLVMIsTailCall(LLVMValueRef CallInst);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002315
2316/**
2317 * Set whether a call instruction is a tail call.
2318 *
2319 * This only works on llvm::CallInst instructions.
2320 *
2321 * @see llvm::CallInst::setTailCall()
2322 */
Chris Lattner25963c62010-01-09 22:27:07 +00002323void LLVMSetTailCall(LLVMValueRef CallInst, LLVMBool IsTailCall);
Gordon Henrikseneeb65372008-08-30 16:34:54 +00002324
Gregory Szorc34c863a2012-03-21 03:54:29 +00002325/**
2326 * @}
2327 */
2328
2329/**
2330 * Obtain the default destination basic block of a switch instruction.
2331 *
2332 * This only works on llvm::SwitchInst instructions.
2333 *
2334 * @see llvm::SwitchInst::getDefaultDest()
2335 */
Nate Begeman43c322b2011-08-23 20:27:46 +00002336LLVMBasicBlockRef LLVMGetSwitchDefaultDest(LLVMValueRef SwitchInstr);
2337
Gregory Szorc34c863a2012-03-21 03:54:29 +00002338/**
2339 * @defgroup LLVMCCoreValueInstructionPHINode PHI Nodes
2340 *
2341 * Functions in this group only apply to instructions that map to
2342 * llvm::PHINode instances.
2343 *
2344 * @{
2345 */
2346
2347/**
2348 * Add an incoming value to the end of a PHI list.
2349 */
Gordon Henriksen44dd8fb2007-10-08 18:14:39 +00002350void LLVMAddIncoming(LLVMValueRef PhiNode, LLVMValueRef *IncomingValues,
2351 LLVMBasicBlockRef *IncomingBlocks, unsigned Count);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002352
2353/**
2354 * Obtain the number of incoming basic blocks to a PHI node.
2355 */
Gordon Henriksen44dd8fb2007-10-08 18:14:39 +00002356unsigned LLVMCountIncoming(LLVMValueRef PhiNode);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002357
2358/**
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +00002359 * Obtain an incoming value to a PHI node as an LLVMValueRef.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002360 */
Gordon Henriksen44dd8fb2007-10-08 18:14:39 +00002361LLVMValueRef LLVMGetIncomingValue(LLVMValueRef PhiNode, unsigned Index);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002362
2363/**
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +00002364 * Obtain an incoming value to a PHI node as an LLVMBasicBlockRef.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002365 */
Gordon Henriksen44dd8fb2007-10-08 18:14:39 +00002366LLVMBasicBlockRef LLVMGetIncomingBlock(LLVMValueRef PhiNode, unsigned Index);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002367
Gregory Szorc34c863a2012-03-21 03:54:29 +00002368/**
2369 * @}
2370 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002371
Gregory Szorc34c863a2012-03-21 03:54:29 +00002372/**
2373 * @}
2374 */
2375
2376/**
2377 * @}
2378 */
2379
2380/**
2381 * @defgroup LLVMCCoreInstructionBuilder Instruction Builders
2382 *
2383 * An instruction builder represents a point within a basic block and is
2384 * the exclusive means of building instructions using the C interface.
2385 *
2386 * @{
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002387 */
2388
Erick Tryzelaar262332f2009-08-14 00:01:31 +00002389LLVMBuilderRef LLVMCreateBuilderInContext(LLVMContextRef C);
Gordon Henriksena735a9c2008-05-04 12:55:34 +00002390LLVMBuilderRef LLVMCreateBuilder(void);
Gordon Henriksen054817c2008-03-19 03:47:18 +00002391void LLVMPositionBuilder(LLVMBuilderRef Builder, LLVMBasicBlockRef Block,
2392 LLVMValueRef Instr);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002393void LLVMPositionBuilderBefore(LLVMBuilderRef Builder, LLVMValueRef Instr);
2394void LLVMPositionBuilderAtEnd(LLVMBuilderRef Builder, LLVMBasicBlockRef Block);
Gordon Henriksen265f7802008-03-19 01:11:35 +00002395LLVMBasicBlockRef LLVMGetInsertBlock(LLVMBuilderRef Builder);
Chris Lattner3d1f5522008-12-17 21:39:50 +00002396void LLVMClearInsertionPosition(LLVMBuilderRef Builder);
2397void LLVMInsertIntoBuilder(LLVMBuilderRef Builder, LLVMValueRef Instr);
Erick Tryzelaar9813bea2009-08-16 02:20:57 +00002398void LLVMInsertIntoBuilderWithName(LLVMBuilderRef Builder, LLVMValueRef Instr,
2399 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002400void LLVMDisposeBuilder(LLVMBuilderRef Builder);
2401
Erick Tryzelaard8531fa2010-02-28 09:45:59 +00002402/* Metadata */
2403void LLVMSetCurrentDebugLocation(LLVMBuilderRef Builder, LLVMValueRef L);
2404LLVMValueRef LLVMGetCurrentDebugLocation(LLVMBuilderRef Builder);
2405void LLVMSetInstDebugLocation(LLVMBuilderRef Builder, LLVMValueRef Inst);
2406
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002407/* Terminators */
2408LLVMValueRef LLVMBuildRetVoid(LLVMBuilderRef);
2409LLVMValueRef LLVMBuildRet(LLVMBuilderRef, LLVMValueRef V);
Erick Tryzelaarfd529d72009-08-19 08:36:49 +00002410LLVMValueRef LLVMBuildAggregateRet(LLVMBuilderRef, LLVMValueRef *RetVals,
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002411 unsigned N);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002412LLVMValueRef LLVMBuildBr(LLVMBuilderRef, LLVMBasicBlockRef Dest);
2413LLVMValueRef LLVMBuildCondBr(LLVMBuilderRef, LLVMValueRef If,
2414 LLVMBasicBlockRef Then, LLVMBasicBlockRef Else);
2415LLVMValueRef LLVMBuildSwitch(LLVMBuilderRef, LLVMValueRef V,
2416 LLVMBasicBlockRef Else, unsigned NumCases);
Erick Tryzelaar0fb26ef2010-02-28 09:46:06 +00002417LLVMValueRef LLVMBuildIndirectBr(LLVMBuilderRef B, LLVMValueRef Addr,
2418 unsigned NumDests);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002419LLVMValueRef LLVMBuildInvoke(LLVMBuilderRef, LLVMValueRef Fn,
2420 LLVMValueRef *Args, unsigned NumArgs,
2421 LLVMBasicBlockRef Then, LLVMBasicBlockRef Catch,
2422 const char *Name);
Benjamin Kramer5a6568832011-08-19 01:36:54 +00002423LLVMValueRef LLVMBuildLandingPad(LLVMBuilderRef B, LLVMTypeRef Ty,
2424 LLVMValueRef PersFn, unsigned NumClauses,
2425 const char *Name);
Bill Wendlingf891bf82011-07-31 06:30:59 +00002426LLVMValueRef LLVMBuildResume(LLVMBuilderRef B, LLVMValueRef Exn);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002427LLVMValueRef LLVMBuildUnreachable(LLVMBuilderRef);
2428
Gordon Henriksen097102c2008-01-01 05:50:53 +00002429/* Add a case to the switch instruction */
2430void LLVMAddCase(LLVMValueRef Switch, LLVMValueRef OnVal,
2431 LLVMBasicBlockRef Dest);
2432
Erick Tryzelaar0fb26ef2010-02-28 09:46:06 +00002433/* Add a destination to the indirectbr instruction */
2434void LLVMAddDestination(LLVMValueRef IndirectBr, LLVMBasicBlockRef Dest);
2435
Bill Wendlingfae14752011-08-12 20:24:12 +00002436/* Add a catch or filter clause to the landingpad instruction */
2437void LLVMAddClause(LLVMValueRef LandingPad, LLVMValueRef ClauseVal);
2438
2439/* Set the 'cleanup' flag in the landingpad instruction */
2440void LLVMSetCleanup(LLVMValueRef LandingPad, LLVMBool Val);
2441
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002442/* Arithmetic */
2443LLVMValueRef LLVMBuildAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2444 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002445LLVMValueRef LLVMBuildNSWAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2446 const char *Name);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +00002447LLVMValueRef LLVMBuildNUWAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2448 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002449LLVMValueRef LLVMBuildFAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2450 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002451LLVMValueRef LLVMBuildSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2452 const char *Name);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +00002453LLVMValueRef LLVMBuildNSWSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2454 const char *Name);
2455LLVMValueRef LLVMBuildNUWSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2456 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002457LLVMValueRef LLVMBuildFSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2458 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002459LLVMValueRef LLVMBuildMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2460 const char *Name);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +00002461LLVMValueRef LLVMBuildNSWMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2462 const char *Name);
2463LLVMValueRef LLVMBuildNUWMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2464 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002465LLVMValueRef LLVMBuildFMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2466 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002467LLVMValueRef LLVMBuildUDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2468 const char *Name);
2469LLVMValueRef LLVMBuildSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2470 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002471LLVMValueRef LLVMBuildExactSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2472 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002473LLVMValueRef LLVMBuildFDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2474 const char *Name);
2475LLVMValueRef LLVMBuildURem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2476 const char *Name);
2477LLVMValueRef LLVMBuildSRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2478 const char *Name);
2479LLVMValueRef LLVMBuildFRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2480 const char *Name);
2481LLVMValueRef LLVMBuildShl(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2482 const char *Name);
2483LLVMValueRef LLVMBuildLShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2484 const char *Name);
2485LLVMValueRef LLVMBuildAShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2486 const char *Name);
2487LLVMValueRef LLVMBuildAnd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2488 const char *Name);
2489LLVMValueRef LLVMBuildOr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2490 const char *Name);
2491LLVMValueRef LLVMBuildXor(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2492 const char *Name);
Erick Tryzelaar31831792010-02-28 05:51:27 +00002493LLVMValueRef LLVMBuildBinOp(LLVMBuilderRef B, LLVMOpcode Op,
2494 LLVMValueRef LHS, LLVMValueRef RHS,
2495 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002496LLVMValueRef LLVMBuildNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +00002497LLVMValueRef LLVMBuildNSWNeg(LLVMBuilderRef B, LLVMValueRef V,
2498 const char *Name);
2499LLVMValueRef LLVMBuildNUWNeg(LLVMBuilderRef B, LLVMValueRef V,
2500 const char *Name);
Dan Gohmanf919bd62009-09-28 21:51:41 +00002501LLVMValueRef LLVMBuildFNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002502LLVMValueRef LLVMBuildNot(LLVMBuilderRef, LLVMValueRef V, const char *Name);
2503
2504/* Memory */
2505LLVMValueRef LLVMBuildMalloc(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
2506LLVMValueRef LLVMBuildArrayMalloc(LLVMBuilderRef, LLVMTypeRef Ty,
2507 LLVMValueRef Val, const char *Name);
2508LLVMValueRef LLVMBuildAlloca(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
2509LLVMValueRef LLVMBuildArrayAlloca(LLVMBuilderRef, LLVMTypeRef Ty,
2510 LLVMValueRef Val, const char *Name);
2511LLVMValueRef LLVMBuildFree(LLVMBuilderRef, LLVMValueRef PointerVal);
2512LLVMValueRef LLVMBuildLoad(LLVMBuilderRef, LLVMValueRef PointerVal,
2513 const char *Name);
2514LLVMValueRef LLVMBuildStore(LLVMBuilderRef, LLVMValueRef Val, LLVMValueRef Ptr);
2515LLVMValueRef LLVMBuildGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
2516 LLVMValueRef *Indices, unsigned NumIndices,
2517 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002518LLVMValueRef LLVMBuildInBoundsGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
2519 LLVMValueRef *Indices, unsigned NumIndices,
2520 const char *Name);
2521LLVMValueRef LLVMBuildStructGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
2522 unsigned Idx, const char *Name);
2523LLVMValueRef LLVMBuildGlobalString(LLVMBuilderRef B, const char *Str,
2524 const char *Name);
2525LLVMValueRef LLVMBuildGlobalStringPtr(LLVMBuilderRef B, const char *Str,
2526 const char *Name);
Chris Lattner2cc6f9d2012-03-22 03:54:15 +00002527LLVMBool LLVMGetVolatile(LLVMValueRef MemoryAccessInst);
2528void LLVMSetVolatile(LLVMValueRef MemoryAccessInst, LLVMBool IsVolatile);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002529
2530/* Casts */
2531LLVMValueRef LLVMBuildTrunc(LLVMBuilderRef, LLVMValueRef Val,
2532 LLVMTypeRef DestTy, const char *Name);
2533LLVMValueRef LLVMBuildZExt(LLVMBuilderRef, LLVMValueRef Val,
2534 LLVMTypeRef DestTy, const char *Name);
2535LLVMValueRef LLVMBuildSExt(LLVMBuilderRef, LLVMValueRef Val,
2536 LLVMTypeRef DestTy, const char *Name);
2537LLVMValueRef LLVMBuildFPToUI(LLVMBuilderRef, LLVMValueRef Val,
2538 LLVMTypeRef DestTy, const char *Name);
2539LLVMValueRef LLVMBuildFPToSI(LLVMBuilderRef, LLVMValueRef Val,
2540 LLVMTypeRef DestTy, const char *Name);
2541LLVMValueRef LLVMBuildUIToFP(LLVMBuilderRef, LLVMValueRef Val,
2542 LLVMTypeRef DestTy, const char *Name);
2543LLVMValueRef LLVMBuildSIToFP(LLVMBuilderRef, LLVMValueRef Val,
2544 LLVMTypeRef DestTy, const char *Name);
2545LLVMValueRef LLVMBuildFPTrunc(LLVMBuilderRef, LLVMValueRef Val,
2546 LLVMTypeRef DestTy, const char *Name);
2547LLVMValueRef LLVMBuildFPExt(LLVMBuilderRef, LLVMValueRef Val,
2548 LLVMTypeRef DestTy, const char *Name);
2549LLVMValueRef LLVMBuildPtrToInt(LLVMBuilderRef, LLVMValueRef Val,
2550 LLVMTypeRef DestTy, const char *Name);
2551LLVMValueRef LLVMBuildIntToPtr(LLVMBuilderRef, LLVMValueRef Val,
2552 LLVMTypeRef DestTy, const char *Name);
2553LLVMValueRef LLVMBuildBitCast(LLVMBuilderRef, LLVMValueRef Val,
2554 LLVMTypeRef DestTy, const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002555LLVMValueRef LLVMBuildZExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
2556 LLVMTypeRef DestTy, const char *Name);
2557LLVMValueRef LLVMBuildSExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
2558 LLVMTypeRef DestTy, const char *Name);
2559LLVMValueRef LLVMBuildTruncOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
2560 LLVMTypeRef DestTy, const char *Name);
Erick Tryzelaar31831792010-02-28 05:51:27 +00002561LLVMValueRef LLVMBuildCast(LLVMBuilderRef B, LLVMOpcode Op, LLVMValueRef Val,
2562 LLVMTypeRef DestTy, const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002563LLVMValueRef LLVMBuildPointerCast(LLVMBuilderRef, LLVMValueRef Val,
2564 LLVMTypeRef DestTy, const char *Name);
Duncan Sands9d786d72009-11-23 10:49:03 +00002565LLVMValueRef LLVMBuildIntCast(LLVMBuilderRef, LLVMValueRef Val, /*Signed cast!*/
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002566 LLVMTypeRef DestTy, const char *Name);
2567LLVMValueRef LLVMBuildFPCast(LLVMBuilderRef, LLVMValueRef Val,
2568 LLVMTypeRef DestTy, const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002569
2570/* Comparisons */
2571LLVMValueRef LLVMBuildICmp(LLVMBuilderRef, LLVMIntPredicate Op,
2572 LLVMValueRef LHS, LLVMValueRef RHS,
2573 const char *Name);
2574LLVMValueRef LLVMBuildFCmp(LLVMBuilderRef, LLVMRealPredicate Op,
2575 LLVMValueRef LHS, LLVMValueRef RHS,
2576 const char *Name);
2577
2578/* Miscellaneous instructions */
2579LLVMValueRef LLVMBuildPhi(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
2580LLVMValueRef LLVMBuildCall(LLVMBuilderRef, LLVMValueRef Fn,
2581 LLVMValueRef *Args, unsigned NumArgs,
2582 const char *Name);
2583LLVMValueRef LLVMBuildSelect(LLVMBuilderRef, LLVMValueRef If,
2584 LLVMValueRef Then, LLVMValueRef Else,
2585 const char *Name);
2586LLVMValueRef LLVMBuildVAArg(LLVMBuilderRef, LLVMValueRef List, LLVMTypeRef Ty,
2587 const char *Name);
2588LLVMValueRef LLVMBuildExtractElement(LLVMBuilderRef, LLVMValueRef VecVal,
2589 LLVMValueRef Index, const char *Name);
2590LLVMValueRef LLVMBuildInsertElement(LLVMBuilderRef, LLVMValueRef VecVal,
2591 LLVMValueRef EltVal, LLVMValueRef Index,
2592 const char *Name);
2593LLVMValueRef LLVMBuildShuffleVector(LLVMBuilderRef, LLVMValueRef V1,
2594 LLVMValueRef V2, LLVMValueRef Mask,
2595 const char *Name);
Dan Gohmand5104a52008-11-03 22:55:43 +00002596LLVMValueRef LLVMBuildExtractValue(LLVMBuilderRef, LLVMValueRef AggVal,
2597 unsigned Index, const char *Name);
2598LLVMValueRef LLVMBuildInsertValue(LLVMBuilderRef, LLVMValueRef AggVal,
2599 LLVMValueRef EltVal, unsigned Index,
2600 const char *Name);
Gordon Henriksen76a03742007-09-18 03:18:57 +00002601
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002602LLVMValueRef LLVMBuildIsNull(LLVMBuilderRef, LLVMValueRef Val,
2603 const char *Name);
2604LLVMValueRef LLVMBuildIsNotNull(LLVMBuilderRef, LLVMValueRef Val,
2605 const char *Name);
2606LLVMValueRef LLVMBuildPtrDiff(LLVMBuilderRef, LLVMValueRef LHS,
2607 LLVMValueRef RHS, const char *Name);
Carlo Kok8c6719b2013-04-23 13:21:19 +00002608LLVMValueRef LLVMBuildAtomicRMW(LLVMBuilderRef B,LLVMAtomicRMWBinOp op,
2609 LLVMValueRef PTR, LLVMValueRef Val,
2610 LLVMAtomicOrdering ordering,
2611 LLVMBool singleThread);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002612
Gregory Szorc34c863a2012-03-21 03:54:29 +00002613/**
2614 * @}
2615 */
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00002616
Gregory Szorc34c863a2012-03-21 03:54:29 +00002617/**
2618 * @defgroup LLVMCCoreModuleProvider Module Providers
2619 *
2620 * @{
2621 */
Gordon Henriksen0a68fe22007-12-12 01:04:30 +00002622
Gregory Szorc34c863a2012-03-21 03:54:29 +00002623/**
2624 * Changes the type of M so it can be passed to FunctionPassManagers and the
Jeffrey Yasskin091217b2010-01-27 20:34:15 +00002625 * JIT. They take ModuleProviders for historical reasons.
Gordon Henriksen0a68fe22007-12-12 01:04:30 +00002626 */
2627LLVMModuleProviderRef
2628LLVMCreateModuleProviderForExistingModule(LLVMModuleRef M);
2629
Gregory Szorc34c863a2012-03-21 03:54:29 +00002630/**
2631 * Destroys the module M.
Gordon Henriksen0a68fe22007-12-12 01:04:30 +00002632 */
Jeffrey Yasskin091217b2010-01-27 20:34:15 +00002633void LLVMDisposeModuleProvider(LLVMModuleProviderRef M);
Gordon Henriksen0a68fe22007-12-12 01:04:30 +00002634
Gregory Szorc34c863a2012-03-21 03:54:29 +00002635/**
2636 * @}
2637 */
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00002638
Gregory Szorc34c863a2012-03-21 03:54:29 +00002639/**
2640 * @defgroup LLVMCCoreMemoryBuffers Memory Buffers
2641 *
2642 * @{
2643 */
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00002644
Chris Lattner25963c62010-01-09 22:27:07 +00002645LLVMBool LLVMCreateMemoryBufferWithContentsOfFile(const char *Path,
2646 LLVMMemoryBufferRef *OutMemBuf,
2647 char **OutMessage);
2648LLVMBool LLVMCreateMemoryBufferWithSTDIN(LLVMMemoryBufferRef *OutMemBuf,
2649 char **OutMessage);
Bill Wendling526276a2013-02-14 19:11:28 +00002650LLVMMemoryBufferRef LLVMCreateMemoryBufferWithMemoryRange(const char *InputData,
2651 size_t InputDataLength,
2652 const char *BufferName,
Bill Wendlingc9baa962013-02-14 19:39:14 +00002653 LLVMBool RequiresNullTerminator);
Bill Wendling526276a2013-02-14 19:11:28 +00002654LLVMMemoryBufferRef LLVMCreateMemoryBufferWithMemoryRangeCopy(const char *InputData,
2655 size_t InputDataLength,
2656 const char *BufferName);
Tom Stellard62c03202013-04-18 19:50:53 +00002657const char *LLVMGetBufferStart(LLVMMemoryBufferRef MemBuf);
Tom Stellardb7fb7242013-04-16 23:12:51 +00002658size_t LLVMGetBufferSize(LLVMMemoryBufferRef MemBuf);
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00002659void LLVMDisposeMemoryBuffer(LLVMMemoryBufferRef MemBuf);
2660
Gregory Szorc34c863a2012-03-21 03:54:29 +00002661/**
2662 * @}
2663 */
2664
2665/**
2666 * @defgroup LLVMCCorePassRegistry Pass Registry
2667 *
2668 * @{
2669 */
Owen Anderson4698c5d2010-10-07 17:55:47 +00002670
2671/** Return the global pass registry, for use with initialization functions.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002672 @see llvm::PassRegistry::getPassRegistry */
Owen Anderson4698c5d2010-10-07 17:55:47 +00002673LLVMPassRegistryRef LLVMGetGlobalPassRegistry(void);
Gordon Henriksen878114b2008-03-16 04:20:44 +00002674
Gregory Szorc34c863a2012-03-21 03:54:29 +00002675/**
2676 * @}
2677 */
2678
2679/**
2680 * @defgroup LLVMCCorePassManagers Pass Managers
2681 *
2682 * @{
2683 */
Gordon Henriksen878114b2008-03-16 04:20:44 +00002684
2685/** Constructs a new whole-module pass pipeline. This type of pipeline is
2686 suitable for link-time optimization and whole-module transformations.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002687 @see llvm::PassManager::PassManager */
Gordon Henriksena735a9c2008-05-04 12:55:34 +00002688LLVMPassManagerRef LLVMCreatePassManager(void);
Gordon Henriksen878114b2008-03-16 04:20:44 +00002689
2690/** Constructs a new function-by-function pass pipeline over the module
2691 provider. It does not take ownership of the module provider. This type of
2692 pipeline is suitable for code generation and JIT compilation tasks.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002693 @see llvm::FunctionPassManager::FunctionPassManager */
Erick Tryzelaarad0e0cb2010-03-02 23:58:54 +00002694LLVMPassManagerRef LLVMCreateFunctionPassManagerForModule(LLVMModuleRef M);
2695
2696/** Deprecated: Use LLVMCreateFunctionPassManagerForModule instead. */
Gordon Henriksen878114b2008-03-16 04:20:44 +00002697LLVMPassManagerRef LLVMCreateFunctionPassManager(LLVMModuleProviderRef MP);
2698
2699/** Initializes, executes on the provided module, and finalizes all of the
2700 passes scheduled in the pass manager. Returns 1 if any of the passes
Gregory Szorc34c863a2012-03-21 03:54:29 +00002701 modified the module, 0 otherwise.
2702 @see llvm::PassManager::run(Module&) */
Chris Lattner25963c62010-01-09 22:27:07 +00002703LLVMBool LLVMRunPassManager(LLVMPassManagerRef PM, LLVMModuleRef M);
Gordon Henriksen878114b2008-03-16 04:20:44 +00002704
2705/** Initializes all of the function passes scheduled in the function pass
2706 manager. Returns 1 if any of the passes modified the module, 0 otherwise.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002707 @see llvm::FunctionPassManager::doInitialization */
Chris Lattner25963c62010-01-09 22:27:07 +00002708LLVMBool LLVMInitializeFunctionPassManager(LLVMPassManagerRef FPM);
Gordon Henriksen878114b2008-03-16 04:20:44 +00002709
2710/** Executes all of the function passes scheduled in the function pass manager
2711 on the provided function. Returns 1 if any of the passes modified the
2712 function, false otherwise.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002713 @see llvm::FunctionPassManager::run(Function&) */
Chris Lattner25963c62010-01-09 22:27:07 +00002714LLVMBool LLVMRunFunctionPassManager(LLVMPassManagerRef FPM, LLVMValueRef F);
Gordon Henriksen878114b2008-03-16 04:20:44 +00002715
2716/** Finalizes all of the function passes scheduled in in the function pass
2717 manager. Returns 1 if any of the passes modified the module, 0 otherwise.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002718 @see llvm::FunctionPassManager::doFinalization */
Chris Lattner25963c62010-01-09 22:27:07 +00002719LLVMBool LLVMFinalizeFunctionPassManager(LLVMPassManagerRef FPM);
Gordon Henriksen878114b2008-03-16 04:20:44 +00002720
2721/** Frees the memory of a pass pipeline. For function pipelines, does not free
2722 the module provider.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002723 @see llvm::PassManagerBase::~PassManagerBase. */
Gordon Henriksen878114b2008-03-16 04:20:44 +00002724void LLVMDisposePassManager(LLVMPassManagerRef PM);
2725
Gregory Szorc34c863a2012-03-21 03:54:29 +00002726/**
2727 * @}
2728 */
2729
2730/**
Duncan Sands1cba0a82013-02-17 16:35:51 +00002731 * @defgroup LLVMCCoreThreading Threading
2732 *
2733 * Handle the structures needed to make LLVM safe for multithreading.
2734 *
2735 * @{
2736 */
2737
2738/** Allocate and initialize structures needed to make LLVM safe for
2739 multithreading. The return value indicates whether multithreaded
2740 initialization succeeded. Must be executed in isolation from all
2741 other LLVM api calls.
2742 @see llvm::llvm_start_multithreaded */
2743LLVMBool LLVMStartMultithreaded();
2744
2745/** Deallocate structures necessary to make LLVM safe for multithreading.
2746 Must be executed in isolation from all other LLVM api calls.
2747 @see llvm::llvm_stop_multithreaded */
2748void LLVMStopMultithreaded();
2749
2750/** Check whether LLVM is executing in thread-safe mode or not.
2751 @see llvm::llvm_is_multithreaded */
2752LLVMBool LLVMIsMultithreaded();
2753
2754/**
2755 * @}
2756 */
2757
2758/**
Gregory Szorc34c863a2012-03-21 03:54:29 +00002759 * @}
2760 */
2761
2762/**
2763 * @}
2764 */
Gordon Henriksen878114b2008-03-16 04:20:44 +00002765
Gordon Henriksen76a03742007-09-18 03:18:57 +00002766#ifdef __cplusplus
2767}
Evan Cheng2e254d02013-04-04 17:40:53 +00002768#endif /* !defined(__cplusplus) */
Gordon Henriksen7330acd2007-10-05 23:59:36 +00002769
Evan Cheng2e254d02013-04-04 17:40:53 +00002770#endif /* !defined(LLVM_C_CORE_H) */