blob: 69ed08dff1f85c5cacf891ab99227e27c6fb89ff [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
Chandler Carruth3c57aa42014-03-06 04:13:12 +000018#include "llvm-c/Support.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
65/* Opaque types. */
Gordon Henriksen4a4d7352007-12-30 17:46:33 +000066
67/**
Gregory Szorc34c863a2012-03-21 03:54:29 +000068 * The top-level container for all LLVM global data. See the LLVMContext class.
Owen Anderson6773d382009-07-01 16:58:40 +000069 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +000070typedef struct LLVMOpaqueContext *LLVMContextRef;
Owen Anderson6773d382009-07-01 16:58:40 +000071
72/**
Gordon Henriksen4a4d7352007-12-30 17:46:33 +000073 * The top-level container for all other LLVM Intermediate Representation (IR)
Gregory Szorc34c863a2012-03-21 03:54:29 +000074 * objects.
75 *
76 * @see llvm::Module
Gordon Henriksen4a4d7352007-12-30 17:46:33 +000077 */
Gordon Henriksen76a03742007-09-18 03:18:57 +000078typedef struct LLVMOpaqueModule *LLVMModuleRef;
Gordon Henriksen4a4d7352007-12-30 17:46:33 +000079
80/**
Gregory Szorc34c863a2012-03-21 03:54:29 +000081 * Each value in the LLVM IR has a type, an LLVMTypeRef.
82 *
83 * @see llvm::Type
Gordon Henriksen4a4d7352007-12-30 17:46:33 +000084 */
Gordon Henriksen76a03742007-09-18 03:18:57 +000085typedef struct LLVMOpaqueType *LLVMTypeRef;
Gordon Henriksen4a4d7352007-12-30 17:46:33 +000086
Gregory Szorc34c863a2012-03-21 03:54:29 +000087/**
88 * Represents an individual value in LLVM IR.
89 *
90 * This models llvm::Value.
91 */
Gordon Henriksen76a03742007-09-18 03:18:57 +000092typedef struct LLVMOpaqueValue *LLVMValueRef;
Gregory Szorc34c863a2012-03-21 03:54:29 +000093
94/**
Eli Bendersky870d0572012-08-10 18:26:20 +000095 * Represents a basic block of instructions in LLVM IR.
Gregory Szorc34c863a2012-03-21 03:54:29 +000096 *
97 * This models llvm::BasicBlock.
98 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +000099typedef struct LLVMOpaqueBasicBlock *LLVMBasicBlockRef;
Gregory Szorc34c863a2012-03-21 03:54:29 +0000100
101/**
102 * Represents an LLVM basic block builder.
103 *
104 * This models llvm::IRBuilder.
105 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000106typedef struct LLVMOpaqueBuilder *LLVMBuilderRef;
Gordon Henriksen34eb6d82007-12-19 22:30:40 +0000107
Gregory Szorc34c863a2012-03-21 03:54:29 +0000108/**
109 * Interface used to provide a module to JIT or interpreter.
110 * This is now just a synonym for llvm::Module, but we have to keep using the
111 * different type to keep binary compatibility.
Gordon Henriksen34eb6d82007-12-19 22:30:40 +0000112 */
Gordon Henriksen0a68fe22007-12-12 01:04:30 +0000113typedef struct LLVMOpaqueModuleProvider *LLVMModuleProviderRef;
Gordon Henriksen76a03742007-09-18 03:18:57 +0000114
Gregory Szorc34c863a2012-03-21 03:54:29 +0000115/** @see llvm::PassManagerBase */
Gordon Henriksen878114b2008-03-16 04:20:44 +0000116typedef struct LLVMOpaquePassManager *LLVMPassManagerRef;
117
Gregory Szorc34c863a2012-03-21 03:54:29 +0000118/** @see llvm::PassRegistry */
Owen Anderson4698c5d2010-10-07 17:55:47 +0000119typedef struct LLVMOpaquePassRegistry *LLVMPassRegistryRef;
120
Gregory Szorc34c863a2012-03-21 03:54:29 +0000121/**
122 * Used to get the users and usees of a Value.
123 *
124 * @see llvm::Use */
Erick Tryzelaar9f9857e2010-03-02 20:32:28 +0000125typedef struct LLVMOpaqueUse *LLVMUseRef;
Chris Lattner40cf28d2009-10-12 04:01:02 +0000126
Tom Stellard1580dc72014-04-16 17:45:04 +0000127
128/**
129 * @see llvm::DiagnosticInfo
130 */
131typedef struct LLVMOpaqueDiagnosticInfo *LLVMDiagnosticInfoRef;
132
Gordon Henriksen76a03742007-09-18 03:18:57 +0000133typedef enum {
Devang Patel4c758ea2008-09-25 21:00:45 +0000134 LLVMZExtAttribute = 1<<0,
135 LLVMSExtAttribute = 1<<1,
136 LLVMNoReturnAttribute = 1<<2,
137 LLVMInRegAttribute = 1<<3,
138 LLVMStructRetAttribute = 1<<4,
139 LLVMNoUnwindAttribute = 1<<5,
140 LLVMNoAliasAttribute = 1<<6,
141 LLVMByValAttribute = 1<<7,
142 LLVMNestAttribute = 1<<8,
143 LLVMReadNoneAttribute = 1<<9,
Anton Korobeynikovc8ce7b082009-07-17 18:07:26 +0000144 LLVMReadOnlyAttribute = 1<<10,
Anton Korobeynikov9750be92009-07-17 18:57:16 +0000145 LLVMNoInlineAttribute = 1<<11,
146 LLVMAlwaysInlineAttribute = 1<<12,
147 LLVMOptimizeForSizeAttribute = 1<<13,
148 LLVMStackProtectAttribute = 1<<14,
149 LLVMStackProtectReqAttribute = 1<<15,
Erick Tryzelaar8f69fea2010-03-03 23:51:25 +0000150 LLVMAlignment = 31<<16,
Anton Korobeynikov9750be92009-07-17 18:57:16 +0000151 LLVMNoCaptureAttribute = 1<<21,
152 LLVMNoRedZoneAttribute = 1<<22,
153 LLVMNoImplicitFloatAttribute = 1<<23,
Jakob Stoklund Olesen74bb06c2010-02-06 01:16:28 +0000154 LLVMNakedAttribute = 1<<24,
Erick Tryzelaar8f69fea2010-03-03 23:51:25 +0000155 LLVMInlineHintAttribute = 1<<25,
Torok Edwin1db48c02011-10-06 12:13:32 +0000156 LLVMStackAlignment = 7<<26,
157 LLVMReturnsTwice = 1 << 29,
158 LLVMUWTable = 1 << 30,
Chandler Carruth44d69d92012-01-25 07:40:15 +0000159 LLVMNonLazyBind = 1 << 31
160
Bill Wendlingd154e2832013-01-23 06:41:41 +0000161 /* FIXME: These attributes are currently not included in the C API as
Nuno Lopesdef4229972012-09-02 14:19:21 +0000162 a temporary measure until the API/ABI impact to the C API is understood
163 and the path forward agreed upon.
Bill Wendlingd154e2832013-01-23 06:41:41 +0000164 LLVMAddressSafety = 1ULL << 32,
Andrea Di Biagio377496b2013-08-23 11:53:55 +0000165 LLVMStackProtectStrongAttribute = 1ULL<<33,
166 LLVMCold = 1ULL << 34,
Reid Klecknera534a382013-12-19 02:14:12 +0000167 LLVMOptimizeNone = 1ULL << 35,
Nick Lewyckyd52b1522014-05-20 01:23:40 +0000168 LLVMInAllocaAttribute = 1ULL << 36,
Tom Roeder44cb65f2014-06-05 19:29:43 +0000169 LLVMNonNullAttribute = 1ULL << 37,
170 LLVMJumpTableAttribute = 1ULL << 38,
Hal Finkelb0407ba2014-07-18 15:51:28 +0000171 LLVMDereferenceableAttribute = 1ULL << 39,
Nuno Lopesdef4229972012-09-02 14:19:21 +0000172 */
Devang Patel4c758ea2008-09-25 21:00:45 +0000173} LLVMAttribute;
Gordon Henriksen2d9cc212008-04-28 17:37:06 +0000174
175typedef enum {
Bill Wendlingda52cec2010-02-15 20:53:17 +0000176 /* Terminator Instructions */
Chris Lattner40cf28d2009-10-12 04:01:02 +0000177 LLVMRet = 1,
178 LLVMBr = 2,
179 LLVMSwitch = 3,
Bill Wendling07d6d762010-02-15 20:50:51 +0000180 LLVMIndirectBr = 4,
181 LLVMInvoke = 5,
Bill Wendling46ffaa92011-08-02 06:20:17 +0000182 /* removed 6 due to API changes */
Bill Wendling2641d132011-07-27 21:00:28 +0000183 LLVMUnreachable = 7,
Bill Wendling07d6d762010-02-15 20:50:51 +0000184
Bill Wendlingda52cec2010-02-15 20:53:17 +0000185 /* Standard Binary Operators */
Bill Wendling2641d132011-07-27 21:00:28 +0000186 LLVMAdd = 8,
187 LLVMFAdd = 9,
188 LLVMSub = 10,
189 LLVMFSub = 11,
190 LLVMMul = 12,
191 LLVMFMul = 13,
192 LLVMUDiv = 14,
193 LLVMSDiv = 15,
194 LLVMFDiv = 16,
195 LLVMURem = 17,
196 LLVMSRem = 18,
197 LLVMFRem = 19,
Bill Wendling07d6d762010-02-15 20:50:51 +0000198
Bill Wendlingda52cec2010-02-15 20:53:17 +0000199 /* Logical Operators */
Bill Wendling2641d132011-07-27 21:00:28 +0000200 LLVMShl = 20,
201 LLVMLShr = 21,
202 LLVMAShr = 22,
203 LLVMAnd = 23,
204 LLVMOr = 24,
205 LLVMXor = 25,
Bill Wendling07d6d762010-02-15 20:50:51 +0000206
Bill Wendlingda52cec2010-02-15 20:53:17 +0000207 /* Memory Operators */
Bill Wendling2641d132011-07-27 21:00:28 +0000208 LLVMAlloca = 26,
209 LLVMLoad = 27,
210 LLVMStore = 28,
211 LLVMGetElementPtr = 29,
Bill Wendling07d6d762010-02-15 20:50:51 +0000212
Bill Wendlingda52cec2010-02-15 20:53:17 +0000213 /* Cast Operators */
Bill Wendling2641d132011-07-27 21:00:28 +0000214 LLVMTrunc = 30,
215 LLVMZExt = 31,
216 LLVMSExt = 32,
217 LLVMFPToUI = 33,
218 LLVMFPToSI = 34,
219 LLVMUIToFP = 35,
220 LLVMSIToFP = 36,
221 LLVMFPTrunc = 37,
222 LLVMFPExt = 38,
223 LLVMPtrToInt = 39,
224 LLVMIntToPtr = 40,
225 LLVMBitCast = 41,
Matt Arsenaultb03bd4d2013-11-15 01:34:59 +0000226 LLVMAddrSpaceCast = 60,
Bill Wendling07d6d762010-02-15 20:50:51 +0000227
Bill Wendlingda52cec2010-02-15 20:53:17 +0000228 /* Other Operators */
Bill Wendling2641d132011-07-27 21:00:28 +0000229 LLVMICmp = 42,
230 LLVMFCmp = 43,
231 LLVMPHI = 44,
232 LLVMCall = 45,
233 LLVMSelect = 46,
Torok Edwin05dc9d62011-10-06 12:39:34 +0000234 LLVMUserOp1 = 47,
235 LLVMUserOp2 = 48,
Bill Wendling2641d132011-07-27 21:00:28 +0000236 LLVMVAArg = 49,
237 LLVMExtractElement = 50,
238 LLVMInsertElement = 51,
239 LLVMShuffleVector = 52,
240 LLVMExtractValue = 53,
241 LLVMInsertValue = 54,
Eli Friedman4fc946c2011-07-27 18:59:19 +0000242
243 /* Atomic operators */
Bill Wendling2641d132011-07-27 21:00:28 +0000244 LLVMFence = 55,
Eli Friedmanc9a551e2011-07-28 21:48:00 +0000245 LLVMAtomicCmpXchg = 56,
Bill Wendlingf891bf82011-07-31 06:30:59 +0000246 LLVMAtomicRMW = 57,
247
248 /* Exception Handling Operators */
Bill Wendlingfae14752011-08-12 20:24:12 +0000249 LLVMResume = 58,
Bill Wendling0aef16a2012-02-06 21:44:22 +0000250 LLVMLandingPad = 59
Bill Wendling2641d132011-07-27 21:00:28 +0000251
Chris Lattner40cf28d2009-10-12 04:01:02 +0000252} LLVMOpcode;
253
254typedef enum {
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000255 LLVMVoidTypeKind, /**< type with no size */
Dan Gohman518cda42011-12-17 00:04:22 +0000256 LLVMHalfTypeKind, /**< 16 bit floating point type */
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000257 LLVMFloatTypeKind, /**< 32 bit floating point type */
258 LLVMDoubleTypeKind, /**< 64 bit floating point type */
259 LLVMX86_FP80TypeKind, /**< 80 bit floating point type (X87) */
260 LLVMFP128TypeKind, /**< 128 bit floating point type (112-bit mantissa)*/
261 LLVMPPC_FP128TypeKind, /**< 128 bit floating point type (two 64-bits) */
262 LLVMLabelTypeKind, /**< Labels */
263 LLVMIntegerTypeKind, /**< Arbitrary bit width integers */
264 LLVMFunctionTypeKind, /**< Functions */
265 LLVMStructTypeKind, /**< Structures */
266 LLVMArrayTypeKind, /**< Arrays */
267 LLVMPointerTypeKind, /**< Pointers */
Chris Lattnerdac44ec2009-07-15 22:00:31 +0000268 LLVMVectorTypeKind, /**< SIMD 'packed' format, or other vector type */
Dale Johannesenbaa5d042010-09-10 20:55:01 +0000269 LLVMMetadataTypeKind, /**< Metadata */
270 LLVMX86_MMXTypeKind /**< X86 MMX */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000271} LLVMTypeKind;
272
273typedef enum {
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000274 LLVMExternalLinkage, /**< Externally visible function */
Chris Lattner2dba0f02009-04-13 06:25:37 +0000275 LLVMAvailableExternallyLinkage,
Duncan Sands12da8ce2009-03-07 15:45:40 +0000276 LLVMLinkOnceAnyLinkage, /**< Keep one copy of function when linking (inline)*/
277 LLVMLinkOnceODRLinkage, /**< Same, but only replaced by something
278 equivalent. */
Rafael Espindola716e7402013-11-01 17:09:14 +0000279 LLVMLinkOnceODRAutoHideLinkage, /**< Obsolete */
Duncan Sands12da8ce2009-03-07 15:45:40 +0000280 LLVMWeakAnyLinkage, /**< Keep one copy of function when linking (weak) */
281 LLVMWeakODRLinkage, /**< Same, but only replaced by something
282 equivalent. */
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000283 LLVMAppendingLinkage, /**< Special purpose, only applies to global arrays */
284 LLVMInternalLinkage, /**< Rename collisions when linking (static
285 functions) */
Duncan Sands12da8ce2009-03-07 15:45:40 +0000286 LLVMPrivateLinkage, /**< Like Internal, but omit from symbol table */
Nico Rieck7157bb72014-01-14 15:22:47 +0000287 LLVMDLLImportLinkage, /**< Obsolete */
288 LLVMDLLExportLinkage, /**< Obsolete */
Duncan Sandse2881052009-03-11 08:08:06 +0000289 LLVMExternalWeakLinkage,/**< ExternalWeak linkage description */
Jeffrey Yasskin091217b2010-01-27 20:34:15 +0000290 LLVMGhostLinkage, /**< Obsolete */
Bill Wendling002b1672009-07-20 18:22:52 +0000291 LLVMCommonLinkage, /**< Tentative definitions */
Bill Wendling03bcd6e2010-07-01 21:55:59 +0000292 LLVMLinkerPrivateLinkage, /**< Like Private, but linker removes. */
Bill Wendling34bc34e2012-08-17 18:33:14 +0000293 LLVMLinkerPrivateWeakLinkage /**< Like LinkerPrivate, but is weak. */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000294} LLVMLinkage;
295
296typedef enum {
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000297 LLVMDefaultVisibility, /**< The GV is visible */
298 LLVMHiddenVisibility, /**< The GV is hidden */
299 LLVMProtectedVisibility /**< The GV is protected */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000300} LLVMVisibility;
301
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000302typedef enum {
Reid Kleckner2fae26f2014-03-05 02:34:23 +0000303 LLVMDefaultStorageClass = 0,
304 LLVMDLLImportStorageClass = 1, /**< Function to be imported from DLL. */
305 LLVMDLLExportStorageClass = 2 /**< Function to be accessible from DLL. */
306} LLVMDLLStorageClass;
307
308typedef enum {
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000309 LLVMCCallConv = 0,
310 LLVMFastCallConv = 8,
311 LLVMColdCallConv = 9,
Filip Pizlodfc9b582013-11-09 06:00:03 +0000312 LLVMWebKitJSCallConv = 12,
313 LLVMAnyRegCallConv = 13,
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000314 LLVMX86StdcallCallConv = 64,
315 LLVMX86FastcallCallConv = 65
316} LLVMCallConv;
317
318typedef enum {
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000319 LLVMIntEQ = 32, /**< equal */
320 LLVMIntNE, /**< not equal */
321 LLVMIntUGT, /**< unsigned greater than */
322 LLVMIntUGE, /**< unsigned greater or equal */
323 LLVMIntULT, /**< unsigned less than */
324 LLVMIntULE, /**< unsigned less or equal */
325 LLVMIntSGT, /**< signed greater than */
326 LLVMIntSGE, /**< signed greater or equal */
327 LLVMIntSLT, /**< signed less than */
328 LLVMIntSLE /**< signed less or equal */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000329} LLVMIntPredicate;
330
331typedef enum {
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000332 LLVMRealPredicateFalse, /**< Always false (always folded) */
333 LLVMRealOEQ, /**< True if ordered and equal */
334 LLVMRealOGT, /**< True if ordered and greater than */
335 LLVMRealOGE, /**< True if ordered and greater than or equal */
336 LLVMRealOLT, /**< True if ordered and less than */
337 LLVMRealOLE, /**< True if ordered and less than or equal */
338 LLVMRealONE, /**< True if ordered and operands are unequal */
339 LLVMRealORD, /**< True if ordered (no nans) */
340 LLVMRealUNO, /**< True if unordered: isnan(X) | isnan(Y) */
341 LLVMRealUEQ, /**< True if unordered or equal */
342 LLVMRealUGT, /**< True if unordered or greater than */
343 LLVMRealUGE, /**< True if unordered, greater than, or equal */
344 LLVMRealULT, /**< True if unordered or less than */
345 LLVMRealULE, /**< True if unordered, less than, or equal */
346 LLVMRealUNE, /**< True if unordered or not equal */
347 LLVMRealPredicateTrue /**< Always true (always folded) */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000348} LLVMRealPredicate;
349
Bill Wendlingfae14752011-08-12 20:24:12 +0000350typedef enum {
351 LLVMLandingPadCatch, /**< A catch clause */
352 LLVMLandingPadFilter /**< A filter clause */
353} LLVMLandingPadClauseTy;
354
Hans Wennborg5ff71202013-04-16 08:58:59 +0000355typedef enum {
356 LLVMNotThreadLocal = 0,
357 LLVMGeneralDynamicTLSModel,
358 LLVMLocalDynamicTLSModel,
359 LLVMInitialExecTLSModel,
360 LLVMLocalExecTLSModel
361} LLVMThreadLocalMode;
362
Carlo Kokda0ac722013-04-23 13:45:37 +0000363typedef enum {
Carlo Kok8c6719b2013-04-23 13:21:19 +0000364 LLVMAtomicOrderingNotAtomic = 0, /**< A load or store which is not atomic */
365 LLVMAtomicOrderingUnordered = 1, /**< Lowest level of atomicity, guarantees
366 somewhat sane results, lock free. */
NAKAMURA Takumia3a81352013-10-23 17:56:29 +0000367 LLVMAtomicOrderingMonotonic = 2, /**< guarantees that if you take all the
368 operations affecting a specific address,
Carlo Kok8c6719b2013-04-23 13:21:19 +0000369 a consistent ordering exists */
NAKAMURA Takumia3a81352013-10-23 17:56:29 +0000370 LLVMAtomicOrderingAcquire = 4, /**< Acquire provides a barrier of the sort
371 necessary to acquire a lock to access other
Carlo Kok8c6719b2013-04-23 13:21:19 +0000372 memory with normal loads and stores. */
NAKAMURA Takumia3a81352013-10-23 17:56:29 +0000373 LLVMAtomicOrderingRelease = 5, /**< Release is similar to Acquire, but with
374 a barrier of the sort necessary to release
Carlo Kok8c6719b2013-04-23 13:21:19 +0000375 a lock. */
NAKAMURA Takumia3a81352013-10-23 17:56:29 +0000376 LLVMAtomicOrderingAcquireRelease = 6, /**< provides both an Acquire and a
377 Release barrier (for fences and
Carlo Kok8c6719b2013-04-23 13:21:19 +0000378 operations which both read and write
379 memory). */
NAKAMURA Takumia3a81352013-10-23 17:56:29 +0000380 LLVMAtomicOrderingSequentiallyConsistent = 7 /**< provides Acquire semantics
381 for loads and Release
382 semantics for stores.
383 Additionally, it guarantees
384 that a total ordering exists
385 between all
386 SequentiallyConsistent
Carlo Kok8c6719b2013-04-23 13:21:19 +0000387 operations. */
Carlo Kokda0ac722013-04-23 13:45:37 +0000388} LLVMAtomicOrdering;
Carlo Kok8c6719b2013-04-23 13:21:19 +0000389
Carlo Kokda0ac722013-04-23 13:45:37 +0000390typedef enum {
Carlo Kok8c6719b2013-04-23 13:21:19 +0000391 LLVMAtomicRMWBinOpXchg, /**< Set the new value and return the one old */
392 LLVMAtomicRMWBinOpAdd, /**< Add a value and return the old one */
393 LLVMAtomicRMWBinOpSub, /**< Subtract a value and return the old one */
394 LLVMAtomicRMWBinOpAnd, /**< And a value and return the old one */
395 LLVMAtomicRMWBinOpNand, /**< Not-And a value and return the old one */
396 LLVMAtomicRMWBinOpOr, /**< OR a value and return the old one */
397 LLVMAtomicRMWBinOpXor, /**< Xor a value and return the old one */
398 LLVMAtomicRMWBinOpMax, /**< Sets the value if it's greater than the
NAKAMURA Takumia3a81352013-10-23 17:56:29 +0000399 original using a signed comparison and return
Carlo Kok8c6719b2013-04-23 13:21:19 +0000400 the old one */
401 LLVMAtomicRMWBinOpMin, /**< Sets the value if it's Smaller than the
NAKAMURA Takumia3a81352013-10-23 17:56:29 +0000402 original using a signed comparison and return
Carlo Kok8c6719b2013-04-23 13:21:19 +0000403 the old one */
404 LLVMAtomicRMWBinOpUMax, /**< Sets the value if it's greater than the
NAKAMURA Takumia3a81352013-10-23 17:56:29 +0000405 original using an unsigned comparison and return
Carlo Kok8c6719b2013-04-23 13:21:19 +0000406 the old one */
407 LLVMAtomicRMWBinOpUMin /**< Sets the value if it's greater than the
NAKAMURA Takumia3a81352013-10-23 17:56:29 +0000408 original using an unsigned comparison and return
Carlo Kok8c6719b2013-04-23 13:21:19 +0000409 the old one */
Carlo Kokda0ac722013-04-23 13:45:37 +0000410} LLVMAtomicRMWBinOp;
Carlo Kok8c6719b2013-04-23 13:21:19 +0000411
Tom Stellard1580dc72014-04-16 17:45:04 +0000412typedef enum {
413 LLVMDSError,
414 LLVMDSWarning,
415 LLVMDSRemark,
416 LLVMDSNote
417} LLVMDiagnosticSeverity;
418
Gregory Szorc34c863a2012-03-21 03:54:29 +0000419/**
420 * @}
421 */
422
Nick Lewycky0db26542011-05-15 07:20:34 +0000423void LLVMInitializeCore(LLVMPassRegistryRef R);
424
Duncan Sands1cba0a82013-02-17 16:35:51 +0000425/** Deallocate and destroy all ManagedStatic variables.
426 @see llvm::llvm_shutdown
427 @see ManagedStatic */
Benjamin Kramer325ec892013-10-23 16:57:34 +0000428void LLVMShutdown(void);
Duncan Sands1cba0a82013-02-17 16:35:51 +0000429
Gordon Henriksen76a03742007-09-18 03:18:57 +0000430
Gordon Henriksen34eb6d82007-12-19 22:30:40 +0000431/*===-- Error handling ----------------------------------------------------===*/
432
Filip Pizlo3fdbaff2013-05-22 02:46:43 +0000433char *LLVMCreateMessage(const char *Message);
Gordon Henriksen34eb6d82007-12-19 22:30:40 +0000434void LLVMDisposeMessage(char *Message);
435
Filip Pizloa535b142013-10-17 01:38:28 +0000436typedef void (*LLVMFatalErrorHandler)(const char *Reason);
437
438/**
439 * Install a fatal error handler. By default, if LLVM detects a fatal error, it
440 * will call exit(1). This may not be appropriate in many contexts. For example,
441 * doing exit(1) will bypass many crash reporting/tracing system tools. This
442 * function allows you to install a callback that will be invoked prior to the
443 * call to exit(1).
444 */
445void LLVMInstallFatalErrorHandler(LLVMFatalErrorHandler Handler);
446
447/**
448 * Reset the fatal error handler. This resets LLVM's fatal error handling
449 * behavior to the default.
450 */
451void LLVMResetFatalErrorHandler(void);
Gordon Henriksen34eb6d82007-12-19 22:30:40 +0000452
Gregory Szorc34c863a2012-03-21 03:54:29 +0000453/**
Filip Pizloc10ca902013-11-04 02:22:25 +0000454 * Enable LLVM's built-in stack trace code. This intercepts the OS's crash
455 * signals and prints which component of LLVM you were in at the time if the
456 * crash.
Filip Pizlo9f50ccd2013-11-03 00:29:47 +0000457 */
Filip Pizloc10ca902013-11-04 02:22:25 +0000458void LLVMEnablePrettyStackTrace(void);
Filip Pizlo9f50ccd2013-11-03 00:29:47 +0000459
460/**
Gregory Szorc34c863a2012-03-21 03:54:29 +0000461 * @defgroup LLVMCCoreContext Contexts
462 *
463 * Contexts are execution states for the core LLVM IR system.
464 *
465 * Most types are tied to a context instance. Multiple contexts can
466 * exist simultaneously. A single context is not thread safe. However,
467 * different contexts can execute on different threads simultaneously.
468 *
469 * @{
470 */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000471
Tom Stellard1580dc72014-04-16 17:45:04 +0000472typedef void (*LLVMDiagnosticHandler)(LLVMDiagnosticInfoRef, void *);
Juergen Ributzka34390c72014-05-16 02:33:15 +0000473typedef void (*LLVMYieldCallback)(LLVMContextRef, void *);
Tom Stellard1580dc72014-04-16 17:45:04 +0000474
Gregory Szorc34c863a2012-03-21 03:54:29 +0000475/**
476 * Create a new context.
477 *
478 * Every call to this function should be paired with a call to
479 * LLVMContextDispose() or the context will leak memory.
480 */
Erick Tryzelaarf34cb0c2009-08-30 23:38:06 +0000481LLVMContextRef LLVMContextCreate(void);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000482
483/**
484 * Obtain the global context instance.
485 */
Erick Tryzelaarf34cb0c2009-08-30 23:38:06 +0000486LLVMContextRef LLVMGetGlobalContext(void);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000487
488/**
Tom Stellard1580dc72014-04-16 17:45:04 +0000489 * Set the diagnostic handler for this context.
490 */
491void LLVMContextSetDiagnosticHandler(LLVMContextRef C,
492 LLVMDiagnosticHandler Handler,
493 void *DiagnosticContext);
494
495/**
Juergen Ributzka34390c72014-05-16 02:33:15 +0000496 * Set the yield callback function for this context.
497 *
498 * @see LLVMContext::setYieldCallback()
499 */
500void LLVMContextSetYieldCallback(LLVMContextRef C, LLVMYieldCallback Callback,
501 void *OpaqueHandle);
502
503/**
Gregory Szorc34c863a2012-03-21 03:54:29 +0000504 * Destroy a context instance.
505 *
506 * This should be called for every call to LLVMContextCreate() or memory
507 * will be leaked.
508 */
Owen Anderson6773d382009-07-01 16:58:40 +0000509void LLVMContextDispose(LLVMContextRef C);
510
Tom Stellard1580dc72014-04-16 17:45:04 +0000511/**
512 * Return a string representation of the DiagnosticInfo. Use
513 * LLVMDisposeMessage to free the string.
514 *
515 * @see DiagnosticInfo::print()
516 */
517char *LLVMGetDiagInfoDescription(LLVMDiagnosticInfoRef DI);
518
519/**
520 * Return an enum LLVMDiagnosticSeverity.
521 *
522 * @see DiagnosticInfo::getSeverity()
523 */
524LLVMDiagnosticSeverity LLVMGetDiagInfoSeverity(LLVMDiagnosticInfoRef DI);
525
Erick Tryzelaard8531fa2010-02-28 09:45:59 +0000526unsigned LLVMGetMDKindIDInContext(LLVMContextRef C, const char* Name,
527 unsigned SLen);
528unsigned LLVMGetMDKindID(const char* Name, unsigned SLen);
529
Gregory Szorc34c863a2012-03-21 03:54:29 +0000530/**
531 * @}
532 */
533
Gregory Szorc52d26602012-03-21 07:28:27 +0000534/**
535 * @defgroup LLVMCCoreModule Modules
Gregory Szorc34c863a2012-03-21 03:54:29 +0000536 *
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +0000537 * Modules represent the top-level structure in an LLVM program. An LLVM
Gregory Szorc34c863a2012-03-21 03:54:29 +0000538 * module is effectively a translation unit or a collection of
539 * translation units merged together.
540 *
541 * @{
542 */
543
Gregory Szorc34c863a2012-03-21 03:54:29 +0000544/**
545 * Create a new, empty module in the global context.
546 *
547 * This is equivalent to calling LLVMModuleCreateWithNameInContext with
548 * LLVMGetGlobalContext() as the context parameter.
549 *
550 * Every invocation should be paired with LLVMDisposeModule() or memory
551 * will be leaked.
552 */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000553LLVMModuleRef LLVMModuleCreateWithName(const char *ModuleID);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000554
555/**
556 * Create a new, empty module in a specific context.
557 *
558 * Every invocation should be paired with LLVMDisposeModule() or memory
559 * will be leaked.
560 */
Owen Anderson31d44e42009-07-02 07:17:57 +0000561LLVMModuleRef LLVMModuleCreateWithNameInContext(const char *ModuleID,
562 LLVMContextRef C);
Gordon Henriksena49d4352008-03-07 19:13:06 +0000563
Gregory Szorc34c863a2012-03-21 03:54:29 +0000564/**
565 * Destroy a module instance.
566 *
567 * This must be called for every created module or memory will be
568 * leaked.
569 */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000570void LLVMDisposeModule(LLVMModuleRef M);
571
Gregory Szorc34c863a2012-03-21 03:54:29 +0000572/**
573 * Obtain the data layout for a module.
574 *
575 * @see Module::getDataLayout()
576 */
Gordon Henriksen05568bb2007-12-27 20:13:47 +0000577const char *LLVMGetDataLayout(LLVMModuleRef M);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000578
579/**
580 * Set the data layout for a module.
581 *
582 * @see Module::setDataLayout()
583 */
Gordon Henriksen05568bb2007-12-27 20:13:47 +0000584void LLVMSetDataLayout(LLVMModuleRef M, const char *Triple);
585
Gregory Szorc34c863a2012-03-21 03:54:29 +0000586/**
587 * Obtain the target triple for a module.
588 *
589 * @see Module::getTargetTriple()
590 */
Gordon Henriksen05568bb2007-12-27 20:13:47 +0000591const char *LLVMGetTarget(LLVMModuleRef M);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000592
593/**
594 * Set the target triple for a module.
595 *
596 * @see Module::setTargetTriple()
597 */
Gordon Henriksen05568bb2007-12-27 20:13:47 +0000598void LLVMSetTarget(LLVMModuleRef M, const char *Triple);
599
Gregory Szorc34c863a2012-03-21 03:54:29 +0000600/**
601 * Dump a representation of a module to stderr.
602 *
603 * @see Module::dump()
604 */
Gordon Henriksen6c6075e2008-03-14 23:58:56 +0000605void LLVMDumpModule(LLVMModuleRef M);
606
Gregory Szorc34c863a2012-03-21 03:54:29 +0000607/**
Hans Wennborgb7ef2fe2012-05-09 16:54:17 +0000608 * Print a representation of a module to a file. The ErrorMessage needs to be
609 * disposed with LLVMDisposeMessage. Returns 0 on success, 1 otherwise.
610 *
611 * @see Module::print()
612 */
613LLVMBool LLVMPrintModuleToFile(LLVMModuleRef M, const char *Filename,
614 char **ErrorMessage);
615
616/**
Anders Waldenborg84355db2013-10-16 18:00:54 +0000617 * Return a string representation of the module. Use
618 * LLVMDisposeMessage to free the string.
619 *
620 * @see Module::print()
621 */
622char *LLVMPrintModuleToString(LLVMModuleRef M);
623
624/**
Gregory Szorc34c863a2012-03-21 03:54:29 +0000625 * Set inline assembly for a module.
626 *
627 * @see Module::setModuleInlineAsm()
628 */
Chris Lattner26941452010-04-10 17:52:58 +0000629void LLVMSetModuleInlineAsm(LLVMModuleRef M, const char *Asm);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000630
Gregory Szorc34c863a2012-03-21 03:54:29 +0000631/**
632 * Obtain the context to which this module is associated.
633 *
634 * @see Module::getContext()
635 */
Chris Lattnera7e04b02010-11-28 20:03:44 +0000636LLVMContextRef LLVMGetModuleContext(LLVMModuleRef M);
637
Gregory Szorc34c863a2012-03-21 03:54:29 +0000638/**
639 * Obtain a Type from a module by its registered name.
640 */
641LLVMTypeRef LLVMGetTypeByName(LLVMModuleRef M, const char *Name);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000642
Gregory Szorc34c863a2012-03-21 03:54:29 +0000643/**
644 * Obtain the number of operands for named metadata in a module.
645 *
646 * @see llvm::Module::getNamedMetadata()
647 */
648unsigned LLVMGetNamedMetadataNumOperands(LLVMModuleRef M, const char* name);
649
650/**
651 * Obtain the named metadata operands for a module.
652 *
653 * The passed LLVMValueRef pointer should refer to an array of
654 * LLVMValueRef at least LLVMGetNamedMetadataNumOperands long. This
655 * array will be populated with the LLVMValueRef instances. Each
656 * instance corresponds to a llvm::MDNode.
657 *
658 * @see llvm::Module::getNamedMetadata()
659 * @see llvm::MDNode::getOperand()
660 */
661void LLVMGetNamedMetadataOperands(LLVMModuleRef M, const char* name, LLVMValueRef *Dest);
662
663/**
664 * Add an operand to named metadata.
665 *
666 * @see llvm::Module::getNamedMetadata()
667 * @see llvm::MDNode::addOperand()
668 */
669void LLVMAddNamedMetadataOperand(LLVMModuleRef M, const char* name,
670 LLVMValueRef Val);
671
Gregory Szorc52d26602012-03-21 07:28:27 +0000672/**
673 * Add a function to a module under a specified name.
674 *
675 * @see llvm::Function::Create()
676 */
677LLVMValueRef LLVMAddFunction(LLVMModuleRef M, const char *Name,
678 LLVMTypeRef FunctionTy);
679
680/**
681 * Obtain a Function value from a Module by its name.
682 *
683 * The returned value corresponds to a llvm::Function value.
684 *
685 * @see llvm::Module::getFunction()
686 */
687LLVMValueRef LLVMGetNamedFunction(LLVMModuleRef M, const char *Name);
688
689/**
690 * Obtain an iterator to the first Function in a Module.
691 *
692 * @see llvm::Module::begin()
693 */
694LLVMValueRef LLVMGetFirstFunction(LLVMModuleRef M);
695
696/**
697 * Obtain an iterator to the last Function in a Module.
698 *
699 * @see llvm::Module::end()
700 */
701LLVMValueRef LLVMGetLastFunction(LLVMModuleRef M);
702
703/**
704 * Advance a Function iterator to the next Function.
705 *
706 * Returns NULL if the iterator was already at the end and there are no more
707 * functions.
708 */
709LLVMValueRef LLVMGetNextFunction(LLVMValueRef Fn);
710
711/**
712 * Decrement a Function iterator to the previous Function.
713 *
714 * Returns NULL if the iterator was already at the beginning and there are
715 * no previous functions.
716 */
717LLVMValueRef LLVMGetPreviousFunction(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000718
719/**
720 * @}
721 */
722
723/**
724 * @defgroup LLVMCCoreType Types
725 *
726 * Types represent the type of a value.
727 *
728 * Types are associated with a context instance. The context internally
729 * deduplicates types so there is only 1 instance of a specific type
730 * alive at a time. In other words, a unique type is shared among all
731 * consumers within a context.
732 *
733 * A Type in the C API corresponds to llvm::Type.
734 *
735 * Types have the following hierarchy:
736 *
Gordon Henriksen76a03742007-09-18 03:18:57 +0000737 * types:
738 * integer type
739 * real type
740 * function type
741 * sequence types:
742 * array type
743 * pointer type
744 * vector type
745 * void type
746 * label type
747 * opaque type
Gregory Szorc34c863a2012-03-21 03:54:29 +0000748 *
749 * @{
Gordon Henriksen76a03742007-09-18 03:18:57 +0000750 */
751
Gregory Szorc34c863a2012-03-21 03:54:29 +0000752/**
753 * Obtain the enumerated type of a Type instance.
754 *
755 * @see llvm::Type:getTypeID()
756 */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000757LLVMTypeKind LLVMGetTypeKind(LLVMTypeRef Ty);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000758
759/**
760 * Whether the type has a known size.
761 *
762 * Things that don't have a size are abstract types, labels, and void.a
763 *
764 * @see llvm::Type::isSized()
765 */
Torok Edwin1cd9ade2011-10-06 12:13:28 +0000766LLVMBool LLVMTypeIsSized(LLVMTypeRef Ty);
Gordon Henriksena49d4352008-03-07 19:13:06 +0000767
Gregory Szorc34c863a2012-03-21 03:54:29 +0000768/**
769 * Obtain the context to which this type instance is associated.
770 *
771 * @see llvm::Type::getContext()
772 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000773LLVMContextRef LLVMGetTypeContext(LLVMTypeRef Ty);
774
Gregory Szorc34c863a2012-03-21 03:54:29 +0000775/**
Anders Waldenborgb822cff2013-10-16 21:30:25 +0000776 * Dump a representation of a type to stderr.
777 *
778 * @see llvm::Type::dump()
779 */
780void LLVMDumpType(LLVMTypeRef Val);
781
782/**
Anders Waldenborg47b3bd32013-10-22 06:58:34 +0000783 * Return a string representation of the type. Use
784 * LLVMDisposeMessage to free the string.
785 *
786 * @see llvm::Type::print()
787 */
788char *LLVMPrintTypeToString(LLVMTypeRef Val);
789
790/**
Gregory Szorc34c863a2012-03-21 03:54:29 +0000791 * @defgroup LLVMCCoreTypeInt Integer Types
792 *
793 * Functions in this section operate on integer types.
794 *
795 * @{
796 */
797
798/**
799 * Obtain an integer type from a context with specified bit width.
800 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000801LLVMTypeRef LLVMInt1TypeInContext(LLVMContextRef C);
802LLVMTypeRef LLVMInt8TypeInContext(LLVMContextRef C);
803LLVMTypeRef LLVMInt16TypeInContext(LLVMContextRef C);
804LLVMTypeRef LLVMInt32TypeInContext(LLVMContextRef C);
805LLVMTypeRef LLVMInt64TypeInContext(LLVMContextRef C);
806LLVMTypeRef LLVMIntTypeInContext(LLVMContextRef C, unsigned NumBits);
807
Gregory Szorc34c863a2012-03-21 03:54:29 +0000808/**
809 * Obtain an integer type from the global context with a specified bit
810 * width.
811 */
Gordon Henriksena735a9c2008-05-04 12:55:34 +0000812LLVMTypeRef LLVMInt1Type(void);
813LLVMTypeRef LLVMInt8Type(void);
814LLVMTypeRef LLVMInt16Type(void);
815LLVMTypeRef LLVMInt32Type(void);
816LLVMTypeRef LLVMInt64Type(void);
Gordon Henriksened7beaa2007-10-06 16:05:20 +0000817LLVMTypeRef LLVMIntType(unsigned NumBits);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000818unsigned LLVMGetIntTypeWidth(LLVMTypeRef IntegerTy);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000819
Gregory Szorc34c863a2012-03-21 03:54:29 +0000820/**
821 * @}
822 */
823
824/**
825 * @defgroup LLVMCCoreTypeFloat Floating Point Types
826 *
827 * @{
828 */
829
830/**
831 * Obtain a 16-bit floating point type from a context.
832 */
Dan Gohman518cda42011-12-17 00:04:22 +0000833LLVMTypeRef LLVMHalfTypeInContext(LLVMContextRef C);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000834
835/**
836 * Obtain a 32-bit floating point type from a context.
837 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000838LLVMTypeRef LLVMFloatTypeInContext(LLVMContextRef C);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000839
840/**
841 * Obtain a 64-bit floating point type from a context.
842 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000843LLVMTypeRef LLVMDoubleTypeInContext(LLVMContextRef C);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000844
845/**
846 * Obtain a 80-bit floating point type (X87) from a context.
847 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000848LLVMTypeRef LLVMX86FP80TypeInContext(LLVMContextRef C);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000849
850/**
851 * Obtain a 128-bit floating point type (112-bit mantissa) from a
852 * context.
853 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000854LLVMTypeRef LLVMFP128TypeInContext(LLVMContextRef C);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000855
856/**
857 * Obtain a 128-bit floating point type (two 64-bits) from a context.
858 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000859LLVMTypeRef LLVMPPCFP128TypeInContext(LLVMContextRef C);
860
Gregory Szorc34c863a2012-03-21 03:54:29 +0000861/**
862 * Obtain a floating point type from the global context.
863 *
864 * These map to the functions in this group of the same name.
865 */
Dan Gohman518cda42011-12-17 00:04:22 +0000866LLVMTypeRef LLVMHalfType(void);
Gordon Henriksena735a9c2008-05-04 12:55:34 +0000867LLVMTypeRef LLVMFloatType(void);
868LLVMTypeRef LLVMDoubleType(void);
869LLVMTypeRef LLVMX86FP80Type(void);
870LLVMTypeRef LLVMFP128Type(void);
871LLVMTypeRef LLVMPPCFP128Type(void);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000872
Gregory Szorc34c863a2012-03-21 03:54:29 +0000873/**
874 * @}
875 */
876
877/**
878 * @defgroup LLVMCCoreTypeFunction Function Types
879 *
880 * @{
881 */
882
883/**
884 * Obtain a function type consisting of a specified signature.
885 *
886 * The function is defined as a tuple of a return Type, a list of
887 * parameter types, and whether the function is variadic.
888 */
Gordon Henriksened7beaa2007-10-06 16:05:20 +0000889LLVMTypeRef LLVMFunctionType(LLVMTypeRef ReturnType,
890 LLVMTypeRef *ParamTypes, unsigned ParamCount,
Chris Lattner25963c62010-01-09 22:27:07 +0000891 LLVMBool IsVarArg);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000892
893/**
894 * Returns whether a function type is variadic.
895 */
Chris Lattner25963c62010-01-09 22:27:07 +0000896LLVMBool LLVMIsFunctionVarArg(LLVMTypeRef FunctionTy);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000897
898/**
899 * Obtain the Type this function Type returns.
900 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000901LLVMTypeRef LLVMGetReturnType(LLVMTypeRef FunctionTy);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000902
903/**
904 * Obtain the number of parameters this function accepts.
905 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000906unsigned LLVMCountParamTypes(LLVMTypeRef FunctionTy);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000907
908/**
909 * Obtain the types of a function's parameters.
910 *
911 * The Dest parameter should point to a pre-allocated array of
912 * LLVMTypeRef at least LLVMCountParamTypes() large. On return, the
913 * first LLVMCountParamTypes() entries in the array will be populated
914 * with LLVMTypeRef instances.
915 *
916 * @param FunctionTy The function type to operate on.
917 * @param Dest Memory address of an array to be filled with result.
918 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000919void LLVMGetParamTypes(LLVMTypeRef FunctionTy, LLVMTypeRef *Dest);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000920
Gregory Szorc34c863a2012-03-21 03:54:29 +0000921/**
922 * @}
923 */
924
925/**
926 * @defgroup LLVMCCoreTypeStruct Structure Types
927 *
928 * These functions relate to LLVMTypeRef instances.
929 *
930 * @see llvm::StructType
931 *
932 * @{
933 */
934
935/**
936 * Create a new structure type in a context.
937 *
938 * A structure is specified by a list of inner elements/types and
939 * whether these can be packed together.
940 *
941 * @see llvm::StructType::create()
942 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000943LLVMTypeRef LLVMStructTypeInContext(LLVMContextRef C, LLVMTypeRef *ElementTypes,
Chris Lattner25963c62010-01-09 22:27:07 +0000944 unsigned ElementCount, LLVMBool Packed);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000945
946/**
947 * Create a new structure type in the global context.
948 *
949 * @see llvm::StructType::create()
950 */
Gordon Henriksened7beaa2007-10-06 16:05:20 +0000951LLVMTypeRef LLVMStructType(LLVMTypeRef *ElementTypes, unsigned ElementCount,
Chris Lattner25963c62010-01-09 22:27:07 +0000952 LLVMBool Packed);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000953
954/**
955 * Create an empty structure in a context having a specified name.
956 *
957 * @see llvm::StructType::create()
958 */
Chris Lattnere71ccde2011-07-14 05:53:17 +0000959LLVMTypeRef LLVMStructCreateNamed(LLVMContextRef C, const char *Name);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000960
961/**
962 * Obtain the name of a structure.
963 *
964 * @see llvm::StructType::getName()
965 */
Torok Edwin0d5f6ae2011-10-06 12:12:50 +0000966const char *LLVMGetStructName(LLVMTypeRef Ty);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000967
968/**
969 * Set the contents of a structure type.
970 *
971 * @see llvm::StructType::setBody()
972 */
Chris Lattnere71ccde2011-07-14 05:53:17 +0000973void LLVMStructSetBody(LLVMTypeRef StructTy, LLVMTypeRef *ElementTypes,
974 unsigned ElementCount, LLVMBool Packed);
975
Gregory Szorc34c863a2012-03-21 03:54:29 +0000976/**
977 * Get the number of elements defined inside the structure.
978 *
979 * @see llvm::StructType::getNumElements()
980 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000981unsigned LLVMCountStructElementTypes(LLVMTypeRef StructTy);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000982
983/**
984 * Get the elements within a structure.
985 *
986 * The function is passed the address of a pre-allocated array of
987 * LLVMTypeRef at least LLVMCountStructElementTypes() long. After
988 * invocation, this array will be populated with the structure's
989 * elements. The objects in the destination array will have a lifetime
990 * of the structure type itself, which is the lifetime of the context it
991 * is contained in.
992 */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000993void LLVMGetStructElementTypes(LLVMTypeRef StructTy, LLVMTypeRef *Dest);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000994
995/**
996 * Determine whether a structure is packed.
997 *
998 * @see llvm::StructType::isPacked()
999 */
Chris Lattner25963c62010-01-09 22:27:07 +00001000LLVMBool LLVMIsPackedStruct(LLVMTypeRef StructTy);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001001
1002/**
1003 * Determine whether a structure is opaque.
1004 *
1005 * @see llvm::StructType::isOpaque()
1006 */
Chris Lattner17cf05b2011-07-14 16:20:28 +00001007LLVMBool LLVMIsOpaqueStruct(LLVMTypeRef StructTy);
1008
Gregory Szorc34c863a2012-03-21 03:54:29 +00001009/**
1010 * @}
1011 */
Gordon Henriksen76a03742007-09-18 03:18:57 +00001012
Gregory Szorc34c863a2012-03-21 03:54:29 +00001013
1014/**
1015 * @defgroup LLVMCCoreTypeSequential Sequential Types
1016 *
1017 * Sequential types represents "arrays" of types. This is a super class
1018 * for array, vector, and pointer types.
1019 *
1020 * @{
1021 */
1022
1023/**
1024 * Obtain the type of elements within a sequential type.
1025 *
1026 * This works on array, vector, and pointer types.
1027 *
1028 * @see llvm::SequentialType::getElementType()
1029 */
1030LLVMTypeRef LLVMGetElementType(LLVMTypeRef Ty);
1031
1032/**
1033 * Create a fixed size array type that refers to a specific type.
1034 *
1035 * The created type will exist in the context that its element type
1036 * exists in.
1037 *
1038 * @see llvm::ArrayType::get()
1039 */
Gordon Henriksened7beaa2007-10-06 16:05:20 +00001040LLVMTypeRef LLVMArrayType(LLVMTypeRef ElementType, unsigned ElementCount);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001041
1042/**
1043 * Obtain the length of an array type.
1044 *
1045 * This only works on types that represent arrays.
1046 *
1047 * @see llvm::ArrayType::getNumElements()
1048 */
1049unsigned LLVMGetArrayLength(LLVMTypeRef ArrayTy);
1050
1051/**
1052 * Create a pointer type that points to a defined type.
1053 *
1054 * The created type will exist in the context that its pointee type
1055 * exists in.
1056 *
1057 * @see llvm::PointerType::get()
1058 */
Gordon Henriksen5a3fe032007-12-17 16:08:32 +00001059LLVMTypeRef LLVMPointerType(LLVMTypeRef ElementType, unsigned AddressSpace);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001060
1061/**
1062 * Obtain the address space of a pointer type.
1063 *
1064 * This only works on types that represent pointers.
1065 *
1066 * @see llvm::PointerType::getAddressSpace()
1067 */
1068unsigned LLVMGetPointerAddressSpace(LLVMTypeRef PointerTy);
1069
1070/**
1071 * Create a vector type that contains a defined type and has a specific
1072 * number of elements.
1073 *
1074 * The created type will exist in the context thats its element type
1075 * exists in.
1076 *
1077 * @see llvm::VectorType::get()
1078 */
Gordon Henriksened7beaa2007-10-06 16:05:20 +00001079LLVMTypeRef LLVMVectorType(LLVMTypeRef ElementType, unsigned ElementCount);
Gordon Henriksen76a03742007-09-18 03:18:57 +00001080
Gregory Szorc34c863a2012-03-21 03:54:29 +00001081/**
1082 * Obtain the number of elements in a vector type.
1083 *
1084 * This only works on types that represent vectors.
1085 *
1086 * @see llvm::VectorType::getNumElements()
1087 */
Gordon Henriksen76a03742007-09-18 03:18:57 +00001088unsigned LLVMGetVectorSize(LLVMTypeRef VectorTy);
1089
Gregory Szorc34c863a2012-03-21 03:54:29 +00001090/**
1091 * @}
1092 */
1093
1094/**
1095 * @defgroup LLVMCCoreTypeOther Other Types
1096 *
1097 * @{
1098 */
1099
1100/**
1101 * Create a void type in a context.
1102 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +00001103LLVMTypeRef LLVMVoidTypeInContext(LLVMContextRef C);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001104
1105/**
1106 * Create a label type in a context.
1107 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +00001108LLVMTypeRef LLVMLabelTypeInContext(LLVMContextRef C);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001109
1110/**
1111 * Create a X86 MMX type in a context.
1112 */
Dale Johannesen95b67af2010-09-10 21:58:02 +00001113LLVMTypeRef LLVMX86MMXTypeInContext(LLVMContextRef C);
Erick Tryzelaar262332f2009-08-14 00:01:31 +00001114
Gregory Szorc34c863a2012-03-21 03:54:29 +00001115/**
1116 * These are similar to the above functions except they operate on the
1117 * global context.
1118 */
Gordon Henriksena735a9c2008-05-04 12:55:34 +00001119LLVMTypeRef LLVMVoidType(void);
1120LLVMTypeRef LLVMLabelType(void);
Dale Johannesen95b67af2010-09-10 21:58:02 +00001121LLVMTypeRef LLVMX86MMXType(void);
Gordon Henriksen76a03742007-09-18 03:18:57 +00001122
Gregory Szorc34c863a2012-03-21 03:54:29 +00001123/**
1124 * @}
1125 */
Gordon Henriksen76a03742007-09-18 03:18:57 +00001126
Gregory Szorc34c863a2012-03-21 03:54:29 +00001127/**
1128 * @}
1129 */
1130
1131/**
1132 * @defgroup LLVMCCoreValues Values
1133 *
1134 * The bulk of LLVM's object model consists of values, which comprise a very
Gordon Henriksen76a03742007-09-18 03:18:57 +00001135 * rich type hierarchy.
Gregory Szorc34c863a2012-03-21 03:54:29 +00001136 *
1137 * LLVMValueRef essentially represents llvm::Value. There is a rich
1138 * hierarchy of classes within this type. Depending on the instance
Eli Benderskyc52863c2012-08-10 18:30:44 +00001139 * obtained, not all APIs are available.
Gregory Szorc34c863a2012-03-21 03:54:29 +00001140 *
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +00001141 * Callers can determine the type of an LLVMValueRef by calling the
Gregory Szorc34c863a2012-03-21 03:54:29 +00001142 * LLVMIsA* family of functions (e.g. LLVMIsAArgument()). These
1143 * functions are defined by a macro, so it isn't obvious which are
1144 * available by looking at the Doxygen source code. Instead, look at the
1145 * source definition of LLVM_FOR_EACH_VALUE_SUBCLASS and note the list
1146 * of value names given. These value names also correspond to classes in
1147 * the llvm::Value hierarchy.
1148 *
1149 * @{
Gordon Henriksen76a03742007-09-18 03:18:57 +00001150 */
1151
Gordon Henriksen29e38942008-12-19 18:39:45 +00001152#define LLVM_FOR_EACH_VALUE_SUBCLASS(macro) \
1153 macro(Argument) \
1154 macro(BasicBlock) \
1155 macro(InlineAsm) \
Torok Edwind09b7572011-10-14 20:37:56 +00001156 macro(MDNode) \
1157 macro(MDString) \
Gordon Henriksen29e38942008-12-19 18:39:45 +00001158 macro(User) \
1159 macro(Constant) \
Torok Edwind09b7572011-10-14 20:37:56 +00001160 macro(BlockAddress) \
Gordon Henriksen29e38942008-12-19 18:39:45 +00001161 macro(ConstantAggregateZero) \
1162 macro(ConstantArray) \
Peter Zotovae0344b2013-11-05 12:55:37 +00001163 macro(ConstantDataSequential) \
1164 macro(ConstantDataArray) \
1165 macro(ConstantDataVector) \
Gordon Henriksen29e38942008-12-19 18:39:45 +00001166 macro(ConstantExpr) \
1167 macro(ConstantFP) \
1168 macro(ConstantInt) \
1169 macro(ConstantPointerNull) \
1170 macro(ConstantStruct) \
1171 macro(ConstantVector) \
1172 macro(GlobalValue) \
Gordon Henriksen29e38942008-12-19 18:39:45 +00001173 macro(GlobalAlias) \
Rafael Espindola99e05cf2014-05-13 18:45:48 +00001174 macro(GlobalObject) \
1175 macro(Function) \
1176 macro(GlobalVariable) \
Gordon Henriksen29e38942008-12-19 18:39:45 +00001177 macro(UndefValue) \
1178 macro(Instruction) \
1179 macro(BinaryOperator) \
1180 macro(CallInst) \
1181 macro(IntrinsicInst) \
1182 macro(DbgInfoIntrinsic) \
1183 macro(DbgDeclareInst) \
Gordon Henriksen29e38942008-12-19 18:39:45 +00001184 macro(MemIntrinsic) \
1185 macro(MemCpyInst) \
1186 macro(MemMoveInst) \
1187 macro(MemSetInst) \
1188 macro(CmpInst) \
Torok Edwind09b7572011-10-14 20:37:56 +00001189 macro(FCmpInst) \
1190 macro(ICmpInst) \
Gordon Henriksen29e38942008-12-19 18:39:45 +00001191 macro(ExtractElementInst) \
1192 macro(GetElementPtrInst) \
1193 macro(InsertElementInst) \
1194 macro(InsertValueInst) \
Bill Wendlingfae14752011-08-12 20:24:12 +00001195 macro(LandingPadInst) \
Gordon Henriksen29e38942008-12-19 18:39:45 +00001196 macro(PHINode) \
1197 macro(SelectInst) \
1198 macro(ShuffleVectorInst) \
1199 macro(StoreInst) \
1200 macro(TerminatorInst) \
1201 macro(BranchInst) \
Torok Edwind09b7572011-10-14 20:37:56 +00001202 macro(IndirectBrInst) \
Gordon Henriksen29e38942008-12-19 18:39:45 +00001203 macro(InvokeInst) \
1204 macro(ReturnInst) \
1205 macro(SwitchInst) \
1206 macro(UnreachableInst) \
Bill Wendlingf891bf82011-07-31 06:30:59 +00001207 macro(ResumeInst) \
Duncan Sands5e37e992013-05-06 08:55:45 +00001208 macro(UnaryInstruction) \
1209 macro(AllocaInst) \
1210 macro(CastInst) \
Matt Arsenaultb03bd4d2013-11-15 01:34:59 +00001211 macro(AddrSpaceCastInst) \
Duncan Sands5e37e992013-05-06 08:55:45 +00001212 macro(BitCastInst) \
1213 macro(FPExtInst) \
1214 macro(FPToSIInst) \
1215 macro(FPToUIInst) \
1216 macro(FPTruncInst) \
1217 macro(IntToPtrInst) \
1218 macro(PtrToIntInst) \
1219 macro(SExtInst) \
1220 macro(SIToFPInst) \
1221 macro(TruncInst) \
1222 macro(UIToFPInst) \
1223 macro(ZExtInst) \
1224 macro(ExtractValueInst) \
1225 macro(LoadInst) \
1226 macro(VAArgInst)
Gordon Henriksen29e38942008-12-19 18:39:45 +00001227
Gregory Szorc34c863a2012-03-21 03:54:29 +00001228/**
1229 * @defgroup LLVMCCoreValueGeneral General APIs
1230 *
1231 * Functions in this section work on all LLVMValueRef instances,
1232 * regardless of their sub-type. They correspond to functions available
1233 * on llvm::Value.
1234 *
1235 * @{
1236 */
Gordon Henriksen76a03742007-09-18 03:18:57 +00001237
Gregory Szorc34c863a2012-03-21 03:54:29 +00001238/**
1239 * Obtain the type of a value.
1240 *
1241 * @see llvm::Value::getType()
1242 */
1243LLVMTypeRef LLVMTypeOf(LLVMValueRef Val);
1244
1245/**
1246 * Obtain the string name of a value.
1247 *
1248 * @see llvm::Value::getName()
1249 */
1250const char *LLVMGetValueName(LLVMValueRef Val);
1251
1252/**
1253 * Set the string name of a value.
1254 *
1255 * @see llvm::Value::setName()
1256 */
1257void LLVMSetValueName(LLVMValueRef Val, const char *Name);
1258
1259/**
1260 * Dump a representation of a value to stderr.
1261 *
1262 * @see llvm::Value::dump()
1263 */
1264void LLVMDumpValue(LLVMValueRef Val);
1265
1266/**
Peter Zotovcd93b372013-11-06 09:21:01 +00001267 * Return a string representation of the value. Use
1268 * LLVMDisposeMessage to free the string.
1269 *
1270 * @see llvm::Value::print()
1271 */
1272char *LLVMPrintValueToString(LLVMValueRef Val);
1273
1274/**
Gregory Szorc34c863a2012-03-21 03:54:29 +00001275 * Replace all uses of a value with another one.
1276 *
1277 * @see llvm::Value::replaceAllUsesWith()
1278 */
1279void LLVMReplaceAllUsesWith(LLVMValueRef OldVal, LLVMValueRef NewVal);
1280
1281/**
1282 * Determine whether the specified constant instance is constant.
1283 */
1284LLVMBool LLVMIsConstant(LLVMValueRef Val);
1285
1286/**
1287 * Determine whether a value instance is undefined.
1288 */
1289LLVMBool LLVMIsUndef(LLVMValueRef Val);
1290
1291/**
1292 * Convert value instances between types.
1293 *
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +00001294 * Internally, an LLVMValueRef is "pinned" to a specific type. This
Gregory Szorc34c863a2012-03-21 03:54:29 +00001295 * series of functions allows you to cast an instance to a specific
1296 * type.
1297 *
1298 * If the cast is not valid for the specified type, NULL is returned.
1299 *
1300 * @see llvm::dyn_cast_or_null<>
1301 */
Gordon Henriksen29e38942008-12-19 18:39:45 +00001302#define LLVM_DECLARE_VALUE_CAST(name) \
1303 LLVMValueRef LLVMIsA##name(LLVMValueRef Val);
1304LLVM_FOR_EACH_VALUE_SUBCLASS(LLVM_DECLARE_VALUE_CAST)
1305
Gregory Szorc34c863a2012-03-21 03:54:29 +00001306/**
1307 * @}
1308 */
1309
1310/**
1311 * @defgroup LLVMCCoreValueUses Usage
1312 *
1313 * This module defines functions that allow you to inspect the uses of a
1314 * LLVMValueRef.
1315 *
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +00001316 * It is possible to obtain an LLVMUseRef for any LLVMValueRef instance.
Gregory Szorc34c863a2012-03-21 03:54:29 +00001317 * Each LLVMUseRef (which corresponds to a llvm::Use instance) holds a
1318 * llvm::User and llvm::Value.
1319 *
1320 * @{
1321 */
1322
1323/**
1324 * Obtain the first use of a value.
1325 *
1326 * Uses are obtained in an iterator fashion. First, call this function
1327 * to obtain a reference to the first use. Then, call LLVMGetNextUse()
Eli Benderskyc52863c2012-08-10 18:30:44 +00001328 * on that instance and all subsequently obtained instances until
Gregory Szorc34c863a2012-03-21 03:54:29 +00001329 * LLVMGetNextUse() returns NULL.
1330 *
1331 * @see llvm::Value::use_begin()
1332 */
Erick Tryzelaar9f9857e2010-03-02 20:32:28 +00001333LLVMUseRef LLVMGetFirstUse(LLVMValueRef Val);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001334
1335/**
1336 * Obtain the next use of a value.
1337 *
1338 * This effectively advances the iterator. It returns NULL if you are on
1339 * the final use and no more are available.
1340 */
Erick Tryzelaar9f9857e2010-03-02 20:32:28 +00001341LLVMUseRef LLVMGetNextUse(LLVMUseRef U);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001342
1343/**
1344 * Obtain the user value for a user.
1345 *
1346 * The returned value corresponds to a llvm::User type.
1347 *
1348 * @see llvm::Use::getUser()
1349 */
Erick Tryzelaar9f9857e2010-03-02 20:32:28 +00001350LLVMValueRef LLVMGetUser(LLVMUseRef U);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001351
1352/**
1353 * Obtain the value this use corresponds to.
1354 *
1355 * @see llvm::Use::get().
1356 */
Erick Tryzelaar9f9857e2010-03-02 20:32:28 +00001357LLVMValueRef LLVMGetUsedValue(LLVMUseRef U);
Chris Lattner40cf28d2009-10-12 04:01:02 +00001358
Gregory Szorc34c863a2012-03-21 03:54:29 +00001359/**
1360 * @}
1361 */
1362
1363/**
Gregory Szorc52d26602012-03-21 07:28:27 +00001364 * @defgroup LLVMCCoreValueUser User value
Gregory Szorc34c863a2012-03-21 03:54:29 +00001365 *
1366 * Function in this group pertain to LLVMValueRef instances that descent
1367 * from llvm::User. This includes constants, instructions, and
1368 * operators.
1369 *
1370 * @{
1371 */
1372
1373/**
1374 * Obtain an operand at a specific index in a llvm::User value.
1375 *
1376 * @see llvm::User::getOperand()
1377 */
Chris Lattner40cf28d2009-10-12 04:01:02 +00001378LLVMValueRef LLVMGetOperand(LLVMValueRef Val, unsigned Index);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001379
1380/**
1381 * Set an operand at a specific index in a llvm::User value.
1382 *
1383 * @see llvm::User::setOperand()
1384 */
Erick Tryzelaarb4d48702010-08-20 14:51:22 +00001385void LLVMSetOperand(LLVMValueRef User, unsigned Index, LLVMValueRef Val);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001386
1387/**
1388 * Obtain the number of operands in a llvm::User value.
1389 *
1390 * @see llvm::User::getNumOperands()
1391 */
Erick Tryzelaarb4d48702010-08-20 14:51:22 +00001392int LLVMGetNumOperands(LLVMValueRef Val);
Chris Lattner40cf28d2009-10-12 04:01:02 +00001393
Gregory Szorc34c863a2012-03-21 03:54:29 +00001394/**
1395 * @}
1396 */
1397
1398/**
Gregory Szorc52d26602012-03-21 07:28:27 +00001399 * @defgroup LLVMCCoreValueConstant Constants
Gregory Szorc34c863a2012-03-21 03:54:29 +00001400 *
1401 * This section contains APIs for interacting with LLVMValueRef that
1402 * correspond to llvm::Constant instances.
1403 *
1404 * These functions will work for any LLVMValueRef in the llvm::Constant
1405 * class hierarchy.
1406 *
1407 * @{
1408 */
1409
1410/**
1411 * Obtain a constant value referring to the null instance of a type.
1412 *
1413 * @see llvm::Constant::getNullValue()
1414 */
Gordon Henriksen1046c732007-10-06 15:11:06 +00001415LLVMValueRef LLVMConstNull(LLVMTypeRef Ty); /* all zeroes */
Gregory Szorc34c863a2012-03-21 03:54:29 +00001416
1417/**
1418 * Obtain a constant value referring to the instance of a type
1419 * consisting of all ones.
1420 *
1421 * This is only valid for integer types.
1422 *
1423 * @see llvm::Constant::getAllOnesValue()
1424 */
1425LLVMValueRef LLVMConstAllOnes(LLVMTypeRef Ty);
1426
1427/**
1428 * Obtain a constant value referring to an undefined value of a type.
1429 *
1430 * @see llvm::UndefValue::get()
1431 */
Gordon Henriksen76a03742007-09-18 03:18:57 +00001432LLVMValueRef LLVMGetUndef(LLVMTypeRef Ty);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001433
1434/**
1435 * Determine whether a value instance is null.
1436 *
1437 * @see llvm::Constant::isNullValue()
1438 */
Chris Lattner25963c62010-01-09 22:27:07 +00001439LLVMBool LLVMIsNull(LLVMValueRef Val);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001440
1441/**
1442 * Obtain a constant that is a constant pointer pointing to NULL for a
1443 * specified type.
1444 */
Chris Lattner7f318242009-07-06 17:29:59 +00001445LLVMValueRef LLVMConstPointerNull(LLVMTypeRef Ty);
Gordon Henriksen76a03742007-09-18 03:18:57 +00001446
Gregory Szorc34c863a2012-03-21 03:54:29 +00001447/**
1448 * @defgroup LLVMCCoreValueConstantScalar Scalar constants
1449 *
1450 * Functions in this group model LLVMValueRef instances that correspond
1451 * to constants referring to scalar types.
1452 *
1453 * For integer types, the LLVMTypeRef parameter should correspond to a
1454 * llvm::IntegerType instance and the returned LLVMValueRef will
1455 * correspond to a llvm::ConstantInt.
1456 *
1457 * For floating point types, the LLVMTypeRef returned corresponds to a
1458 * llvm::ConstantFP.
1459 *
1460 * @{
1461 */
Erick Tryzelaard8531fa2010-02-28 09:45:59 +00001462
Gregory Szorc34c863a2012-03-21 03:54:29 +00001463/**
1464 * Obtain a constant value for an integer type.
1465 *
1466 * The returned value corresponds to a llvm::ConstantInt.
1467 *
1468 * @see llvm::ConstantInt::get()
1469 *
1470 * @param IntTy Integer type to obtain value of.
1471 * @param N The value the returned instance should refer to.
1472 * @param SignExtend Whether to sign extend the produced value.
1473 */
Gordon Henriksen1046c732007-10-06 15:11:06 +00001474LLVMValueRef LLVMConstInt(LLVMTypeRef IntTy, unsigned long long N,
Chris Lattner25963c62010-01-09 22:27:07 +00001475 LLVMBool SignExtend);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001476
1477/**
1478 * Obtain a constant value for an integer of arbitrary precision.
1479 *
1480 * @see llvm::ConstantInt::get()
1481 */
Chris Lattner4329e072010-11-23 02:47:22 +00001482LLVMValueRef LLVMConstIntOfArbitraryPrecision(LLVMTypeRef IntTy,
1483 unsigned NumWords,
1484 const uint64_t Words[]);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001485
1486/**
1487 * Obtain a constant value for an integer parsed from a string.
1488 *
1489 * A similar API, LLVMConstIntOfStringAndSize is also available. If the
1490 * string's length is available, it is preferred to call that function
1491 * instead.
1492 *
1493 * @see llvm::ConstantInt::get()
1494 */
Erick Tryzelaardd991352009-08-16 23:36:46 +00001495LLVMValueRef LLVMConstIntOfString(LLVMTypeRef IntTy, const char *Text,
1496 uint8_t Radix);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001497
1498/**
1499 * Obtain a constant value for an integer parsed from a string with
1500 * specified length.
1501 *
1502 * @see llvm::ConstantInt::get()
1503 */
Erick Tryzelaardd991352009-08-16 23:36:46 +00001504LLVMValueRef LLVMConstIntOfStringAndSize(LLVMTypeRef IntTy, const char *Text,
1505 unsigned SLen, uint8_t Radix);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001506
1507/**
1508 * Obtain a constant value referring to a double floating point value.
1509 */
Gordon Henriksen1046c732007-10-06 15:11:06 +00001510LLVMValueRef LLVMConstReal(LLVMTypeRef RealTy, double N);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001511
1512/**
1513 * Obtain a constant for a floating point value parsed from a string.
1514 *
1515 * A similar API, LLVMConstRealOfStringAndSize is also available. It
1516 * should be used if the input string's length is known.
1517 */
Gordon Henriksen931e1212008-02-02 01:07:50 +00001518LLVMValueRef LLVMConstRealOfString(LLVMTypeRef RealTy, const char *Text);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001519
1520/**
1521 * Obtain a constant for a floating point value parsed from a string.
1522 */
Erick Tryzelaardd991352009-08-16 23:36:46 +00001523LLVMValueRef LLVMConstRealOfStringAndSize(LLVMTypeRef RealTy, const char *Text,
1524 unsigned SLen);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001525
1526/**
1527 * Obtain the zero extended value for an integer constant value.
1528 *
1529 * @see llvm::ConstantInt::getZExtValue()
1530 */
Chris Lattner40cf28d2009-10-12 04:01:02 +00001531unsigned long long LLVMConstIntGetZExtValue(LLVMValueRef ConstantVal);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001532
1533/**
1534 * Obtain the sign extended value for an integer constant value.
1535 *
1536 * @see llvm::ConstantInt::getSExtValue()
1537 */
Chris Lattner40cf28d2009-10-12 04:01:02 +00001538long long LLVMConstIntGetSExtValue(LLVMValueRef ConstantVal);
Erick Tryzelaardd991352009-08-16 23:36:46 +00001539
Gregory Szorc34c863a2012-03-21 03:54:29 +00001540/**
1541 * @}
1542 */
1543
1544/**
Gregory Szorc52d26602012-03-21 07:28:27 +00001545 * @defgroup LLVMCCoreValueConstantComposite Composite Constants
1546 *
1547 * Functions in this group operate on composite constants.
Gregory Szorc34c863a2012-03-21 03:54:29 +00001548 *
1549 * @{
1550 */
1551
1552/**
Gregory Szorc52d26602012-03-21 07:28:27 +00001553 * Create a ConstantDataSequential and initialize it with a string.
Gregory Szorc34c863a2012-03-21 03:54:29 +00001554 *
Gregory Szorc52d26602012-03-21 07:28:27 +00001555 * @see llvm::ConstantDataArray::getString()
Gregory Szorc34c863a2012-03-21 03:54:29 +00001556 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +00001557LLVMValueRef LLVMConstStringInContext(LLVMContextRef C, const char *Str,
Chris Lattner25963c62010-01-09 22:27:07 +00001558 unsigned Length, LLVMBool DontNullTerminate);
Gregory Szorc52d26602012-03-21 07:28:27 +00001559
1560/**
1561 * Create a ConstantDataSequential with string content in the global context.
1562 *
1563 * This is the same as LLVMConstStringInContext except it operates on the
1564 * global context.
1565 *
1566 * @see LLVMConstStringInContext()
1567 * @see llvm::ConstantDataArray::getString()
1568 */
1569LLVMValueRef LLVMConstString(const char *Str, unsigned Length,
1570 LLVMBool DontNullTerminate);
1571
1572/**
Peter Zotovf9aa8822014-08-03 23:54:16 +00001573 * Returns true if the specified constant is an array of i8.
1574 *
1575 * @see ConstantDataSequential::getAsString()
1576 */
1577LLVMBool LLVMIsConstantString(LLVMValueRef c);
1578
1579/**
1580 * Get the given constant data sequential as a string.
1581 *
1582 * @see ConstantDataSequential::getAsString()
1583 */
1584const char *LLVMGetAsString(LLVMValueRef c, size_t* out);
1585
1586/**
Gregory Szorc52d26602012-03-21 07:28:27 +00001587 * Create an anonymous ConstantStruct with the specified values.
1588 *
1589 * @see llvm::ConstantStruct::getAnon()
1590 */
1591LLVMValueRef LLVMConstStructInContext(LLVMContextRef C,
Erick Tryzelaar262332f2009-08-14 00:01:31 +00001592 LLVMValueRef *ConstantVals,
Chris Lattner25963c62010-01-09 22:27:07 +00001593 unsigned Count, LLVMBool Packed);
Erick Tryzelaar262332f2009-08-14 00:01:31 +00001594
Gregory Szorc52d26602012-03-21 07:28:27 +00001595/**
1596 * Create a ConstantStruct in the global Context.
1597 *
1598 * This is the same as LLVMConstStructInContext except it operates on the
1599 * global Context.
1600 *
1601 * @see LLVMConstStructInContext()
1602 */
Gordon Henriksen1046c732007-10-06 15:11:06 +00001603LLVMValueRef LLVMConstStruct(LLVMValueRef *ConstantVals, unsigned Count,
Chris Lattner25963c62010-01-09 22:27:07 +00001604 LLVMBool Packed);
Gregory Szorc52d26602012-03-21 07:28:27 +00001605
1606/**
1607 * Create a ConstantArray from values.
1608 *
1609 * @see llvm::ConstantArray::get()
1610 */
1611LLVMValueRef LLVMConstArray(LLVMTypeRef ElementTy,
1612 LLVMValueRef *ConstantVals, unsigned Length);
1613
1614/**
1615 * Create a non-anonymous ConstantStruct from values.
1616 *
1617 * @see llvm::ConstantStruct::get()
1618 */
Rafael Espindola784ad242011-07-14 19:09:08 +00001619LLVMValueRef LLVMConstNamedStruct(LLVMTypeRef StructTy,
1620 LLVMValueRef *ConstantVals,
1621 unsigned Count);
Gregory Szorc52d26602012-03-21 07:28:27 +00001622
1623/**
Peter Zotovf9aa8822014-08-03 23:54:16 +00001624 * Get an element at specified index as a constant.
1625 *
1626 * @see ConstantDataSequential::getElementAsConstant()
1627 */
1628LLVMValueRef LLVMGetElementAsConstant(LLVMValueRef c, unsigned idx);
1629
1630/**
Gregory Szorc52d26602012-03-21 07:28:27 +00001631 * Create a ConstantVector from values.
1632 *
1633 * @see llvm::ConstantVector::get()
1634 */
Gordon Henriksen1046c732007-10-06 15:11:06 +00001635LLVMValueRef LLVMConstVector(LLVMValueRef *ScalarConstantVals, unsigned Size);
Gordon Henriksen76a03742007-09-18 03:18:57 +00001636
Gregory Szorc52d26602012-03-21 07:28:27 +00001637/**
1638 * @}
1639 */
1640
1641/**
1642 * @defgroup LLVMCCoreValueConstantExpressions Constant Expressions
1643 *
1644 * Functions in this group correspond to APIs on llvm::ConstantExpr.
1645 *
1646 * @see llvm::ConstantExpr.
1647 *
1648 * @{
1649 */
Chris Lattner40cf28d2009-10-12 04:01:02 +00001650LLVMOpcode LLVMGetConstOpcode(LLVMValueRef ConstantVal);
Erick Tryzelaarfd529d72009-08-19 08:36:49 +00001651LLVMValueRef LLVMAlignOf(LLVMTypeRef Ty);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001652LLVMValueRef LLVMSizeOf(LLVMTypeRef Ty);
1653LLVMValueRef LLVMConstNeg(LLVMValueRef ConstantVal);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +00001654LLVMValueRef LLVMConstNSWNeg(LLVMValueRef ConstantVal);
1655LLVMValueRef LLVMConstNUWNeg(LLVMValueRef ConstantVal);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +00001656LLVMValueRef LLVMConstFNeg(LLVMValueRef ConstantVal);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001657LLVMValueRef LLVMConstNot(LLVMValueRef ConstantVal);
1658LLVMValueRef LLVMConstAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Dan Gohmane4ca02d2009-09-03 23:34:49 +00001659LLVMValueRef LLVMConstNSWAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +00001660LLVMValueRef LLVMConstNUWAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +00001661LLVMValueRef LLVMConstFAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001662LLVMValueRef LLVMConstSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +00001663LLVMValueRef LLVMConstNSWSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1664LLVMValueRef LLVMConstNUWSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +00001665LLVMValueRef LLVMConstFSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001666LLVMValueRef LLVMConstMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +00001667LLVMValueRef LLVMConstNSWMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1668LLVMValueRef LLVMConstNUWMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +00001669LLVMValueRef LLVMConstFMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001670LLVMValueRef LLVMConstUDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1671LLVMValueRef LLVMConstSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Dan Gohmane4ca02d2009-09-03 23:34:49 +00001672LLVMValueRef LLVMConstExactSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001673LLVMValueRef LLVMConstFDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1674LLVMValueRef LLVMConstURem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1675LLVMValueRef LLVMConstSRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1676LLVMValueRef LLVMConstFRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1677LLVMValueRef LLVMConstAnd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1678LLVMValueRef LLVMConstOr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1679LLVMValueRef LLVMConstXor(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1680LLVMValueRef LLVMConstICmp(LLVMIntPredicate Predicate,
1681 LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1682LLVMValueRef LLVMConstFCmp(LLVMRealPredicate Predicate,
1683 LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1684LLVMValueRef LLVMConstShl(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1685LLVMValueRef LLVMConstLShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1686LLVMValueRef LLVMConstAShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1687LLVMValueRef LLVMConstGEP(LLVMValueRef ConstantVal,
1688 LLVMValueRef *ConstantIndices, unsigned NumIndices);
Dan Gohmane4ca02d2009-09-03 23:34:49 +00001689LLVMValueRef LLVMConstInBoundsGEP(LLVMValueRef ConstantVal,
1690 LLVMValueRef *ConstantIndices,
1691 unsigned NumIndices);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001692LLVMValueRef LLVMConstTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1693LLVMValueRef LLVMConstSExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1694LLVMValueRef LLVMConstZExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1695LLVMValueRef LLVMConstFPTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1696LLVMValueRef LLVMConstFPExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1697LLVMValueRef LLVMConstUIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1698LLVMValueRef LLVMConstSIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1699LLVMValueRef LLVMConstFPToUI(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1700LLVMValueRef LLVMConstFPToSI(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1701LLVMValueRef LLVMConstPtrToInt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1702LLVMValueRef LLVMConstIntToPtr(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1703LLVMValueRef LLVMConstBitCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
Matt Arsenaultb03bd4d2013-11-15 01:34:59 +00001704LLVMValueRef LLVMConstAddrSpaceCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +00001705LLVMValueRef LLVMConstZExtOrBitCast(LLVMValueRef ConstantVal,
1706 LLVMTypeRef ToType);
1707LLVMValueRef LLVMConstSExtOrBitCast(LLVMValueRef ConstantVal,
1708 LLVMTypeRef ToType);
1709LLVMValueRef LLVMConstTruncOrBitCast(LLVMValueRef ConstantVal,
1710 LLVMTypeRef ToType);
1711LLVMValueRef LLVMConstPointerCast(LLVMValueRef ConstantVal,
1712 LLVMTypeRef ToType);
1713LLVMValueRef LLVMConstIntCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType,
Chris Lattner25963c62010-01-09 22:27:07 +00001714 LLVMBool isSigned);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +00001715LLVMValueRef LLVMConstFPCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001716LLVMValueRef LLVMConstSelect(LLVMValueRef ConstantCondition,
1717 LLVMValueRef ConstantIfTrue,
1718 LLVMValueRef ConstantIfFalse);
1719LLVMValueRef LLVMConstExtractElement(LLVMValueRef VectorConstant,
1720 LLVMValueRef IndexConstant);
1721LLVMValueRef LLVMConstInsertElement(LLVMValueRef VectorConstant,
1722 LLVMValueRef ElementValueConstant,
1723 LLVMValueRef IndexConstant);
1724LLVMValueRef LLVMConstShuffleVector(LLVMValueRef VectorAConstant,
1725 LLVMValueRef VectorBConstant,
1726 LLVMValueRef MaskConstant);
Dan Gohmand5104a52008-11-03 22:55:43 +00001727LLVMValueRef LLVMConstExtractValue(LLVMValueRef AggConstant, unsigned *IdxList,
1728 unsigned NumIdx);
1729LLVMValueRef LLVMConstInsertValue(LLVMValueRef AggConstant,
1730 LLVMValueRef ElementValueConstant,
1731 unsigned *IdxList, unsigned NumIdx);
Chris Lattner25963c62010-01-09 22:27:07 +00001732LLVMValueRef LLVMConstInlineAsm(LLVMTypeRef Ty,
Chris Lattner3d1f5522008-12-17 21:39:50 +00001733 const char *AsmString, const char *Constraints,
Chris Lattner25963c62010-01-09 22:27:07 +00001734 LLVMBool HasSideEffects, LLVMBool IsAlignStack);
Erick Tryzelaar0fb26ef2010-02-28 09:46:06 +00001735LLVMValueRef LLVMBlockAddress(LLVMValueRef F, LLVMBasicBlockRef BB);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001736
Gregory Szorc52d26602012-03-21 07:28:27 +00001737/**
1738 * @}
1739 */
1740
1741/**
1742 * @defgroup LLVMCCoreValueConstantGlobals Global Values
1743 *
1744 * This group contains functions that operate on global values. Functions in
1745 * this group relate to functions in the llvm::GlobalValue class tree.
1746 *
1747 * @see llvm::GlobalValue
1748 *
1749 * @{
1750 */
1751
Gordon Henriksen265f7802008-03-19 01:11:35 +00001752LLVMModuleRef LLVMGetGlobalParent(LLVMValueRef Global);
Chris Lattner25963c62010-01-09 22:27:07 +00001753LLVMBool LLVMIsDeclaration(LLVMValueRef Global);
Gordon Henriksen76a03742007-09-18 03:18:57 +00001754LLVMLinkage LLVMGetLinkage(LLVMValueRef Global);
1755void LLVMSetLinkage(LLVMValueRef Global, LLVMLinkage Linkage);
1756const char *LLVMGetSection(LLVMValueRef Global);
1757void LLVMSetSection(LLVMValueRef Global, const char *Section);
1758LLVMVisibility LLVMGetVisibility(LLVMValueRef Global);
1759void LLVMSetVisibility(LLVMValueRef Global, LLVMVisibility Viz);
Reid Kleckner2fae26f2014-03-05 02:34:23 +00001760LLVMDLLStorageClass LLVMGetDLLStorageClass(LLVMValueRef Global);
1761void LLVMSetDLLStorageClass(LLVMValueRef Global, LLVMDLLStorageClass Class);
Tim Northoverad96d012014-03-10 19:24:35 +00001762LLVMBool LLVMHasUnnamedAddr(LLVMValueRef Global);
1763void LLVMSetUnnamedAddr(LLVMValueRef Global, LLVMBool HasUnnamedAddr);
Anders Waldenborg213a63f2013-10-29 09:02:02 +00001764
1765/**
1766 * @defgroup LLVMCCoreValueWithAlignment Values with alignment
1767 *
1768 * Functions in this group only apply to values with alignment, i.e.
1769 * global variables, load and store instructions.
1770 */
1771
1772/**
1773 * Obtain the preferred alignment of the value.
Peter Zotov9f584e62014-03-05 05:05:34 +00001774 * @see llvm::AllocaInst::getAlignment()
Anders Waldenborg213a63f2013-10-29 09:02:02 +00001775 * @see llvm::LoadInst::getAlignment()
1776 * @see llvm::StoreInst::getAlignment()
1777 * @see llvm::GlobalValue::getAlignment()
1778 */
1779unsigned LLVMGetAlignment(LLVMValueRef V);
1780
1781/**
1782 * Set the preferred alignment of the value.
Peter Zotov9f584e62014-03-05 05:05:34 +00001783 * @see llvm::AllocaInst::setAlignment()
Anders Waldenborg213a63f2013-10-29 09:02:02 +00001784 * @see llvm::LoadInst::setAlignment()
1785 * @see llvm::StoreInst::setAlignment()
1786 * @see llvm::GlobalValue::setAlignment()
1787 */
1788void LLVMSetAlignment(LLVMValueRef V, unsigned Bytes);
1789
1790/**
1791 * @}
1792 */
Gordon Henriksen76a03742007-09-18 03:18:57 +00001793
Gregory Szorc52d26602012-03-21 07:28:27 +00001794/**
1795 * @defgroup LLVMCoreValueConstantGlobalVariable Global Variables
1796 *
1797 * This group contains functions that operate on global variable values.
1798 *
1799 * @see llvm::GlobalVariable
1800 *
1801 * @{
1802 */
Gordon Henriksen76a03742007-09-18 03:18:57 +00001803LLVMValueRef LLVMAddGlobal(LLVMModuleRef M, LLVMTypeRef Ty, const char *Name);
Erick Tryzelaar06894b32010-02-28 09:46:13 +00001804LLVMValueRef LLVMAddGlobalInAddressSpace(LLVMModuleRef M, LLVMTypeRef Ty,
1805 const char *Name,
1806 unsigned AddressSpace);
Gordon Henriksen783f7bb2007-10-08 03:45:09 +00001807LLVMValueRef LLVMGetNamedGlobal(LLVMModuleRef M, const char *Name);
Gordon Henriksen07a45f42008-03-23 22:21:29 +00001808LLVMValueRef LLVMGetFirstGlobal(LLVMModuleRef M);
1809LLVMValueRef LLVMGetLastGlobal(LLVMModuleRef M);
1810LLVMValueRef LLVMGetNextGlobal(LLVMValueRef GlobalVar);
1811LLVMValueRef LLVMGetPreviousGlobal(LLVMValueRef GlobalVar);
Gordon Henriksen76a03742007-09-18 03:18:57 +00001812void LLVMDeleteGlobal(LLVMValueRef GlobalVar);
Gordon Henriksen76a03742007-09-18 03:18:57 +00001813LLVMValueRef LLVMGetInitializer(LLVMValueRef GlobalVar);
1814void LLVMSetInitializer(LLVMValueRef GlobalVar, LLVMValueRef ConstantVal);
Chris Lattner25963c62010-01-09 22:27:07 +00001815LLVMBool LLVMIsThreadLocal(LLVMValueRef GlobalVar);
1816void LLVMSetThreadLocal(LLVMValueRef GlobalVar, LLVMBool IsThreadLocal);
1817LLVMBool LLVMIsGlobalConstant(LLVMValueRef GlobalVar);
1818void LLVMSetGlobalConstant(LLVMValueRef GlobalVar, LLVMBool IsConstant);
Hans Wennborg5ff71202013-04-16 08:58:59 +00001819LLVMThreadLocalMode LLVMGetThreadLocalMode(LLVMValueRef GlobalVar);
1820void LLVMSetThreadLocalMode(LLVMValueRef GlobalVar, LLVMThreadLocalMode Mode);
1821LLVMBool LLVMIsExternallyInitialized(LLVMValueRef GlobalVar);
1822void LLVMSetExternallyInitialized(LLVMValueRef GlobalVar, LLVMBool IsExtInit);
Gordon Henriksen76a03742007-09-18 03:18:57 +00001823
Gregory Szorc52d26602012-03-21 07:28:27 +00001824/**
1825 * @}
1826 */
1827
1828/**
1829 * @defgroup LLVMCoreValueConstantGlobalAlias Global Aliases
1830 *
1831 * This group contains function that operate on global alias values.
1832 *
1833 * @see llvm::GlobalAlias
1834 *
1835 * @{
1836 */
Chris Lattner3d1f5522008-12-17 21:39:50 +00001837LLVMValueRef LLVMAddAlias(LLVMModuleRef M, LLVMTypeRef Ty, LLVMValueRef Aliasee,
1838 const char *Name);
1839
Gregory Szorc34c863a2012-03-21 03:54:29 +00001840/**
1841 * @}
1842 */
1843
1844/**
1845 * @defgroup LLVMCCoreValueFunction Function values
1846 *
1847 * Functions in this group operate on LLVMValueRef instances that
1848 * correspond to llvm::Function instances.
1849 *
1850 * @see llvm::Function
1851 *
1852 * @{
1853 */
1854
1855/**
1856 * Remove a function from its containing module and deletes it.
1857 *
1858 * @see llvm::Function::eraseFromParent()
1859 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00001860void LLVMDeleteFunction(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001861
1862/**
1863 * Obtain the ID number from a function instance.
1864 *
1865 * @see llvm::Function::getIntrinsicID()
1866 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00001867unsigned LLVMGetIntrinsicID(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001868
1869/**
1870 * Obtain the calling function of a function.
1871 *
1872 * The returned value corresponds to the LLVMCallConv enumeration.
1873 *
1874 * @see llvm::Function::getCallingConv()
1875 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00001876unsigned LLVMGetFunctionCallConv(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001877
1878/**
1879 * Set the calling convention of a function.
1880 *
1881 * @see llvm::Function::setCallingConv()
1882 *
1883 * @param Fn Function to operate on
1884 * @param CC LLVMCallConv to set calling convention to
1885 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00001886void LLVMSetFunctionCallConv(LLVMValueRef Fn, unsigned CC);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001887
1888/**
1889 * Obtain the name of the garbage collector to use during code
1890 * generation.
1891 *
1892 * @see llvm::Function::getGC()
1893 */
Gordon Henriksend930f912008-08-17 18:44:35 +00001894const char *LLVMGetGC(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001895
1896/**
1897 * Define the garbage collector to use during code generation.
1898 *
1899 * @see llvm::Function::setGC()
1900 */
Gordon Henriksend930f912008-08-17 18:44:35 +00001901void LLVMSetGC(LLVMValueRef Fn, const char *Name);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001902
1903/**
1904 * Add an attribute to a function.
1905 *
1906 * @see llvm::Function::addAttribute()
1907 */
Duncan Sands7374a012009-05-06 12:21:17 +00001908void LLVMAddFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001909
1910/**
Tom Stellarde8f35e12013-04-16 23:12:43 +00001911 * Add a target-dependent attribute to a fuction
1912 * @see llvm::AttrBuilder::addAttribute()
1913 */
1914void LLVMAddTargetDependentFunctionAttr(LLVMValueRef Fn, const char *A,
1915 const char *V);
1916
1917/**
Gregory Szorc34c863a2012-03-21 03:54:29 +00001918 * Obtain an attribute from a function.
1919 *
1920 * @see llvm::Function::getAttributes()
1921 */
Chris Lattner40cf28d2009-10-12 04:01:02 +00001922LLVMAttribute LLVMGetFunctionAttr(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001923
1924/**
1925 * Remove an attribute from a function.
1926 */
Duncan Sands7374a012009-05-06 12:21:17 +00001927void LLVMRemoveFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00001928
Gregory Szorc34c863a2012-03-21 03:54:29 +00001929/**
1930 * @defgroup LLVMCCoreValueFunctionParameters Function Parameters
1931 *
1932 * Functions in this group relate to arguments/parameters on functions.
1933 *
1934 * Functions in this group expect LLVMValueRef instances that correspond
1935 * to llvm::Function instances.
1936 *
1937 * @{
1938 */
1939
1940/**
1941 * Obtain the number of parameters in a function.
1942 *
1943 * @see llvm::Function::arg_size()
1944 */
Gordon Henriksen265f7802008-03-19 01:11:35 +00001945unsigned LLVMCountParams(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001946
1947/**
1948 * Obtain the parameters in a function.
1949 *
1950 * The takes a pointer to a pre-allocated array of LLVMValueRef that is
1951 * at least LLVMCountParams() long. This array will be filled with
1952 * LLVMValueRef instances which correspond to the parameters the
1953 * function receives. Each LLVMValueRef corresponds to a llvm::Argument
1954 * instance.
1955 *
1956 * @see llvm::Function::arg_begin()
1957 */
Gordon Henriksen265f7802008-03-19 01:11:35 +00001958void LLVMGetParams(LLVMValueRef Fn, LLVMValueRef *Params);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001959
1960/**
1961 * Obtain the parameter at the specified index.
1962 *
1963 * Parameters are indexed from 0.
1964 *
1965 * @see llvm::Function::arg_begin()
1966 */
Gordon Henriksen265f7802008-03-19 01:11:35 +00001967LLVMValueRef LLVMGetParam(LLVMValueRef Fn, unsigned Index);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001968
1969/**
1970 * Obtain the function to which this argument belongs.
1971 *
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +00001972 * Unlike other functions in this group, this one takes an LLVMValueRef
Gregory Szorc34c863a2012-03-21 03:54:29 +00001973 * that corresponds to a llvm::Attribute.
1974 *
1975 * The returned LLVMValueRef is the llvm::Function to which this
1976 * argument belongs.
1977 */
Gordon Henriksen265f7802008-03-19 01:11:35 +00001978LLVMValueRef LLVMGetParamParent(LLVMValueRef Inst);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001979
1980/**
1981 * Obtain the first parameter to a function.
1982 *
1983 * @see llvm::Function::arg_begin()
1984 */
Gordon Henriksen07a45f42008-03-23 22:21:29 +00001985LLVMValueRef LLVMGetFirstParam(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001986
1987/**
1988 * Obtain the last parameter to a function.
1989 *
1990 * @see llvm::Function::arg_end()
1991 */
Gordon Henriksen07a45f42008-03-23 22:21:29 +00001992LLVMValueRef LLVMGetLastParam(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001993
1994/**
1995 * Obtain the next parameter to a function.
1996 *
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +00001997 * This takes an LLVMValueRef obtained from LLVMGetFirstParam() (which is
Gregory Szorc34c863a2012-03-21 03:54:29 +00001998 * actually a wrapped iterator) and obtains the next parameter from the
1999 * underlying iterator.
2000 */
Gordon Henriksen07a45f42008-03-23 22:21:29 +00002001LLVMValueRef LLVMGetNextParam(LLVMValueRef Arg);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002002
2003/**
2004 * Obtain the previous parameter to a function.
2005 *
2006 * This is the opposite of LLVMGetNextParam().
2007 */
Gordon Henriksen07a45f42008-03-23 22:21:29 +00002008LLVMValueRef LLVMGetPreviousParam(LLVMValueRef Arg);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002009
2010/**
2011 * Add an attribute to a function argument.
2012 *
2013 * @see llvm::Argument::addAttr()
2014 */
Devang Patel4c758ea2008-09-25 21:00:45 +00002015void LLVMAddAttribute(LLVMValueRef Arg, LLVMAttribute PA);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002016
2017/**
2018 * Remove an attribute from a function argument.
2019 *
2020 * @see llvm::Argument::removeAttr()
2021 */
Devang Patel4c758ea2008-09-25 21:00:45 +00002022void LLVMRemoveAttribute(LLVMValueRef Arg, LLVMAttribute PA);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002023
2024/**
2025 * Get an attribute from a function argument.
2026 */
Chris Lattner40cf28d2009-10-12 04:01:02 +00002027LLVMAttribute LLVMGetAttribute(LLVMValueRef Arg);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002028
2029/**
2030 * Set the alignment for a function parameter.
2031 *
2032 * @see llvm::Argument::addAttr()
Bill Wendling50d27842012-10-15 20:35:56 +00002033 * @see llvm::AttrBuilder::addAlignmentAttr()
Gregory Szorc34c863a2012-03-21 03:54:29 +00002034 */
Gordon Henriksen2d9cc212008-04-28 17:37:06 +00002035void LLVMSetParamAlignment(LLVMValueRef Arg, unsigned align);
Gordon Henriksen265f7802008-03-19 01:11:35 +00002036
Gregory Szorc34c863a2012-03-21 03:54:29 +00002037/**
2038 * @}
2039 */
2040
2041/**
2042 * @}
2043 */
2044
2045/**
Gregory Szorc52d26602012-03-21 07:28:27 +00002046 * @}
2047 */
2048
2049/**
2050 * @}
2051 */
2052
2053/**
2054 * @defgroup LLVMCCoreValueMetadata Metadata
2055 *
2056 * @{
2057 */
2058
2059/**
2060 * Obtain a MDString value from a context.
2061 *
2062 * The returned instance corresponds to the llvm::MDString class.
2063 *
2064 * The instance is specified by string data of a specified length. The
2065 * string content is copied, so the backing memory can be freed after
2066 * this function returns.
2067 */
2068LLVMValueRef LLVMMDStringInContext(LLVMContextRef C, const char *Str,
2069 unsigned SLen);
2070
2071/**
2072 * Obtain a MDString value from the global context.
2073 */
2074LLVMValueRef LLVMMDString(const char *Str, unsigned SLen);
2075
2076/**
2077 * Obtain a MDNode value from a context.
2078 *
2079 * The returned value corresponds to the llvm::MDNode class.
2080 */
2081LLVMValueRef LLVMMDNodeInContext(LLVMContextRef C, LLVMValueRef *Vals,
2082 unsigned Count);
2083
2084/**
2085 * Obtain a MDNode value from the global context.
2086 */
2087LLVMValueRef LLVMMDNode(LLVMValueRef *Vals, unsigned Count);
2088
2089/**
2090 * Obtain the underlying string from a MDString value.
2091 *
2092 * @param V Instance to obtain string from.
2093 * @param Len Memory address which will hold length of returned string.
2094 * @return String data in MDString.
2095 */
2096const char *LLVMGetMDString(LLVMValueRef V, unsigned* Len);
2097
2098/**
Duncan Sands12ccbe72012-09-19 20:29:39 +00002099 * Obtain the number of operands from an MDNode value.
2100 *
2101 * @param V MDNode to get number of operands from.
2102 * @return Number of operands of the MDNode.
2103 */
2104unsigned LLVMGetMDNodeNumOperands(LLVMValueRef V);
2105
2106/**
2107 * Obtain the given MDNode's operands.
2108 *
2109 * The passed LLVMValueRef pointer should point to enough memory to hold all of
2110 * the operands of the given MDNode (see LLVMGetMDNodeNumOperands) as
2111 * LLVMValueRefs. This memory will be populated with the LLVMValueRefs of the
2112 * MDNode's operands.
2113 *
2114 * @param V MDNode to get the operands from.
2115 * @param Dest Destination array for operands.
2116 */
2117void LLVMGetMDNodeOperands(LLVMValueRef V, LLVMValueRef *Dest);
2118
2119/**
Gregory Szorc52d26602012-03-21 07:28:27 +00002120 * @}
2121 */
2122
2123/**
Gregory Szorc34c863a2012-03-21 03:54:29 +00002124 * @defgroup LLVMCCoreValueBasicBlock Basic Block
2125 *
2126 * A basic block represents a single entry single exit section of code.
2127 * Basic blocks contain a list of instructions which form the body of
2128 * the block.
2129 *
2130 * Basic blocks belong to functions. They have the type of label.
2131 *
2132 * Basic blocks are themselves values. However, the C API models them as
2133 * LLVMBasicBlockRef.
2134 *
2135 * @see llvm::BasicBlock
2136 *
2137 * @{
2138 */
2139
2140/**
2141 * Convert a basic block instance to a value type.
2142 */
Gordon Henriksen07a45f42008-03-23 22:21:29 +00002143LLVMValueRef LLVMBasicBlockAsValue(LLVMBasicBlockRef BB);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002144
2145/**
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +00002146 * Determine whether an LLVMValueRef is itself a basic block.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002147 */
Chris Lattner25963c62010-01-09 22:27:07 +00002148LLVMBool LLVMValueIsBasicBlock(LLVMValueRef Val);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002149
2150/**
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +00002151 * Convert an LLVMValueRef to an LLVMBasicBlockRef instance.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002152 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002153LLVMBasicBlockRef LLVMValueAsBasicBlock(LLVMValueRef Val);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002154
2155/**
2156 * Obtain the function to which a basic block belongs.
2157 *
2158 * @see llvm::BasicBlock::getParent()
2159 */
Gordon Henriksen07a45f42008-03-23 22:21:29 +00002160LLVMValueRef LLVMGetBasicBlockParent(LLVMBasicBlockRef BB);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002161
2162/**
2163 * Obtain the terminator instruction for a basic block.
2164 *
2165 * If the basic block does not have a terminator (it is not well-formed
2166 * if it doesn't), then NULL is returned.
2167 *
2168 * The returned LLVMValueRef corresponds to a llvm::TerminatorInst.
2169 *
2170 * @see llvm::BasicBlock::getTerminator()
2171 */
Nate Begeman43c322b2011-08-23 20:27:46 +00002172LLVMValueRef LLVMGetBasicBlockTerminator(LLVMBasicBlockRef BB);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002173
2174/**
2175 * Obtain the number of basic blocks in a function.
2176 *
2177 * @param Fn Function value to operate on.
2178 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002179unsigned LLVMCountBasicBlocks(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002180
2181/**
2182 * Obtain all of the basic blocks in a function.
2183 *
2184 * This operates on a function value. The BasicBlocks parameter is a
2185 * pointer to a pre-allocated array of LLVMBasicBlockRef of at least
2186 * LLVMCountBasicBlocks() in length. This array is populated with
2187 * LLVMBasicBlockRef instances.
2188 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002189void LLVMGetBasicBlocks(LLVMValueRef Fn, LLVMBasicBlockRef *BasicBlocks);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002190
2191/**
2192 * Obtain the first basic block in a function.
2193 *
2194 * The returned basic block can be used as an iterator. You will likely
2195 * eventually call into LLVMGetNextBasicBlock() with it.
2196 *
2197 * @see llvm::Function::begin()
2198 */
Gordon Henriksen054817c2008-03-19 03:47:18 +00002199LLVMBasicBlockRef LLVMGetFirstBasicBlock(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002200
2201/**
2202 * Obtain the last basic block in a function.
2203 *
2204 * @see llvm::Function::end()
2205 */
Gordon Henriksen054817c2008-03-19 03:47:18 +00002206LLVMBasicBlockRef LLVMGetLastBasicBlock(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002207
2208/**
2209 * Advance a basic block iterator.
2210 */
Gordon Henriksen054817c2008-03-19 03:47:18 +00002211LLVMBasicBlockRef LLVMGetNextBasicBlock(LLVMBasicBlockRef BB);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002212
2213/**
2214 * Go backwards in a basic block iterator.
2215 */
Gordon Henriksen054817c2008-03-19 03:47:18 +00002216LLVMBasicBlockRef LLVMGetPreviousBasicBlock(LLVMBasicBlockRef BB);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002217
2218/**
2219 * Obtain the basic block that corresponds to the entry point of a
2220 * function.
2221 *
2222 * @see llvm::Function::getEntryBlock()
2223 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002224LLVMBasicBlockRef LLVMGetEntryBasicBlock(LLVMValueRef Fn);
Erick Tryzelaar262332f2009-08-14 00:01:31 +00002225
Gregory Szorc34c863a2012-03-21 03:54:29 +00002226/**
2227 * Append a basic block to the end of a function.
2228 *
2229 * @see llvm::BasicBlock::Create()
2230 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +00002231LLVMBasicBlockRef LLVMAppendBasicBlockInContext(LLVMContextRef C,
2232 LLVMValueRef Fn,
2233 const char *Name);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002234
2235/**
2236 * Append a basic block to the end of a function using the global
2237 * context.
2238 *
2239 * @see llvm::BasicBlock::Create()
2240 */
2241LLVMBasicBlockRef LLVMAppendBasicBlock(LLVMValueRef Fn, const char *Name);
2242
2243/**
2244 * Insert a basic block in a function before another basic block.
2245 *
2246 * The function to add to is determined by the function of the
2247 * passed basic block.
2248 *
2249 * @see llvm::BasicBlock::Create()
2250 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +00002251LLVMBasicBlockRef LLVMInsertBasicBlockInContext(LLVMContextRef C,
2252 LLVMBasicBlockRef BB,
2253 const char *Name);
2254
Gregory Szorc34c863a2012-03-21 03:54:29 +00002255/**
2256 * Insert a basic block in a function using the global context.
2257 *
2258 * @see llvm::BasicBlock::Create()
2259 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002260LLVMBasicBlockRef LLVMInsertBasicBlock(LLVMBasicBlockRef InsertBeforeBB,
2261 const char *Name);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002262
2263/**
2264 * Remove a basic block from a function and delete it.
2265 *
2266 * This deletes the basic block from its containing function and deletes
2267 * the basic block itself.
2268 *
2269 * @see llvm::BasicBlock::eraseFromParent()
2270 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002271void LLVMDeleteBasicBlock(LLVMBasicBlockRef BB);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002272
2273/**
2274 * Remove a basic block from a function.
2275 *
2276 * This deletes the basic block from its containing function but keep
2277 * the basic block alive.
2278 *
2279 * @see llvm::BasicBlock::removeFromParent()
2280 */
Nate Begeman43c322b2011-08-23 20:27:46 +00002281void LLVMRemoveBasicBlockFromParent(LLVMBasicBlockRef BB);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002282
Gregory Szorc34c863a2012-03-21 03:54:29 +00002283/**
2284 * Move a basic block to before another one.
2285 *
2286 * @see llvm::BasicBlock::moveBefore()
2287 */
Duncan Sandsb1d61aa2010-07-19 15:31:07 +00002288void LLVMMoveBasicBlockBefore(LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002289
2290/**
2291 * Move a basic block to after another one.
2292 *
2293 * @see llvm::BasicBlock::moveAfter()
2294 */
Duncan Sandsb1d61aa2010-07-19 15:31:07 +00002295void LLVMMoveBasicBlockAfter(LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos);
2296
Gregory Szorc34c863a2012-03-21 03:54:29 +00002297/**
2298 * Obtain the first instruction in a basic block.
2299 *
2300 * The returned LLVMValueRef corresponds to a llvm::Instruction
2301 * instance.
2302 */
Gordon Henriksen054817c2008-03-19 03:47:18 +00002303LLVMValueRef LLVMGetFirstInstruction(LLVMBasicBlockRef BB);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002304
2305/**
2306 * Obtain the last instruction in a basic block.
2307 *
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +00002308 * The returned LLVMValueRef corresponds to an LLVM:Instruction.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002309 */
Gordon Henriksen054817c2008-03-19 03:47:18 +00002310LLVMValueRef LLVMGetLastInstruction(LLVMBasicBlockRef BB);
Nate Begeman43c322b2011-08-23 20:27:46 +00002311
Gregory Szorc34c863a2012-03-21 03:54:29 +00002312/**
2313 * @}
2314 */
2315
2316/**
2317 * @defgroup LLVMCCoreValueInstruction Instructions
2318 *
2319 * Functions in this group relate to the inspection and manipulation of
2320 * individual instructions.
2321 *
2322 * In the C++ API, an instruction is modeled by llvm::Instruction. This
2323 * class has a large number of descendents. llvm::Instruction is a
2324 * llvm::Value and in the C API, instructions are modeled by
2325 * LLVMValueRef.
2326 *
2327 * This group also contains sub-groups which operate on specific
2328 * llvm::Instruction types, e.g. llvm::CallInst.
2329 *
2330 * @{
2331 */
2332
2333/**
2334 * Determine whether an instruction has any metadata attached.
2335 */
2336int LLVMHasMetadata(LLVMValueRef Val);
2337
2338/**
2339 * Return metadata associated with an instruction value.
2340 */
2341LLVMValueRef LLVMGetMetadata(LLVMValueRef Val, unsigned KindID);
2342
2343/**
2344 * Set metadata associated with an instruction value.
2345 */
2346void LLVMSetMetadata(LLVMValueRef Val, unsigned KindID, LLVMValueRef Node);
2347
2348/**
2349 * Obtain the basic block to which an instruction belongs.
2350 *
2351 * @see llvm::Instruction::getParent()
2352 */
Nate Begeman43c322b2011-08-23 20:27:46 +00002353LLVMBasicBlockRef LLVMGetInstructionParent(LLVMValueRef Inst);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002354
2355/**
2356 * Obtain the instruction that occurs after the one specified.
2357 *
2358 * The next instruction will be from the same basic block.
2359 *
2360 * If this is the last instruction in a basic block, NULL will be
2361 * returned.
2362 */
Gordon Henriksen054817c2008-03-19 03:47:18 +00002363LLVMValueRef LLVMGetNextInstruction(LLVMValueRef Inst);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002364
2365/**
Benjamin Kramerbde91762012-06-02 10:20:22 +00002366 * Obtain the instruction that occurred before this one.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002367 *
2368 * If the instruction is the first instruction in a basic block, NULL
2369 * will be returned.
2370 */
Gordon Henriksen054817c2008-03-19 03:47:18 +00002371LLVMValueRef LLVMGetPreviousInstruction(LLVMValueRef Inst);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002372
2373/**
2374 * Remove and delete an instruction.
2375 *
2376 * The instruction specified is removed from its containing building
2377 * block and then deleted.
2378 *
2379 * @see llvm::Instruction::eraseFromParent()
2380 */
Devang Pateldbebc6f2011-10-03 20:59:18 +00002381void LLVMInstructionEraseFromParent(LLVMValueRef Inst);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002382
2383/**
2384 * Obtain the code opcode for an individual instruction.
2385 *
2386 * @see llvm::Instruction::getOpCode()
2387 */
Torok Edwinab6158e2011-10-14 20:37:49 +00002388LLVMOpcode LLVMGetInstructionOpcode(LLVMValueRef Inst);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002389
2390/**
2391 * Obtain the predicate of an instruction.
2392 *
2393 * This is only valid for instructions that correspond to llvm::ICmpInst
2394 * or llvm::ConstantExpr whose opcode is llvm::Instruction::ICmp.
2395 *
2396 * @see llvm::ICmpInst::getPredicate()
2397 */
Torok Edwin60c40de2011-10-06 12:13:20 +00002398LLVMIntPredicate LLVMGetICmpPredicate(LLVMValueRef Inst);
Gordon Henriksen265f7802008-03-19 01:11:35 +00002399
Gregory Szorc34c863a2012-03-21 03:54:29 +00002400/**
2401 * @defgroup LLVMCCoreValueInstructionCall Call Sites and Invocations
2402 *
2403 * Functions in this group apply to instructions that refer to call
2404 * sites and invocations. These correspond to C++ types in the
2405 * llvm::CallInst class tree.
2406 *
2407 * @{
2408 */
2409
2410/**
2411 * Set the calling convention for a call instruction.
2412 *
2413 * This expects an LLVMValueRef that corresponds to a llvm::CallInst or
2414 * llvm::InvokeInst.
2415 *
2416 * @see llvm::CallInst::setCallingConv()
2417 * @see llvm::InvokeInst::setCallingConv()
2418 */
Gordon Henriksen1158c532007-12-29 20:45:00 +00002419void LLVMSetInstructionCallConv(LLVMValueRef Instr, unsigned CC);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002420
2421/**
2422 * Obtain the calling convention for a call instruction.
2423 *
2424 * This is the opposite of LLVMSetInstructionCallConv(). Reads its
2425 * usage.
2426 *
2427 * @see LLVMSetInstructionCallConv()
2428 */
Gordon Henriksen1158c532007-12-29 20:45:00 +00002429unsigned LLVMGetInstructionCallConv(LLVMValueRef Instr);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002430
2431
Devang Patel4c758ea2008-09-25 21:00:45 +00002432void LLVMAddInstrAttribute(LLVMValueRef Instr, unsigned index, LLVMAttribute);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002433void LLVMRemoveInstrAttribute(LLVMValueRef Instr, unsigned index,
Devang Patel4c758ea2008-09-25 21:00:45 +00002434 LLVMAttribute);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002435void LLVMSetInstrParamAlignment(LLVMValueRef Instr, unsigned index,
Gordon Henriksen2d9cc212008-04-28 17:37:06 +00002436 unsigned align);
Gordon Henriksen1158c532007-12-29 20:45:00 +00002437
Gregory Szorc34c863a2012-03-21 03:54:29 +00002438/**
2439 * Obtain whether a call instruction is a tail call.
2440 *
2441 * This only works on llvm::CallInst instructions.
2442 *
2443 * @see llvm::CallInst::isTailCall()
2444 */
Chris Lattner25963c62010-01-09 22:27:07 +00002445LLVMBool LLVMIsTailCall(LLVMValueRef CallInst);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002446
2447/**
2448 * Set whether a call instruction is a tail call.
2449 *
2450 * This only works on llvm::CallInst instructions.
2451 *
2452 * @see llvm::CallInst::setTailCall()
2453 */
Chris Lattner25963c62010-01-09 22:27:07 +00002454void LLVMSetTailCall(LLVMValueRef CallInst, LLVMBool IsTailCall);
Gordon Henrikseneeb65372008-08-30 16:34:54 +00002455
Gregory Szorc34c863a2012-03-21 03:54:29 +00002456/**
2457 * @}
2458 */
2459
2460/**
2461 * Obtain the default destination basic block of a switch instruction.
2462 *
2463 * This only works on llvm::SwitchInst instructions.
2464 *
2465 * @see llvm::SwitchInst::getDefaultDest()
2466 */
Nate Begeman43c322b2011-08-23 20:27:46 +00002467LLVMBasicBlockRef LLVMGetSwitchDefaultDest(LLVMValueRef SwitchInstr);
2468
Gregory Szorc34c863a2012-03-21 03:54:29 +00002469/**
2470 * @defgroup LLVMCCoreValueInstructionPHINode PHI Nodes
2471 *
2472 * Functions in this group only apply to instructions that map to
2473 * llvm::PHINode instances.
2474 *
2475 * @{
2476 */
2477
2478/**
2479 * Add an incoming value to the end of a PHI list.
2480 */
Gordon Henriksen44dd8fb2007-10-08 18:14:39 +00002481void LLVMAddIncoming(LLVMValueRef PhiNode, LLVMValueRef *IncomingValues,
2482 LLVMBasicBlockRef *IncomingBlocks, unsigned Count);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002483
2484/**
2485 * Obtain the number of incoming basic blocks to a PHI node.
2486 */
Gordon Henriksen44dd8fb2007-10-08 18:14:39 +00002487unsigned LLVMCountIncoming(LLVMValueRef PhiNode);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002488
2489/**
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +00002490 * Obtain an incoming value to a PHI node as an LLVMValueRef.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002491 */
Gordon Henriksen44dd8fb2007-10-08 18:14:39 +00002492LLVMValueRef LLVMGetIncomingValue(LLVMValueRef PhiNode, unsigned Index);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002493
2494/**
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +00002495 * Obtain an incoming value to a PHI node as an LLVMBasicBlockRef.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002496 */
Gordon Henriksen44dd8fb2007-10-08 18:14:39 +00002497LLVMBasicBlockRef LLVMGetIncomingBlock(LLVMValueRef PhiNode, unsigned Index);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002498
Gregory Szorc34c863a2012-03-21 03:54:29 +00002499/**
2500 * @}
2501 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002502
Gregory Szorc34c863a2012-03-21 03:54:29 +00002503/**
2504 * @}
2505 */
2506
2507/**
2508 * @}
2509 */
2510
2511/**
2512 * @defgroup LLVMCCoreInstructionBuilder Instruction Builders
2513 *
2514 * An instruction builder represents a point within a basic block and is
2515 * the exclusive means of building instructions using the C interface.
2516 *
2517 * @{
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002518 */
2519
Erick Tryzelaar262332f2009-08-14 00:01:31 +00002520LLVMBuilderRef LLVMCreateBuilderInContext(LLVMContextRef C);
Gordon Henriksena735a9c2008-05-04 12:55:34 +00002521LLVMBuilderRef LLVMCreateBuilder(void);
Gordon Henriksen054817c2008-03-19 03:47:18 +00002522void LLVMPositionBuilder(LLVMBuilderRef Builder, LLVMBasicBlockRef Block,
2523 LLVMValueRef Instr);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002524void LLVMPositionBuilderBefore(LLVMBuilderRef Builder, LLVMValueRef Instr);
2525void LLVMPositionBuilderAtEnd(LLVMBuilderRef Builder, LLVMBasicBlockRef Block);
Gordon Henriksen265f7802008-03-19 01:11:35 +00002526LLVMBasicBlockRef LLVMGetInsertBlock(LLVMBuilderRef Builder);
Chris Lattner3d1f5522008-12-17 21:39:50 +00002527void LLVMClearInsertionPosition(LLVMBuilderRef Builder);
2528void LLVMInsertIntoBuilder(LLVMBuilderRef Builder, LLVMValueRef Instr);
Erick Tryzelaar9813bea2009-08-16 02:20:57 +00002529void LLVMInsertIntoBuilderWithName(LLVMBuilderRef Builder, LLVMValueRef Instr,
2530 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002531void LLVMDisposeBuilder(LLVMBuilderRef Builder);
2532
Erick Tryzelaard8531fa2010-02-28 09:45:59 +00002533/* Metadata */
2534void LLVMSetCurrentDebugLocation(LLVMBuilderRef Builder, LLVMValueRef L);
2535LLVMValueRef LLVMGetCurrentDebugLocation(LLVMBuilderRef Builder);
2536void LLVMSetInstDebugLocation(LLVMBuilderRef Builder, LLVMValueRef Inst);
2537
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002538/* Terminators */
2539LLVMValueRef LLVMBuildRetVoid(LLVMBuilderRef);
2540LLVMValueRef LLVMBuildRet(LLVMBuilderRef, LLVMValueRef V);
Erick Tryzelaarfd529d72009-08-19 08:36:49 +00002541LLVMValueRef LLVMBuildAggregateRet(LLVMBuilderRef, LLVMValueRef *RetVals,
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002542 unsigned N);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002543LLVMValueRef LLVMBuildBr(LLVMBuilderRef, LLVMBasicBlockRef Dest);
2544LLVMValueRef LLVMBuildCondBr(LLVMBuilderRef, LLVMValueRef If,
2545 LLVMBasicBlockRef Then, LLVMBasicBlockRef Else);
2546LLVMValueRef LLVMBuildSwitch(LLVMBuilderRef, LLVMValueRef V,
2547 LLVMBasicBlockRef Else, unsigned NumCases);
Erick Tryzelaar0fb26ef2010-02-28 09:46:06 +00002548LLVMValueRef LLVMBuildIndirectBr(LLVMBuilderRef B, LLVMValueRef Addr,
2549 unsigned NumDests);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002550LLVMValueRef LLVMBuildInvoke(LLVMBuilderRef, LLVMValueRef Fn,
2551 LLVMValueRef *Args, unsigned NumArgs,
2552 LLVMBasicBlockRef Then, LLVMBasicBlockRef Catch,
2553 const char *Name);
Benjamin Kramer5a6568832011-08-19 01:36:54 +00002554LLVMValueRef LLVMBuildLandingPad(LLVMBuilderRef B, LLVMTypeRef Ty,
2555 LLVMValueRef PersFn, unsigned NumClauses,
2556 const char *Name);
Bill Wendlingf891bf82011-07-31 06:30:59 +00002557LLVMValueRef LLVMBuildResume(LLVMBuilderRef B, LLVMValueRef Exn);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002558LLVMValueRef LLVMBuildUnreachable(LLVMBuilderRef);
2559
Gordon Henriksen097102c2008-01-01 05:50:53 +00002560/* Add a case to the switch instruction */
2561void LLVMAddCase(LLVMValueRef Switch, LLVMValueRef OnVal,
2562 LLVMBasicBlockRef Dest);
2563
Erick Tryzelaar0fb26ef2010-02-28 09:46:06 +00002564/* Add a destination to the indirectbr instruction */
2565void LLVMAddDestination(LLVMValueRef IndirectBr, LLVMBasicBlockRef Dest);
2566
Bill Wendlingfae14752011-08-12 20:24:12 +00002567/* Add a catch or filter clause to the landingpad instruction */
2568void LLVMAddClause(LLVMValueRef LandingPad, LLVMValueRef ClauseVal);
2569
2570/* Set the 'cleanup' flag in the landingpad instruction */
2571void LLVMSetCleanup(LLVMValueRef LandingPad, LLVMBool Val);
2572
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002573/* Arithmetic */
2574LLVMValueRef LLVMBuildAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2575 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002576LLVMValueRef LLVMBuildNSWAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2577 const char *Name);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +00002578LLVMValueRef LLVMBuildNUWAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2579 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002580LLVMValueRef LLVMBuildFAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2581 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002582LLVMValueRef LLVMBuildSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2583 const char *Name);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +00002584LLVMValueRef LLVMBuildNSWSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2585 const char *Name);
2586LLVMValueRef LLVMBuildNUWSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2587 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002588LLVMValueRef LLVMBuildFSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2589 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002590LLVMValueRef LLVMBuildMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2591 const char *Name);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +00002592LLVMValueRef LLVMBuildNSWMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2593 const char *Name);
2594LLVMValueRef LLVMBuildNUWMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2595 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002596LLVMValueRef LLVMBuildFMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2597 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002598LLVMValueRef LLVMBuildUDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2599 const char *Name);
2600LLVMValueRef LLVMBuildSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2601 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002602LLVMValueRef LLVMBuildExactSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2603 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002604LLVMValueRef LLVMBuildFDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2605 const char *Name);
2606LLVMValueRef LLVMBuildURem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2607 const char *Name);
2608LLVMValueRef LLVMBuildSRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2609 const char *Name);
2610LLVMValueRef LLVMBuildFRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2611 const char *Name);
2612LLVMValueRef LLVMBuildShl(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2613 const char *Name);
2614LLVMValueRef LLVMBuildLShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2615 const char *Name);
2616LLVMValueRef LLVMBuildAShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2617 const char *Name);
2618LLVMValueRef LLVMBuildAnd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2619 const char *Name);
2620LLVMValueRef LLVMBuildOr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2621 const char *Name);
2622LLVMValueRef LLVMBuildXor(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2623 const char *Name);
Erick Tryzelaar31831792010-02-28 05:51:27 +00002624LLVMValueRef LLVMBuildBinOp(LLVMBuilderRef B, LLVMOpcode Op,
2625 LLVMValueRef LHS, LLVMValueRef RHS,
2626 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002627LLVMValueRef LLVMBuildNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +00002628LLVMValueRef LLVMBuildNSWNeg(LLVMBuilderRef B, LLVMValueRef V,
2629 const char *Name);
2630LLVMValueRef LLVMBuildNUWNeg(LLVMBuilderRef B, LLVMValueRef V,
2631 const char *Name);
Dan Gohmanf919bd62009-09-28 21:51:41 +00002632LLVMValueRef LLVMBuildFNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002633LLVMValueRef LLVMBuildNot(LLVMBuilderRef, LLVMValueRef V, const char *Name);
2634
2635/* Memory */
2636LLVMValueRef LLVMBuildMalloc(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
2637LLVMValueRef LLVMBuildArrayMalloc(LLVMBuilderRef, LLVMTypeRef Ty,
2638 LLVMValueRef Val, const char *Name);
2639LLVMValueRef LLVMBuildAlloca(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
2640LLVMValueRef LLVMBuildArrayAlloca(LLVMBuilderRef, LLVMTypeRef Ty,
2641 LLVMValueRef Val, const char *Name);
2642LLVMValueRef LLVMBuildFree(LLVMBuilderRef, LLVMValueRef PointerVal);
2643LLVMValueRef LLVMBuildLoad(LLVMBuilderRef, LLVMValueRef PointerVal,
2644 const char *Name);
2645LLVMValueRef LLVMBuildStore(LLVMBuilderRef, LLVMValueRef Val, LLVMValueRef Ptr);
2646LLVMValueRef LLVMBuildGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
2647 LLVMValueRef *Indices, unsigned NumIndices,
2648 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002649LLVMValueRef LLVMBuildInBoundsGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
2650 LLVMValueRef *Indices, unsigned NumIndices,
2651 const char *Name);
2652LLVMValueRef LLVMBuildStructGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
2653 unsigned Idx, const char *Name);
2654LLVMValueRef LLVMBuildGlobalString(LLVMBuilderRef B, const char *Str,
2655 const char *Name);
2656LLVMValueRef LLVMBuildGlobalStringPtr(LLVMBuilderRef B, const char *Str,
2657 const char *Name);
Chris Lattner2cc6f9d2012-03-22 03:54:15 +00002658LLVMBool LLVMGetVolatile(LLVMValueRef MemoryAccessInst);
2659void LLVMSetVolatile(LLVMValueRef MemoryAccessInst, LLVMBool IsVolatile);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002660
2661/* Casts */
2662LLVMValueRef LLVMBuildTrunc(LLVMBuilderRef, LLVMValueRef Val,
2663 LLVMTypeRef DestTy, const char *Name);
2664LLVMValueRef LLVMBuildZExt(LLVMBuilderRef, LLVMValueRef Val,
2665 LLVMTypeRef DestTy, const char *Name);
2666LLVMValueRef LLVMBuildSExt(LLVMBuilderRef, LLVMValueRef Val,
2667 LLVMTypeRef DestTy, const char *Name);
2668LLVMValueRef LLVMBuildFPToUI(LLVMBuilderRef, LLVMValueRef Val,
2669 LLVMTypeRef DestTy, const char *Name);
2670LLVMValueRef LLVMBuildFPToSI(LLVMBuilderRef, LLVMValueRef Val,
2671 LLVMTypeRef DestTy, const char *Name);
2672LLVMValueRef LLVMBuildUIToFP(LLVMBuilderRef, LLVMValueRef Val,
2673 LLVMTypeRef DestTy, const char *Name);
2674LLVMValueRef LLVMBuildSIToFP(LLVMBuilderRef, LLVMValueRef Val,
2675 LLVMTypeRef DestTy, const char *Name);
2676LLVMValueRef LLVMBuildFPTrunc(LLVMBuilderRef, LLVMValueRef Val,
2677 LLVMTypeRef DestTy, const char *Name);
2678LLVMValueRef LLVMBuildFPExt(LLVMBuilderRef, LLVMValueRef Val,
2679 LLVMTypeRef DestTy, const char *Name);
2680LLVMValueRef LLVMBuildPtrToInt(LLVMBuilderRef, LLVMValueRef Val,
2681 LLVMTypeRef DestTy, const char *Name);
2682LLVMValueRef LLVMBuildIntToPtr(LLVMBuilderRef, LLVMValueRef Val,
2683 LLVMTypeRef DestTy, const char *Name);
2684LLVMValueRef LLVMBuildBitCast(LLVMBuilderRef, LLVMValueRef Val,
2685 LLVMTypeRef DestTy, const char *Name);
Matt Arsenaultb03bd4d2013-11-15 01:34:59 +00002686LLVMValueRef LLVMBuildAddrSpaceCast(LLVMBuilderRef, LLVMValueRef Val,
2687 LLVMTypeRef DestTy, const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002688LLVMValueRef LLVMBuildZExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
2689 LLVMTypeRef DestTy, const char *Name);
2690LLVMValueRef LLVMBuildSExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
2691 LLVMTypeRef DestTy, const char *Name);
2692LLVMValueRef LLVMBuildTruncOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
2693 LLVMTypeRef DestTy, const char *Name);
Erick Tryzelaar31831792010-02-28 05:51:27 +00002694LLVMValueRef LLVMBuildCast(LLVMBuilderRef B, LLVMOpcode Op, LLVMValueRef Val,
2695 LLVMTypeRef DestTy, const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002696LLVMValueRef LLVMBuildPointerCast(LLVMBuilderRef, LLVMValueRef Val,
2697 LLVMTypeRef DestTy, const char *Name);
Duncan Sands9d786d72009-11-23 10:49:03 +00002698LLVMValueRef LLVMBuildIntCast(LLVMBuilderRef, LLVMValueRef Val, /*Signed cast!*/
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002699 LLVMTypeRef DestTy, const char *Name);
2700LLVMValueRef LLVMBuildFPCast(LLVMBuilderRef, LLVMValueRef Val,
2701 LLVMTypeRef DestTy, const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002702
2703/* Comparisons */
2704LLVMValueRef LLVMBuildICmp(LLVMBuilderRef, LLVMIntPredicate Op,
2705 LLVMValueRef LHS, LLVMValueRef RHS,
2706 const char *Name);
2707LLVMValueRef LLVMBuildFCmp(LLVMBuilderRef, LLVMRealPredicate Op,
2708 LLVMValueRef LHS, LLVMValueRef RHS,
2709 const char *Name);
2710
2711/* Miscellaneous instructions */
2712LLVMValueRef LLVMBuildPhi(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
2713LLVMValueRef LLVMBuildCall(LLVMBuilderRef, LLVMValueRef Fn,
2714 LLVMValueRef *Args, unsigned NumArgs,
2715 const char *Name);
2716LLVMValueRef LLVMBuildSelect(LLVMBuilderRef, LLVMValueRef If,
2717 LLVMValueRef Then, LLVMValueRef Else,
2718 const char *Name);
2719LLVMValueRef LLVMBuildVAArg(LLVMBuilderRef, LLVMValueRef List, LLVMTypeRef Ty,
2720 const char *Name);
2721LLVMValueRef LLVMBuildExtractElement(LLVMBuilderRef, LLVMValueRef VecVal,
2722 LLVMValueRef Index, const char *Name);
2723LLVMValueRef LLVMBuildInsertElement(LLVMBuilderRef, LLVMValueRef VecVal,
2724 LLVMValueRef EltVal, LLVMValueRef Index,
2725 const char *Name);
2726LLVMValueRef LLVMBuildShuffleVector(LLVMBuilderRef, LLVMValueRef V1,
2727 LLVMValueRef V2, LLVMValueRef Mask,
2728 const char *Name);
Dan Gohmand5104a52008-11-03 22:55:43 +00002729LLVMValueRef LLVMBuildExtractValue(LLVMBuilderRef, LLVMValueRef AggVal,
2730 unsigned Index, const char *Name);
2731LLVMValueRef LLVMBuildInsertValue(LLVMBuilderRef, LLVMValueRef AggVal,
2732 LLVMValueRef EltVal, unsigned Index,
2733 const char *Name);
Gordon Henriksen76a03742007-09-18 03:18:57 +00002734
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002735LLVMValueRef LLVMBuildIsNull(LLVMBuilderRef, LLVMValueRef Val,
2736 const char *Name);
2737LLVMValueRef LLVMBuildIsNotNull(LLVMBuilderRef, LLVMValueRef Val,
2738 const char *Name);
2739LLVMValueRef LLVMBuildPtrDiff(LLVMBuilderRef, LLVMValueRef LHS,
2740 LLVMValueRef RHS, const char *Name);
Filip Pizlo0d3f7ec2013-11-20 00:07:49 +00002741LLVMValueRef LLVMBuildFence(LLVMBuilderRef B, LLVMAtomicOrdering ordering,
2742 LLVMBool singleThread, const char *Name);
2743LLVMValueRef LLVMBuildAtomicRMW(LLVMBuilderRef B, LLVMAtomicRMWBinOp op,
NAKAMURA Takumia3a81352013-10-23 17:56:29 +00002744 LLVMValueRef PTR, LLVMValueRef Val,
2745 LLVMAtomicOrdering ordering,
Carlo Kok8c6719b2013-04-23 13:21:19 +00002746 LLVMBool singleThread);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002747
Gregory Szorc34c863a2012-03-21 03:54:29 +00002748/**
2749 * @}
2750 */
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00002751
Gregory Szorc34c863a2012-03-21 03:54:29 +00002752/**
2753 * @defgroup LLVMCCoreModuleProvider Module Providers
2754 *
2755 * @{
2756 */
Gordon Henriksen0a68fe22007-12-12 01:04:30 +00002757
Gregory Szorc34c863a2012-03-21 03:54:29 +00002758/**
2759 * Changes the type of M so it can be passed to FunctionPassManagers and the
Jeffrey Yasskin091217b2010-01-27 20:34:15 +00002760 * JIT. They take ModuleProviders for historical reasons.
Gordon Henriksen0a68fe22007-12-12 01:04:30 +00002761 */
2762LLVMModuleProviderRef
2763LLVMCreateModuleProviderForExistingModule(LLVMModuleRef M);
2764
Gregory Szorc34c863a2012-03-21 03:54:29 +00002765/**
2766 * Destroys the module M.
Gordon Henriksen0a68fe22007-12-12 01:04:30 +00002767 */
Jeffrey Yasskin091217b2010-01-27 20:34:15 +00002768void LLVMDisposeModuleProvider(LLVMModuleProviderRef M);
Gordon Henriksen0a68fe22007-12-12 01:04:30 +00002769
Gregory Szorc34c863a2012-03-21 03:54:29 +00002770/**
2771 * @}
2772 */
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00002773
Gregory Szorc34c863a2012-03-21 03:54:29 +00002774/**
2775 * @defgroup LLVMCCoreMemoryBuffers Memory Buffers
2776 *
2777 * @{
2778 */
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00002779
Chris Lattner25963c62010-01-09 22:27:07 +00002780LLVMBool LLVMCreateMemoryBufferWithContentsOfFile(const char *Path,
2781 LLVMMemoryBufferRef *OutMemBuf,
2782 char **OutMessage);
2783LLVMBool LLVMCreateMemoryBufferWithSTDIN(LLVMMemoryBufferRef *OutMemBuf,
2784 char **OutMessage);
Bill Wendling526276a2013-02-14 19:11:28 +00002785LLVMMemoryBufferRef LLVMCreateMemoryBufferWithMemoryRange(const char *InputData,
2786 size_t InputDataLength,
2787 const char *BufferName,
Bill Wendlingc9baa962013-02-14 19:39:14 +00002788 LLVMBool RequiresNullTerminator);
Bill Wendling526276a2013-02-14 19:11:28 +00002789LLVMMemoryBufferRef LLVMCreateMemoryBufferWithMemoryRangeCopy(const char *InputData,
2790 size_t InputDataLength,
2791 const char *BufferName);
Tom Stellard62c03202013-04-18 19:50:53 +00002792const char *LLVMGetBufferStart(LLVMMemoryBufferRef MemBuf);
Tom Stellardb7fb7242013-04-16 23:12:51 +00002793size_t LLVMGetBufferSize(LLVMMemoryBufferRef MemBuf);
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00002794void LLVMDisposeMemoryBuffer(LLVMMemoryBufferRef MemBuf);
2795
Gregory Szorc34c863a2012-03-21 03:54:29 +00002796/**
2797 * @}
2798 */
2799
2800/**
2801 * @defgroup LLVMCCorePassRegistry Pass Registry
2802 *
2803 * @{
2804 */
Owen Anderson4698c5d2010-10-07 17:55:47 +00002805
2806/** Return the global pass registry, for use with initialization functions.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002807 @see llvm::PassRegistry::getPassRegistry */
Owen Anderson4698c5d2010-10-07 17:55:47 +00002808LLVMPassRegistryRef LLVMGetGlobalPassRegistry(void);
Gordon Henriksen878114b2008-03-16 04:20:44 +00002809
Gregory Szorc34c863a2012-03-21 03:54:29 +00002810/**
2811 * @}
2812 */
2813
2814/**
2815 * @defgroup LLVMCCorePassManagers Pass Managers
2816 *
2817 * @{
2818 */
Gordon Henriksen878114b2008-03-16 04:20:44 +00002819
2820/** Constructs a new whole-module pass pipeline. This type of pipeline is
2821 suitable for link-time optimization and whole-module transformations.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002822 @see llvm::PassManager::PassManager */
Gordon Henriksena735a9c2008-05-04 12:55:34 +00002823LLVMPassManagerRef LLVMCreatePassManager(void);
Gordon Henriksen878114b2008-03-16 04:20:44 +00002824
2825/** Constructs a new function-by-function pass pipeline over the module
2826 provider. It does not take ownership of the module provider. This type of
2827 pipeline is suitable for code generation and JIT compilation tasks.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002828 @see llvm::FunctionPassManager::FunctionPassManager */
Erick Tryzelaarad0e0cb2010-03-02 23:58:54 +00002829LLVMPassManagerRef LLVMCreateFunctionPassManagerForModule(LLVMModuleRef M);
2830
2831/** Deprecated: Use LLVMCreateFunctionPassManagerForModule instead. */
Gordon Henriksen878114b2008-03-16 04:20:44 +00002832LLVMPassManagerRef LLVMCreateFunctionPassManager(LLVMModuleProviderRef MP);
2833
2834/** Initializes, executes on the provided module, and finalizes all of the
2835 passes scheduled in the pass manager. Returns 1 if any of the passes
Gregory Szorc34c863a2012-03-21 03:54:29 +00002836 modified the module, 0 otherwise.
2837 @see llvm::PassManager::run(Module&) */
Chris Lattner25963c62010-01-09 22:27:07 +00002838LLVMBool LLVMRunPassManager(LLVMPassManagerRef PM, LLVMModuleRef M);
Gordon Henriksen878114b2008-03-16 04:20:44 +00002839
2840/** Initializes all of the function passes scheduled in the function pass
2841 manager. Returns 1 if any of the passes modified the module, 0 otherwise.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002842 @see llvm::FunctionPassManager::doInitialization */
Chris Lattner25963c62010-01-09 22:27:07 +00002843LLVMBool LLVMInitializeFunctionPassManager(LLVMPassManagerRef FPM);
Gordon Henriksen878114b2008-03-16 04:20:44 +00002844
2845/** Executes all of the function passes scheduled in the function pass manager
2846 on the provided function. Returns 1 if any of the passes modified the
2847 function, false otherwise.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002848 @see llvm::FunctionPassManager::run(Function&) */
Chris Lattner25963c62010-01-09 22:27:07 +00002849LLVMBool LLVMRunFunctionPassManager(LLVMPassManagerRef FPM, LLVMValueRef F);
Gordon Henriksen878114b2008-03-16 04:20:44 +00002850
2851/** Finalizes all of the function passes scheduled in in the function pass
2852 manager. Returns 1 if any of the passes modified the module, 0 otherwise.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002853 @see llvm::FunctionPassManager::doFinalization */
Chris Lattner25963c62010-01-09 22:27:07 +00002854LLVMBool LLVMFinalizeFunctionPassManager(LLVMPassManagerRef FPM);
Gordon Henriksen878114b2008-03-16 04:20:44 +00002855
2856/** Frees the memory of a pass pipeline. For function pipelines, does not free
2857 the module provider.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002858 @see llvm::PassManagerBase::~PassManagerBase. */
Gordon Henriksen878114b2008-03-16 04:20:44 +00002859void LLVMDisposePassManager(LLVMPassManagerRef PM);
2860
Gregory Szorc34c863a2012-03-21 03:54:29 +00002861/**
2862 * @}
2863 */
2864
2865/**
Duncan Sands1cba0a82013-02-17 16:35:51 +00002866 * @defgroup LLVMCCoreThreading Threading
2867 *
2868 * Handle the structures needed to make LLVM safe for multithreading.
2869 *
2870 * @{
2871 */
2872
Chandler Carruth39cd2162014-06-27 15:13:01 +00002873/** Deprecated: Multi-threading can only be enabled/disabled with the compile
2874 time define LLVM_ENABLE_THREADS. This function always returns
2875 LLVMIsMultithreaded(). */
Benjamin Kramer325ec892013-10-23 16:57:34 +00002876LLVMBool LLVMStartMultithreaded(void);
Duncan Sands1cba0a82013-02-17 16:35:51 +00002877
Chandler Carruth39cd2162014-06-27 15:13:01 +00002878/** Deprecated: Multi-threading can only be enabled/disabled with the compile
2879 time define LLVM_ENABLE_THREADS. */
Benjamin Kramer325ec892013-10-23 16:57:34 +00002880void LLVMStopMultithreaded(void);
Duncan Sands1cba0a82013-02-17 16:35:51 +00002881
2882/** Check whether LLVM is executing in thread-safe mode or not.
2883 @see llvm::llvm_is_multithreaded */
Benjamin Kramer325ec892013-10-23 16:57:34 +00002884LLVMBool LLVMIsMultithreaded(void);
Duncan Sands1cba0a82013-02-17 16:35:51 +00002885
2886/**
2887 * @}
2888 */
2889
2890/**
Gregory Szorc34c863a2012-03-21 03:54:29 +00002891 * @}
2892 */
2893
2894/**
2895 * @}
2896 */
Gordon Henriksen878114b2008-03-16 04:20:44 +00002897
Gordon Henriksen76a03742007-09-18 03:18:57 +00002898#ifdef __cplusplus
2899}
Evan Cheng2e254d02013-04-04 17:40:53 +00002900#endif /* !defined(__cplusplus) */
Gordon Henriksen7330acd2007-10-05 23:59:36 +00002901
Evan Cheng2e254d02013-04-04 17:40:53 +00002902#endif /* !defined(LLVM_C_CORE_H) */