blob: 519363271ad57029c082fdfcda268aaaa759ef50 [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,
255 LLVMTerminatePad = 64,
256 LLVMCleanupPad = 65,
257 LLVMCatchEndPad = 66,
258 LLVMCleanupEndPad = 67
Chris Lattner40cf28d2009-10-12 04:01:02 +0000259} LLVMOpcode;
260
261typedef enum {
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000262 LLVMVoidTypeKind, /**< type with no size */
Dan Gohman518cda42011-12-17 00:04:22 +0000263 LLVMHalfTypeKind, /**< 16 bit floating point type */
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000264 LLVMFloatTypeKind, /**< 32 bit floating point type */
265 LLVMDoubleTypeKind, /**< 64 bit floating point type */
266 LLVMX86_FP80TypeKind, /**< 80 bit floating point type (X87) */
267 LLVMFP128TypeKind, /**< 128 bit floating point type (112-bit mantissa)*/
268 LLVMPPC_FP128TypeKind, /**< 128 bit floating point type (two 64-bits) */
269 LLVMLabelTypeKind, /**< Labels */
270 LLVMIntegerTypeKind, /**< Arbitrary bit width integers */
271 LLVMFunctionTypeKind, /**< Functions */
272 LLVMStructTypeKind, /**< Structures */
273 LLVMArrayTypeKind, /**< Arrays */
274 LLVMPointerTypeKind, /**< Pointers */
Chris Lattnerdac44ec2009-07-15 22:00:31 +0000275 LLVMVectorTypeKind, /**< SIMD 'packed' format, or other vector type */
Dale Johannesenbaa5d042010-09-10 20:55:01 +0000276 LLVMMetadataTypeKind, /**< Metadata */
David Majnemerb611e3f2015-08-14 05:09:07 +0000277 LLVMX86_MMXTypeKind, /**< X86 MMX */
278 LLVMTokenTypeKind /**< Tokens */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000279} LLVMTypeKind;
280
281typedef enum {
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000282 LLVMExternalLinkage, /**< Externally visible function */
Chris Lattner2dba0f02009-04-13 06:25:37 +0000283 LLVMAvailableExternallyLinkage,
Duncan Sands12da8ce2009-03-07 15:45:40 +0000284 LLVMLinkOnceAnyLinkage, /**< Keep one copy of function when linking (inline)*/
285 LLVMLinkOnceODRLinkage, /**< Same, but only replaced by something
286 equivalent. */
Rafael Espindola716e7402013-11-01 17:09:14 +0000287 LLVMLinkOnceODRAutoHideLinkage, /**< Obsolete */
Duncan Sands12da8ce2009-03-07 15:45:40 +0000288 LLVMWeakAnyLinkage, /**< Keep one copy of function when linking (weak) */
289 LLVMWeakODRLinkage, /**< Same, but only replaced by something
290 equivalent. */
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000291 LLVMAppendingLinkage, /**< Special purpose, only applies to global arrays */
292 LLVMInternalLinkage, /**< Rename collisions when linking (static
293 functions) */
Duncan Sands12da8ce2009-03-07 15:45:40 +0000294 LLVMPrivateLinkage, /**< Like Internal, but omit from symbol table */
Nico Rieck7157bb72014-01-14 15:22:47 +0000295 LLVMDLLImportLinkage, /**< Obsolete */
296 LLVMDLLExportLinkage, /**< Obsolete */
Duncan Sandse2881052009-03-11 08:08:06 +0000297 LLVMExternalWeakLinkage,/**< ExternalWeak linkage description */
Jeffrey Yasskin091217b2010-01-27 20:34:15 +0000298 LLVMGhostLinkage, /**< Obsolete */
Bill Wendling002b1672009-07-20 18:22:52 +0000299 LLVMCommonLinkage, /**< Tentative definitions */
Bill Wendling03bcd6e2010-07-01 21:55:59 +0000300 LLVMLinkerPrivateLinkage, /**< Like Private, but linker removes. */
Bill Wendling34bc34e2012-08-17 18:33:14 +0000301 LLVMLinkerPrivateWeakLinkage /**< Like LinkerPrivate, but is weak. */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000302} LLVMLinkage;
303
304typedef enum {
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000305 LLVMDefaultVisibility, /**< The GV is visible */
306 LLVMHiddenVisibility, /**< The GV is hidden */
307 LLVMProtectedVisibility /**< The GV is protected */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000308} LLVMVisibility;
309
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000310typedef enum {
Reid Kleckner2fae26f2014-03-05 02:34:23 +0000311 LLVMDefaultStorageClass = 0,
312 LLVMDLLImportStorageClass = 1, /**< Function to be imported from DLL. */
313 LLVMDLLExportStorageClass = 2 /**< Function to be accessible from DLL. */
314} LLVMDLLStorageClass;
315
316typedef enum {
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000317 LLVMCCallConv = 0,
318 LLVMFastCallConv = 8,
319 LLVMColdCallConv = 9,
Filip Pizlodfc9b582013-11-09 06:00:03 +0000320 LLVMWebKitJSCallConv = 12,
321 LLVMAnyRegCallConv = 13,
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000322 LLVMX86StdcallCallConv = 64,
323 LLVMX86FastcallCallConv = 65
324} LLVMCallConv;
325
326typedef enum {
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000327 LLVMIntEQ = 32, /**< equal */
328 LLVMIntNE, /**< not equal */
329 LLVMIntUGT, /**< unsigned greater than */
330 LLVMIntUGE, /**< unsigned greater or equal */
331 LLVMIntULT, /**< unsigned less than */
332 LLVMIntULE, /**< unsigned less or equal */
333 LLVMIntSGT, /**< signed greater than */
334 LLVMIntSGE, /**< signed greater or equal */
335 LLVMIntSLT, /**< signed less than */
336 LLVMIntSLE /**< signed less or equal */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000337} LLVMIntPredicate;
338
339typedef enum {
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000340 LLVMRealPredicateFalse, /**< Always false (always folded) */
341 LLVMRealOEQ, /**< True if ordered and equal */
342 LLVMRealOGT, /**< True if ordered and greater than */
343 LLVMRealOGE, /**< True if ordered and greater than or equal */
344 LLVMRealOLT, /**< True if ordered and less than */
345 LLVMRealOLE, /**< True if ordered and less than or equal */
346 LLVMRealONE, /**< True if ordered and operands are unequal */
347 LLVMRealORD, /**< True if ordered (no nans) */
348 LLVMRealUNO, /**< True if unordered: isnan(X) | isnan(Y) */
349 LLVMRealUEQ, /**< True if unordered or equal */
350 LLVMRealUGT, /**< True if unordered or greater than */
351 LLVMRealUGE, /**< True if unordered, greater than, or equal */
352 LLVMRealULT, /**< True if unordered or less than */
353 LLVMRealULE, /**< True if unordered, less than, or equal */
354 LLVMRealUNE, /**< True if unordered or not equal */
355 LLVMRealPredicateTrue /**< Always true (always folded) */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000356} LLVMRealPredicate;
357
Bill Wendlingfae14752011-08-12 20:24:12 +0000358typedef enum {
359 LLVMLandingPadCatch, /**< A catch clause */
360 LLVMLandingPadFilter /**< A filter clause */
361} LLVMLandingPadClauseTy;
362
Hans Wennborg5ff71202013-04-16 08:58:59 +0000363typedef enum {
364 LLVMNotThreadLocal = 0,
365 LLVMGeneralDynamicTLSModel,
366 LLVMLocalDynamicTLSModel,
367 LLVMInitialExecTLSModel,
368 LLVMLocalExecTLSModel
369} LLVMThreadLocalMode;
370
Carlo Kokda0ac722013-04-23 13:45:37 +0000371typedef enum {
Carlo Kok8c6719b2013-04-23 13:21:19 +0000372 LLVMAtomicOrderingNotAtomic = 0, /**< A load or store which is not atomic */
373 LLVMAtomicOrderingUnordered = 1, /**< Lowest level of atomicity, guarantees
374 somewhat sane results, lock free. */
NAKAMURA Takumia3a81352013-10-23 17:56:29 +0000375 LLVMAtomicOrderingMonotonic = 2, /**< guarantees that if you take all the
376 operations affecting a specific address,
Carlo Kok8c6719b2013-04-23 13:21:19 +0000377 a consistent ordering exists */
NAKAMURA Takumia3a81352013-10-23 17:56:29 +0000378 LLVMAtomicOrderingAcquire = 4, /**< Acquire provides a barrier of the sort
379 necessary to acquire a lock to access other
Carlo Kok8c6719b2013-04-23 13:21:19 +0000380 memory with normal loads and stores. */
NAKAMURA Takumia3a81352013-10-23 17:56:29 +0000381 LLVMAtomicOrderingRelease = 5, /**< Release is similar to Acquire, but with
382 a barrier of the sort necessary to release
Carlo Kok8c6719b2013-04-23 13:21:19 +0000383 a lock. */
NAKAMURA Takumia3a81352013-10-23 17:56:29 +0000384 LLVMAtomicOrderingAcquireRelease = 6, /**< provides both an Acquire and a
385 Release barrier (for fences and
Carlo Kok8c6719b2013-04-23 13:21:19 +0000386 operations which both read and write
387 memory). */
NAKAMURA Takumia3a81352013-10-23 17:56:29 +0000388 LLVMAtomicOrderingSequentiallyConsistent = 7 /**< provides Acquire semantics
389 for loads and Release
390 semantics for stores.
391 Additionally, it guarantees
392 that a total ordering exists
393 between all
394 SequentiallyConsistent
Carlo Kok8c6719b2013-04-23 13:21:19 +0000395 operations. */
Carlo Kokda0ac722013-04-23 13:45:37 +0000396} LLVMAtomicOrdering;
Carlo Kok8c6719b2013-04-23 13:21:19 +0000397
Carlo Kokda0ac722013-04-23 13:45:37 +0000398typedef enum {
Carlo Kok8c6719b2013-04-23 13:21:19 +0000399 LLVMAtomicRMWBinOpXchg, /**< Set the new value and return the one old */
400 LLVMAtomicRMWBinOpAdd, /**< Add a value and return the old one */
401 LLVMAtomicRMWBinOpSub, /**< Subtract a value and return the old one */
402 LLVMAtomicRMWBinOpAnd, /**< And a value and return the old one */
403 LLVMAtomicRMWBinOpNand, /**< Not-And a value and return the old one */
404 LLVMAtomicRMWBinOpOr, /**< OR a value and return the old one */
405 LLVMAtomicRMWBinOpXor, /**< Xor a value and return the old one */
406 LLVMAtomicRMWBinOpMax, /**< Sets the value if it's greater than the
NAKAMURA Takumia3a81352013-10-23 17:56:29 +0000407 original using a signed comparison and return
Carlo Kok8c6719b2013-04-23 13:21:19 +0000408 the old one */
409 LLVMAtomicRMWBinOpMin, /**< Sets the value if it's Smaller than the
NAKAMURA Takumia3a81352013-10-23 17:56:29 +0000410 original using a signed comparison and return
Carlo Kok8c6719b2013-04-23 13:21:19 +0000411 the old one */
412 LLVMAtomicRMWBinOpUMax, /**< Sets the value if it's greater than the
NAKAMURA Takumia3a81352013-10-23 17:56:29 +0000413 original using an unsigned comparison and return
Carlo Kok8c6719b2013-04-23 13:21:19 +0000414 the old one */
415 LLVMAtomicRMWBinOpUMin /**< Sets the value if it's greater than the
NAKAMURA Takumia3a81352013-10-23 17:56:29 +0000416 original using an unsigned comparison and return
Carlo Kok8c6719b2013-04-23 13:21:19 +0000417 the old one */
Carlo Kokda0ac722013-04-23 13:45:37 +0000418} LLVMAtomicRMWBinOp;
Carlo Kok8c6719b2013-04-23 13:21:19 +0000419
Tom Stellard1580dc72014-04-16 17:45:04 +0000420typedef enum {
421 LLVMDSError,
422 LLVMDSWarning,
423 LLVMDSRemark,
424 LLVMDSNote
425} LLVMDiagnosticSeverity;
426
Gregory Szorc34c863a2012-03-21 03:54:29 +0000427/**
428 * @}
429 */
430
Nick Lewycky0db26542011-05-15 07:20:34 +0000431void LLVMInitializeCore(LLVMPassRegistryRef R);
432
Duncan Sands1cba0a82013-02-17 16:35:51 +0000433/** Deallocate and destroy all ManagedStatic variables.
434 @see llvm::llvm_shutdown
435 @see ManagedStatic */
Benjamin Kramer325ec892013-10-23 16:57:34 +0000436void LLVMShutdown(void);
Duncan Sands1cba0a82013-02-17 16:35:51 +0000437
Gordon Henriksen34eb6d82007-12-19 22:30:40 +0000438/*===-- Error handling ----------------------------------------------------===*/
439
Filip Pizlo3fdbaff2013-05-22 02:46:43 +0000440char *LLVMCreateMessage(const char *Message);
Gordon Henriksen34eb6d82007-12-19 22:30:40 +0000441void LLVMDisposeMessage(char *Message);
442
Filip Pizloa535b142013-10-17 01:38:28 +0000443typedef void (*LLVMFatalErrorHandler)(const char *Reason);
444
445/**
446 * Install a fatal error handler. By default, if LLVM detects a fatal error, it
447 * will call exit(1). This may not be appropriate in many contexts. For example,
448 * doing exit(1) will bypass many crash reporting/tracing system tools. This
449 * function allows you to install a callback that will be invoked prior to the
450 * call to exit(1).
451 */
452void LLVMInstallFatalErrorHandler(LLVMFatalErrorHandler Handler);
453
454/**
455 * Reset the fatal error handler. This resets LLVM's fatal error handling
456 * behavior to the default.
457 */
458void LLVMResetFatalErrorHandler(void);
Gordon Henriksen34eb6d82007-12-19 22:30:40 +0000459
Gregory Szorc34c863a2012-03-21 03:54:29 +0000460/**
Filip Pizloc10ca902013-11-04 02:22:25 +0000461 * Enable LLVM's built-in stack trace code. This intercepts the OS's crash
462 * signals and prints which component of LLVM you were in at the time if the
463 * crash.
Filip Pizlo9f50ccd2013-11-03 00:29:47 +0000464 */
Filip Pizloc10ca902013-11-04 02:22:25 +0000465void LLVMEnablePrettyStackTrace(void);
Filip Pizlo9f50ccd2013-11-03 00:29:47 +0000466
467/**
Gregory Szorc34c863a2012-03-21 03:54:29 +0000468 * @defgroup LLVMCCoreContext Contexts
469 *
470 * Contexts are execution states for the core LLVM IR system.
471 *
472 * Most types are tied to a context instance. Multiple contexts can
473 * exist simultaneously. A single context is not thread safe. However,
474 * different contexts can execute on different threads simultaneously.
475 *
476 * @{
477 */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000478
Tom Stellard1580dc72014-04-16 17:45:04 +0000479typedef void (*LLVMDiagnosticHandler)(LLVMDiagnosticInfoRef, void *);
Juergen Ributzka34390c72014-05-16 02:33:15 +0000480typedef void (*LLVMYieldCallback)(LLVMContextRef, void *);
Tom Stellard1580dc72014-04-16 17:45:04 +0000481
Gregory Szorc34c863a2012-03-21 03:54:29 +0000482/**
483 * Create a new context.
484 *
485 * Every call to this function should be paired with a call to
486 * LLVMContextDispose() or the context will leak memory.
487 */
Erick Tryzelaarf34cb0c2009-08-30 23:38:06 +0000488LLVMContextRef LLVMContextCreate(void);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000489
490/**
491 * Obtain the global context instance.
492 */
Erick Tryzelaarf34cb0c2009-08-30 23:38:06 +0000493LLVMContextRef LLVMGetGlobalContext(void);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000494
495/**
Tom Stellard1580dc72014-04-16 17:45:04 +0000496 * Set the diagnostic handler for this context.
497 */
498void LLVMContextSetDiagnosticHandler(LLVMContextRef C,
499 LLVMDiagnosticHandler Handler,
500 void *DiagnosticContext);
501
502/**
Juergen Ributzka34390c72014-05-16 02:33:15 +0000503 * Set the yield callback function for this context.
504 *
505 * @see LLVMContext::setYieldCallback()
506 */
507void LLVMContextSetYieldCallback(LLVMContextRef C, LLVMYieldCallback Callback,
508 void *OpaqueHandle);
509
510/**
Gregory Szorc34c863a2012-03-21 03:54:29 +0000511 * Destroy a context instance.
512 *
513 * This should be called for every call to LLVMContextCreate() or memory
514 * will be leaked.
515 */
Owen Anderson6773d382009-07-01 16:58:40 +0000516void LLVMContextDispose(LLVMContextRef C);
517
Tom Stellard1580dc72014-04-16 17:45:04 +0000518/**
519 * Return a string representation of the DiagnosticInfo. Use
520 * LLVMDisposeMessage to free the string.
521 *
522 * @see DiagnosticInfo::print()
523 */
524char *LLVMGetDiagInfoDescription(LLVMDiagnosticInfoRef DI);
525
526/**
527 * Return an enum LLVMDiagnosticSeverity.
528 *
529 * @see DiagnosticInfo::getSeverity()
530 */
531LLVMDiagnosticSeverity LLVMGetDiagInfoSeverity(LLVMDiagnosticInfoRef DI);
532
Erick Tryzelaard8531fa2010-02-28 09:45:59 +0000533unsigned LLVMGetMDKindIDInContext(LLVMContextRef C, const char* Name,
534 unsigned SLen);
535unsigned LLVMGetMDKindID(const char* Name, unsigned SLen);
536
Gregory Szorc34c863a2012-03-21 03:54:29 +0000537/**
538 * @}
539 */
540
Gregory Szorc52d26602012-03-21 07:28:27 +0000541/**
542 * @defgroup LLVMCCoreModule Modules
Gregory Szorc34c863a2012-03-21 03:54:29 +0000543 *
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +0000544 * Modules represent the top-level structure in an LLVM program. An LLVM
Gregory Szorc34c863a2012-03-21 03:54:29 +0000545 * module is effectively a translation unit or a collection of
546 * translation units merged together.
547 *
548 * @{
549 */
550
Gregory Szorc34c863a2012-03-21 03:54:29 +0000551/**
552 * Create a new, empty module in the global context.
553 *
554 * This is equivalent to calling LLVMModuleCreateWithNameInContext with
555 * LLVMGetGlobalContext() as the context parameter.
556 *
557 * Every invocation should be paired with LLVMDisposeModule() or memory
558 * will be leaked.
559 */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000560LLVMModuleRef LLVMModuleCreateWithName(const char *ModuleID);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000561
562/**
563 * Create a new, empty module in a specific context.
564 *
565 * Every invocation should be paired with LLVMDisposeModule() or memory
566 * will be leaked.
567 */
Owen Anderson31d44e42009-07-02 07:17:57 +0000568LLVMModuleRef LLVMModuleCreateWithNameInContext(const char *ModuleID,
569 LLVMContextRef C);
Tom Stellard0a4e9a32014-10-01 17:14:57 +0000570/**
571 * Return an exact copy of the specified module.
572 */
573LLVMModuleRef LLVMCloneModule(LLVMModuleRef M);
Gordon Henriksena49d4352008-03-07 19:13:06 +0000574
Gregory Szorc34c863a2012-03-21 03:54:29 +0000575/**
576 * Destroy a module instance.
577 *
578 * This must be called for every created module or memory will be
579 * leaked.
580 */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000581void LLVMDisposeModule(LLVMModuleRef M);
582
Gregory Szorc34c863a2012-03-21 03:54:29 +0000583/**
584 * Obtain the data layout for a module.
585 *
586 * @see Module::getDataLayout()
587 */
Gordon Henriksen05568bb2007-12-27 20:13:47 +0000588const char *LLVMGetDataLayout(LLVMModuleRef M);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000589
590/**
591 * Set the data layout for a module.
592 *
593 * @see Module::setDataLayout()
594 */
Gordon Henriksen05568bb2007-12-27 20:13:47 +0000595void LLVMSetDataLayout(LLVMModuleRef M, const char *Triple);
596
Gregory Szorc34c863a2012-03-21 03:54:29 +0000597/**
598 * Obtain the target triple for a module.
599 *
600 * @see Module::getTargetTriple()
601 */
Gordon Henriksen05568bb2007-12-27 20:13:47 +0000602const char *LLVMGetTarget(LLVMModuleRef M);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000603
604/**
605 * Set the target triple for a module.
606 *
607 * @see Module::setTargetTriple()
608 */
Gordon Henriksen05568bb2007-12-27 20:13:47 +0000609void LLVMSetTarget(LLVMModuleRef M, const char *Triple);
610
Gregory Szorc34c863a2012-03-21 03:54:29 +0000611/**
612 * Dump a representation of a module to stderr.
613 *
614 * @see Module::dump()
615 */
Gordon Henriksen6c6075e2008-03-14 23:58:56 +0000616void LLVMDumpModule(LLVMModuleRef M);
617
Gregory Szorc34c863a2012-03-21 03:54:29 +0000618/**
Hans Wennborgb7ef2fe2012-05-09 16:54:17 +0000619 * Print a representation of a module to a file. The ErrorMessage needs to be
620 * disposed with LLVMDisposeMessage. Returns 0 on success, 1 otherwise.
621 *
622 * @see Module::print()
623 */
624LLVMBool LLVMPrintModuleToFile(LLVMModuleRef M, const char *Filename,
625 char **ErrorMessage);
626
627/**
Anders Waldenborg84355db2013-10-16 18:00:54 +0000628 * Return a string representation of the module. Use
629 * LLVMDisposeMessage to free the string.
630 *
631 * @see Module::print()
632 */
633char *LLVMPrintModuleToString(LLVMModuleRef M);
634
635/**
Gregory Szorc34c863a2012-03-21 03:54:29 +0000636 * Set inline assembly for a module.
637 *
638 * @see Module::setModuleInlineAsm()
639 */
Chris Lattner26941452010-04-10 17:52:58 +0000640void LLVMSetModuleInlineAsm(LLVMModuleRef M, const char *Asm);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000641
Gregory Szorc34c863a2012-03-21 03:54:29 +0000642/**
643 * Obtain the context to which this module is associated.
644 *
645 * @see Module::getContext()
646 */
Chris Lattnera7e04b02010-11-28 20:03:44 +0000647LLVMContextRef LLVMGetModuleContext(LLVMModuleRef M);
648
Gregory Szorc34c863a2012-03-21 03:54:29 +0000649/**
650 * Obtain a Type from a module by its registered name.
651 */
652LLVMTypeRef LLVMGetTypeByName(LLVMModuleRef M, const char *Name);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000653
Gregory Szorc34c863a2012-03-21 03:54:29 +0000654/**
655 * Obtain the number of operands for named metadata in a module.
656 *
657 * @see llvm::Module::getNamedMetadata()
658 */
659unsigned LLVMGetNamedMetadataNumOperands(LLVMModuleRef M, const char* name);
660
661/**
662 * Obtain the named metadata operands for a module.
663 *
664 * The passed LLVMValueRef pointer should refer to an array of
665 * LLVMValueRef at least LLVMGetNamedMetadataNumOperands long. This
666 * array will be populated with the LLVMValueRef instances. Each
667 * instance corresponds to a llvm::MDNode.
668 *
669 * @see llvm::Module::getNamedMetadata()
670 * @see llvm::MDNode::getOperand()
671 */
672void LLVMGetNamedMetadataOperands(LLVMModuleRef M, const char* name, LLVMValueRef *Dest);
673
674/**
675 * Add an operand to named metadata.
676 *
677 * @see llvm::Module::getNamedMetadata()
678 * @see llvm::MDNode::addOperand()
679 */
680void LLVMAddNamedMetadataOperand(LLVMModuleRef M, const char* name,
681 LLVMValueRef Val);
682
Gregory Szorc52d26602012-03-21 07:28:27 +0000683/**
684 * Add a function to a module under a specified name.
685 *
686 * @see llvm::Function::Create()
687 */
688LLVMValueRef LLVMAddFunction(LLVMModuleRef M, const char *Name,
689 LLVMTypeRef FunctionTy);
690
691/**
692 * Obtain a Function value from a Module by its name.
693 *
694 * The returned value corresponds to a llvm::Function value.
695 *
696 * @see llvm::Module::getFunction()
697 */
698LLVMValueRef LLVMGetNamedFunction(LLVMModuleRef M, const char *Name);
699
700/**
701 * Obtain an iterator to the first Function in a Module.
702 *
703 * @see llvm::Module::begin()
704 */
705LLVMValueRef LLVMGetFirstFunction(LLVMModuleRef M);
706
707/**
708 * Obtain an iterator to the last Function in a Module.
709 *
710 * @see llvm::Module::end()
711 */
712LLVMValueRef LLVMGetLastFunction(LLVMModuleRef M);
713
714/**
715 * Advance a Function iterator to the next Function.
716 *
717 * Returns NULL if the iterator was already at the end and there are no more
718 * functions.
719 */
720LLVMValueRef LLVMGetNextFunction(LLVMValueRef Fn);
721
722/**
723 * Decrement a Function iterator to the previous Function.
724 *
725 * Returns NULL if the iterator was already at the beginning and there are
726 * no previous functions.
727 */
728LLVMValueRef LLVMGetPreviousFunction(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000729
730/**
731 * @}
732 */
733
734/**
735 * @defgroup LLVMCCoreType Types
736 *
737 * Types represent the type of a value.
738 *
739 * Types are associated with a context instance. The context internally
740 * deduplicates types so there is only 1 instance of a specific type
741 * alive at a time. In other words, a unique type is shared among all
742 * consumers within a context.
743 *
744 * A Type in the C API corresponds to llvm::Type.
745 *
746 * Types have the following hierarchy:
747 *
Gordon Henriksen76a03742007-09-18 03:18:57 +0000748 * types:
749 * integer type
750 * real type
751 * function type
752 * sequence types:
753 * array type
754 * pointer type
755 * vector type
756 * void type
757 * label type
758 * opaque type
Gregory Szorc34c863a2012-03-21 03:54:29 +0000759 *
760 * @{
Gordon Henriksen76a03742007-09-18 03:18:57 +0000761 */
762
Gregory Szorc34c863a2012-03-21 03:54:29 +0000763/**
764 * Obtain the enumerated type of a Type instance.
765 *
766 * @see llvm::Type:getTypeID()
767 */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000768LLVMTypeKind LLVMGetTypeKind(LLVMTypeRef Ty);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000769
770/**
771 * Whether the type has a known size.
772 *
773 * Things that don't have a size are abstract types, labels, and void.a
774 *
775 * @see llvm::Type::isSized()
776 */
Torok Edwin1cd9ade2011-10-06 12:13:28 +0000777LLVMBool LLVMTypeIsSized(LLVMTypeRef Ty);
Gordon Henriksena49d4352008-03-07 19:13:06 +0000778
Gregory Szorc34c863a2012-03-21 03:54:29 +0000779/**
780 * Obtain the context to which this type instance is associated.
781 *
782 * @see llvm::Type::getContext()
783 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000784LLVMContextRef LLVMGetTypeContext(LLVMTypeRef Ty);
785
Gregory Szorc34c863a2012-03-21 03:54:29 +0000786/**
Anders Waldenborgb822cff2013-10-16 21:30:25 +0000787 * Dump a representation of a type to stderr.
788 *
789 * @see llvm::Type::dump()
790 */
791void LLVMDumpType(LLVMTypeRef Val);
792
793/**
Anders Waldenborg47b3bd32013-10-22 06:58:34 +0000794 * Return a string representation of the type. Use
795 * LLVMDisposeMessage to free the string.
796 *
797 * @see llvm::Type::print()
798 */
799char *LLVMPrintTypeToString(LLVMTypeRef Val);
800
801/**
Gregory Szorc34c863a2012-03-21 03:54:29 +0000802 * @defgroup LLVMCCoreTypeInt Integer Types
803 *
804 * Functions in this section operate on integer types.
805 *
806 * @{
807 */
808
809/**
810 * Obtain an integer type from a context with specified bit width.
811 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000812LLVMTypeRef LLVMInt1TypeInContext(LLVMContextRef C);
813LLVMTypeRef LLVMInt8TypeInContext(LLVMContextRef C);
814LLVMTypeRef LLVMInt16TypeInContext(LLVMContextRef C);
815LLVMTypeRef LLVMInt32TypeInContext(LLVMContextRef C);
816LLVMTypeRef LLVMInt64TypeInContext(LLVMContextRef C);
Eugene Zelenkoffec81c2015-11-04 22:32:32 +0000817LLVMTypeRef LLVMInt128TypeInContext(LLVMContextRef C);
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000818LLVMTypeRef LLVMIntTypeInContext(LLVMContextRef C, unsigned NumBits);
819
Gregory Szorc34c863a2012-03-21 03:54:29 +0000820/**
821 * Obtain an integer type from the global context with a specified bit
822 * width.
823 */
Gordon Henriksena735a9c2008-05-04 12:55:34 +0000824LLVMTypeRef LLVMInt1Type(void);
825LLVMTypeRef LLVMInt8Type(void);
826LLVMTypeRef LLVMInt16Type(void);
827LLVMTypeRef LLVMInt32Type(void);
828LLVMTypeRef LLVMInt64Type(void);
Eugene Zelenkoffec81c2015-11-04 22:32:32 +0000829LLVMTypeRef LLVMInt128Type(void);
Gordon Henriksened7beaa2007-10-06 16:05:20 +0000830LLVMTypeRef LLVMIntType(unsigned NumBits);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000831unsigned LLVMGetIntTypeWidth(LLVMTypeRef IntegerTy);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000832
Gregory Szorc34c863a2012-03-21 03:54:29 +0000833/**
834 * @}
835 */
836
837/**
838 * @defgroup LLVMCCoreTypeFloat Floating Point Types
839 *
840 * @{
841 */
842
843/**
844 * Obtain a 16-bit floating point type from a context.
845 */
Dan Gohman518cda42011-12-17 00:04:22 +0000846LLVMTypeRef LLVMHalfTypeInContext(LLVMContextRef C);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000847
848/**
849 * Obtain a 32-bit floating point type from a context.
850 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000851LLVMTypeRef LLVMFloatTypeInContext(LLVMContextRef C);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000852
853/**
854 * Obtain a 64-bit floating point type from a context.
855 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000856LLVMTypeRef LLVMDoubleTypeInContext(LLVMContextRef C);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000857
858/**
859 * Obtain a 80-bit floating point type (X87) from a context.
860 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000861LLVMTypeRef LLVMX86FP80TypeInContext(LLVMContextRef C);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000862
863/**
864 * Obtain a 128-bit floating point type (112-bit mantissa) from a
865 * context.
866 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000867LLVMTypeRef LLVMFP128TypeInContext(LLVMContextRef C);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000868
869/**
870 * Obtain a 128-bit floating point type (two 64-bits) from a context.
871 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000872LLVMTypeRef LLVMPPCFP128TypeInContext(LLVMContextRef C);
873
Gregory Szorc34c863a2012-03-21 03:54:29 +0000874/**
875 * Obtain a floating point type from the global context.
876 *
877 * These map to the functions in this group of the same name.
878 */
Dan Gohman518cda42011-12-17 00:04:22 +0000879LLVMTypeRef LLVMHalfType(void);
Gordon Henriksena735a9c2008-05-04 12:55:34 +0000880LLVMTypeRef LLVMFloatType(void);
881LLVMTypeRef LLVMDoubleType(void);
882LLVMTypeRef LLVMX86FP80Type(void);
883LLVMTypeRef LLVMFP128Type(void);
884LLVMTypeRef LLVMPPCFP128Type(void);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000885
Gregory Szorc34c863a2012-03-21 03:54:29 +0000886/**
887 * @}
888 */
889
890/**
891 * @defgroup LLVMCCoreTypeFunction Function Types
892 *
893 * @{
894 */
895
896/**
897 * Obtain a function type consisting of a specified signature.
898 *
899 * The function is defined as a tuple of a return Type, a list of
900 * parameter types, and whether the function is variadic.
901 */
Gordon Henriksened7beaa2007-10-06 16:05:20 +0000902LLVMTypeRef LLVMFunctionType(LLVMTypeRef ReturnType,
903 LLVMTypeRef *ParamTypes, unsigned ParamCount,
Chris Lattner25963c62010-01-09 22:27:07 +0000904 LLVMBool IsVarArg);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000905
906/**
907 * Returns whether a function type is variadic.
908 */
Chris Lattner25963c62010-01-09 22:27:07 +0000909LLVMBool LLVMIsFunctionVarArg(LLVMTypeRef FunctionTy);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000910
911/**
912 * Obtain the Type this function Type returns.
913 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000914LLVMTypeRef LLVMGetReturnType(LLVMTypeRef FunctionTy);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000915
916/**
917 * Obtain the number of parameters this function accepts.
918 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000919unsigned LLVMCountParamTypes(LLVMTypeRef FunctionTy);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000920
921/**
922 * Obtain the types of a function's parameters.
923 *
924 * The Dest parameter should point to a pre-allocated array of
925 * LLVMTypeRef at least LLVMCountParamTypes() large. On return, the
926 * first LLVMCountParamTypes() entries in the array will be populated
927 * with LLVMTypeRef instances.
928 *
929 * @param FunctionTy The function type to operate on.
930 * @param Dest Memory address of an array to be filled with result.
931 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000932void LLVMGetParamTypes(LLVMTypeRef FunctionTy, LLVMTypeRef *Dest);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000933
Gregory Szorc34c863a2012-03-21 03:54:29 +0000934/**
935 * @}
936 */
937
938/**
939 * @defgroup LLVMCCoreTypeStruct Structure Types
940 *
941 * These functions relate to LLVMTypeRef instances.
942 *
943 * @see llvm::StructType
944 *
945 * @{
946 */
947
948/**
949 * Create a new structure type in a context.
950 *
951 * A structure is specified by a list of inner elements/types and
952 * whether these can be packed together.
953 *
954 * @see llvm::StructType::create()
955 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000956LLVMTypeRef LLVMStructTypeInContext(LLVMContextRef C, LLVMTypeRef *ElementTypes,
Chris Lattner25963c62010-01-09 22:27:07 +0000957 unsigned ElementCount, LLVMBool Packed);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000958
959/**
960 * Create a new structure type in the global context.
961 *
962 * @see llvm::StructType::create()
963 */
Gordon Henriksened7beaa2007-10-06 16:05:20 +0000964LLVMTypeRef LLVMStructType(LLVMTypeRef *ElementTypes, unsigned ElementCount,
Chris Lattner25963c62010-01-09 22:27:07 +0000965 LLVMBool Packed);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000966
967/**
968 * Create an empty structure in a context having a specified name.
969 *
970 * @see llvm::StructType::create()
971 */
Chris Lattnere71ccde2011-07-14 05:53:17 +0000972LLVMTypeRef LLVMStructCreateNamed(LLVMContextRef C, const char *Name);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000973
974/**
975 * Obtain the name of a structure.
976 *
977 * @see llvm::StructType::getName()
978 */
Torok Edwin0d5f6ae2011-10-06 12:12:50 +0000979const char *LLVMGetStructName(LLVMTypeRef Ty);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000980
981/**
982 * Set the contents of a structure type.
983 *
984 * @see llvm::StructType::setBody()
985 */
Chris Lattnere71ccde2011-07-14 05:53:17 +0000986void LLVMStructSetBody(LLVMTypeRef StructTy, LLVMTypeRef *ElementTypes,
987 unsigned ElementCount, LLVMBool Packed);
988
Gregory Szorc34c863a2012-03-21 03:54:29 +0000989/**
990 * Get the number of elements defined inside the structure.
991 *
992 * @see llvm::StructType::getNumElements()
993 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000994unsigned LLVMCountStructElementTypes(LLVMTypeRef StructTy);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000995
996/**
997 * Get the elements within a structure.
998 *
999 * The function is passed the address of a pre-allocated array of
1000 * LLVMTypeRef at least LLVMCountStructElementTypes() long. After
1001 * invocation, this array will be populated with the structure's
1002 * elements. The objects in the destination array will have a lifetime
1003 * of the structure type itself, which is the lifetime of the context it
1004 * is contained in.
1005 */
Gordon Henriksen76a03742007-09-18 03:18:57 +00001006void LLVMGetStructElementTypes(LLVMTypeRef StructTy, LLVMTypeRef *Dest);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001007
1008/**
Peter Zotovc164a3f2015-06-04 09:09:53 +00001009 * Get the type of the element at a given index in the structure.
1010 *
1011 * @see llvm::StructType::getTypeAtIndex()
1012 */
1013LLVMTypeRef LLVMStructGetTypeAtIndex(LLVMTypeRef StructTy, unsigned i);
1014
1015/**
Gregory Szorc34c863a2012-03-21 03:54:29 +00001016 * Determine whether a structure is packed.
1017 *
1018 * @see llvm::StructType::isPacked()
1019 */
Chris Lattner25963c62010-01-09 22:27:07 +00001020LLVMBool LLVMIsPackedStruct(LLVMTypeRef StructTy);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001021
1022/**
1023 * Determine whether a structure is opaque.
1024 *
1025 * @see llvm::StructType::isOpaque()
1026 */
Chris Lattner17cf05b2011-07-14 16:20:28 +00001027LLVMBool LLVMIsOpaqueStruct(LLVMTypeRef StructTy);
1028
Gregory Szorc34c863a2012-03-21 03:54:29 +00001029/**
1030 * @}
1031 */
Gordon Henriksen76a03742007-09-18 03:18:57 +00001032
Gregory Szorc34c863a2012-03-21 03:54:29 +00001033/**
1034 * @defgroup LLVMCCoreTypeSequential Sequential Types
1035 *
1036 * Sequential types represents "arrays" of types. This is a super class
1037 * for array, vector, and pointer types.
1038 *
1039 * @{
1040 */
1041
1042/**
1043 * Obtain the type of elements within a sequential type.
1044 *
1045 * This works on array, vector, and pointer types.
1046 *
1047 * @see llvm::SequentialType::getElementType()
1048 */
1049LLVMTypeRef LLVMGetElementType(LLVMTypeRef Ty);
1050
1051/**
1052 * Create a fixed size array type that refers to a specific type.
1053 *
1054 * The created type will exist in the context that its element type
1055 * exists in.
1056 *
1057 * @see llvm::ArrayType::get()
1058 */
Gordon Henriksened7beaa2007-10-06 16:05:20 +00001059LLVMTypeRef LLVMArrayType(LLVMTypeRef ElementType, unsigned ElementCount);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001060
1061/**
1062 * Obtain the length of an array type.
1063 *
1064 * This only works on types that represent arrays.
1065 *
1066 * @see llvm::ArrayType::getNumElements()
1067 */
1068unsigned LLVMGetArrayLength(LLVMTypeRef ArrayTy);
1069
1070/**
1071 * Create a pointer type that points to a defined type.
1072 *
1073 * The created type will exist in the context that its pointee type
1074 * exists in.
1075 *
1076 * @see llvm::PointerType::get()
1077 */
Gordon Henriksen5a3fe032007-12-17 16:08:32 +00001078LLVMTypeRef LLVMPointerType(LLVMTypeRef ElementType, unsigned AddressSpace);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001079
1080/**
1081 * Obtain the address space of a pointer type.
1082 *
1083 * This only works on types that represent pointers.
1084 *
1085 * @see llvm::PointerType::getAddressSpace()
1086 */
1087unsigned LLVMGetPointerAddressSpace(LLVMTypeRef PointerTy);
1088
1089/**
1090 * Create a vector type that contains a defined type and has a specific
1091 * number of elements.
1092 *
1093 * The created type will exist in the context thats its element type
1094 * exists in.
1095 *
1096 * @see llvm::VectorType::get()
1097 */
Gordon Henriksened7beaa2007-10-06 16:05:20 +00001098LLVMTypeRef LLVMVectorType(LLVMTypeRef ElementType, unsigned ElementCount);
Gordon Henriksen76a03742007-09-18 03:18:57 +00001099
Gregory Szorc34c863a2012-03-21 03:54:29 +00001100/**
1101 * Obtain the number of elements in a vector type.
1102 *
1103 * This only works on types that represent vectors.
1104 *
1105 * @see llvm::VectorType::getNumElements()
1106 */
Gordon Henriksen76a03742007-09-18 03:18:57 +00001107unsigned LLVMGetVectorSize(LLVMTypeRef VectorTy);
1108
Gregory Szorc34c863a2012-03-21 03:54:29 +00001109/**
1110 * @}
1111 */
1112
1113/**
1114 * @defgroup LLVMCCoreTypeOther Other Types
1115 *
1116 * @{
1117 */
1118
1119/**
1120 * Create a void type in a context.
1121 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +00001122LLVMTypeRef LLVMVoidTypeInContext(LLVMContextRef C);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001123
1124/**
1125 * Create a label type in a context.
1126 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +00001127LLVMTypeRef LLVMLabelTypeInContext(LLVMContextRef C);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001128
1129/**
1130 * Create a X86 MMX type in a context.
1131 */
Dale Johannesen95b67af2010-09-10 21:58:02 +00001132LLVMTypeRef LLVMX86MMXTypeInContext(LLVMContextRef C);
Erick Tryzelaar262332f2009-08-14 00:01:31 +00001133
Gregory Szorc34c863a2012-03-21 03:54:29 +00001134/**
1135 * These are similar to the above functions except they operate on the
1136 * global context.
1137 */
Gordon Henriksena735a9c2008-05-04 12:55:34 +00001138LLVMTypeRef LLVMVoidType(void);
1139LLVMTypeRef LLVMLabelType(void);
Dale Johannesen95b67af2010-09-10 21:58:02 +00001140LLVMTypeRef LLVMX86MMXType(void);
Gordon Henriksen76a03742007-09-18 03:18:57 +00001141
Gregory Szorc34c863a2012-03-21 03:54:29 +00001142/**
1143 * @}
1144 */
Gordon Henriksen76a03742007-09-18 03:18:57 +00001145
Gregory Szorc34c863a2012-03-21 03:54:29 +00001146/**
1147 * @}
1148 */
1149
1150/**
1151 * @defgroup LLVMCCoreValues Values
1152 *
1153 * The bulk of LLVM's object model consists of values, which comprise a very
Gordon Henriksen76a03742007-09-18 03:18:57 +00001154 * rich type hierarchy.
Gregory Szorc34c863a2012-03-21 03:54:29 +00001155 *
1156 * LLVMValueRef essentially represents llvm::Value. There is a rich
1157 * hierarchy of classes within this type. Depending on the instance
Eli Benderskyc52863c2012-08-10 18:30:44 +00001158 * obtained, not all APIs are available.
Gregory Szorc34c863a2012-03-21 03:54:29 +00001159 *
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +00001160 * Callers can determine the type of an LLVMValueRef by calling the
Gregory Szorc34c863a2012-03-21 03:54:29 +00001161 * LLVMIsA* family of functions (e.g. LLVMIsAArgument()). These
1162 * functions are defined by a macro, so it isn't obvious which are
1163 * available by looking at the Doxygen source code. Instead, look at the
1164 * source definition of LLVM_FOR_EACH_VALUE_SUBCLASS and note the list
1165 * of value names given. These value names also correspond to classes in
1166 * the llvm::Value hierarchy.
1167 *
1168 * @{
Gordon Henriksen76a03742007-09-18 03:18:57 +00001169 */
1170
Gordon Henriksen29e38942008-12-19 18:39:45 +00001171#define LLVM_FOR_EACH_VALUE_SUBCLASS(macro) \
1172 macro(Argument) \
1173 macro(BasicBlock) \
1174 macro(InlineAsm) \
1175 macro(User) \
1176 macro(Constant) \
Torok Edwind09b7572011-10-14 20:37:56 +00001177 macro(BlockAddress) \
Gordon Henriksen29e38942008-12-19 18:39:45 +00001178 macro(ConstantAggregateZero) \
1179 macro(ConstantArray) \
Peter Zotovae0344b2013-11-05 12:55:37 +00001180 macro(ConstantDataSequential) \
1181 macro(ConstantDataArray) \
1182 macro(ConstantDataVector) \
Gordon Henriksen29e38942008-12-19 18:39:45 +00001183 macro(ConstantExpr) \
1184 macro(ConstantFP) \
1185 macro(ConstantInt) \
1186 macro(ConstantPointerNull) \
1187 macro(ConstantStruct) \
1188 macro(ConstantVector) \
1189 macro(GlobalValue) \
Gordon Henriksen29e38942008-12-19 18:39:45 +00001190 macro(GlobalAlias) \
Rafael Espindola99e05cf2014-05-13 18:45:48 +00001191 macro(GlobalObject) \
1192 macro(Function) \
1193 macro(GlobalVariable) \
Gordon Henriksen29e38942008-12-19 18:39:45 +00001194 macro(UndefValue) \
1195 macro(Instruction) \
1196 macro(BinaryOperator) \
1197 macro(CallInst) \
1198 macro(IntrinsicInst) \
1199 macro(DbgInfoIntrinsic) \
1200 macro(DbgDeclareInst) \
Gordon Henriksen29e38942008-12-19 18:39:45 +00001201 macro(MemIntrinsic) \
1202 macro(MemCpyInst) \
1203 macro(MemMoveInst) \
1204 macro(MemSetInst) \
1205 macro(CmpInst) \
Torok Edwind09b7572011-10-14 20:37:56 +00001206 macro(FCmpInst) \
1207 macro(ICmpInst) \
Gordon Henriksen29e38942008-12-19 18:39:45 +00001208 macro(ExtractElementInst) \
1209 macro(GetElementPtrInst) \
1210 macro(InsertElementInst) \
1211 macro(InsertValueInst) \
Bill Wendlingfae14752011-08-12 20:24:12 +00001212 macro(LandingPadInst) \
Eugene Zelenkoffec81c2015-11-04 22:32:32 +00001213 macro(CleanupPadInst) \
Gordon Henriksen29e38942008-12-19 18:39:45 +00001214 macro(PHINode) \
1215 macro(SelectInst) \
1216 macro(ShuffleVectorInst) \
1217 macro(StoreInst) \
1218 macro(TerminatorInst) \
1219 macro(BranchInst) \
Torok Edwind09b7572011-10-14 20:37:56 +00001220 macro(IndirectBrInst) \
Gordon Henriksen29e38942008-12-19 18:39:45 +00001221 macro(InvokeInst) \
1222 macro(ReturnInst) \
1223 macro(SwitchInst) \
1224 macro(UnreachableInst) \
Bill Wendlingf891bf82011-07-31 06:30:59 +00001225 macro(ResumeInst) \
David Majnemer654e1302015-07-31 17:58:14 +00001226 macro(CleanupReturnInst) \
1227 macro(CatchReturnInst) \
Eugene Zelenkoffec81c2015-11-04 22:32:32 +00001228 macro(CatchPadInst) \
1229 macro(TerminatePadInst) \
1230 macro(CatchEndPadInst) \
Joseph Tremoulet9ce71f72015-09-03 09:09:43 +00001231 macro(CleanupEndPadInst) \
Duncan Sands5e37e992013-05-06 08:55:45 +00001232 macro(UnaryInstruction) \
1233 macro(AllocaInst) \
1234 macro(CastInst) \
Matt Arsenaultb03bd4d2013-11-15 01:34:59 +00001235 macro(AddrSpaceCastInst) \
Duncan Sands5e37e992013-05-06 08:55:45 +00001236 macro(BitCastInst) \
1237 macro(FPExtInst) \
1238 macro(FPToSIInst) \
1239 macro(FPToUIInst) \
1240 macro(FPTruncInst) \
1241 macro(IntToPtrInst) \
1242 macro(PtrToIntInst) \
1243 macro(SExtInst) \
1244 macro(SIToFPInst) \
1245 macro(TruncInst) \
1246 macro(UIToFPInst) \
1247 macro(ZExtInst) \
1248 macro(ExtractValueInst) \
1249 macro(LoadInst) \
1250 macro(VAArgInst)
Gordon Henriksen29e38942008-12-19 18:39:45 +00001251
Gregory Szorc34c863a2012-03-21 03:54:29 +00001252/**
1253 * @defgroup LLVMCCoreValueGeneral General APIs
1254 *
1255 * Functions in this section work on all LLVMValueRef instances,
1256 * regardless of their sub-type. They correspond to functions available
1257 * on llvm::Value.
1258 *
1259 * @{
1260 */
Gordon Henriksen76a03742007-09-18 03:18:57 +00001261
Gregory Szorc34c863a2012-03-21 03:54:29 +00001262/**
1263 * Obtain the type of a value.
1264 *
1265 * @see llvm::Value::getType()
1266 */
1267LLVMTypeRef LLVMTypeOf(LLVMValueRef Val);
1268
1269/**
1270 * Obtain the string name of a value.
1271 *
1272 * @see llvm::Value::getName()
1273 */
1274const char *LLVMGetValueName(LLVMValueRef Val);
1275
1276/**
1277 * Set the string name of a value.
1278 *
1279 * @see llvm::Value::setName()
1280 */
1281void LLVMSetValueName(LLVMValueRef Val, const char *Name);
1282
1283/**
1284 * Dump a representation of a value to stderr.
1285 *
1286 * @see llvm::Value::dump()
1287 */
1288void LLVMDumpValue(LLVMValueRef Val);
1289
1290/**
Peter Zotovcd93b372013-11-06 09:21:01 +00001291 * Return a string representation of the value. Use
1292 * LLVMDisposeMessage to free the string.
1293 *
1294 * @see llvm::Value::print()
1295 */
1296char *LLVMPrintValueToString(LLVMValueRef Val);
1297
1298/**
Gregory Szorc34c863a2012-03-21 03:54:29 +00001299 * Replace all uses of a value with another one.
1300 *
1301 * @see llvm::Value::replaceAllUsesWith()
1302 */
1303void LLVMReplaceAllUsesWith(LLVMValueRef OldVal, LLVMValueRef NewVal);
1304
1305/**
1306 * Determine whether the specified constant instance is constant.
1307 */
1308LLVMBool LLVMIsConstant(LLVMValueRef Val);
1309
1310/**
1311 * Determine whether a value instance is undefined.
1312 */
1313LLVMBool LLVMIsUndef(LLVMValueRef Val);
1314
1315/**
1316 * Convert value instances between types.
1317 *
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +00001318 * Internally, an LLVMValueRef is "pinned" to a specific type. This
Gregory Szorc34c863a2012-03-21 03:54:29 +00001319 * series of functions allows you to cast an instance to a specific
1320 * type.
1321 *
1322 * If the cast is not valid for the specified type, NULL is returned.
1323 *
1324 * @see llvm::dyn_cast_or_null<>
1325 */
Gordon Henriksen29e38942008-12-19 18:39:45 +00001326#define LLVM_DECLARE_VALUE_CAST(name) \
1327 LLVMValueRef LLVMIsA##name(LLVMValueRef Val);
1328LLVM_FOR_EACH_VALUE_SUBCLASS(LLVM_DECLARE_VALUE_CAST)
1329
Duncan P. N. Exon Smith5bf8fef2014-12-09 18:38:53 +00001330LLVMValueRef LLVMIsAMDNode(LLVMValueRef Val);
1331LLVMValueRef LLVMIsAMDString(LLVMValueRef Val);
1332
Gregory Szorc34c863a2012-03-21 03:54:29 +00001333/**
1334 * @}
1335 */
1336
1337/**
1338 * @defgroup LLVMCCoreValueUses Usage
1339 *
1340 * This module defines functions that allow you to inspect the uses of a
1341 * LLVMValueRef.
1342 *
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +00001343 * It is possible to obtain an LLVMUseRef for any LLVMValueRef instance.
Gregory Szorc34c863a2012-03-21 03:54:29 +00001344 * Each LLVMUseRef (which corresponds to a llvm::Use instance) holds a
1345 * llvm::User and llvm::Value.
1346 *
1347 * @{
1348 */
1349
1350/**
1351 * Obtain the first use of a value.
1352 *
1353 * Uses are obtained in an iterator fashion. First, call this function
1354 * to obtain a reference to the first use. Then, call LLVMGetNextUse()
Eli Benderskyc52863c2012-08-10 18:30:44 +00001355 * on that instance and all subsequently obtained instances until
Gregory Szorc34c863a2012-03-21 03:54:29 +00001356 * LLVMGetNextUse() returns NULL.
1357 *
1358 * @see llvm::Value::use_begin()
1359 */
Erick Tryzelaar9f9857e2010-03-02 20:32:28 +00001360LLVMUseRef LLVMGetFirstUse(LLVMValueRef Val);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001361
1362/**
1363 * Obtain the next use of a value.
1364 *
1365 * This effectively advances the iterator. It returns NULL if you are on
1366 * the final use and no more are available.
1367 */
Erick Tryzelaar9f9857e2010-03-02 20:32:28 +00001368LLVMUseRef LLVMGetNextUse(LLVMUseRef U);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001369
1370/**
1371 * Obtain the user value for a user.
1372 *
1373 * The returned value corresponds to a llvm::User type.
1374 *
1375 * @see llvm::Use::getUser()
1376 */
Erick Tryzelaar9f9857e2010-03-02 20:32:28 +00001377LLVMValueRef LLVMGetUser(LLVMUseRef U);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001378
1379/**
1380 * Obtain the value this use corresponds to.
1381 *
1382 * @see llvm::Use::get().
1383 */
Erick Tryzelaar9f9857e2010-03-02 20:32:28 +00001384LLVMValueRef LLVMGetUsedValue(LLVMUseRef U);
Chris Lattner40cf28d2009-10-12 04:01:02 +00001385
Gregory Szorc34c863a2012-03-21 03:54:29 +00001386/**
1387 * @}
1388 */
1389
1390/**
Gregory Szorc52d26602012-03-21 07:28:27 +00001391 * @defgroup LLVMCCoreValueUser User value
Gregory Szorc34c863a2012-03-21 03:54:29 +00001392 *
1393 * Function in this group pertain to LLVMValueRef instances that descent
1394 * from llvm::User. This includes constants, instructions, and
1395 * operators.
1396 *
1397 * @{
1398 */
1399
1400/**
1401 * Obtain an operand at a specific index in a llvm::User value.
1402 *
1403 * @see llvm::User::getOperand()
1404 */
Chris Lattner40cf28d2009-10-12 04:01:02 +00001405LLVMValueRef LLVMGetOperand(LLVMValueRef Val, unsigned Index);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001406
1407/**
Peter Zotovb19f78f2014-08-12 02:55:40 +00001408 * Obtain the use of an operand at a specific index in a llvm::User value.
1409 *
1410 * @see llvm::User::getOperandUse()
1411 */
1412LLVMUseRef LLVMGetOperandUse(LLVMValueRef Val, unsigned Index);
1413
1414/**
Gregory Szorc34c863a2012-03-21 03:54:29 +00001415 * Set an operand at a specific index in a llvm::User value.
1416 *
1417 * @see llvm::User::setOperand()
1418 */
Erick Tryzelaarb4d48702010-08-20 14:51:22 +00001419void LLVMSetOperand(LLVMValueRef User, unsigned Index, LLVMValueRef Val);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001420
1421/**
1422 * Obtain the number of operands in a llvm::User value.
1423 *
1424 * @see llvm::User::getNumOperands()
1425 */
Erick Tryzelaarb4d48702010-08-20 14:51:22 +00001426int LLVMGetNumOperands(LLVMValueRef Val);
Chris Lattner40cf28d2009-10-12 04:01:02 +00001427
Gregory Szorc34c863a2012-03-21 03:54:29 +00001428/**
1429 * @}
1430 */
1431
1432/**
Gregory Szorc52d26602012-03-21 07:28:27 +00001433 * @defgroup LLVMCCoreValueConstant Constants
Gregory Szorc34c863a2012-03-21 03:54:29 +00001434 *
1435 * This section contains APIs for interacting with LLVMValueRef that
1436 * correspond to llvm::Constant instances.
1437 *
1438 * These functions will work for any LLVMValueRef in the llvm::Constant
1439 * class hierarchy.
1440 *
1441 * @{
1442 */
1443
1444/**
1445 * Obtain a constant value referring to the null instance of a type.
1446 *
1447 * @see llvm::Constant::getNullValue()
1448 */
Gordon Henriksen1046c732007-10-06 15:11:06 +00001449LLVMValueRef LLVMConstNull(LLVMTypeRef Ty); /* all zeroes */
Gregory Szorc34c863a2012-03-21 03:54:29 +00001450
1451/**
1452 * Obtain a constant value referring to the instance of a type
1453 * consisting of all ones.
1454 *
1455 * This is only valid for integer types.
1456 *
1457 * @see llvm::Constant::getAllOnesValue()
1458 */
1459LLVMValueRef LLVMConstAllOnes(LLVMTypeRef Ty);
1460
1461/**
1462 * Obtain a constant value referring to an undefined value of a type.
1463 *
1464 * @see llvm::UndefValue::get()
1465 */
Gordon Henriksen76a03742007-09-18 03:18:57 +00001466LLVMValueRef LLVMGetUndef(LLVMTypeRef Ty);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001467
1468/**
1469 * Determine whether a value instance is null.
1470 *
1471 * @see llvm::Constant::isNullValue()
1472 */
Chris Lattner25963c62010-01-09 22:27:07 +00001473LLVMBool LLVMIsNull(LLVMValueRef Val);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001474
1475/**
1476 * Obtain a constant that is a constant pointer pointing to NULL for a
1477 * specified type.
1478 */
Chris Lattner7f318242009-07-06 17:29:59 +00001479LLVMValueRef LLVMConstPointerNull(LLVMTypeRef Ty);
Gordon Henriksen76a03742007-09-18 03:18:57 +00001480
Gregory Szorc34c863a2012-03-21 03:54:29 +00001481/**
1482 * @defgroup LLVMCCoreValueConstantScalar Scalar constants
1483 *
1484 * Functions in this group model LLVMValueRef instances that correspond
1485 * to constants referring to scalar types.
1486 *
1487 * For integer types, the LLVMTypeRef parameter should correspond to a
1488 * llvm::IntegerType instance and the returned LLVMValueRef will
1489 * correspond to a llvm::ConstantInt.
1490 *
1491 * For floating point types, the LLVMTypeRef returned corresponds to a
1492 * llvm::ConstantFP.
1493 *
1494 * @{
1495 */
Erick Tryzelaard8531fa2010-02-28 09:45:59 +00001496
Gregory Szorc34c863a2012-03-21 03:54:29 +00001497/**
1498 * Obtain a constant value for an integer type.
1499 *
1500 * The returned value corresponds to a llvm::ConstantInt.
1501 *
1502 * @see llvm::ConstantInt::get()
1503 *
1504 * @param IntTy Integer type to obtain value of.
1505 * @param N The value the returned instance should refer to.
1506 * @param SignExtend Whether to sign extend the produced value.
1507 */
Gordon Henriksen1046c732007-10-06 15:11:06 +00001508LLVMValueRef LLVMConstInt(LLVMTypeRef IntTy, unsigned long long N,
Chris Lattner25963c62010-01-09 22:27:07 +00001509 LLVMBool SignExtend);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001510
1511/**
1512 * Obtain a constant value for an integer of arbitrary precision.
1513 *
1514 * @see llvm::ConstantInt::get()
1515 */
Chris Lattner4329e072010-11-23 02:47:22 +00001516LLVMValueRef LLVMConstIntOfArbitraryPrecision(LLVMTypeRef IntTy,
1517 unsigned NumWords,
1518 const uint64_t Words[]);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001519
1520/**
1521 * Obtain a constant value for an integer parsed from a string.
1522 *
1523 * A similar API, LLVMConstIntOfStringAndSize is also available. If the
1524 * string's length is available, it is preferred to call that function
1525 * instead.
1526 *
1527 * @see llvm::ConstantInt::get()
1528 */
Erick Tryzelaardd991352009-08-16 23:36:46 +00001529LLVMValueRef LLVMConstIntOfString(LLVMTypeRef IntTy, const char *Text,
1530 uint8_t Radix);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001531
1532/**
1533 * Obtain a constant value for an integer parsed from a string with
1534 * specified length.
1535 *
1536 * @see llvm::ConstantInt::get()
1537 */
Erick Tryzelaardd991352009-08-16 23:36:46 +00001538LLVMValueRef LLVMConstIntOfStringAndSize(LLVMTypeRef IntTy, const char *Text,
1539 unsigned SLen, uint8_t Radix);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001540
1541/**
1542 * Obtain a constant value referring to a double floating point value.
1543 */
Gordon Henriksen1046c732007-10-06 15:11:06 +00001544LLVMValueRef LLVMConstReal(LLVMTypeRef RealTy, double N);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001545
1546/**
1547 * Obtain a constant for a floating point value parsed from a string.
1548 *
1549 * A similar API, LLVMConstRealOfStringAndSize is also available. It
1550 * should be used if the input string's length is known.
1551 */
Gordon Henriksen931e1212008-02-02 01:07:50 +00001552LLVMValueRef LLVMConstRealOfString(LLVMTypeRef RealTy, const char *Text);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001553
1554/**
1555 * Obtain a constant for a floating point value parsed from a string.
1556 */
Erick Tryzelaardd991352009-08-16 23:36:46 +00001557LLVMValueRef LLVMConstRealOfStringAndSize(LLVMTypeRef RealTy, const char *Text,
1558 unsigned SLen);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001559
1560/**
1561 * Obtain the zero extended value for an integer constant value.
1562 *
1563 * @see llvm::ConstantInt::getZExtValue()
1564 */
Chris Lattner40cf28d2009-10-12 04:01:02 +00001565unsigned long long LLVMConstIntGetZExtValue(LLVMValueRef ConstantVal);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001566
1567/**
1568 * Obtain the sign extended value for an integer constant value.
1569 *
1570 * @see llvm::ConstantInt::getSExtValue()
1571 */
Chris Lattner40cf28d2009-10-12 04:01:02 +00001572long long LLVMConstIntGetSExtValue(LLVMValueRef ConstantVal);
Erick Tryzelaardd991352009-08-16 23:36:46 +00001573
Gregory Szorc34c863a2012-03-21 03:54:29 +00001574/**
Peter Zotov1d98e6d2014-10-28 19:46:44 +00001575 * Obtain the double value for an floating point constant value.
1576 * losesInfo indicates if some precision was lost in the conversion.
1577 *
1578 * @see llvm::ConstantFP::getDoubleValue
1579 */
1580double LLVMConstRealGetDouble(LLVMValueRef ConstantVal, LLVMBool *losesInfo);
1581
1582/**
Gregory Szorc34c863a2012-03-21 03:54:29 +00001583 * @}
1584 */
1585
1586/**
Gregory Szorc52d26602012-03-21 07:28:27 +00001587 * @defgroup LLVMCCoreValueConstantComposite Composite Constants
1588 *
1589 * Functions in this group operate on composite constants.
Gregory Szorc34c863a2012-03-21 03:54:29 +00001590 *
1591 * @{
1592 */
1593
1594/**
Gregory Szorc52d26602012-03-21 07:28:27 +00001595 * Create a ConstantDataSequential and initialize it with a string.
Gregory Szorc34c863a2012-03-21 03:54:29 +00001596 *
Gregory Szorc52d26602012-03-21 07:28:27 +00001597 * @see llvm::ConstantDataArray::getString()
Gregory Szorc34c863a2012-03-21 03:54:29 +00001598 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +00001599LLVMValueRef LLVMConstStringInContext(LLVMContextRef C, const char *Str,
Chris Lattner25963c62010-01-09 22:27:07 +00001600 unsigned Length, LLVMBool DontNullTerminate);
Gregory Szorc52d26602012-03-21 07:28:27 +00001601
1602/**
1603 * Create a ConstantDataSequential with string content in the global context.
1604 *
1605 * This is the same as LLVMConstStringInContext except it operates on the
1606 * global context.
1607 *
1608 * @see LLVMConstStringInContext()
1609 * @see llvm::ConstantDataArray::getString()
1610 */
1611LLVMValueRef LLVMConstString(const char *Str, unsigned Length,
1612 LLVMBool DontNullTerminate);
1613
1614/**
Peter Zotovf9aa8822014-08-03 23:54:16 +00001615 * Returns true if the specified constant is an array of i8.
1616 *
1617 * @see ConstantDataSequential::getAsString()
1618 */
1619LLVMBool LLVMIsConstantString(LLVMValueRef c);
1620
1621/**
1622 * Get the given constant data sequential as a string.
1623 *
1624 * @see ConstantDataSequential::getAsString()
1625 */
1626const char *LLVMGetAsString(LLVMValueRef c, size_t* out);
1627
1628/**
Gregory Szorc52d26602012-03-21 07:28:27 +00001629 * Create an anonymous ConstantStruct with the specified values.
1630 *
1631 * @see llvm::ConstantStruct::getAnon()
1632 */
1633LLVMValueRef LLVMConstStructInContext(LLVMContextRef C,
Erick Tryzelaar262332f2009-08-14 00:01:31 +00001634 LLVMValueRef *ConstantVals,
Chris Lattner25963c62010-01-09 22:27:07 +00001635 unsigned Count, LLVMBool Packed);
Erick Tryzelaar262332f2009-08-14 00:01:31 +00001636
Gregory Szorc52d26602012-03-21 07:28:27 +00001637/**
1638 * Create a ConstantStruct in the global Context.
1639 *
1640 * This is the same as LLVMConstStructInContext except it operates on the
1641 * global Context.
1642 *
1643 * @see LLVMConstStructInContext()
1644 */
Gordon Henriksen1046c732007-10-06 15:11:06 +00001645LLVMValueRef LLVMConstStruct(LLVMValueRef *ConstantVals, unsigned Count,
Chris Lattner25963c62010-01-09 22:27:07 +00001646 LLVMBool Packed);
Gregory Szorc52d26602012-03-21 07:28:27 +00001647
1648/**
1649 * Create a ConstantArray from values.
1650 *
1651 * @see llvm::ConstantArray::get()
1652 */
1653LLVMValueRef LLVMConstArray(LLVMTypeRef ElementTy,
1654 LLVMValueRef *ConstantVals, unsigned Length);
1655
1656/**
1657 * Create a non-anonymous ConstantStruct from values.
1658 *
1659 * @see llvm::ConstantStruct::get()
1660 */
Rafael Espindola784ad242011-07-14 19:09:08 +00001661LLVMValueRef LLVMConstNamedStruct(LLVMTypeRef StructTy,
1662 LLVMValueRef *ConstantVals,
1663 unsigned Count);
Gregory Szorc52d26602012-03-21 07:28:27 +00001664
1665/**
Peter Zotovf9aa8822014-08-03 23:54:16 +00001666 * Get an element at specified index as a constant.
1667 *
1668 * @see ConstantDataSequential::getElementAsConstant()
1669 */
1670LLVMValueRef LLVMGetElementAsConstant(LLVMValueRef c, unsigned idx);
1671
1672/**
Gregory Szorc52d26602012-03-21 07:28:27 +00001673 * Create a ConstantVector from values.
1674 *
1675 * @see llvm::ConstantVector::get()
1676 */
Gordon Henriksen1046c732007-10-06 15:11:06 +00001677LLVMValueRef LLVMConstVector(LLVMValueRef *ScalarConstantVals, unsigned Size);
Gordon Henriksen76a03742007-09-18 03:18:57 +00001678
Gregory Szorc52d26602012-03-21 07:28:27 +00001679/**
1680 * @}
1681 */
1682
1683/**
1684 * @defgroup LLVMCCoreValueConstantExpressions Constant Expressions
1685 *
1686 * Functions in this group correspond to APIs on llvm::ConstantExpr.
1687 *
1688 * @see llvm::ConstantExpr.
1689 *
1690 * @{
1691 */
Chris Lattner40cf28d2009-10-12 04:01:02 +00001692LLVMOpcode LLVMGetConstOpcode(LLVMValueRef ConstantVal);
Erick Tryzelaarfd529d72009-08-19 08:36:49 +00001693LLVMValueRef LLVMAlignOf(LLVMTypeRef Ty);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001694LLVMValueRef LLVMSizeOf(LLVMTypeRef Ty);
1695LLVMValueRef LLVMConstNeg(LLVMValueRef ConstantVal);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +00001696LLVMValueRef LLVMConstNSWNeg(LLVMValueRef ConstantVal);
1697LLVMValueRef LLVMConstNUWNeg(LLVMValueRef ConstantVal);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +00001698LLVMValueRef LLVMConstFNeg(LLVMValueRef ConstantVal);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001699LLVMValueRef LLVMConstNot(LLVMValueRef ConstantVal);
1700LLVMValueRef LLVMConstAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Dan Gohmane4ca02d2009-09-03 23:34:49 +00001701LLVMValueRef LLVMConstNSWAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +00001702LLVMValueRef LLVMConstNUWAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +00001703LLVMValueRef LLVMConstFAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001704LLVMValueRef LLVMConstSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +00001705LLVMValueRef LLVMConstNSWSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1706LLVMValueRef LLVMConstNUWSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +00001707LLVMValueRef LLVMConstFSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001708LLVMValueRef LLVMConstMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +00001709LLVMValueRef LLVMConstNSWMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1710LLVMValueRef LLVMConstNUWMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +00001711LLVMValueRef LLVMConstFMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001712LLVMValueRef LLVMConstUDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1713LLVMValueRef LLVMConstSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Dan Gohmane4ca02d2009-09-03 23:34:49 +00001714LLVMValueRef LLVMConstExactSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001715LLVMValueRef LLVMConstFDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1716LLVMValueRef LLVMConstURem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1717LLVMValueRef LLVMConstSRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1718LLVMValueRef LLVMConstFRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1719LLVMValueRef LLVMConstAnd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1720LLVMValueRef LLVMConstOr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1721LLVMValueRef LLVMConstXor(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1722LLVMValueRef LLVMConstICmp(LLVMIntPredicate Predicate,
1723 LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1724LLVMValueRef LLVMConstFCmp(LLVMRealPredicate Predicate,
1725 LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1726LLVMValueRef LLVMConstShl(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1727LLVMValueRef LLVMConstLShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1728LLVMValueRef LLVMConstAShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1729LLVMValueRef LLVMConstGEP(LLVMValueRef ConstantVal,
1730 LLVMValueRef *ConstantIndices, unsigned NumIndices);
Dan Gohmane4ca02d2009-09-03 23:34:49 +00001731LLVMValueRef LLVMConstInBoundsGEP(LLVMValueRef ConstantVal,
1732 LLVMValueRef *ConstantIndices,
1733 unsigned NumIndices);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001734LLVMValueRef LLVMConstTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1735LLVMValueRef LLVMConstSExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1736LLVMValueRef LLVMConstZExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1737LLVMValueRef LLVMConstFPTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1738LLVMValueRef LLVMConstFPExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1739LLVMValueRef LLVMConstUIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1740LLVMValueRef LLVMConstSIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1741LLVMValueRef LLVMConstFPToUI(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1742LLVMValueRef LLVMConstFPToSI(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1743LLVMValueRef LLVMConstPtrToInt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1744LLVMValueRef LLVMConstIntToPtr(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1745LLVMValueRef LLVMConstBitCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
Matt Arsenaultb03bd4d2013-11-15 01:34:59 +00001746LLVMValueRef LLVMConstAddrSpaceCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +00001747LLVMValueRef LLVMConstZExtOrBitCast(LLVMValueRef ConstantVal,
1748 LLVMTypeRef ToType);
1749LLVMValueRef LLVMConstSExtOrBitCast(LLVMValueRef ConstantVal,
1750 LLVMTypeRef ToType);
1751LLVMValueRef LLVMConstTruncOrBitCast(LLVMValueRef ConstantVal,
1752 LLVMTypeRef ToType);
1753LLVMValueRef LLVMConstPointerCast(LLVMValueRef ConstantVal,
1754 LLVMTypeRef ToType);
1755LLVMValueRef LLVMConstIntCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType,
Chris Lattner25963c62010-01-09 22:27:07 +00001756 LLVMBool isSigned);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +00001757LLVMValueRef LLVMConstFPCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001758LLVMValueRef LLVMConstSelect(LLVMValueRef ConstantCondition,
1759 LLVMValueRef ConstantIfTrue,
1760 LLVMValueRef ConstantIfFalse);
1761LLVMValueRef LLVMConstExtractElement(LLVMValueRef VectorConstant,
1762 LLVMValueRef IndexConstant);
1763LLVMValueRef LLVMConstInsertElement(LLVMValueRef VectorConstant,
1764 LLVMValueRef ElementValueConstant,
1765 LLVMValueRef IndexConstant);
1766LLVMValueRef LLVMConstShuffleVector(LLVMValueRef VectorAConstant,
1767 LLVMValueRef VectorBConstant,
1768 LLVMValueRef MaskConstant);
Dan Gohmand5104a52008-11-03 22:55:43 +00001769LLVMValueRef LLVMConstExtractValue(LLVMValueRef AggConstant, unsigned *IdxList,
1770 unsigned NumIdx);
1771LLVMValueRef LLVMConstInsertValue(LLVMValueRef AggConstant,
1772 LLVMValueRef ElementValueConstant,
1773 unsigned *IdxList, unsigned NumIdx);
Chris Lattner25963c62010-01-09 22:27:07 +00001774LLVMValueRef LLVMConstInlineAsm(LLVMTypeRef Ty,
Chris Lattner3d1f5522008-12-17 21:39:50 +00001775 const char *AsmString, const char *Constraints,
Chris Lattner25963c62010-01-09 22:27:07 +00001776 LLVMBool HasSideEffects, LLVMBool IsAlignStack);
Erick Tryzelaar0fb26ef2010-02-28 09:46:06 +00001777LLVMValueRef LLVMBlockAddress(LLVMValueRef F, LLVMBasicBlockRef BB);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001778
Gregory Szorc52d26602012-03-21 07:28:27 +00001779/**
1780 * @}
1781 */
1782
1783/**
1784 * @defgroup LLVMCCoreValueConstantGlobals Global Values
1785 *
1786 * This group contains functions that operate on global values. Functions in
1787 * this group relate to functions in the llvm::GlobalValue class tree.
1788 *
1789 * @see llvm::GlobalValue
1790 *
1791 * @{
1792 */
1793
Gordon Henriksen265f7802008-03-19 01:11:35 +00001794LLVMModuleRef LLVMGetGlobalParent(LLVMValueRef Global);
Chris Lattner25963c62010-01-09 22:27:07 +00001795LLVMBool LLVMIsDeclaration(LLVMValueRef Global);
Gordon Henriksen76a03742007-09-18 03:18:57 +00001796LLVMLinkage LLVMGetLinkage(LLVMValueRef Global);
1797void LLVMSetLinkage(LLVMValueRef Global, LLVMLinkage Linkage);
1798const char *LLVMGetSection(LLVMValueRef Global);
1799void LLVMSetSection(LLVMValueRef Global, const char *Section);
1800LLVMVisibility LLVMGetVisibility(LLVMValueRef Global);
1801void LLVMSetVisibility(LLVMValueRef Global, LLVMVisibility Viz);
Reid Kleckner2fae26f2014-03-05 02:34:23 +00001802LLVMDLLStorageClass LLVMGetDLLStorageClass(LLVMValueRef Global);
1803void LLVMSetDLLStorageClass(LLVMValueRef Global, LLVMDLLStorageClass Class);
Tim Northoverad96d012014-03-10 19:24:35 +00001804LLVMBool LLVMHasUnnamedAddr(LLVMValueRef Global);
1805void LLVMSetUnnamedAddr(LLVMValueRef Global, LLVMBool HasUnnamedAddr);
Anders Waldenborg213a63f2013-10-29 09:02:02 +00001806
1807/**
1808 * @defgroup LLVMCCoreValueWithAlignment Values with alignment
1809 *
1810 * Functions in this group only apply to values with alignment, i.e.
1811 * global variables, load and store instructions.
1812 */
1813
1814/**
1815 * Obtain the preferred alignment of the value.
Peter Zotov9f584e62014-03-05 05:05:34 +00001816 * @see llvm::AllocaInst::getAlignment()
Anders Waldenborg213a63f2013-10-29 09:02:02 +00001817 * @see llvm::LoadInst::getAlignment()
1818 * @see llvm::StoreInst::getAlignment()
1819 * @see llvm::GlobalValue::getAlignment()
1820 */
1821unsigned LLVMGetAlignment(LLVMValueRef V);
1822
1823/**
1824 * Set the preferred alignment of the value.
Peter Zotov9f584e62014-03-05 05:05:34 +00001825 * @see llvm::AllocaInst::setAlignment()
Anders Waldenborg213a63f2013-10-29 09:02:02 +00001826 * @see llvm::LoadInst::setAlignment()
1827 * @see llvm::StoreInst::setAlignment()
1828 * @see llvm::GlobalValue::setAlignment()
1829 */
1830void LLVMSetAlignment(LLVMValueRef V, unsigned Bytes);
1831
1832/**
1833 * @}
1834 */
Gordon Henriksen76a03742007-09-18 03:18:57 +00001835
Gregory Szorc52d26602012-03-21 07:28:27 +00001836/**
1837 * @defgroup LLVMCoreValueConstantGlobalVariable Global Variables
1838 *
1839 * This group contains functions that operate on global variable values.
1840 *
1841 * @see llvm::GlobalVariable
1842 *
1843 * @{
1844 */
Gordon Henriksen76a03742007-09-18 03:18:57 +00001845LLVMValueRef LLVMAddGlobal(LLVMModuleRef M, LLVMTypeRef Ty, const char *Name);
Erick Tryzelaar06894b32010-02-28 09:46:13 +00001846LLVMValueRef LLVMAddGlobalInAddressSpace(LLVMModuleRef M, LLVMTypeRef Ty,
1847 const char *Name,
1848 unsigned AddressSpace);
Gordon Henriksen783f7bb2007-10-08 03:45:09 +00001849LLVMValueRef LLVMGetNamedGlobal(LLVMModuleRef M, const char *Name);
Gordon Henriksen07a45f42008-03-23 22:21:29 +00001850LLVMValueRef LLVMGetFirstGlobal(LLVMModuleRef M);
1851LLVMValueRef LLVMGetLastGlobal(LLVMModuleRef M);
1852LLVMValueRef LLVMGetNextGlobal(LLVMValueRef GlobalVar);
1853LLVMValueRef LLVMGetPreviousGlobal(LLVMValueRef GlobalVar);
Gordon Henriksen76a03742007-09-18 03:18:57 +00001854void LLVMDeleteGlobal(LLVMValueRef GlobalVar);
Gordon Henriksen76a03742007-09-18 03:18:57 +00001855LLVMValueRef LLVMGetInitializer(LLVMValueRef GlobalVar);
1856void LLVMSetInitializer(LLVMValueRef GlobalVar, LLVMValueRef ConstantVal);
Chris Lattner25963c62010-01-09 22:27:07 +00001857LLVMBool LLVMIsThreadLocal(LLVMValueRef GlobalVar);
1858void LLVMSetThreadLocal(LLVMValueRef GlobalVar, LLVMBool IsThreadLocal);
1859LLVMBool LLVMIsGlobalConstant(LLVMValueRef GlobalVar);
1860void LLVMSetGlobalConstant(LLVMValueRef GlobalVar, LLVMBool IsConstant);
Hans Wennborg5ff71202013-04-16 08:58:59 +00001861LLVMThreadLocalMode LLVMGetThreadLocalMode(LLVMValueRef GlobalVar);
1862void LLVMSetThreadLocalMode(LLVMValueRef GlobalVar, LLVMThreadLocalMode Mode);
1863LLVMBool LLVMIsExternallyInitialized(LLVMValueRef GlobalVar);
1864void LLVMSetExternallyInitialized(LLVMValueRef GlobalVar, LLVMBool IsExtInit);
Gordon Henriksen76a03742007-09-18 03:18:57 +00001865
Gregory Szorc52d26602012-03-21 07:28:27 +00001866/**
1867 * @}
1868 */
1869
1870/**
1871 * @defgroup LLVMCoreValueConstantGlobalAlias Global Aliases
1872 *
1873 * This group contains function that operate on global alias values.
1874 *
1875 * @see llvm::GlobalAlias
1876 *
1877 * @{
1878 */
Chris Lattner3d1f5522008-12-17 21:39:50 +00001879LLVMValueRef LLVMAddAlias(LLVMModuleRef M, LLVMTypeRef Ty, LLVMValueRef Aliasee,
1880 const char *Name);
1881
Gregory Szorc34c863a2012-03-21 03:54:29 +00001882/**
1883 * @}
1884 */
1885
1886/**
1887 * @defgroup LLVMCCoreValueFunction Function values
1888 *
1889 * Functions in this group operate on LLVMValueRef instances that
1890 * correspond to llvm::Function instances.
1891 *
1892 * @see llvm::Function
1893 *
1894 * @{
1895 */
1896
1897/**
1898 * Remove a function from its containing module and deletes it.
1899 *
1900 * @see llvm::Function::eraseFromParent()
1901 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00001902void LLVMDeleteFunction(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001903
1904/**
Andrew Wilkins3bdfc1c2015-07-14 01:23:06 +00001905 * Obtain the personality function attached to the function.
1906 *
1907 * @see llvm::Function::getPersonalityFn()
1908 */
1909LLVMValueRef LLVMGetPersonalityFn(LLVMValueRef Fn);
1910
1911/**
1912 * Set the personality function attached to the function.
1913 *
1914 * @see llvm::Function::setPersonalityFn()
1915 */
1916void LLVMSetPersonalityFn(LLVMValueRef Fn, LLVMValueRef PersonalityFn);
1917
1918/**
Gregory Szorc34c863a2012-03-21 03:54:29 +00001919 * Obtain the ID number from a function instance.
1920 *
1921 * @see llvm::Function::getIntrinsicID()
1922 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00001923unsigned LLVMGetIntrinsicID(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001924
1925/**
1926 * Obtain the calling function of a function.
1927 *
1928 * The returned value corresponds to the LLVMCallConv enumeration.
1929 *
1930 * @see llvm::Function::getCallingConv()
1931 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00001932unsigned LLVMGetFunctionCallConv(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001933
1934/**
1935 * Set the calling convention of a function.
1936 *
1937 * @see llvm::Function::setCallingConv()
1938 *
1939 * @param Fn Function to operate on
1940 * @param CC LLVMCallConv to set calling convention to
1941 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00001942void LLVMSetFunctionCallConv(LLVMValueRef Fn, unsigned CC);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001943
1944/**
1945 * Obtain the name of the garbage collector to use during code
1946 * generation.
1947 *
1948 * @see llvm::Function::getGC()
1949 */
Gordon Henriksend930f912008-08-17 18:44:35 +00001950const char *LLVMGetGC(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001951
1952/**
1953 * Define the garbage collector to use during code generation.
1954 *
1955 * @see llvm::Function::setGC()
1956 */
Gordon Henriksend930f912008-08-17 18:44:35 +00001957void LLVMSetGC(LLVMValueRef Fn, const char *Name);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001958
1959/**
1960 * Add an attribute to a function.
1961 *
1962 * @see llvm::Function::addAttribute()
1963 */
Duncan Sands7374a012009-05-06 12:21:17 +00001964void LLVMAddFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001965
1966/**
Nick Lewyckyc3890d22015-07-29 22:32:47 +00001967 * Add a target-dependent attribute to a function
Tom Stellarde8f35e12013-04-16 23:12:43 +00001968 * @see llvm::AttrBuilder::addAttribute()
1969 */
1970void LLVMAddTargetDependentFunctionAttr(LLVMValueRef Fn, const char *A,
1971 const char *V);
1972
1973/**
Gregory Szorc34c863a2012-03-21 03:54:29 +00001974 * Obtain an attribute from a function.
1975 *
1976 * @see llvm::Function::getAttributes()
1977 */
Chris Lattner40cf28d2009-10-12 04:01:02 +00001978LLVMAttribute LLVMGetFunctionAttr(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001979
1980/**
1981 * Remove an attribute from a function.
1982 */
Duncan Sands7374a012009-05-06 12:21:17 +00001983void LLVMRemoveFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00001984
Gregory Szorc34c863a2012-03-21 03:54:29 +00001985/**
1986 * @defgroup LLVMCCoreValueFunctionParameters Function Parameters
1987 *
1988 * Functions in this group relate to arguments/parameters on functions.
1989 *
1990 * Functions in this group expect LLVMValueRef instances that correspond
1991 * to llvm::Function instances.
1992 *
1993 * @{
1994 */
1995
1996/**
1997 * Obtain the number of parameters in a function.
1998 *
1999 * @see llvm::Function::arg_size()
2000 */
Gordon Henriksen265f7802008-03-19 01:11:35 +00002001unsigned LLVMCountParams(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002002
2003/**
2004 * Obtain the parameters in a function.
2005 *
2006 * The takes a pointer to a pre-allocated array of LLVMValueRef that is
2007 * at least LLVMCountParams() long. This array will be filled with
2008 * LLVMValueRef instances which correspond to the parameters the
2009 * function receives. Each LLVMValueRef corresponds to a llvm::Argument
2010 * instance.
2011 *
2012 * @see llvm::Function::arg_begin()
2013 */
Gordon Henriksen265f7802008-03-19 01:11:35 +00002014void LLVMGetParams(LLVMValueRef Fn, LLVMValueRef *Params);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002015
2016/**
2017 * Obtain the parameter at the specified index.
2018 *
2019 * Parameters are indexed from 0.
2020 *
2021 * @see llvm::Function::arg_begin()
2022 */
Gordon Henriksen265f7802008-03-19 01:11:35 +00002023LLVMValueRef LLVMGetParam(LLVMValueRef Fn, unsigned Index);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002024
2025/**
2026 * Obtain the function to which this argument belongs.
2027 *
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +00002028 * Unlike other functions in this group, this one takes an LLVMValueRef
Gregory Szorc34c863a2012-03-21 03:54:29 +00002029 * that corresponds to a llvm::Attribute.
2030 *
2031 * The returned LLVMValueRef is the llvm::Function to which this
2032 * argument belongs.
2033 */
Gordon Henriksen265f7802008-03-19 01:11:35 +00002034LLVMValueRef LLVMGetParamParent(LLVMValueRef Inst);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002035
2036/**
2037 * Obtain the first parameter to a function.
2038 *
2039 * @see llvm::Function::arg_begin()
2040 */
Gordon Henriksen07a45f42008-03-23 22:21:29 +00002041LLVMValueRef LLVMGetFirstParam(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002042
2043/**
2044 * Obtain the last parameter to a function.
2045 *
2046 * @see llvm::Function::arg_end()
2047 */
Gordon Henriksen07a45f42008-03-23 22:21:29 +00002048LLVMValueRef LLVMGetLastParam(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002049
2050/**
2051 * Obtain the next parameter to a function.
2052 *
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +00002053 * This takes an LLVMValueRef obtained from LLVMGetFirstParam() (which is
Gregory Szorc34c863a2012-03-21 03:54:29 +00002054 * actually a wrapped iterator) and obtains the next parameter from the
2055 * underlying iterator.
2056 */
Gordon Henriksen07a45f42008-03-23 22:21:29 +00002057LLVMValueRef LLVMGetNextParam(LLVMValueRef Arg);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002058
2059/**
2060 * Obtain the previous parameter to a function.
2061 *
2062 * This is the opposite of LLVMGetNextParam().
2063 */
Gordon Henriksen07a45f42008-03-23 22:21:29 +00002064LLVMValueRef LLVMGetPreviousParam(LLVMValueRef Arg);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002065
2066/**
2067 * Add an attribute to a function argument.
2068 *
2069 * @see llvm::Argument::addAttr()
2070 */
Devang Patel4c758ea2008-09-25 21:00:45 +00002071void LLVMAddAttribute(LLVMValueRef Arg, LLVMAttribute PA);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002072
2073/**
2074 * Remove an attribute from a function argument.
2075 *
2076 * @see llvm::Argument::removeAttr()
2077 */
Devang Patel4c758ea2008-09-25 21:00:45 +00002078void LLVMRemoveAttribute(LLVMValueRef Arg, LLVMAttribute PA);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002079
2080/**
2081 * Get an attribute from a function argument.
2082 */
Chris Lattner40cf28d2009-10-12 04:01:02 +00002083LLVMAttribute LLVMGetAttribute(LLVMValueRef Arg);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002084
2085/**
2086 * Set the alignment for a function parameter.
2087 *
2088 * @see llvm::Argument::addAttr()
Bill Wendling50d27842012-10-15 20:35:56 +00002089 * @see llvm::AttrBuilder::addAlignmentAttr()
Gregory Szorc34c863a2012-03-21 03:54:29 +00002090 */
Gordon Henriksen2d9cc212008-04-28 17:37:06 +00002091void LLVMSetParamAlignment(LLVMValueRef Arg, unsigned align);
Gordon Henriksen265f7802008-03-19 01:11:35 +00002092
Gregory Szorc34c863a2012-03-21 03:54:29 +00002093/**
2094 * @}
2095 */
2096
2097/**
2098 * @}
2099 */
2100
2101/**
Gregory Szorc52d26602012-03-21 07:28:27 +00002102 * @}
2103 */
2104
2105/**
2106 * @}
2107 */
2108
2109/**
2110 * @defgroup LLVMCCoreValueMetadata Metadata
2111 *
2112 * @{
2113 */
2114
2115/**
2116 * Obtain a MDString value from a context.
2117 *
2118 * The returned instance corresponds to the llvm::MDString class.
2119 *
2120 * The instance is specified by string data of a specified length. The
2121 * string content is copied, so the backing memory can be freed after
2122 * this function returns.
2123 */
2124LLVMValueRef LLVMMDStringInContext(LLVMContextRef C, const char *Str,
2125 unsigned SLen);
2126
2127/**
2128 * Obtain a MDString value from the global context.
2129 */
2130LLVMValueRef LLVMMDString(const char *Str, unsigned SLen);
2131
2132/**
2133 * Obtain a MDNode value from a context.
2134 *
2135 * The returned value corresponds to the llvm::MDNode class.
2136 */
2137LLVMValueRef LLVMMDNodeInContext(LLVMContextRef C, LLVMValueRef *Vals,
2138 unsigned Count);
2139
2140/**
2141 * Obtain a MDNode value from the global context.
2142 */
2143LLVMValueRef LLVMMDNode(LLVMValueRef *Vals, unsigned Count);
2144
2145/**
2146 * Obtain the underlying string from a MDString value.
2147 *
2148 * @param V Instance to obtain string from.
2149 * @param Len Memory address which will hold length of returned string.
2150 * @return String data in MDString.
2151 */
2152const char *LLVMGetMDString(LLVMValueRef V, unsigned* Len);
2153
2154/**
Duncan Sands12ccbe72012-09-19 20:29:39 +00002155 * Obtain the number of operands from an MDNode value.
2156 *
2157 * @param V MDNode to get number of operands from.
2158 * @return Number of operands of the MDNode.
2159 */
2160unsigned LLVMGetMDNodeNumOperands(LLVMValueRef V);
2161
2162/**
2163 * Obtain the given MDNode's operands.
2164 *
2165 * The passed LLVMValueRef pointer should point to enough memory to hold all of
2166 * the operands of the given MDNode (see LLVMGetMDNodeNumOperands) as
2167 * LLVMValueRefs. This memory will be populated with the LLVMValueRefs of the
2168 * MDNode's operands.
2169 *
2170 * @param V MDNode to get the operands from.
2171 * @param Dest Destination array for operands.
2172 */
2173void LLVMGetMDNodeOperands(LLVMValueRef V, LLVMValueRef *Dest);
2174
2175/**
Gregory Szorc52d26602012-03-21 07:28:27 +00002176 * @}
2177 */
2178
2179/**
Gregory Szorc34c863a2012-03-21 03:54:29 +00002180 * @defgroup LLVMCCoreValueBasicBlock Basic Block
2181 *
2182 * A basic block represents a single entry single exit section of code.
2183 * Basic blocks contain a list of instructions which form the body of
2184 * the block.
2185 *
2186 * Basic blocks belong to functions. They have the type of label.
2187 *
2188 * Basic blocks are themselves values. However, the C API models them as
2189 * LLVMBasicBlockRef.
2190 *
2191 * @see llvm::BasicBlock
2192 *
2193 * @{
2194 */
2195
2196/**
2197 * Convert a basic block instance to a value type.
2198 */
Gordon Henriksen07a45f42008-03-23 22:21:29 +00002199LLVMValueRef LLVMBasicBlockAsValue(LLVMBasicBlockRef BB);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002200
2201/**
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +00002202 * Determine whether an LLVMValueRef is itself a basic block.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002203 */
Chris Lattner25963c62010-01-09 22:27:07 +00002204LLVMBool LLVMValueIsBasicBlock(LLVMValueRef Val);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002205
2206/**
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +00002207 * Convert an LLVMValueRef to an LLVMBasicBlockRef instance.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002208 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002209LLVMBasicBlockRef LLVMValueAsBasicBlock(LLVMValueRef Val);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002210
2211/**
2212 * Obtain the function to which a basic block belongs.
2213 *
2214 * @see llvm::BasicBlock::getParent()
2215 */
Gordon Henriksen07a45f42008-03-23 22:21:29 +00002216LLVMValueRef LLVMGetBasicBlockParent(LLVMBasicBlockRef BB);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002217
2218/**
2219 * Obtain the terminator instruction for a basic block.
2220 *
2221 * If the basic block does not have a terminator (it is not well-formed
2222 * if it doesn't), then NULL is returned.
2223 *
2224 * The returned LLVMValueRef corresponds to a llvm::TerminatorInst.
2225 *
2226 * @see llvm::BasicBlock::getTerminator()
2227 */
Nate Begeman43c322b2011-08-23 20:27:46 +00002228LLVMValueRef LLVMGetBasicBlockTerminator(LLVMBasicBlockRef BB);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002229
2230/**
2231 * Obtain the number of basic blocks in a function.
2232 *
2233 * @param Fn Function value to operate on.
2234 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002235unsigned LLVMCountBasicBlocks(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002236
2237/**
2238 * Obtain all of the basic blocks in a function.
2239 *
2240 * This operates on a function value. The BasicBlocks parameter is a
2241 * pointer to a pre-allocated array of LLVMBasicBlockRef of at least
2242 * LLVMCountBasicBlocks() in length. This array is populated with
2243 * LLVMBasicBlockRef instances.
2244 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002245void LLVMGetBasicBlocks(LLVMValueRef Fn, LLVMBasicBlockRef *BasicBlocks);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002246
2247/**
2248 * Obtain the first basic block in a function.
2249 *
2250 * The returned basic block can be used as an iterator. You will likely
2251 * eventually call into LLVMGetNextBasicBlock() with it.
2252 *
2253 * @see llvm::Function::begin()
2254 */
Gordon Henriksen054817c2008-03-19 03:47:18 +00002255LLVMBasicBlockRef LLVMGetFirstBasicBlock(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002256
2257/**
2258 * Obtain the last basic block in a function.
2259 *
2260 * @see llvm::Function::end()
2261 */
Gordon Henriksen054817c2008-03-19 03:47:18 +00002262LLVMBasicBlockRef LLVMGetLastBasicBlock(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002263
2264/**
2265 * Advance a basic block iterator.
2266 */
Gordon Henriksen054817c2008-03-19 03:47:18 +00002267LLVMBasicBlockRef LLVMGetNextBasicBlock(LLVMBasicBlockRef BB);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002268
2269/**
2270 * Go backwards in a basic block iterator.
2271 */
Gordon Henriksen054817c2008-03-19 03:47:18 +00002272LLVMBasicBlockRef LLVMGetPreviousBasicBlock(LLVMBasicBlockRef BB);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002273
2274/**
2275 * Obtain the basic block that corresponds to the entry point of a
2276 * function.
2277 *
2278 * @see llvm::Function::getEntryBlock()
2279 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002280LLVMBasicBlockRef LLVMGetEntryBasicBlock(LLVMValueRef Fn);
Erick Tryzelaar262332f2009-08-14 00:01:31 +00002281
Gregory Szorc34c863a2012-03-21 03:54:29 +00002282/**
2283 * Append a basic block to the end of a function.
2284 *
2285 * @see llvm::BasicBlock::Create()
2286 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +00002287LLVMBasicBlockRef LLVMAppendBasicBlockInContext(LLVMContextRef C,
2288 LLVMValueRef Fn,
2289 const char *Name);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002290
2291/**
2292 * Append a basic block to the end of a function using the global
2293 * context.
2294 *
2295 * @see llvm::BasicBlock::Create()
2296 */
2297LLVMBasicBlockRef LLVMAppendBasicBlock(LLVMValueRef Fn, const char *Name);
2298
2299/**
2300 * Insert a basic block in a function before another basic block.
2301 *
2302 * The function to add to is determined by the function of the
2303 * passed basic block.
2304 *
2305 * @see llvm::BasicBlock::Create()
2306 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +00002307LLVMBasicBlockRef LLVMInsertBasicBlockInContext(LLVMContextRef C,
2308 LLVMBasicBlockRef BB,
2309 const char *Name);
2310
Gregory Szorc34c863a2012-03-21 03:54:29 +00002311/**
2312 * Insert a basic block in a function using the global context.
2313 *
2314 * @see llvm::BasicBlock::Create()
2315 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002316LLVMBasicBlockRef LLVMInsertBasicBlock(LLVMBasicBlockRef InsertBeforeBB,
2317 const char *Name);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002318
2319/**
2320 * Remove a basic block from a function and delete it.
2321 *
2322 * This deletes the basic block from its containing function and deletes
2323 * the basic block itself.
2324 *
2325 * @see llvm::BasicBlock::eraseFromParent()
2326 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002327void LLVMDeleteBasicBlock(LLVMBasicBlockRef BB);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002328
2329/**
2330 * Remove a basic block from a function.
2331 *
2332 * This deletes the basic block from its containing function but keep
2333 * the basic block alive.
2334 *
2335 * @see llvm::BasicBlock::removeFromParent()
2336 */
Nate Begeman43c322b2011-08-23 20:27:46 +00002337void LLVMRemoveBasicBlockFromParent(LLVMBasicBlockRef BB);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002338
Gregory Szorc34c863a2012-03-21 03:54:29 +00002339/**
2340 * Move a basic block to before another one.
2341 *
2342 * @see llvm::BasicBlock::moveBefore()
2343 */
Duncan Sandsb1d61aa2010-07-19 15:31:07 +00002344void LLVMMoveBasicBlockBefore(LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002345
2346/**
2347 * Move a basic block to after another one.
2348 *
2349 * @see llvm::BasicBlock::moveAfter()
2350 */
Duncan Sandsb1d61aa2010-07-19 15:31:07 +00002351void LLVMMoveBasicBlockAfter(LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos);
2352
Gregory Szorc34c863a2012-03-21 03:54:29 +00002353/**
2354 * Obtain the first instruction in a basic block.
2355 *
2356 * The returned LLVMValueRef corresponds to a llvm::Instruction
2357 * instance.
2358 */
Gordon Henriksen054817c2008-03-19 03:47:18 +00002359LLVMValueRef LLVMGetFirstInstruction(LLVMBasicBlockRef BB);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002360
2361/**
2362 * Obtain the last instruction in a basic block.
2363 *
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +00002364 * The returned LLVMValueRef corresponds to an LLVM:Instruction.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002365 */
Gordon Henriksen054817c2008-03-19 03:47:18 +00002366LLVMValueRef LLVMGetLastInstruction(LLVMBasicBlockRef BB);
Nate Begeman43c322b2011-08-23 20:27:46 +00002367
Gregory Szorc34c863a2012-03-21 03:54:29 +00002368/**
2369 * @}
2370 */
2371
2372/**
2373 * @defgroup LLVMCCoreValueInstruction Instructions
2374 *
2375 * Functions in this group relate to the inspection and manipulation of
2376 * individual instructions.
2377 *
2378 * In the C++ API, an instruction is modeled by llvm::Instruction. This
2379 * class has a large number of descendents. llvm::Instruction is a
2380 * llvm::Value and in the C API, instructions are modeled by
2381 * LLVMValueRef.
2382 *
2383 * This group also contains sub-groups which operate on specific
2384 * llvm::Instruction types, e.g. llvm::CallInst.
2385 *
2386 * @{
2387 */
2388
2389/**
2390 * Determine whether an instruction has any metadata attached.
2391 */
2392int LLVMHasMetadata(LLVMValueRef Val);
2393
2394/**
2395 * Return metadata associated with an instruction value.
2396 */
2397LLVMValueRef LLVMGetMetadata(LLVMValueRef Val, unsigned KindID);
2398
2399/**
2400 * Set metadata associated with an instruction value.
2401 */
2402void LLVMSetMetadata(LLVMValueRef Val, unsigned KindID, LLVMValueRef Node);
2403
2404/**
2405 * Obtain the basic block to which an instruction belongs.
2406 *
2407 * @see llvm::Instruction::getParent()
2408 */
Nate Begeman43c322b2011-08-23 20:27:46 +00002409LLVMBasicBlockRef LLVMGetInstructionParent(LLVMValueRef Inst);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002410
2411/**
2412 * Obtain the instruction that occurs after the one specified.
2413 *
2414 * The next instruction will be from the same basic block.
2415 *
2416 * If this is the last instruction in a basic block, NULL will be
2417 * returned.
2418 */
Gordon Henriksen054817c2008-03-19 03:47:18 +00002419LLVMValueRef LLVMGetNextInstruction(LLVMValueRef Inst);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002420
2421/**
Benjamin Kramerbde91762012-06-02 10:20:22 +00002422 * Obtain the instruction that occurred before this one.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002423 *
2424 * If the instruction is the first instruction in a basic block, NULL
2425 * will be returned.
2426 */
Gordon Henriksen054817c2008-03-19 03:47:18 +00002427LLVMValueRef LLVMGetPreviousInstruction(LLVMValueRef Inst);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002428
2429/**
2430 * Remove and delete an instruction.
2431 *
2432 * The instruction specified is removed from its containing building
2433 * block and then deleted.
2434 *
2435 * @see llvm::Instruction::eraseFromParent()
2436 */
Devang Pateldbebc6f2011-10-03 20:59:18 +00002437void LLVMInstructionEraseFromParent(LLVMValueRef Inst);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002438
2439/**
2440 * Obtain the code opcode for an individual instruction.
2441 *
2442 * @see llvm::Instruction::getOpCode()
2443 */
Torok Edwinab6158e2011-10-14 20:37:49 +00002444LLVMOpcode LLVMGetInstructionOpcode(LLVMValueRef Inst);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002445
2446/**
2447 * Obtain the predicate of an instruction.
2448 *
2449 * This is only valid for instructions that correspond to llvm::ICmpInst
2450 * or llvm::ConstantExpr whose opcode is llvm::Instruction::ICmp.
2451 *
2452 * @see llvm::ICmpInst::getPredicate()
2453 */
Torok Edwin60c40de2011-10-06 12:13:20 +00002454LLVMIntPredicate LLVMGetICmpPredicate(LLVMValueRef Inst);
Gordon Henriksen265f7802008-03-19 01:11:35 +00002455
Gregory Szorc34c863a2012-03-21 03:54:29 +00002456/**
Peter Zotov1d98e6d2014-10-28 19:46:44 +00002457 * Obtain the float predicate of an instruction.
2458 *
2459 * This is only valid for instructions that correspond to llvm::FCmpInst
2460 * or llvm::ConstantExpr whose opcode is llvm::Instruction::FCmp.
2461 *
2462 * @see llvm::FCmpInst::getPredicate()
2463 */
2464LLVMRealPredicate LLVMGetFCmpPredicate(LLVMValueRef Inst);
2465
2466/**
Peter Zotovaff492c2014-10-17 01:02:34 +00002467 * Create a copy of 'this' instruction that is identical in all ways
2468 * except the following:
2469 * * The instruction has no parent
2470 * * The instruction has no name
2471 *
2472 * @see llvm::Instruction::clone()
2473 */
2474LLVMValueRef LLVMInstructionClone(LLVMValueRef Inst);
2475
2476/**
Gregory Szorc34c863a2012-03-21 03:54:29 +00002477 * @defgroup LLVMCCoreValueInstructionCall Call Sites and Invocations
2478 *
2479 * Functions in this group apply to instructions that refer to call
2480 * sites and invocations. These correspond to C++ types in the
2481 * llvm::CallInst class tree.
2482 *
2483 * @{
2484 */
2485
2486/**
2487 * Set the calling convention for a call instruction.
2488 *
2489 * This expects an LLVMValueRef that corresponds to a llvm::CallInst or
2490 * llvm::InvokeInst.
2491 *
2492 * @see llvm::CallInst::setCallingConv()
2493 * @see llvm::InvokeInst::setCallingConv()
2494 */
Gordon Henriksen1158c532007-12-29 20:45:00 +00002495void LLVMSetInstructionCallConv(LLVMValueRef Instr, unsigned CC);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002496
2497/**
2498 * Obtain the calling convention for a call instruction.
2499 *
2500 * This is the opposite of LLVMSetInstructionCallConv(). Reads its
2501 * usage.
2502 *
2503 * @see LLVMSetInstructionCallConv()
2504 */
Gordon Henriksen1158c532007-12-29 20:45:00 +00002505unsigned LLVMGetInstructionCallConv(LLVMValueRef Instr);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002506
2507
Devang Patel4c758ea2008-09-25 21:00:45 +00002508void LLVMAddInstrAttribute(LLVMValueRef Instr, unsigned index, LLVMAttribute);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002509void LLVMRemoveInstrAttribute(LLVMValueRef Instr, unsigned index,
Devang Patel4c758ea2008-09-25 21:00:45 +00002510 LLVMAttribute);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002511void LLVMSetInstrParamAlignment(LLVMValueRef Instr, unsigned index,
Gordon Henriksen2d9cc212008-04-28 17:37:06 +00002512 unsigned align);
Gordon Henriksen1158c532007-12-29 20:45:00 +00002513
Gregory Szorc34c863a2012-03-21 03:54:29 +00002514/**
2515 * Obtain whether a call instruction is a tail call.
2516 *
2517 * This only works on llvm::CallInst instructions.
2518 *
2519 * @see llvm::CallInst::isTailCall()
2520 */
Chris Lattner25963c62010-01-09 22:27:07 +00002521LLVMBool LLVMIsTailCall(LLVMValueRef CallInst);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002522
2523/**
2524 * Set whether a call instruction is a tail call.
2525 *
2526 * This only works on llvm::CallInst instructions.
2527 *
2528 * @see llvm::CallInst::setTailCall()
2529 */
Chris Lattner25963c62010-01-09 22:27:07 +00002530void LLVMSetTailCall(LLVMValueRef CallInst, LLVMBool IsTailCall);
Gordon Henrikseneeb65372008-08-30 16:34:54 +00002531
Gregory Szorc34c863a2012-03-21 03:54:29 +00002532/**
2533 * @}
2534 */
2535
2536/**
Peter Zotov2481c752014-10-28 19:46:56 +00002537 * @defgroup LLVMCCoreValueInstructionTerminator Terminators
2538 *
2539 * Functions in this group only apply to instructions that map to
2540 * llvm::TerminatorInst instances.
2541 *
2542 * @{
2543 */
2544
2545/**
2546 * Return the number of successors that this terminator has.
2547 *
2548 * @see llvm::TerminatorInst::getNumSuccessors
2549 */
2550unsigned LLVMGetNumSuccessors(LLVMValueRef Term);
2551
2552/**
2553 * Return the specified successor.
2554 *
2555 * @see llvm::TerminatorInst::getSuccessor
2556 */
2557LLVMBasicBlockRef LLVMGetSuccessor(LLVMValueRef Term, unsigned i);
2558
2559/**
2560 * Update the specified successor to point at the provided block.
2561 *
2562 * @see llvm::TerminatorInst::setSuccessor
2563 */
2564void LLVMSetSuccessor(LLVMValueRef Term, unsigned i, LLVMBasicBlockRef block);
2565
2566/**
2567 * Return if a branch is conditional.
2568 *
2569 * This only works on llvm::BranchInst instructions.
2570 *
2571 * @see llvm::BranchInst::isConditional
2572 */
2573LLVMBool LLVMIsConditional(LLVMValueRef Branch);
2574
2575/**
2576 * Return the condition of a branch instruction.
2577 *
2578 * This only works on llvm::BranchInst instructions.
2579 *
2580 * @see llvm::BranchInst::getCondition
2581 */
2582LLVMValueRef LLVMGetCondition(LLVMValueRef Branch);
2583
2584/**
2585 * Set the condition of a branch instruction.
2586 *
2587 * This only works on llvm::BranchInst instructions.
2588 *
2589 * @see llvm::BranchInst::setCondition
2590 */
2591void LLVMSetCondition(LLVMValueRef Branch, LLVMValueRef Cond);
2592
2593/**
Gregory Szorc34c863a2012-03-21 03:54:29 +00002594 * Obtain the default destination basic block of a switch instruction.
2595 *
2596 * This only works on llvm::SwitchInst instructions.
2597 *
2598 * @see llvm::SwitchInst::getDefaultDest()
2599 */
Nate Begeman43c322b2011-08-23 20:27:46 +00002600LLVMBasicBlockRef LLVMGetSwitchDefaultDest(LLVMValueRef SwitchInstr);
2601
Gregory Szorc34c863a2012-03-21 03:54:29 +00002602/**
Peter Zotov2481c752014-10-28 19:46:56 +00002603 * @}
2604 */
2605
2606/**
Gregory Szorc34c863a2012-03-21 03:54:29 +00002607 * @defgroup LLVMCCoreValueInstructionPHINode PHI Nodes
2608 *
2609 * Functions in this group only apply to instructions that map to
2610 * llvm::PHINode instances.
2611 *
2612 * @{
2613 */
2614
2615/**
2616 * Add an incoming value to the end of a PHI list.
2617 */
Gordon Henriksen44dd8fb2007-10-08 18:14:39 +00002618void LLVMAddIncoming(LLVMValueRef PhiNode, LLVMValueRef *IncomingValues,
2619 LLVMBasicBlockRef *IncomingBlocks, unsigned Count);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002620
2621/**
2622 * Obtain the number of incoming basic blocks to a PHI node.
2623 */
Gordon Henriksen44dd8fb2007-10-08 18:14:39 +00002624unsigned LLVMCountIncoming(LLVMValueRef PhiNode);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002625
2626/**
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +00002627 * Obtain an incoming value to a PHI node as an LLVMValueRef.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002628 */
Gordon Henriksen44dd8fb2007-10-08 18:14:39 +00002629LLVMValueRef LLVMGetIncomingValue(LLVMValueRef PhiNode, unsigned Index);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002630
2631/**
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +00002632 * Obtain an incoming value to a PHI node as an LLVMBasicBlockRef.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002633 */
Gordon Henriksen44dd8fb2007-10-08 18:14:39 +00002634LLVMBasicBlockRef LLVMGetIncomingBlock(LLVMValueRef PhiNode, unsigned Index);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002635
Gregory Szorc34c863a2012-03-21 03:54:29 +00002636/**
2637 * @}
2638 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002639
Gregory Szorc34c863a2012-03-21 03:54:29 +00002640/**
2641 * @}
2642 */
2643
2644/**
2645 * @}
2646 */
2647
2648/**
2649 * @defgroup LLVMCCoreInstructionBuilder Instruction Builders
2650 *
2651 * An instruction builder represents a point within a basic block and is
2652 * the exclusive means of building instructions using the C interface.
2653 *
2654 * @{
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002655 */
2656
Erick Tryzelaar262332f2009-08-14 00:01:31 +00002657LLVMBuilderRef LLVMCreateBuilderInContext(LLVMContextRef C);
Gordon Henriksena735a9c2008-05-04 12:55:34 +00002658LLVMBuilderRef LLVMCreateBuilder(void);
Gordon Henriksen054817c2008-03-19 03:47:18 +00002659void LLVMPositionBuilder(LLVMBuilderRef Builder, LLVMBasicBlockRef Block,
2660 LLVMValueRef Instr);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002661void LLVMPositionBuilderBefore(LLVMBuilderRef Builder, LLVMValueRef Instr);
2662void LLVMPositionBuilderAtEnd(LLVMBuilderRef Builder, LLVMBasicBlockRef Block);
Gordon Henriksen265f7802008-03-19 01:11:35 +00002663LLVMBasicBlockRef LLVMGetInsertBlock(LLVMBuilderRef Builder);
Chris Lattner3d1f5522008-12-17 21:39:50 +00002664void LLVMClearInsertionPosition(LLVMBuilderRef Builder);
2665void LLVMInsertIntoBuilder(LLVMBuilderRef Builder, LLVMValueRef Instr);
Erick Tryzelaar9813bea2009-08-16 02:20:57 +00002666void LLVMInsertIntoBuilderWithName(LLVMBuilderRef Builder, LLVMValueRef Instr,
2667 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002668void LLVMDisposeBuilder(LLVMBuilderRef Builder);
2669
Erick Tryzelaard8531fa2010-02-28 09:45:59 +00002670/* Metadata */
2671void LLVMSetCurrentDebugLocation(LLVMBuilderRef Builder, LLVMValueRef L);
2672LLVMValueRef LLVMGetCurrentDebugLocation(LLVMBuilderRef Builder);
2673void LLVMSetInstDebugLocation(LLVMBuilderRef Builder, LLVMValueRef Inst);
2674
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002675/* Terminators */
2676LLVMValueRef LLVMBuildRetVoid(LLVMBuilderRef);
2677LLVMValueRef LLVMBuildRet(LLVMBuilderRef, LLVMValueRef V);
Erick Tryzelaarfd529d72009-08-19 08:36:49 +00002678LLVMValueRef LLVMBuildAggregateRet(LLVMBuilderRef, LLVMValueRef *RetVals,
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002679 unsigned N);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002680LLVMValueRef LLVMBuildBr(LLVMBuilderRef, LLVMBasicBlockRef Dest);
2681LLVMValueRef LLVMBuildCondBr(LLVMBuilderRef, LLVMValueRef If,
2682 LLVMBasicBlockRef Then, LLVMBasicBlockRef Else);
2683LLVMValueRef LLVMBuildSwitch(LLVMBuilderRef, LLVMValueRef V,
2684 LLVMBasicBlockRef Else, unsigned NumCases);
Erick Tryzelaar0fb26ef2010-02-28 09:46:06 +00002685LLVMValueRef LLVMBuildIndirectBr(LLVMBuilderRef B, LLVMValueRef Addr,
2686 unsigned NumDests);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002687LLVMValueRef LLVMBuildInvoke(LLVMBuilderRef, LLVMValueRef Fn,
2688 LLVMValueRef *Args, unsigned NumArgs,
2689 LLVMBasicBlockRef Then, LLVMBasicBlockRef Catch,
2690 const char *Name);
Benjamin Kramer5a6568832011-08-19 01:36:54 +00002691LLVMValueRef LLVMBuildLandingPad(LLVMBuilderRef B, LLVMTypeRef Ty,
Reid Kleckneref9828f2015-07-16 01:16:39 +00002692 LLVMValueRef PersFn, unsigned NumClauses,
2693 const char *Name);
Bill Wendlingf891bf82011-07-31 06:30:59 +00002694LLVMValueRef LLVMBuildResume(LLVMBuilderRef B, LLVMValueRef Exn);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002695LLVMValueRef LLVMBuildUnreachable(LLVMBuilderRef);
2696
Gordon Henriksen097102c2008-01-01 05:50:53 +00002697/* Add a case to the switch instruction */
2698void LLVMAddCase(LLVMValueRef Switch, LLVMValueRef OnVal,
2699 LLVMBasicBlockRef Dest);
2700
Erick Tryzelaar0fb26ef2010-02-28 09:46:06 +00002701/* Add a destination to the indirectbr instruction */
2702void LLVMAddDestination(LLVMValueRef IndirectBr, LLVMBasicBlockRef Dest);
2703
Bill Wendlingfae14752011-08-12 20:24:12 +00002704/* Add a catch or filter clause to the landingpad instruction */
2705void LLVMAddClause(LLVMValueRef LandingPad, LLVMValueRef ClauseVal);
2706
2707/* Set the 'cleanup' flag in the landingpad instruction */
2708void LLVMSetCleanup(LLVMValueRef LandingPad, LLVMBool Val);
2709
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002710/* Arithmetic */
2711LLVMValueRef LLVMBuildAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2712 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002713LLVMValueRef LLVMBuildNSWAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2714 const char *Name);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +00002715LLVMValueRef LLVMBuildNUWAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2716 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002717LLVMValueRef LLVMBuildFAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2718 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002719LLVMValueRef LLVMBuildSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2720 const char *Name);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +00002721LLVMValueRef LLVMBuildNSWSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2722 const char *Name);
2723LLVMValueRef LLVMBuildNUWSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2724 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002725LLVMValueRef LLVMBuildFSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2726 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002727LLVMValueRef LLVMBuildMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2728 const char *Name);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +00002729LLVMValueRef LLVMBuildNSWMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2730 const char *Name);
2731LLVMValueRef LLVMBuildNUWMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2732 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002733LLVMValueRef LLVMBuildFMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2734 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002735LLVMValueRef LLVMBuildUDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2736 const char *Name);
2737LLVMValueRef LLVMBuildSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2738 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002739LLVMValueRef LLVMBuildExactSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2740 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002741LLVMValueRef LLVMBuildFDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2742 const char *Name);
2743LLVMValueRef LLVMBuildURem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2744 const char *Name);
2745LLVMValueRef LLVMBuildSRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2746 const char *Name);
2747LLVMValueRef LLVMBuildFRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2748 const char *Name);
2749LLVMValueRef LLVMBuildShl(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2750 const char *Name);
2751LLVMValueRef LLVMBuildLShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2752 const char *Name);
2753LLVMValueRef LLVMBuildAShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2754 const char *Name);
2755LLVMValueRef LLVMBuildAnd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2756 const char *Name);
2757LLVMValueRef LLVMBuildOr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2758 const char *Name);
2759LLVMValueRef LLVMBuildXor(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2760 const char *Name);
Erick Tryzelaar31831792010-02-28 05:51:27 +00002761LLVMValueRef LLVMBuildBinOp(LLVMBuilderRef B, LLVMOpcode Op,
2762 LLVMValueRef LHS, LLVMValueRef RHS,
2763 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002764LLVMValueRef LLVMBuildNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +00002765LLVMValueRef LLVMBuildNSWNeg(LLVMBuilderRef B, LLVMValueRef V,
2766 const char *Name);
2767LLVMValueRef LLVMBuildNUWNeg(LLVMBuilderRef B, LLVMValueRef V,
2768 const char *Name);
Dan Gohmanf919bd62009-09-28 21:51:41 +00002769LLVMValueRef LLVMBuildFNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002770LLVMValueRef LLVMBuildNot(LLVMBuilderRef, LLVMValueRef V, const char *Name);
2771
2772/* Memory */
2773LLVMValueRef LLVMBuildMalloc(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
2774LLVMValueRef LLVMBuildArrayMalloc(LLVMBuilderRef, LLVMTypeRef Ty,
2775 LLVMValueRef Val, const char *Name);
2776LLVMValueRef LLVMBuildAlloca(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
2777LLVMValueRef LLVMBuildArrayAlloca(LLVMBuilderRef, LLVMTypeRef Ty,
2778 LLVMValueRef Val, const char *Name);
2779LLVMValueRef LLVMBuildFree(LLVMBuilderRef, LLVMValueRef PointerVal);
2780LLVMValueRef LLVMBuildLoad(LLVMBuilderRef, LLVMValueRef PointerVal,
2781 const char *Name);
2782LLVMValueRef LLVMBuildStore(LLVMBuilderRef, LLVMValueRef Val, LLVMValueRef Ptr);
2783LLVMValueRef LLVMBuildGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
2784 LLVMValueRef *Indices, unsigned NumIndices,
2785 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002786LLVMValueRef LLVMBuildInBoundsGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
2787 LLVMValueRef *Indices, unsigned NumIndices,
2788 const char *Name);
2789LLVMValueRef LLVMBuildStructGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
2790 unsigned Idx, const char *Name);
2791LLVMValueRef LLVMBuildGlobalString(LLVMBuilderRef B, const char *Str,
2792 const char *Name);
2793LLVMValueRef LLVMBuildGlobalStringPtr(LLVMBuilderRef B, const char *Str,
2794 const char *Name);
Chris Lattner2cc6f9d2012-03-22 03:54:15 +00002795LLVMBool LLVMGetVolatile(LLVMValueRef MemoryAccessInst);
2796void LLVMSetVolatile(LLVMValueRef MemoryAccessInst, LLVMBool IsVolatile);
Andrew Wilkinsb7362ce2015-08-02 12:16:57 +00002797LLVMAtomicOrdering LLVMGetOrdering(LLVMValueRef MemoryAccessInst);
2798void LLVMSetOrdering(LLVMValueRef MemoryAccessInst, LLVMAtomicOrdering Ordering);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002799
2800/* Casts */
2801LLVMValueRef LLVMBuildTrunc(LLVMBuilderRef, LLVMValueRef Val,
2802 LLVMTypeRef DestTy, const char *Name);
2803LLVMValueRef LLVMBuildZExt(LLVMBuilderRef, LLVMValueRef Val,
2804 LLVMTypeRef DestTy, const char *Name);
2805LLVMValueRef LLVMBuildSExt(LLVMBuilderRef, LLVMValueRef Val,
2806 LLVMTypeRef DestTy, const char *Name);
2807LLVMValueRef LLVMBuildFPToUI(LLVMBuilderRef, LLVMValueRef Val,
2808 LLVMTypeRef DestTy, const char *Name);
2809LLVMValueRef LLVMBuildFPToSI(LLVMBuilderRef, LLVMValueRef Val,
2810 LLVMTypeRef DestTy, const char *Name);
2811LLVMValueRef LLVMBuildUIToFP(LLVMBuilderRef, LLVMValueRef Val,
2812 LLVMTypeRef DestTy, const char *Name);
2813LLVMValueRef LLVMBuildSIToFP(LLVMBuilderRef, LLVMValueRef Val,
2814 LLVMTypeRef DestTy, const char *Name);
2815LLVMValueRef LLVMBuildFPTrunc(LLVMBuilderRef, LLVMValueRef Val,
2816 LLVMTypeRef DestTy, const char *Name);
2817LLVMValueRef LLVMBuildFPExt(LLVMBuilderRef, LLVMValueRef Val,
2818 LLVMTypeRef DestTy, const char *Name);
2819LLVMValueRef LLVMBuildPtrToInt(LLVMBuilderRef, LLVMValueRef Val,
2820 LLVMTypeRef DestTy, const char *Name);
2821LLVMValueRef LLVMBuildIntToPtr(LLVMBuilderRef, LLVMValueRef Val,
2822 LLVMTypeRef DestTy, const char *Name);
2823LLVMValueRef LLVMBuildBitCast(LLVMBuilderRef, LLVMValueRef Val,
2824 LLVMTypeRef DestTy, const char *Name);
Matt Arsenaultb03bd4d2013-11-15 01:34:59 +00002825LLVMValueRef LLVMBuildAddrSpaceCast(LLVMBuilderRef, LLVMValueRef Val,
2826 LLVMTypeRef DestTy, const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002827LLVMValueRef LLVMBuildZExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
2828 LLVMTypeRef DestTy, const char *Name);
2829LLVMValueRef LLVMBuildSExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
2830 LLVMTypeRef DestTy, const char *Name);
2831LLVMValueRef LLVMBuildTruncOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
2832 LLVMTypeRef DestTy, const char *Name);
Erick Tryzelaar31831792010-02-28 05:51:27 +00002833LLVMValueRef LLVMBuildCast(LLVMBuilderRef B, LLVMOpcode Op, LLVMValueRef Val,
2834 LLVMTypeRef DestTy, const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002835LLVMValueRef LLVMBuildPointerCast(LLVMBuilderRef, LLVMValueRef Val,
2836 LLVMTypeRef DestTy, const char *Name);
Duncan Sands9d786d72009-11-23 10:49:03 +00002837LLVMValueRef LLVMBuildIntCast(LLVMBuilderRef, LLVMValueRef Val, /*Signed cast!*/
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002838 LLVMTypeRef DestTy, const char *Name);
2839LLVMValueRef LLVMBuildFPCast(LLVMBuilderRef, LLVMValueRef Val,
2840 LLVMTypeRef DestTy, const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002841
2842/* Comparisons */
2843LLVMValueRef LLVMBuildICmp(LLVMBuilderRef, LLVMIntPredicate Op,
2844 LLVMValueRef LHS, LLVMValueRef RHS,
2845 const char *Name);
2846LLVMValueRef LLVMBuildFCmp(LLVMBuilderRef, LLVMRealPredicate Op,
2847 LLVMValueRef LHS, LLVMValueRef RHS,
2848 const char *Name);
2849
2850/* Miscellaneous instructions */
2851LLVMValueRef LLVMBuildPhi(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
2852LLVMValueRef LLVMBuildCall(LLVMBuilderRef, LLVMValueRef Fn,
2853 LLVMValueRef *Args, unsigned NumArgs,
2854 const char *Name);
2855LLVMValueRef LLVMBuildSelect(LLVMBuilderRef, LLVMValueRef If,
2856 LLVMValueRef Then, LLVMValueRef Else,
2857 const char *Name);
2858LLVMValueRef LLVMBuildVAArg(LLVMBuilderRef, LLVMValueRef List, LLVMTypeRef Ty,
2859 const char *Name);
2860LLVMValueRef LLVMBuildExtractElement(LLVMBuilderRef, LLVMValueRef VecVal,
2861 LLVMValueRef Index, const char *Name);
2862LLVMValueRef LLVMBuildInsertElement(LLVMBuilderRef, LLVMValueRef VecVal,
2863 LLVMValueRef EltVal, LLVMValueRef Index,
2864 const char *Name);
2865LLVMValueRef LLVMBuildShuffleVector(LLVMBuilderRef, LLVMValueRef V1,
2866 LLVMValueRef V2, LLVMValueRef Mask,
2867 const char *Name);
Dan Gohmand5104a52008-11-03 22:55:43 +00002868LLVMValueRef LLVMBuildExtractValue(LLVMBuilderRef, LLVMValueRef AggVal,
2869 unsigned Index, const char *Name);
2870LLVMValueRef LLVMBuildInsertValue(LLVMBuilderRef, LLVMValueRef AggVal,
2871 LLVMValueRef EltVal, unsigned Index,
2872 const char *Name);
Gordon Henriksen76a03742007-09-18 03:18:57 +00002873
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002874LLVMValueRef LLVMBuildIsNull(LLVMBuilderRef, LLVMValueRef Val,
2875 const char *Name);
2876LLVMValueRef LLVMBuildIsNotNull(LLVMBuilderRef, LLVMValueRef Val,
2877 const char *Name);
2878LLVMValueRef LLVMBuildPtrDiff(LLVMBuilderRef, LLVMValueRef LHS,
2879 LLVMValueRef RHS, const char *Name);
Filip Pizlo0d3f7ec2013-11-20 00:07:49 +00002880LLVMValueRef LLVMBuildFence(LLVMBuilderRef B, LLVMAtomicOrdering ordering,
2881 LLVMBool singleThread, const char *Name);
2882LLVMValueRef LLVMBuildAtomicRMW(LLVMBuilderRef B, LLVMAtomicRMWBinOp op,
NAKAMURA Takumia3a81352013-10-23 17:56:29 +00002883 LLVMValueRef PTR, LLVMValueRef Val,
2884 LLVMAtomicOrdering ordering,
Carlo Kok8c6719b2013-04-23 13:21:19 +00002885 LLVMBool singleThread);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002886
Gregory Szorc34c863a2012-03-21 03:54:29 +00002887/**
2888 * @}
2889 */
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00002890
Gregory Szorc34c863a2012-03-21 03:54:29 +00002891/**
2892 * @defgroup LLVMCCoreModuleProvider Module Providers
2893 *
2894 * @{
2895 */
Gordon Henriksen0a68fe22007-12-12 01:04:30 +00002896
Gregory Szorc34c863a2012-03-21 03:54:29 +00002897/**
2898 * Changes the type of M so it can be passed to FunctionPassManagers and the
Jeffrey Yasskin091217b2010-01-27 20:34:15 +00002899 * JIT. They take ModuleProviders for historical reasons.
Gordon Henriksen0a68fe22007-12-12 01:04:30 +00002900 */
2901LLVMModuleProviderRef
2902LLVMCreateModuleProviderForExistingModule(LLVMModuleRef M);
2903
Gregory Szorc34c863a2012-03-21 03:54:29 +00002904/**
2905 * Destroys the module M.
Gordon Henriksen0a68fe22007-12-12 01:04:30 +00002906 */
Jeffrey Yasskin091217b2010-01-27 20:34:15 +00002907void LLVMDisposeModuleProvider(LLVMModuleProviderRef M);
Gordon Henriksen0a68fe22007-12-12 01:04:30 +00002908
Gregory Szorc34c863a2012-03-21 03:54:29 +00002909/**
2910 * @}
2911 */
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00002912
Gregory Szorc34c863a2012-03-21 03:54:29 +00002913/**
2914 * @defgroup LLVMCCoreMemoryBuffers Memory Buffers
2915 *
2916 * @{
2917 */
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00002918
Chris Lattner25963c62010-01-09 22:27:07 +00002919LLVMBool LLVMCreateMemoryBufferWithContentsOfFile(const char *Path,
2920 LLVMMemoryBufferRef *OutMemBuf,
2921 char **OutMessage);
2922LLVMBool LLVMCreateMemoryBufferWithSTDIN(LLVMMemoryBufferRef *OutMemBuf,
2923 char **OutMessage);
Bill Wendling526276a2013-02-14 19:11:28 +00002924LLVMMemoryBufferRef LLVMCreateMemoryBufferWithMemoryRange(const char *InputData,
2925 size_t InputDataLength,
2926 const char *BufferName,
Bill Wendlingc9baa962013-02-14 19:39:14 +00002927 LLVMBool RequiresNullTerminator);
Bill Wendling526276a2013-02-14 19:11:28 +00002928LLVMMemoryBufferRef LLVMCreateMemoryBufferWithMemoryRangeCopy(const char *InputData,
2929 size_t InputDataLength,
2930 const char *BufferName);
Tom Stellard62c03202013-04-18 19:50:53 +00002931const char *LLVMGetBufferStart(LLVMMemoryBufferRef MemBuf);
Tom Stellardb7fb7242013-04-16 23:12:51 +00002932size_t LLVMGetBufferSize(LLVMMemoryBufferRef MemBuf);
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00002933void LLVMDisposeMemoryBuffer(LLVMMemoryBufferRef MemBuf);
2934
Gregory Szorc34c863a2012-03-21 03:54:29 +00002935/**
2936 * @}
2937 */
2938
2939/**
2940 * @defgroup LLVMCCorePassRegistry Pass Registry
2941 *
2942 * @{
2943 */
Owen Anderson4698c5d2010-10-07 17:55:47 +00002944
2945/** Return the global pass registry, for use with initialization functions.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002946 @see llvm::PassRegistry::getPassRegistry */
Owen Anderson4698c5d2010-10-07 17:55:47 +00002947LLVMPassRegistryRef LLVMGetGlobalPassRegistry(void);
Gordon Henriksen878114b2008-03-16 04:20:44 +00002948
Gregory Szorc34c863a2012-03-21 03:54:29 +00002949/**
2950 * @}
2951 */
2952
2953/**
2954 * @defgroup LLVMCCorePassManagers Pass Managers
2955 *
2956 * @{
2957 */
Gordon Henriksen878114b2008-03-16 04:20:44 +00002958
2959/** Constructs a new whole-module pass pipeline. This type of pipeline is
2960 suitable for link-time optimization and whole-module transformations.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002961 @see llvm::PassManager::PassManager */
Gordon Henriksena735a9c2008-05-04 12:55:34 +00002962LLVMPassManagerRef LLVMCreatePassManager(void);
Gordon Henriksen878114b2008-03-16 04:20:44 +00002963
2964/** Constructs a new function-by-function pass pipeline over the module
2965 provider. It does not take ownership of the module provider. This type of
2966 pipeline is suitable for code generation and JIT compilation tasks.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002967 @see llvm::FunctionPassManager::FunctionPassManager */
Erick Tryzelaarad0e0cb2010-03-02 23:58:54 +00002968LLVMPassManagerRef LLVMCreateFunctionPassManagerForModule(LLVMModuleRef M);
2969
2970/** Deprecated: Use LLVMCreateFunctionPassManagerForModule instead. */
Gordon Henriksen878114b2008-03-16 04:20:44 +00002971LLVMPassManagerRef LLVMCreateFunctionPassManager(LLVMModuleProviderRef MP);
2972
2973/** Initializes, executes on the provided module, and finalizes all of the
2974 passes scheduled in the pass manager. Returns 1 if any of the passes
Gregory Szorc34c863a2012-03-21 03:54:29 +00002975 modified the module, 0 otherwise.
2976 @see llvm::PassManager::run(Module&) */
Chris Lattner25963c62010-01-09 22:27:07 +00002977LLVMBool LLVMRunPassManager(LLVMPassManagerRef PM, LLVMModuleRef M);
Gordon Henriksen878114b2008-03-16 04:20:44 +00002978
2979/** Initializes all of the function passes scheduled in the function pass
2980 manager. Returns 1 if any of the passes modified the module, 0 otherwise.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002981 @see llvm::FunctionPassManager::doInitialization */
Chris Lattner25963c62010-01-09 22:27:07 +00002982LLVMBool LLVMInitializeFunctionPassManager(LLVMPassManagerRef FPM);
Gordon Henriksen878114b2008-03-16 04:20:44 +00002983
2984/** Executes all of the function passes scheduled in the function pass manager
2985 on the provided function. Returns 1 if any of the passes modified the
2986 function, false otherwise.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002987 @see llvm::FunctionPassManager::run(Function&) */
Chris Lattner25963c62010-01-09 22:27:07 +00002988LLVMBool LLVMRunFunctionPassManager(LLVMPassManagerRef FPM, LLVMValueRef F);
Gordon Henriksen878114b2008-03-16 04:20:44 +00002989
2990/** Finalizes all of the function passes scheduled in in the function pass
2991 manager. Returns 1 if any of the passes modified the module, 0 otherwise.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002992 @see llvm::FunctionPassManager::doFinalization */
Chris Lattner25963c62010-01-09 22:27:07 +00002993LLVMBool LLVMFinalizeFunctionPassManager(LLVMPassManagerRef FPM);
Gordon Henriksen878114b2008-03-16 04:20:44 +00002994
2995/** Frees the memory of a pass pipeline. For function pipelines, does not free
2996 the module provider.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002997 @see llvm::PassManagerBase::~PassManagerBase. */
Gordon Henriksen878114b2008-03-16 04:20:44 +00002998void LLVMDisposePassManager(LLVMPassManagerRef PM);
2999
Gregory Szorc34c863a2012-03-21 03:54:29 +00003000/**
3001 * @}
3002 */
3003
3004/**
Duncan Sands1cba0a82013-02-17 16:35:51 +00003005 * @defgroup LLVMCCoreThreading Threading
3006 *
3007 * Handle the structures needed to make LLVM safe for multithreading.
3008 *
3009 * @{
3010 */
3011
Chandler Carruth39cd2162014-06-27 15:13:01 +00003012/** Deprecated: Multi-threading can only be enabled/disabled with the compile
3013 time define LLVM_ENABLE_THREADS. This function always returns
3014 LLVMIsMultithreaded(). */
Benjamin Kramer325ec892013-10-23 16:57:34 +00003015LLVMBool LLVMStartMultithreaded(void);
Duncan Sands1cba0a82013-02-17 16:35:51 +00003016
Chandler Carruth39cd2162014-06-27 15:13:01 +00003017/** Deprecated: Multi-threading can only be enabled/disabled with the compile
3018 time define LLVM_ENABLE_THREADS. */
Benjamin Kramer325ec892013-10-23 16:57:34 +00003019void LLVMStopMultithreaded(void);
Duncan Sands1cba0a82013-02-17 16:35:51 +00003020
3021/** Check whether LLVM is executing in thread-safe mode or not.
3022 @see llvm::llvm_is_multithreaded */
Benjamin Kramer325ec892013-10-23 16:57:34 +00003023LLVMBool LLVMIsMultithreaded(void);
Duncan Sands1cba0a82013-02-17 16:35:51 +00003024
3025/**
3026 * @}
3027 */
3028
3029/**
Gregory Szorc34c863a2012-03-21 03:54:29 +00003030 * @}
3031 */
3032
3033/**
3034 * @}
3035 */
Gordon Henriksen878114b2008-03-16 04:20:44 +00003036
Gordon Henriksen76a03742007-09-18 03:18:57 +00003037#ifdef __cplusplus
3038}
Eugene Zelenkoffec81c2015-11-04 22:32:32 +00003039#endif
Gordon Henriksen7330acd2007-10-05 23:59:36 +00003040
Eugene Zelenkoffec81c2015-11-04 22:32:32 +00003041#endif /* LLVM_C_CORE_H */