blob: 764dbfac3427d4a8a821c60048ac5c924ff3a3c4 [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.
Peter Collingbourne58af6d12015-06-15 22:16:51 +0000164 LLVMSanitizeAddressAttribute = 1ULL << 32,
165 LLVMStackProtectStrongAttribute = 1ULL<<35,
166 LLVMColdAttribute = 1ULL << 40,
167 LLVMOptimizeNoneAttribute = 1ULL << 42,
168 LLVMInAllocaAttribute = 1ULL << 43,
169 LLVMNonNullAttribute = 1ULL << 44,
170 LLVMJumpTableAttribute = 1ULL << 45,
171 LLVMConvergentAttribute = 1ULL << 46,
172 LLVMSafeStackAttribute = 1ULL << 47,
Nuno Lopesdef4229972012-09-02 14:19:21 +0000173 */
Devang Patel4c758ea2008-09-25 21:00:45 +0000174} LLVMAttribute;
Gordon Henriksen2d9cc212008-04-28 17:37:06 +0000175
176typedef enum {
Bill Wendlingda52cec2010-02-15 20:53:17 +0000177 /* Terminator Instructions */
Chris Lattner40cf28d2009-10-12 04:01:02 +0000178 LLVMRet = 1,
179 LLVMBr = 2,
180 LLVMSwitch = 3,
Bill Wendling07d6d762010-02-15 20:50:51 +0000181 LLVMIndirectBr = 4,
182 LLVMInvoke = 5,
Bill Wendling46ffaa92011-08-02 06:20:17 +0000183 /* removed 6 due to API changes */
Bill Wendling2641d132011-07-27 21:00:28 +0000184 LLVMUnreachable = 7,
Bill Wendling07d6d762010-02-15 20:50:51 +0000185
Bill Wendlingda52cec2010-02-15 20:53:17 +0000186 /* Standard Binary Operators */
Bill Wendling2641d132011-07-27 21:00:28 +0000187 LLVMAdd = 8,
188 LLVMFAdd = 9,
189 LLVMSub = 10,
190 LLVMFSub = 11,
191 LLVMMul = 12,
192 LLVMFMul = 13,
193 LLVMUDiv = 14,
194 LLVMSDiv = 15,
195 LLVMFDiv = 16,
196 LLVMURem = 17,
197 LLVMSRem = 18,
198 LLVMFRem = 19,
Bill Wendling07d6d762010-02-15 20:50:51 +0000199
Bill Wendlingda52cec2010-02-15 20:53:17 +0000200 /* Logical Operators */
Bill Wendling2641d132011-07-27 21:00:28 +0000201 LLVMShl = 20,
202 LLVMLShr = 21,
203 LLVMAShr = 22,
204 LLVMAnd = 23,
205 LLVMOr = 24,
206 LLVMXor = 25,
Bill Wendling07d6d762010-02-15 20:50:51 +0000207
Bill Wendlingda52cec2010-02-15 20:53:17 +0000208 /* Memory Operators */
Bill Wendling2641d132011-07-27 21:00:28 +0000209 LLVMAlloca = 26,
210 LLVMLoad = 27,
211 LLVMStore = 28,
212 LLVMGetElementPtr = 29,
Bill Wendling07d6d762010-02-15 20:50:51 +0000213
Bill Wendlingda52cec2010-02-15 20:53:17 +0000214 /* Cast Operators */
Bill Wendling2641d132011-07-27 21:00:28 +0000215 LLVMTrunc = 30,
216 LLVMZExt = 31,
217 LLVMSExt = 32,
218 LLVMFPToUI = 33,
219 LLVMFPToSI = 34,
220 LLVMUIToFP = 35,
221 LLVMSIToFP = 36,
222 LLVMFPTrunc = 37,
223 LLVMFPExt = 38,
224 LLVMPtrToInt = 39,
225 LLVMIntToPtr = 40,
226 LLVMBitCast = 41,
Matt Arsenaultb03bd4d2013-11-15 01:34:59 +0000227 LLVMAddrSpaceCast = 60,
Bill Wendling07d6d762010-02-15 20:50:51 +0000228
Bill Wendlingda52cec2010-02-15 20:53:17 +0000229 /* Other Operators */
Bill Wendling2641d132011-07-27 21:00:28 +0000230 LLVMICmp = 42,
231 LLVMFCmp = 43,
232 LLVMPHI = 44,
233 LLVMCall = 45,
234 LLVMSelect = 46,
Torok Edwin05dc9d62011-10-06 12:39:34 +0000235 LLVMUserOp1 = 47,
236 LLVMUserOp2 = 48,
Bill Wendling2641d132011-07-27 21:00:28 +0000237 LLVMVAArg = 49,
238 LLVMExtractElement = 50,
239 LLVMInsertElement = 51,
240 LLVMShuffleVector = 52,
241 LLVMExtractValue = 53,
242 LLVMInsertValue = 54,
Eli Friedman4fc946c2011-07-27 18:59:19 +0000243
244 /* Atomic operators */
Bill Wendling2641d132011-07-27 21:00:28 +0000245 LLVMFence = 55,
Eli Friedmanc9a551e2011-07-28 21:48:00 +0000246 LLVMAtomicCmpXchg = 56,
Bill Wendlingf891bf82011-07-31 06:30:59 +0000247 LLVMAtomicRMW = 57,
248
249 /* Exception Handling Operators */
Bill Wendlingfae14752011-08-12 20:24:12 +0000250 LLVMResume = 58,
David Majnemer654e1302015-07-31 17:58:14 +0000251 LLVMLandingPad = 59,
252 LLVMCleanupRet = 61,
253 LLVMCatchRet = 62,
254 LLVMCatchPad = 63,
255 LLVMTerminatePad = 64,
256 LLVMCleanupPad = 65,
257 LLVMCatchEndPad = 66
Bill Wendling2641d132011-07-27 21:00:28 +0000258
Chris Lattner40cf28d2009-10-12 04:01:02 +0000259} LLVMOpcode;
260
261typedef enum {
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000262 LLVMVoidTypeKind, /**< type with no size */
Dan Gohman518cda42011-12-17 00:04:22 +0000263 LLVMHalfTypeKind, /**< 16 bit floating point type */
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000264 LLVMFloatTypeKind, /**< 32 bit floating point type */
265 LLVMDoubleTypeKind, /**< 64 bit floating point type */
266 LLVMX86_FP80TypeKind, /**< 80 bit floating point type (X87) */
267 LLVMFP128TypeKind, /**< 128 bit floating point type (112-bit mantissa)*/
268 LLVMPPC_FP128TypeKind, /**< 128 bit floating point type (two 64-bits) */
269 LLVMLabelTypeKind, /**< Labels */
270 LLVMIntegerTypeKind, /**< Arbitrary bit width integers */
271 LLVMFunctionTypeKind, /**< Functions */
272 LLVMStructTypeKind, /**< Structures */
273 LLVMArrayTypeKind, /**< Arrays */
274 LLVMPointerTypeKind, /**< Pointers */
Chris Lattnerdac44ec2009-07-15 22:00:31 +0000275 LLVMVectorTypeKind, /**< SIMD 'packed' format, or other vector type */
Dale Johannesenbaa5d042010-09-10 20:55:01 +0000276 LLVMMetadataTypeKind, /**< Metadata */
277 LLVMX86_MMXTypeKind /**< X86 MMX */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000278} LLVMTypeKind;
279
280typedef enum {
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000281 LLVMExternalLinkage, /**< Externally visible function */
Chris Lattner2dba0f02009-04-13 06:25:37 +0000282 LLVMAvailableExternallyLinkage,
Duncan Sands12da8ce2009-03-07 15:45:40 +0000283 LLVMLinkOnceAnyLinkage, /**< Keep one copy of function when linking (inline)*/
284 LLVMLinkOnceODRLinkage, /**< Same, but only replaced by something
285 equivalent. */
Rafael Espindola716e7402013-11-01 17:09:14 +0000286 LLVMLinkOnceODRAutoHideLinkage, /**< Obsolete */
Duncan Sands12da8ce2009-03-07 15:45:40 +0000287 LLVMWeakAnyLinkage, /**< Keep one copy of function when linking (weak) */
288 LLVMWeakODRLinkage, /**< Same, but only replaced by something
289 equivalent. */
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000290 LLVMAppendingLinkage, /**< Special purpose, only applies to global arrays */
291 LLVMInternalLinkage, /**< Rename collisions when linking (static
292 functions) */
Duncan Sands12da8ce2009-03-07 15:45:40 +0000293 LLVMPrivateLinkage, /**< Like Internal, but omit from symbol table */
Nico Rieck7157bb72014-01-14 15:22:47 +0000294 LLVMDLLImportLinkage, /**< Obsolete */
295 LLVMDLLExportLinkage, /**< Obsolete */
Duncan Sandse2881052009-03-11 08:08:06 +0000296 LLVMExternalWeakLinkage,/**< ExternalWeak linkage description */
Jeffrey Yasskin091217b2010-01-27 20:34:15 +0000297 LLVMGhostLinkage, /**< Obsolete */
Bill Wendling002b1672009-07-20 18:22:52 +0000298 LLVMCommonLinkage, /**< Tentative definitions */
Bill Wendling03bcd6e2010-07-01 21:55:59 +0000299 LLVMLinkerPrivateLinkage, /**< Like Private, but linker removes. */
Bill Wendling34bc34e2012-08-17 18:33:14 +0000300 LLVMLinkerPrivateWeakLinkage /**< Like LinkerPrivate, but is weak. */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000301} LLVMLinkage;
302
303typedef enum {
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000304 LLVMDefaultVisibility, /**< The GV is visible */
305 LLVMHiddenVisibility, /**< The GV is hidden */
306 LLVMProtectedVisibility /**< The GV is protected */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000307} LLVMVisibility;
308
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000309typedef enum {
Reid Kleckner2fae26f2014-03-05 02:34:23 +0000310 LLVMDefaultStorageClass = 0,
311 LLVMDLLImportStorageClass = 1, /**< Function to be imported from DLL. */
312 LLVMDLLExportStorageClass = 2 /**< Function to be accessible from DLL. */
313} LLVMDLLStorageClass;
314
315typedef enum {
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000316 LLVMCCallConv = 0,
317 LLVMFastCallConv = 8,
318 LLVMColdCallConv = 9,
Filip Pizlodfc9b582013-11-09 06:00:03 +0000319 LLVMWebKitJSCallConv = 12,
320 LLVMAnyRegCallConv = 13,
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000321 LLVMX86StdcallCallConv = 64,
322 LLVMX86FastcallCallConv = 65
323} LLVMCallConv;
324
325typedef enum {
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000326 LLVMIntEQ = 32, /**< equal */
327 LLVMIntNE, /**< not equal */
328 LLVMIntUGT, /**< unsigned greater than */
329 LLVMIntUGE, /**< unsigned greater or equal */
330 LLVMIntULT, /**< unsigned less than */
331 LLVMIntULE, /**< unsigned less or equal */
332 LLVMIntSGT, /**< signed greater than */
333 LLVMIntSGE, /**< signed greater or equal */
334 LLVMIntSLT, /**< signed less than */
335 LLVMIntSLE /**< signed less or equal */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000336} LLVMIntPredicate;
337
338typedef enum {
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000339 LLVMRealPredicateFalse, /**< Always false (always folded) */
340 LLVMRealOEQ, /**< True if ordered and equal */
341 LLVMRealOGT, /**< True if ordered and greater than */
342 LLVMRealOGE, /**< True if ordered and greater than or equal */
343 LLVMRealOLT, /**< True if ordered and less than */
344 LLVMRealOLE, /**< True if ordered and less than or equal */
345 LLVMRealONE, /**< True if ordered and operands are unequal */
346 LLVMRealORD, /**< True if ordered (no nans) */
347 LLVMRealUNO, /**< True if unordered: isnan(X) | isnan(Y) */
348 LLVMRealUEQ, /**< True if unordered or equal */
349 LLVMRealUGT, /**< True if unordered or greater than */
350 LLVMRealUGE, /**< True if unordered, greater than, or equal */
351 LLVMRealULT, /**< True if unordered or less than */
352 LLVMRealULE, /**< True if unordered, less than, or equal */
353 LLVMRealUNE, /**< True if unordered or not equal */
354 LLVMRealPredicateTrue /**< Always true (always folded) */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000355} LLVMRealPredicate;
356
Bill Wendlingfae14752011-08-12 20:24:12 +0000357typedef enum {
358 LLVMLandingPadCatch, /**< A catch clause */
359 LLVMLandingPadFilter /**< A filter clause */
360} LLVMLandingPadClauseTy;
361
Hans Wennborg5ff71202013-04-16 08:58:59 +0000362typedef enum {
363 LLVMNotThreadLocal = 0,
364 LLVMGeneralDynamicTLSModel,
365 LLVMLocalDynamicTLSModel,
366 LLVMInitialExecTLSModel,
367 LLVMLocalExecTLSModel
368} LLVMThreadLocalMode;
369
Carlo Kokda0ac722013-04-23 13:45:37 +0000370typedef enum {
Carlo Kok8c6719b2013-04-23 13:21:19 +0000371 LLVMAtomicOrderingNotAtomic = 0, /**< A load or store which is not atomic */
372 LLVMAtomicOrderingUnordered = 1, /**< Lowest level of atomicity, guarantees
373 somewhat sane results, lock free. */
NAKAMURA Takumia3a81352013-10-23 17:56:29 +0000374 LLVMAtomicOrderingMonotonic = 2, /**< guarantees that if you take all the
375 operations affecting a specific address,
Carlo Kok8c6719b2013-04-23 13:21:19 +0000376 a consistent ordering exists */
NAKAMURA Takumia3a81352013-10-23 17:56:29 +0000377 LLVMAtomicOrderingAcquire = 4, /**< Acquire provides a barrier of the sort
378 necessary to acquire a lock to access other
Carlo Kok8c6719b2013-04-23 13:21:19 +0000379 memory with normal loads and stores. */
NAKAMURA Takumia3a81352013-10-23 17:56:29 +0000380 LLVMAtomicOrderingRelease = 5, /**< Release is similar to Acquire, but with
381 a barrier of the sort necessary to release
Carlo Kok8c6719b2013-04-23 13:21:19 +0000382 a lock. */
NAKAMURA Takumia3a81352013-10-23 17:56:29 +0000383 LLVMAtomicOrderingAcquireRelease = 6, /**< provides both an Acquire and a
384 Release barrier (for fences and
Carlo Kok8c6719b2013-04-23 13:21:19 +0000385 operations which both read and write
386 memory). */
NAKAMURA Takumia3a81352013-10-23 17:56:29 +0000387 LLVMAtomicOrderingSequentiallyConsistent = 7 /**< provides Acquire semantics
388 for loads and Release
389 semantics for stores.
390 Additionally, it guarantees
391 that a total ordering exists
392 between all
393 SequentiallyConsistent
Carlo Kok8c6719b2013-04-23 13:21:19 +0000394 operations. */
Carlo Kokda0ac722013-04-23 13:45:37 +0000395} LLVMAtomicOrdering;
Carlo Kok8c6719b2013-04-23 13:21:19 +0000396
Carlo Kokda0ac722013-04-23 13:45:37 +0000397typedef enum {
Carlo Kok8c6719b2013-04-23 13:21:19 +0000398 LLVMAtomicRMWBinOpXchg, /**< Set the new value and return the one old */
399 LLVMAtomicRMWBinOpAdd, /**< Add a value and return the old one */
400 LLVMAtomicRMWBinOpSub, /**< Subtract a value and return the old one */
401 LLVMAtomicRMWBinOpAnd, /**< And a value and return the old one */
402 LLVMAtomicRMWBinOpNand, /**< Not-And a value and return the old one */
403 LLVMAtomicRMWBinOpOr, /**< OR a value and return the old one */
404 LLVMAtomicRMWBinOpXor, /**< Xor a value and return the old one */
405 LLVMAtomicRMWBinOpMax, /**< Sets the value if it's greater than the
NAKAMURA Takumia3a81352013-10-23 17:56:29 +0000406 original using a signed comparison and return
Carlo Kok8c6719b2013-04-23 13:21:19 +0000407 the old one */
408 LLVMAtomicRMWBinOpMin, /**< Sets the value if it's Smaller than the
NAKAMURA Takumia3a81352013-10-23 17:56:29 +0000409 original using a signed comparison and return
Carlo Kok8c6719b2013-04-23 13:21:19 +0000410 the old one */
411 LLVMAtomicRMWBinOpUMax, /**< Sets the value if it's greater than the
NAKAMURA Takumia3a81352013-10-23 17:56:29 +0000412 original using an unsigned comparison and return
Carlo Kok8c6719b2013-04-23 13:21:19 +0000413 the old one */
414 LLVMAtomicRMWBinOpUMin /**< Sets the value if it's greater than the
NAKAMURA Takumia3a81352013-10-23 17:56:29 +0000415 original using an unsigned comparison and return
Carlo Kok8c6719b2013-04-23 13:21:19 +0000416 the old one */
Carlo Kokda0ac722013-04-23 13:45:37 +0000417} LLVMAtomicRMWBinOp;
Carlo Kok8c6719b2013-04-23 13:21:19 +0000418
Tom Stellard1580dc72014-04-16 17:45:04 +0000419typedef enum {
420 LLVMDSError,
421 LLVMDSWarning,
422 LLVMDSRemark,
423 LLVMDSNote
424} LLVMDiagnosticSeverity;
425
Gregory Szorc34c863a2012-03-21 03:54:29 +0000426/**
427 * @}
428 */
429
Nick Lewycky0db26542011-05-15 07:20:34 +0000430void LLVMInitializeCore(LLVMPassRegistryRef R);
431
Duncan Sands1cba0a82013-02-17 16:35:51 +0000432/** Deallocate and destroy all ManagedStatic variables.
433 @see llvm::llvm_shutdown
434 @see ManagedStatic */
Benjamin Kramer325ec892013-10-23 16:57:34 +0000435void LLVMShutdown(void);
Duncan Sands1cba0a82013-02-17 16:35:51 +0000436
Gordon Henriksen76a03742007-09-18 03:18:57 +0000437
Gordon Henriksen34eb6d82007-12-19 22:30:40 +0000438/*===-- Error handling ----------------------------------------------------===*/
439
Filip Pizlo3fdbaff2013-05-22 02:46:43 +0000440char *LLVMCreateMessage(const char *Message);
Gordon Henriksen34eb6d82007-12-19 22:30:40 +0000441void LLVMDisposeMessage(char *Message);
442
Filip Pizloa535b142013-10-17 01:38:28 +0000443typedef void (*LLVMFatalErrorHandler)(const char *Reason);
444
445/**
446 * Install a fatal error handler. By default, if LLVM detects a fatal error, it
447 * will call exit(1). This may not be appropriate in many contexts. For example,
448 * doing exit(1) will bypass many crash reporting/tracing system tools. This
449 * function allows you to install a callback that will be invoked prior to the
450 * call to exit(1).
451 */
452void LLVMInstallFatalErrorHandler(LLVMFatalErrorHandler Handler);
453
454/**
455 * Reset the fatal error handler. This resets LLVM's fatal error handling
456 * behavior to the default.
457 */
458void LLVMResetFatalErrorHandler(void);
Gordon Henriksen34eb6d82007-12-19 22:30:40 +0000459
Gregory Szorc34c863a2012-03-21 03:54:29 +0000460/**
Filip Pizloc10ca902013-11-04 02:22:25 +0000461 * Enable LLVM's built-in stack trace code. This intercepts the OS's crash
462 * signals and prints which component of LLVM you were in at the time if the
463 * crash.
Filip Pizlo9f50ccd2013-11-03 00:29:47 +0000464 */
Filip Pizloc10ca902013-11-04 02:22:25 +0000465void LLVMEnablePrettyStackTrace(void);
Filip Pizlo9f50ccd2013-11-03 00:29:47 +0000466
467/**
Gregory Szorc34c863a2012-03-21 03:54:29 +0000468 * @defgroup LLVMCCoreContext Contexts
469 *
470 * Contexts are execution states for the core LLVM IR system.
471 *
472 * Most types are tied to a context instance. Multiple contexts can
473 * exist simultaneously. A single context is not thread safe. However,
474 * different contexts can execute on different threads simultaneously.
475 *
476 * @{
477 */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000478
Tom Stellard1580dc72014-04-16 17:45:04 +0000479typedef void (*LLVMDiagnosticHandler)(LLVMDiagnosticInfoRef, void *);
Juergen Ributzka34390c72014-05-16 02:33:15 +0000480typedef void (*LLVMYieldCallback)(LLVMContextRef, void *);
Tom Stellard1580dc72014-04-16 17:45:04 +0000481
Gregory Szorc34c863a2012-03-21 03:54:29 +0000482/**
483 * Create a new context.
484 *
485 * Every call to this function should be paired with a call to
486 * LLVMContextDispose() or the context will leak memory.
487 */
Erick Tryzelaarf34cb0c2009-08-30 23:38:06 +0000488LLVMContextRef LLVMContextCreate(void);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000489
490/**
491 * Obtain the global context instance.
492 */
Erick Tryzelaarf34cb0c2009-08-30 23:38:06 +0000493LLVMContextRef LLVMGetGlobalContext(void);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000494
495/**
Tom Stellard1580dc72014-04-16 17:45:04 +0000496 * Set the diagnostic handler for this context.
497 */
498void LLVMContextSetDiagnosticHandler(LLVMContextRef C,
499 LLVMDiagnosticHandler Handler,
500 void *DiagnosticContext);
501
502/**
Juergen Ributzka34390c72014-05-16 02:33:15 +0000503 * Set the yield callback function for this context.
504 *
505 * @see LLVMContext::setYieldCallback()
506 */
507void LLVMContextSetYieldCallback(LLVMContextRef C, LLVMYieldCallback Callback,
508 void *OpaqueHandle);
509
510/**
Gregory Szorc34c863a2012-03-21 03:54:29 +0000511 * Destroy a context instance.
512 *
513 * This should be called for every call to LLVMContextCreate() or memory
514 * will be leaked.
515 */
Owen Anderson6773d382009-07-01 16:58:40 +0000516void LLVMContextDispose(LLVMContextRef C);
517
Tom Stellard1580dc72014-04-16 17:45:04 +0000518/**
519 * Return a string representation of the DiagnosticInfo. Use
520 * LLVMDisposeMessage to free the string.
521 *
522 * @see DiagnosticInfo::print()
523 */
524char *LLVMGetDiagInfoDescription(LLVMDiagnosticInfoRef DI);
525
526/**
527 * Return an enum LLVMDiagnosticSeverity.
528 *
529 * @see DiagnosticInfo::getSeverity()
530 */
531LLVMDiagnosticSeverity LLVMGetDiagInfoSeverity(LLVMDiagnosticInfoRef DI);
532
Erick Tryzelaard8531fa2010-02-28 09:45:59 +0000533unsigned LLVMGetMDKindIDInContext(LLVMContextRef C, const char* Name,
534 unsigned SLen);
535unsigned LLVMGetMDKindID(const char* Name, unsigned SLen);
536
Gregory Szorc34c863a2012-03-21 03:54:29 +0000537/**
538 * @}
539 */
540
Gregory Szorc52d26602012-03-21 07:28:27 +0000541/**
542 * @defgroup LLVMCCoreModule Modules
Gregory Szorc34c863a2012-03-21 03:54:29 +0000543 *
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +0000544 * Modules represent the top-level structure in an LLVM program. An LLVM
Gregory Szorc34c863a2012-03-21 03:54:29 +0000545 * module is effectively a translation unit or a collection of
546 * translation units merged together.
547 *
548 * @{
549 */
550
Gregory Szorc34c863a2012-03-21 03:54:29 +0000551/**
552 * Create a new, empty module in the global context.
553 *
554 * This is equivalent to calling LLVMModuleCreateWithNameInContext with
555 * LLVMGetGlobalContext() as the context parameter.
556 *
557 * Every invocation should be paired with LLVMDisposeModule() or memory
558 * will be leaked.
559 */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000560LLVMModuleRef LLVMModuleCreateWithName(const char *ModuleID);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000561
562/**
563 * Create a new, empty module in a specific context.
564 *
565 * Every invocation should be paired with LLVMDisposeModule() or memory
566 * will be leaked.
567 */
Owen Anderson31d44e42009-07-02 07:17:57 +0000568LLVMModuleRef LLVMModuleCreateWithNameInContext(const char *ModuleID,
569 LLVMContextRef C);
Tom Stellard0a4e9a32014-10-01 17:14:57 +0000570/**
571 * Return an exact copy of the specified module.
572 */
573LLVMModuleRef LLVMCloneModule(LLVMModuleRef M);
Gordon Henriksena49d4352008-03-07 19:13:06 +0000574
Gregory Szorc34c863a2012-03-21 03:54:29 +0000575/**
576 * Destroy a module instance.
577 *
578 * This must be called for every created module or memory will be
579 * leaked.
580 */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000581void LLVMDisposeModule(LLVMModuleRef M);
582
Gregory Szorc34c863a2012-03-21 03:54:29 +0000583/**
584 * Obtain the data layout for a module.
585 *
586 * @see Module::getDataLayout()
587 */
Gordon Henriksen05568bb2007-12-27 20:13:47 +0000588const char *LLVMGetDataLayout(LLVMModuleRef M);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000589
590/**
591 * Set the data layout for a module.
592 *
593 * @see Module::setDataLayout()
594 */
Gordon Henriksen05568bb2007-12-27 20:13:47 +0000595void LLVMSetDataLayout(LLVMModuleRef M, const char *Triple);
596
Gregory Szorc34c863a2012-03-21 03:54:29 +0000597/**
598 * Obtain the target triple for a module.
599 *
600 * @see Module::getTargetTriple()
601 */
Gordon Henriksen05568bb2007-12-27 20:13:47 +0000602const char *LLVMGetTarget(LLVMModuleRef M);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000603
604/**
605 * Set the target triple for a module.
606 *
607 * @see Module::setTargetTriple()
608 */
Gordon Henriksen05568bb2007-12-27 20:13:47 +0000609void LLVMSetTarget(LLVMModuleRef M, const char *Triple);
610
Gregory Szorc34c863a2012-03-21 03:54:29 +0000611/**
612 * Dump a representation of a module to stderr.
613 *
614 * @see Module::dump()
615 */
Gordon Henriksen6c6075e2008-03-14 23:58:56 +0000616void LLVMDumpModule(LLVMModuleRef M);
617
Gregory Szorc34c863a2012-03-21 03:54:29 +0000618/**
Hans Wennborgb7ef2fe2012-05-09 16:54:17 +0000619 * Print a representation of a module to a file. The ErrorMessage needs to be
620 * disposed with LLVMDisposeMessage. Returns 0 on success, 1 otherwise.
621 *
622 * @see Module::print()
623 */
624LLVMBool LLVMPrintModuleToFile(LLVMModuleRef M, const char *Filename,
625 char **ErrorMessage);
626
627/**
Anders Waldenborg84355db2013-10-16 18:00:54 +0000628 * Return a string representation of the module. Use
629 * LLVMDisposeMessage to free the string.
630 *
631 * @see Module::print()
632 */
633char *LLVMPrintModuleToString(LLVMModuleRef M);
634
635/**
Gregory Szorc34c863a2012-03-21 03:54:29 +0000636 * Set inline assembly for a module.
637 *
638 * @see Module::setModuleInlineAsm()
639 */
Chris Lattner26941452010-04-10 17:52:58 +0000640void LLVMSetModuleInlineAsm(LLVMModuleRef M, const char *Asm);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000641
Gregory Szorc34c863a2012-03-21 03:54:29 +0000642/**
643 * Obtain the context to which this module is associated.
644 *
645 * @see Module::getContext()
646 */
Chris Lattnera7e04b02010-11-28 20:03:44 +0000647LLVMContextRef LLVMGetModuleContext(LLVMModuleRef M);
648
Gregory Szorc34c863a2012-03-21 03:54:29 +0000649/**
650 * Obtain a Type from a module by its registered name.
651 */
652LLVMTypeRef LLVMGetTypeByName(LLVMModuleRef M, const char *Name);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000653
Gregory Szorc34c863a2012-03-21 03:54:29 +0000654/**
655 * Obtain the number of operands for named metadata in a module.
656 *
657 * @see llvm::Module::getNamedMetadata()
658 */
659unsigned LLVMGetNamedMetadataNumOperands(LLVMModuleRef M, const char* name);
660
661/**
662 * Obtain the named metadata operands for a module.
663 *
664 * The passed LLVMValueRef pointer should refer to an array of
665 * LLVMValueRef at least LLVMGetNamedMetadataNumOperands long. This
666 * array will be populated with the LLVMValueRef instances. Each
667 * instance corresponds to a llvm::MDNode.
668 *
669 * @see llvm::Module::getNamedMetadata()
670 * @see llvm::MDNode::getOperand()
671 */
672void LLVMGetNamedMetadataOperands(LLVMModuleRef M, const char* name, LLVMValueRef *Dest);
673
674/**
675 * Add an operand to named metadata.
676 *
677 * @see llvm::Module::getNamedMetadata()
678 * @see llvm::MDNode::addOperand()
679 */
680void LLVMAddNamedMetadataOperand(LLVMModuleRef M, const char* name,
681 LLVMValueRef Val);
682
Gregory Szorc52d26602012-03-21 07:28:27 +0000683/**
684 * Add a function to a module under a specified name.
685 *
686 * @see llvm::Function::Create()
687 */
688LLVMValueRef LLVMAddFunction(LLVMModuleRef M, const char *Name,
689 LLVMTypeRef FunctionTy);
690
691/**
692 * Obtain a Function value from a Module by its name.
693 *
694 * The returned value corresponds to a llvm::Function value.
695 *
696 * @see llvm::Module::getFunction()
697 */
698LLVMValueRef LLVMGetNamedFunction(LLVMModuleRef M, const char *Name);
699
700/**
701 * Obtain an iterator to the first Function in a Module.
702 *
703 * @see llvm::Module::begin()
704 */
705LLVMValueRef LLVMGetFirstFunction(LLVMModuleRef M);
706
707/**
708 * Obtain an iterator to the last Function in a Module.
709 *
710 * @see llvm::Module::end()
711 */
712LLVMValueRef LLVMGetLastFunction(LLVMModuleRef M);
713
714/**
715 * Advance a Function iterator to the next Function.
716 *
717 * Returns NULL if the iterator was already at the end and there are no more
718 * functions.
719 */
720LLVMValueRef LLVMGetNextFunction(LLVMValueRef Fn);
721
722/**
723 * Decrement a Function iterator to the previous Function.
724 *
725 * Returns NULL if the iterator was already at the beginning and there are
726 * no previous functions.
727 */
728LLVMValueRef LLVMGetPreviousFunction(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000729
730/**
731 * @}
732 */
733
734/**
735 * @defgroup LLVMCCoreType Types
736 *
737 * Types represent the type of a value.
738 *
739 * Types are associated with a context instance. The context internally
740 * deduplicates types so there is only 1 instance of a specific type
741 * alive at a time. In other words, a unique type is shared among all
742 * consumers within a context.
743 *
744 * A Type in the C API corresponds to llvm::Type.
745 *
746 * Types have the following hierarchy:
747 *
Gordon Henriksen76a03742007-09-18 03:18:57 +0000748 * types:
749 * integer type
750 * real type
751 * function type
752 * sequence types:
753 * array type
754 * pointer type
755 * vector type
756 * void type
757 * label type
758 * opaque type
Gregory Szorc34c863a2012-03-21 03:54:29 +0000759 *
760 * @{
Gordon Henriksen76a03742007-09-18 03:18:57 +0000761 */
762
Gregory Szorc34c863a2012-03-21 03:54:29 +0000763/**
764 * Obtain the enumerated type of a Type instance.
765 *
766 * @see llvm::Type:getTypeID()
767 */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000768LLVMTypeKind LLVMGetTypeKind(LLVMTypeRef Ty);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000769
770/**
771 * Whether the type has a known size.
772 *
773 * Things that don't have a size are abstract types, labels, and void.a
774 *
775 * @see llvm::Type::isSized()
776 */
Torok Edwin1cd9ade2011-10-06 12:13:28 +0000777LLVMBool LLVMTypeIsSized(LLVMTypeRef Ty);
Gordon Henriksena49d4352008-03-07 19:13:06 +0000778
Gregory Szorc34c863a2012-03-21 03:54:29 +0000779/**
780 * Obtain the context to which this type instance is associated.
781 *
782 * @see llvm::Type::getContext()
783 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000784LLVMContextRef LLVMGetTypeContext(LLVMTypeRef Ty);
785
Gregory Szorc34c863a2012-03-21 03:54:29 +0000786/**
Anders Waldenborgb822cff2013-10-16 21:30:25 +0000787 * Dump a representation of a type to stderr.
788 *
789 * @see llvm::Type::dump()
790 */
791void LLVMDumpType(LLVMTypeRef Val);
792
793/**
Anders Waldenborg47b3bd32013-10-22 06:58:34 +0000794 * Return a string representation of the type. Use
795 * LLVMDisposeMessage to free the string.
796 *
797 * @see llvm::Type::print()
798 */
799char *LLVMPrintTypeToString(LLVMTypeRef Val);
800
801/**
Gregory Szorc34c863a2012-03-21 03:54:29 +0000802 * @defgroup LLVMCCoreTypeInt Integer Types
803 *
804 * Functions in this section operate on integer types.
805 *
806 * @{
807 */
808
809/**
810 * Obtain an integer type from a context with specified bit width.
811 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000812LLVMTypeRef LLVMInt1TypeInContext(LLVMContextRef C);
813LLVMTypeRef LLVMInt8TypeInContext(LLVMContextRef C);
814LLVMTypeRef LLVMInt16TypeInContext(LLVMContextRef C);
815LLVMTypeRef LLVMInt32TypeInContext(LLVMContextRef C);
816LLVMTypeRef LLVMInt64TypeInContext(LLVMContextRef C);
817LLVMTypeRef LLVMIntTypeInContext(LLVMContextRef C, unsigned NumBits);
818
Gregory Szorc34c863a2012-03-21 03:54:29 +0000819/**
820 * Obtain an integer type from the global context with a specified bit
821 * width.
822 */
Gordon Henriksena735a9c2008-05-04 12:55:34 +0000823LLVMTypeRef LLVMInt1Type(void);
824LLVMTypeRef LLVMInt8Type(void);
825LLVMTypeRef LLVMInt16Type(void);
826LLVMTypeRef LLVMInt32Type(void);
827LLVMTypeRef LLVMInt64Type(void);
Gordon Henriksened7beaa2007-10-06 16:05:20 +0000828LLVMTypeRef LLVMIntType(unsigned NumBits);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000829unsigned LLVMGetIntTypeWidth(LLVMTypeRef IntegerTy);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000830
Gregory Szorc34c863a2012-03-21 03:54:29 +0000831/**
832 * @}
833 */
834
835/**
836 * @defgroup LLVMCCoreTypeFloat Floating Point Types
837 *
838 * @{
839 */
840
841/**
842 * Obtain a 16-bit floating point type from a context.
843 */
Dan Gohman518cda42011-12-17 00:04:22 +0000844LLVMTypeRef LLVMHalfTypeInContext(LLVMContextRef C);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000845
846/**
847 * Obtain a 32-bit floating point type from a context.
848 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000849LLVMTypeRef LLVMFloatTypeInContext(LLVMContextRef C);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000850
851/**
852 * Obtain a 64-bit floating point type from a context.
853 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000854LLVMTypeRef LLVMDoubleTypeInContext(LLVMContextRef C);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000855
856/**
857 * Obtain a 80-bit floating point type (X87) from a context.
858 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000859LLVMTypeRef LLVMX86FP80TypeInContext(LLVMContextRef C);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000860
861/**
862 * Obtain a 128-bit floating point type (112-bit mantissa) from a
863 * context.
864 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000865LLVMTypeRef LLVMFP128TypeInContext(LLVMContextRef C);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000866
867/**
868 * Obtain a 128-bit floating point type (two 64-bits) from a context.
869 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000870LLVMTypeRef LLVMPPCFP128TypeInContext(LLVMContextRef C);
871
Gregory Szorc34c863a2012-03-21 03:54:29 +0000872/**
873 * Obtain a floating point type from the global context.
874 *
875 * These map to the functions in this group of the same name.
876 */
Dan Gohman518cda42011-12-17 00:04:22 +0000877LLVMTypeRef LLVMHalfType(void);
Gordon Henriksena735a9c2008-05-04 12:55:34 +0000878LLVMTypeRef LLVMFloatType(void);
879LLVMTypeRef LLVMDoubleType(void);
880LLVMTypeRef LLVMX86FP80Type(void);
881LLVMTypeRef LLVMFP128Type(void);
882LLVMTypeRef LLVMPPCFP128Type(void);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000883
Gregory Szorc34c863a2012-03-21 03:54:29 +0000884/**
885 * @}
886 */
887
888/**
889 * @defgroup LLVMCCoreTypeFunction Function Types
890 *
891 * @{
892 */
893
894/**
895 * Obtain a function type consisting of a specified signature.
896 *
897 * The function is defined as a tuple of a return Type, a list of
898 * parameter types, and whether the function is variadic.
899 */
Gordon Henriksened7beaa2007-10-06 16:05:20 +0000900LLVMTypeRef LLVMFunctionType(LLVMTypeRef ReturnType,
901 LLVMTypeRef *ParamTypes, unsigned ParamCount,
Chris Lattner25963c62010-01-09 22:27:07 +0000902 LLVMBool IsVarArg);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000903
904/**
905 * Returns whether a function type is variadic.
906 */
Chris Lattner25963c62010-01-09 22:27:07 +0000907LLVMBool LLVMIsFunctionVarArg(LLVMTypeRef FunctionTy);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000908
909/**
910 * Obtain the Type this function Type returns.
911 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000912LLVMTypeRef LLVMGetReturnType(LLVMTypeRef FunctionTy);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000913
914/**
915 * Obtain the number of parameters this function accepts.
916 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000917unsigned LLVMCountParamTypes(LLVMTypeRef FunctionTy);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000918
919/**
920 * Obtain the types of a function's parameters.
921 *
922 * The Dest parameter should point to a pre-allocated array of
923 * LLVMTypeRef at least LLVMCountParamTypes() large. On return, the
924 * first LLVMCountParamTypes() entries in the array will be populated
925 * with LLVMTypeRef instances.
926 *
927 * @param FunctionTy The function type to operate on.
928 * @param Dest Memory address of an array to be filled with result.
929 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000930void LLVMGetParamTypes(LLVMTypeRef FunctionTy, LLVMTypeRef *Dest);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000931
Gregory Szorc34c863a2012-03-21 03:54:29 +0000932/**
933 * @}
934 */
935
936/**
937 * @defgroup LLVMCCoreTypeStruct Structure Types
938 *
939 * These functions relate to LLVMTypeRef instances.
940 *
941 * @see llvm::StructType
942 *
943 * @{
944 */
945
946/**
947 * Create a new structure type in a context.
948 *
949 * A structure is specified by a list of inner elements/types and
950 * whether these can be packed together.
951 *
952 * @see llvm::StructType::create()
953 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000954LLVMTypeRef LLVMStructTypeInContext(LLVMContextRef C, LLVMTypeRef *ElementTypes,
Chris Lattner25963c62010-01-09 22:27:07 +0000955 unsigned ElementCount, LLVMBool Packed);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000956
957/**
958 * Create a new structure type in the global context.
959 *
960 * @see llvm::StructType::create()
961 */
Gordon Henriksened7beaa2007-10-06 16:05:20 +0000962LLVMTypeRef LLVMStructType(LLVMTypeRef *ElementTypes, unsigned ElementCount,
Chris Lattner25963c62010-01-09 22:27:07 +0000963 LLVMBool Packed);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000964
965/**
966 * Create an empty structure in a context having a specified name.
967 *
968 * @see llvm::StructType::create()
969 */
Chris Lattnere71ccde2011-07-14 05:53:17 +0000970LLVMTypeRef LLVMStructCreateNamed(LLVMContextRef C, const char *Name);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000971
972/**
973 * Obtain the name of a structure.
974 *
975 * @see llvm::StructType::getName()
976 */
Torok Edwin0d5f6ae2011-10-06 12:12:50 +0000977const char *LLVMGetStructName(LLVMTypeRef Ty);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000978
979/**
980 * Set the contents of a structure type.
981 *
982 * @see llvm::StructType::setBody()
983 */
Chris Lattnere71ccde2011-07-14 05:53:17 +0000984void LLVMStructSetBody(LLVMTypeRef StructTy, LLVMTypeRef *ElementTypes,
985 unsigned ElementCount, LLVMBool Packed);
986
Gregory Szorc34c863a2012-03-21 03:54:29 +0000987/**
988 * Get the number of elements defined inside the structure.
989 *
990 * @see llvm::StructType::getNumElements()
991 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000992unsigned LLVMCountStructElementTypes(LLVMTypeRef StructTy);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000993
994/**
995 * Get the elements within a structure.
996 *
997 * The function is passed the address of a pre-allocated array of
998 * LLVMTypeRef at least LLVMCountStructElementTypes() long. After
999 * invocation, this array will be populated with the structure's
1000 * elements. The objects in the destination array will have a lifetime
1001 * of the structure type itself, which is the lifetime of the context it
1002 * is contained in.
1003 */
Gordon Henriksen76a03742007-09-18 03:18:57 +00001004void LLVMGetStructElementTypes(LLVMTypeRef StructTy, LLVMTypeRef *Dest);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001005
1006/**
Peter Zotovc164a3f2015-06-04 09:09:53 +00001007 * Get the type of the element at a given index in the structure.
1008 *
1009 * @see llvm::StructType::getTypeAtIndex()
1010 */
1011LLVMTypeRef LLVMStructGetTypeAtIndex(LLVMTypeRef StructTy, unsigned i);
1012
1013/**
Gregory Szorc34c863a2012-03-21 03:54:29 +00001014 * Determine whether a structure is packed.
1015 *
1016 * @see llvm::StructType::isPacked()
1017 */
Chris Lattner25963c62010-01-09 22:27:07 +00001018LLVMBool LLVMIsPackedStruct(LLVMTypeRef StructTy);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001019
1020/**
1021 * Determine whether a structure is opaque.
1022 *
1023 * @see llvm::StructType::isOpaque()
1024 */
Chris Lattner17cf05b2011-07-14 16:20:28 +00001025LLVMBool LLVMIsOpaqueStruct(LLVMTypeRef StructTy);
1026
Gregory Szorc34c863a2012-03-21 03:54:29 +00001027/**
1028 * @}
1029 */
Gordon Henriksen76a03742007-09-18 03:18:57 +00001030
Gregory Szorc34c863a2012-03-21 03:54:29 +00001031
1032/**
1033 * @defgroup LLVMCCoreTypeSequential Sequential Types
1034 *
1035 * Sequential types represents "arrays" of types. This is a super class
1036 * for array, vector, and pointer types.
1037 *
1038 * @{
1039 */
1040
1041/**
1042 * Obtain the type of elements within a sequential type.
1043 *
1044 * This works on array, vector, and pointer types.
1045 *
1046 * @see llvm::SequentialType::getElementType()
1047 */
1048LLVMTypeRef LLVMGetElementType(LLVMTypeRef Ty);
1049
1050/**
1051 * Create a fixed size array type that refers to a specific type.
1052 *
1053 * The created type will exist in the context that its element type
1054 * exists in.
1055 *
1056 * @see llvm::ArrayType::get()
1057 */
Gordon Henriksened7beaa2007-10-06 16:05:20 +00001058LLVMTypeRef LLVMArrayType(LLVMTypeRef ElementType, unsigned ElementCount);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001059
1060/**
1061 * Obtain the length of an array type.
1062 *
1063 * This only works on types that represent arrays.
1064 *
1065 * @see llvm::ArrayType::getNumElements()
1066 */
1067unsigned LLVMGetArrayLength(LLVMTypeRef ArrayTy);
1068
1069/**
1070 * Create a pointer type that points to a defined type.
1071 *
1072 * The created type will exist in the context that its pointee type
1073 * exists in.
1074 *
1075 * @see llvm::PointerType::get()
1076 */
Gordon Henriksen5a3fe032007-12-17 16:08:32 +00001077LLVMTypeRef LLVMPointerType(LLVMTypeRef ElementType, unsigned AddressSpace);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001078
1079/**
1080 * Obtain the address space of a pointer type.
1081 *
1082 * This only works on types that represent pointers.
1083 *
1084 * @see llvm::PointerType::getAddressSpace()
1085 */
1086unsigned LLVMGetPointerAddressSpace(LLVMTypeRef PointerTy);
1087
1088/**
1089 * Create a vector type that contains a defined type and has a specific
1090 * number of elements.
1091 *
1092 * The created type will exist in the context thats its element type
1093 * exists in.
1094 *
1095 * @see llvm::VectorType::get()
1096 */
Gordon Henriksened7beaa2007-10-06 16:05:20 +00001097LLVMTypeRef LLVMVectorType(LLVMTypeRef ElementType, unsigned ElementCount);
Gordon Henriksen76a03742007-09-18 03:18:57 +00001098
Gregory Szorc34c863a2012-03-21 03:54:29 +00001099/**
1100 * Obtain the number of elements in a vector type.
1101 *
1102 * This only works on types that represent vectors.
1103 *
1104 * @see llvm::VectorType::getNumElements()
1105 */
Gordon Henriksen76a03742007-09-18 03:18:57 +00001106unsigned LLVMGetVectorSize(LLVMTypeRef VectorTy);
1107
Gregory Szorc34c863a2012-03-21 03:54:29 +00001108/**
1109 * @}
1110 */
1111
1112/**
1113 * @defgroup LLVMCCoreTypeOther Other Types
1114 *
1115 * @{
1116 */
1117
1118/**
1119 * Create a void type in a context.
1120 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +00001121LLVMTypeRef LLVMVoidTypeInContext(LLVMContextRef C);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001122
1123/**
1124 * Create a label type in a context.
1125 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +00001126LLVMTypeRef LLVMLabelTypeInContext(LLVMContextRef C);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001127
1128/**
1129 * Create a X86 MMX type in a context.
1130 */
Dale Johannesen95b67af2010-09-10 21:58:02 +00001131LLVMTypeRef LLVMX86MMXTypeInContext(LLVMContextRef C);
Erick Tryzelaar262332f2009-08-14 00:01:31 +00001132
Gregory Szorc34c863a2012-03-21 03:54:29 +00001133/**
1134 * These are similar to the above functions except they operate on the
1135 * global context.
1136 */
Gordon Henriksena735a9c2008-05-04 12:55:34 +00001137LLVMTypeRef LLVMVoidType(void);
1138LLVMTypeRef LLVMLabelType(void);
Dale Johannesen95b67af2010-09-10 21:58:02 +00001139LLVMTypeRef LLVMX86MMXType(void);
Gordon Henriksen76a03742007-09-18 03:18:57 +00001140
Gregory Szorc34c863a2012-03-21 03:54:29 +00001141/**
1142 * @}
1143 */
Gordon Henriksen76a03742007-09-18 03:18:57 +00001144
Gregory Szorc34c863a2012-03-21 03:54:29 +00001145/**
1146 * @}
1147 */
1148
1149/**
1150 * @defgroup LLVMCCoreValues Values
1151 *
1152 * The bulk of LLVM's object model consists of values, which comprise a very
Gordon Henriksen76a03742007-09-18 03:18:57 +00001153 * rich type hierarchy.
Gregory Szorc34c863a2012-03-21 03:54:29 +00001154 *
1155 * LLVMValueRef essentially represents llvm::Value. There is a rich
1156 * hierarchy of classes within this type. Depending on the instance
Eli Benderskyc52863c2012-08-10 18:30:44 +00001157 * obtained, not all APIs are available.
Gregory Szorc34c863a2012-03-21 03:54:29 +00001158 *
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +00001159 * Callers can determine the type of an LLVMValueRef by calling the
Gregory Szorc34c863a2012-03-21 03:54:29 +00001160 * LLVMIsA* family of functions (e.g. LLVMIsAArgument()). These
1161 * functions are defined by a macro, so it isn't obvious which are
1162 * available by looking at the Doxygen source code. Instead, look at the
1163 * source definition of LLVM_FOR_EACH_VALUE_SUBCLASS and note the list
1164 * of value names given. These value names also correspond to classes in
1165 * the llvm::Value hierarchy.
1166 *
1167 * @{
Gordon Henriksen76a03742007-09-18 03:18:57 +00001168 */
1169
Gordon Henriksen29e38942008-12-19 18:39:45 +00001170#define LLVM_FOR_EACH_VALUE_SUBCLASS(macro) \
1171 macro(Argument) \
1172 macro(BasicBlock) \
1173 macro(InlineAsm) \
1174 macro(User) \
1175 macro(Constant) \
Torok Edwind09b7572011-10-14 20:37:56 +00001176 macro(BlockAddress) \
Gordon Henriksen29e38942008-12-19 18:39:45 +00001177 macro(ConstantAggregateZero) \
1178 macro(ConstantArray) \
Peter Zotovae0344b2013-11-05 12:55:37 +00001179 macro(ConstantDataSequential) \
1180 macro(ConstantDataArray) \
1181 macro(ConstantDataVector) \
Gordon Henriksen29e38942008-12-19 18:39:45 +00001182 macro(ConstantExpr) \
1183 macro(ConstantFP) \
1184 macro(ConstantInt) \
1185 macro(ConstantPointerNull) \
1186 macro(ConstantStruct) \
1187 macro(ConstantVector) \
1188 macro(GlobalValue) \
Gordon Henriksen29e38942008-12-19 18:39:45 +00001189 macro(GlobalAlias) \
Rafael Espindola99e05cf2014-05-13 18:45:48 +00001190 macro(GlobalObject) \
1191 macro(Function) \
1192 macro(GlobalVariable) \
Gordon Henriksen29e38942008-12-19 18:39:45 +00001193 macro(UndefValue) \
1194 macro(Instruction) \
1195 macro(BinaryOperator) \
1196 macro(CallInst) \
1197 macro(IntrinsicInst) \
1198 macro(DbgInfoIntrinsic) \
1199 macro(DbgDeclareInst) \
Gordon Henriksen29e38942008-12-19 18:39:45 +00001200 macro(MemIntrinsic) \
1201 macro(MemCpyInst) \
1202 macro(MemMoveInst) \
1203 macro(MemSetInst) \
1204 macro(CmpInst) \
Torok Edwind09b7572011-10-14 20:37:56 +00001205 macro(FCmpInst) \
1206 macro(ICmpInst) \
Gordon Henriksen29e38942008-12-19 18:39:45 +00001207 macro(ExtractElementInst) \
1208 macro(GetElementPtrInst) \
1209 macro(InsertElementInst) \
1210 macro(InsertValueInst) \
Bill Wendlingfae14752011-08-12 20:24:12 +00001211 macro(LandingPadInst) \
David Majnemer654e1302015-07-31 17:58:14 +00001212 macro(CleanupPadInst) \
Gordon Henriksen29e38942008-12-19 18:39:45 +00001213 macro(PHINode) \
1214 macro(SelectInst) \
1215 macro(ShuffleVectorInst) \
1216 macro(StoreInst) \
1217 macro(TerminatorInst) \
1218 macro(BranchInst) \
Torok Edwind09b7572011-10-14 20:37:56 +00001219 macro(IndirectBrInst) \
Gordon Henriksen29e38942008-12-19 18:39:45 +00001220 macro(InvokeInst) \
1221 macro(ReturnInst) \
1222 macro(SwitchInst) \
1223 macro(UnreachableInst) \
Bill Wendlingf891bf82011-07-31 06:30:59 +00001224 macro(ResumeInst) \
David Majnemer654e1302015-07-31 17:58:14 +00001225 macro(CleanupReturnInst) \
1226 macro(CatchReturnInst) \
1227 macro(CatchPadInst) \
1228 macro(TerminatePadInst) \
1229 macro(CatchEndPadInst) \
Duncan Sands5e37e992013-05-06 08:55:45 +00001230 macro(UnaryInstruction) \
1231 macro(AllocaInst) \
1232 macro(CastInst) \
Matt Arsenaultb03bd4d2013-11-15 01:34:59 +00001233 macro(AddrSpaceCastInst) \
Duncan Sands5e37e992013-05-06 08:55:45 +00001234 macro(BitCastInst) \
1235 macro(FPExtInst) \
1236 macro(FPToSIInst) \
1237 macro(FPToUIInst) \
1238 macro(FPTruncInst) \
1239 macro(IntToPtrInst) \
1240 macro(PtrToIntInst) \
1241 macro(SExtInst) \
1242 macro(SIToFPInst) \
1243 macro(TruncInst) \
1244 macro(UIToFPInst) \
1245 macro(ZExtInst) \
1246 macro(ExtractValueInst) \
1247 macro(LoadInst) \
1248 macro(VAArgInst)
Gordon Henriksen29e38942008-12-19 18:39:45 +00001249
Gregory Szorc34c863a2012-03-21 03:54:29 +00001250/**
1251 * @defgroup LLVMCCoreValueGeneral General APIs
1252 *
1253 * Functions in this section work on all LLVMValueRef instances,
1254 * regardless of their sub-type. They correspond to functions available
1255 * on llvm::Value.
1256 *
1257 * @{
1258 */
Gordon Henriksen76a03742007-09-18 03:18:57 +00001259
Gregory Szorc34c863a2012-03-21 03:54:29 +00001260/**
1261 * Obtain the type of a value.
1262 *
1263 * @see llvm::Value::getType()
1264 */
1265LLVMTypeRef LLVMTypeOf(LLVMValueRef Val);
1266
1267/**
1268 * Obtain the string name of a value.
1269 *
1270 * @see llvm::Value::getName()
1271 */
1272const char *LLVMGetValueName(LLVMValueRef Val);
1273
1274/**
1275 * Set the string name of a value.
1276 *
1277 * @see llvm::Value::setName()
1278 */
1279void LLVMSetValueName(LLVMValueRef Val, const char *Name);
1280
1281/**
1282 * Dump a representation of a value to stderr.
1283 *
1284 * @see llvm::Value::dump()
1285 */
1286void LLVMDumpValue(LLVMValueRef Val);
1287
1288/**
Peter Zotovcd93b372013-11-06 09:21:01 +00001289 * Return a string representation of the value. Use
1290 * LLVMDisposeMessage to free the string.
1291 *
1292 * @see llvm::Value::print()
1293 */
1294char *LLVMPrintValueToString(LLVMValueRef Val);
1295
1296/**
Gregory Szorc34c863a2012-03-21 03:54:29 +00001297 * Replace all uses of a value with another one.
1298 *
1299 * @see llvm::Value::replaceAllUsesWith()
1300 */
1301void LLVMReplaceAllUsesWith(LLVMValueRef OldVal, LLVMValueRef NewVal);
1302
1303/**
1304 * Determine whether the specified constant instance is constant.
1305 */
1306LLVMBool LLVMIsConstant(LLVMValueRef Val);
1307
1308/**
1309 * Determine whether a value instance is undefined.
1310 */
1311LLVMBool LLVMIsUndef(LLVMValueRef Val);
1312
1313/**
1314 * Convert value instances between types.
1315 *
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +00001316 * Internally, an LLVMValueRef is "pinned" to a specific type. This
Gregory Szorc34c863a2012-03-21 03:54:29 +00001317 * series of functions allows you to cast an instance to a specific
1318 * type.
1319 *
1320 * If the cast is not valid for the specified type, NULL is returned.
1321 *
1322 * @see llvm::dyn_cast_or_null<>
1323 */
Gordon Henriksen29e38942008-12-19 18:39:45 +00001324#define LLVM_DECLARE_VALUE_CAST(name) \
1325 LLVMValueRef LLVMIsA##name(LLVMValueRef Val);
1326LLVM_FOR_EACH_VALUE_SUBCLASS(LLVM_DECLARE_VALUE_CAST)
1327
Duncan P. N. Exon Smith5bf8fef2014-12-09 18:38:53 +00001328LLVMValueRef LLVMIsAMDNode(LLVMValueRef Val);
1329LLVMValueRef LLVMIsAMDString(LLVMValueRef Val);
1330
Gregory Szorc34c863a2012-03-21 03:54:29 +00001331/**
1332 * @}
1333 */
1334
1335/**
1336 * @defgroup LLVMCCoreValueUses Usage
1337 *
1338 * This module defines functions that allow you to inspect the uses of a
1339 * LLVMValueRef.
1340 *
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +00001341 * It is possible to obtain an LLVMUseRef for any LLVMValueRef instance.
Gregory Szorc34c863a2012-03-21 03:54:29 +00001342 * Each LLVMUseRef (which corresponds to a llvm::Use instance) holds a
1343 * llvm::User and llvm::Value.
1344 *
1345 * @{
1346 */
1347
1348/**
1349 * Obtain the first use of a value.
1350 *
1351 * Uses are obtained in an iterator fashion. First, call this function
1352 * to obtain a reference to the first use. Then, call LLVMGetNextUse()
Eli Benderskyc52863c2012-08-10 18:30:44 +00001353 * on that instance and all subsequently obtained instances until
Gregory Szorc34c863a2012-03-21 03:54:29 +00001354 * LLVMGetNextUse() returns NULL.
1355 *
1356 * @see llvm::Value::use_begin()
1357 */
Erick Tryzelaar9f9857e2010-03-02 20:32:28 +00001358LLVMUseRef LLVMGetFirstUse(LLVMValueRef Val);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001359
1360/**
1361 * Obtain the next use of a value.
1362 *
1363 * This effectively advances the iterator. It returns NULL if you are on
1364 * the final use and no more are available.
1365 */
Erick Tryzelaar9f9857e2010-03-02 20:32:28 +00001366LLVMUseRef LLVMGetNextUse(LLVMUseRef U);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001367
1368/**
1369 * Obtain the user value for a user.
1370 *
1371 * The returned value corresponds to a llvm::User type.
1372 *
1373 * @see llvm::Use::getUser()
1374 */
Erick Tryzelaar9f9857e2010-03-02 20:32:28 +00001375LLVMValueRef LLVMGetUser(LLVMUseRef U);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001376
1377/**
1378 * Obtain the value this use corresponds to.
1379 *
1380 * @see llvm::Use::get().
1381 */
Erick Tryzelaar9f9857e2010-03-02 20:32:28 +00001382LLVMValueRef LLVMGetUsedValue(LLVMUseRef U);
Chris Lattner40cf28d2009-10-12 04:01:02 +00001383
Gregory Szorc34c863a2012-03-21 03:54:29 +00001384/**
1385 * @}
1386 */
1387
1388/**
Gregory Szorc52d26602012-03-21 07:28:27 +00001389 * @defgroup LLVMCCoreValueUser User value
Gregory Szorc34c863a2012-03-21 03:54:29 +00001390 *
1391 * Function in this group pertain to LLVMValueRef instances that descent
1392 * from llvm::User. This includes constants, instructions, and
1393 * operators.
1394 *
1395 * @{
1396 */
1397
1398/**
1399 * Obtain an operand at a specific index in a llvm::User value.
1400 *
1401 * @see llvm::User::getOperand()
1402 */
Chris Lattner40cf28d2009-10-12 04:01:02 +00001403LLVMValueRef LLVMGetOperand(LLVMValueRef Val, unsigned Index);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001404
1405/**
Peter Zotovb19f78f2014-08-12 02:55:40 +00001406 * Obtain the use of an operand at a specific index in a llvm::User value.
1407 *
1408 * @see llvm::User::getOperandUse()
1409 */
1410LLVMUseRef LLVMGetOperandUse(LLVMValueRef Val, unsigned Index);
1411
1412/**
Gregory Szorc34c863a2012-03-21 03:54:29 +00001413 * Set an operand at a specific index in a llvm::User value.
1414 *
1415 * @see llvm::User::setOperand()
1416 */
Erick Tryzelaarb4d48702010-08-20 14:51:22 +00001417void LLVMSetOperand(LLVMValueRef User, unsigned Index, LLVMValueRef Val);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001418
1419/**
1420 * Obtain the number of operands in a llvm::User value.
1421 *
1422 * @see llvm::User::getNumOperands()
1423 */
Erick Tryzelaarb4d48702010-08-20 14:51:22 +00001424int LLVMGetNumOperands(LLVMValueRef Val);
Chris Lattner40cf28d2009-10-12 04:01:02 +00001425
Gregory Szorc34c863a2012-03-21 03:54:29 +00001426/**
1427 * @}
1428 */
1429
1430/**
Gregory Szorc52d26602012-03-21 07:28:27 +00001431 * @defgroup LLVMCCoreValueConstant Constants
Gregory Szorc34c863a2012-03-21 03:54:29 +00001432 *
1433 * This section contains APIs for interacting with LLVMValueRef that
1434 * correspond to llvm::Constant instances.
1435 *
1436 * These functions will work for any LLVMValueRef in the llvm::Constant
1437 * class hierarchy.
1438 *
1439 * @{
1440 */
1441
1442/**
1443 * Obtain a constant value referring to the null instance of a type.
1444 *
1445 * @see llvm::Constant::getNullValue()
1446 */
Gordon Henriksen1046c732007-10-06 15:11:06 +00001447LLVMValueRef LLVMConstNull(LLVMTypeRef Ty); /* all zeroes */
Gregory Szorc34c863a2012-03-21 03:54:29 +00001448
1449/**
1450 * Obtain a constant value referring to the instance of a type
1451 * consisting of all ones.
1452 *
1453 * This is only valid for integer types.
1454 *
1455 * @see llvm::Constant::getAllOnesValue()
1456 */
1457LLVMValueRef LLVMConstAllOnes(LLVMTypeRef Ty);
1458
1459/**
1460 * Obtain a constant value referring to an undefined value of a type.
1461 *
1462 * @see llvm::UndefValue::get()
1463 */
Gordon Henriksen76a03742007-09-18 03:18:57 +00001464LLVMValueRef LLVMGetUndef(LLVMTypeRef Ty);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001465
1466/**
1467 * Determine whether a value instance is null.
1468 *
1469 * @see llvm::Constant::isNullValue()
1470 */
Chris Lattner25963c62010-01-09 22:27:07 +00001471LLVMBool LLVMIsNull(LLVMValueRef Val);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001472
1473/**
1474 * Obtain a constant that is a constant pointer pointing to NULL for a
1475 * specified type.
1476 */
Chris Lattner7f318242009-07-06 17:29:59 +00001477LLVMValueRef LLVMConstPointerNull(LLVMTypeRef Ty);
Gordon Henriksen76a03742007-09-18 03:18:57 +00001478
Gregory Szorc34c863a2012-03-21 03:54:29 +00001479/**
1480 * @defgroup LLVMCCoreValueConstantScalar Scalar constants
1481 *
1482 * Functions in this group model LLVMValueRef instances that correspond
1483 * to constants referring to scalar types.
1484 *
1485 * For integer types, the LLVMTypeRef parameter should correspond to a
1486 * llvm::IntegerType instance and the returned LLVMValueRef will
1487 * correspond to a llvm::ConstantInt.
1488 *
1489 * For floating point types, the LLVMTypeRef returned corresponds to a
1490 * llvm::ConstantFP.
1491 *
1492 * @{
1493 */
Erick Tryzelaard8531fa2010-02-28 09:45:59 +00001494
Gregory Szorc34c863a2012-03-21 03:54:29 +00001495/**
1496 * Obtain a constant value for an integer type.
1497 *
1498 * The returned value corresponds to a llvm::ConstantInt.
1499 *
1500 * @see llvm::ConstantInt::get()
1501 *
1502 * @param IntTy Integer type to obtain value of.
1503 * @param N The value the returned instance should refer to.
1504 * @param SignExtend Whether to sign extend the produced value.
1505 */
Gordon Henriksen1046c732007-10-06 15:11:06 +00001506LLVMValueRef LLVMConstInt(LLVMTypeRef IntTy, unsigned long long N,
Chris Lattner25963c62010-01-09 22:27:07 +00001507 LLVMBool SignExtend);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001508
1509/**
1510 * Obtain a constant value for an integer of arbitrary precision.
1511 *
1512 * @see llvm::ConstantInt::get()
1513 */
Chris Lattner4329e072010-11-23 02:47:22 +00001514LLVMValueRef LLVMConstIntOfArbitraryPrecision(LLVMTypeRef IntTy,
1515 unsigned NumWords,
1516 const uint64_t Words[]);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001517
1518/**
1519 * Obtain a constant value for an integer parsed from a string.
1520 *
1521 * A similar API, LLVMConstIntOfStringAndSize is also available. If the
1522 * string's length is available, it is preferred to call that function
1523 * instead.
1524 *
1525 * @see llvm::ConstantInt::get()
1526 */
Erick Tryzelaardd991352009-08-16 23:36:46 +00001527LLVMValueRef LLVMConstIntOfString(LLVMTypeRef IntTy, const char *Text,
1528 uint8_t Radix);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001529
1530/**
1531 * Obtain a constant value for an integer parsed from a string with
1532 * specified length.
1533 *
1534 * @see llvm::ConstantInt::get()
1535 */
Erick Tryzelaardd991352009-08-16 23:36:46 +00001536LLVMValueRef LLVMConstIntOfStringAndSize(LLVMTypeRef IntTy, const char *Text,
1537 unsigned SLen, uint8_t Radix);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001538
1539/**
1540 * Obtain a constant value referring to a double floating point value.
1541 */
Gordon Henriksen1046c732007-10-06 15:11:06 +00001542LLVMValueRef LLVMConstReal(LLVMTypeRef RealTy, double N);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001543
1544/**
1545 * Obtain a constant for a floating point value parsed from a string.
1546 *
1547 * A similar API, LLVMConstRealOfStringAndSize is also available. It
1548 * should be used if the input string's length is known.
1549 */
Gordon Henriksen931e1212008-02-02 01:07:50 +00001550LLVMValueRef LLVMConstRealOfString(LLVMTypeRef RealTy, const char *Text);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001551
1552/**
1553 * Obtain a constant for a floating point value parsed from a string.
1554 */
Erick Tryzelaardd991352009-08-16 23:36:46 +00001555LLVMValueRef LLVMConstRealOfStringAndSize(LLVMTypeRef RealTy, const char *Text,
1556 unsigned SLen);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001557
1558/**
1559 * Obtain the zero extended value for an integer constant value.
1560 *
1561 * @see llvm::ConstantInt::getZExtValue()
1562 */
Chris Lattner40cf28d2009-10-12 04:01:02 +00001563unsigned long long LLVMConstIntGetZExtValue(LLVMValueRef ConstantVal);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001564
1565/**
1566 * Obtain the sign extended value for an integer constant value.
1567 *
1568 * @see llvm::ConstantInt::getSExtValue()
1569 */
Chris Lattner40cf28d2009-10-12 04:01:02 +00001570long long LLVMConstIntGetSExtValue(LLVMValueRef ConstantVal);
Erick Tryzelaardd991352009-08-16 23:36:46 +00001571
Gregory Szorc34c863a2012-03-21 03:54:29 +00001572/**
Peter Zotov1d98e6d2014-10-28 19:46:44 +00001573 * Obtain the double value for an floating point constant value.
1574 * losesInfo indicates if some precision was lost in the conversion.
1575 *
1576 * @see llvm::ConstantFP::getDoubleValue
1577 */
1578double LLVMConstRealGetDouble(LLVMValueRef ConstantVal, LLVMBool *losesInfo);
1579
1580/**
Gregory Szorc34c863a2012-03-21 03:54:29 +00001581 * @}
1582 */
1583
1584/**
Gregory Szorc52d26602012-03-21 07:28:27 +00001585 * @defgroup LLVMCCoreValueConstantComposite Composite Constants
1586 *
1587 * Functions in this group operate on composite constants.
Gregory Szorc34c863a2012-03-21 03:54:29 +00001588 *
1589 * @{
1590 */
1591
1592/**
Gregory Szorc52d26602012-03-21 07:28:27 +00001593 * Create a ConstantDataSequential and initialize it with a string.
Gregory Szorc34c863a2012-03-21 03:54:29 +00001594 *
Gregory Szorc52d26602012-03-21 07:28:27 +00001595 * @see llvm::ConstantDataArray::getString()
Gregory Szorc34c863a2012-03-21 03:54:29 +00001596 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +00001597LLVMValueRef LLVMConstStringInContext(LLVMContextRef C, const char *Str,
Chris Lattner25963c62010-01-09 22:27:07 +00001598 unsigned Length, LLVMBool DontNullTerminate);
Gregory Szorc52d26602012-03-21 07:28:27 +00001599
1600/**
1601 * Create a ConstantDataSequential with string content in the global context.
1602 *
1603 * This is the same as LLVMConstStringInContext except it operates on the
1604 * global context.
1605 *
1606 * @see LLVMConstStringInContext()
1607 * @see llvm::ConstantDataArray::getString()
1608 */
1609LLVMValueRef LLVMConstString(const char *Str, unsigned Length,
1610 LLVMBool DontNullTerminate);
1611
1612/**
Peter Zotovf9aa8822014-08-03 23:54:16 +00001613 * Returns true if the specified constant is an array of i8.
1614 *
1615 * @see ConstantDataSequential::getAsString()
1616 */
1617LLVMBool LLVMIsConstantString(LLVMValueRef c);
1618
1619/**
1620 * Get the given constant data sequential as a string.
1621 *
1622 * @see ConstantDataSequential::getAsString()
1623 */
1624const char *LLVMGetAsString(LLVMValueRef c, size_t* out);
1625
1626/**
Gregory Szorc52d26602012-03-21 07:28:27 +00001627 * Create an anonymous ConstantStruct with the specified values.
1628 *
1629 * @see llvm::ConstantStruct::getAnon()
1630 */
1631LLVMValueRef LLVMConstStructInContext(LLVMContextRef C,
Erick Tryzelaar262332f2009-08-14 00:01:31 +00001632 LLVMValueRef *ConstantVals,
Chris Lattner25963c62010-01-09 22:27:07 +00001633 unsigned Count, LLVMBool Packed);
Erick Tryzelaar262332f2009-08-14 00:01:31 +00001634
Gregory Szorc52d26602012-03-21 07:28:27 +00001635/**
1636 * Create a ConstantStruct in the global Context.
1637 *
1638 * This is the same as LLVMConstStructInContext except it operates on the
1639 * global Context.
1640 *
1641 * @see LLVMConstStructInContext()
1642 */
Gordon Henriksen1046c732007-10-06 15:11:06 +00001643LLVMValueRef LLVMConstStruct(LLVMValueRef *ConstantVals, unsigned Count,
Chris Lattner25963c62010-01-09 22:27:07 +00001644 LLVMBool Packed);
Gregory Szorc52d26602012-03-21 07:28:27 +00001645
1646/**
1647 * Create a ConstantArray from values.
1648 *
1649 * @see llvm::ConstantArray::get()
1650 */
1651LLVMValueRef LLVMConstArray(LLVMTypeRef ElementTy,
1652 LLVMValueRef *ConstantVals, unsigned Length);
1653
1654/**
1655 * Create a non-anonymous ConstantStruct from values.
1656 *
1657 * @see llvm::ConstantStruct::get()
1658 */
Rafael Espindola784ad242011-07-14 19:09:08 +00001659LLVMValueRef LLVMConstNamedStruct(LLVMTypeRef StructTy,
1660 LLVMValueRef *ConstantVals,
1661 unsigned Count);
Gregory Szorc52d26602012-03-21 07:28:27 +00001662
1663/**
Peter Zotovf9aa8822014-08-03 23:54:16 +00001664 * Get an element at specified index as a constant.
1665 *
1666 * @see ConstantDataSequential::getElementAsConstant()
1667 */
1668LLVMValueRef LLVMGetElementAsConstant(LLVMValueRef c, unsigned idx);
1669
1670/**
Gregory Szorc52d26602012-03-21 07:28:27 +00001671 * Create a ConstantVector from values.
1672 *
1673 * @see llvm::ConstantVector::get()
1674 */
Gordon Henriksen1046c732007-10-06 15:11:06 +00001675LLVMValueRef LLVMConstVector(LLVMValueRef *ScalarConstantVals, unsigned Size);
Gordon Henriksen76a03742007-09-18 03:18:57 +00001676
Gregory Szorc52d26602012-03-21 07:28:27 +00001677/**
1678 * @}
1679 */
1680
1681/**
1682 * @defgroup LLVMCCoreValueConstantExpressions Constant Expressions
1683 *
1684 * Functions in this group correspond to APIs on llvm::ConstantExpr.
1685 *
1686 * @see llvm::ConstantExpr.
1687 *
1688 * @{
1689 */
Chris Lattner40cf28d2009-10-12 04:01:02 +00001690LLVMOpcode LLVMGetConstOpcode(LLVMValueRef ConstantVal);
Erick Tryzelaarfd529d72009-08-19 08:36:49 +00001691LLVMValueRef LLVMAlignOf(LLVMTypeRef Ty);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001692LLVMValueRef LLVMSizeOf(LLVMTypeRef Ty);
1693LLVMValueRef LLVMConstNeg(LLVMValueRef ConstantVal);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +00001694LLVMValueRef LLVMConstNSWNeg(LLVMValueRef ConstantVal);
1695LLVMValueRef LLVMConstNUWNeg(LLVMValueRef ConstantVal);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +00001696LLVMValueRef LLVMConstFNeg(LLVMValueRef ConstantVal);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001697LLVMValueRef LLVMConstNot(LLVMValueRef ConstantVal);
1698LLVMValueRef LLVMConstAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Dan Gohmane4ca02d2009-09-03 23:34:49 +00001699LLVMValueRef LLVMConstNSWAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +00001700LLVMValueRef LLVMConstNUWAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +00001701LLVMValueRef LLVMConstFAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001702LLVMValueRef LLVMConstSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +00001703LLVMValueRef LLVMConstNSWSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1704LLVMValueRef LLVMConstNUWSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +00001705LLVMValueRef LLVMConstFSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001706LLVMValueRef LLVMConstMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +00001707LLVMValueRef LLVMConstNSWMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1708LLVMValueRef LLVMConstNUWMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +00001709LLVMValueRef LLVMConstFMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001710LLVMValueRef LLVMConstUDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1711LLVMValueRef LLVMConstSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Dan Gohmane4ca02d2009-09-03 23:34:49 +00001712LLVMValueRef LLVMConstExactSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001713LLVMValueRef LLVMConstFDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1714LLVMValueRef LLVMConstURem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1715LLVMValueRef LLVMConstSRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1716LLVMValueRef LLVMConstFRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1717LLVMValueRef LLVMConstAnd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1718LLVMValueRef LLVMConstOr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1719LLVMValueRef LLVMConstXor(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1720LLVMValueRef LLVMConstICmp(LLVMIntPredicate Predicate,
1721 LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1722LLVMValueRef LLVMConstFCmp(LLVMRealPredicate Predicate,
1723 LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1724LLVMValueRef LLVMConstShl(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1725LLVMValueRef LLVMConstLShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1726LLVMValueRef LLVMConstAShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1727LLVMValueRef LLVMConstGEP(LLVMValueRef ConstantVal,
1728 LLVMValueRef *ConstantIndices, unsigned NumIndices);
Dan Gohmane4ca02d2009-09-03 23:34:49 +00001729LLVMValueRef LLVMConstInBoundsGEP(LLVMValueRef ConstantVal,
1730 LLVMValueRef *ConstantIndices,
1731 unsigned NumIndices);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001732LLVMValueRef LLVMConstTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1733LLVMValueRef LLVMConstSExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1734LLVMValueRef LLVMConstZExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1735LLVMValueRef LLVMConstFPTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1736LLVMValueRef LLVMConstFPExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1737LLVMValueRef LLVMConstUIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1738LLVMValueRef LLVMConstSIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1739LLVMValueRef LLVMConstFPToUI(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1740LLVMValueRef LLVMConstFPToSI(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1741LLVMValueRef LLVMConstPtrToInt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1742LLVMValueRef LLVMConstIntToPtr(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1743LLVMValueRef LLVMConstBitCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
Matt Arsenaultb03bd4d2013-11-15 01:34:59 +00001744LLVMValueRef LLVMConstAddrSpaceCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +00001745LLVMValueRef LLVMConstZExtOrBitCast(LLVMValueRef ConstantVal,
1746 LLVMTypeRef ToType);
1747LLVMValueRef LLVMConstSExtOrBitCast(LLVMValueRef ConstantVal,
1748 LLVMTypeRef ToType);
1749LLVMValueRef LLVMConstTruncOrBitCast(LLVMValueRef ConstantVal,
1750 LLVMTypeRef ToType);
1751LLVMValueRef LLVMConstPointerCast(LLVMValueRef ConstantVal,
1752 LLVMTypeRef ToType);
1753LLVMValueRef LLVMConstIntCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType,
Chris Lattner25963c62010-01-09 22:27:07 +00001754 LLVMBool isSigned);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +00001755LLVMValueRef LLVMConstFPCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001756LLVMValueRef LLVMConstSelect(LLVMValueRef ConstantCondition,
1757 LLVMValueRef ConstantIfTrue,
1758 LLVMValueRef ConstantIfFalse);
1759LLVMValueRef LLVMConstExtractElement(LLVMValueRef VectorConstant,
1760 LLVMValueRef IndexConstant);
1761LLVMValueRef LLVMConstInsertElement(LLVMValueRef VectorConstant,
1762 LLVMValueRef ElementValueConstant,
1763 LLVMValueRef IndexConstant);
1764LLVMValueRef LLVMConstShuffleVector(LLVMValueRef VectorAConstant,
1765 LLVMValueRef VectorBConstant,
1766 LLVMValueRef MaskConstant);
Dan Gohmand5104a52008-11-03 22:55:43 +00001767LLVMValueRef LLVMConstExtractValue(LLVMValueRef AggConstant, unsigned *IdxList,
1768 unsigned NumIdx);
1769LLVMValueRef LLVMConstInsertValue(LLVMValueRef AggConstant,
1770 LLVMValueRef ElementValueConstant,
1771 unsigned *IdxList, unsigned NumIdx);
Chris Lattner25963c62010-01-09 22:27:07 +00001772LLVMValueRef LLVMConstInlineAsm(LLVMTypeRef Ty,
Chris Lattner3d1f5522008-12-17 21:39:50 +00001773 const char *AsmString, const char *Constraints,
Chris Lattner25963c62010-01-09 22:27:07 +00001774 LLVMBool HasSideEffects, LLVMBool IsAlignStack);
Erick Tryzelaar0fb26ef2010-02-28 09:46:06 +00001775LLVMValueRef LLVMBlockAddress(LLVMValueRef F, LLVMBasicBlockRef BB);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001776
Gregory Szorc52d26602012-03-21 07:28:27 +00001777/**
1778 * @}
1779 */
1780
1781/**
1782 * @defgroup LLVMCCoreValueConstantGlobals Global Values
1783 *
1784 * This group contains functions that operate on global values. Functions in
1785 * this group relate to functions in the llvm::GlobalValue class tree.
1786 *
1787 * @see llvm::GlobalValue
1788 *
1789 * @{
1790 */
1791
Gordon Henriksen265f7802008-03-19 01:11:35 +00001792LLVMModuleRef LLVMGetGlobalParent(LLVMValueRef Global);
Chris Lattner25963c62010-01-09 22:27:07 +00001793LLVMBool LLVMIsDeclaration(LLVMValueRef Global);
Gordon Henriksen76a03742007-09-18 03:18:57 +00001794LLVMLinkage LLVMGetLinkage(LLVMValueRef Global);
1795void LLVMSetLinkage(LLVMValueRef Global, LLVMLinkage Linkage);
1796const char *LLVMGetSection(LLVMValueRef Global);
1797void LLVMSetSection(LLVMValueRef Global, const char *Section);
1798LLVMVisibility LLVMGetVisibility(LLVMValueRef Global);
1799void LLVMSetVisibility(LLVMValueRef Global, LLVMVisibility Viz);
Reid Kleckner2fae26f2014-03-05 02:34:23 +00001800LLVMDLLStorageClass LLVMGetDLLStorageClass(LLVMValueRef Global);
1801void LLVMSetDLLStorageClass(LLVMValueRef Global, LLVMDLLStorageClass Class);
Tim Northoverad96d012014-03-10 19:24:35 +00001802LLVMBool LLVMHasUnnamedAddr(LLVMValueRef Global);
1803void LLVMSetUnnamedAddr(LLVMValueRef Global, LLVMBool HasUnnamedAddr);
Anders Waldenborg213a63f2013-10-29 09:02:02 +00001804
1805/**
1806 * @defgroup LLVMCCoreValueWithAlignment Values with alignment
1807 *
1808 * Functions in this group only apply to values with alignment, i.e.
1809 * global variables, load and store instructions.
1810 */
1811
1812/**
1813 * Obtain the preferred alignment of the value.
Peter Zotov9f584e62014-03-05 05:05:34 +00001814 * @see llvm::AllocaInst::getAlignment()
Anders Waldenborg213a63f2013-10-29 09:02:02 +00001815 * @see llvm::LoadInst::getAlignment()
1816 * @see llvm::StoreInst::getAlignment()
1817 * @see llvm::GlobalValue::getAlignment()
1818 */
1819unsigned LLVMGetAlignment(LLVMValueRef V);
1820
1821/**
1822 * Set the preferred alignment of the value.
Peter Zotov9f584e62014-03-05 05:05:34 +00001823 * @see llvm::AllocaInst::setAlignment()
Anders Waldenborg213a63f2013-10-29 09:02:02 +00001824 * @see llvm::LoadInst::setAlignment()
1825 * @see llvm::StoreInst::setAlignment()
1826 * @see llvm::GlobalValue::setAlignment()
1827 */
1828void LLVMSetAlignment(LLVMValueRef V, unsigned Bytes);
1829
1830/**
1831 * @}
1832 */
Gordon Henriksen76a03742007-09-18 03:18:57 +00001833
Gregory Szorc52d26602012-03-21 07:28:27 +00001834/**
1835 * @defgroup LLVMCoreValueConstantGlobalVariable Global Variables
1836 *
1837 * This group contains functions that operate on global variable values.
1838 *
1839 * @see llvm::GlobalVariable
1840 *
1841 * @{
1842 */
Gordon Henriksen76a03742007-09-18 03:18:57 +00001843LLVMValueRef LLVMAddGlobal(LLVMModuleRef M, LLVMTypeRef Ty, const char *Name);
Erick Tryzelaar06894b32010-02-28 09:46:13 +00001844LLVMValueRef LLVMAddGlobalInAddressSpace(LLVMModuleRef M, LLVMTypeRef Ty,
1845 const char *Name,
1846 unsigned AddressSpace);
Gordon Henriksen783f7bb2007-10-08 03:45:09 +00001847LLVMValueRef LLVMGetNamedGlobal(LLVMModuleRef M, const char *Name);
Gordon Henriksen07a45f42008-03-23 22:21:29 +00001848LLVMValueRef LLVMGetFirstGlobal(LLVMModuleRef M);
1849LLVMValueRef LLVMGetLastGlobal(LLVMModuleRef M);
1850LLVMValueRef LLVMGetNextGlobal(LLVMValueRef GlobalVar);
1851LLVMValueRef LLVMGetPreviousGlobal(LLVMValueRef GlobalVar);
Gordon Henriksen76a03742007-09-18 03:18:57 +00001852void LLVMDeleteGlobal(LLVMValueRef GlobalVar);
Gordon Henriksen76a03742007-09-18 03:18:57 +00001853LLVMValueRef LLVMGetInitializer(LLVMValueRef GlobalVar);
1854void LLVMSetInitializer(LLVMValueRef GlobalVar, LLVMValueRef ConstantVal);
Chris Lattner25963c62010-01-09 22:27:07 +00001855LLVMBool LLVMIsThreadLocal(LLVMValueRef GlobalVar);
1856void LLVMSetThreadLocal(LLVMValueRef GlobalVar, LLVMBool IsThreadLocal);
1857LLVMBool LLVMIsGlobalConstant(LLVMValueRef GlobalVar);
1858void LLVMSetGlobalConstant(LLVMValueRef GlobalVar, LLVMBool IsConstant);
Hans Wennborg5ff71202013-04-16 08:58:59 +00001859LLVMThreadLocalMode LLVMGetThreadLocalMode(LLVMValueRef GlobalVar);
1860void LLVMSetThreadLocalMode(LLVMValueRef GlobalVar, LLVMThreadLocalMode Mode);
1861LLVMBool LLVMIsExternallyInitialized(LLVMValueRef GlobalVar);
1862void LLVMSetExternallyInitialized(LLVMValueRef GlobalVar, LLVMBool IsExtInit);
Gordon Henriksen76a03742007-09-18 03:18:57 +00001863
Gregory Szorc52d26602012-03-21 07:28:27 +00001864/**
1865 * @}
1866 */
1867
1868/**
1869 * @defgroup LLVMCoreValueConstantGlobalAlias Global Aliases
1870 *
1871 * This group contains function that operate on global alias values.
1872 *
1873 * @see llvm::GlobalAlias
1874 *
1875 * @{
1876 */
Chris Lattner3d1f5522008-12-17 21:39:50 +00001877LLVMValueRef LLVMAddAlias(LLVMModuleRef M, LLVMTypeRef Ty, LLVMValueRef Aliasee,
1878 const char *Name);
1879
Gregory Szorc34c863a2012-03-21 03:54:29 +00001880/**
1881 * @}
1882 */
1883
1884/**
1885 * @defgroup LLVMCCoreValueFunction Function values
1886 *
1887 * Functions in this group operate on LLVMValueRef instances that
1888 * correspond to llvm::Function instances.
1889 *
1890 * @see llvm::Function
1891 *
1892 * @{
1893 */
1894
1895/**
1896 * Remove a function from its containing module and deletes it.
1897 *
1898 * @see llvm::Function::eraseFromParent()
1899 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00001900void LLVMDeleteFunction(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001901
1902/**
Andrew Wilkins3bdfc1c2015-07-14 01:23:06 +00001903 * Obtain the personality function attached to the function.
1904 *
1905 * @see llvm::Function::getPersonalityFn()
1906 */
1907LLVMValueRef LLVMGetPersonalityFn(LLVMValueRef Fn);
1908
1909/**
1910 * Set the personality function attached to the function.
1911 *
1912 * @see llvm::Function::setPersonalityFn()
1913 */
1914void LLVMSetPersonalityFn(LLVMValueRef Fn, LLVMValueRef PersonalityFn);
1915
1916/**
Gregory Szorc34c863a2012-03-21 03:54:29 +00001917 * Obtain the ID number from a function instance.
1918 *
1919 * @see llvm::Function::getIntrinsicID()
1920 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00001921unsigned LLVMGetIntrinsicID(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001922
1923/**
1924 * Obtain the calling function of a function.
1925 *
1926 * The returned value corresponds to the LLVMCallConv enumeration.
1927 *
1928 * @see llvm::Function::getCallingConv()
1929 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00001930unsigned LLVMGetFunctionCallConv(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001931
1932/**
1933 * Set the calling convention of a function.
1934 *
1935 * @see llvm::Function::setCallingConv()
1936 *
1937 * @param Fn Function to operate on
1938 * @param CC LLVMCallConv to set calling convention to
1939 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00001940void LLVMSetFunctionCallConv(LLVMValueRef Fn, unsigned CC);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001941
1942/**
1943 * Obtain the name of the garbage collector to use during code
1944 * generation.
1945 *
1946 * @see llvm::Function::getGC()
1947 */
Gordon Henriksend930f912008-08-17 18:44:35 +00001948const char *LLVMGetGC(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001949
1950/**
1951 * Define the garbage collector to use during code generation.
1952 *
1953 * @see llvm::Function::setGC()
1954 */
Gordon Henriksend930f912008-08-17 18:44:35 +00001955void LLVMSetGC(LLVMValueRef Fn, const char *Name);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001956
1957/**
1958 * Add an attribute to a function.
1959 *
1960 * @see llvm::Function::addAttribute()
1961 */
Duncan Sands7374a012009-05-06 12:21:17 +00001962void LLVMAddFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001963
1964/**
Nick Lewyckyc3890d22015-07-29 22:32:47 +00001965 * Add a target-dependent attribute to a function
Tom Stellarde8f35e12013-04-16 23:12:43 +00001966 * @see llvm::AttrBuilder::addAttribute()
1967 */
1968void LLVMAddTargetDependentFunctionAttr(LLVMValueRef Fn, const char *A,
1969 const char *V);
1970
1971/**
Gregory Szorc34c863a2012-03-21 03:54:29 +00001972 * Obtain an attribute from a function.
1973 *
1974 * @see llvm::Function::getAttributes()
1975 */
Chris Lattner40cf28d2009-10-12 04:01:02 +00001976LLVMAttribute LLVMGetFunctionAttr(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001977
1978/**
1979 * Remove an attribute from a function.
1980 */
Duncan Sands7374a012009-05-06 12:21:17 +00001981void LLVMRemoveFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00001982
Gregory Szorc34c863a2012-03-21 03:54:29 +00001983/**
1984 * @defgroup LLVMCCoreValueFunctionParameters Function Parameters
1985 *
1986 * Functions in this group relate to arguments/parameters on functions.
1987 *
1988 * Functions in this group expect LLVMValueRef instances that correspond
1989 * to llvm::Function instances.
1990 *
1991 * @{
1992 */
1993
1994/**
1995 * Obtain the number of parameters in a function.
1996 *
1997 * @see llvm::Function::arg_size()
1998 */
Gordon Henriksen265f7802008-03-19 01:11:35 +00001999unsigned LLVMCountParams(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002000
2001/**
2002 * Obtain the parameters in a function.
2003 *
2004 * The takes a pointer to a pre-allocated array of LLVMValueRef that is
2005 * at least LLVMCountParams() long. This array will be filled with
2006 * LLVMValueRef instances which correspond to the parameters the
2007 * function receives. Each LLVMValueRef corresponds to a llvm::Argument
2008 * instance.
2009 *
2010 * @see llvm::Function::arg_begin()
2011 */
Gordon Henriksen265f7802008-03-19 01:11:35 +00002012void LLVMGetParams(LLVMValueRef Fn, LLVMValueRef *Params);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002013
2014/**
2015 * Obtain the parameter at the specified index.
2016 *
2017 * Parameters are indexed from 0.
2018 *
2019 * @see llvm::Function::arg_begin()
2020 */
Gordon Henriksen265f7802008-03-19 01:11:35 +00002021LLVMValueRef LLVMGetParam(LLVMValueRef Fn, unsigned Index);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002022
2023/**
2024 * Obtain the function to which this argument belongs.
2025 *
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +00002026 * Unlike other functions in this group, this one takes an LLVMValueRef
Gregory Szorc34c863a2012-03-21 03:54:29 +00002027 * that corresponds to a llvm::Attribute.
2028 *
2029 * The returned LLVMValueRef is the llvm::Function to which this
2030 * argument belongs.
2031 */
Gordon Henriksen265f7802008-03-19 01:11:35 +00002032LLVMValueRef LLVMGetParamParent(LLVMValueRef Inst);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002033
2034/**
2035 * Obtain the first parameter to a function.
2036 *
2037 * @see llvm::Function::arg_begin()
2038 */
Gordon Henriksen07a45f42008-03-23 22:21:29 +00002039LLVMValueRef LLVMGetFirstParam(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002040
2041/**
2042 * Obtain the last parameter to a function.
2043 *
2044 * @see llvm::Function::arg_end()
2045 */
Gordon Henriksen07a45f42008-03-23 22:21:29 +00002046LLVMValueRef LLVMGetLastParam(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002047
2048/**
2049 * Obtain the next parameter to a function.
2050 *
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +00002051 * This takes an LLVMValueRef obtained from LLVMGetFirstParam() (which is
Gregory Szorc34c863a2012-03-21 03:54:29 +00002052 * actually a wrapped iterator) and obtains the next parameter from the
2053 * underlying iterator.
2054 */
Gordon Henriksen07a45f42008-03-23 22:21:29 +00002055LLVMValueRef LLVMGetNextParam(LLVMValueRef Arg);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002056
2057/**
2058 * Obtain the previous parameter to a function.
2059 *
2060 * This is the opposite of LLVMGetNextParam().
2061 */
Gordon Henriksen07a45f42008-03-23 22:21:29 +00002062LLVMValueRef LLVMGetPreviousParam(LLVMValueRef Arg);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002063
2064/**
2065 * Add an attribute to a function argument.
2066 *
2067 * @see llvm::Argument::addAttr()
2068 */
Devang Patel4c758ea2008-09-25 21:00:45 +00002069void LLVMAddAttribute(LLVMValueRef Arg, LLVMAttribute PA);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002070
2071/**
2072 * Remove an attribute from a function argument.
2073 *
2074 * @see llvm::Argument::removeAttr()
2075 */
Devang Patel4c758ea2008-09-25 21:00:45 +00002076void LLVMRemoveAttribute(LLVMValueRef Arg, LLVMAttribute PA);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002077
2078/**
2079 * Get an attribute from a function argument.
2080 */
Chris Lattner40cf28d2009-10-12 04:01:02 +00002081LLVMAttribute LLVMGetAttribute(LLVMValueRef Arg);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002082
2083/**
2084 * Set the alignment for a function parameter.
2085 *
2086 * @see llvm::Argument::addAttr()
Bill Wendling50d27842012-10-15 20:35:56 +00002087 * @see llvm::AttrBuilder::addAlignmentAttr()
Gregory Szorc34c863a2012-03-21 03:54:29 +00002088 */
Gordon Henriksen2d9cc212008-04-28 17:37:06 +00002089void LLVMSetParamAlignment(LLVMValueRef Arg, unsigned align);
Gordon Henriksen265f7802008-03-19 01:11:35 +00002090
Gregory Szorc34c863a2012-03-21 03:54:29 +00002091/**
2092 * @}
2093 */
2094
2095/**
2096 * @}
2097 */
2098
2099/**
Gregory Szorc52d26602012-03-21 07:28:27 +00002100 * @}
2101 */
2102
2103/**
2104 * @}
2105 */
2106
2107/**
2108 * @defgroup LLVMCCoreValueMetadata Metadata
2109 *
2110 * @{
2111 */
2112
2113/**
2114 * Obtain a MDString value from a context.
2115 *
2116 * The returned instance corresponds to the llvm::MDString class.
2117 *
2118 * The instance is specified by string data of a specified length. The
2119 * string content is copied, so the backing memory can be freed after
2120 * this function returns.
2121 */
2122LLVMValueRef LLVMMDStringInContext(LLVMContextRef C, const char *Str,
2123 unsigned SLen);
2124
2125/**
2126 * Obtain a MDString value from the global context.
2127 */
2128LLVMValueRef LLVMMDString(const char *Str, unsigned SLen);
2129
2130/**
2131 * Obtain a MDNode value from a context.
2132 *
2133 * The returned value corresponds to the llvm::MDNode class.
2134 */
2135LLVMValueRef LLVMMDNodeInContext(LLVMContextRef C, LLVMValueRef *Vals,
2136 unsigned Count);
2137
2138/**
2139 * Obtain a MDNode value from the global context.
2140 */
2141LLVMValueRef LLVMMDNode(LLVMValueRef *Vals, unsigned Count);
2142
2143/**
2144 * Obtain the underlying string from a MDString value.
2145 *
2146 * @param V Instance to obtain string from.
2147 * @param Len Memory address which will hold length of returned string.
2148 * @return String data in MDString.
2149 */
2150const char *LLVMGetMDString(LLVMValueRef V, unsigned* Len);
2151
2152/**
Duncan Sands12ccbe72012-09-19 20:29:39 +00002153 * Obtain the number of operands from an MDNode value.
2154 *
2155 * @param V MDNode to get number of operands from.
2156 * @return Number of operands of the MDNode.
2157 */
2158unsigned LLVMGetMDNodeNumOperands(LLVMValueRef V);
2159
2160/**
2161 * Obtain the given MDNode's operands.
2162 *
2163 * The passed LLVMValueRef pointer should point to enough memory to hold all of
2164 * the operands of the given MDNode (see LLVMGetMDNodeNumOperands) as
2165 * LLVMValueRefs. This memory will be populated with the LLVMValueRefs of the
2166 * MDNode's operands.
2167 *
2168 * @param V MDNode to get the operands from.
2169 * @param Dest Destination array for operands.
2170 */
2171void LLVMGetMDNodeOperands(LLVMValueRef V, LLVMValueRef *Dest);
2172
2173/**
Gregory Szorc52d26602012-03-21 07:28:27 +00002174 * @}
2175 */
2176
2177/**
Gregory Szorc34c863a2012-03-21 03:54:29 +00002178 * @defgroup LLVMCCoreValueBasicBlock Basic Block
2179 *
2180 * A basic block represents a single entry single exit section of code.
2181 * Basic blocks contain a list of instructions which form the body of
2182 * the block.
2183 *
2184 * Basic blocks belong to functions. They have the type of label.
2185 *
2186 * Basic blocks are themselves values. However, the C API models them as
2187 * LLVMBasicBlockRef.
2188 *
2189 * @see llvm::BasicBlock
2190 *
2191 * @{
2192 */
2193
2194/**
2195 * Convert a basic block instance to a value type.
2196 */
Gordon Henriksen07a45f42008-03-23 22:21:29 +00002197LLVMValueRef LLVMBasicBlockAsValue(LLVMBasicBlockRef BB);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002198
2199/**
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +00002200 * Determine whether an LLVMValueRef is itself a basic block.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002201 */
Chris Lattner25963c62010-01-09 22:27:07 +00002202LLVMBool LLVMValueIsBasicBlock(LLVMValueRef Val);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002203
2204/**
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +00002205 * Convert an LLVMValueRef to an LLVMBasicBlockRef instance.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002206 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002207LLVMBasicBlockRef LLVMValueAsBasicBlock(LLVMValueRef Val);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002208
2209/**
2210 * Obtain the function to which a basic block belongs.
2211 *
2212 * @see llvm::BasicBlock::getParent()
2213 */
Gordon Henriksen07a45f42008-03-23 22:21:29 +00002214LLVMValueRef LLVMGetBasicBlockParent(LLVMBasicBlockRef BB);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002215
2216/**
2217 * Obtain the terminator instruction for a basic block.
2218 *
2219 * If the basic block does not have a terminator (it is not well-formed
2220 * if it doesn't), then NULL is returned.
2221 *
2222 * The returned LLVMValueRef corresponds to a llvm::TerminatorInst.
2223 *
2224 * @see llvm::BasicBlock::getTerminator()
2225 */
Nate Begeman43c322b2011-08-23 20:27:46 +00002226LLVMValueRef LLVMGetBasicBlockTerminator(LLVMBasicBlockRef BB);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002227
2228/**
2229 * Obtain the number of basic blocks in a function.
2230 *
2231 * @param Fn Function value to operate on.
2232 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002233unsigned LLVMCountBasicBlocks(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002234
2235/**
2236 * Obtain all of the basic blocks in a function.
2237 *
2238 * This operates on a function value. The BasicBlocks parameter is a
2239 * pointer to a pre-allocated array of LLVMBasicBlockRef of at least
2240 * LLVMCountBasicBlocks() in length. This array is populated with
2241 * LLVMBasicBlockRef instances.
2242 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002243void LLVMGetBasicBlocks(LLVMValueRef Fn, LLVMBasicBlockRef *BasicBlocks);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002244
2245/**
2246 * Obtain the first basic block in a function.
2247 *
2248 * The returned basic block can be used as an iterator. You will likely
2249 * eventually call into LLVMGetNextBasicBlock() with it.
2250 *
2251 * @see llvm::Function::begin()
2252 */
Gordon Henriksen054817c2008-03-19 03:47:18 +00002253LLVMBasicBlockRef LLVMGetFirstBasicBlock(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002254
2255/**
2256 * Obtain the last basic block in a function.
2257 *
2258 * @see llvm::Function::end()
2259 */
Gordon Henriksen054817c2008-03-19 03:47:18 +00002260LLVMBasicBlockRef LLVMGetLastBasicBlock(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002261
2262/**
2263 * Advance a basic block iterator.
2264 */
Gordon Henriksen054817c2008-03-19 03:47:18 +00002265LLVMBasicBlockRef LLVMGetNextBasicBlock(LLVMBasicBlockRef BB);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002266
2267/**
2268 * Go backwards in a basic block iterator.
2269 */
Gordon Henriksen054817c2008-03-19 03:47:18 +00002270LLVMBasicBlockRef LLVMGetPreviousBasicBlock(LLVMBasicBlockRef BB);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002271
2272/**
2273 * Obtain the basic block that corresponds to the entry point of a
2274 * function.
2275 *
2276 * @see llvm::Function::getEntryBlock()
2277 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002278LLVMBasicBlockRef LLVMGetEntryBasicBlock(LLVMValueRef Fn);
Erick Tryzelaar262332f2009-08-14 00:01:31 +00002279
Gregory Szorc34c863a2012-03-21 03:54:29 +00002280/**
2281 * Append a basic block to the end of a function.
2282 *
2283 * @see llvm::BasicBlock::Create()
2284 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +00002285LLVMBasicBlockRef LLVMAppendBasicBlockInContext(LLVMContextRef C,
2286 LLVMValueRef Fn,
2287 const char *Name);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002288
2289/**
2290 * Append a basic block to the end of a function using the global
2291 * context.
2292 *
2293 * @see llvm::BasicBlock::Create()
2294 */
2295LLVMBasicBlockRef LLVMAppendBasicBlock(LLVMValueRef Fn, const char *Name);
2296
2297/**
2298 * Insert a basic block in a function before another basic block.
2299 *
2300 * The function to add to is determined by the function of the
2301 * passed basic block.
2302 *
2303 * @see llvm::BasicBlock::Create()
2304 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +00002305LLVMBasicBlockRef LLVMInsertBasicBlockInContext(LLVMContextRef C,
2306 LLVMBasicBlockRef BB,
2307 const char *Name);
2308
Gregory Szorc34c863a2012-03-21 03:54:29 +00002309/**
2310 * Insert a basic block in a function using the global context.
2311 *
2312 * @see llvm::BasicBlock::Create()
2313 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002314LLVMBasicBlockRef LLVMInsertBasicBlock(LLVMBasicBlockRef InsertBeforeBB,
2315 const char *Name);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002316
2317/**
2318 * Remove a basic block from a function and delete it.
2319 *
2320 * This deletes the basic block from its containing function and deletes
2321 * the basic block itself.
2322 *
2323 * @see llvm::BasicBlock::eraseFromParent()
2324 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002325void LLVMDeleteBasicBlock(LLVMBasicBlockRef BB);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002326
2327/**
2328 * Remove a basic block from a function.
2329 *
2330 * This deletes the basic block from its containing function but keep
2331 * the basic block alive.
2332 *
2333 * @see llvm::BasicBlock::removeFromParent()
2334 */
Nate Begeman43c322b2011-08-23 20:27:46 +00002335void LLVMRemoveBasicBlockFromParent(LLVMBasicBlockRef BB);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002336
Gregory Szorc34c863a2012-03-21 03:54:29 +00002337/**
2338 * Move a basic block to before another one.
2339 *
2340 * @see llvm::BasicBlock::moveBefore()
2341 */
Duncan Sandsb1d61aa2010-07-19 15:31:07 +00002342void LLVMMoveBasicBlockBefore(LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002343
2344/**
2345 * Move a basic block to after another one.
2346 *
2347 * @see llvm::BasicBlock::moveAfter()
2348 */
Duncan Sandsb1d61aa2010-07-19 15:31:07 +00002349void LLVMMoveBasicBlockAfter(LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos);
2350
Gregory Szorc34c863a2012-03-21 03:54:29 +00002351/**
2352 * Obtain the first instruction in a basic block.
2353 *
2354 * The returned LLVMValueRef corresponds to a llvm::Instruction
2355 * instance.
2356 */
Gordon Henriksen054817c2008-03-19 03:47:18 +00002357LLVMValueRef LLVMGetFirstInstruction(LLVMBasicBlockRef BB);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002358
2359/**
2360 * Obtain the last instruction in a basic block.
2361 *
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +00002362 * The returned LLVMValueRef corresponds to an LLVM:Instruction.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002363 */
Gordon Henriksen054817c2008-03-19 03:47:18 +00002364LLVMValueRef LLVMGetLastInstruction(LLVMBasicBlockRef BB);
Nate Begeman43c322b2011-08-23 20:27:46 +00002365
Gregory Szorc34c863a2012-03-21 03:54:29 +00002366/**
2367 * @}
2368 */
2369
2370/**
2371 * @defgroup LLVMCCoreValueInstruction Instructions
2372 *
2373 * Functions in this group relate to the inspection and manipulation of
2374 * individual instructions.
2375 *
2376 * In the C++ API, an instruction is modeled by llvm::Instruction. This
2377 * class has a large number of descendents. llvm::Instruction is a
2378 * llvm::Value and in the C API, instructions are modeled by
2379 * LLVMValueRef.
2380 *
2381 * This group also contains sub-groups which operate on specific
2382 * llvm::Instruction types, e.g. llvm::CallInst.
2383 *
2384 * @{
2385 */
2386
2387/**
2388 * Determine whether an instruction has any metadata attached.
2389 */
2390int LLVMHasMetadata(LLVMValueRef Val);
2391
2392/**
2393 * Return metadata associated with an instruction value.
2394 */
2395LLVMValueRef LLVMGetMetadata(LLVMValueRef Val, unsigned KindID);
2396
2397/**
2398 * Set metadata associated with an instruction value.
2399 */
2400void LLVMSetMetadata(LLVMValueRef Val, unsigned KindID, LLVMValueRef Node);
2401
2402/**
2403 * Obtain the basic block to which an instruction belongs.
2404 *
2405 * @see llvm::Instruction::getParent()
2406 */
Nate Begeman43c322b2011-08-23 20:27:46 +00002407LLVMBasicBlockRef LLVMGetInstructionParent(LLVMValueRef Inst);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002408
2409/**
2410 * Obtain the instruction that occurs after the one specified.
2411 *
2412 * The next instruction will be from the same basic block.
2413 *
2414 * If this is the last instruction in a basic block, NULL will be
2415 * returned.
2416 */
Gordon Henriksen054817c2008-03-19 03:47:18 +00002417LLVMValueRef LLVMGetNextInstruction(LLVMValueRef Inst);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002418
2419/**
Benjamin Kramerbde91762012-06-02 10:20:22 +00002420 * Obtain the instruction that occurred before this one.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002421 *
2422 * If the instruction is the first instruction in a basic block, NULL
2423 * will be returned.
2424 */
Gordon Henriksen054817c2008-03-19 03:47:18 +00002425LLVMValueRef LLVMGetPreviousInstruction(LLVMValueRef Inst);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002426
2427/**
2428 * Remove and delete an instruction.
2429 *
2430 * The instruction specified is removed from its containing building
2431 * block and then deleted.
2432 *
2433 * @see llvm::Instruction::eraseFromParent()
2434 */
Devang Pateldbebc6f2011-10-03 20:59:18 +00002435void LLVMInstructionEraseFromParent(LLVMValueRef Inst);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002436
2437/**
2438 * Obtain the code opcode for an individual instruction.
2439 *
2440 * @see llvm::Instruction::getOpCode()
2441 */
Torok Edwinab6158e2011-10-14 20:37:49 +00002442LLVMOpcode LLVMGetInstructionOpcode(LLVMValueRef Inst);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002443
2444/**
2445 * Obtain the predicate of an instruction.
2446 *
2447 * This is only valid for instructions that correspond to llvm::ICmpInst
2448 * or llvm::ConstantExpr whose opcode is llvm::Instruction::ICmp.
2449 *
2450 * @see llvm::ICmpInst::getPredicate()
2451 */
Torok Edwin60c40de2011-10-06 12:13:20 +00002452LLVMIntPredicate LLVMGetICmpPredicate(LLVMValueRef Inst);
Gordon Henriksen265f7802008-03-19 01:11:35 +00002453
Gregory Szorc34c863a2012-03-21 03:54:29 +00002454/**
Peter Zotov1d98e6d2014-10-28 19:46:44 +00002455 * Obtain the float predicate of an instruction.
2456 *
2457 * This is only valid for instructions that correspond to llvm::FCmpInst
2458 * or llvm::ConstantExpr whose opcode is llvm::Instruction::FCmp.
2459 *
2460 * @see llvm::FCmpInst::getPredicate()
2461 */
2462LLVMRealPredicate LLVMGetFCmpPredicate(LLVMValueRef Inst);
2463
2464/**
Peter Zotovaff492c2014-10-17 01:02:34 +00002465 * Create a copy of 'this' instruction that is identical in all ways
2466 * except the following:
2467 * * The instruction has no parent
2468 * * The instruction has no name
2469 *
2470 * @see llvm::Instruction::clone()
2471 */
2472LLVMValueRef LLVMInstructionClone(LLVMValueRef Inst);
2473
2474/**
Gregory Szorc34c863a2012-03-21 03:54:29 +00002475 * @defgroup LLVMCCoreValueInstructionCall Call Sites and Invocations
2476 *
2477 * Functions in this group apply to instructions that refer to call
2478 * sites and invocations. These correspond to C++ types in the
2479 * llvm::CallInst class tree.
2480 *
2481 * @{
2482 */
2483
2484/**
2485 * Set the calling convention for a call instruction.
2486 *
2487 * This expects an LLVMValueRef that corresponds to a llvm::CallInst or
2488 * llvm::InvokeInst.
2489 *
2490 * @see llvm::CallInst::setCallingConv()
2491 * @see llvm::InvokeInst::setCallingConv()
2492 */
Gordon Henriksen1158c532007-12-29 20:45:00 +00002493void LLVMSetInstructionCallConv(LLVMValueRef Instr, unsigned CC);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002494
2495/**
2496 * Obtain the calling convention for a call instruction.
2497 *
2498 * This is the opposite of LLVMSetInstructionCallConv(). Reads its
2499 * usage.
2500 *
2501 * @see LLVMSetInstructionCallConv()
2502 */
Gordon Henriksen1158c532007-12-29 20:45:00 +00002503unsigned LLVMGetInstructionCallConv(LLVMValueRef Instr);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002504
2505
Devang Patel4c758ea2008-09-25 21:00:45 +00002506void LLVMAddInstrAttribute(LLVMValueRef Instr, unsigned index, LLVMAttribute);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002507void LLVMRemoveInstrAttribute(LLVMValueRef Instr, unsigned index,
Devang Patel4c758ea2008-09-25 21:00:45 +00002508 LLVMAttribute);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002509void LLVMSetInstrParamAlignment(LLVMValueRef Instr, unsigned index,
Gordon Henriksen2d9cc212008-04-28 17:37:06 +00002510 unsigned align);
Gordon Henriksen1158c532007-12-29 20:45:00 +00002511
Gregory Szorc34c863a2012-03-21 03:54:29 +00002512/**
2513 * Obtain whether a call instruction is a tail call.
2514 *
2515 * This only works on llvm::CallInst instructions.
2516 *
2517 * @see llvm::CallInst::isTailCall()
2518 */
Chris Lattner25963c62010-01-09 22:27:07 +00002519LLVMBool LLVMIsTailCall(LLVMValueRef CallInst);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002520
2521/**
2522 * Set whether a call instruction is a tail call.
2523 *
2524 * This only works on llvm::CallInst instructions.
2525 *
2526 * @see llvm::CallInst::setTailCall()
2527 */
Chris Lattner25963c62010-01-09 22:27:07 +00002528void LLVMSetTailCall(LLVMValueRef CallInst, LLVMBool IsTailCall);
Gordon Henrikseneeb65372008-08-30 16:34:54 +00002529
Gregory Szorc34c863a2012-03-21 03:54:29 +00002530/**
2531 * @}
2532 */
2533
2534/**
Peter Zotov2481c752014-10-28 19:46:56 +00002535 * @defgroup LLVMCCoreValueInstructionTerminator Terminators
2536 *
2537 * Functions in this group only apply to instructions that map to
2538 * llvm::TerminatorInst instances.
2539 *
2540 * @{
2541 */
2542
2543/**
2544 * Return the number of successors that this terminator has.
2545 *
2546 * @see llvm::TerminatorInst::getNumSuccessors
2547 */
2548unsigned LLVMGetNumSuccessors(LLVMValueRef Term);
2549
2550/**
2551 * Return the specified successor.
2552 *
2553 * @see llvm::TerminatorInst::getSuccessor
2554 */
2555LLVMBasicBlockRef LLVMGetSuccessor(LLVMValueRef Term, unsigned i);
2556
2557/**
2558 * Update the specified successor to point at the provided block.
2559 *
2560 * @see llvm::TerminatorInst::setSuccessor
2561 */
2562void LLVMSetSuccessor(LLVMValueRef Term, unsigned i, LLVMBasicBlockRef block);
2563
2564/**
2565 * Return if a branch is conditional.
2566 *
2567 * This only works on llvm::BranchInst instructions.
2568 *
2569 * @see llvm::BranchInst::isConditional
2570 */
2571LLVMBool LLVMIsConditional(LLVMValueRef Branch);
2572
2573/**
2574 * Return the condition of a branch instruction.
2575 *
2576 * This only works on llvm::BranchInst instructions.
2577 *
2578 * @see llvm::BranchInst::getCondition
2579 */
2580LLVMValueRef LLVMGetCondition(LLVMValueRef Branch);
2581
2582/**
2583 * Set the condition of a branch instruction.
2584 *
2585 * This only works on llvm::BranchInst instructions.
2586 *
2587 * @see llvm::BranchInst::setCondition
2588 */
2589void LLVMSetCondition(LLVMValueRef Branch, LLVMValueRef Cond);
2590
2591/**
Gregory Szorc34c863a2012-03-21 03:54:29 +00002592 * Obtain the default destination basic block of a switch instruction.
2593 *
2594 * This only works on llvm::SwitchInst instructions.
2595 *
2596 * @see llvm::SwitchInst::getDefaultDest()
2597 */
Nate Begeman43c322b2011-08-23 20:27:46 +00002598LLVMBasicBlockRef LLVMGetSwitchDefaultDest(LLVMValueRef SwitchInstr);
2599
Gregory Szorc34c863a2012-03-21 03:54:29 +00002600/**
Peter Zotov2481c752014-10-28 19:46:56 +00002601 * @}
2602 */
2603
2604/**
Gregory Szorc34c863a2012-03-21 03:54:29 +00002605 * @defgroup LLVMCCoreValueInstructionPHINode PHI Nodes
2606 *
2607 * Functions in this group only apply to instructions that map to
2608 * llvm::PHINode instances.
2609 *
2610 * @{
2611 */
2612
2613/**
2614 * Add an incoming value to the end of a PHI list.
2615 */
Gordon Henriksen44dd8fb2007-10-08 18:14:39 +00002616void LLVMAddIncoming(LLVMValueRef PhiNode, LLVMValueRef *IncomingValues,
2617 LLVMBasicBlockRef *IncomingBlocks, unsigned Count);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002618
2619/**
2620 * Obtain the number of incoming basic blocks to a PHI node.
2621 */
Gordon Henriksen44dd8fb2007-10-08 18:14:39 +00002622unsigned LLVMCountIncoming(LLVMValueRef PhiNode);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002623
2624/**
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +00002625 * Obtain an incoming value to a PHI node as an LLVMValueRef.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002626 */
Gordon Henriksen44dd8fb2007-10-08 18:14:39 +00002627LLVMValueRef LLVMGetIncomingValue(LLVMValueRef PhiNode, unsigned Index);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002628
2629/**
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +00002630 * Obtain an incoming value to a PHI node as an LLVMBasicBlockRef.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002631 */
Gordon Henriksen44dd8fb2007-10-08 18:14:39 +00002632LLVMBasicBlockRef LLVMGetIncomingBlock(LLVMValueRef PhiNode, unsigned Index);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002633
Gregory Szorc34c863a2012-03-21 03:54:29 +00002634/**
2635 * @}
2636 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002637
Gregory Szorc34c863a2012-03-21 03:54:29 +00002638/**
2639 * @}
2640 */
2641
2642/**
2643 * @}
2644 */
2645
2646/**
2647 * @defgroup LLVMCCoreInstructionBuilder Instruction Builders
2648 *
2649 * An instruction builder represents a point within a basic block and is
2650 * the exclusive means of building instructions using the C interface.
2651 *
2652 * @{
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002653 */
2654
Erick Tryzelaar262332f2009-08-14 00:01:31 +00002655LLVMBuilderRef LLVMCreateBuilderInContext(LLVMContextRef C);
Gordon Henriksena735a9c2008-05-04 12:55:34 +00002656LLVMBuilderRef LLVMCreateBuilder(void);
Gordon Henriksen054817c2008-03-19 03:47:18 +00002657void LLVMPositionBuilder(LLVMBuilderRef Builder, LLVMBasicBlockRef Block,
2658 LLVMValueRef Instr);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002659void LLVMPositionBuilderBefore(LLVMBuilderRef Builder, LLVMValueRef Instr);
2660void LLVMPositionBuilderAtEnd(LLVMBuilderRef Builder, LLVMBasicBlockRef Block);
Gordon Henriksen265f7802008-03-19 01:11:35 +00002661LLVMBasicBlockRef LLVMGetInsertBlock(LLVMBuilderRef Builder);
Chris Lattner3d1f5522008-12-17 21:39:50 +00002662void LLVMClearInsertionPosition(LLVMBuilderRef Builder);
2663void LLVMInsertIntoBuilder(LLVMBuilderRef Builder, LLVMValueRef Instr);
Erick Tryzelaar9813bea2009-08-16 02:20:57 +00002664void LLVMInsertIntoBuilderWithName(LLVMBuilderRef Builder, LLVMValueRef Instr,
2665 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002666void LLVMDisposeBuilder(LLVMBuilderRef Builder);
2667
Erick Tryzelaard8531fa2010-02-28 09:45:59 +00002668/* Metadata */
2669void LLVMSetCurrentDebugLocation(LLVMBuilderRef Builder, LLVMValueRef L);
2670LLVMValueRef LLVMGetCurrentDebugLocation(LLVMBuilderRef Builder);
2671void LLVMSetInstDebugLocation(LLVMBuilderRef Builder, LLVMValueRef Inst);
2672
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002673/* Terminators */
2674LLVMValueRef LLVMBuildRetVoid(LLVMBuilderRef);
2675LLVMValueRef LLVMBuildRet(LLVMBuilderRef, LLVMValueRef V);
Erick Tryzelaarfd529d72009-08-19 08:36:49 +00002676LLVMValueRef LLVMBuildAggregateRet(LLVMBuilderRef, LLVMValueRef *RetVals,
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002677 unsigned N);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002678LLVMValueRef LLVMBuildBr(LLVMBuilderRef, LLVMBasicBlockRef Dest);
2679LLVMValueRef LLVMBuildCondBr(LLVMBuilderRef, LLVMValueRef If,
2680 LLVMBasicBlockRef Then, LLVMBasicBlockRef Else);
2681LLVMValueRef LLVMBuildSwitch(LLVMBuilderRef, LLVMValueRef V,
2682 LLVMBasicBlockRef Else, unsigned NumCases);
Erick Tryzelaar0fb26ef2010-02-28 09:46:06 +00002683LLVMValueRef LLVMBuildIndirectBr(LLVMBuilderRef B, LLVMValueRef Addr,
2684 unsigned NumDests);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002685LLVMValueRef LLVMBuildInvoke(LLVMBuilderRef, LLVMValueRef Fn,
2686 LLVMValueRef *Args, unsigned NumArgs,
2687 LLVMBasicBlockRef Then, LLVMBasicBlockRef Catch,
2688 const char *Name);
Benjamin Kramer5a6568832011-08-19 01:36:54 +00002689LLVMValueRef LLVMBuildLandingPad(LLVMBuilderRef B, LLVMTypeRef Ty,
Reid Kleckneref9828f2015-07-16 01:16:39 +00002690 LLVMValueRef PersFn, unsigned NumClauses,
2691 const char *Name);
Bill Wendlingf891bf82011-07-31 06:30:59 +00002692LLVMValueRef LLVMBuildResume(LLVMBuilderRef B, LLVMValueRef Exn);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002693LLVMValueRef LLVMBuildUnreachable(LLVMBuilderRef);
2694
Gordon Henriksen097102c2008-01-01 05:50:53 +00002695/* Add a case to the switch instruction */
2696void LLVMAddCase(LLVMValueRef Switch, LLVMValueRef OnVal,
2697 LLVMBasicBlockRef Dest);
2698
Erick Tryzelaar0fb26ef2010-02-28 09:46:06 +00002699/* Add a destination to the indirectbr instruction */
2700void LLVMAddDestination(LLVMValueRef IndirectBr, LLVMBasicBlockRef Dest);
2701
Bill Wendlingfae14752011-08-12 20:24:12 +00002702/* Add a catch or filter clause to the landingpad instruction */
2703void LLVMAddClause(LLVMValueRef LandingPad, LLVMValueRef ClauseVal);
2704
2705/* Set the 'cleanup' flag in the landingpad instruction */
2706void LLVMSetCleanup(LLVMValueRef LandingPad, LLVMBool Val);
2707
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002708/* Arithmetic */
2709LLVMValueRef LLVMBuildAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2710 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002711LLVMValueRef LLVMBuildNSWAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2712 const char *Name);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +00002713LLVMValueRef LLVMBuildNUWAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2714 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002715LLVMValueRef LLVMBuildFAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2716 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002717LLVMValueRef LLVMBuildSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2718 const char *Name);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +00002719LLVMValueRef LLVMBuildNSWSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2720 const char *Name);
2721LLVMValueRef LLVMBuildNUWSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2722 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002723LLVMValueRef LLVMBuildFSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2724 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002725LLVMValueRef LLVMBuildMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2726 const char *Name);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +00002727LLVMValueRef LLVMBuildNSWMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2728 const char *Name);
2729LLVMValueRef LLVMBuildNUWMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2730 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002731LLVMValueRef LLVMBuildFMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2732 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002733LLVMValueRef LLVMBuildUDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2734 const char *Name);
2735LLVMValueRef LLVMBuildSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2736 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002737LLVMValueRef LLVMBuildExactSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2738 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002739LLVMValueRef LLVMBuildFDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2740 const char *Name);
2741LLVMValueRef LLVMBuildURem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2742 const char *Name);
2743LLVMValueRef LLVMBuildSRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2744 const char *Name);
2745LLVMValueRef LLVMBuildFRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2746 const char *Name);
2747LLVMValueRef LLVMBuildShl(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2748 const char *Name);
2749LLVMValueRef LLVMBuildLShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2750 const char *Name);
2751LLVMValueRef LLVMBuildAShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2752 const char *Name);
2753LLVMValueRef LLVMBuildAnd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2754 const char *Name);
2755LLVMValueRef LLVMBuildOr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2756 const char *Name);
2757LLVMValueRef LLVMBuildXor(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2758 const char *Name);
Erick Tryzelaar31831792010-02-28 05:51:27 +00002759LLVMValueRef LLVMBuildBinOp(LLVMBuilderRef B, LLVMOpcode Op,
2760 LLVMValueRef LHS, LLVMValueRef RHS,
2761 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002762LLVMValueRef LLVMBuildNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +00002763LLVMValueRef LLVMBuildNSWNeg(LLVMBuilderRef B, LLVMValueRef V,
2764 const char *Name);
2765LLVMValueRef LLVMBuildNUWNeg(LLVMBuilderRef B, LLVMValueRef V,
2766 const char *Name);
Dan Gohmanf919bd62009-09-28 21:51:41 +00002767LLVMValueRef LLVMBuildFNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002768LLVMValueRef LLVMBuildNot(LLVMBuilderRef, LLVMValueRef V, const char *Name);
2769
2770/* Memory */
2771LLVMValueRef LLVMBuildMalloc(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
2772LLVMValueRef LLVMBuildArrayMalloc(LLVMBuilderRef, LLVMTypeRef Ty,
2773 LLVMValueRef Val, const char *Name);
2774LLVMValueRef LLVMBuildAlloca(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
2775LLVMValueRef LLVMBuildArrayAlloca(LLVMBuilderRef, LLVMTypeRef Ty,
2776 LLVMValueRef Val, const char *Name);
2777LLVMValueRef LLVMBuildFree(LLVMBuilderRef, LLVMValueRef PointerVal);
2778LLVMValueRef LLVMBuildLoad(LLVMBuilderRef, LLVMValueRef PointerVal,
2779 const char *Name);
2780LLVMValueRef LLVMBuildStore(LLVMBuilderRef, LLVMValueRef Val, LLVMValueRef Ptr);
2781LLVMValueRef LLVMBuildGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
2782 LLVMValueRef *Indices, unsigned NumIndices,
2783 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002784LLVMValueRef LLVMBuildInBoundsGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
2785 LLVMValueRef *Indices, unsigned NumIndices,
2786 const char *Name);
2787LLVMValueRef LLVMBuildStructGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
2788 unsigned Idx, const char *Name);
2789LLVMValueRef LLVMBuildGlobalString(LLVMBuilderRef B, const char *Str,
2790 const char *Name);
2791LLVMValueRef LLVMBuildGlobalStringPtr(LLVMBuilderRef B, const char *Str,
2792 const char *Name);
Chris Lattner2cc6f9d2012-03-22 03:54:15 +00002793LLVMBool LLVMGetVolatile(LLVMValueRef MemoryAccessInst);
2794void LLVMSetVolatile(LLVMValueRef MemoryAccessInst, LLVMBool IsVolatile);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002795
2796/* Casts */
2797LLVMValueRef LLVMBuildTrunc(LLVMBuilderRef, LLVMValueRef Val,
2798 LLVMTypeRef DestTy, const char *Name);
2799LLVMValueRef LLVMBuildZExt(LLVMBuilderRef, LLVMValueRef Val,
2800 LLVMTypeRef DestTy, const char *Name);
2801LLVMValueRef LLVMBuildSExt(LLVMBuilderRef, LLVMValueRef Val,
2802 LLVMTypeRef DestTy, const char *Name);
2803LLVMValueRef LLVMBuildFPToUI(LLVMBuilderRef, LLVMValueRef Val,
2804 LLVMTypeRef DestTy, const char *Name);
2805LLVMValueRef LLVMBuildFPToSI(LLVMBuilderRef, LLVMValueRef Val,
2806 LLVMTypeRef DestTy, const char *Name);
2807LLVMValueRef LLVMBuildUIToFP(LLVMBuilderRef, LLVMValueRef Val,
2808 LLVMTypeRef DestTy, const char *Name);
2809LLVMValueRef LLVMBuildSIToFP(LLVMBuilderRef, LLVMValueRef Val,
2810 LLVMTypeRef DestTy, const char *Name);
2811LLVMValueRef LLVMBuildFPTrunc(LLVMBuilderRef, LLVMValueRef Val,
2812 LLVMTypeRef DestTy, const char *Name);
2813LLVMValueRef LLVMBuildFPExt(LLVMBuilderRef, LLVMValueRef Val,
2814 LLVMTypeRef DestTy, const char *Name);
2815LLVMValueRef LLVMBuildPtrToInt(LLVMBuilderRef, LLVMValueRef Val,
2816 LLVMTypeRef DestTy, const char *Name);
2817LLVMValueRef LLVMBuildIntToPtr(LLVMBuilderRef, LLVMValueRef Val,
2818 LLVMTypeRef DestTy, const char *Name);
2819LLVMValueRef LLVMBuildBitCast(LLVMBuilderRef, LLVMValueRef Val,
2820 LLVMTypeRef DestTy, const char *Name);
Matt Arsenaultb03bd4d2013-11-15 01:34:59 +00002821LLVMValueRef LLVMBuildAddrSpaceCast(LLVMBuilderRef, LLVMValueRef Val,
2822 LLVMTypeRef DestTy, const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002823LLVMValueRef LLVMBuildZExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
2824 LLVMTypeRef DestTy, const char *Name);
2825LLVMValueRef LLVMBuildSExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
2826 LLVMTypeRef DestTy, const char *Name);
2827LLVMValueRef LLVMBuildTruncOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
2828 LLVMTypeRef DestTy, const char *Name);
Erick Tryzelaar31831792010-02-28 05:51:27 +00002829LLVMValueRef LLVMBuildCast(LLVMBuilderRef B, LLVMOpcode Op, LLVMValueRef Val,
2830 LLVMTypeRef DestTy, const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002831LLVMValueRef LLVMBuildPointerCast(LLVMBuilderRef, LLVMValueRef Val,
2832 LLVMTypeRef DestTy, const char *Name);
Duncan Sands9d786d72009-11-23 10:49:03 +00002833LLVMValueRef LLVMBuildIntCast(LLVMBuilderRef, LLVMValueRef Val, /*Signed cast!*/
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002834 LLVMTypeRef DestTy, const char *Name);
2835LLVMValueRef LLVMBuildFPCast(LLVMBuilderRef, LLVMValueRef Val,
2836 LLVMTypeRef DestTy, const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002837
2838/* Comparisons */
2839LLVMValueRef LLVMBuildICmp(LLVMBuilderRef, LLVMIntPredicate Op,
2840 LLVMValueRef LHS, LLVMValueRef RHS,
2841 const char *Name);
2842LLVMValueRef LLVMBuildFCmp(LLVMBuilderRef, LLVMRealPredicate Op,
2843 LLVMValueRef LHS, LLVMValueRef RHS,
2844 const char *Name);
2845
2846/* Miscellaneous instructions */
2847LLVMValueRef LLVMBuildPhi(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
2848LLVMValueRef LLVMBuildCall(LLVMBuilderRef, LLVMValueRef Fn,
2849 LLVMValueRef *Args, unsigned NumArgs,
2850 const char *Name);
2851LLVMValueRef LLVMBuildSelect(LLVMBuilderRef, LLVMValueRef If,
2852 LLVMValueRef Then, LLVMValueRef Else,
2853 const char *Name);
2854LLVMValueRef LLVMBuildVAArg(LLVMBuilderRef, LLVMValueRef List, LLVMTypeRef Ty,
2855 const char *Name);
2856LLVMValueRef LLVMBuildExtractElement(LLVMBuilderRef, LLVMValueRef VecVal,
2857 LLVMValueRef Index, const char *Name);
2858LLVMValueRef LLVMBuildInsertElement(LLVMBuilderRef, LLVMValueRef VecVal,
2859 LLVMValueRef EltVal, LLVMValueRef Index,
2860 const char *Name);
2861LLVMValueRef LLVMBuildShuffleVector(LLVMBuilderRef, LLVMValueRef V1,
2862 LLVMValueRef V2, LLVMValueRef Mask,
2863 const char *Name);
Dan Gohmand5104a52008-11-03 22:55:43 +00002864LLVMValueRef LLVMBuildExtractValue(LLVMBuilderRef, LLVMValueRef AggVal,
2865 unsigned Index, const char *Name);
2866LLVMValueRef LLVMBuildInsertValue(LLVMBuilderRef, LLVMValueRef AggVal,
2867 LLVMValueRef EltVal, unsigned Index,
2868 const char *Name);
Gordon Henriksen76a03742007-09-18 03:18:57 +00002869
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002870LLVMValueRef LLVMBuildIsNull(LLVMBuilderRef, LLVMValueRef Val,
2871 const char *Name);
2872LLVMValueRef LLVMBuildIsNotNull(LLVMBuilderRef, LLVMValueRef Val,
2873 const char *Name);
2874LLVMValueRef LLVMBuildPtrDiff(LLVMBuilderRef, LLVMValueRef LHS,
2875 LLVMValueRef RHS, const char *Name);
Filip Pizlo0d3f7ec2013-11-20 00:07:49 +00002876LLVMValueRef LLVMBuildFence(LLVMBuilderRef B, LLVMAtomicOrdering ordering,
2877 LLVMBool singleThread, const char *Name);
2878LLVMValueRef LLVMBuildAtomicRMW(LLVMBuilderRef B, LLVMAtomicRMWBinOp op,
NAKAMURA Takumia3a81352013-10-23 17:56:29 +00002879 LLVMValueRef PTR, LLVMValueRef Val,
2880 LLVMAtomicOrdering ordering,
Carlo Kok8c6719b2013-04-23 13:21:19 +00002881 LLVMBool singleThread);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002882
Gregory Szorc34c863a2012-03-21 03:54:29 +00002883/**
2884 * @}
2885 */
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00002886
Gregory Szorc34c863a2012-03-21 03:54:29 +00002887/**
2888 * @defgroup LLVMCCoreModuleProvider Module Providers
2889 *
2890 * @{
2891 */
Gordon Henriksen0a68fe22007-12-12 01:04:30 +00002892
Gregory Szorc34c863a2012-03-21 03:54:29 +00002893/**
2894 * Changes the type of M so it can be passed to FunctionPassManagers and the
Jeffrey Yasskin091217b2010-01-27 20:34:15 +00002895 * JIT. They take ModuleProviders for historical reasons.
Gordon Henriksen0a68fe22007-12-12 01:04:30 +00002896 */
2897LLVMModuleProviderRef
2898LLVMCreateModuleProviderForExistingModule(LLVMModuleRef M);
2899
Gregory Szorc34c863a2012-03-21 03:54:29 +00002900/**
2901 * Destroys the module M.
Gordon Henriksen0a68fe22007-12-12 01:04:30 +00002902 */
Jeffrey Yasskin091217b2010-01-27 20:34:15 +00002903void LLVMDisposeModuleProvider(LLVMModuleProviderRef M);
Gordon Henriksen0a68fe22007-12-12 01:04:30 +00002904
Gregory Szorc34c863a2012-03-21 03:54:29 +00002905/**
2906 * @}
2907 */
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00002908
Gregory Szorc34c863a2012-03-21 03:54:29 +00002909/**
2910 * @defgroup LLVMCCoreMemoryBuffers Memory Buffers
2911 *
2912 * @{
2913 */
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00002914
Chris Lattner25963c62010-01-09 22:27:07 +00002915LLVMBool LLVMCreateMemoryBufferWithContentsOfFile(const char *Path,
2916 LLVMMemoryBufferRef *OutMemBuf,
2917 char **OutMessage);
2918LLVMBool LLVMCreateMemoryBufferWithSTDIN(LLVMMemoryBufferRef *OutMemBuf,
2919 char **OutMessage);
Bill Wendling526276a2013-02-14 19:11:28 +00002920LLVMMemoryBufferRef LLVMCreateMemoryBufferWithMemoryRange(const char *InputData,
2921 size_t InputDataLength,
2922 const char *BufferName,
Bill Wendlingc9baa962013-02-14 19:39:14 +00002923 LLVMBool RequiresNullTerminator);
Bill Wendling526276a2013-02-14 19:11:28 +00002924LLVMMemoryBufferRef LLVMCreateMemoryBufferWithMemoryRangeCopy(const char *InputData,
2925 size_t InputDataLength,
2926 const char *BufferName);
Tom Stellard62c03202013-04-18 19:50:53 +00002927const char *LLVMGetBufferStart(LLVMMemoryBufferRef MemBuf);
Tom Stellardb7fb7242013-04-16 23:12:51 +00002928size_t LLVMGetBufferSize(LLVMMemoryBufferRef MemBuf);
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00002929void LLVMDisposeMemoryBuffer(LLVMMemoryBufferRef MemBuf);
2930
Gregory Szorc34c863a2012-03-21 03:54:29 +00002931/**
2932 * @}
2933 */
2934
2935/**
2936 * @defgroup LLVMCCorePassRegistry Pass Registry
2937 *
2938 * @{
2939 */
Owen Anderson4698c5d2010-10-07 17:55:47 +00002940
2941/** Return the global pass registry, for use with initialization functions.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002942 @see llvm::PassRegistry::getPassRegistry */
Owen Anderson4698c5d2010-10-07 17:55:47 +00002943LLVMPassRegistryRef LLVMGetGlobalPassRegistry(void);
Gordon Henriksen878114b2008-03-16 04:20:44 +00002944
Gregory Szorc34c863a2012-03-21 03:54:29 +00002945/**
2946 * @}
2947 */
2948
2949/**
2950 * @defgroup LLVMCCorePassManagers Pass Managers
2951 *
2952 * @{
2953 */
Gordon Henriksen878114b2008-03-16 04:20:44 +00002954
2955/** Constructs a new whole-module pass pipeline. This type of pipeline is
2956 suitable for link-time optimization and whole-module transformations.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002957 @see llvm::PassManager::PassManager */
Gordon Henriksena735a9c2008-05-04 12:55:34 +00002958LLVMPassManagerRef LLVMCreatePassManager(void);
Gordon Henriksen878114b2008-03-16 04:20:44 +00002959
2960/** Constructs a new function-by-function pass pipeline over the module
2961 provider. It does not take ownership of the module provider. This type of
2962 pipeline is suitable for code generation and JIT compilation tasks.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002963 @see llvm::FunctionPassManager::FunctionPassManager */
Erick Tryzelaarad0e0cb2010-03-02 23:58:54 +00002964LLVMPassManagerRef LLVMCreateFunctionPassManagerForModule(LLVMModuleRef M);
2965
2966/** Deprecated: Use LLVMCreateFunctionPassManagerForModule instead. */
Gordon Henriksen878114b2008-03-16 04:20:44 +00002967LLVMPassManagerRef LLVMCreateFunctionPassManager(LLVMModuleProviderRef MP);
2968
2969/** Initializes, executes on the provided module, and finalizes all of the
2970 passes scheduled in the pass manager. Returns 1 if any of the passes
Gregory Szorc34c863a2012-03-21 03:54:29 +00002971 modified the module, 0 otherwise.
2972 @see llvm::PassManager::run(Module&) */
Chris Lattner25963c62010-01-09 22:27:07 +00002973LLVMBool LLVMRunPassManager(LLVMPassManagerRef PM, LLVMModuleRef M);
Gordon Henriksen878114b2008-03-16 04:20:44 +00002974
2975/** Initializes all of the function passes scheduled in the function pass
2976 manager. Returns 1 if any of the passes modified the module, 0 otherwise.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002977 @see llvm::FunctionPassManager::doInitialization */
Chris Lattner25963c62010-01-09 22:27:07 +00002978LLVMBool LLVMInitializeFunctionPassManager(LLVMPassManagerRef FPM);
Gordon Henriksen878114b2008-03-16 04:20:44 +00002979
2980/** Executes all of the function passes scheduled in the function pass manager
2981 on the provided function. Returns 1 if any of the passes modified the
2982 function, false otherwise.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002983 @see llvm::FunctionPassManager::run(Function&) */
Chris Lattner25963c62010-01-09 22:27:07 +00002984LLVMBool LLVMRunFunctionPassManager(LLVMPassManagerRef FPM, LLVMValueRef F);
Gordon Henriksen878114b2008-03-16 04:20:44 +00002985
2986/** Finalizes all of the function passes scheduled in in the function pass
2987 manager. Returns 1 if any of the passes modified the module, 0 otherwise.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002988 @see llvm::FunctionPassManager::doFinalization */
Chris Lattner25963c62010-01-09 22:27:07 +00002989LLVMBool LLVMFinalizeFunctionPassManager(LLVMPassManagerRef FPM);
Gordon Henriksen878114b2008-03-16 04:20:44 +00002990
2991/** Frees the memory of a pass pipeline. For function pipelines, does not free
2992 the module provider.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002993 @see llvm::PassManagerBase::~PassManagerBase. */
Gordon Henriksen878114b2008-03-16 04:20:44 +00002994void LLVMDisposePassManager(LLVMPassManagerRef PM);
2995
Gregory Szorc34c863a2012-03-21 03:54:29 +00002996/**
2997 * @}
2998 */
2999
3000/**
Duncan Sands1cba0a82013-02-17 16:35:51 +00003001 * @defgroup LLVMCCoreThreading Threading
3002 *
3003 * Handle the structures needed to make LLVM safe for multithreading.
3004 *
3005 * @{
3006 */
3007
Chandler Carruth39cd2162014-06-27 15:13:01 +00003008/** Deprecated: Multi-threading can only be enabled/disabled with the compile
3009 time define LLVM_ENABLE_THREADS. This function always returns
3010 LLVMIsMultithreaded(). */
Benjamin Kramer325ec892013-10-23 16:57:34 +00003011LLVMBool LLVMStartMultithreaded(void);
Duncan Sands1cba0a82013-02-17 16:35:51 +00003012
Chandler Carruth39cd2162014-06-27 15:13:01 +00003013/** Deprecated: Multi-threading can only be enabled/disabled with the compile
3014 time define LLVM_ENABLE_THREADS. */
Benjamin Kramer325ec892013-10-23 16:57:34 +00003015void LLVMStopMultithreaded(void);
Duncan Sands1cba0a82013-02-17 16:35:51 +00003016
3017/** Check whether LLVM is executing in thread-safe mode or not.
3018 @see llvm::llvm_is_multithreaded */
Benjamin Kramer325ec892013-10-23 16:57:34 +00003019LLVMBool LLVMIsMultithreaded(void);
Duncan Sands1cba0a82013-02-17 16:35:51 +00003020
3021/**
3022 * @}
3023 */
3024
3025/**
Gregory Szorc34c863a2012-03-21 03:54:29 +00003026 * @}
3027 */
3028
3029/**
3030 * @}
3031 */
Gordon Henriksen878114b2008-03-16 04:20:44 +00003032
Gordon Henriksen76a03742007-09-18 03:18:57 +00003033#ifdef __cplusplus
3034}
Evan Cheng2e254d02013-04-04 17:40:53 +00003035#endif /* !defined(__cplusplus) */
Gordon Henriksen7330acd2007-10-05 23:59:36 +00003036
Evan Cheng2e254d02013-04-04 17:40:53 +00003037#endif /* !defined(LLVM_C_CORE_H) */