blob: 2221b9630758fa25f81a43f31730eb4f319bbfb0 [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,
Joseph Tremoulet9ce71f72015-09-03 09:09:43 +0000254 LLVMCatchPad = 63,
David Majnemerbbfc7212015-12-14 18:34:23 +0000255 LLVMCleanupPad = 64,
256 LLVMCatchSwitch = 65
Chris Lattner40cf28d2009-10-12 04:01:02 +0000257} LLVMOpcode;
258
259typedef enum {
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000260 LLVMVoidTypeKind, /**< type with no size */
Dan Gohman518cda42011-12-17 00:04:22 +0000261 LLVMHalfTypeKind, /**< 16 bit floating point type */
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000262 LLVMFloatTypeKind, /**< 32 bit floating point type */
263 LLVMDoubleTypeKind, /**< 64 bit floating point type */
264 LLVMX86_FP80TypeKind, /**< 80 bit floating point type (X87) */
265 LLVMFP128TypeKind, /**< 128 bit floating point type (112-bit mantissa)*/
266 LLVMPPC_FP128TypeKind, /**< 128 bit floating point type (two 64-bits) */
267 LLVMLabelTypeKind, /**< Labels */
268 LLVMIntegerTypeKind, /**< Arbitrary bit width integers */
269 LLVMFunctionTypeKind, /**< Functions */
270 LLVMStructTypeKind, /**< Structures */
271 LLVMArrayTypeKind, /**< Arrays */
272 LLVMPointerTypeKind, /**< Pointers */
Chris Lattnerdac44ec2009-07-15 22:00:31 +0000273 LLVMVectorTypeKind, /**< SIMD 'packed' format, or other vector type */
Dale Johannesenbaa5d042010-09-10 20:55:01 +0000274 LLVMMetadataTypeKind, /**< Metadata */
David Majnemerb611e3f2015-08-14 05:09:07 +0000275 LLVMX86_MMXTypeKind, /**< X86 MMX */
276 LLVMTokenTypeKind /**< Tokens */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000277} LLVMTypeKind;
278
279typedef enum {
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000280 LLVMExternalLinkage, /**< Externally visible function */
Chris Lattner2dba0f02009-04-13 06:25:37 +0000281 LLVMAvailableExternallyLinkage,
Duncan Sands12da8ce2009-03-07 15:45:40 +0000282 LLVMLinkOnceAnyLinkage, /**< Keep one copy of function when linking (inline)*/
283 LLVMLinkOnceODRLinkage, /**< Same, but only replaced by something
284 equivalent. */
Rafael Espindola716e7402013-11-01 17:09:14 +0000285 LLVMLinkOnceODRAutoHideLinkage, /**< Obsolete */
Duncan Sands12da8ce2009-03-07 15:45:40 +0000286 LLVMWeakAnyLinkage, /**< Keep one copy of function when linking (weak) */
287 LLVMWeakODRLinkage, /**< Same, but only replaced by something
288 equivalent. */
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000289 LLVMAppendingLinkage, /**< Special purpose, only applies to global arrays */
290 LLVMInternalLinkage, /**< Rename collisions when linking (static
291 functions) */
Duncan Sands12da8ce2009-03-07 15:45:40 +0000292 LLVMPrivateLinkage, /**< Like Internal, but omit from symbol table */
Nico Rieck7157bb72014-01-14 15:22:47 +0000293 LLVMDLLImportLinkage, /**< Obsolete */
294 LLVMDLLExportLinkage, /**< Obsolete */
Duncan Sandse2881052009-03-11 08:08:06 +0000295 LLVMExternalWeakLinkage,/**< ExternalWeak linkage description */
Jeffrey Yasskin091217b2010-01-27 20:34:15 +0000296 LLVMGhostLinkage, /**< Obsolete */
Bill Wendling002b1672009-07-20 18:22:52 +0000297 LLVMCommonLinkage, /**< Tentative definitions */
Bill Wendling03bcd6e2010-07-01 21:55:59 +0000298 LLVMLinkerPrivateLinkage, /**< Like Private, but linker removes. */
Bill Wendling34bc34e2012-08-17 18:33:14 +0000299 LLVMLinkerPrivateWeakLinkage /**< Like LinkerPrivate, but is weak. */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000300} LLVMLinkage;
301
302typedef enum {
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000303 LLVMDefaultVisibility, /**< The GV is visible */
304 LLVMHiddenVisibility, /**< The GV is hidden */
305 LLVMProtectedVisibility /**< The GV is protected */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000306} LLVMVisibility;
307
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000308typedef enum {
Reid Kleckner2fae26f2014-03-05 02:34:23 +0000309 LLVMDefaultStorageClass = 0,
310 LLVMDLLImportStorageClass = 1, /**< Function to be imported from DLL. */
311 LLVMDLLExportStorageClass = 2 /**< Function to be accessible from DLL. */
312} LLVMDLLStorageClass;
313
314typedef enum {
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000315 LLVMCCallConv = 0,
316 LLVMFastCallConv = 8,
317 LLVMColdCallConv = 9,
Filip Pizlodfc9b582013-11-09 06:00:03 +0000318 LLVMWebKitJSCallConv = 12,
319 LLVMAnyRegCallConv = 13,
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000320 LLVMX86StdcallCallConv = 64,
321 LLVMX86FastcallCallConv = 65
322} LLVMCallConv;
323
324typedef enum {
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000325 LLVMIntEQ = 32, /**< equal */
326 LLVMIntNE, /**< not equal */
327 LLVMIntUGT, /**< unsigned greater than */
328 LLVMIntUGE, /**< unsigned greater or equal */
329 LLVMIntULT, /**< unsigned less than */
330 LLVMIntULE, /**< unsigned less or equal */
331 LLVMIntSGT, /**< signed greater than */
332 LLVMIntSGE, /**< signed greater or equal */
333 LLVMIntSLT, /**< signed less than */
334 LLVMIntSLE /**< signed less or equal */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000335} LLVMIntPredicate;
336
337typedef enum {
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000338 LLVMRealPredicateFalse, /**< Always false (always folded) */
339 LLVMRealOEQ, /**< True if ordered and equal */
340 LLVMRealOGT, /**< True if ordered and greater than */
341 LLVMRealOGE, /**< True if ordered and greater than or equal */
342 LLVMRealOLT, /**< True if ordered and less than */
343 LLVMRealOLE, /**< True if ordered and less than or equal */
344 LLVMRealONE, /**< True if ordered and operands are unequal */
345 LLVMRealORD, /**< True if ordered (no nans) */
346 LLVMRealUNO, /**< True if unordered: isnan(X) | isnan(Y) */
347 LLVMRealUEQ, /**< True if unordered or equal */
348 LLVMRealUGT, /**< True if unordered or greater than */
349 LLVMRealUGE, /**< True if unordered, greater than, or equal */
350 LLVMRealULT, /**< True if unordered or less than */
351 LLVMRealULE, /**< True if unordered, less than, or equal */
352 LLVMRealUNE, /**< True if unordered or not equal */
353 LLVMRealPredicateTrue /**< Always true (always folded) */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000354} LLVMRealPredicate;
355
Bill Wendlingfae14752011-08-12 20:24:12 +0000356typedef enum {
357 LLVMLandingPadCatch, /**< A catch clause */
358 LLVMLandingPadFilter /**< A filter clause */
359} LLVMLandingPadClauseTy;
360
Hans Wennborg5ff71202013-04-16 08:58:59 +0000361typedef enum {
362 LLVMNotThreadLocal = 0,
363 LLVMGeneralDynamicTLSModel,
364 LLVMLocalDynamicTLSModel,
365 LLVMInitialExecTLSModel,
366 LLVMLocalExecTLSModel
367} LLVMThreadLocalMode;
368
Carlo Kokda0ac722013-04-23 13:45:37 +0000369typedef enum {
Carlo Kok8c6719b2013-04-23 13:21:19 +0000370 LLVMAtomicOrderingNotAtomic = 0, /**< A load or store which is not atomic */
371 LLVMAtomicOrderingUnordered = 1, /**< Lowest level of atomicity, guarantees
372 somewhat sane results, lock free. */
NAKAMURA Takumia3a81352013-10-23 17:56:29 +0000373 LLVMAtomicOrderingMonotonic = 2, /**< guarantees that if you take all the
374 operations affecting a specific address,
Carlo Kok8c6719b2013-04-23 13:21:19 +0000375 a consistent ordering exists */
NAKAMURA Takumia3a81352013-10-23 17:56:29 +0000376 LLVMAtomicOrderingAcquire = 4, /**< Acquire provides a barrier of the sort
377 necessary to acquire a lock to access other
Carlo Kok8c6719b2013-04-23 13:21:19 +0000378 memory with normal loads and stores. */
NAKAMURA Takumia3a81352013-10-23 17:56:29 +0000379 LLVMAtomicOrderingRelease = 5, /**< Release is similar to Acquire, but with
380 a barrier of the sort necessary to release
Carlo Kok8c6719b2013-04-23 13:21:19 +0000381 a lock. */
NAKAMURA Takumia3a81352013-10-23 17:56:29 +0000382 LLVMAtomicOrderingAcquireRelease = 6, /**< provides both an Acquire and a
383 Release barrier (for fences and
Carlo Kok8c6719b2013-04-23 13:21:19 +0000384 operations which both read and write
385 memory). */
NAKAMURA Takumia3a81352013-10-23 17:56:29 +0000386 LLVMAtomicOrderingSequentiallyConsistent = 7 /**< provides Acquire semantics
387 for loads and Release
388 semantics for stores.
389 Additionally, it guarantees
390 that a total ordering exists
391 between all
392 SequentiallyConsistent
Carlo Kok8c6719b2013-04-23 13:21:19 +0000393 operations. */
Carlo Kokda0ac722013-04-23 13:45:37 +0000394} LLVMAtomicOrdering;
Carlo Kok8c6719b2013-04-23 13:21:19 +0000395
Carlo Kokda0ac722013-04-23 13:45:37 +0000396typedef enum {
Carlo Kok8c6719b2013-04-23 13:21:19 +0000397 LLVMAtomicRMWBinOpXchg, /**< Set the new value and return the one old */
398 LLVMAtomicRMWBinOpAdd, /**< Add a value and return the old one */
399 LLVMAtomicRMWBinOpSub, /**< Subtract a value and return the old one */
400 LLVMAtomicRMWBinOpAnd, /**< And a value and return the old one */
401 LLVMAtomicRMWBinOpNand, /**< Not-And a value and return the old one */
402 LLVMAtomicRMWBinOpOr, /**< OR a value and return the old one */
403 LLVMAtomicRMWBinOpXor, /**< Xor a value and return the old one */
404 LLVMAtomicRMWBinOpMax, /**< Sets the value if it's greater than the
NAKAMURA Takumia3a81352013-10-23 17:56:29 +0000405 original using a signed comparison and return
Carlo Kok8c6719b2013-04-23 13:21:19 +0000406 the old one */
407 LLVMAtomicRMWBinOpMin, /**< Sets the value if it's Smaller than the
NAKAMURA Takumia3a81352013-10-23 17:56:29 +0000408 original using a signed comparison and return
Carlo Kok8c6719b2013-04-23 13:21:19 +0000409 the old one */
410 LLVMAtomicRMWBinOpUMax, /**< Sets the value if it's greater than the
NAKAMURA Takumia3a81352013-10-23 17:56:29 +0000411 original using an unsigned comparison and return
Carlo Kok8c6719b2013-04-23 13:21:19 +0000412 the old one */
413 LLVMAtomicRMWBinOpUMin /**< Sets the value if it's greater than the
NAKAMURA Takumia3a81352013-10-23 17:56:29 +0000414 original using an unsigned comparison and return
Carlo Kok8c6719b2013-04-23 13:21:19 +0000415 the old one */
Carlo Kokda0ac722013-04-23 13:45:37 +0000416} LLVMAtomicRMWBinOp;
Carlo Kok8c6719b2013-04-23 13:21:19 +0000417
Tom Stellard1580dc72014-04-16 17:45:04 +0000418typedef enum {
419 LLVMDSError,
420 LLVMDSWarning,
421 LLVMDSRemark,
422 LLVMDSNote
423} LLVMDiagnosticSeverity;
424
Gregory Szorc34c863a2012-03-21 03:54:29 +0000425/**
426 * @}
427 */
428
Nick Lewycky0db26542011-05-15 07:20:34 +0000429void LLVMInitializeCore(LLVMPassRegistryRef R);
430
Duncan Sands1cba0a82013-02-17 16:35:51 +0000431/** Deallocate and destroy all ManagedStatic variables.
432 @see llvm::llvm_shutdown
433 @see ManagedStatic */
Benjamin Kramer325ec892013-10-23 16:57:34 +0000434void LLVMShutdown(void);
Duncan Sands1cba0a82013-02-17 16:35:51 +0000435
Gordon Henriksen34eb6d82007-12-19 22:30:40 +0000436/*===-- Error handling ----------------------------------------------------===*/
437
Filip Pizlo3fdbaff2013-05-22 02:46:43 +0000438char *LLVMCreateMessage(const char *Message);
Gordon Henriksen34eb6d82007-12-19 22:30:40 +0000439void LLVMDisposeMessage(char *Message);
440
Filip Pizloa535b142013-10-17 01:38:28 +0000441typedef void (*LLVMFatalErrorHandler)(const char *Reason);
442
443/**
444 * Install a fatal error handler. By default, if LLVM detects a fatal error, it
445 * will call exit(1). This may not be appropriate in many contexts. For example,
446 * doing exit(1) will bypass many crash reporting/tracing system tools. This
447 * function allows you to install a callback that will be invoked prior to the
448 * call to exit(1).
449 */
450void LLVMInstallFatalErrorHandler(LLVMFatalErrorHandler Handler);
451
452/**
453 * Reset the fatal error handler. This resets LLVM's fatal error handling
454 * behavior to the default.
455 */
456void LLVMResetFatalErrorHandler(void);
Gordon Henriksen34eb6d82007-12-19 22:30:40 +0000457
Gregory Szorc34c863a2012-03-21 03:54:29 +0000458/**
Filip Pizloc10ca902013-11-04 02:22:25 +0000459 * Enable LLVM's built-in stack trace code. This intercepts the OS's crash
460 * signals and prints which component of LLVM you were in at the time if the
461 * crash.
Filip Pizlo9f50ccd2013-11-03 00:29:47 +0000462 */
Filip Pizloc10ca902013-11-04 02:22:25 +0000463void LLVMEnablePrettyStackTrace(void);
Filip Pizlo9f50ccd2013-11-03 00:29:47 +0000464
465/**
Gregory Szorc34c863a2012-03-21 03:54:29 +0000466 * @defgroup LLVMCCoreContext Contexts
467 *
468 * Contexts are execution states for the core LLVM IR system.
469 *
470 * Most types are tied to a context instance. Multiple contexts can
471 * exist simultaneously. A single context is not thread safe. However,
472 * different contexts can execute on different threads simultaneously.
473 *
474 * @{
475 */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000476
Tom Stellard1580dc72014-04-16 17:45:04 +0000477typedef void (*LLVMDiagnosticHandler)(LLVMDiagnosticInfoRef, void *);
Juergen Ributzka34390c72014-05-16 02:33:15 +0000478typedef void (*LLVMYieldCallback)(LLVMContextRef, void *);
Tom Stellard1580dc72014-04-16 17:45:04 +0000479
Gregory Szorc34c863a2012-03-21 03:54:29 +0000480/**
481 * Create a new context.
482 *
483 * Every call to this function should be paired with a call to
484 * LLVMContextDispose() or the context will leak memory.
485 */
Erick Tryzelaarf34cb0c2009-08-30 23:38:06 +0000486LLVMContextRef LLVMContextCreate(void);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000487
488/**
489 * Obtain the global context instance.
490 */
Erick Tryzelaarf34cb0c2009-08-30 23:38:06 +0000491LLVMContextRef LLVMGetGlobalContext(void);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000492
493/**
Tom Stellard1580dc72014-04-16 17:45:04 +0000494 * Set the diagnostic handler for this context.
495 */
496void LLVMContextSetDiagnosticHandler(LLVMContextRef C,
497 LLVMDiagnosticHandler Handler,
498 void *DiagnosticContext);
499
500/**
Juergen Ributzka34390c72014-05-16 02:33:15 +0000501 * Set the yield callback function for this context.
502 *
503 * @see LLVMContext::setYieldCallback()
504 */
505void LLVMContextSetYieldCallback(LLVMContextRef C, LLVMYieldCallback Callback,
506 void *OpaqueHandle);
507
508/**
Gregory Szorc34c863a2012-03-21 03:54:29 +0000509 * Destroy a context instance.
510 *
511 * This should be called for every call to LLVMContextCreate() or memory
512 * will be leaked.
513 */
Owen Anderson6773d382009-07-01 16:58:40 +0000514void LLVMContextDispose(LLVMContextRef C);
515
Tom Stellard1580dc72014-04-16 17:45:04 +0000516/**
517 * Return a string representation of the DiagnosticInfo. Use
518 * LLVMDisposeMessage to free the string.
519 *
520 * @see DiagnosticInfo::print()
521 */
522char *LLVMGetDiagInfoDescription(LLVMDiagnosticInfoRef DI);
523
524/**
525 * Return an enum LLVMDiagnosticSeverity.
526 *
527 * @see DiagnosticInfo::getSeverity()
528 */
529LLVMDiagnosticSeverity LLVMGetDiagInfoSeverity(LLVMDiagnosticInfoRef DI);
530
Erick Tryzelaard8531fa2010-02-28 09:45:59 +0000531unsigned LLVMGetMDKindIDInContext(LLVMContextRef C, const char* Name,
532 unsigned SLen);
533unsigned LLVMGetMDKindID(const char* Name, unsigned SLen);
534
Gregory Szorc34c863a2012-03-21 03:54:29 +0000535/**
536 * @}
537 */
538
Gregory Szorc52d26602012-03-21 07:28:27 +0000539/**
540 * @defgroup LLVMCCoreModule Modules
Gregory Szorc34c863a2012-03-21 03:54:29 +0000541 *
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +0000542 * Modules represent the top-level structure in an LLVM program. An LLVM
Gregory Szorc34c863a2012-03-21 03:54:29 +0000543 * module is effectively a translation unit or a collection of
544 * translation units merged together.
545 *
546 * @{
547 */
548
Gregory Szorc34c863a2012-03-21 03:54:29 +0000549/**
550 * Create a new, empty module in the global context.
551 *
552 * This is equivalent to calling LLVMModuleCreateWithNameInContext with
553 * LLVMGetGlobalContext() as the context parameter.
554 *
555 * Every invocation should be paired with LLVMDisposeModule() or memory
556 * will be leaked.
557 */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000558LLVMModuleRef LLVMModuleCreateWithName(const char *ModuleID);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000559
560/**
561 * Create a new, empty module in a specific context.
562 *
563 * Every invocation should be paired with LLVMDisposeModule() or memory
564 * will be leaked.
565 */
Owen Anderson31d44e42009-07-02 07:17:57 +0000566LLVMModuleRef LLVMModuleCreateWithNameInContext(const char *ModuleID,
567 LLVMContextRef C);
Tom Stellard0a4e9a32014-10-01 17:14:57 +0000568/**
569 * Return an exact copy of the specified module.
570 */
571LLVMModuleRef LLVMCloneModule(LLVMModuleRef M);
Gordon Henriksena49d4352008-03-07 19:13:06 +0000572
Gregory Szorc34c863a2012-03-21 03:54:29 +0000573/**
574 * Destroy a module instance.
575 *
576 * This must be called for every created module or memory will be
577 * leaked.
578 */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000579void LLVMDisposeModule(LLVMModuleRef M);
580
Gregory Szorc34c863a2012-03-21 03:54:29 +0000581/**
582 * Obtain the data layout for a module.
583 *
584 * @see Module::getDataLayout()
585 */
Gordon Henriksen05568bb2007-12-27 20:13:47 +0000586const char *LLVMGetDataLayout(LLVMModuleRef M);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000587
588/**
589 * Set the data layout for a module.
590 *
591 * @see Module::setDataLayout()
592 */
Gordon Henriksen05568bb2007-12-27 20:13:47 +0000593void LLVMSetDataLayout(LLVMModuleRef M, const char *Triple);
594
Gregory Szorc34c863a2012-03-21 03:54:29 +0000595/**
596 * Obtain the target triple for a module.
597 *
598 * @see Module::getTargetTriple()
599 */
Gordon Henriksen05568bb2007-12-27 20:13:47 +0000600const char *LLVMGetTarget(LLVMModuleRef M);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000601
602/**
603 * Set the target triple for a module.
604 *
605 * @see Module::setTargetTriple()
606 */
Gordon Henriksen05568bb2007-12-27 20:13:47 +0000607void LLVMSetTarget(LLVMModuleRef M, const char *Triple);
608
Gregory Szorc34c863a2012-03-21 03:54:29 +0000609/**
610 * Dump a representation of a module to stderr.
611 *
612 * @see Module::dump()
613 */
Gordon Henriksen6c6075e2008-03-14 23:58:56 +0000614void LLVMDumpModule(LLVMModuleRef M);
615
Gregory Szorc34c863a2012-03-21 03:54:29 +0000616/**
Hans Wennborgb7ef2fe2012-05-09 16:54:17 +0000617 * Print a representation of a module to a file. The ErrorMessage needs to be
618 * disposed with LLVMDisposeMessage. Returns 0 on success, 1 otherwise.
619 *
620 * @see Module::print()
621 */
622LLVMBool LLVMPrintModuleToFile(LLVMModuleRef M, const char *Filename,
623 char **ErrorMessage);
624
625/**
Anders Waldenborg84355db2013-10-16 18:00:54 +0000626 * Return a string representation of the module. Use
627 * LLVMDisposeMessage to free the string.
628 *
629 * @see Module::print()
630 */
631char *LLVMPrintModuleToString(LLVMModuleRef M);
632
633/**
Gregory Szorc34c863a2012-03-21 03:54:29 +0000634 * Set inline assembly for a module.
635 *
636 * @see Module::setModuleInlineAsm()
637 */
Chris Lattner26941452010-04-10 17:52:58 +0000638void LLVMSetModuleInlineAsm(LLVMModuleRef M, const char *Asm);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000639
Gregory Szorc34c863a2012-03-21 03:54:29 +0000640/**
641 * Obtain the context to which this module is associated.
642 *
643 * @see Module::getContext()
644 */
Chris Lattnera7e04b02010-11-28 20:03:44 +0000645LLVMContextRef LLVMGetModuleContext(LLVMModuleRef M);
646
Gregory Szorc34c863a2012-03-21 03:54:29 +0000647/**
648 * Obtain a Type from a module by its registered name.
649 */
650LLVMTypeRef LLVMGetTypeByName(LLVMModuleRef M, const char *Name);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000651
Gregory Szorc34c863a2012-03-21 03:54:29 +0000652/**
653 * Obtain the number of operands for named metadata in a module.
654 *
655 * @see llvm::Module::getNamedMetadata()
656 */
657unsigned LLVMGetNamedMetadataNumOperands(LLVMModuleRef M, const char* name);
658
659/**
660 * Obtain the named metadata operands for a module.
661 *
662 * The passed LLVMValueRef pointer should refer to an array of
663 * LLVMValueRef at least LLVMGetNamedMetadataNumOperands long. This
664 * array will be populated with the LLVMValueRef instances. Each
665 * instance corresponds to a llvm::MDNode.
666 *
667 * @see llvm::Module::getNamedMetadata()
668 * @see llvm::MDNode::getOperand()
669 */
670void LLVMGetNamedMetadataOperands(LLVMModuleRef M, const char* name, LLVMValueRef *Dest);
671
672/**
673 * Add an operand to named metadata.
674 *
675 * @see llvm::Module::getNamedMetadata()
676 * @see llvm::MDNode::addOperand()
677 */
678void LLVMAddNamedMetadataOperand(LLVMModuleRef M, const char* name,
679 LLVMValueRef Val);
680
Gregory Szorc52d26602012-03-21 07:28:27 +0000681/**
682 * Add a function to a module under a specified name.
683 *
684 * @see llvm::Function::Create()
685 */
686LLVMValueRef LLVMAddFunction(LLVMModuleRef M, const char *Name,
687 LLVMTypeRef FunctionTy);
688
689/**
690 * Obtain a Function value from a Module by its name.
691 *
692 * The returned value corresponds to a llvm::Function value.
693 *
694 * @see llvm::Module::getFunction()
695 */
696LLVMValueRef LLVMGetNamedFunction(LLVMModuleRef M, const char *Name);
697
698/**
699 * Obtain an iterator to the first Function in a Module.
700 *
701 * @see llvm::Module::begin()
702 */
703LLVMValueRef LLVMGetFirstFunction(LLVMModuleRef M);
704
705/**
706 * Obtain an iterator to the last Function in a Module.
707 *
708 * @see llvm::Module::end()
709 */
710LLVMValueRef LLVMGetLastFunction(LLVMModuleRef M);
711
712/**
713 * Advance a Function iterator to the next Function.
714 *
715 * Returns NULL if the iterator was already at the end and there are no more
716 * functions.
717 */
718LLVMValueRef LLVMGetNextFunction(LLVMValueRef Fn);
719
720/**
721 * Decrement a Function iterator to the previous Function.
722 *
723 * Returns NULL if the iterator was already at the beginning and there are
724 * no previous functions.
725 */
726LLVMValueRef LLVMGetPreviousFunction(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000727
728/**
729 * @}
730 */
731
732/**
733 * @defgroup LLVMCCoreType Types
734 *
735 * Types represent the type of a value.
736 *
737 * Types are associated with a context instance. The context internally
738 * deduplicates types so there is only 1 instance of a specific type
739 * alive at a time. In other words, a unique type is shared among all
740 * consumers within a context.
741 *
742 * A Type in the C API corresponds to llvm::Type.
743 *
744 * Types have the following hierarchy:
745 *
Gordon Henriksen76a03742007-09-18 03:18:57 +0000746 * types:
747 * integer type
748 * real type
749 * function type
750 * sequence types:
751 * array type
752 * pointer type
753 * vector type
754 * void type
755 * label type
756 * opaque type
Gregory Szorc34c863a2012-03-21 03:54:29 +0000757 *
758 * @{
Gordon Henriksen76a03742007-09-18 03:18:57 +0000759 */
760
Gregory Szorc34c863a2012-03-21 03:54:29 +0000761/**
762 * Obtain the enumerated type of a Type instance.
763 *
764 * @see llvm::Type:getTypeID()
765 */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000766LLVMTypeKind LLVMGetTypeKind(LLVMTypeRef Ty);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000767
768/**
769 * Whether the type has a known size.
770 *
771 * Things that don't have a size are abstract types, labels, and void.a
772 *
773 * @see llvm::Type::isSized()
774 */
Torok Edwin1cd9ade2011-10-06 12:13:28 +0000775LLVMBool LLVMTypeIsSized(LLVMTypeRef Ty);
Gordon Henriksena49d4352008-03-07 19:13:06 +0000776
Gregory Szorc34c863a2012-03-21 03:54:29 +0000777/**
778 * Obtain the context to which this type instance is associated.
779 *
780 * @see llvm::Type::getContext()
781 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000782LLVMContextRef LLVMGetTypeContext(LLVMTypeRef Ty);
783
Gregory Szorc34c863a2012-03-21 03:54:29 +0000784/**
Anders Waldenborgb822cff2013-10-16 21:30:25 +0000785 * Dump a representation of a type to stderr.
786 *
787 * @see llvm::Type::dump()
788 */
789void LLVMDumpType(LLVMTypeRef Val);
790
791/**
Anders Waldenborg47b3bd32013-10-22 06:58:34 +0000792 * Return a string representation of the type. Use
793 * LLVMDisposeMessage to free the string.
794 *
795 * @see llvm::Type::print()
796 */
797char *LLVMPrintTypeToString(LLVMTypeRef Val);
798
799/**
Gregory Szorc34c863a2012-03-21 03:54:29 +0000800 * @defgroup LLVMCCoreTypeInt Integer Types
801 *
802 * Functions in this section operate on integer types.
803 *
804 * @{
805 */
806
807/**
808 * Obtain an integer type from a context with specified bit width.
809 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000810LLVMTypeRef LLVMInt1TypeInContext(LLVMContextRef C);
811LLVMTypeRef LLVMInt8TypeInContext(LLVMContextRef C);
812LLVMTypeRef LLVMInt16TypeInContext(LLVMContextRef C);
813LLVMTypeRef LLVMInt32TypeInContext(LLVMContextRef C);
814LLVMTypeRef LLVMInt64TypeInContext(LLVMContextRef C);
Eugene Zelenkoffec81c2015-11-04 22:32:32 +0000815LLVMTypeRef LLVMInt128TypeInContext(LLVMContextRef C);
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000816LLVMTypeRef LLVMIntTypeInContext(LLVMContextRef C, unsigned NumBits);
817
Gregory Szorc34c863a2012-03-21 03:54:29 +0000818/**
819 * Obtain an integer type from the global context with a specified bit
820 * width.
821 */
Gordon Henriksena735a9c2008-05-04 12:55:34 +0000822LLVMTypeRef LLVMInt1Type(void);
823LLVMTypeRef LLVMInt8Type(void);
824LLVMTypeRef LLVMInt16Type(void);
825LLVMTypeRef LLVMInt32Type(void);
826LLVMTypeRef LLVMInt64Type(void);
Eugene Zelenkoffec81c2015-11-04 22:32:32 +0000827LLVMTypeRef LLVMInt128Type(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 * @defgroup LLVMCCoreTypeSequential Sequential Types
1033 *
1034 * Sequential types represents "arrays" of types. This is a super class
1035 * for array, vector, and pointer types.
1036 *
1037 * @{
1038 */
1039
1040/**
1041 * Obtain the type of elements within a sequential type.
1042 *
1043 * This works on array, vector, and pointer types.
1044 *
1045 * @see llvm::SequentialType::getElementType()
1046 */
1047LLVMTypeRef LLVMGetElementType(LLVMTypeRef Ty);
1048
1049/**
1050 * Create a fixed size array type that refers to a specific type.
1051 *
1052 * The created type will exist in the context that its element type
1053 * exists in.
1054 *
1055 * @see llvm::ArrayType::get()
1056 */
Gordon Henriksened7beaa2007-10-06 16:05:20 +00001057LLVMTypeRef LLVMArrayType(LLVMTypeRef ElementType, unsigned ElementCount);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001058
1059/**
1060 * Obtain the length of an array type.
1061 *
1062 * This only works on types that represent arrays.
1063 *
1064 * @see llvm::ArrayType::getNumElements()
1065 */
1066unsigned LLVMGetArrayLength(LLVMTypeRef ArrayTy);
1067
1068/**
1069 * Create a pointer type that points to a defined type.
1070 *
1071 * The created type will exist in the context that its pointee type
1072 * exists in.
1073 *
1074 * @see llvm::PointerType::get()
1075 */
Gordon Henriksen5a3fe032007-12-17 16:08:32 +00001076LLVMTypeRef LLVMPointerType(LLVMTypeRef ElementType, unsigned AddressSpace);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001077
1078/**
1079 * Obtain the address space of a pointer type.
1080 *
1081 * This only works on types that represent pointers.
1082 *
1083 * @see llvm::PointerType::getAddressSpace()
1084 */
1085unsigned LLVMGetPointerAddressSpace(LLVMTypeRef PointerTy);
1086
1087/**
1088 * Create a vector type that contains a defined type and has a specific
1089 * number of elements.
1090 *
1091 * The created type will exist in the context thats its element type
1092 * exists in.
1093 *
1094 * @see llvm::VectorType::get()
1095 */
Gordon Henriksened7beaa2007-10-06 16:05:20 +00001096LLVMTypeRef LLVMVectorType(LLVMTypeRef ElementType, unsigned ElementCount);
Gordon Henriksen76a03742007-09-18 03:18:57 +00001097
Gregory Szorc34c863a2012-03-21 03:54:29 +00001098/**
1099 * Obtain the number of elements in a vector type.
1100 *
1101 * This only works on types that represent vectors.
1102 *
1103 * @see llvm::VectorType::getNumElements()
1104 */
Gordon Henriksen76a03742007-09-18 03:18:57 +00001105unsigned LLVMGetVectorSize(LLVMTypeRef VectorTy);
1106
Gregory Szorc34c863a2012-03-21 03:54:29 +00001107/**
1108 * @}
1109 */
1110
1111/**
1112 * @defgroup LLVMCCoreTypeOther Other Types
1113 *
1114 * @{
1115 */
1116
1117/**
1118 * Create a void type in a context.
1119 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +00001120LLVMTypeRef LLVMVoidTypeInContext(LLVMContextRef C);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001121
1122/**
1123 * Create a label type in a context.
1124 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +00001125LLVMTypeRef LLVMLabelTypeInContext(LLVMContextRef C);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001126
1127/**
1128 * Create a X86 MMX type in a context.
1129 */
Dale Johannesen95b67af2010-09-10 21:58:02 +00001130LLVMTypeRef LLVMX86MMXTypeInContext(LLVMContextRef C);
Erick Tryzelaar262332f2009-08-14 00:01:31 +00001131
Gregory Szorc34c863a2012-03-21 03:54:29 +00001132/**
1133 * These are similar to the above functions except they operate on the
1134 * global context.
1135 */
Gordon Henriksena735a9c2008-05-04 12:55:34 +00001136LLVMTypeRef LLVMVoidType(void);
1137LLVMTypeRef LLVMLabelType(void);
Dale Johannesen95b67af2010-09-10 21:58:02 +00001138LLVMTypeRef LLVMX86MMXType(void);
Gordon Henriksen76a03742007-09-18 03:18:57 +00001139
Gregory Szorc34c863a2012-03-21 03:54:29 +00001140/**
1141 * @}
1142 */
Gordon Henriksen76a03742007-09-18 03:18:57 +00001143
Gregory Szorc34c863a2012-03-21 03:54:29 +00001144/**
1145 * @}
1146 */
1147
1148/**
1149 * @defgroup LLVMCCoreValues Values
1150 *
1151 * The bulk of LLVM's object model consists of values, which comprise a very
Gordon Henriksen76a03742007-09-18 03:18:57 +00001152 * rich type hierarchy.
Gregory Szorc34c863a2012-03-21 03:54:29 +00001153 *
1154 * LLVMValueRef essentially represents llvm::Value. There is a rich
1155 * hierarchy of classes within this type. Depending on the instance
Eli Benderskyc52863c2012-08-10 18:30:44 +00001156 * obtained, not all APIs are available.
Gregory Szorc34c863a2012-03-21 03:54:29 +00001157 *
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +00001158 * Callers can determine the type of an LLVMValueRef by calling the
Gregory Szorc34c863a2012-03-21 03:54:29 +00001159 * LLVMIsA* family of functions (e.g. LLVMIsAArgument()). These
1160 * functions are defined by a macro, so it isn't obvious which are
1161 * available by looking at the Doxygen source code. Instead, look at the
1162 * source definition of LLVM_FOR_EACH_VALUE_SUBCLASS and note the list
1163 * of value names given. These value names also correspond to classes in
1164 * the llvm::Value hierarchy.
1165 *
1166 * @{
Gordon Henriksen76a03742007-09-18 03:18:57 +00001167 */
1168
Gordon Henriksen29e38942008-12-19 18:39:45 +00001169#define LLVM_FOR_EACH_VALUE_SUBCLASS(macro) \
1170 macro(Argument) \
1171 macro(BasicBlock) \
1172 macro(InlineAsm) \
1173 macro(User) \
1174 macro(Constant) \
Torok Edwind09b7572011-10-14 20:37:56 +00001175 macro(BlockAddress) \
Gordon Henriksen29e38942008-12-19 18:39:45 +00001176 macro(ConstantAggregateZero) \
1177 macro(ConstantArray) \
Peter Zotovae0344b2013-11-05 12:55:37 +00001178 macro(ConstantDataSequential) \
1179 macro(ConstantDataArray) \
1180 macro(ConstantDataVector) \
Gordon Henriksen29e38942008-12-19 18:39:45 +00001181 macro(ConstantExpr) \
1182 macro(ConstantFP) \
1183 macro(ConstantInt) \
1184 macro(ConstantPointerNull) \
1185 macro(ConstantStruct) \
David Majnemerf0f224d2015-11-11 21:57:16 +00001186 macro(ConstantTokenNone) \
Gordon Henriksen29e38942008-12-19 18:39:45 +00001187 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) \
Gordon Henriksen29e38942008-12-19 18:39:45 +00001212 macro(PHINode) \
1213 macro(SelectInst) \
1214 macro(ShuffleVectorInst) \
1215 macro(StoreInst) \
1216 macro(TerminatorInst) \
1217 macro(BranchInst) \
Torok Edwind09b7572011-10-14 20:37:56 +00001218 macro(IndirectBrInst) \
Gordon Henriksen29e38942008-12-19 18:39:45 +00001219 macro(InvokeInst) \
1220 macro(ReturnInst) \
1221 macro(SwitchInst) \
1222 macro(UnreachableInst) \
Bill Wendlingf891bf82011-07-31 06:30:59 +00001223 macro(ResumeInst) \
David Majnemer654e1302015-07-31 17:58:14 +00001224 macro(CleanupReturnInst) \
1225 macro(CatchReturnInst) \
David Majnemer8a1c45d2015-12-12 05:38:55 +00001226 macro(FuncletPadInst) \
1227 macro(CatchPadInst) \
1228 macro(CleanupPadInst) \
Duncan Sands5e37e992013-05-06 08:55:45 +00001229 macro(UnaryInstruction) \
1230 macro(AllocaInst) \
1231 macro(CastInst) \
Matt Arsenaultb03bd4d2013-11-15 01:34:59 +00001232 macro(AddrSpaceCastInst) \
Duncan Sands5e37e992013-05-06 08:55:45 +00001233 macro(BitCastInst) \
1234 macro(FPExtInst) \
1235 macro(FPToSIInst) \
1236 macro(FPToUIInst) \
1237 macro(FPTruncInst) \
1238 macro(IntToPtrInst) \
1239 macro(PtrToIntInst) \
1240 macro(SExtInst) \
1241 macro(SIToFPInst) \
1242 macro(TruncInst) \
1243 macro(UIToFPInst) \
1244 macro(ZExtInst) \
1245 macro(ExtractValueInst) \
1246 macro(LoadInst) \
1247 macro(VAArgInst)
Gordon Henriksen29e38942008-12-19 18:39:45 +00001248
Gregory Szorc34c863a2012-03-21 03:54:29 +00001249/**
1250 * @defgroup LLVMCCoreValueGeneral General APIs
1251 *
1252 * Functions in this section work on all LLVMValueRef instances,
1253 * regardless of their sub-type. They correspond to functions available
1254 * on llvm::Value.
1255 *
1256 * @{
1257 */
Gordon Henriksen76a03742007-09-18 03:18:57 +00001258
Gregory Szorc34c863a2012-03-21 03:54:29 +00001259/**
1260 * Obtain the type of a value.
1261 *
1262 * @see llvm::Value::getType()
1263 */
1264LLVMTypeRef LLVMTypeOf(LLVMValueRef Val);
1265
1266/**
1267 * Obtain the string name of a value.
1268 *
1269 * @see llvm::Value::getName()
1270 */
1271const char *LLVMGetValueName(LLVMValueRef Val);
1272
1273/**
1274 * Set the string name of a value.
1275 *
1276 * @see llvm::Value::setName()
1277 */
1278void LLVMSetValueName(LLVMValueRef Val, const char *Name);
1279
1280/**
1281 * Dump a representation of a value to stderr.
1282 *
1283 * @see llvm::Value::dump()
1284 */
1285void LLVMDumpValue(LLVMValueRef Val);
1286
1287/**
Peter Zotovcd93b372013-11-06 09:21:01 +00001288 * Return a string representation of the value. Use
1289 * LLVMDisposeMessage to free the string.
1290 *
1291 * @see llvm::Value::print()
1292 */
1293char *LLVMPrintValueToString(LLVMValueRef Val);
1294
1295/**
Gregory Szorc34c863a2012-03-21 03:54:29 +00001296 * Replace all uses of a value with another one.
1297 *
1298 * @see llvm::Value::replaceAllUsesWith()
1299 */
1300void LLVMReplaceAllUsesWith(LLVMValueRef OldVal, LLVMValueRef NewVal);
1301
1302/**
1303 * Determine whether the specified constant instance is constant.
1304 */
1305LLVMBool LLVMIsConstant(LLVMValueRef Val);
1306
1307/**
1308 * Determine whether a value instance is undefined.
1309 */
1310LLVMBool LLVMIsUndef(LLVMValueRef Val);
1311
1312/**
1313 * Convert value instances between types.
1314 *
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +00001315 * Internally, an LLVMValueRef is "pinned" to a specific type. This
Gregory Szorc34c863a2012-03-21 03:54:29 +00001316 * series of functions allows you to cast an instance to a specific
1317 * type.
1318 *
1319 * If the cast is not valid for the specified type, NULL is returned.
1320 *
1321 * @see llvm::dyn_cast_or_null<>
1322 */
Gordon Henriksen29e38942008-12-19 18:39:45 +00001323#define LLVM_DECLARE_VALUE_CAST(name) \
1324 LLVMValueRef LLVMIsA##name(LLVMValueRef Val);
1325LLVM_FOR_EACH_VALUE_SUBCLASS(LLVM_DECLARE_VALUE_CAST)
1326
Duncan P. N. Exon Smith5bf8fef2014-12-09 18:38:53 +00001327LLVMValueRef LLVMIsAMDNode(LLVMValueRef Val);
1328LLVMValueRef LLVMIsAMDString(LLVMValueRef Val);
1329
Gregory Szorc34c863a2012-03-21 03:54:29 +00001330/**
1331 * @}
1332 */
1333
1334/**
1335 * @defgroup LLVMCCoreValueUses Usage
1336 *
1337 * This module defines functions that allow you to inspect the uses of a
1338 * LLVMValueRef.
1339 *
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +00001340 * It is possible to obtain an LLVMUseRef for any LLVMValueRef instance.
Gregory Szorc34c863a2012-03-21 03:54:29 +00001341 * Each LLVMUseRef (which corresponds to a llvm::Use instance) holds a
1342 * llvm::User and llvm::Value.
1343 *
1344 * @{
1345 */
1346
1347/**
1348 * Obtain the first use of a value.
1349 *
1350 * Uses are obtained in an iterator fashion. First, call this function
1351 * to obtain a reference to the first use. Then, call LLVMGetNextUse()
Eli Benderskyc52863c2012-08-10 18:30:44 +00001352 * on that instance and all subsequently obtained instances until
Gregory Szorc34c863a2012-03-21 03:54:29 +00001353 * LLVMGetNextUse() returns NULL.
1354 *
1355 * @see llvm::Value::use_begin()
1356 */
Erick Tryzelaar9f9857e2010-03-02 20:32:28 +00001357LLVMUseRef LLVMGetFirstUse(LLVMValueRef Val);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001358
1359/**
1360 * Obtain the next use of a value.
1361 *
1362 * This effectively advances the iterator. It returns NULL if you are on
1363 * the final use and no more are available.
1364 */
Erick Tryzelaar9f9857e2010-03-02 20:32:28 +00001365LLVMUseRef LLVMGetNextUse(LLVMUseRef U);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001366
1367/**
1368 * Obtain the user value for a user.
1369 *
1370 * The returned value corresponds to a llvm::User type.
1371 *
1372 * @see llvm::Use::getUser()
1373 */
Erick Tryzelaar9f9857e2010-03-02 20:32:28 +00001374LLVMValueRef LLVMGetUser(LLVMUseRef U);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001375
1376/**
1377 * Obtain the value this use corresponds to.
1378 *
1379 * @see llvm::Use::get().
1380 */
Erick Tryzelaar9f9857e2010-03-02 20:32:28 +00001381LLVMValueRef LLVMGetUsedValue(LLVMUseRef U);
Chris Lattner40cf28d2009-10-12 04:01:02 +00001382
Gregory Szorc34c863a2012-03-21 03:54:29 +00001383/**
1384 * @}
1385 */
1386
1387/**
Gregory Szorc52d26602012-03-21 07:28:27 +00001388 * @defgroup LLVMCCoreValueUser User value
Gregory Szorc34c863a2012-03-21 03:54:29 +00001389 *
1390 * Function in this group pertain to LLVMValueRef instances that descent
1391 * from llvm::User. This includes constants, instructions, and
1392 * operators.
1393 *
1394 * @{
1395 */
1396
1397/**
1398 * Obtain an operand at a specific index in a llvm::User value.
1399 *
1400 * @see llvm::User::getOperand()
1401 */
Chris Lattner40cf28d2009-10-12 04:01:02 +00001402LLVMValueRef LLVMGetOperand(LLVMValueRef Val, unsigned Index);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001403
1404/**
Peter Zotovb19f78f2014-08-12 02:55:40 +00001405 * Obtain the use of an operand at a specific index in a llvm::User value.
1406 *
1407 * @see llvm::User::getOperandUse()
1408 */
1409LLVMUseRef LLVMGetOperandUse(LLVMValueRef Val, unsigned Index);
1410
1411/**
Gregory Szorc34c863a2012-03-21 03:54:29 +00001412 * Set an operand at a specific index in a llvm::User value.
1413 *
1414 * @see llvm::User::setOperand()
1415 */
Erick Tryzelaarb4d48702010-08-20 14:51:22 +00001416void LLVMSetOperand(LLVMValueRef User, unsigned Index, LLVMValueRef Val);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001417
1418/**
1419 * Obtain the number of operands in a llvm::User value.
1420 *
1421 * @see llvm::User::getNumOperands()
1422 */
Erick Tryzelaarb4d48702010-08-20 14:51:22 +00001423int LLVMGetNumOperands(LLVMValueRef Val);
Chris Lattner40cf28d2009-10-12 04:01:02 +00001424
Gregory Szorc34c863a2012-03-21 03:54:29 +00001425/**
1426 * @}
1427 */
1428
1429/**
Gregory Szorc52d26602012-03-21 07:28:27 +00001430 * @defgroup LLVMCCoreValueConstant Constants
Gregory Szorc34c863a2012-03-21 03:54:29 +00001431 *
1432 * This section contains APIs for interacting with LLVMValueRef that
1433 * correspond to llvm::Constant instances.
1434 *
1435 * These functions will work for any LLVMValueRef in the llvm::Constant
1436 * class hierarchy.
1437 *
1438 * @{
1439 */
1440
1441/**
1442 * Obtain a constant value referring to the null instance of a type.
1443 *
1444 * @see llvm::Constant::getNullValue()
1445 */
Gordon Henriksen1046c732007-10-06 15:11:06 +00001446LLVMValueRef LLVMConstNull(LLVMTypeRef Ty); /* all zeroes */
Gregory Szorc34c863a2012-03-21 03:54:29 +00001447
1448/**
1449 * Obtain a constant value referring to the instance of a type
1450 * consisting of all ones.
1451 *
1452 * This is only valid for integer types.
1453 *
1454 * @see llvm::Constant::getAllOnesValue()
1455 */
1456LLVMValueRef LLVMConstAllOnes(LLVMTypeRef Ty);
1457
1458/**
1459 * Obtain a constant value referring to an undefined value of a type.
1460 *
1461 * @see llvm::UndefValue::get()
1462 */
Gordon Henriksen76a03742007-09-18 03:18:57 +00001463LLVMValueRef LLVMGetUndef(LLVMTypeRef Ty);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001464
1465/**
1466 * Determine whether a value instance is null.
1467 *
1468 * @see llvm::Constant::isNullValue()
1469 */
Chris Lattner25963c62010-01-09 22:27:07 +00001470LLVMBool LLVMIsNull(LLVMValueRef Val);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001471
1472/**
1473 * Obtain a constant that is a constant pointer pointing to NULL for a
1474 * specified type.
1475 */
Chris Lattner7f318242009-07-06 17:29:59 +00001476LLVMValueRef LLVMConstPointerNull(LLVMTypeRef Ty);
Gordon Henriksen76a03742007-09-18 03:18:57 +00001477
Gregory Szorc34c863a2012-03-21 03:54:29 +00001478/**
1479 * @defgroup LLVMCCoreValueConstantScalar Scalar constants
1480 *
1481 * Functions in this group model LLVMValueRef instances that correspond
1482 * to constants referring to scalar types.
1483 *
1484 * For integer types, the LLVMTypeRef parameter should correspond to a
1485 * llvm::IntegerType instance and the returned LLVMValueRef will
1486 * correspond to a llvm::ConstantInt.
1487 *
1488 * For floating point types, the LLVMTypeRef returned corresponds to a
1489 * llvm::ConstantFP.
1490 *
1491 * @{
1492 */
Erick Tryzelaard8531fa2010-02-28 09:45:59 +00001493
Gregory Szorc34c863a2012-03-21 03:54:29 +00001494/**
1495 * Obtain a constant value for an integer type.
1496 *
1497 * The returned value corresponds to a llvm::ConstantInt.
1498 *
1499 * @see llvm::ConstantInt::get()
1500 *
1501 * @param IntTy Integer type to obtain value of.
1502 * @param N The value the returned instance should refer to.
1503 * @param SignExtend Whether to sign extend the produced value.
1504 */
Gordon Henriksen1046c732007-10-06 15:11:06 +00001505LLVMValueRef LLVMConstInt(LLVMTypeRef IntTy, unsigned long long N,
Chris Lattner25963c62010-01-09 22:27:07 +00001506 LLVMBool SignExtend);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001507
1508/**
1509 * Obtain a constant value for an integer of arbitrary precision.
1510 *
1511 * @see llvm::ConstantInt::get()
1512 */
Chris Lattner4329e072010-11-23 02:47:22 +00001513LLVMValueRef LLVMConstIntOfArbitraryPrecision(LLVMTypeRef IntTy,
1514 unsigned NumWords,
1515 const uint64_t Words[]);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001516
1517/**
1518 * Obtain a constant value for an integer parsed from a string.
1519 *
1520 * A similar API, LLVMConstIntOfStringAndSize is also available. If the
1521 * string's length is available, it is preferred to call that function
1522 * instead.
1523 *
1524 * @see llvm::ConstantInt::get()
1525 */
Erick Tryzelaardd991352009-08-16 23:36:46 +00001526LLVMValueRef LLVMConstIntOfString(LLVMTypeRef IntTy, const char *Text,
1527 uint8_t Radix);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001528
1529/**
1530 * Obtain a constant value for an integer parsed from a string with
1531 * specified length.
1532 *
1533 * @see llvm::ConstantInt::get()
1534 */
Erick Tryzelaardd991352009-08-16 23:36:46 +00001535LLVMValueRef LLVMConstIntOfStringAndSize(LLVMTypeRef IntTy, const char *Text,
1536 unsigned SLen, uint8_t Radix);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001537
1538/**
1539 * Obtain a constant value referring to a double floating point value.
1540 */
Gordon Henriksen1046c732007-10-06 15:11:06 +00001541LLVMValueRef LLVMConstReal(LLVMTypeRef RealTy, double N);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001542
1543/**
1544 * Obtain a constant for a floating point value parsed from a string.
1545 *
1546 * A similar API, LLVMConstRealOfStringAndSize is also available. It
1547 * should be used if the input string's length is known.
1548 */
Gordon Henriksen931e1212008-02-02 01:07:50 +00001549LLVMValueRef LLVMConstRealOfString(LLVMTypeRef RealTy, const char *Text);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001550
1551/**
1552 * Obtain a constant for a floating point value parsed from a string.
1553 */
Erick Tryzelaardd991352009-08-16 23:36:46 +00001554LLVMValueRef LLVMConstRealOfStringAndSize(LLVMTypeRef RealTy, const char *Text,
1555 unsigned SLen);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001556
1557/**
1558 * Obtain the zero extended value for an integer constant value.
1559 *
1560 * @see llvm::ConstantInt::getZExtValue()
1561 */
Chris Lattner40cf28d2009-10-12 04:01:02 +00001562unsigned long long LLVMConstIntGetZExtValue(LLVMValueRef ConstantVal);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001563
1564/**
1565 * Obtain the sign extended value for an integer constant value.
1566 *
1567 * @see llvm::ConstantInt::getSExtValue()
1568 */
Chris Lattner40cf28d2009-10-12 04:01:02 +00001569long long LLVMConstIntGetSExtValue(LLVMValueRef ConstantVal);
Erick Tryzelaardd991352009-08-16 23:36:46 +00001570
Gregory Szorc34c863a2012-03-21 03:54:29 +00001571/**
Peter Zotov1d98e6d2014-10-28 19:46:44 +00001572 * Obtain the double value for an floating point constant value.
1573 * losesInfo indicates if some precision was lost in the conversion.
1574 *
1575 * @see llvm::ConstantFP::getDoubleValue
1576 */
1577double LLVMConstRealGetDouble(LLVMValueRef ConstantVal, LLVMBool *losesInfo);
1578
1579/**
Gregory Szorc34c863a2012-03-21 03:54:29 +00001580 * @}
1581 */
1582
1583/**
Gregory Szorc52d26602012-03-21 07:28:27 +00001584 * @defgroup LLVMCCoreValueConstantComposite Composite Constants
1585 *
1586 * Functions in this group operate on composite constants.
Gregory Szorc34c863a2012-03-21 03:54:29 +00001587 *
1588 * @{
1589 */
1590
1591/**
Gregory Szorc52d26602012-03-21 07:28:27 +00001592 * Create a ConstantDataSequential and initialize it with a string.
Gregory Szorc34c863a2012-03-21 03:54:29 +00001593 *
Gregory Szorc52d26602012-03-21 07:28:27 +00001594 * @see llvm::ConstantDataArray::getString()
Gregory Szorc34c863a2012-03-21 03:54:29 +00001595 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +00001596LLVMValueRef LLVMConstStringInContext(LLVMContextRef C, const char *Str,
Chris Lattner25963c62010-01-09 22:27:07 +00001597 unsigned Length, LLVMBool DontNullTerminate);
Gregory Szorc52d26602012-03-21 07:28:27 +00001598
1599/**
1600 * Create a ConstantDataSequential with string content in the global context.
1601 *
1602 * This is the same as LLVMConstStringInContext except it operates on the
1603 * global context.
1604 *
1605 * @see LLVMConstStringInContext()
1606 * @see llvm::ConstantDataArray::getString()
1607 */
1608LLVMValueRef LLVMConstString(const char *Str, unsigned Length,
1609 LLVMBool DontNullTerminate);
1610
1611/**
Peter Zotovf9aa8822014-08-03 23:54:16 +00001612 * Returns true if the specified constant is an array of i8.
1613 *
1614 * @see ConstantDataSequential::getAsString()
1615 */
1616LLVMBool LLVMIsConstantString(LLVMValueRef c);
1617
1618/**
1619 * Get the given constant data sequential as a string.
1620 *
1621 * @see ConstantDataSequential::getAsString()
1622 */
1623const char *LLVMGetAsString(LLVMValueRef c, size_t* out);
1624
1625/**
Gregory Szorc52d26602012-03-21 07:28:27 +00001626 * Create an anonymous ConstantStruct with the specified values.
1627 *
1628 * @see llvm::ConstantStruct::getAnon()
1629 */
1630LLVMValueRef LLVMConstStructInContext(LLVMContextRef C,
Erick Tryzelaar262332f2009-08-14 00:01:31 +00001631 LLVMValueRef *ConstantVals,
Chris Lattner25963c62010-01-09 22:27:07 +00001632 unsigned Count, LLVMBool Packed);
Erick Tryzelaar262332f2009-08-14 00:01:31 +00001633
Gregory Szorc52d26602012-03-21 07:28:27 +00001634/**
1635 * Create a ConstantStruct in the global Context.
1636 *
1637 * This is the same as LLVMConstStructInContext except it operates on the
1638 * global Context.
1639 *
1640 * @see LLVMConstStructInContext()
1641 */
Gordon Henriksen1046c732007-10-06 15:11:06 +00001642LLVMValueRef LLVMConstStruct(LLVMValueRef *ConstantVals, unsigned Count,
Chris Lattner25963c62010-01-09 22:27:07 +00001643 LLVMBool Packed);
Gregory Szorc52d26602012-03-21 07:28:27 +00001644
1645/**
1646 * Create a ConstantArray from values.
1647 *
1648 * @see llvm::ConstantArray::get()
1649 */
1650LLVMValueRef LLVMConstArray(LLVMTypeRef ElementTy,
1651 LLVMValueRef *ConstantVals, unsigned Length);
1652
1653/**
1654 * Create a non-anonymous ConstantStruct from values.
1655 *
1656 * @see llvm::ConstantStruct::get()
1657 */
Rafael Espindola784ad242011-07-14 19:09:08 +00001658LLVMValueRef LLVMConstNamedStruct(LLVMTypeRef StructTy,
1659 LLVMValueRef *ConstantVals,
1660 unsigned Count);
Gregory Szorc52d26602012-03-21 07:28:27 +00001661
1662/**
Peter Zotovf9aa8822014-08-03 23:54:16 +00001663 * Get an element at specified index as a constant.
1664 *
1665 * @see ConstantDataSequential::getElementAsConstant()
1666 */
1667LLVMValueRef LLVMGetElementAsConstant(LLVMValueRef c, unsigned idx);
1668
1669/**
Gregory Szorc52d26602012-03-21 07:28:27 +00001670 * Create a ConstantVector from values.
1671 *
1672 * @see llvm::ConstantVector::get()
1673 */
Gordon Henriksen1046c732007-10-06 15:11:06 +00001674LLVMValueRef LLVMConstVector(LLVMValueRef *ScalarConstantVals, unsigned Size);
Gordon Henriksen76a03742007-09-18 03:18:57 +00001675
Gregory Szorc52d26602012-03-21 07:28:27 +00001676/**
1677 * @}
1678 */
1679
1680/**
1681 * @defgroup LLVMCCoreValueConstantExpressions Constant Expressions
1682 *
1683 * Functions in this group correspond to APIs on llvm::ConstantExpr.
1684 *
1685 * @see llvm::ConstantExpr.
1686 *
1687 * @{
1688 */
Chris Lattner40cf28d2009-10-12 04:01:02 +00001689LLVMOpcode LLVMGetConstOpcode(LLVMValueRef ConstantVal);
Erick Tryzelaarfd529d72009-08-19 08:36:49 +00001690LLVMValueRef LLVMAlignOf(LLVMTypeRef Ty);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001691LLVMValueRef LLVMSizeOf(LLVMTypeRef Ty);
1692LLVMValueRef LLVMConstNeg(LLVMValueRef ConstantVal);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +00001693LLVMValueRef LLVMConstNSWNeg(LLVMValueRef ConstantVal);
1694LLVMValueRef LLVMConstNUWNeg(LLVMValueRef ConstantVal);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +00001695LLVMValueRef LLVMConstFNeg(LLVMValueRef ConstantVal);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001696LLVMValueRef LLVMConstNot(LLVMValueRef ConstantVal);
1697LLVMValueRef LLVMConstAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Dan Gohmane4ca02d2009-09-03 23:34:49 +00001698LLVMValueRef LLVMConstNSWAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +00001699LLVMValueRef LLVMConstNUWAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +00001700LLVMValueRef LLVMConstFAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001701LLVMValueRef LLVMConstSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +00001702LLVMValueRef LLVMConstNSWSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1703LLVMValueRef LLVMConstNUWSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +00001704LLVMValueRef LLVMConstFSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001705LLVMValueRef LLVMConstMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +00001706LLVMValueRef LLVMConstNSWMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1707LLVMValueRef LLVMConstNUWMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +00001708LLVMValueRef LLVMConstFMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001709LLVMValueRef LLVMConstUDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1710LLVMValueRef LLVMConstSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Dan Gohmane4ca02d2009-09-03 23:34:49 +00001711LLVMValueRef LLVMConstExactSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001712LLVMValueRef LLVMConstFDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1713LLVMValueRef LLVMConstURem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1714LLVMValueRef LLVMConstSRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1715LLVMValueRef LLVMConstFRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1716LLVMValueRef LLVMConstAnd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1717LLVMValueRef LLVMConstOr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1718LLVMValueRef LLVMConstXor(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1719LLVMValueRef LLVMConstICmp(LLVMIntPredicate Predicate,
1720 LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1721LLVMValueRef LLVMConstFCmp(LLVMRealPredicate Predicate,
1722 LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1723LLVMValueRef LLVMConstShl(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1724LLVMValueRef LLVMConstLShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1725LLVMValueRef LLVMConstAShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1726LLVMValueRef LLVMConstGEP(LLVMValueRef ConstantVal,
1727 LLVMValueRef *ConstantIndices, unsigned NumIndices);
Dan Gohmane4ca02d2009-09-03 23:34:49 +00001728LLVMValueRef LLVMConstInBoundsGEP(LLVMValueRef ConstantVal,
1729 LLVMValueRef *ConstantIndices,
1730 unsigned NumIndices);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001731LLVMValueRef LLVMConstTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1732LLVMValueRef LLVMConstSExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1733LLVMValueRef LLVMConstZExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1734LLVMValueRef LLVMConstFPTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1735LLVMValueRef LLVMConstFPExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1736LLVMValueRef LLVMConstUIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1737LLVMValueRef LLVMConstSIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1738LLVMValueRef LLVMConstFPToUI(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1739LLVMValueRef LLVMConstFPToSI(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1740LLVMValueRef LLVMConstPtrToInt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1741LLVMValueRef LLVMConstIntToPtr(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1742LLVMValueRef LLVMConstBitCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
Matt Arsenaultb03bd4d2013-11-15 01:34:59 +00001743LLVMValueRef LLVMConstAddrSpaceCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +00001744LLVMValueRef LLVMConstZExtOrBitCast(LLVMValueRef ConstantVal,
1745 LLVMTypeRef ToType);
1746LLVMValueRef LLVMConstSExtOrBitCast(LLVMValueRef ConstantVal,
1747 LLVMTypeRef ToType);
1748LLVMValueRef LLVMConstTruncOrBitCast(LLVMValueRef ConstantVal,
1749 LLVMTypeRef ToType);
1750LLVMValueRef LLVMConstPointerCast(LLVMValueRef ConstantVal,
1751 LLVMTypeRef ToType);
1752LLVMValueRef LLVMConstIntCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType,
Chris Lattner25963c62010-01-09 22:27:07 +00001753 LLVMBool isSigned);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +00001754LLVMValueRef LLVMConstFPCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001755LLVMValueRef LLVMConstSelect(LLVMValueRef ConstantCondition,
1756 LLVMValueRef ConstantIfTrue,
1757 LLVMValueRef ConstantIfFalse);
1758LLVMValueRef LLVMConstExtractElement(LLVMValueRef VectorConstant,
1759 LLVMValueRef IndexConstant);
1760LLVMValueRef LLVMConstInsertElement(LLVMValueRef VectorConstant,
1761 LLVMValueRef ElementValueConstant,
1762 LLVMValueRef IndexConstant);
1763LLVMValueRef LLVMConstShuffleVector(LLVMValueRef VectorAConstant,
1764 LLVMValueRef VectorBConstant,
1765 LLVMValueRef MaskConstant);
Dan Gohmand5104a52008-11-03 22:55:43 +00001766LLVMValueRef LLVMConstExtractValue(LLVMValueRef AggConstant, unsigned *IdxList,
1767 unsigned NumIdx);
1768LLVMValueRef LLVMConstInsertValue(LLVMValueRef AggConstant,
1769 LLVMValueRef ElementValueConstant,
1770 unsigned *IdxList, unsigned NumIdx);
Chris Lattner25963c62010-01-09 22:27:07 +00001771LLVMValueRef LLVMConstInlineAsm(LLVMTypeRef Ty,
Chris Lattner3d1f5522008-12-17 21:39:50 +00001772 const char *AsmString, const char *Constraints,
Chris Lattner25963c62010-01-09 22:27:07 +00001773 LLVMBool HasSideEffects, LLVMBool IsAlignStack);
Erick Tryzelaar0fb26ef2010-02-28 09:46:06 +00001774LLVMValueRef LLVMBlockAddress(LLVMValueRef F, LLVMBasicBlockRef BB);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001775
Gregory Szorc52d26602012-03-21 07:28:27 +00001776/**
1777 * @}
1778 */
1779
1780/**
1781 * @defgroup LLVMCCoreValueConstantGlobals Global Values
1782 *
1783 * This group contains functions that operate on global values. Functions in
1784 * this group relate to functions in the llvm::GlobalValue class tree.
1785 *
1786 * @see llvm::GlobalValue
1787 *
1788 * @{
1789 */
1790
Gordon Henriksen265f7802008-03-19 01:11:35 +00001791LLVMModuleRef LLVMGetGlobalParent(LLVMValueRef Global);
Chris Lattner25963c62010-01-09 22:27:07 +00001792LLVMBool LLVMIsDeclaration(LLVMValueRef Global);
Gordon Henriksen76a03742007-09-18 03:18:57 +00001793LLVMLinkage LLVMGetLinkage(LLVMValueRef Global);
1794void LLVMSetLinkage(LLVMValueRef Global, LLVMLinkage Linkage);
1795const char *LLVMGetSection(LLVMValueRef Global);
1796void LLVMSetSection(LLVMValueRef Global, const char *Section);
1797LLVMVisibility LLVMGetVisibility(LLVMValueRef Global);
1798void LLVMSetVisibility(LLVMValueRef Global, LLVMVisibility Viz);
Reid Kleckner2fae26f2014-03-05 02:34:23 +00001799LLVMDLLStorageClass LLVMGetDLLStorageClass(LLVMValueRef Global);
1800void LLVMSetDLLStorageClass(LLVMValueRef Global, LLVMDLLStorageClass Class);
Tim Northoverad96d012014-03-10 19:24:35 +00001801LLVMBool LLVMHasUnnamedAddr(LLVMValueRef Global);
1802void LLVMSetUnnamedAddr(LLVMValueRef Global, LLVMBool HasUnnamedAddr);
Anders Waldenborg213a63f2013-10-29 09:02:02 +00001803
1804/**
1805 * @defgroup LLVMCCoreValueWithAlignment Values with alignment
1806 *
1807 * Functions in this group only apply to values with alignment, i.e.
1808 * global variables, load and store instructions.
1809 */
1810
1811/**
1812 * Obtain the preferred alignment of the value.
Peter Zotov9f584e62014-03-05 05:05:34 +00001813 * @see llvm::AllocaInst::getAlignment()
Anders Waldenborg213a63f2013-10-29 09:02:02 +00001814 * @see llvm::LoadInst::getAlignment()
1815 * @see llvm::StoreInst::getAlignment()
1816 * @see llvm::GlobalValue::getAlignment()
1817 */
1818unsigned LLVMGetAlignment(LLVMValueRef V);
1819
1820/**
1821 * Set the preferred alignment of the value.
Peter Zotov9f584e62014-03-05 05:05:34 +00001822 * @see llvm::AllocaInst::setAlignment()
Anders Waldenborg213a63f2013-10-29 09:02:02 +00001823 * @see llvm::LoadInst::setAlignment()
1824 * @see llvm::StoreInst::setAlignment()
1825 * @see llvm::GlobalValue::setAlignment()
1826 */
1827void LLVMSetAlignment(LLVMValueRef V, unsigned Bytes);
1828
1829/**
1830 * @}
1831 */
Gordon Henriksen76a03742007-09-18 03:18:57 +00001832
Gregory Szorc52d26602012-03-21 07:28:27 +00001833/**
1834 * @defgroup LLVMCoreValueConstantGlobalVariable Global Variables
1835 *
1836 * This group contains functions that operate on global variable values.
1837 *
1838 * @see llvm::GlobalVariable
1839 *
1840 * @{
1841 */
Gordon Henriksen76a03742007-09-18 03:18:57 +00001842LLVMValueRef LLVMAddGlobal(LLVMModuleRef M, LLVMTypeRef Ty, const char *Name);
Erick Tryzelaar06894b32010-02-28 09:46:13 +00001843LLVMValueRef LLVMAddGlobalInAddressSpace(LLVMModuleRef M, LLVMTypeRef Ty,
1844 const char *Name,
1845 unsigned AddressSpace);
Gordon Henriksen783f7bb2007-10-08 03:45:09 +00001846LLVMValueRef LLVMGetNamedGlobal(LLVMModuleRef M, const char *Name);
Gordon Henriksen07a45f42008-03-23 22:21:29 +00001847LLVMValueRef LLVMGetFirstGlobal(LLVMModuleRef M);
1848LLVMValueRef LLVMGetLastGlobal(LLVMModuleRef M);
1849LLVMValueRef LLVMGetNextGlobal(LLVMValueRef GlobalVar);
1850LLVMValueRef LLVMGetPreviousGlobal(LLVMValueRef GlobalVar);
Gordon Henriksen76a03742007-09-18 03:18:57 +00001851void LLVMDeleteGlobal(LLVMValueRef GlobalVar);
Gordon Henriksen76a03742007-09-18 03:18:57 +00001852LLVMValueRef LLVMGetInitializer(LLVMValueRef GlobalVar);
1853void LLVMSetInitializer(LLVMValueRef GlobalVar, LLVMValueRef ConstantVal);
Chris Lattner25963c62010-01-09 22:27:07 +00001854LLVMBool LLVMIsThreadLocal(LLVMValueRef GlobalVar);
1855void LLVMSetThreadLocal(LLVMValueRef GlobalVar, LLVMBool IsThreadLocal);
1856LLVMBool LLVMIsGlobalConstant(LLVMValueRef GlobalVar);
1857void LLVMSetGlobalConstant(LLVMValueRef GlobalVar, LLVMBool IsConstant);
Hans Wennborg5ff71202013-04-16 08:58:59 +00001858LLVMThreadLocalMode LLVMGetThreadLocalMode(LLVMValueRef GlobalVar);
1859void LLVMSetThreadLocalMode(LLVMValueRef GlobalVar, LLVMThreadLocalMode Mode);
1860LLVMBool LLVMIsExternallyInitialized(LLVMValueRef GlobalVar);
1861void LLVMSetExternallyInitialized(LLVMValueRef GlobalVar, LLVMBool IsExtInit);
Gordon Henriksen76a03742007-09-18 03:18:57 +00001862
Gregory Szorc52d26602012-03-21 07:28:27 +00001863/**
1864 * @}
1865 */
1866
1867/**
1868 * @defgroup LLVMCoreValueConstantGlobalAlias Global Aliases
1869 *
1870 * This group contains function that operate on global alias values.
1871 *
1872 * @see llvm::GlobalAlias
1873 *
1874 * @{
1875 */
Chris Lattner3d1f5522008-12-17 21:39:50 +00001876LLVMValueRef LLVMAddAlias(LLVMModuleRef M, LLVMTypeRef Ty, LLVMValueRef Aliasee,
1877 const char *Name);
1878
Gregory Szorc34c863a2012-03-21 03:54:29 +00001879/**
1880 * @}
1881 */
1882
1883/**
1884 * @defgroup LLVMCCoreValueFunction Function values
1885 *
1886 * Functions in this group operate on LLVMValueRef instances that
1887 * correspond to llvm::Function instances.
1888 *
1889 * @see llvm::Function
1890 *
1891 * @{
1892 */
1893
1894/**
1895 * Remove a function from its containing module and deletes it.
1896 *
1897 * @see llvm::Function::eraseFromParent()
1898 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00001899void LLVMDeleteFunction(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001900
1901/**
Andrew Wilkins3bdfc1c2015-07-14 01:23:06 +00001902 * Obtain the personality function attached to the function.
1903 *
1904 * @see llvm::Function::getPersonalityFn()
1905 */
1906LLVMValueRef LLVMGetPersonalityFn(LLVMValueRef Fn);
1907
1908/**
1909 * Set the personality function attached to the function.
1910 *
1911 * @see llvm::Function::setPersonalityFn()
1912 */
1913void LLVMSetPersonalityFn(LLVMValueRef Fn, LLVMValueRef PersonalityFn);
1914
1915/**
Gregory Szorc34c863a2012-03-21 03:54:29 +00001916 * Obtain the ID number from a function instance.
1917 *
1918 * @see llvm::Function::getIntrinsicID()
1919 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00001920unsigned LLVMGetIntrinsicID(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001921
1922/**
1923 * Obtain the calling function of a function.
1924 *
1925 * The returned value corresponds to the LLVMCallConv enumeration.
1926 *
1927 * @see llvm::Function::getCallingConv()
1928 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00001929unsigned LLVMGetFunctionCallConv(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001930
1931/**
1932 * Set the calling convention of a function.
1933 *
1934 * @see llvm::Function::setCallingConv()
1935 *
1936 * @param Fn Function to operate on
1937 * @param CC LLVMCallConv to set calling convention to
1938 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00001939void LLVMSetFunctionCallConv(LLVMValueRef Fn, unsigned CC);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001940
1941/**
1942 * Obtain the name of the garbage collector to use during code
1943 * generation.
1944 *
1945 * @see llvm::Function::getGC()
1946 */
Gordon Henriksend930f912008-08-17 18:44:35 +00001947const char *LLVMGetGC(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001948
1949/**
1950 * Define the garbage collector to use during code generation.
1951 *
1952 * @see llvm::Function::setGC()
1953 */
Gordon Henriksend930f912008-08-17 18:44:35 +00001954void LLVMSetGC(LLVMValueRef Fn, const char *Name);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001955
1956/**
1957 * Add an attribute to a function.
1958 *
1959 * @see llvm::Function::addAttribute()
1960 */
Duncan Sands7374a012009-05-06 12:21:17 +00001961void LLVMAddFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001962
1963/**
Nick Lewyckyc3890d22015-07-29 22:32:47 +00001964 * Add a target-dependent attribute to a function
Tom Stellarde8f35e12013-04-16 23:12:43 +00001965 * @see llvm::AttrBuilder::addAttribute()
1966 */
1967void LLVMAddTargetDependentFunctionAttr(LLVMValueRef Fn, const char *A,
1968 const char *V);
1969
1970/**
Gregory Szorc34c863a2012-03-21 03:54:29 +00001971 * Obtain an attribute from a function.
1972 *
1973 * @see llvm::Function::getAttributes()
1974 */
Chris Lattner40cf28d2009-10-12 04:01:02 +00001975LLVMAttribute LLVMGetFunctionAttr(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001976
1977/**
1978 * Remove an attribute from a function.
1979 */
Duncan Sands7374a012009-05-06 12:21:17 +00001980void LLVMRemoveFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00001981
Gregory Szorc34c863a2012-03-21 03:54:29 +00001982/**
1983 * @defgroup LLVMCCoreValueFunctionParameters Function Parameters
1984 *
1985 * Functions in this group relate to arguments/parameters on functions.
1986 *
1987 * Functions in this group expect LLVMValueRef instances that correspond
1988 * to llvm::Function instances.
1989 *
1990 * @{
1991 */
1992
1993/**
1994 * Obtain the number of parameters in a function.
1995 *
1996 * @see llvm::Function::arg_size()
1997 */
Gordon Henriksen265f7802008-03-19 01:11:35 +00001998unsigned LLVMCountParams(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001999
2000/**
2001 * Obtain the parameters in a function.
2002 *
2003 * The takes a pointer to a pre-allocated array of LLVMValueRef that is
2004 * at least LLVMCountParams() long. This array will be filled with
2005 * LLVMValueRef instances which correspond to the parameters the
2006 * function receives. Each LLVMValueRef corresponds to a llvm::Argument
2007 * instance.
2008 *
2009 * @see llvm::Function::arg_begin()
2010 */
Gordon Henriksen265f7802008-03-19 01:11:35 +00002011void LLVMGetParams(LLVMValueRef Fn, LLVMValueRef *Params);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002012
2013/**
2014 * Obtain the parameter at the specified index.
2015 *
2016 * Parameters are indexed from 0.
2017 *
2018 * @see llvm::Function::arg_begin()
2019 */
Gordon Henriksen265f7802008-03-19 01:11:35 +00002020LLVMValueRef LLVMGetParam(LLVMValueRef Fn, unsigned Index);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002021
2022/**
2023 * Obtain the function to which this argument belongs.
2024 *
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +00002025 * Unlike other functions in this group, this one takes an LLVMValueRef
Gregory Szorc34c863a2012-03-21 03:54:29 +00002026 * that corresponds to a llvm::Attribute.
2027 *
2028 * The returned LLVMValueRef is the llvm::Function to which this
2029 * argument belongs.
2030 */
Gordon Henriksen265f7802008-03-19 01:11:35 +00002031LLVMValueRef LLVMGetParamParent(LLVMValueRef Inst);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002032
2033/**
2034 * Obtain the first parameter to a function.
2035 *
2036 * @see llvm::Function::arg_begin()
2037 */
Gordon Henriksen07a45f42008-03-23 22:21:29 +00002038LLVMValueRef LLVMGetFirstParam(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002039
2040/**
2041 * Obtain the last parameter to a function.
2042 *
2043 * @see llvm::Function::arg_end()
2044 */
Gordon Henriksen07a45f42008-03-23 22:21:29 +00002045LLVMValueRef LLVMGetLastParam(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002046
2047/**
2048 * Obtain the next parameter to a function.
2049 *
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +00002050 * This takes an LLVMValueRef obtained from LLVMGetFirstParam() (which is
Gregory Szorc34c863a2012-03-21 03:54:29 +00002051 * actually a wrapped iterator) and obtains the next parameter from the
2052 * underlying iterator.
2053 */
Gordon Henriksen07a45f42008-03-23 22:21:29 +00002054LLVMValueRef LLVMGetNextParam(LLVMValueRef Arg);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002055
2056/**
2057 * Obtain the previous parameter to a function.
2058 *
2059 * This is the opposite of LLVMGetNextParam().
2060 */
Gordon Henriksen07a45f42008-03-23 22:21:29 +00002061LLVMValueRef LLVMGetPreviousParam(LLVMValueRef Arg);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002062
2063/**
2064 * Add an attribute to a function argument.
2065 *
2066 * @see llvm::Argument::addAttr()
2067 */
Devang Patel4c758ea2008-09-25 21:00:45 +00002068void LLVMAddAttribute(LLVMValueRef Arg, LLVMAttribute PA);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002069
2070/**
2071 * Remove an attribute from a function argument.
2072 *
2073 * @see llvm::Argument::removeAttr()
2074 */
Devang Patel4c758ea2008-09-25 21:00:45 +00002075void LLVMRemoveAttribute(LLVMValueRef Arg, LLVMAttribute PA);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002076
2077/**
2078 * Get an attribute from a function argument.
2079 */
Chris Lattner40cf28d2009-10-12 04:01:02 +00002080LLVMAttribute LLVMGetAttribute(LLVMValueRef Arg);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002081
2082/**
2083 * Set the alignment for a function parameter.
2084 *
2085 * @see llvm::Argument::addAttr()
Bill Wendling50d27842012-10-15 20:35:56 +00002086 * @see llvm::AttrBuilder::addAlignmentAttr()
Gregory Szorc34c863a2012-03-21 03:54:29 +00002087 */
Gordon Henriksen2d9cc212008-04-28 17:37:06 +00002088void LLVMSetParamAlignment(LLVMValueRef Arg, unsigned align);
Gordon Henriksen265f7802008-03-19 01:11:35 +00002089
Gregory Szorc34c863a2012-03-21 03:54:29 +00002090/**
2091 * @}
2092 */
2093
2094/**
2095 * @}
2096 */
2097
2098/**
Gregory Szorc52d26602012-03-21 07:28:27 +00002099 * @}
2100 */
2101
2102/**
2103 * @}
2104 */
2105
2106/**
2107 * @defgroup LLVMCCoreValueMetadata Metadata
2108 *
2109 * @{
2110 */
2111
2112/**
2113 * Obtain a MDString value from a context.
2114 *
2115 * The returned instance corresponds to the llvm::MDString class.
2116 *
2117 * The instance is specified by string data of a specified length. The
2118 * string content is copied, so the backing memory can be freed after
2119 * this function returns.
2120 */
2121LLVMValueRef LLVMMDStringInContext(LLVMContextRef C, const char *Str,
2122 unsigned SLen);
2123
2124/**
2125 * Obtain a MDString value from the global context.
2126 */
2127LLVMValueRef LLVMMDString(const char *Str, unsigned SLen);
2128
2129/**
2130 * Obtain a MDNode value from a context.
2131 *
2132 * The returned value corresponds to the llvm::MDNode class.
2133 */
2134LLVMValueRef LLVMMDNodeInContext(LLVMContextRef C, LLVMValueRef *Vals,
2135 unsigned Count);
2136
2137/**
2138 * Obtain a MDNode value from the global context.
2139 */
2140LLVMValueRef LLVMMDNode(LLVMValueRef *Vals, unsigned Count);
2141
2142/**
2143 * Obtain the underlying string from a MDString value.
2144 *
2145 * @param V Instance to obtain string from.
2146 * @param Len Memory address which will hold length of returned string.
2147 * @return String data in MDString.
2148 */
2149const char *LLVMGetMDString(LLVMValueRef V, unsigned* Len);
2150
2151/**
Duncan Sands12ccbe72012-09-19 20:29:39 +00002152 * Obtain the number of operands from an MDNode value.
2153 *
2154 * @param V MDNode to get number of operands from.
2155 * @return Number of operands of the MDNode.
2156 */
2157unsigned LLVMGetMDNodeNumOperands(LLVMValueRef V);
2158
2159/**
2160 * Obtain the given MDNode's operands.
2161 *
2162 * The passed LLVMValueRef pointer should point to enough memory to hold all of
2163 * the operands of the given MDNode (see LLVMGetMDNodeNumOperands) as
2164 * LLVMValueRefs. This memory will be populated with the LLVMValueRefs of the
2165 * MDNode's operands.
2166 *
2167 * @param V MDNode to get the operands from.
2168 * @param Dest Destination array for operands.
2169 */
2170void LLVMGetMDNodeOperands(LLVMValueRef V, LLVMValueRef *Dest);
2171
2172/**
Gregory Szorc52d26602012-03-21 07:28:27 +00002173 * @}
2174 */
2175
2176/**
Gregory Szorc34c863a2012-03-21 03:54:29 +00002177 * @defgroup LLVMCCoreValueBasicBlock Basic Block
2178 *
2179 * A basic block represents a single entry single exit section of code.
2180 * Basic blocks contain a list of instructions which form the body of
2181 * the block.
2182 *
2183 * Basic blocks belong to functions. They have the type of label.
2184 *
2185 * Basic blocks are themselves values. However, the C API models them as
2186 * LLVMBasicBlockRef.
2187 *
2188 * @see llvm::BasicBlock
2189 *
2190 * @{
2191 */
2192
2193/**
2194 * Convert a basic block instance to a value type.
2195 */
Gordon Henriksen07a45f42008-03-23 22:21:29 +00002196LLVMValueRef LLVMBasicBlockAsValue(LLVMBasicBlockRef BB);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002197
2198/**
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +00002199 * Determine whether an LLVMValueRef is itself a basic block.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002200 */
Chris Lattner25963c62010-01-09 22:27:07 +00002201LLVMBool LLVMValueIsBasicBlock(LLVMValueRef Val);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002202
2203/**
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +00002204 * Convert an LLVMValueRef to an LLVMBasicBlockRef instance.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002205 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002206LLVMBasicBlockRef LLVMValueAsBasicBlock(LLVMValueRef Val);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002207
2208/**
2209 * Obtain the function to which a basic block belongs.
2210 *
2211 * @see llvm::BasicBlock::getParent()
2212 */
Gordon Henriksen07a45f42008-03-23 22:21:29 +00002213LLVMValueRef LLVMGetBasicBlockParent(LLVMBasicBlockRef BB);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002214
2215/**
2216 * Obtain the terminator instruction for a basic block.
2217 *
2218 * If the basic block does not have a terminator (it is not well-formed
2219 * if it doesn't), then NULL is returned.
2220 *
2221 * The returned LLVMValueRef corresponds to a llvm::TerminatorInst.
2222 *
2223 * @see llvm::BasicBlock::getTerminator()
2224 */
Nate Begeman43c322b2011-08-23 20:27:46 +00002225LLVMValueRef LLVMGetBasicBlockTerminator(LLVMBasicBlockRef BB);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002226
2227/**
2228 * Obtain the number of basic blocks in a function.
2229 *
2230 * @param Fn Function value to operate on.
2231 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002232unsigned LLVMCountBasicBlocks(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002233
2234/**
2235 * Obtain all of the basic blocks in a function.
2236 *
2237 * This operates on a function value. The BasicBlocks parameter is a
2238 * pointer to a pre-allocated array of LLVMBasicBlockRef of at least
2239 * LLVMCountBasicBlocks() in length. This array is populated with
2240 * LLVMBasicBlockRef instances.
2241 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002242void LLVMGetBasicBlocks(LLVMValueRef Fn, LLVMBasicBlockRef *BasicBlocks);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002243
2244/**
2245 * Obtain the first basic block in a function.
2246 *
2247 * The returned basic block can be used as an iterator. You will likely
2248 * eventually call into LLVMGetNextBasicBlock() with it.
2249 *
2250 * @see llvm::Function::begin()
2251 */
Gordon Henriksen054817c2008-03-19 03:47:18 +00002252LLVMBasicBlockRef LLVMGetFirstBasicBlock(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002253
2254/**
2255 * Obtain the last basic block in a function.
2256 *
2257 * @see llvm::Function::end()
2258 */
Gordon Henriksen054817c2008-03-19 03:47:18 +00002259LLVMBasicBlockRef LLVMGetLastBasicBlock(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002260
2261/**
2262 * Advance a basic block iterator.
2263 */
Gordon Henriksen054817c2008-03-19 03:47:18 +00002264LLVMBasicBlockRef LLVMGetNextBasicBlock(LLVMBasicBlockRef BB);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002265
2266/**
2267 * Go backwards in a basic block iterator.
2268 */
Gordon Henriksen054817c2008-03-19 03:47:18 +00002269LLVMBasicBlockRef LLVMGetPreviousBasicBlock(LLVMBasicBlockRef BB);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002270
2271/**
2272 * Obtain the basic block that corresponds to the entry point of a
2273 * function.
2274 *
2275 * @see llvm::Function::getEntryBlock()
2276 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002277LLVMBasicBlockRef LLVMGetEntryBasicBlock(LLVMValueRef Fn);
Erick Tryzelaar262332f2009-08-14 00:01:31 +00002278
Gregory Szorc34c863a2012-03-21 03:54:29 +00002279/**
2280 * Append a basic block to the end of a function.
2281 *
2282 * @see llvm::BasicBlock::Create()
2283 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +00002284LLVMBasicBlockRef LLVMAppendBasicBlockInContext(LLVMContextRef C,
2285 LLVMValueRef Fn,
2286 const char *Name);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002287
2288/**
2289 * Append a basic block to the end of a function using the global
2290 * context.
2291 *
2292 * @see llvm::BasicBlock::Create()
2293 */
2294LLVMBasicBlockRef LLVMAppendBasicBlock(LLVMValueRef Fn, const char *Name);
2295
2296/**
2297 * Insert a basic block in a function before another basic block.
2298 *
2299 * The function to add to is determined by the function of the
2300 * passed basic block.
2301 *
2302 * @see llvm::BasicBlock::Create()
2303 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +00002304LLVMBasicBlockRef LLVMInsertBasicBlockInContext(LLVMContextRef C,
2305 LLVMBasicBlockRef BB,
2306 const char *Name);
2307
Gregory Szorc34c863a2012-03-21 03:54:29 +00002308/**
2309 * Insert a basic block in a function using the global context.
2310 *
2311 * @see llvm::BasicBlock::Create()
2312 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002313LLVMBasicBlockRef LLVMInsertBasicBlock(LLVMBasicBlockRef InsertBeforeBB,
2314 const char *Name);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002315
2316/**
2317 * Remove a basic block from a function and delete it.
2318 *
2319 * This deletes the basic block from its containing function and deletes
2320 * the basic block itself.
2321 *
2322 * @see llvm::BasicBlock::eraseFromParent()
2323 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002324void LLVMDeleteBasicBlock(LLVMBasicBlockRef BB);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002325
2326/**
2327 * Remove a basic block from a function.
2328 *
2329 * This deletes the basic block from its containing function but keep
2330 * the basic block alive.
2331 *
2332 * @see llvm::BasicBlock::removeFromParent()
2333 */
Nate Begeman43c322b2011-08-23 20:27:46 +00002334void LLVMRemoveBasicBlockFromParent(LLVMBasicBlockRef BB);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002335
Gregory Szorc34c863a2012-03-21 03:54:29 +00002336/**
2337 * Move a basic block to before another one.
2338 *
2339 * @see llvm::BasicBlock::moveBefore()
2340 */
Duncan Sandsb1d61aa2010-07-19 15:31:07 +00002341void LLVMMoveBasicBlockBefore(LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002342
2343/**
2344 * Move a basic block to after another one.
2345 *
2346 * @see llvm::BasicBlock::moveAfter()
2347 */
Duncan Sandsb1d61aa2010-07-19 15:31:07 +00002348void LLVMMoveBasicBlockAfter(LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos);
2349
Gregory Szorc34c863a2012-03-21 03:54:29 +00002350/**
2351 * Obtain the first instruction in a basic block.
2352 *
2353 * The returned LLVMValueRef corresponds to a llvm::Instruction
2354 * instance.
2355 */
Gordon Henriksen054817c2008-03-19 03:47:18 +00002356LLVMValueRef LLVMGetFirstInstruction(LLVMBasicBlockRef BB);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002357
2358/**
2359 * Obtain the last instruction in a basic block.
2360 *
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +00002361 * The returned LLVMValueRef corresponds to an LLVM:Instruction.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002362 */
Gordon Henriksen054817c2008-03-19 03:47:18 +00002363LLVMValueRef LLVMGetLastInstruction(LLVMBasicBlockRef BB);
Nate Begeman43c322b2011-08-23 20:27:46 +00002364
Gregory Szorc34c863a2012-03-21 03:54:29 +00002365/**
2366 * @}
2367 */
2368
2369/**
2370 * @defgroup LLVMCCoreValueInstruction Instructions
2371 *
2372 * Functions in this group relate to the inspection and manipulation of
2373 * individual instructions.
2374 *
2375 * In the C++ API, an instruction is modeled by llvm::Instruction. This
2376 * class has a large number of descendents. llvm::Instruction is a
2377 * llvm::Value and in the C API, instructions are modeled by
2378 * LLVMValueRef.
2379 *
2380 * This group also contains sub-groups which operate on specific
2381 * llvm::Instruction types, e.g. llvm::CallInst.
2382 *
2383 * @{
2384 */
2385
2386/**
2387 * Determine whether an instruction has any metadata attached.
2388 */
2389int LLVMHasMetadata(LLVMValueRef Val);
2390
2391/**
2392 * Return metadata associated with an instruction value.
2393 */
2394LLVMValueRef LLVMGetMetadata(LLVMValueRef Val, unsigned KindID);
2395
2396/**
2397 * Set metadata associated with an instruction value.
2398 */
2399void LLVMSetMetadata(LLVMValueRef Val, unsigned KindID, LLVMValueRef Node);
2400
2401/**
2402 * Obtain the basic block to which an instruction belongs.
2403 *
2404 * @see llvm::Instruction::getParent()
2405 */
Nate Begeman43c322b2011-08-23 20:27:46 +00002406LLVMBasicBlockRef LLVMGetInstructionParent(LLVMValueRef Inst);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002407
2408/**
2409 * Obtain the instruction that occurs after the one specified.
2410 *
2411 * The next instruction will be from the same basic block.
2412 *
2413 * If this is the last instruction in a basic block, NULL will be
2414 * returned.
2415 */
Gordon Henriksen054817c2008-03-19 03:47:18 +00002416LLVMValueRef LLVMGetNextInstruction(LLVMValueRef Inst);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002417
2418/**
Benjamin Kramerbde91762012-06-02 10:20:22 +00002419 * Obtain the instruction that occurred before this one.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002420 *
2421 * If the instruction is the first instruction in a basic block, NULL
2422 * will be returned.
2423 */
Gordon Henriksen054817c2008-03-19 03:47:18 +00002424LLVMValueRef LLVMGetPreviousInstruction(LLVMValueRef Inst);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002425
2426/**
2427 * Remove and delete an instruction.
2428 *
2429 * The instruction specified is removed from its containing building
2430 * block and then deleted.
2431 *
2432 * @see llvm::Instruction::eraseFromParent()
2433 */
Devang Pateldbebc6f2011-10-03 20:59:18 +00002434void LLVMInstructionEraseFromParent(LLVMValueRef Inst);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002435
2436/**
2437 * Obtain the code opcode for an individual instruction.
2438 *
2439 * @see llvm::Instruction::getOpCode()
2440 */
Torok Edwinab6158e2011-10-14 20:37:49 +00002441LLVMOpcode LLVMGetInstructionOpcode(LLVMValueRef Inst);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002442
2443/**
2444 * Obtain the predicate of an instruction.
2445 *
2446 * This is only valid for instructions that correspond to llvm::ICmpInst
2447 * or llvm::ConstantExpr whose opcode is llvm::Instruction::ICmp.
2448 *
2449 * @see llvm::ICmpInst::getPredicate()
2450 */
Torok Edwin60c40de2011-10-06 12:13:20 +00002451LLVMIntPredicate LLVMGetICmpPredicate(LLVMValueRef Inst);
Gordon Henriksen265f7802008-03-19 01:11:35 +00002452
Gregory Szorc34c863a2012-03-21 03:54:29 +00002453/**
Peter Zotov1d98e6d2014-10-28 19:46:44 +00002454 * Obtain the float predicate of an instruction.
2455 *
2456 * This is only valid for instructions that correspond to llvm::FCmpInst
2457 * or llvm::ConstantExpr whose opcode is llvm::Instruction::FCmp.
2458 *
2459 * @see llvm::FCmpInst::getPredicate()
2460 */
2461LLVMRealPredicate LLVMGetFCmpPredicate(LLVMValueRef Inst);
2462
2463/**
Peter Zotovaff492c2014-10-17 01:02:34 +00002464 * Create a copy of 'this' instruction that is identical in all ways
2465 * except the following:
2466 * * The instruction has no parent
2467 * * The instruction has no name
2468 *
2469 * @see llvm::Instruction::clone()
2470 */
2471LLVMValueRef LLVMInstructionClone(LLVMValueRef Inst);
2472
2473/**
Gregory Szorc34c863a2012-03-21 03:54:29 +00002474 * @defgroup LLVMCCoreValueInstructionCall Call Sites and Invocations
2475 *
2476 * Functions in this group apply to instructions that refer to call
2477 * sites and invocations. These correspond to C++ types in the
2478 * llvm::CallInst class tree.
2479 *
2480 * @{
2481 */
2482
2483/**
2484 * Set the calling convention for a call instruction.
2485 *
2486 * This expects an LLVMValueRef that corresponds to a llvm::CallInst or
2487 * llvm::InvokeInst.
2488 *
2489 * @see llvm::CallInst::setCallingConv()
2490 * @see llvm::InvokeInst::setCallingConv()
2491 */
Gordon Henriksen1158c532007-12-29 20:45:00 +00002492void LLVMSetInstructionCallConv(LLVMValueRef Instr, unsigned CC);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002493
2494/**
2495 * Obtain the calling convention for a call instruction.
2496 *
2497 * This is the opposite of LLVMSetInstructionCallConv(). Reads its
2498 * usage.
2499 *
2500 * @see LLVMSetInstructionCallConv()
2501 */
Gordon Henriksen1158c532007-12-29 20:45:00 +00002502unsigned LLVMGetInstructionCallConv(LLVMValueRef Instr);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002503
2504
Devang Patel4c758ea2008-09-25 21:00:45 +00002505void LLVMAddInstrAttribute(LLVMValueRef Instr, unsigned index, LLVMAttribute);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002506void LLVMRemoveInstrAttribute(LLVMValueRef Instr, unsigned index,
Devang Patel4c758ea2008-09-25 21:00:45 +00002507 LLVMAttribute);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002508void LLVMSetInstrParamAlignment(LLVMValueRef Instr, unsigned index,
Gordon Henriksen2d9cc212008-04-28 17:37:06 +00002509 unsigned align);
Gordon Henriksen1158c532007-12-29 20:45:00 +00002510
Gregory Szorc34c863a2012-03-21 03:54:29 +00002511/**
2512 * Obtain whether a call instruction is a tail call.
2513 *
2514 * This only works on llvm::CallInst instructions.
2515 *
2516 * @see llvm::CallInst::isTailCall()
2517 */
Chris Lattner25963c62010-01-09 22:27:07 +00002518LLVMBool LLVMIsTailCall(LLVMValueRef CallInst);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002519
2520/**
2521 * Set whether a call instruction is a tail call.
2522 *
2523 * This only works on llvm::CallInst instructions.
2524 *
2525 * @see llvm::CallInst::setTailCall()
2526 */
Chris Lattner25963c62010-01-09 22:27:07 +00002527void LLVMSetTailCall(LLVMValueRef CallInst, LLVMBool IsTailCall);
Gordon Henrikseneeb65372008-08-30 16:34:54 +00002528
Gregory Szorc34c863a2012-03-21 03:54:29 +00002529/**
2530 * @}
2531 */
2532
2533/**
Peter Zotov2481c752014-10-28 19:46:56 +00002534 * @defgroup LLVMCCoreValueInstructionTerminator Terminators
2535 *
2536 * Functions in this group only apply to instructions that map to
2537 * llvm::TerminatorInst instances.
2538 *
2539 * @{
2540 */
2541
2542/**
2543 * Return the number of successors that this terminator has.
2544 *
2545 * @see llvm::TerminatorInst::getNumSuccessors
2546 */
2547unsigned LLVMGetNumSuccessors(LLVMValueRef Term);
2548
2549/**
2550 * Return the specified successor.
2551 *
2552 * @see llvm::TerminatorInst::getSuccessor
2553 */
2554LLVMBasicBlockRef LLVMGetSuccessor(LLVMValueRef Term, unsigned i);
2555
2556/**
2557 * Update the specified successor to point at the provided block.
2558 *
2559 * @see llvm::TerminatorInst::setSuccessor
2560 */
2561void LLVMSetSuccessor(LLVMValueRef Term, unsigned i, LLVMBasicBlockRef block);
2562
2563/**
2564 * Return if a branch is conditional.
2565 *
2566 * This only works on llvm::BranchInst instructions.
2567 *
2568 * @see llvm::BranchInst::isConditional
2569 */
2570LLVMBool LLVMIsConditional(LLVMValueRef Branch);
2571
2572/**
2573 * Return the condition of a branch instruction.
2574 *
2575 * This only works on llvm::BranchInst instructions.
2576 *
2577 * @see llvm::BranchInst::getCondition
2578 */
2579LLVMValueRef LLVMGetCondition(LLVMValueRef Branch);
2580
2581/**
2582 * Set the condition of a branch instruction.
2583 *
2584 * This only works on llvm::BranchInst instructions.
2585 *
2586 * @see llvm::BranchInst::setCondition
2587 */
2588void LLVMSetCondition(LLVMValueRef Branch, LLVMValueRef Cond);
2589
2590/**
Gregory Szorc34c863a2012-03-21 03:54:29 +00002591 * Obtain the default destination basic block of a switch instruction.
2592 *
2593 * This only works on llvm::SwitchInst instructions.
2594 *
2595 * @see llvm::SwitchInst::getDefaultDest()
2596 */
Nate Begeman43c322b2011-08-23 20:27:46 +00002597LLVMBasicBlockRef LLVMGetSwitchDefaultDest(LLVMValueRef SwitchInstr);
2598
Gregory Szorc34c863a2012-03-21 03:54:29 +00002599/**
Peter Zotov2481c752014-10-28 19:46:56 +00002600 * @}
2601 */
2602
2603/**
Gregory Szorc34c863a2012-03-21 03:54:29 +00002604 * @defgroup LLVMCCoreValueInstructionPHINode PHI Nodes
2605 *
2606 * Functions in this group only apply to instructions that map to
2607 * llvm::PHINode instances.
2608 *
2609 * @{
2610 */
2611
2612/**
2613 * Add an incoming value to the end of a PHI list.
2614 */
Gordon Henriksen44dd8fb2007-10-08 18:14:39 +00002615void LLVMAddIncoming(LLVMValueRef PhiNode, LLVMValueRef *IncomingValues,
2616 LLVMBasicBlockRef *IncomingBlocks, unsigned Count);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002617
2618/**
2619 * Obtain the number of incoming basic blocks to a PHI node.
2620 */
Gordon Henriksen44dd8fb2007-10-08 18:14:39 +00002621unsigned LLVMCountIncoming(LLVMValueRef PhiNode);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002622
2623/**
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +00002624 * Obtain an incoming value to a PHI node as an LLVMValueRef.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002625 */
Gordon Henriksen44dd8fb2007-10-08 18:14:39 +00002626LLVMValueRef LLVMGetIncomingValue(LLVMValueRef PhiNode, unsigned Index);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002627
2628/**
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +00002629 * Obtain an incoming value to a PHI node as an LLVMBasicBlockRef.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002630 */
Gordon Henriksen44dd8fb2007-10-08 18:14:39 +00002631LLVMBasicBlockRef LLVMGetIncomingBlock(LLVMValueRef PhiNode, unsigned Index);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002632
Gregory Szorc34c863a2012-03-21 03:54:29 +00002633/**
2634 * @}
2635 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002636
Gregory Szorc34c863a2012-03-21 03:54:29 +00002637/**
2638 * @}
2639 */
2640
2641/**
2642 * @}
2643 */
2644
2645/**
2646 * @defgroup LLVMCCoreInstructionBuilder Instruction Builders
2647 *
2648 * An instruction builder represents a point within a basic block and is
2649 * the exclusive means of building instructions using the C interface.
2650 *
2651 * @{
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002652 */
2653
Erick Tryzelaar262332f2009-08-14 00:01:31 +00002654LLVMBuilderRef LLVMCreateBuilderInContext(LLVMContextRef C);
Gordon Henriksena735a9c2008-05-04 12:55:34 +00002655LLVMBuilderRef LLVMCreateBuilder(void);
Gordon Henriksen054817c2008-03-19 03:47:18 +00002656void LLVMPositionBuilder(LLVMBuilderRef Builder, LLVMBasicBlockRef Block,
2657 LLVMValueRef Instr);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002658void LLVMPositionBuilderBefore(LLVMBuilderRef Builder, LLVMValueRef Instr);
2659void LLVMPositionBuilderAtEnd(LLVMBuilderRef Builder, LLVMBasicBlockRef Block);
Gordon Henriksen265f7802008-03-19 01:11:35 +00002660LLVMBasicBlockRef LLVMGetInsertBlock(LLVMBuilderRef Builder);
Chris Lattner3d1f5522008-12-17 21:39:50 +00002661void LLVMClearInsertionPosition(LLVMBuilderRef Builder);
2662void LLVMInsertIntoBuilder(LLVMBuilderRef Builder, LLVMValueRef Instr);
Erick Tryzelaar9813bea2009-08-16 02:20:57 +00002663void LLVMInsertIntoBuilderWithName(LLVMBuilderRef Builder, LLVMValueRef Instr,
2664 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002665void LLVMDisposeBuilder(LLVMBuilderRef Builder);
2666
Erick Tryzelaard8531fa2010-02-28 09:45:59 +00002667/* Metadata */
2668void LLVMSetCurrentDebugLocation(LLVMBuilderRef Builder, LLVMValueRef L);
2669LLVMValueRef LLVMGetCurrentDebugLocation(LLVMBuilderRef Builder);
2670void LLVMSetInstDebugLocation(LLVMBuilderRef Builder, LLVMValueRef Inst);
2671
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002672/* Terminators */
2673LLVMValueRef LLVMBuildRetVoid(LLVMBuilderRef);
2674LLVMValueRef LLVMBuildRet(LLVMBuilderRef, LLVMValueRef V);
Erick Tryzelaarfd529d72009-08-19 08:36:49 +00002675LLVMValueRef LLVMBuildAggregateRet(LLVMBuilderRef, LLVMValueRef *RetVals,
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002676 unsigned N);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002677LLVMValueRef LLVMBuildBr(LLVMBuilderRef, LLVMBasicBlockRef Dest);
2678LLVMValueRef LLVMBuildCondBr(LLVMBuilderRef, LLVMValueRef If,
2679 LLVMBasicBlockRef Then, LLVMBasicBlockRef Else);
2680LLVMValueRef LLVMBuildSwitch(LLVMBuilderRef, LLVMValueRef V,
2681 LLVMBasicBlockRef Else, unsigned NumCases);
Erick Tryzelaar0fb26ef2010-02-28 09:46:06 +00002682LLVMValueRef LLVMBuildIndirectBr(LLVMBuilderRef B, LLVMValueRef Addr,
2683 unsigned NumDests);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002684LLVMValueRef LLVMBuildInvoke(LLVMBuilderRef, LLVMValueRef Fn,
2685 LLVMValueRef *Args, unsigned NumArgs,
2686 LLVMBasicBlockRef Then, LLVMBasicBlockRef Catch,
2687 const char *Name);
Benjamin Kramer5a6568832011-08-19 01:36:54 +00002688LLVMValueRef LLVMBuildLandingPad(LLVMBuilderRef B, LLVMTypeRef Ty,
Reid Kleckneref9828f2015-07-16 01:16:39 +00002689 LLVMValueRef PersFn, unsigned NumClauses,
2690 const char *Name);
Bill Wendlingf891bf82011-07-31 06:30:59 +00002691LLVMValueRef LLVMBuildResume(LLVMBuilderRef B, LLVMValueRef Exn);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002692LLVMValueRef LLVMBuildUnreachable(LLVMBuilderRef);
2693
Gordon Henriksen097102c2008-01-01 05:50:53 +00002694/* Add a case to the switch instruction */
2695void LLVMAddCase(LLVMValueRef Switch, LLVMValueRef OnVal,
2696 LLVMBasicBlockRef Dest);
2697
Erick Tryzelaar0fb26ef2010-02-28 09:46:06 +00002698/* Add a destination to the indirectbr instruction */
2699void LLVMAddDestination(LLVMValueRef IndirectBr, LLVMBasicBlockRef Dest);
2700
Bill Wendlingfae14752011-08-12 20:24:12 +00002701/* Add a catch or filter clause to the landingpad instruction */
2702void LLVMAddClause(LLVMValueRef LandingPad, LLVMValueRef ClauseVal);
2703
2704/* Set the 'cleanup' flag in the landingpad instruction */
2705void LLVMSetCleanup(LLVMValueRef LandingPad, LLVMBool Val);
2706
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002707/* Arithmetic */
2708LLVMValueRef LLVMBuildAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2709 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002710LLVMValueRef LLVMBuildNSWAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2711 const char *Name);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +00002712LLVMValueRef LLVMBuildNUWAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2713 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002714LLVMValueRef LLVMBuildFAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2715 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002716LLVMValueRef LLVMBuildSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2717 const char *Name);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +00002718LLVMValueRef LLVMBuildNSWSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2719 const char *Name);
2720LLVMValueRef LLVMBuildNUWSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2721 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002722LLVMValueRef LLVMBuildFSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2723 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002724LLVMValueRef LLVMBuildMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2725 const char *Name);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +00002726LLVMValueRef LLVMBuildNSWMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2727 const char *Name);
2728LLVMValueRef LLVMBuildNUWMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2729 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002730LLVMValueRef LLVMBuildFMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2731 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002732LLVMValueRef LLVMBuildUDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2733 const char *Name);
2734LLVMValueRef LLVMBuildSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2735 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002736LLVMValueRef LLVMBuildExactSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2737 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002738LLVMValueRef LLVMBuildFDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2739 const char *Name);
2740LLVMValueRef LLVMBuildURem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2741 const char *Name);
2742LLVMValueRef LLVMBuildSRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2743 const char *Name);
2744LLVMValueRef LLVMBuildFRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2745 const char *Name);
2746LLVMValueRef LLVMBuildShl(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2747 const char *Name);
2748LLVMValueRef LLVMBuildLShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2749 const char *Name);
2750LLVMValueRef LLVMBuildAShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2751 const char *Name);
2752LLVMValueRef LLVMBuildAnd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2753 const char *Name);
2754LLVMValueRef LLVMBuildOr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2755 const char *Name);
2756LLVMValueRef LLVMBuildXor(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2757 const char *Name);
Erick Tryzelaar31831792010-02-28 05:51:27 +00002758LLVMValueRef LLVMBuildBinOp(LLVMBuilderRef B, LLVMOpcode Op,
2759 LLVMValueRef LHS, LLVMValueRef RHS,
2760 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002761LLVMValueRef LLVMBuildNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +00002762LLVMValueRef LLVMBuildNSWNeg(LLVMBuilderRef B, LLVMValueRef V,
2763 const char *Name);
2764LLVMValueRef LLVMBuildNUWNeg(LLVMBuilderRef B, LLVMValueRef V,
2765 const char *Name);
Dan Gohmanf919bd62009-09-28 21:51:41 +00002766LLVMValueRef LLVMBuildFNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002767LLVMValueRef LLVMBuildNot(LLVMBuilderRef, LLVMValueRef V, const char *Name);
2768
2769/* Memory */
2770LLVMValueRef LLVMBuildMalloc(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
2771LLVMValueRef LLVMBuildArrayMalloc(LLVMBuilderRef, LLVMTypeRef Ty,
2772 LLVMValueRef Val, const char *Name);
2773LLVMValueRef LLVMBuildAlloca(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
2774LLVMValueRef LLVMBuildArrayAlloca(LLVMBuilderRef, LLVMTypeRef Ty,
2775 LLVMValueRef Val, const char *Name);
2776LLVMValueRef LLVMBuildFree(LLVMBuilderRef, LLVMValueRef PointerVal);
2777LLVMValueRef LLVMBuildLoad(LLVMBuilderRef, LLVMValueRef PointerVal,
2778 const char *Name);
2779LLVMValueRef LLVMBuildStore(LLVMBuilderRef, LLVMValueRef Val, LLVMValueRef Ptr);
2780LLVMValueRef LLVMBuildGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
2781 LLVMValueRef *Indices, unsigned NumIndices,
2782 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002783LLVMValueRef LLVMBuildInBoundsGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
2784 LLVMValueRef *Indices, unsigned NumIndices,
2785 const char *Name);
2786LLVMValueRef LLVMBuildStructGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
2787 unsigned Idx, const char *Name);
2788LLVMValueRef LLVMBuildGlobalString(LLVMBuilderRef B, const char *Str,
2789 const char *Name);
2790LLVMValueRef LLVMBuildGlobalStringPtr(LLVMBuilderRef B, const char *Str,
2791 const char *Name);
Chris Lattner2cc6f9d2012-03-22 03:54:15 +00002792LLVMBool LLVMGetVolatile(LLVMValueRef MemoryAccessInst);
2793void LLVMSetVolatile(LLVMValueRef MemoryAccessInst, LLVMBool IsVolatile);
Andrew Wilkinsb7362ce2015-08-02 12:16:57 +00002794LLVMAtomicOrdering LLVMGetOrdering(LLVMValueRef MemoryAccessInst);
2795void LLVMSetOrdering(LLVMValueRef MemoryAccessInst, LLVMAtomicOrdering Ordering);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002796
2797/* Casts */
2798LLVMValueRef LLVMBuildTrunc(LLVMBuilderRef, LLVMValueRef Val,
2799 LLVMTypeRef DestTy, const char *Name);
2800LLVMValueRef LLVMBuildZExt(LLVMBuilderRef, LLVMValueRef Val,
2801 LLVMTypeRef DestTy, const char *Name);
2802LLVMValueRef LLVMBuildSExt(LLVMBuilderRef, LLVMValueRef Val,
2803 LLVMTypeRef DestTy, const char *Name);
2804LLVMValueRef LLVMBuildFPToUI(LLVMBuilderRef, LLVMValueRef Val,
2805 LLVMTypeRef DestTy, const char *Name);
2806LLVMValueRef LLVMBuildFPToSI(LLVMBuilderRef, LLVMValueRef Val,
2807 LLVMTypeRef DestTy, const char *Name);
2808LLVMValueRef LLVMBuildUIToFP(LLVMBuilderRef, LLVMValueRef Val,
2809 LLVMTypeRef DestTy, const char *Name);
2810LLVMValueRef LLVMBuildSIToFP(LLVMBuilderRef, LLVMValueRef Val,
2811 LLVMTypeRef DestTy, const char *Name);
2812LLVMValueRef LLVMBuildFPTrunc(LLVMBuilderRef, LLVMValueRef Val,
2813 LLVMTypeRef DestTy, const char *Name);
2814LLVMValueRef LLVMBuildFPExt(LLVMBuilderRef, LLVMValueRef Val,
2815 LLVMTypeRef DestTy, const char *Name);
2816LLVMValueRef LLVMBuildPtrToInt(LLVMBuilderRef, LLVMValueRef Val,
2817 LLVMTypeRef DestTy, const char *Name);
2818LLVMValueRef LLVMBuildIntToPtr(LLVMBuilderRef, LLVMValueRef Val,
2819 LLVMTypeRef DestTy, const char *Name);
2820LLVMValueRef LLVMBuildBitCast(LLVMBuilderRef, LLVMValueRef Val,
2821 LLVMTypeRef DestTy, const char *Name);
Matt Arsenaultb03bd4d2013-11-15 01:34:59 +00002822LLVMValueRef LLVMBuildAddrSpaceCast(LLVMBuilderRef, LLVMValueRef Val,
2823 LLVMTypeRef DestTy, const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002824LLVMValueRef LLVMBuildZExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
2825 LLVMTypeRef DestTy, const char *Name);
2826LLVMValueRef LLVMBuildSExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
2827 LLVMTypeRef DestTy, const char *Name);
2828LLVMValueRef LLVMBuildTruncOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
2829 LLVMTypeRef DestTy, const char *Name);
Erick Tryzelaar31831792010-02-28 05:51:27 +00002830LLVMValueRef LLVMBuildCast(LLVMBuilderRef B, LLVMOpcode Op, LLVMValueRef Val,
2831 LLVMTypeRef DestTy, const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002832LLVMValueRef LLVMBuildPointerCast(LLVMBuilderRef, LLVMValueRef Val,
2833 LLVMTypeRef DestTy, const char *Name);
Duncan Sands9d786d72009-11-23 10:49:03 +00002834LLVMValueRef LLVMBuildIntCast(LLVMBuilderRef, LLVMValueRef Val, /*Signed cast!*/
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002835 LLVMTypeRef DestTy, const char *Name);
2836LLVMValueRef LLVMBuildFPCast(LLVMBuilderRef, LLVMValueRef Val,
2837 LLVMTypeRef DestTy, const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002838
2839/* Comparisons */
2840LLVMValueRef LLVMBuildICmp(LLVMBuilderRef, LLVMIntPredicate Op,
2841 LLVMValueRef LHS, LLVMValueRef RHS,
2842 const char *Name);
2843LLVMValueRef LLVMBuildFCmp(LLVMBuilderRef, LLVMRealPredicate Op,
2844 LLVMValueRef LHS, LLVMValueRef RHS,
2845 const char *Name);
2846
2847/* Miscellaneous instructions */
2848LLVMValueRef LLVMBuildPhi(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
2849LLVMValueRef LLVMBuildCall(LLVMBuilderRef, LLVMValueRef Fn,
2850 LLVMValueRef *Args, unsigned NumArgs,
2851 const char *Name);
2852LLVMValueRef LLVMBuildSelect(LLVMBuilderRef, LLVMValueRef If,
2853 LLVMValueRef Then, LLVMValueRef Else,
2854 const char *Name);
2855LLVMValueRef LLVMBuildVAArg(LLVMBuilderRef, LLVMValueRef List, LLVMTypeRef Ty,
2856 const char *Name);
2857LLVMValueRef LLVMBuildExtractElement(LLVMBuilderRef, LLVMValueRef VecVal,
2858 LLVMValueRef Index, const char *Name);
2859LLVMValueRef LLVMBuildInsertElement(LLVMBuilderRef, LLVMValueRef VecVal,
2860 LLVMValueRef EltVal, LLVMValueRef Index,
2861 const char *Name);
2862LLVMValueRef LLVMBuildShuffleVector(LLVMBuilderRef, LLVMValueRef V1,
2863 LLVMValueRef V2, LLVMValueRef Mask,
2864 const char *Name);
Dan Gohmand5104a52008-11-03 22:55:43 +00002865LLVMValueRef LLVMBuildExtractValue(LLVMBuilderRef, LLVMValueRef AggVal,
2866 unsigned Index, const char *Name);
2867LLVMValueRef LLVMBuildInsertValue(LLVMBuilderRef, LLVMValueRef AggVal,
2868 LLVMValueRef EltVal, unsigned Index,
2869 const char *Name);
Gordon Henriksen76a03742007-09-18 03:18:57 +00002870
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002871LLVMValueRef LLVMBuildIsNull(LLVMBuilderRef, LLVMValueRef Val,
2872 const char *Name);
2873LLVMValueRef LLVMBuildIsNotNull(LLVMBuilderRef, LLVMValueRef Val,
2874 const char *Name);
2875LLVMValueRef LLVMBuildPtrDiff(LLVMBuilderRef, LLVMValueRef LHS,
2876 LLVMValueRef RHS, const char *Name);
Filip Pizlo0d3f7ec2013-11-20 00:07:49 +00002877LLVMValueRef LLVMBuildFence(LLVMBuilderRef B, LLVMAtomicOrdering ordering,
2878 LLVMBool singleThread, const char *Name);
2879LLVMValueRef LLVMBuildAtomicRMW(LLVMBuilderRef B, LLVMAtomicRMWBinOp op,
NAKAMURA Takumia3a81352013-10-23 17:56:29 +00002880 LLVMValueRef PTR, LLVMValueRef Val,
2881 LLVMAtomicOrdering ordering,
Carlo Kok8c6719b2013-04-23 13:21:19 +00002882 LLVMBool singleThread);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002883
Gregory Szorc34c863a2012-03-21 03:54:29 +00002884/**
2885 * @}
2886 */
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00002887
Gregory Szorc34c863a2012-03-21 03:54:29 +00002888/**
2889 * @defgroup LLVMCCoreModuleProvider Module Providers
2890 *
2891 * @{
2892 */
Gordon Henriksen0a68fe22007-12-12 01:04:30 +00002893
Gregory Szorc34c863a2012-03-21 03:54:29 +00002894/**
2895 * Changes the type of M so it can be passed to FunctionPassManagers and the
Jeffrey Yasskin091217b2010-01-27 20:34:15 +00002896 * JIT. They take ModuleProviders for historical reasons.
Gordon Henriksen0a68fe22007-12-12 01:04:30 +00002897 */
2898LLVMModuleProviderRef
2899LLVMCreateModuleProviderForExistingModule(LLVMModuleRef M);
2900
Gregory Szorc34c863a2012-03-21 03:54:29 +00002901/**
2902 * Destroys the module M.
Gordon Henriksen0a68fe22007-12-12 01:04:30 +00002903 */
Jeffrey Yasskin091217b2010-01-27 20:34:15 +00002904void LLVMDisposeModuleProvider(LLVMModuleProviderRef M);
Gordon Henriksen0a68fe22007-12-12 01:04:30 +00002905
Gregory Szorc34c863a2012-03-21 03:54:29 +00002906/**
2907 * @}
2908 */
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00002909
Gregory Szorc34c863a2012-03-21 03:54:29 +00002910/**
2911 * @defgroup LLVMCCoreMemoryBuffers Memory Buffers
2912 *
2913 * @{
2914 */
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00002915
Chris Lattner25963c62010-01-09 22:27:07 +00002916LLVMBool LLVMCreateMemoryBufferWithContentsOfFile(const char *Path,
2917 LLVMMemoryBufferRef *OutMemBuf,
2918 char **OutMessage);
2919LLVMBool LLVMCreateMemoryBufferWithSTDIN(LLVMMemoryBufferRef *OutMemBuf,
2920 char **OutMessage);
Bill Wendling526276a2013-02-14 19:11:28 +00002921LLVMMemoryBufferRef LLVMCreateMemoryBufferWithMemoryRange(const char *InputData,
2922 size_t InputDataLength,
2923 const char *BufferName,
Bill Wendlingc9baa962013-02-14 19:39:14 +00002924 LLVMBool RequiresNullTerminator);
Bill Wendling526276a2013-02-14 19:11:28 +00002925LLVMMemoryBufferRef LLVMCreateMemoryBufferWithMemoryRangeCopy(const char *InputData,
2926 size_t InputDataLength,
2927 const char *BufferName);
Tom Stellard62c03202013-04-18 19:50:53 +00002928const char *LLVMGetBufferStart(LLVMMemoryBufferRef MemBuf);
Tom Stellardb7fb7242013-04-16 23:12:51 +00002929size_t LLVMGetBufferSize(LLVMMemoryBufferRef MemBuf);
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00002930void LLVMDisposeMemoryBuffer(LLVMMemoryBufferRef MemBuf);
2931
Gregory Szorc34c863a2012-03-21 03:54:29 +00002932/**
2933 * @}
2934 */
2935
2936/**
2937 * @defgroup LLVMCCorePassRegistry Pass Registry
2938 *
2939 * @{
2940 */
Owen Anderson4698c5d2010-10-07 17:55:47 +00002941
2942/** Return the global pass registry, for use with initialization functions.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002943 @see llvm::PassRegistry::getPassRegistry */
Owen Anderson4698c5d2010-10-07 17:55:47 +00002944LLVMPassRegistryRef LLVMGetGlobalPassRegistry(void);
Gordon Henriksen878114b2008-03-16 04:20:44 +00002945
Gregory Szorc34c863a2012-03-21 03:54:29 +00002946/**
2947 * @}
2948 */
2949
2950/**
2951 * @defgroup LLVMCCorePassManagers Pass Managers
2952 *
2953 * @{
2954 */
Gordon Henriksen878114b2008-03-16 04:20:44 +00002955
2956/** Constructs a new whole-module pass pipeline. This type of pipeline is
2957 suitable for link-time optimization and whole-module transformations.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002958 @see llvm::PassManager::PassManager */
Gordon Henriksena735a9c2008-05-04 12:55:34 +00002959LLVMPassManagerRef LLVMCreatePassManager(void);
Gordon Henriksen878114b2008-03-16 04:20:44 +00002960
2961/** Constructs a new function-by-function pass pipeline over the module
2962 provider. It does not take ownership of the module provider. This type of
2963 pipeline is suitable for code generation and JIT compilation tasks.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002964 @see llvm::FunctionPassManager::FunctionPassManager */
Erick Tryzelaarad0e0cb2010-03-02 23:58:54 +00002965LLVMPassManagerRef LLVMCreateFunctionPassManagerForModule(LLVMModuleRef M);
2966
2967/** Deprecated: Use LLVMCreateFunctionPassManagerForModule instead. */
Gordon Henriksen878114b2008-03-16 04:20:44 +00002968LLVMPassManagerRef LLVMCreateFunctionPassManager(LLVMModuleProviderRef MP);
2969
2970/** Initializes, executes on the provided module, and finalizes all of the
2971 passes scheduled in the pass manager. Returns 1 if any of the passes
Gregory Szorc34c863a2012-03-21 03:54:29 +00002972 modified the module, 0 otherwise.
2973 @see llvm::PassManager::run(Module&) */
Chris Lattner25963c62010-01-09 22:27:07 +00002974LLVMBool LLVMRunPassManager(LLVMPassManagerRef PM, LLVMModuleRef M);
Gordon Henriksen878114b2008-03-16 04:20:44 +00002975
2976/** Initializes all of the function passes scheduled in the function pass
2977 manager. Returns 1 if any of the passes modified the module, 0 otherwise.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002978 @see llvm::FunctionPassManager::doInitialization */
Chris Lattner25963c62010-01-09 22:27:07 +00002979LLVMBool LLVMInitializeFunctionPassManager(LLVMPassManagerRef FPM);
Gordon Henriksen878114b2008-03-16 04:20:44 +00002980
2981/** Executes all of the function passes scheduled in the function pass manager
2982 on the provided function. Returns 1 if any of the passes modified the
2983 function, false otherwise.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002984 @see llvm::FunctionPassManager::run(Function&) */
Chris Lattner25963c62010-01-09 22:27:07 +00002985LLVMBool LLVMRunFunctionPassManager(LLVMPassManagerRef FPM, LLVMValueRef F);
Gordon Henriksen878114b2008-03-16 04:20:44 +00002986
2987/** Finalizes all of the function passes scheduled in in the function pass
2988 manager. Returns 1 if any of the passes modified the module, 0 otherwise.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002989 @see llvm::FunctionPassManager::doFinalization */
Chris Lattner25963c62010-01-09 22:27:07 +00002990LLVMBool LLVMFinalizeFunctionPassManager(LLVMPassManagerRef FPM);
Gordon Henriksen878114b2008-03-16 04:20:44 +00002991
2992/** Frees the memory of a pass pipeline. For function pipelines, does not free
2993 the module provider.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002994 @see llvm::PassManagerBase::~PassManagerBase. */
Gordon Henriksen878114b2008-03-16 04:20:44 +00002995void LLVMDisposePassManager(LLVMPassManagerRef PM);
2996
Gregory Szorc34c863a2012-03-21 03:54:29 +00002997/**
2998 * @}
2999 */
3000
3001/**
Duncan Sands1cba0a82013-02-17 16:35:51 +00003002 * @defgroup LLVMCCoreThreading Threading
3003 *
3004 * Handle the structures needed to make LLVM safe for multithreading.
3005 *
3006 * @{
3007 */
3008
Chandler Carruth39cd2162014-06-27 15:13:01 +00003009/** Deprecated: Multi-threading can only be enabled/disabled with the compile
3010 time define LLVM_ENABLE_THREADS. This function always returns
3011 LLVMIsMultithreaded(). */
Benjamin Kramer325ec892013-10-23 16:57:34 +00003012LLVMBool LLVMStartMultithreaded(void);
Duncan Sands1cba0a82013-02-17 16:35:51 +00003013
Chandler Carruth39cd2162014-06-27 15:13:01 +00003014/** Deprecated: Multi-threading can only be enabled/disabled with the compile
3015 time define LLVM_ENABLE_THREADS. */
Benjamin Kramer325ec892013-10-23 16:57:34 +00003016void LLVMStopMultithreaded(void);
Duncan Sands1cba0a82013-02-17 16:35:51 +00003017
3018/** Check whether LLVM is executing in thread-safe mode or not.
3019 @see llvm::llvm_is_multithreaded */
Benjamin Kramer325ec892013-10-23 16:57:34 +00003020LLVMBool LLVMIsMultithreaded(void);
Duncan Sands1cba0a82013-02-17 16:35:51 +00003021
3022/**
3023 * @}
3024 */
3025
3026/**
Gregory Szorc34c863a2012-03-21 03:54:29 +00003027 * @}
3028 */
3029
3030/**
3031 * @}
3032 */
Gordon Henriksen878114b2008-03-16 04:20:44 +00003033
Gordon Henriksen76a03742007-09-18 03:18:57 +00003034#ifdef __cplusplus
3035}
Eugene Zelenkoffec81c2015-11-04 22:32:32 +00003036#endif
Gordon Henriksen7330acd2007-10-05 23:59:36 +00003037
Eugene Zelenkoffec81c2015-11-04 22:32:32 +00003038#endif /* LLVM_C_CORE_H */