blob: a84a0313211315d094a9d0a81836b65a353d74fc [file] [log] [blame]
Gordon Henriksen76a03742007-09-18 03:18:57 +00001/*===-- llvm-c/Core.h - Core Library C Interface ------------------*- C -*-===*\
2|* *|
3|* The LLVM Compiler Infrastructure *|
4|* *|
Chris Lattnere9cc7422007-12-29 19:59:42 +00005|* This file is distributed under the University of Illinois Open Source *|
6|* License. See LICENSE.TXT for details. *|
Gordon Henriksen76a03742007-09-18 03:18:57 +00007|* *|
8|*===----------------------------------------------------------------------===*|
9|* *|
10|* This header declares the C interface to libLLVMCore.a, which implements *|
11|* the LLVM intermediate representation. *|
12|* *|
Gordon Henriksen76a03742007-09-18 03:18:57 +000013\*===----------------------------------------------------------------------===*/
14
15#ifndef LLVM_C_CORE_H
16#define LLVM_C_CORE_H
17
Michael J. Spencerab425d82010-11-29 18:47:54 +000018#include "llvm/Support/DataTypes.h"
Erick Tryzelaardd991352009-08-16 23:36:46 +000019
Evan Cheng2e254d02013-04-04 17:40:53 +000020#ifdef __cplusplus
Gordon Henriksen76a03742007-09-18 03:18:57 +000021extern "C" {
22#endif
23
Gregory Szorc34c863a2012-03-21 03:54:29 +000024/**
25 * @defgroup LLVMC LLVM-C: C interface to LLVM
26 *
27 * This module exposes parts of the LLVM library as a C API.
28 *
29 * @{
30 */
31
32/**
33 * @defgroup LLVMCTransforms Transforms
34 */
35
36/**
37 * @defgroup LLVMCCore Core
38 *
39 * This modules provide an interface to libLLVMCore, which implements
40 * the LLVM intermediate representation as well as other related types
41 * and utilities.
42 *
43 * LLVM uses a polymorphic type hierarchy which C cannot represent, therefore
44 * parameters must be passed as base types. Despite the declared types, most
45 * of the functions provided operate only on branches of the type hierarchy.
46 * The declared parameter names are descriptive and specify which type is
47 * required. Additionally, each type hierarchy is documented along with the
48 * functions that operate upon it. For more detail, refer to LLVM's C++ code.
Eli Bendersky870d0572012-08-10 18:26:20 +000049 * If in doubt, refer to Core.cpp, which performs parameter downcasts in the
Gregory Szorc34c863a2012-03-21 03:54:29 +000050 * form unwrap<RequiredType>(Param).
51 *
52 * Many exotic languages can interoperate with C code but have a harder time
53 * with C++ due to name mangling. So in addition to C, this interface enables
54 * tools written in such languages.
55 *
Gregory Szorc34c863a2012-03-21 03:54:29 +000056 * @{
57 */
58
59/**
60 * @defgroup LLVMCCoreTypes Types and Enumerations
61 *
62 * @{
63 */
Gordon Henriksen76a03742007-09-18 03:18:57 +000064
Chris Lattner25963c62010-01-09 22:27:07 +000065typedef int LLVMBool;
66
Gordon Henriksen76a03742007-09-18 03:18:57 +000067/* Opaque types. */
Gordon Henriksen4a4d7352007-12-30 17:46:33 +000068
69/**
Gregory Szorc34c863a2012-03-21 03:54:29 +000070 * The top-level container for all LLVM global data. See the LLVMContext class.
Owen Anderson6773d382009-07-01 16:58:40 +000071 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +000072typedef struct LLVMOpaqueContext *LLVMContextRef;
Owen Anderson6773d382009-07-01 16:58:40 +000073
74/**
Gordon Henriksen4a4d7352007-12-30 17:46:33 +000075 * The top-level container for all other LLVM Intermediate Representation (IR)
Gregory Szorc34c863a2012-03-21 03:54:29 +000076 * objects.
77 *
78 * @see llvm::Module
Gordon Henriksen4a4d7352007-12-30 17:46:33 +000079 */
Gordon Henriksen76a03742007-09-18 03:18:57 +000080typedef struct LLVMOpaqueModule *LLVMModuleRef;
Gordon Henriksen4a4d7352007-12-30 17:46:33 +000081
82/**
Gregory Szorc34c863a2012-03-21 03:54:29 +000083 * Each value in the LLVM IR has a type, an LLVMTypeRef.
84 *
85 * @see llvm::Type
Gordon Henriksen4a4d7352007-12-30 17:46:33 +000086 */
Gordon Henriksen76a03742007-09-18 03:18:57 +000087typedef struct LLVMOpaqueType *LLVMTypeRef;
Gordon Henriksen4a4d7352007-12-30 17:46:33 +000088
Gregory Szorc34c863a2012-03-21 03:54:29 +000089/**
90 * Represents an individual value in LLVM IR.
91 *
92 * This models llvm::Value.
93 */
Gordon Henriksen76a03742007-09-18 03:18:57 +000094typedef struct LLVMOpaqueValue *LLVMValueRef;
Gregory Szorc34c863a2012-03-21 03:54:29 +000095
96/**
Eli Bendersky870d0572012-08-10 18:26:20 +000097 * Represents a basic block of instructions in LLVM IR.
Gregory Szorc34c863a2012-03-21 03:54:29 +000098 *
99 * This models llvm::BasicBlock.
100 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000101typedef struct LLVMOpaqueBasicBlock *LLVMBasicBlockRef;
Gregory Szorc34c863a2012-03-21 03:54:29 +0000102
103/**
104 * Represents an LLVM basic block builder.
105 *
106 * This models llvm::IRBuilder.
107 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000108typedef struct LLVMOpaqueBuilder *LLVMBuilderRef;
Gordon Henriksen34eb6d82007-12-19 22:30:40 +0000109
Gregory Szorc34c863a2012-03-21 03:54:29 +0000110/**
111 * Interface used to provide a module to JIT or interpreter.
112 * This is now just a synonym for llvm::Module, but we have to keep using the
113 * different type to keep binary compatibility.
Gordon Henriksen34eb6d82007-12-19 22:30:40 +0000114 */
Gordon Henriksen0a68fe22007-12-12 01:04:30 +0000115typedef struct LLVMOpaqueModuleProvider *LLVMModuleProviderRef;
Gordon Henriksen76a03742007-09-18 03:18:57 +0000116
Gregory Szorc34c863a2012-03-21 03:54:29 +0000117/**
118 * Used to provide a module to JIT or interpreter.
119 *
120 * @see llvm::MemoryBuffer
Gordon Henriksen34eb6d82007-12-19 22:30:40 +0000121 */
122typedef struct LLVMOpaqueMemoryBuffer *LLVMMemoryBufferRef;
123
Gregory Szorc34c863a2012-03-21 03:54:29 +0000124/** @see llvm::PassManagerBase */
Gordon Henriksen878114b2008-03-16 04:20:44 +0000125typedef struct LLVMOpaquePassManager *LLVMPassManagerRef;
126
Gregory Szorc34c863a2012-03-21 03:54:29 +0000127/** @see llvm::PassRegistry */
Owen Anderson4698c5d2010-10-07 17:55:47 +0000128typedef struct LLVMOpaquePassRegistry *LLVMPassRegistryRef;
129
Gregory Szorc34c863a2012-03-21 03:54:29 +0000130/**
131 * Used to get the users and usees of a Value.
132 *
133 * @see llvm::Use */
Erick Tryzelaar9f9857e2010-03-02 20:32:28 +0000134typedef struct LLVMOpaqueUse *LLVMUseRef;
Chris Lattner40cf28d2009-10-12 04:01:02 +0000135
Gordon Henriksen76a03742007-09-18 03:18:57 +0000136typedef enum {
Devang Patel4c758ea2008-09-25 21:00:45 +0000137 LLVMZExtAttribute = 1<<0,
138 LLVMSExtAttribute = 1<<1,
139 LLVMNoReturnAttribute = 1<<2,
140 LLVMInRegAttribute = 1<<3,
141 LLVMStructRetAttribute = 1<<4,
142 LLVMNoUnwindAttribute = 1<<5,
143 LLVMNoAliasAttribute = 1<<6,
144 LLVMByValAttribute = 1<<7,
145 LLVMNestAttribute = 1<<8,
146 LLVMReadNoneAttribute = 1<<9,
Anton Korobeynikovc8ce7b082009-07-17 18:07:26 +0000147 LLVMReadOnlyAttribute = 1<<10,
Anton Korobeynikov9750be92009-07-17 18:57:16 +0000148 LLVMNoInlineAttribute = 1<<11,
149 LLVMAlwaysInlineAttribute = 1<<12,
150 LLVMOptimizeForSizeAttribute = 1<<13,
151 LLVMStackProtectAttribute = 1<<14,
152 LLVMStackProtectReqAttribute = 1<<15,
Erick Tryzelaar8f69fea2010-03-03 23:51:25 +0000153 LLVMAlignment = 31<<16,
Anton Korobeynikov9750be92009-07-17 18:57:16 +0000154 LLVMNoCaptureAttribute = 1<<21,
155 LLVMNoRedZoneAttribute = 1<<22,
156 LLVMNoImplicitFloatAttribute = 1<<23,
Jakob Stoklund Olesen74bb06c2010-02-06 01:16:28 +0000157 LLVMNakedAttribute = 1<<24,
Erick Tryzelaar8f69fea2010-03-03 23:51:25 +0000158 LLVMInlineHintAttribute = 1<<25,
Torok Edwin1db48c02011-10-06 12:13:32 +0000159 LLVMStackAlignment = 7<<26,
160 LLVMReturnsTwice = 1 << 29,
161 LLVMUWTable = 1 << 30,
Chandler Carruth44d69d92012-01-25 07:40:15 +0000162 LLVMNonLazyBind = 1 << 31
163
Bill Wendlingd154e2832013-01-23 06:41:41 +0000164 /* FIXME: These attributes are currently not included in the C API as
Nuno Lopesdef4229972012-09-02 14:19:21 +0000165 a temporary measure until the API/ABI impact to the C API is understood
166 and the path forward agreed upon.
Bill Wendlingd154e2832013-01-23 06:41:41 +0000167 LLVMAddressSafety = 1ULL << 32,
Andrea Di Biagio377496b2013-08-23 11:53:55 +0000168 LLVMStackProtectStrongAttribute = 1ULL<<33,
169 LLVMCold = 1ULL << 34,
Reid Klecknera534a382013-12-19 02:14:12 +0000170 LLVMOptimizeNone = 1ULL << 35,
171 LLVMInAllocaAttribute = 1ULL << 36
Nuno Lopesdef4229972012-09-02 14:19:21 +0000172 */
Devang Patel4c758ea2008-09-25 21:00:45 +0000173} LLVMAttribute;
Gordon Henriksen2d9cc212008-04-28 17:37:06 +0000174
175typedef enum {
Bill Wendlingda52cec2010-02-15 20:53:17 +0000176 /* Terminator Instructions */
Chris Lattner40cf28d2009-10-12 04:01:02 +0000177 LLVMRet = 1,
178 LLVMBr = 2,
179 LLVMSwitch = 3,
Bill Wendling07d6d762010-02-15 20:50:51 +0000180 LLVMIndirectBr = 4,
181 LLVMInvoke = 5,
Bill Wendling46ffaa92011-08-02 06:20:17 +0000182 /* removed 6 due to API changes */
Bill Wendling2641d132011-07-27 21:00:28 +0000183 LLVMUnreachable = 7,
Bill Wendling07d6d762010-02-15 20:50:51 +0000184
Bill Wendlingda52cec2010-02-15 20:53:17 +0000185 /* Standard Binary Operators */
Bill Wendling2641d132011-07-27 21:00:28 +0000186 LLVMAdd = 8,
187 LLVMFAdd = 9,
188 LLVMSub = 10,
189 LLVMFSub = 11,
190 LLVMMul = 12,
191 LLVMFMul = 13,
192 LLVMUDiv = 14,
193 LLVMSDiv = 15,
194 LLVMFDiv = 16,
195 LLVMURem = 17,
196 LLVMSRem = 18,
197 LLVMFRem = 19,
Bill Wendling07d6d762010-02-15 20:50:51 +0000198
Bill Wendlingda52cec2010-02-15 20:53:17 +0000199 /* Logical Operators */
Bill Wendling2641d132011-07-27 21:00:28 +0000200 LLVMShl = 20,
201 LLVMLShr = 21,
202 LLVMAShr = 22,
203 LLVMAnd = 23,
204 LLVMOr = 24,
205 LLVMXor = 25,
Bill Wendling07d6d762010-02-15 20:50:51 +0000206
Bill Wendlingda52cec2010-02-15 20:53:17 +0000207 /* Memory Operators */
Bill Wendling2641d132011-07-27 21:00:28 +0000208 LLVMAlloca = 26,
209 LLVMLoad = 27,
210 LLVMStore = 28,
211 LLVMGetElementPtr = 29,
Bill Wendling07d6d762010-02-15 20:50:51 +0000212
Bill Wendlingda52cec2010-02-15 20:53:17 +0000213 /* Cast Operators */
Bill Wendling2641d132011-07-27 21:00:28 +0000214 LLVMTrunc = 30,
215 LLVMZExt = 31,
216 LLVMSExt = 32,
217 LLVMFPToUI = 33,
218 LLVMFPToSI = 34,
219 LLVMUIToFP = 35,
220 LLVMSIToFP = 36,
221 LLVMFPTrunc = 37,
222 LLVMFPExt = 38,
223 LLVMPtrToInt = 39,
224 LLVMIntToPtr = 40,
225 LLVMBitCast = 41,
Matt Arsenaultb03bd4d2013-11-15 01:34:59 +0000226 LLVMAddrSpaceCast = 60,
Bill Wendling07d6d762010-02-15 20:50:51 +0000227
Bill Wendlingda52cec2010-02-15 20:53:17 +0000228 /* Other Operators */
Bill Wendling2641d132011-07-27 21:00:28 +0000229 LLVMICmp = 42,
230 LLVMFCmp = 43,
231 LLVMPHI = 44,
232 LLVMCall = 45,
233 LLVMSelect = 46,
Torok Edwin05dc9d62011-10-06 12:39:34 +0000234 LLVMUserOp1 = 47,
235 LLVMUserOp2 = 48,
Bill Wendling2641d132011-07-27 21:00:28 +0000236 LLVMVAArg = 49,
237 LLVMExtractElement = 50,
238 LLVMInsertElement = 51,
239 LLVMShuffleVector = 52,
240 LLVMExtractValue = 53,
241 LLVMInsertValue = 54,
Eli Friedman4fc946c2011-07-27 18:59:19 +0000242
243 /* Atomic operators */
Bill Wendling2641d132011-07-27 21:00:28 +0000244 LLVMFence = 55,
Eli Friedmanc9a551e2011-07-28 21:48:00 +0000245 LLVMAtomicCmpXchg = 56,
Bill Wendlingf891bf82011-07-31 06:30:59 +0000246 LLVMAtomicRMW = 57,
247
248 /* Exception Handling Operators */
Bill Wendlingfae14752011-08-12 20:24:12 +0000249 LLVMResume = 58,
Bill Wendling0aef16a2012-02-06 21:44:22 +0000250 LLVMLandingPad = 59
Bill Wendling2641d132011-07-27 21:00:28 +0000251
Chris Lattner40cf28d2009-10-12 04:01:02 +0000252} LLVMOpcode;
253
254typedef enum {
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000255 LLVMVoidTypeKind, /**< type with no size */
Dan Gohman518cda42011-12-17 00:04:22 +0000256 LLVMHalfTypeKind, /**< 16 bit floating point type */
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000257 LLVMFloatTypeKind, /**< 32 bit floating point type */
258 LLVMDoubleTypeKind, /**< 64 bit floating point type */
259 LLVMX86_FP80TypeKind, /**< 80 bit floating point type (X87) */
260 LLVMFP128TypeKind, /**< 128 bit floating point type (112-bit mantissa)*/
261 LLVMPPC_FP128TypeKind, /**< 128 bit floating point type (two 64-bits) */
262 LLVMLabelTypeKind, /**< Labels */
263 LLVMIntegerTypeKind, /**< Arbitrary bit width integers */
264 LLVMFunctionTypeKind, /**< Functions */
265 LLVMStructTypeKind, /**< Structures */
266 LLVMArrayTypeKind, /**< Arrays */
267 LLVMPointerTypeKind, /**< Pointers */
Chris Lattnerdac44ec2009-07-15 22:00:31 +0000268 LLVMVectorTypeKind, /**< SIMD 'packed' format, or other vector type */
Dale Johannesenbaa5d042010-09-10 20:55:01 +0000269 LLVMMetadataTypeKind, /**< Metadata */
270 LLVMX86_MMXTypeKind /**< X86 MMX */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000271} LLVMTypeKind;
272
273typedef enum {
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000274 LLVMExternalLinkage, /**< Externally visible function */
Chris Lattner2dba0f02009-04-13 06:25:37 +0000275 LLVMAvailableExternallyLinkage,
Duncan Sands12da8ce2009-03-07 15:45:40 +0000276 LLVMLinkOnceAnyLinkage, /**< Keep one copy of function when linking (inline)*/
277 LLVMLinkOnceODRLinkage, /**< Same, but only replaced by something
278 equivalent. */
Rafael Espindola716e7402013-11-01 17:09:14 +0000279 LLVMLinkOnceODRAutoHideLinkage, /**< Obsolete */
Duncan Sands12da8ce2009-03-07 15:45:40 +0000280 LLVMWeakAnyLinkage, /**< Keep one copy of function when linking (weak) */
281 LLVMWeakODRLinkage, /**< Same, but only replaced by something
282 equivalent. */
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000283 LLVMAppendingLinkage, /**< Special purpose, only applies to global arrays */
284 LLVMInternalLinkage, /**< Rename collisions when linking (static
285 functions) */
Duncan Sands12da8ce2009-03-07 15:45:40 +0000286 LLVMPrivateLinkage, /**< Like Internal, but omit from symbol table */
Nico Rieck7157bb72014-01-14 15:22:47 +0000287 LLVMDLLImportLinkage, /**< Obsolete */
288 LLVMDLLExportLinkage, /**< Obsolete */
Duncan Sandse2881052009-03-11 08:08:06 +0000289 LLVMExternalWeakLinkage,/**< ExternalWeak linkage description */
Jeffrey Yasskin091217b2010-01-27 20:34:15 +0000290 LLVMGhostLinkage, /**< Obsolete */
Bill Wendling002b1672009-07-20 18:22:52 +0000291 LLVMCommonLinkage, /**< Tentative definitions */
Bill Wendling03bcd6e2010-07-01 21:55:59 +0000292 LLVMLinkerPrivateLinkage, /**< Like Private, but linker removes. */
Bill Wendling34bc34e2012-08-17 18:33:14 +0000293 LLVMLinkerPrivateWeakLinkage /**< Like LinkerPrivate, but is weak. */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000294} LLVMLinkage;
295
296typedef enum {
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000297 LLVMDefaultVisibility, /**< The GV is visible */
298 LLVMHiddenVisibility, /**< The GV is hidden */
299 LLVMProtectedVisibility /**< The GV is protected */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000300} LLVMVisibility;
301
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000302typedef enum {
303 LLVMCCallConv = 0,
304 LLVMFastCallConv = 8,
305 LLVMColdCallConv = 9,
Filip Pizlodfc9b582013-11-09 06:00:03 +0000306 LLVMWebKitJSCallConv = 12,
307 LLVMAnyRegCallConv = 13,
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000308 LLVMX86StdcallCallConv = 64,
309 LLVMX86FastcallCallConv = 65
310} LLVMCallConv;
311
312typedef enum {
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000313 LLVMIntEQ = 32, /**< equal */
314 LLVMIntNE, /**< not equal */
315 LLVMIntUGT, /**< unsigned greater than */
316 LLVMIntUGE, /**< unsigned greater or equal */
317 LLVMIntULT, /**< unsigned less than */
318 LLVMIntULE, /**< unsigned less or equal */
319 LLVMIntSGT, /**< signed greater than */
320 LLVMIntSGE, /**< signed greater or equal */
321 LLVMIntSLT, /**< signed less than */
322 LLVMIntSLE /**< signed less or equal */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000323} LLVMIntPredicate;
324
325typedef enum {
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000326 LLVMRealPredicateFalse, /**< Always false (always folded) */
327 LLVMRealOEQ, /**< True if ordered and equal */
328 LLVMRealOGT, /**< True if ordered and greater than */
329 LLVMRealOGE, /**< True if ordered and greater than or equal */
330 LLVMRealOLT, /**< True if ordered and less than */
331 LLVMRealOLE, /**< True if ordered and less than or equal */
332 LLVMRealONE, /**< True if ordered and operands are unequal */
333 LLVMRealORD, /**< True if ordered (no nans) */
334 LLVMRealUNO, /**< True if unordered: isnan(X) | isnan(Y) */
335 LLVMRealUEQ, /**< True if unordered or equal */
336 LLVMRealUGT, /**< True if unordered or greater than */
337 LLVMRealUGE, /**< True if unordered, greater than, or equal */
338 LLVMRealULT, /**< True if unordered or less than */
339 LLVMRealULE, /**< True if unordered, less than, or equal */
340 LLVMRealUNE, /**< True if unordered or not equal */
341 LLVMRealPredicateTrue /**< Always true (always folded) */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000342} LLVMRealPredicate;
343
Bill Wendlingfae14752011-08-12 20:24:12 +0000344typedef enum {
345 LLVMLandingPadCatch, /**< A catch clause */
346 LLVMLandingPadFilter /**< A filter clause */
347} LLVMLandingPadClauseTy;
348
Hans Wennborg5ff71202013-04-16 08:58:59 +0000349typedef enum {
350 LLVMNotThreadLocal = 0,
351 LLVMGeneralDynamicTLSModel,
352 LLVMLocalDynamicTLSModel,
353 LLVMInitialExecTLSModel,
354 LLVMLocalExecTLSModel
355} LLVMThreadLocalMode;
356
Carlo Kokda0ac722013-04-23 13:45:37 +0000357typedef enum {
Carlo Kok8c6719b2013-04-23 13:21:19 +0000358 LLVMAtomicOrderingNotAtomic = 0, /**< A load or store which is not atomic */
359 LLVMAtomicOrderingUnordered = 1, /**< Lowest level of atomicity, guarantees
360 somewhat sane results, lock free. */
NAKAMURA Takumia3a81352013-10-23 17:56:29 +0000361 LLVMAtomicOrderingMonotonic = 2, /**< guarantees that if you take all the
362 operations affecting a specific address,
Carlo Kok8c6719b2013-04-23 13:21:19 +0000363 a consistent ordering exists */
NAKAMURA Takumia3a81352013-10-23 17:56:29 +0000364 LLVMAtomicOrderingAcquire = 4, /**< Acquire provides a barrier of the sort
365 necessary to acquire a lock to access other
Carlo Kok8c6719b2013-04-23 13:21:19 +0000366 memory with normal loads and stores. */
NAKAMURA Takumia3a81352013-10-23 17:56:29 +0000367 LLVMAtomicOrderingRelease = 5, /**< Release is similar to Acquire, but with
368 a barrier of the sort necessary to release
Carlo Kok8c6719b2013-04-23 13:21:19 +0000369 a lock. */
NAKAMURA Takumia3a81352013-10-23 17:56:29 +0000370 LLVMAtomicOrderingAcquireRelease = 6, /**< provides both an Acquire and a
371 Release barrier (for fences and
Carlo Kok8c6719b2013-04-23 13:21:19 +0000372 operations which both read and write
373 memory). */
NAKAMURA Takumia3a81352013-10-23 17:56:29 +0000374 LLVMAtomicOrderingSequentiallyConsistent = 7 /**< provides Acquire semantics
375 for loads and Release
376 semantics for stores.
377 Additionally, it guarantees
378 that a total ordering exists
379 between all
380 SequentiallyConsistent
Carlo Kok8c6719b2013-04-23 13:21:19 +0000381 operations. */
Carlo Kokda0ac722013-04-23 13:45:37 +0000382} LLVMAtomicOrdering;
Carlo Kok8c6719b2013-04-23 13:21:19 +0000383
Carlo Kokda0ac722013-04-23 13:45:37 +0000384typedef enum {
Carlo Kok8c6719b2013-04-23 13:21:19 +0000385 LLVMAtomicRMWBinOpXchg, /**< Set the new value and return the one old */
386 LLVMAtomicRMWBinOpAdd, /**< Add a value and return the old one */
387 LLVMAtomicRMWBinOpSub, /**< Subtract a value and return the old one */
388 LLVMAtomicRMWBinOpAnd, /**< And a value and return the old one */
389 LLVMAtomicRMWBinOpNand, /**< Not-And a value and return the old one */
390 LLVMAtomicRMWBinOpOr, /**< OR a value and return the old one */
391 LLVMAtomicRMWBinOpXor, /**< Xor a value and return the old one */
392 LLVMAtomicRMWBinOpMax, /**< Sets the value if it's greater than the
NAKAMURA Takumia3a81352013-10-23 17:56:29 +0000393 original using a signed comparison and return
Carlo Kok8c6719b2013-04-23 13:21:19 +0000394 the old one */
395 LLVMAtomicRMWBinOpMin, /**< Sets the value if it's Smaller than the
NAKAMURA Takumia3a81352013-10-23 17:56:29 +0000396 original using a signed comparison and return
Carlo Kok8c6719b2013-04-23 13:21:19 +0000397 the old one */
398 LLVMAtomicRMWBinOpUMax, /**< Sets the value if it's greater than the
NAKAMURA Takumia3a81352013-10-23 17:56:29 +0000399 original using an unsigned comparison and return
Carlo Kok8c6719b2013-04-23 13:21:19 +0000400 the old one */
401 LLVMAtomicRMWBinOpUMin /**< Sets the value if it's greater than the
NAKAMURA Takumia3a81352013-10-23 17:56:29 +0000402 original using an unsigned comparison and return
Carlo Kok8c6719b2013-04-23 13:21:19 +0000403 the old one */
Carlo Kokda0ac722013-04-23 13:45:37 +0000404} LLVMAtomicRMWBinOp;
Carlo Kok8c6719b2013-04-23 13:21:19 +0000405
Gregory Szorc34c863a2012-03-21 03:54:29 +0000406/**
407 * @}
408 */
409
Nick Lewycky0db26542011-05-15 07:20:34 +0000410void LLVMInitializeCore(LLVMPassRegistryRef R);
411
Duncan Sands1cba0a82013-02-17 16:35:51 +0000412/** Deallocate and destroy all ManagedStatic variables.
413 @see llvm::llvm_shutdown
414 @see ManagedStatic */
Benjamin Kramer325ec892013-10-23 16:57:34 +0000415void LLVMShutdown(void);
Duncan Sands1cba0a82013-02-17 16:35:51 +0000416
Gordon Henriksen76a03742007-09-18 03:18:57 +0000417
Gordon Henriksen34eb6d82007-12-19 22:30:40 +0000418/*===-- Error handling ----------------------------------------------------===*/
419
Filip Pizlo3fdbaff2013-05-22 02:46:43 +0000420char *LLVMCreateMessage(const char *Message);
Gordon Henriksen34eb6d82007-12-19 22:30:40 +0000421void LLVMDisposeMessage(char *Message);
422
Filip Pizloa535b142013-10-17 01:38:28 +0000423typedef void (*LLVMFatalErrorHandler)(const char *Reason);
424
425/**
426 * Install a fatal error handler. By default, if LLVM detects a fatal error, it
427 * will call exit(1). This may not be appropriate in many contexts. For example,
428 * doing exit(1) will bypass many crash reporting/tracing system tools. This
429 * function allows you to install a callback that will be invoked prior to the
430 * call to exit(1).
431 */
432void LLVMInstallFatalErrorHandler(LLVMFatalErrorHandler Handler);
433
434/**
435 * Reset the fatal error handler. This resets LLVM's fatal error handling
436 * behavior to the default.
437 */
438void LLVMResetFatalErrorHandler(void);
Gordon Henriksen34eb6d82007-12-19 22:30:40 +0000439
Gregory Szorc34c863a2012-03-21 03:54:29 +0000440/**
Filip Pizloc10ca902013-11-04 02:22:25 +0000441 * Enable LLVM's built-in stack trace code. This intercepts the OS's crash
442 * signals and prints which component of LLVM you were in at the time if the
443 * crash.
Filip Pizlo9f50ccd2013-11-03 00:29:47 +0000444 */
Filip Pizloc10ca902013-11-04 02:22:25 +0000445void LLVMEnablePrettyStackTrace(void);
Filip Pizlo9f50ccd2013-11-03 00:29:47 +0000446
447/**
Gregory Szorc34c863a2012-03-21 03:54:29 +0000448 * @defgroup LLVMCCoreContext Contexts
449 *
450 * Contexts are execution states for the core LLVM IR system.
451 *
452 * Most types are tied to a context instance. Multiple contexts can
453 * exist simultaneously. A single context is not thread safe. However,
454 * different contexts can execute on different threads simultaneously.
455 *
456 * @{
457 */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000458
Gregory Szorc34c863a2012-03-21 03:54:29 +0000459/**
460 * Create a new context.
461 *
462 * Every call to this function should be paired with a call to
463 * LLVMContextDispose() or the context will leak memory.
464 */
Erick Tryzelaarf34cb0c2009-08-30 23:38:06 +0000465LLVMContextRef LLVMContextCreate(void);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000466
467/**
468 * Obtain the global context instance.
469 */
Erick Tryzelaarf34cb0c2009-08-30 23:38:06 +0000470LLVMContextRef LLVMGetGlobalContext(void);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000471
472/**
473 * Destroy a context instance.
474 *
475 * This should be called for every call to LLVMContextCreate() or memory
476 * will be leaked.
477 */
Owen Anderson6773d382009-07-01 16:58:40 +0000478void LLVMContextDispose(LLVMContextRef C);
479
Erick Tryzelaard8531fa2010-02-28 09:45:59 +0000480unsigned LLVMGetMDKindIDInContext(LLVMContextRef C, const char* Name,
481 unsigned SLen);
482unsigned LLVMGetMDKindID(const char* Name, unsigned SLen);
483
Gregory Szorc34c863a2012-03-21 03:54:29 +0000484/**
485 * @}
486 */
487
Gregory Szorc52d26602012-03-21 07:28:27 +0000488/**
489 * @defgroup LLVMCCoreModule Modules
Gregory Szorc34c863a2012-03-21 03:54:29 +0000490 *
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +0000491 * Modules represent the top-level structure in an LLVM program. An LLVM
Gregory Szorc34c863a2012-03-21 03:54:29 +0000492 * module is effectively a translation unit or a collection of
493 * translation units merged together.
494 *
495 * @{
496 */
497
Gregory Szorc34c863a2012-03-21 03:54:29 +0000498/**
499 * Create a new, empty module in the global context.
500 *
501 * This is equivalent to calling LLVMModuleCreateWithNameInContext with
502 * LLVMGetGlobalContext() as the context parameter.
503 *
504 * Every invocation should be paired with LLVMDisposeModule() or memory
505 * will be leaked.
506 */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000507LLVMModuleRef LLVMModuleCreateWithName(const char *ModuleID);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000508
509/**
510 * Create a new, empty module in a specific context.
511 *
512 * Every invocation should be paired with LLVMDisposeModule() or memory
513 * will be leaked.
514 */
Owen Anderson31d44e42009-07-02 07:17:57 +0000515LLVMModuleRef LLVMModuleCreateWithNameInContext(const char *ModuleID,
516 LLVMContextRef C);
Gordon Henriksena49d4352008-03-07 19:13:06 +0000517
Gregory Szorc34c863a2012-03-21 03:54:29 +0000518/**
519 * Destroy a module instance.
520 *
521 * This must be called for every created module or memory will be
522 * leaked.
523 */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000524void LLVMDisposeModule(LLVMModuleRef M);
525
Gregory Szorc34c863a2012-03-21 03:54:29 +0000526/**
527 * Obtain the data layout for a module.
528 *
529 * @see Module::getDataLayout()
530 */
Gordon Henriksen05568bb2007-12-27 20:13:47 +0000531const char *LLVMGetDataLayout(LLVMModuleRef M);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000532
533/**
534 * Set the data layout for a module.
535 *
536 * @see Module::setDataLayout()
537 */
Gordon Henriksen05568bb2007-12-27 20:13:47 +0000538void LLVMSetDataLayout(LLVMModuleRef M, const char *Triple);
539
Gregory Szorc34c863a2012-03-21 03:54:29 +0000540/**
541 * Obtain the target triple for a module.
542 *
543 * @see Module::getTargetTriple()
544 */
Gordon Henriksen05568bb2007-12-27 20:13:47 +0000545const char *LLVMGetTarget(LLVMModuleRef M);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000546
547/**
548 * Set the target triple for a module.
549 *
550 * @see Module::setTargetTriple()
551 */
Gordon Henriksen05568bb2007-12-27 20:13:47 +0000552void LLVMSetTarget(LLVMModuleRef M, const char *Triple);
553
Gregory Szorc34c863a2012-03-21 03:54:29 +0000554/**
555 * Dump a representation of a module to stderr.
556 *
557 * @see Module::dump()
558 */
Gordon Henriksen6c6075e2008-03-14 23:58:56 +0000559void LLVMDumpModule(LLVMModuleRef M);
560
Gregory Szorc34c863a2012-03-21 03:54:29 +0000561/**
Hans Wennborgb7ef2fe2012-05-09 16:54:17 +0000562 * Print a representation of a module to a file. The ErrorMessage needs to be
563 * disposed with LLVMDisposeMessage. Returns 0 on success, 1 otherwise.
564 *
565 * @see Module::print()
566 */
567LLVMBool LLVMPrintModuleToFile(LLVMModuleRef M, const char *Filename,
568 char **ErrorMessage);
569
570/**
Anders Waldenborg84355db2013-10-16 18:00:54 +0000571 * Return a string representation of the module. Use
572 * LLVMDisposeMessage to free the string.
573 *
574 * @see Module::print()
575 */
576char *LLVMPrintModuleToString(LLVMModuleRef M);
577
578/**
Gregory Szorc34c863a2012-03-21 03:54:29 +0000579 * Set inline assembly for a module.
580 *
581 * @see Module::setModuleInlineAsm()
582 */
Chris Lattner26941452010-04-10 17:52:58 +0000583void LLVMSetModuleInlineAsm(LLVMModuleRef M, const char *Asm);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000584
Gregory Szorc34c863a2012-03-21 03:54:29 +0000585/**
586 * Obtain the context to which this module is associated.
587 *
588 * @see Module::getContext()
589 */
Chris Lattnera7e04b02010-11-28 20:03:44 +0000590LLVMContextRef LLVMGetModuleContext(LLVMModuleRef M);
591
Gregory Szorc34c863a2012-03-21 03:54:29 +0000592/**
593 * Obtain a Type from a module by its registered name.
594 */
595LLVMTypeRef LLVMGetTypeByName(LLVMModuleRef M, const char *Name);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000596
Gregory Szorc34c863a2012-03-21 03:54:29 +0000597/**
598 * Obtain the number of operands for named metadata in a module.
599 *
600 * @see llvm::Module::getNamedMetadata()
601 */
602unsigned LLVMGetNamedMetadataNumOperands(LLVMModuleRef M, const char* name);
603
604/**
605 * Obtain the named metadata operands for a module.
606 *
607 * The passed LLVMValueRef pointer should refer to an array of
608 * LLVMValueRef at least LLVMGetNamedMetadataNumOperands long. This
609 * array will be populated with the LLVMValueRef instances. Each
610 * instance corresponds to a llvm::MDNode.
611 *
612 * @see llvm::Module::getNamedMetadata()
613 * @see llvm::MDNode::getOperand()
614 */
615void LLVMGetNamedMetadataOperands(LLVMModuleRef M, const char* name, LLVMValueRef *Dest);
616
617/**
618 * Add an operand to named metadata.
619 *
620 * @see llvm::Module::getNamedMetadata()
621 * @see llvm::MDNode::addOperand()
622 */
623void LLVMAddNamedMetadataOperand(LLVMModuleRef M, const char* name,
624 LLVMValueRef Val);
625
Gregory Szorc52d26602012-03-21 07:28:27 +0000626/**
627 * Add a function to a module under a specified name.
628 *
629 * @see llvm::Function::Create()
630 */
631LLVMValueRef LLVMAddFunction(LLVMModuleRef M, const char *Name,
632 LLVMTypeRef FunctionTy);
633
634/**
635 * Obtain a Function value from a Module by its name.
636 *
637 * The returned value corresponds to a llvm::Function value.
638 *
639 * @see llvm::Module::getFunction()
640 */
641LLVMValueRef LLVMGetNamedFunction(LLVMModuleRef M, const char *Name);
642
643/**
644 * Obtain an iterator to the first Function in a Module.
645 *
646 * @see llvm::Module::begin()
647 */
648LLVMValueRef LLVMGetFirstFunction(LLVMModuleRef M);
649
650/**
651 * Obtain an iterator to the last Function in a Module.
652 *
653 * @see llvm::Module::end()
654 */
655LLVMValueRef LLVMGetLastFunction(LLVMModuleRef M);
656
657/**
658 * Advance a Function iterator to the next Function.
659 *
660 * Returns NULL if the iterator was already at the end and there are no more
661 * functions.
662 */
663LLVMValueRef LLVMGetNextFunction(LLVMValueRef Fn);
664
665/**
666 * Decrement a Function iterator to the previous Function.
667 *
668 * Returns NULL if the iterator was already at the beginning and there are
669 * no previous functions.
670 */
671LLVMValueRef LLVMGetPreviousFunction(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000672
673/**
674 * @}
675 */
676
677/**
678 * @defgroup LLVMCCoreType Types
679 *
680 * Types represent the type of a value.
681 *
682 * Types are associated with a context instance. The context internally
683 * deduplicates types so there is only 1 instance of a specific type
684 * alive at a time. In other words, a unique type is shared among all
685 * consumers within a context.
686 *
687 * A Type in the C API corresponds to llvm::Type.
688 *
689 * Types have the following hierarchy:
690 *
Gordon Henriksen76a03742007-09-18 03:18:57 +0000691 * types:
692 * integer type
693 * real type
694 * function type
695 * sequence types:
696 * array type
697 * pointer type
698 * vector type
699 * void type
700 * label type
701 * opaque type
Gregory Szorc34c863a2012-03-21 03:54:29 +0000702 *
703 * @{
Gordon Henriksen76a03742007-09-18 03:18:57 +0000704 */
705
Gregory Szorc34c863a2012-03-21 03:54:29 +0000706/**
707 * Obtain the enumerated type of a Type instance.
708 *
709 * @see llvm::Type:getTypeID()
710 */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000711LLVMTypeKind LLVMGetTypeKind(LLVMTypeRef Ty);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000712
713/**
714 * Whether the type has a known size.
715 *
716 * Things that don't have a size are abstract types, labels, and void.a
717 *
718 * @see llvm::Type::isSized()
719 */
Torok Edwin1cd9ade2011-10-06 12:13:28 +0000720LLVMBool LLVMTypeIsSized(LLVMTypeRef Ty);
Gordon Henriksena49d4352008-03-07 19:13:06 +0000721
Gregory Szorc34c863a2012-03-21 03:54:29 +0000722/**
723 * Obtain the context to which this type instance is associated.
724 *
725 * @see llvm::Type::getContext()
726 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000727LLVMContextRef LLVMGetTypeContext(LLVMTypeRef Ty);
728
Gregory Szorc34c863a2012-03-21 03:54:29 +0000729/**
Anders Waldenborgb822cff2013-10-16 21:30:25 +0000730 * Dump a representation of a type to stderr.
731 *
732 * @see llvm::Type::dump()
733 */
734void LLVMDumpType(LLVMTypeRef Val);
735
736/**
Anders Waldenborg47b3bd32013-10-22 06:58:34 +0000737 * Return a string representation of the type. Use
738 * LLVMDisposeMessage to free the string.
739 *
740 * @see llvm::Type::print()
741 */
742char *LLVMPrintTypeToString(LLVMTypeRef Val);
743
744/**
Gregory Szorc34c863a2012-03-21 03:54:29 +0000745 * @defgroup LLVMCCoreTypeInt Integer Types
746 *
747 * Functions in this section operate on integer types.
748 *
749 * @{
750 */
751
752/**
753 * Obtain an integer type from a context with specified bit width.
754 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000755LLVMTypeRef LLVMInt1TypeInContext(LLVMContextRef C);
756LLVMTypeRef LLVMInt8TypeInContext(LLVMContextRef C);
757LLVMTypeRef LLVMInt16TypeInContext(LLVMContextRef C);
758LLVMTypeRef LLVMInt32TypeInContext(LLVMContextRef C);
759LLVMTypeRef LLVMInt64TypeInContext(LLVMContextRef C);
760LLVMTypeRef LLVMIntTypeInContext(LLVMContextRef C, unsigned NumBits);
761
Gregory Szorc34c863a2012-03-21 03:54:29 +0000762/**
763 * Obtain an integer type from the global context with a specified bit
764 * width.
765 */
Gordon Henriksena735a9c2008-05-04 12:55:34 +0000766LLVMTypeRef LLVMInt1Type(void);
767LLVMTypeRef LLVMInt8Type(void);
768LLVMTypeRef LLVMInt16Type(void);
769LLVMTypeRef LLVMInt32Type(void);
770LLVMTypeRef LLVMInt64Type(void);
Gordon Henriksened7beaa2007-10-06 16:05:20 +0000771LLVMTypeRef LLVMIntType(unsigned NumBits);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000772unsigned LLVMGetIntTypeWidth(LLVMTypeRef IntegerTy);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000773
Gregory Szorc34c863a2012-03-21 03:54:29 +0000774/**
775 * @}
776 */
777
778/**
779 * @defgroup LLVMCCoreTypeFloat Floating Point Types
780 *
781 * @{
782 */
783
784/**
785 * Obtain a 16-bit floating point type from a context.
786 */
Dan Gohman518cda42011-12-17 00:04:22 +0000787LLVMTypeRef LLVMHalfTypeInContext(LLVMContextRef C);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000788
789/**
790 * Obtain a 32-bit floating point type from a context.
791 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000792LLVMTypeRef LLVMFloatTypeInContext(LLVMContextRef C);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000793
794/**
795 * Obtain a 64-bit floating point type from a context.
796 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000797LLVMTypeRef LLVMDoubleTypeInContext(LLVMContextRef C);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000798
799/**
800 * Obtain a 80-bit floating point type (X87) from a context.
801 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000802LLVMTypeRef LLVMX86FP80TypeInContext(LLVMContextRef C);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000803
804/**
805 * Obtain a 128-bit floating point type (112-bit mantissa) from a
806 * context.
807 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000808LLVMTypeRef LLVMFP128TypeInContext(LLVMContextRef C);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000809
810/**
811 * Obtain a 128-bit floating point type (two 64-bits) from a context.
812 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000813LLVMTypeRef LLVMPPCFP128TypeInContext(LLVMContextRef C);
814
Gregory Szorc34c863a2012-03-21 03:54:29 +0000815/**
816 * Obtain a floating point type from the global context.
817 *
818 * These map to the functions in this group of the same name.
819 */
Dan Gohman518cda42011-12-17 00:04:22 +0000820LLVMTypeRef LLVMHalfType(void);
Gordon Henriksena735a9c2008-05-04 12:55:34 +0000821LLVMTypeRef LLVMFloatType(void);
822LLVMTypeRef LLVMDoubleType(void);
823LLVMTypeRef LLVMX86FP80Type(void);
824LLVMTypeRef LLVMFP128Type(void);
825LLVMTypeRef LLVMPPCFP128Type(void);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000826
Gregory Szorc34c863a2012-03-21 03:54:29 +0000827/**
828 * @}
829 */
830
831/**
832 * @defgroup LLVMCCoreTypeFunction Function Types
833 *
834 * @{
835 */
836
837/**
838 * Obtain a function type consisting of a specified signature.
839 *
840 * The function is defined as a tuple of a return Type, a list of
841 * parameter types, and whether the function is variadic.
842 */
Gordon Henriksened7beaa2007-10-06 16:05:20 +0000843LLVMTypeRef LLVMFunctionType(LLVMTypeRef ReturnType,
844 LLVMTypeRef *ParamTypes, unsigned ParamCount,
Chris Lattner25963c62010-01-09 22:27:07 +0000845 LLVMBool IsVarArg);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000846
847/**
848 * Returns whether a function type is variadic.
849 */
Chris Lattner25963c62010-01-09 22:27:07 +0000850LLVMBool LLVMIsFunctionVarArg(LLVMTypeRef FunctionTy);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000851
852/**
853 * Obtain the Type this function Type returns.
854 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000855LLVMTypeRef LLVMGetReturnType(LLVMTypeRef FunctionTy);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000856
857/**
858 * Obtain the number of parameters this function accepts.
859 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000860unsigned LLVMCountParamTypes(LLVMTypeRef FunctionTy);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000861
862/**
863 * Obtain the types of a function's parameters.
864 *
865 * The Dest parameter should point to a pre-allocated array of
866 * LLVMTypeRef at least LLVMCountParamTypes() large. On return, the
867 * first LLVMCountParamTypes() entries in the array will be populated
868 * with LLVMTypeRef instances.
869 *
870 * @param FunctionTy The function type to operate on.
871 * @param Dest Memory address of an array to be filled with result.
872 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000873void LLVMGetParamTypes(LLVMTypeRef FunctionTy, LLVMTypeRef *Dest);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000874
Gregory Szorc34c863a2012-03-21 03:54:29 +0000875/**
876 * @}
877 */
878
879/**
880 * @defgroup LLVMCCoreTypeStruct Structure Types
881 *
882 * These functions relate to LLVMTypeRef instances.
883 *
884 * @see llvm::StructType
885 *
886 * @{
887 */
888
889/**
890 * Create a new structure type in a context.
891 *
892 * A structure is specified by a list of inner elements/types and
893 * whether these can be packed together.
894 *
895 * @see llvm::StructType::create()
896 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000897LLVMTypeRef LLVMStructTypeInContext(LLVMContextRef C, LLVMTypeRef *ElementTypes,
Chris Lattner25963c62010-01-09 22:27:07 +0000898 unsigned ElementCount, LLVMBool Packed);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000899
900/**
901 * Create a new structure type in the global context.
902 *
903 * @see llvm::StructType::create()
904 */
Gordon Henriksened7beaa2007-10-06 16:05:20 +0000905LLVMTypeRef LLVMStructType(LLVMTypeRef *ElementTypes, unsigned ElementCount,
Chris Lattner25963c62010-01-09 22:27:07 +0000906 LLVMBool Packed);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000907
908/**
909 * Create an empty structure in a context having a specified name.
910 *
911 * @see llvm::StructType::create()
912 */
Chris Lattnere71ccde2011-07-14 05:53:17 +0000913LLVMTypeRef LLVMStructCreateNamed(LLVMContextRef C, const char *Name);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000914
915/**
916 * Obtain the name of a structure.
917 *
918 * @see llvm::StructType::getName()
919 */
Torok Edwin0d5f6ae2011-10-06 12:12:50 +0000920const char *LLVMGetStructName(LLVMTypeRef Ty);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000921
922/**
923 * Set the contents of a structure type.
924 *
925 * @see llvm::StructType::setBody()
926 */
Chris Lattnere71ccde2011-07-14 05:53:17 +0000927void LLVMStructSetBody(LLVMTypeRef StructTy, LLVMTypeRef *ElementTypes,
928 unsigned ElementCount, LLVMBool Packed);
929
Gregory Szorc34c863a2012-03-21 03:54:29 +0000930/**
931 * Get the number of elements defined inside the structure.
932 *
933 * @see llvm::StructType::getNumElements()
934 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000935unsigned LLVMCountStructElementTypes(LLVMTypeRef StructTy);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000936
937/**
938 * Get the elements within a structure.
939 *
940 * The function is passed the address of a pre-allocated array of
941 * LLVMTypeRef at least LLVMCountStructElementTypes() long. After
942 * invocation, this array will be populated with the structure's
943 * elements. The objects in the destination array will have a lifetime
944 * of the structure type itself, which is the lifetime of the context it
945 * is contained in.
946 */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000947void LLVMGetStructElementTypes(LLVMTypeRef StructTy, LLVMTypeRef *Dest);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000948
949/**
950 * Determine whether a structure is packed.
951 *
952 * @see llvm::StructType::isPacked()
953 */
Chris Lattner25963c62010-01-09 22:27:07 +0000954LLVMBool LLVMIsPackedStruct(LLVMTypeRef StructTy);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000955
956/**
957 * Determine whether a structure is opaque.
958 *
959 * @see llvm::StructType::isOpaque()
960 */
Chris Lattner17cf05b2011-07-14 16:20:28 +0000961LLVMBool LLVMIsOpaqueStruct(LLVMTypeRef StructTy);
962
Gregory Szorc34c863a2012-03-21 03:54:29 +0000963/**
964 * @}
965 */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000966
Gregory Szorc34c863a2012-03-21 03:54:29 +0000967
968/**
969 * @defgroup LLVMCCoreTypeSequential Sequential Types
970 *
971 * Sequential types represents "arrays" of types. This is a super class
972 * for array, vector, and pointer types.
973 *
974 * @{
975 */
976
977/**
978 * Obtain the type of elements within a sequential type.
979 *
980 * This works on array, vector, and pointer types.
981 *
982 * @see llvm::SequentialType::getElementType()
983 */
984LLVMTypeRef LLVMGetElementType(LLVMTypeRef Ty);
985
986/**
987 * Create a fixed size array type that refers to a specific type.
988 *
989 * The created type will exist in the context that its element type
990 * exists in.
991 *
992 * @see llvm::ArrayType::get()
993 */
Gordon Henriksened7beaa2007-10-06 16:05:20 +0000994LLVMTypeRef LLVMArrayType(LLVMTypeRef ElementType, unsigned ElementCount);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000995
996/**
997 * Obtain the length of an array type.
998 *
999 * This only works on types that represent arrays.
1000 *
1001 * @see llvm::ArrayType::getNumElements()
1002 */
1003unsigned LLVMGetArrayLength(LLVMTypeRef ArrayTy);
1004
1005/**
1006 * Create a pointer type that points to a defined type.
1007 *
1008 * The created type will exist in the context that its pointee type
1009 * exists in.
1010 *
1011 * @see llvm::PointerType::get()
1012 */
Gordon Henriksen5a3fe032007-12-17 16:08:32 +00001013LLVMTypeRef LLVMPointerType(LLVMTypeRef ElementType, unsigned AddressSpace);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001014
1015/**
1016 * Obtain the address space of a pointer type.
1017 *
1018 * This only works on types that represent pointers.
1019 *
1020 * @see llvm::PointerType::getAddressSpace()
1021 */
1022unsigned LLVMGetPointerAddressSpace(LLVMTypeRef PointerTy);
1023
1024/**
1025 * Create a vector type that contains a defined type and has a specific
1026 * number of elements.
1027 *
1028 * The created type will exist in the context thats its element type
1029 * exists in.
1030 *
1031 * @see llvm::VectorType::get()
1032 */
Gordon Henriksened7beaa2007-10-06 16:05:20 +00001033LLVMTypeRef LLVMVectorType(LLVMTypeRef ElementType, unsigned ElementCount);
Gordon Henriksen76a03742007-09-18 03:18:57 +00001034
Gregory Szorc34c863a2012-03-21 03:54:29 +00001035/**
1036 * Obtain the number of elements in a vector type.
1037 *
1038 * This only works on types that represent vectors.
1039 *
1040 * @see llvm::VectorType::getNumElements()
1041 */
Gordon Henriksen76a03742007-09-18 03:18:57 +00001042unsigned LLVMGetVectorSize(LLVMTypeRef VectorTy);
1043
Gregory Szorc34c863a2012-03-21 03:54:29 +00001044/**
1045 * @}
1046 */
1047
1048/**
1049 * @defgroup LLVMCCoreTypeOther Other Types
1050 *
1051 * @{
1052 */
1053
1054/**
1055 * Create a void type in a context.
1056 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +00001057LLVMTypeRef LLVMVoidTypeInContext(LLVMContextRef C);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001058
1059/**
1060 * Create a label type in a context.
1061 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +00001062LLVMTypeRef LLVMLabelTypeInContext(LLVMContextRef C);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001063
1064/**
1065 * Create a X86 MMX type in a context.
1066 */
Dale Johannesen95b67af2010-09-10 21:58:02 +00001067LLVMTypeRef LLVMX86MMXTypeInContext(LLVMContextRef C);
Erick Tryzelaar262332f2009-08-14 00:01:31 +00001068
Gregory Szorc34c863a2012-03-21 03:54:29 +00001069/**
1070 * These are similar to the above functions except they operate on the
1071 * global context.
1072 */
Gordon Henriksena735a9c2008-05-04 12:55:34 +00001073LLVMTypeRef LLVMVoidType(void);
1074LLVMTypeRef LLVMLabelType(void);
Dale Johannesen95b67af2010-09-10 21:58:02 +00001075LLVMTypeRef LLVMX86MMXType(void);
Gordon Henriksen76a03742007-09-18 03:18:57 +00001076
Gregory Szorc34c863a2012-03-21 03:54:29 +00001077/**
1078 * @}
1079 */
Gordon Henriksen76a03742007-09-18 03:18:57 +00001080
Gregory Szorc34c863a2012-03-21 03:54:29 +00001081/**
1082 * @}
1083 */
1084
1085/**
1086 * @defgroup LLVMCCoreValues Values
1087 *
1088 * The bulk of LLVM's object model consists of values, which comprise a very
Gordon Henriksen76a03742007-09-18 03:18:57 +00001089 * rich type hierarchy.
Gregory Szorc34c863a2012-03-21 03:54:29 +00001090 *
1091 * LLVMValueRef essentially represents llvm::Value. There is a rich
1092 * hierarchy of classes within this type. Depending on the instance
Eli Benderskyc52863c2012-08-10 18:30:44 +00001093 * obtained, not all APIs are available.
Gregory Szorc34c863a2012-03-21 03:54:29 +00001094 *
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +00001095 * Callers can determine the type of an LLVMValueRef by calling the
Gregory Szorc34c863a2012-03-21 03:54:29 +00001096 * LLVMIsA* family of functions (e.g. LLVMIsAArgument()). These
1097 * functions are defined by a macro, so it isn't obvious which are
1098 * available by looking at the Doxygen source code. Instead, look at the
1099 * source definition of LLVM_FOR_EACH_VALUE_SUBCLASS and note the list
1100 * of value names given. These value names also correspond to classes in
1101 * the llvm::Value hierarchy.
1102 *
1103 * @{
Gordon Henriksen76a03742007-09-18 03:18:57 +00001104 */
1105
Gordon Henriksen29e38942008-12-19 18:39:45 +00001106#define LLVM_FOR_EACH_VALUE_SUBCLASS(macro) \
1107 macro(Argument) \
1108 macro(BasicBlock) \
1109 macro(InlineAsm) \
Torok Edwind09b7572011-10-14 20:37:56 +00001110 macro(MDNode) \
1111 macro(MDString) \
Gordon Henriksen29e38942008-12-19 18:39:45 +00001112 macro(User) \
1113 macro(Constant) \
Torok Edwind09b7572011-10-14 20:37:56 +00001114 macro(BlockAddress) \
Gordon Henriksen29e38942008-12-19 18:39:45 +00001115 macro(ConstantAggregateZero) \
1116 macro(ConstantArray) \
Peter Zotovae0344b2013-11-05 12:55:37 +00001117 macro(ConstantDataSequential) \
1118 macro(ConstantDataArray) \
1119 macro(ConstantDataVector) \
Gordon Henriksen29e38942008-12-19 18:39:45 +00001120 macro(ConstantExpr) \
1121 macro(ConstantFP) \
1122 macro(ConstantInt) \
1123 macro(ConstantPointerNull) \
1124 macro(ConstantStruct) \
1125 macro(ConstantVector) \
1126 macro(GlobalValue) \
1127 macro(Function) \
1128 macro(GlobalAlias) \
1129 macro(GlobalVariable) \
1130 macro(UndefValue) \
1131 macro(Instruction) \
1132 macro(BinaryOperator) \
1133 macro(CallInst) \
1134 macro(IntrinsicInst) \
1135 macro(DbgInfoIntrinsic) \
1136 macro(DbgDeclareInst) \
Gordon Henriksen29e38942008-12-19 18:39:45 +00001137 macro(MemIntrinsic) \
1138 macro(MemCpyInst) \
1139 macro(MemMoveInst) \
1140 macro(MemSetInst) \
1141 macro(CmpInst) \
Torok Edwind09b7572011-10-14 20:37:56 +00001142 macro(FCmpInst) \
1143 macro(ICmpInst) \
Gordon Henriksen29e38942008-12-19 18:39:45 +00001144 macro(ExtractElementInst) \
1145 macro(GetElementPtrInst) \
1146 macro(InsertElementInst) \
1147 macro(InsertValueInst) \
Bill Wendlingfae14752011-08-12 20:24:12 +00001148 macro(LandingPadInst) \
Gordon Henriksen29e38942008-12-19 18:39:45 +00001149 macro(PHINode) \
1150 macro(SelectInst) \
1151 macro(ShuffleVectorInst) \
1152 macro(StoreInst) \
1153 macro(TerminatorInst) \
1154 macro(BranchInst) \
Torok Edwind09b7572011-10-14 20:37:56 +00001155 macro(IndirectBrInst) \
Gordon Henriksen29e38942008-12-19 18:39:45 +00001156 macro(InvokeInst) \
1157 macro(ReturnInst) \
1158 macro(SwitchInst) \
1159 macro(UnreachableInst) \
Bill Wendlingf891bf82011-07-31 06:30:59 +00001160 macro(ResumeInst) \
Duncan Sands5e37e992013-05-06 08:55:45 +00001161 macro(UnaryInstruction) \
1162 macro(AllocaInst) \
1163 macro(CastInst) \
Matt Arsenaultb03bd4d2013-11-15 01:34:59 +00001164 macro(AddrSpaceCastInst) \
Duncan Sands5e37e992013-05-06 08:55:45 +00001165 macro(BitCastInst) \
1166 macro(FPExtInst) \
1167 macro(FPToSIInst) \
1168 macro(FPToUIInst) \
1169 macro(FPTruncInst) \
1170 macro(IntToPtrInst) \
1171 macro(PtrToIntInst) \
1172 macro(SExtInst) \
1173 macro(SIToFPInst) \
1174 macro(TruncInst) \
1175 macro(UIToFPInst) \
1176 macro(ZExtInst) \
1177 macro(ExtractValueInst) \
1178 macro(LoadInst) \
1179 macro(VAArgInst)
Gordon Henriksen29e38942008-12-19 18:39:45 +00001180
Gregory Szorc34c863a2012-03-21 03:54:29 +00001181/**
1182 * @defgroup LLVMCCoreValueGeneral General APIs
1183 *
1184 * Functions in this section work on all LLVMValueRef instances,
1185 * regardless of their sub-type. They correspond to functions available
1186 * on llvm::Value.
1187 *
1188 * @{
1189 */
Gordon Henriksen76a03742007-09-18 03:18:57 +00001190
Gregory Szorc34c863a2012-03-21 03:54:29 +00001191/**
1192 * Obtain the type of a value.
1193 *
1194 * @see llvm::Value::getType()
1195 */
1196LLVMTypeRef LLVMTypeOf(LLVMValueRef Val);
1197
1198/**
1199 * Obtain the string name of a value.
1200 *
1201 * @see llvm::Value::getName()
1202 */
1203const char *LLVMGetValueName(LLVMValueRef Val);
1204
1205/**
1206 * Set the string name of a value.
1207 *
1208 * @see llvm::Value::setName()
1209 */
1210void LLVMSetValueName(LLVMValueRef Val, const char *Name);
1211
1212/**
1213 * Dump a representation of a value to stderr.
1214 *
1215 * @see llvm::Value::dump()
1216 */
1217void LLVMDumpValue(LLVMValueRef Val);
1218
1219/**
Peter Zotovcd93b372013-11-06 09:21:01 +00001220 * Return a string representation of the value. Use
1221 * LLVMDisposeMessage to free the string.
1222 *
1223 * @see llvm::Value::print()
1224 */
1225char *LLVMPrintValueToString(LLVMValueRef Val);
1226
1227/**
Gregory Szorc34c863a2012-03-21 03:54:29 +00001228 * Replace all uses of a value with another one.
1229 *
1230 * @see llvm::Value::replaceAllUsesWith()
1231 */
1232void LLVMReplaceAllUsesWith(LLVMValueRef OldVal, LLVMValueRef NewVal);
1233
1234/**
1235 * Determine whether the specified constant instance is constant.
1236 */
1237LLVMBool LLVMIsConstant(LLVMValueRef Val);
1238
1239/**
1240 * Determine whether a value instance is undefined.
1241 */
1242LLVMBool LLVMIsUndef(LLVMValueRef Val);
1243
1244/**
1245 * Convert value instances between types.
1246 *
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +00001247 * Internally, an LLVMValueRef is "pinned" to a specific type. This
Gregory Szorc34c863a2012-03-21 03:54:29 +00001248 * series of functions allows you to cast an instance to a specific
1249 * type.
1250 *
1251 * If the cast is not valid for the specified type, NULL is returned.
1252 *
1253 * @see llvm::dyn_cast_or_null<>
1254 */
Gordon Henriksen29e38942008-12-19 18:39:45 +00001255#define LLVM_DECLARE_VALUE_CAST(name) \
1256 LLVMValueRef LLVMIsA##name(LLVMValueRef Val);
1257LLVM_FOR_EACH_VALUE_SUBCLASS(LLVM_DECLARE_VALUE_CAST)
1258
Gregory Szorc34c863a2012-03-21 03:54:29 +00001259/**
1260 * @}
1261 */
1262
1263/**
1264 * @defgroup LLVMCCoreValueUses Usage
1265 *
1266 * This module defines functions that allow you to inspect the uses of a
1267 * LLVMValueRef.
1268 *
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +00001269 * It is possible to obtain an LLVMUseRef for any LLVMValueRef instance.
Gregory Szorc34c863a2012-03-21 03:54:29 +00001270 * Each LLVMUseRef (which corresponds to a llvm::Use instance) holds a
1271 * llvm::User and llvm::Value.
1272 *
1273 * @{
1274 */
1275
1276/**
1277 * Obtain the first use of a value.
1278 *
1279 * Uses are obtained in an iterator fashion. First, call this function
1280 * to obtain a reference to the first use. Then, call LLVMGetNextUse()
Eli Benderskyc52863c2012-08-10 18:30:44 +00001281 * on that instance and all subsequently obtained instances until
Gregory Szorc34c863a2012-03-21 03:54:29 +00001282 * LLVMGetNextUse() returns NULL.
1283 *
1284 * @see llvm::Value::use_begin()
1285 */
Erick Tryzelaar9f9857e2010-03-02 20:32:28 +00001286LLVMUseRef LLVMGetFirstUse(LLVMValueRef Val);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001287
1288/**
1289 * Obtain the next use of a value.
1290 *
1291 * This effectively advances the iterator. It returns NULL if you are on
1292 * the final use and no more are available.
1293 */
Erick Tryzelaar9f9857e2010-03-02 20:32:28 +00001294LLVMUseRef LLVMGetNextUse(LLVMUseRef U);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001295
1296/**
1297 * Obtain the user value for a user.
1298 *
1299 * The returned value corresponds to a llvm::User type.
1300 *
1301 * @see llvm::Use::getUser()
1302 */
Erick Tryzelaar9f9857e2010-03-02 20:32:28 +00001303LLVMValueRef LLVMGetUser(LLVMUseRef U);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001304
1305/**
1306 * Obtain the value this use corresponds to.
1307 *
1308 * @see llvm::Use::get().
1309 */
Erick Tryzelaar9f9857e2010-03-02 20:32:28 +00001310LLVMValueRef LLVMGetUsedValue(LLVMUseRef U);
Chris Lattner40cf28d2009-10-12 04:01:02 +00001311
Gregory Szorc34c863a2012-03-21 03:54:29 +00001312/**
1313 * @}
1314 */
1315
1316/**
Gregory Szorc52d26602012-03-21 07:28:27 +00001317 * @defgroup LLVMCCoreValueUser User value
Gregory Szorc34c863a2012-03-21 03:54:29 +00001318 *
1319 * Function in this group pertain to LLVMValueRef instances that descent
1320 * from llvm::User. This includes constants, instructions, and
1321 * operators.
1322 *
1323 * @{
1324 */
1325
1326/**
1327 * Obtain an operand at a specific index in a llvm::User value.
1328 *
1329 * @see llvm::User::getOperand()
1330 */
Chris Lattner40cf28d2009-10-12 04:01:02 +00001331LLVMValueRef LLVMGetOperand(LLVMValueRef Val, unsigned Index);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001332
1333/**
1334 * Set an operand at a specific index in a llvm::User value.
1335 *
1336 * @see llvm::User::setOperand()
1337 */
Erick Tryzelaarb4d48702010-08-20 14:51:22 +00001338void LLVMSetOperand(LLVMValueRef User, unsigned Index, LLVMValueRef Val);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001339
1340/**
1341 * Obtain the number of operands in a llvm::User value.
1342 *
1343 * @see llvm::User::getNumOperands()
1344 */
Erick Tryzelaarb4d48702010-08-20 14:51:22 +00001345int LLVMGetNumOperands(LLVMValueRef Val);
Chris Lattner40cf28d2009-10-12 04:01:02 +00001346
Gregory Szorc34c863a2012-03-21 03:54:29 +00001347/**
1348 * @}
1349 */
1350
1351/**
Gregory Szorc52d26602012-03-21 07:28:27 +00001352 * @defgroup LLVMCCoreValueConstant Constants
Gregory Szorc34c863a2012-03-21 03:54:29 +00001353 *
1354 * This section contains APIs for interacting with LLVMValueRef that
1355 * correspond to llvm::Constant instances.
1356 *
1357 * These functions will work for any LLVMValueRef in the llvm::Constant
1358 * class hierarchy.
1359 *
1360 * @{
1361 */
1362
1363/**
1364 * Obtain a constant value referring to the null instance of a type.
1365 *
1366 * @see llvm::Constant::getNullValue()
1367 */
Gordon Henriksen1046c732007-10-06 15:11:06 +00001368LLVMValueRef LLVMConstNull(LLVMTypeRef Ty); /* all zeroes */
Gregory Szorc34c863a2012-03-21 03:54:29 +00001369
1370/**
1371 * Obtain a constant value referring to the instance of a type
1372 * consisting of all ones.
1373 *
1374 * This is only valid for integer types.
1375 *
1376 * @see llvm::Constant::getAllOnesValue()
1377 */
1378LLVMValueRef LLVMConstAllOnes(LLVMTypeRef Ty);
1379
1380/**
1381 * Obtain a constant value referring to an undefined value of a type.
1382 *
1383 * @see llvm::UndefValue::get()
1384 */
Gordon Henriksen76a03742007-09-18 03:18:57 +00001385LLVMValueRef LLVMGetUndef(LLVMTypeRef Ty);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001386
1387/**
1388 * Determine whether a value instance is null.
1389 *
1390 * @see llvm::Constant::isNullValue()
1391 */
Chris Lattner25963c62010-01-09 22:27:07 +00001392LLVMBool LLVMIsNull(LLVMValueRef Val);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001393
1394/**
1395 * Obtain a constant that is a constant pointer pointing to NULL for a
1396 * specified type.
1397 */
Chris Lattner7f318242009-07-06 17:29:59 +00001398LLVMValueRef LLVMConstPointerNull(LLVMTypeRef Ty);
Gordon Henriksen76a03742007-09-18 03:18:57 +00001399
Gregory Szorc34c863a2012-03-21 03:54:29 +00001400/**
1401 * @defgroup LLVMCCoreValueConstantScalar Scalar constants
1402 *
1403 * Functions in this group model LLVMValueRef instances that correspond
1404 * to constants referring to scalar types.
1405 *
1406 * For integer types, the LLVMTypeRef parameter should correspond to a
1407 * llvm::IntegerType instance and the returned LLVMValueRef will
1408 * correspond to a llvm::ConstantInt.
1409 *
1410 * For floating point types, the LLVMTypeRef returned corresponds to a
1411 * llvm::ConstantFP.
1412 *
1413 * @{
1414 */
Erick Tryzelaard8531fa2010-02-28 09:45:59 +00001415
Gregory Szorc34c863a2012-03-21 03:54:29 +00001416/**
1417 * Obtain a constant value for an integer type.
1418 *
1419 * The returned value corresponds to a llvm::ConstantInt.
1420 *
1421 * @see llvm::ConstantInt::get()
1422 *
1423 * @param IntTy Integer type to obtain value of.
1424 * @param N The value the returned instance should refer to.
1425 * @param SignExtend Whether to sign extend the produced value.
1426 */
Gordon Henriksen1046c732007-10-06 15:11:06 +00001427LLVMValueRef LLVMConstInt(LLVMTypeRef IntTy, unsigned long long N,
Chris Lattner25963c62010-01-09 22:27:07 +00001428 LLVMBool SignExtend);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001429
1430/**
1431 * Obtain a constant value for an integer of arbitrary precision.
1432 *
1433 * @see llvm::ConstantInt::get()
1434 */
Chris Lattner4329e072010-11-23 02:47:22 +00001435LLVMValueRef LLVMConstIntOfArbitraryPrecision(LLVMTypeRef IntTy,
1436 unsigned NumWords,
1437 const uint64_t Words[]);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001438
1439/**
1440 * Obtain a constant value for an integer parsed from a string.
1441 *
1442 * A similar API, LLVMConstIntOfStringAndSize is also available. If the
1443 * string's length is available, it is preferred to call that function
1444 * instead.
1445 *
1446 * @see llvm::ConstantInt::get()
1447 */
Erick Tryzelaardd991352009-08-16 23:36:46 +00001448LLVMValueRef LLVMConstIntOfString(LLVMTypeRef IntTy, const char *Text,
1449 uint8_t Radix);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001450
1451/**
1452 * Obtain a constant value for an integer parsed from a string with
1453 * specified length.
1454 *
1455 * @see llvm::ConstantInt::get()
1456 */
Erick Tryzelaardd991352009-08-16 23:36:46 +00001457LLVMValueRef LLVMConstIntOfStringAndSize(LLVMTypeRef IntTy, const char *Text,
1458 unsigned SLen, uint8_t Radix);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001459
1460/**
1461 * Obtain a constant value referring to a double floating point value.
1462 */
Gordon Henriksen1046c732007-10-06 15:11:06 +00001463LLVMValueRef LLVMConstReal(LLVMTypeRef RealTy, double N);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001464
1465/**
1466 * Obtain a constant for a floating point value parsed from a string.
1467 *
1468 * A similar API, LLVMConstRealOfStringAndSize is also available. It
1469 * should be used if the input string's length is known.
1470 */
Gordon Henriksen931e1212008-02-02 01:07:50 +00001471LLVMValueRef LLVMConstRealOfString(LLVMTypeRef RealTy, const char *Text);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001472
1473/**
1474 * Obtain a constant for a floating point value parsed from a string.
1475 */
Erick Tryzelaardd991352009-08-16 23:36:46 +00001476LLVMValueRef LLVMConstRealOfStringAndSize(LLVMTypeRef RealTy, const char *Text,
1477 unsigned SLen);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001478
1479/**
1480 * Obtain the zero extended value for an integer constant value.
1481 *
1482 * @see llvm::ConstantInt::getZExtValue()
1483 */
Chris Lattner40cf28d2009-10-12 04:01:02 +00001484unsigned long long LLVMConstIntGetZExtValue(LLVMValueRef ConstantVal);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001485
1486/**
1487 * Obtain the sign extended value for an integer constant value.
1488 *
1489 * @see llvm::ConstantInt::getSExtValue()
1490 */
Chris Lattner40cf28d2009-10-12 04:01:02 +00001491long long LLVMConstIntGetSExtValue(LLVMValueRef ConstantVal);
Erick Tryzelaardd991352009-08-16 23:36:46 +00001492
Gregory Szorc34c863a2012-03-21 03:54:29 +00001493/**
1494 * @}
1495 */
1496
1497/**
Gregory Szorc52d26602012-03-21 07:28:27 +00001498 * @defgroup LLVMCCoreValueConstantComposite Composite Constants
1499 *
1500 * Functions in this group operate on composite constants.
Gregory Szorc34c863a2012-03-21 03:54:29 +00001501 *
1502 * @{
1503 */
1504
1505/**
Gregory Szorc52d26602012-03-21 07:28:27 +00001506 * Create a ConstantDataSequential and initialize it with a string.
Gregory Szorc34c863a2012-03-21 03:54:29 +00001507 *
Gregory Szorc52d26602012-03-21 07:28:27 +00001508 * @see llvm::ConstantDataArray::getString()
Gregory Szorc34c863a2012-03-21 03:54:29 +00001509 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +00001510LLVMValueRef LLVMConstStringInContext(LLVMContextRef C, const char *Str,
Chris Lattner25963c62010-01-09 22:27:07 +00001511 unsigned Length, LLVMBool DontNullTerminate);
Gregory Szorc52d26602012-03-21 07:28:27 +00001512
1513/**
1514 * Create a ConstantDataSequential with string content in the global context.
1515 *
1516 * This is the same as LLVMConstStringInContext except it operates on the
1517 * global context.
1518 *
1519 * @see LLVMConstStringInContext()
1520 * @see llvm::ConstantDataArray::getString()
1521 */
1522LLVMValueRef LLVMConstString(const char *Str, unsigned Length,
1523 LLVMBool DontNullTerminate);
1524
1525/**
1526 * Create an anonymous ConstantStruct with the specified values.
1527 *
1528 * @see llvm::ConstantStruct::getAnon()
1529 */
1530LLVMValueRef LLVMConstStructInContext(LLVMContextRef C,
Erick Tryzelaar262332f2009-08-14 00:01:31 +00001531 LLVMValueRef *ConstantVals,
Chris Lattner25963c62010-01-09 22:27:07 +00001532 unsigned Count, LLVMBool Packed);
Erick Tryzelaar262332f2009-08-14 00:01:31 +00001533
Gregory Szorc52d26602012-03-21 07:28:27 +00001534/**
1535 * Create a ConstantStruct in the global Context.
1536 *
1537 * This is the same as LLVMConstStructInContext except it operates on the
1538 * global Context.
1539 *
1540 * @see LLVMConstStructInContext()
1541 */
Gordon Henriksen1046c732007-10-06 15:11:06 +00001542LLVMValueRef LLVMConstStruct(LLVMValueRef *ConstantVals, unsigned Count,
Chris Lattner25963c62010-01-09 22:27:07 +00001543 LLVMBool Packed);
Gregory Szorc52d26602012-03-21 07:28:27 +00001544
1545/**
1546 * Create a ConstantArray from values.
1547 *
1548 * @see llvm::ConstantArray::get()
1549 */
1550LLVMValueRef LLVMConstArray(LLVMTypeRef ElementTy,
1551 LLVMValueRef *ConstantVals, unsigned Length);
1552
1553/**
1554 * Create a non-anonymous ConstantStruct from values.
1555 *
1556 * @see llvm::ConstantStruct::get()
1557 */
Rafael Espindola784ad242011-07-14 19:09:08 +00001558LLVMValueRef LLVMConstNamedStruct(LLVMTypeRef StructTy,
1559 LLVMValueRef *ConstantVals,
1560 unsigned Count);
Gregory Szorc52d26602012-03-21 07:28:27 +00001561
1562/**
1563 * Create a ConstantVector from values.
1564 *
1565 * @see llvm::ConstantVector::get()
1566 */
Gordon Henriksen1046c732007-10-06 15:11:06 +00001567LLVMValueRef LLVMConstVector(LLVMValueRef *ScalarConstantVals, unsigned Size);
Gordon Henriksen76a03742007-09-18 03:18:57 +00001568
Gregory Szorc52d26602012-03-21 07:28:27 +00001569/**
1570 * @}
1571 */
1572
1573/**
1574 * @defgroup LLVMCCoreValueConstantExpressions Constant Expressions
1575 *
1576 * Functions in this group correspond to APIs on llvm::ConstantExpr.
1577 *
1578 * @see llvm::ConstantExpr.
1579 *
1580 * @{
1581 */
Chris Lattner40cf28d2009-10-12 04:01:02 +00001582LLVMOpcode LLVMGetConstOpcode(LLVMValueRef ConstantVal);
Erick Tryzelaarfd529d72009-08-19 08:36:49 +00001583LLVMValueRef LLVMAlignOf(LLVMTypeRef Ty);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001584LLVMValueRef LLVMSizeOf(LLVMTypeRef Ty);
1585LLVMValueRef LLVMConstNeg(LLVMValueRef ConstantVal);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +00001586LLVMValueRef LLVMConstNSWNeg(LLVMValueRef ConstantVal);
1587LLVMValueRef LLVMConstNUWNeg(LLVMValueRef ConstantVal);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +00001588LLVMValueRef LLVMConstFNeg(LLVMValueRef ConstantVal);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001589LLVMValueRef LLVMConstNot(LLVMValueRef ConstantVal);
1590LLVMValueRef LLVMConstAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Dan Gohmane4ca02d2009-09-03 23:34:49 +00001591LLVMValueRef LLVMConstNSWAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +00001592LLVMValueRef LLVMConstNUWAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +00001593LLVMValueRef LLVMConstFAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001594LLVMValueRef LLVMConstSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +00001595LLVMValueRef LLVMConstNSWSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1596LLVMValueRef LLVMConstNUWSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +00001597LLVMValueRef LLVMConstFSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001598LLVMValueRef LLVMConstMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +00001599LLVMValueRef LLVMConstNSWMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1600LLVMValueRef LLVMConstNUWMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +00001601LLVMValueRef LLVMConstFMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001602LLVMValueRef LLVMConstUDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1603LLVMValueRef LLVMConstSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Dan Gohmane4ca02d2009-09-03 23:34:49 +00001604LLVMValueRef LLVMConstExactSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001605LLVMValueRef LLVMConstFDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1606LLVMValueRef LLVMConstURem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1607LLVMValueRef LLVMConstSRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1608LLVMValueRef LLVMConstFRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1609LLVMValueRef LLVMConstAnd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1610LLVMValueRef LLVMConstOr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1611LLVMValueRef LLVMConstXor(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1612LLVMValueRef LLVMConstICmp(LLVMIntPredicate Predicate,
1613 LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1614LLVMValueRef LLVMConstFCmp(LLVMRealPredicate Predicate,
1615 LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1616LLVMValueRef LLVMConstShl(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1617LLVMValueRef LLVMConstLShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1618LLVMValueRef LLVMConstAShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1619LLVMValueRef LLVMConstGEP(LLVMValueRef ConstantVal,
1620 LLVMValueRef *ConstantIndices, unsigned NumIndices);
Dan Gohmane4ca02d2009-09-03 23:34:49 +00001621LLVMValueRef LLVMConstInBoundsGEP(LLVMValueRef ConstantVal,
1622 LLVMValueRef *ConstantIndices,
1623 unsigned NumIndices);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001624LLVMValueRef LLVMConstTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1625LLVMValueRef LLVMConstSExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1626LLVMValueRef LLVMConstZExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1627LLVMValueRef LLVMConstFPTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1628LLVMValueRef LLVMConstFPExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1629LLVMValueRef LLVMConstUIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1630LLVMValueRef LLVMConstSIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1631LLVMValueRef LLVMConstFPToUI(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1632LLVMValueRef LLVMConstFPToSI(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1633LLVMValueRef LLVMConstPtrToInt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1634LLVMValueRef LLVMConstIntToPtr(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1635LLVMValueRef LLVMConstBitCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
Matt Arsenaultb03bd4d2013-11-15 01:34:59 +00001636LLVMValueRef LLVMConstAddrSpaceCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +00001637LLVMValueRef LLVMConstZExtOrBitCast(LLVMValueRef ConstantVal,
1638 LLVMTypeRef ToType);
1639LLVMValueRef LLVMConstSExtOrBitCast(LLVMValueRef ConstantVal,
1640 LLVMTypeRef ToType);
1641LLVMValueRef LLVMConstTruncOrBitCast(LLVMValueRef ConstantVal,
1642 LLVMTypeRef ToType);
1643LLVMValueRef LLVMConstPointerCast(LLVMValueRef ConstantVal,
1644 LLVMTypeRef ToType);
1645LLVMValueRef LLVMConstIntCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType,
Chris Lattner25963c62010-01-09 22:27:07 +00001646 LLVMBool isSigned);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +00001647LLVMValueRef LLVMConstFPCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001648LLVMValueRef LLVMConstSelect(LLVMValueRef ConstantCondition,
1649 LLVMValueRef ConstantIfTrue,
1650 LLVMValueRef ConstantIfFalse);
1651LLVMValueRef LLVMConstExtractElement(LLVMValueRef VectorConstant,
1652 LLVMValueRef IndexConstant);
1653LLVMValueRef LLVMConstInsertElement(LLVMValueRef VectorConstant,
1654 LLVMValueRef ElementValueConstant,
1655 LLVMValueRef IndexConstant);
1656LLVMValueRef LLVMConstShuffleVector(LLVMValueRef VectorAConstant,
1657 LLVMValueRef VectorBConstant,
1658 LLVMValueRef MaskConstant);
Dan Gohmand5104a52008-11-03 22:55:43 +00001659LLVMValueRef LLVMConstExtractValue(LLVMValueRef AggConstant, unsigned *IdxList,
1660 unsigned NumIdx);
1661LLVMValueRef LLVMConstInsertValue(LLVMValueRef AggConstant,
1662 LLVMValueRef ElementValueConstant,
1663 unsigned *IdxList, unsigned NumIdx);
Chris Lattner25963c62010-01-09 22:27:07 +00001664LLVMValueRef LLVMConstInlineAsm(LLVMTypeRef Ty,
Chris Lattner3d1f5522008-12-17 21:39:50 +00001665 const char *AsmString, const char *Constraints,
Chris Lattner25963c62010-01-09 22:27:07 +00001666 LLVMBool HasSideEffects, LLVMBool IsAlignStack);
Erick Tryzelaar0fb26ef2010-02-28 09:46:06 +00001667LLVMValueRef LLVMBlockAddress(LLVMValueRef F, LLVMBasicBlockRef BB);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001668
Gregory Szorc52d26602012-03-21 07:28:27 +00001669/**
1670 * @}
1671 */
1672
1673/**
1674 * @defgroup LLVMCCoreValueConstantGlobals Global Values
1675 *
1676 * This group contains functions that operate on global values. Functions in
1677 * this group relate to functions in the llvm::GlobalValue class tree.
1678 *
1679 * @see llvm::GlobalValue
1680 *
1681 * @{
1682 */
1683
Gordon Henriksen265f7802008-03-19 01:11:35 +00001684LLVMModuleRef LLVMGetGlobalParent(LLVMValueRef Global);
Chris Lattner25963c62010-01-09 22:27:07 +00001685LLVMBool LLVMIsDeclaration(LLVMValueRef Global);
Gordon Henriksen76a03742007-09-18 03:18:57 +00001686LLVMLinkage LLVMGetLinkage(LLVMValueRef Global);
1687void LLVMSetLinkage(LLVMValueRef Global, LLVMLinkage Linkage);
1688const char *LLVMGetSection(LLVMValueRef Global);
1689void LLVMSetSection(LLVMValueRef Global, const char *Section);
1690LLVMVisibility LLVMGetVisibility(LLVMValueRef Global);
1691void LLVMSetVisibility(LLVMValueRef Global, LLVMVisibility Viz);
Anders Waldenborg213a63f2013-10-29 09:02:02 +00001692
1693/**
1694 * @defgroup LLVMCCoreValueWithAlignment Values with alignment
1695 *
1696 * Functions in this group only apply to values with alignment, i.e.
1697 * global variables, load and store instructions.
1698 */
1699
1700/**
1701 * Obtain the preferred alignment of the value.
1702 * @see llvm::LoadInst::getAlignment()
1703 * @see llvm::StoreInst::getAlignment()
1704 * @see llvm::GlobalValue::getAlignment()
1705 */
1706unsigned LLVMGetAlignment(LLVMValueRef V);
1707
1708/**
1709 * Set the preferred alignment of the value.
1710 * @see llvm::LoadInst::setAlignment()
1711 * @see llvm::StoreInst::setAlignment()
1712 * @see llvm::GlobalValue::setAlignment()
1713 */
1714void LLVMSetAlignment(LLVMValueRef V, unsigned Bytes);
1715
1716/**
1717 * @}
1718 */
Gordon Henriksen76a03742007-09-18 03:18:57 +00001719
Gregory Szorc52d26602012-03-21 07:28:27 +00001720/**
1721 * @defgroup LLVMCoreValueConstantGlobalVariable Global Variables
1722 *
1723 * This group contains functions that operate on global variable values.
1724 *
1725 * @see llvm::GlobalVariable
1726 *
1727 * @{
1728 */
Gordon Henriksen76a03742007-09-18 03:18:57 +00001729LLVMValueRef LLVMAddGlobal(LLVMModuleRef M, LLVMTypeRef Ty, const char *Name);
Erick Tryzelaar06894b32010-02-28 09:46:13 +00001730LLVMValueRef LLVMAddGlobalInAddressSpace(LLVMModuleRef M, LLVMTypeRef Ty,
1731 const char *Name,
1732 unsigned AddressSpace);
Gordon Henriksen783f7bb2007-10-08 03:45:09 +00001733LLVMValueRef LLVMGetNamedGlobal(LLVMModuleRef M, const char *Name);
Gordon Henriksen07a45f42008-03-23 22:21:29 +00001734LLVMValueRef LLVMGetFirstGlobal(LLVMModuleRef M);
1735LLVMValueRef LLVMGetLastGlobal(LLVMModuleRef M);
1736LLVMValueRef LLVMGetNextGlobal(LLVMValueRef GlobalVar);
1737LLVMValueRef LLVMGetPreviousGlobal(LLVMValueRef GlobalVar);
Gordon Henriksen76a03742007-09-18 03:18:57 +00001738void LLVMDeleteGlobal(LLVMValueRef GlobalVar);
Gordon Henriksen76a03742007-09-18 03:18:57 +00001739LLVMValueRef LLVMGetInitializer(LLVMValueRef GlobalVar);
1740void LLVMSetInitializer(LLVMValueRef GlobalVar, LLVMValueRef ConstantVal);
Chris Lattner25963c62010-01-09 22:27:07 +00001741LLVMBool LLVMIsThreadLocal(LLVMValueRef GlobalVar);
1742void LLVMSetThreadLocal(LLVMValueRef GlobalVar, LLVMBool IsThreadLocal);
1743LLVMBool LLVMIsGlobalConstant(LLVMValueRef GlobalVar);
1744void LLVMSetGlobalConstant(LLVMValueRef GlobalVar, LLVMBool IsConstant);
Hans Wennborg5ff71202013-04-16 08:58:59 +00001745LLVMThreadLocalMode LLVMGetThreadLocalMode(LLVMValueRef GlobalVar);
1746void LLVMSetThreadLocalMode(LLVMValueRef GlobalVar, LLVMThreadLocalMode Mode);
1747LLVMBool LLVMIsExternallyInitialized(LLVMValueRef GlobalVar);
1748void LLVMSetExternallyInitialized(LLVMValueRef GlobalVar, LLVMBool IsExtInit);
Gordon Henriksen76a03742007-09-18 03:18:57 +00001749
Gregory Szorc52d26602012-03-21 07:28:27 +00001750/**
1751 * @}
1752 */
1753
1754/**
1755 * @defgroup LLVMCoreValueConstantGlobalAlias Global Aliases
1756 *
1757 * This group contains function that operate on global alias values.
1758 *
1759 * @see llvm::GlobalAlias
1760 *
1761 * @{
1762 */
Chris Lattner3d1f5522008-12-17 21:39:50 +00001763LLVMValueRef LLVMAddAlias(LLVMModuleRef M, LLVMTypeRef Ty, LLVMValueRef Aliasee,
1764 const char *Name);
1765
Gregory Szorc34c863a2012-03-21 03:54:29 +00001766/**
1767 * @}
1768 */
1769
1770/**
1771 * @defgroup LLVMCCoreValueFunction Function values
1772 *
1773 * Functions in this group operate on LLVMValueRef instances that
1774 * correspond to llvm::Function instances.
1775 *
1776 * @see llvm::Function
1777 *
1778 * @{
1779 */
1780
1781/**
1782 * Remove a function from its containing module and deletes it.
1783 *
1784 * @see llvm::Function::eraseFromParent()
1785 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00001786void LLVMDeleteFunction(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001787
1788/**
1789 * Obtain the ID number from a function instance.
1790 *
1791 * @see llvm::Function::getIntrinsicID()
1792 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00001793unsigned LLVMGetIntrinsicID(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001794
1795/**
1796 * Obtain the calling function of a function.
1797 *
1798 * The returned value corresponds to the LLVMCallConv enumeration.
1799 *
1800 * @see llvm::Function::getCallingConv()
1801 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00001802unsigned LLVMGetFunctionCallConv(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001803
1804/**
1805 * Set the calling convention of a function.
1806 *
1807 * @see llvm::Function::setCallingConv()
1808 *
1809 * @param Fn Function to operate on
1810 * @param CC LLVMCallConv to set calling convention to
1811 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00001812void LLVMSetFunctionCallConv(LLVMValueRef Fn, unsigned CC);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001813
1814/**
1815 * Obtain the name of the garbage collector to use during code
1816 * generation.
1817 *
1818 * @see llvm::Function::getGC()
1819 */
Gordon Henriksend930f912008-08-17 18:44:35 +00001820const char *LLVMGetGC(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001821
1822/**
1823 * Define the garbage collector to use during code generation.
1824 *
1825 * @see llvm::Function::setGC()
1826 */
Gordon Henriksend930f912008-08-17 18:44:35 +00001827void LLVMSetGC(LLVMValueRef Fn, const char *Name);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001828
1829/**
1830 * Add an attribute to a function.
1831 *
1832 * @see llvm::Function::addAttribute()
1833 */
Duncan Sands7374a012009-05-06 12:21:17 +00001834void LLVMAddFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001835
1836/**
Tom Stellarde8f35e12013-04-16 23:12:43 +00001837 * Add a target-dependent attribute to a fuction
1838 * @see llvm::AttrBuilder::addAttribute()
1839 */
1840void LLVMAddTargetDependentFunctionAttr(LLVMValueRef Fn, const char *A,
1841 const char *V);
1842
1843/**
Gregory Szorc34c863a2012-03-21 03:54:29 +00001844 * Obtain an attribute from a function.
1845 *
1846 * @see llvm::Function::getAttributes()
1847 */
Chris Lattner40cf28d2009-10-12 04:01:02 +00001848LLVMAttribute LLVMGetFunctionAttr(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001849
1850/**
1851 * Remove an attribute from a function.
1852 */
Duncan Sands7374a012009-05-06 12:21:17 +00001853void LLVMRemoveFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00001854
Gregory Szorc34c863a2012-03-21 03:54:29 +00001855/**
1856 * @defgroup LLVMCCoreValueFunctionParameters Function Parameters
1857 *
1858 * Functions in this group relate to arguments/parameters on functions.
1859 *
1860 * Functions in this group expect LLVMValueRef instances that correspond
1861 * to llvm::Function instances.
1862 *
1863 * @{
1864 */
1865
1866/**
1867 * Obtain the number of parameters in a function.
1868 *
1869 * @see llvm::Function::arg_size()
1870 */
Gordon Henriksen265f7802008-03-19 01:11:35 +00001871unsigned LLVMCountParams(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001872
1873/**
1874 * Obtain the parameters in a function.
1875 *
1876 * The takes a pointer to a pre-allocated array of LLVMValueRef that is
1877 * at least LLVMCountParams() long. This array will be filled with
1878 * LLVMValueRef instances which correspond to the parameters the
1879 * function receives. Each LLVMValueRef corresponds to a llvm::Argument
1880 * instance.
1881 *
1882 * @see llvm::Function::arg_begin()
1883 */
Gordon Henriksen265f7802008-03-19 01:11:35 +00001884void LLVMGetParams(LLVMValueRef Fn, LLVMValueRef *Params);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001885
1886/**
1887 * Obtain the parameter at the specified index.
1888 *
1889 * Parameters are indexed from 0.
1890 *
1891 * @see llvm::Function::arg_begin()
1892 */
Gordon Henriksen265f7802008-03-19 01:11:35 +00001893LLVMValueRef LLVMGetParam(LLVMValueRef Fn, unsigned Index);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001894
1895/**
1896 * Obtain the function to which this argument belongs.
1897 *
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +00001898 * Unlike other functions in this group, this one takes an LLVMValueRef
Gregory Szorc34c863a2012-03-21 03:54:29 +00001899 * that corresponds to a llvm::Attribute.
1900 *
1901 * The returned LLVMValueRef is the llvm::Function to which this
1902 * argument belongs.
1903 */
Gordon Henriksen265f7802008-03-19 01:11:35 +00001904LLVMValueRef LLVMGetParamParent(LLVMValueRef Inst);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001905
1906/**
1907 * Obtain the first parameter to a function.
1908 *
1909 * @see llvm::Function::arg_begin()
1910 */
Gordon Henriksen07a45f42008-03-23 22:21:29 +00001911LLVMValueRef LLVMGetFirstParam(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001912
1913/**
1914 * Obtain the last parameter to a function.
1915 *
1916 * @see llvm::Function::arg_end()
1917 */
Gordon Henriksen07a45f42008-03-23 22:21:29 +00001918LLVMValueRef LLVMGetLastParam(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001919
1920/**
1921 * Obtain the next parameter to a function.
1922 *
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +00001923 * This takes an LLVMValueRef obtained from LLVMGetFirstParam() (which is
Gregory Szorc34c863a2012-03-21 03:54:29 +00001924 * actually a wrapped iterator) and obtains the next parameter from the
1925 * underlying iterator.
1926 */
Gordon Henriksen07a45f42008-03-23 22:21:29 +00001927LLVMValueRef LLVMGetNextParam(LLVMValueRef Arg);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001928
1929/**
1930 * Obtain the previous parameter to a function.
1931 *
1932 * This is the opposite of LLVMGetNextParam().
1933 */
Gordon Henriksen07a45f42008-03-23 22:21:29 +00001934LLVMValueRef LLVMGetPreviousParam(LLVMValueRef Arg);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001935
1936/**
1937 * Add an attribute to a function argument.
1938 *
1939 * @see llvm::Argument::addAttr()
1940 */
Devang Patel4c758ea2008-09-25 21:00:45 +00001941void LLVMAddAttribute(LLVMValueRef Arg, LLVMAttribute PA);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001942
1943/**
1944 * Remove an attribute from a function argument.
1945 *
1946 * @see llvm::Argument::removeAttr()
1947 */
Devang Patel4c758ea2008-09-25 21:00:45 +00001948void LLVMRemoveAttribute(LLVMValueRef Arg, LLVMAttribute PA);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001949
1950/**
1951 * Get an attribute from a function argument.
1952 */
Chris Lattner40cf28d2009-10-12 04:01:02 +00001953LLVMAttribute LLVMGetAttribute(LLVMValueRef Arg);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001954
1955/**
1956 * Set the alignment for a function parameter.
1957 *
1958 * @see llvm::Argument::addAttr()
Bill Wendling50d27842012-10-15 20:35:56 +00001959 * @see llvm::AttrBuilder::addAlignmentAttr()
Gregory Szorc34c863a2012-03-21 03:54:29 +00001960 */
Gordon Henriksen2d9cc212008-04-28 17:37:06 +00001961void LLVMSetParamAlignment(LLVMValueRef Arg, unsigned align);
Gordon Henriksen265f7802008-03-19 01:11:35 +00001962
Gregory Szorc34c863a2012-03-21 03:54:29 +00001963/**
1964 * @}
1965 */
1966
1967/**
1968 * @}
1969 */
1970
1971/**
Gregory Szorc52d26602012-03-21 07:28:27 +00001972 * @}
1973 */
1974
1975/**
1976 * @}
1977 */
1978
1979/**
1980 * @defgroup LLVMCCoreValueMetadata Metadata
1981 *
1982 * @{
1983 */
1984
1985/**
1986 * Obtain a MDString value from a context.
1987 *
1988 * The returned instance corresponds to the llvm::MDString class.
1989 *
1990 * The instance is specified by string data of a specified length. The
1991 * string content is copied, so the backing memory can be freed after
1992 * this function returns.
1993 */
1994LLVMValueRef LLVMMDStringInContext(LLVMContextRef C, const char *Str,
1995 unsigned SLen);
1996
1997/**
1998 * Obtain a MDString value from the global context.
1999 */
2000LLVMValueRef LLVMMDString(const char *Str, unsigned SLen);
2001
2002/**
2003 * Obtain a MDNode value from a context.
2004 *
2005 * The returned value corresponds to the llvm::MDNode class.
2006 */
2007LLVMValueRef LLVMMDNodeInContext(LLVMContextRef C, LLVMValueRef *Vals,
2008 unsigned Count);
2009
2010/**
2011 * Obtain a MDNode value from the global context.
2012 */
2013LLVMValueRef LLVMMDNode(LLVMValueRef *Vals, unsigned Count);
2014
2015/**
2016 * Obtain the underlying string from a MDString value.
2017 *
2018 * @param V Instance to obtain string from.
2019 * @param Len Memory address which will hold length of returned string.
2020 * @return String data in MDString.
2021 */
2022const char *LLVMGetMDString(LLVMValueRef V, unsigned* Len);
2023
2024/**
Duncan Sands12ccbe72012-09-19 20:29:39 +00002025 * Obtain the number of operands from an MDNode value.
2026 *
2027 * @param V MDNode to get number of operands from.
2028 * @return Number of operands of the MDNode.
2029 */
2030unsigned LLVMGetMDNodeNumOperands(LLVMValueRef V);
2031
2032/**
2033 * Obtain the given MDNode's operands.
2034 *
2035 * The passed LLVMValueRef pointer should point to enough memory to hold all of
2036 * the operands of the given MDNode (see LLVMGetMDNodeNumOperands) as
2037 * LLVMValueRefs. This memory will be populated with the LLVMValueRefs of the
2038 * MDNode's operands.
2039 *
2040 * @param V MDNode to get the operands from.
2041 * @param Dest Destination array for operands.
2042 */
2043void LLVMGetMDNodeOperands(LLVMValueRef V, LLVMValueRef *Dest);
2044
2045/**
Gregory Szorc52d26602012-03-21 07:28:27 +00002046 * @}
2047 */
2048
2049/**
Gregory Szorc34c863a2012-03-21 03:54:29 +00002050 * @defgroup LLVMCCoreValueBasicBlock Basic Block
2051 *
2052 * A basic block represents a single entry single exit section of code.
2053 * Basic blocks contain a list of instructions which form the body of
2054 * the block.
2055 *
2056 * Basic blocks belong to functions. They have the type of label.
2057 *
2058 * Basic blocks are themselves values. However, the C API models them as
2059 * LLVMBasicBlockRef.
2060 *
2061 * @see llvm::BasicBlock
2062 *
2063 * @{
2064 */
2065
2066/**
2067 * Convert a basic block instance to a value type.
2068 */
Gordon Henriksen07a45f42008-03-23 22:21:29 +00002069LLVMValueRef LLVMBasicBlockAsValue(LLVMBasicBlockRef BB);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002070
2071/**
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +00002072 * Determine whether an LLVMValueRef is itself a basic block.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002073 */
Chris Lattner25963c62010-01-09 22:27:07 +00002074LLVMBool LLVMValueIsBasicBlock(LLVMValueRef Val);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002075
2076/**
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +00002077 * Convert an LLVMValueRef to an LLVMBasicBlockRef instance.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002078 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002079LLVMBasicBlockRef LLVMValueAsBasicBlock(LLVMValueRef Val);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002080
2081/**
2082 * Obtain the function to which a basic block belongs.
2083 *
2084 * @see llvm::BasicBlock::getParent()
2085 */
Gordon Henriksen07a45f42008-03-23 22:21:29 +00002086LLVMValueRef LLVMGetBasicBlockParent(LLVMBasicBlockRef BB);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002087
2088/**
2089 * Obtain the terminator instruction for a basic block.
2090 *
2091 * If the basic block does not have a terminator (it is not well-formed
2092 * if it doesn't), then NULL is returned.
2093 *
2094 * The returned LLVMValueRef corresponds to a llvm::TerminatorInst.
2095 *
2096 * @see llvm::BasicBlock::getTerminator()
2097 */
Nate Begeman43c322b2011-08-23 20:27:46 +00002098LLVMValueRef LLVMGetBasicBlockTerminator(LLVMBasicBlockRef BB);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002099
2100/**
2101 * Obtain the number of basic blocks in a function.
2102 *
2103 * @param Fn Function value to operate on.
2104 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002105unsigned LLVMCountBasicBlocks(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002106
2107/**
2108 * Obtain all of the basic blocks in a function.
2109 *
2110 * This operates on a function value. The BasicBlocks parameter is a
2111 * pointer to a pre-allocated array of LLVMBasicBlockRef of at least
2112 * LLVMCountBasicBlocks() in length. This array is populated with
2113 * LLVMBasicBlockRef instances.
2114 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002115void LLVMGetBasicBlocks(LLVMValueRef Fn, LLVMBasicBlockRef *BasicBlocks);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002116
2117/**
2118 * Obtain the first basic block in a function.
2119 *
2120 * The returned basic block can be used as an iterator. You will likely
2121 * eventually call into LLVMGetNextBasicBlock() with it.
2122 *
2123 * @see llvm::Function::begin()
2124 */
Gordon Henriksen054817c2008-03-19 03:47:18 +00002125LLVMBasicBlockRef LLVMGetFirstBasicBlock(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002126
2127/**
2128 * Obtain the last basic block in a function.
2129 *
2130 * @see llvm::Function::end()
2131 */
Gordon Henriksen054817c2008-03-19 03:47:18 +00002132LLVMBasicBlockRef LLVMGetLastBasicBlock(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002133
2134/**
2135 * Advance a basic block iterator.
2136 */
Gordon Henriksen054817c2008-03-19 03:47:18 +00002137LLVMBasicBlockRef LLVMGetNextBasicBlock(LLVMBasicBlockRef BB);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002138
2139/**
2140 * Go backwards in a basic block iterator.
2141 */
Gordon Henriksen054817c2008-03-19 03:47:18 +00002142LLVMBasicBlockRef LLVMGetPreviousBasicBlock(LLVMBasicBlockRef BB);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002143
2144/**
2145 * Obtain the basic block that corresponds to the entry point of a
2146 * function.
2147 *
2148 * @see llvm::Function::getEntryBlock()
2149 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002150LLVMBasicBlockRef LLVMGetEntryBasicBlock(LLVMValueRef Fn);
Erick Tryzelaar262332f2009-08-14 00:01:31 +00002151
Gregory Szorc34c863a2012-03-21 03:54:29 +00002152/**
2153 * Append a basic block to the end of a function.
2154 *
2155 * @see llvm::BasicBlock::Create()
2156 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +00002157LLVMBasicBlockRef LLVMAppendBasicBlockInContext(LLVMContextRef C,
2158 LLVMValueRef Fn,
2159 const char *Name);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002160
2161/**
2162 * Append a basic block to the end of a function using the global
2163 * context.
2164 *
2165 * @see llvm::BasicBlock::Create()
2166 */
2167LLVMBasicBlockRef LLVMAppendBasicBlock(LLVMValueRef Fn, const char *Name);
2168
2169/**
2170 * Insert a basic block in a function before another basic block.
2171 *
2172 * The function to add to is determined by the function of the
2173 * passed basic block.
2174 *
2175 * @see llvm::BasicBlock::Create()
2176 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +00002177LLVMBasicBlockRef LLVMInsertBasicBlockInContext(LLVMContextRef C,
2178 LLVMBasicBlockRef BB,
2179 const char *Name);
2180
Gregory Szorc34c863a2012-03-21 03:54:29 +00002181/**
2182 * Insert a basic block in a function using the global context.
2183 *
2184 * @see llvm::BasicBlock::Create()
2185 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002186LLVMBasicBlockRef LLVMInsertBasicBlock(LLVMBasicBlockRef InsertBeforeBB,
2187 const char *Name);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002188
2189/**
2190 * Remove a basic block from a function and delete it.
2191 *
2192 * This deletes the basic block from its containing function and deletes
2193 * the basic block itself.
2194 *
2195 * @see llvm::BasicBlock::eraseFromParent()
2196 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002197void LLVMDeleteBasicBlock(LLVMBasicBlockRef BB);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002198
2199/**
2200 * Remove a basic block from a function.
2201 *
2202 * This deletes the basic block from its containing function but keep
2203 * the basic block alive.
2204 *
2205 * @see llvm::BasicBlock::removeFromParent()
2206 */
Nate Begeman43c322b2011-08-23 20:27:46 +00002207void LLVMRemoveBasicBlockFromParent(LLVMBasicBlockRef BB);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002208
Gregory Szorc34c863a2012-03-21 03:54:29 +00002209/**
2210 * Move a basic block to before another one.
2211 *
2212 * @see llvm::BasicBlock::moveBefore()
2213 */
Duncan Sandsb1d61aa2010-07-19 15:31:07 +00002214void LLVMMoveBasicBlockBefore(LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002215
2216/**
2217 * Move a basic block to after another one.
2218 *
2219 * @see llvm::BasicBlock::moveAfter()
2220 */
Duncan Sandsb1d61aa2010-07-19 15:31:07 +00002221void LLVMMoveBasicBlockAfter(LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos);
2222
Gregory Szorc34c863a2012-03-21 03:54:29 +00002223/**
2224 * Obtain the first instruction in a basic block.
2225 *
2226 * The returned LLVMValueRef corresponds to a llvm::Instruction
2227 * instance.
2228 */
Gordon Henriksen054817c2008-03-19 03:47:18 +00002229LLVMValueRef LLVMGetFirstInstruction(LLVMBasicBlockRef BB);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002230
2231/**
2232 * Obtain the last instruction in a basic block.
2233 *
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +00002234 * The returned LLVMValueRef corresponds to an LLVM:Instruction.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002235 */
Gordon Henriksen054817c2008-03-19 03:47:18 +00002236LLVMValueRef LLVMGetLastInstruction(LLVMBasicBlockRef BB);
Nate Begeman43c322b2011-08-23 20:27:46 +00002237
Gregory Szorc34c863a2012-03-21 03:54:29 +00002238/**
2239 * @}
2240 */
2241
2242/**
2243 * @defgroup LLVMCCoreValueInstruction Instructions
2244 *
2245 * Functions in this group relate to the inspection and manipulation of
2246 * individual instructions.
2247 *
2248 * In the C++ API, an instruction is modeled by llvm::Instruction. This
2249 * class has a large number of descendents. llvm::Instruction is a
2250 * llvm::Value and in the C API, instructions are modeled by
2251 * LLVMValueRef.
2252 *
2253 * This group also contains sub-groups which operate on specific
2254 * llvm::Instruction types, e.g. llvm::CallInst.
2255 *
2256 * @{
2257 */
2258
2259/**
2260 * Determine whether an instruction has any metadata attached.
2261 */
2262int LLVMHasMetadata(LLVMValueRef Val);
2263
2264/**
2265 * Return metadata associated with an instruction value.
2266 */
2267LLVMValueRef LLVMGetMetadata(LLVMValueRef Val, unsigned KindID);
2268
2269/**
2270 * Set metadata associated with an instruction value.
2271 */
2272void LLVMSetMetadata(LLVMValueRef Val, unsigned KindID, LLVMValueRef Node);
2273
2274/**
2275 * Obtain the basic block to which an instruction belongs.
2276 *
2277 * @see llvm::Instruction::getParent()
2278 */
Nate Begeman43c322b2011-08-23 20:27:46 +00002279LLVMBasicBlockRef LLVMGetInstructionParent(LLVMValueRef Inst);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002280
2281/**
2282 * Obtain the instruction that occurs after the one specified.
2283 *
2284 * The next instruction will be from the same basic block.
2285 *
2286 * If this is the last instruction in a basic block, NULL will be
2287 * returned.
2288 */
Gordon Henriksen054817c2008-03-19 03:47:18 +00002289LLVMValueRef LLVMGetNextInstruction(LLVMValueRef Inst);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002290
2291/**
Benjamin Kramerbde91762012-06-02 10:20:22 +00002292 * Obtain the instruction that occurred before this one.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002293 *
2294 * If the instruction is the first instruction in a basic block, NULL
2295 * will be returned.
2296 */
Gordon Henriksen054817c2008-03-19 03:47:18 +00002297LLVMValueRef LLVMGetPreviousInstruction(LLVMValueRef Inst);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002298
2299/**
2300 * Remove and delete an instruction.
2301 *
2302 * The instruction specified is removed from its containing building
2303 * block and then deleted.
2304 *
2305 * @see llvm::Instruction::eraseFromParent()
2306 */
Devang Pateldbebc6f2011-10-03 20:59:18 +00002307void LLVMInstructionEraseFromParent(LLVMValueRef Inst);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002308
2309/**
2310 * Obtain the code opcode for an individual instruction.
2311 *
2312 * @see llvm::Instruction::getOpCode()
2313 */
Torok Edwinab6158e2011-10-14 20:37:49 +00002314LLVMOpcode LLVMGetInstructionOpcode(LLVMValueRef Inst);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002315
2316/**
2317 * Obtain the predicate of an instruction.
2318 *
2319 * This is only valid for instructions that correspond to llvm::ICmpInst
2320 * or llvm::ConstantExpr whose opcode is llvm::Instruction::ICmp.
2321 *
2322 * @see llvm::ICmpInst::getPredicate()
2323 */
Torok Edwin60c40de2011-10-06 12:13:20 +00002324LLVMIntPredicate LLVMGetICmpPredicate(LLVMValueRef Inst);
Gordon Henriksen265f7802008-03-19 01:11:35 +00002325
Gregory Szorc34c863a2012-03-21 03:54:29 +00002326/**
2327 * @defgroup LLVMCCoreValueInstructionCall Call Sites and Invocations
2328 *
2329 * Functions in this group apply to instructions that refer to call
2330 * sites and invocations. These correspond to C++ types in the
2331 * llvm::CallInst class tree.
2332 *
2333 * @{
2334 */
2335
2336/**
2337 * Set the calling convention for a call instruction.
2338 *
2339 * This expects an LLVMValueRef that corresponds to a llvm::CallInst or
2340 * llvm::InvokeInst.
2341 *
2342 * @see llvm::CallInst::setCallingConv()
2343 * @see llvm::InvokeInst::setCallingConv()
2344 */
Gordon Henriksen1158c532007-12-29 20:45:00 +00002345void LLVMSetInstructionCallConv(LLVMValueRef Instr, unsigned CC);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002346
2347/**
2348 * Obtain the calling convention for a call instruction.
2349 *
2350 * This is the opposite of LLVMSetInstructionCallConv(). Reads its
2351 * usage.
2352 *
2353 * @see LLVMSetInstructionCallConv()
2354 */
Gordon Henriksen1158c532007-12-29 20:45:00 +00002355unsigned LLVMGetInstructionCallConv(LLVMValueRef Instr);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002356
2357
Devang Patel4c758ea2008-09-25 21:00:45 +00002358void LLVMAddInstrAttribute(LLVMValueRef Instr, unsigned index, LLVMAttribute);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002359void LLVMRemoveInstrAttribute(LLVMValueRef Instr, unsigned index,
Devang Patel4c758ea2008-09-25 21:00:45 +00002360 LLVMAttribute);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002361void LLVMSetInstrParamAlignment(LLVMValueRef Instr, unsigned index,
Gordon Henriksen2d9cc212008-04-28 17:37:06 +00002362 unsigned align);
Gordon Henriksen1158c532007-12-29 20:45:00 +00002363
Gregory Szorc34c863a2012-03-21 03:54:29 +00002364/**
2365 * Obtain whether a call instruction is a tail call.
2366 *
2367 * This only works on llvm::CallInst instructions.
2368 *
2369 * @see llvm::CallInst::isTailCall()
2370 */
Chris Lattner25963c62010-01-09 22:27:07 +00002371LLVMBool LLVMIsTailCall(LLVMValueRef CallInst);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002372
2373/**
2374 * Set whether a call instruction is a tail call.
2375 *
2376 * This only works on llvm::CallInst instructions.
2377 *
2378 * @see llvm::CallInst::setTailCall()
2379 */
Chris Lattner25963c62010-01-09 22:27:07 +00002380void LLVMSetTailCall(LLVMValueRef CallInst, LLVMBool IsTailCall);
Gordon Henrikseneeb65372008-08-30 16:34:54 +00002381
Gregory Szorc34c863a2012-03-21 03:54:29 +00002382/**
2383 * @}
2384 */
2385
2386/**
2387 * Obtain the default destination basic block of a switch instruction.
2388 *
2389 * This only works on llvm::SwitchInst instructions.
2390 *
2391 * @see llvm::SwitchInst::getDefaultDest()
2392 */
Nate Begeman43c322b2011-08-23 20:27:46 +00002393LLVMBasicBlockRef LLVMGetSwitchDefaultDest(LLVMValueRef SwitchInstr);
2394
Gregory Szorc34c863a2012-03-21 03:54:29 +00002395/**
2396 * @defgroup LLVMCCoreValueInstructionPHINode PHI Nodes
2397 *
2398 * Functions in this group only apply to instructions that map to
2399 * llvm::PHINode instances.
2400 *
2401 * @{
2402 */
2403
2404/**
2405 * Add an incoming value to the end of a PHI list.
2406 */
Gordon Henriksen44dd8fb2007-10-08 18:14:39 +00002407void LLVMAddIncoming(LLVMValueRef PhiNode, LLVMValueRef *IncomingValues,
2408 LLVMBasicBlockRef *IncomingBlocks, unsigned Count);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002409
2410/**
2411 * Obtain the number of incoming basic blocks to a PHI node.
2412 */
Gordon Henriksen44dd8fb2007-10-08 18:14:39 +00002413unsigned LLVMCountIncoming(LLVMValueRef PhiNode);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002414
2415/**
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +00002416 * Obtain an incoming value to a PHI node as an LLVMValueRef.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002417 */
Gordon Henriksen44dd8fb2007-10-08 18:14:39 +00002418LLVMValueRef LLVMGetIncomingValue(LLVMValueRef PhiNode, unsigned Index);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002419
2420/**
Daniel Dunbar06b9f9e2013-08-16 23:30:19 +00002421 * Obtain an incoming value to a PHI node as an LLVMBasicBlockRef.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002422 */
Gordon Henriksen44dd8fb2007-10-08 18:14:39 +00002423LLVMBasicBlockRef LLVMGetIncomingBlock(LLVMValueRef PhiNode, unsigned Index);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002424
Gregory Szorc34c863a2012-03-21 03:54:29 +00002425/**
2426 * @}
2427 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002428
Gregory Szorc34c863a2012-03-21 03:54:29 +00002429/**
2430 * @}
2431 */
2432
2433/**
2434 * @}
2435 */
2436
2437/**
2438 * @defgroup LLVMCCoreInstructionBuilder Instruction Builders
2439 *
2440 * An instruction builder represents a point within a basic block and is
2441 * the exclusive means of building instructions using the C interface.
2442 *
2443 * @{
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002444 */
2445
Erick Tryzelaar262332f2009-08-14 00:01:31 +00002446LLVMBuilderRef LLVMCreateBuilderInContext(LLVMContextRef C);
Gordon Henriksena735a9c2008-05-04 12:55:34 +00002447LLVMBuilderRef LLVMCreateBuilder(void);
Gordon Henriksen054817c2008-03-19 03:47:18 +00002448void LLVMPositionBuilder(LLVMBuilderRef Builder, LLVMBasicBlockRef Block,
2449 LLVMValueRef Instr);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002450void LLVMPositionBuilderBefore(LLVMBuilderRef Builder, LLVMValueRef Instr);
2451void LLVMPositionBuilderAtEnd(LLVMBuilderRef Builder, LLVMBasicBlockRef Block);
Gordon Henriksen265f7802008-03-19 01:11:35 +00002452LLVMBasicBlockRef LLVMGetInsertBlock(LLVMBuilderRef Builder);
Chris Lattner3d1f5522008-12-17 21:39:50 +00002453void LLVMClearInsertionPosition(LLVMBuilderRef Builder);
2454void LLVMInsertIntoBuilder(LLVMBuilderRef Builder, LLVMValueRef Instr);
Erick Tryzelaar9813bea2009-08-16 02:20:57 +00002455void LLVMInsertIntoBuilderWithName(LLVMBuilderRef Builder, LLVMValueRef Instr,
2456 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002457void LLVMDisposeBuilder(LLVMBuilderRef Builder);
2458
Erick Tryzelaard8531fa2010-02-28 09:45:59 +00002459/* Metadata */
2460void LLVMSetCurrentDebugLocation(LLVMBuilderRef Builder, LLVMValueRef L);
2461LLVMValueRef LLVMGetCurrentDebugLocation(LLVMBuilderRef Builder);
2462void LLVMSetInstDebugLocation(LLVMBuilderRef Builder, LLVMValueRef Inst);
2463
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002464/* Terminators */
2465LLVMValueRef LLVMBuildRetVoid(LLVMBuilderRef);
2466LLVMValueRef LLVMBuildRet(LLVMBuilderRef, LLVMValueRef V);
Erick Tryzelaarfd529d72009-08-19 08:36:49 +00002467LLVMValueRef LLVMBuildAggregateRet(LLVMBuilderRef, LLVMValueRef *RetVals,
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002468 unsigned N);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002469LLVMValueRef LLVMBuildBr(LLVMBuilderRef, LLVMBasicBlockRef Dest);
2470LLVMValueRef LLVMBuildCondBr(LLVMBuilderRef, LLVMValueRef If,
2471 LLVMBasicBlockRef Then, LLVMBasicBlockRef Else);
2472LLVMValueRef LLVMBuildSwitch(LLVMBuilderRef, LLVMValueRef V,
2473 LLVMBasicBlockRef Else, unsigned NumCases);
Erick Tryzelaar0fb26ef2010-02-28 09:46:06 +00002474LLVMValueRef LLVMBuildIndirectBr(LLVMBuilderRef B, LLVMValueRef Addr,
2475 unsigned NumDests);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002476LLVMValueRef LLVMBuildInvoke(LLVMBuilderRef, LLVMValueRef Fn,
2477 LLVMValueRef *Args, unsigned NumArgs,
2478 LLVMBasicBlockRef Then, LLVMBasicBlockRef Catch,
2479 const char *Name);
Benjamin Kramer5a6568832011-08-19 01:36:54 +00002480LLVMValueRef LLVMBuildLandingPad(LLVMBuilderRef B, LLVMTypeRef Ty,
2481 LLVMValueRef PersFn, unsigned NumClauses,
2482 const char *Name);
Bill Wendlingf891bf82011-07-31 06:30:59 +00002483LLVMValueRef LLVMBuildResume(LLVMBuilderRef B, LLVMValueRef Exn);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002484LLVMValueRef LLVMBuildUnreachable(LLVMBuilderRef);
2485
Gordon Henriksen097102c2008-01-01 05:50:53 +00002486/* Add a case to the switch instruction */
2487void LLVMAddCase(LLVMValueRef Switch, LLVMValueRef OnVal,
2488 LLVMBasicBlockRef Dest);
2489
Erick Tryzelaar0fb26ef2010-02-28 09:46:06 +00002490/* Add a destination to the indirectbr instruction */
2491void LLVMAddDestination(LLVMValueRef IndirectBr, LLVMBasicBlockRef Dest);
2492
Bill Wendlingfae14752011-08-12 20:24:12 +00002493/* Add a catch or filter clause to the landingpad instruction */
2494void LLVMAddClause(LLVMValueRef LandingPad, LLVMValueRef ClauseVal);
2495
2496/* Set the 'cleanup' flag in the landingpad instruction */
2497void LLVMSetCleanup(LLVMValueRef LandingPad, LLVMBool Val);
2498
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002499/* Arithmetic */
2500LLVMValueRef LLVMBuildAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2501 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002502LLVMValueRef LLVMBuildNSWAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2503 const char *Name);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +00002504LLVMValueRef LLVMBuildNUWAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2505 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002506LLVMValueRef LLVMBuildFAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2507 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002508LLVMValueRef LLVMBuildSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2509 const char *Name);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +00002510LLVMValueRef LLVMBuildNSWSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2511 const char *Name);
2512LLVMValueRef LLVMBuildNUWSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2513 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002514LLVMValueRef LLVMBuildFSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2515 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002516LLVMValueRef LLVMBuildMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2517 const char *Name);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +00002518LLVMValueRef LLVMBuildNSWMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2519 const char *Name);
2520LLVMValueRef LLVMBuildNUWMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2521 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002522LLVMValueRef LLVMBuildFMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2523 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002524LLVMValueRef LLVMBuildUDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2525 const char *Name);
2526LLVMValueRef LLVMBuildSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2527 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002528LLVMValueRef LLVMBuildExactSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2529 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002530LLVMValueRef LLVMBuildFDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2531 const char *Name);
2532LLVMValueRef LLVMBuildURem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2533 const char *Name);
2534LLVMValueRef LLVMBuildSRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2535 const char *Name);
2536LLVMValueRef LLVMBuildFRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2537 const char *Name);
2538LLVMValueRef LLVMBuildShl(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2539 const char *Name);
2540LLVMValueRef LLVMBuildLShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2541 const char *Name);
2542LLVMValueRef LLVMBuildAShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2543 const char *Name);
2544LLVMValueRef LLVMBuildAnd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2545 const char *Name);
2546LLVMValueRef LLVMBuildOr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2547 const char *Name);
2548LLVMValueRef LLVMBuildXor(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2549 const char *Name);
Erick Tryzelaar31831792010-02-28 05:51:27 +00002550LLVMValueRef LLVMBuildBinOp(LLVMBuilderRef B, LLVMOpcode Op,
2551 LLVMValueRef LHS, LLVMValueRef RHS,
2552 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002553LLVMValueRef LLVMBuildNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +00002554LLVMValueRef LLVMBuildNSWNeg(LLVMBuilderRef B, LLVMValueRef V,
2555 const char *Name);
2556LLVMValueRef LLVMBuildNUWNeg(LLVMBuilderRef B, LLVMValueRef V,
2557 const char *Name);
Dan Gohmanf919bd62009-09-28 21:51:41 +00002558LLVMValueRef LLVMBuildFNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002559LLVMValueRef LLVMBuildNot(LLVMBuilderRef, LLVMValueRef V, const char *Name);
2560
2561/* Memory */
2562LLVMValueRef LLVMBuildMalloc(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
2563LLVMValueRef LLVMBuildArrayMalloc(LLVMBuilderRef, LLVMTypeRef Ty,
2564 LLVMValueRef Val, const char *Name);
2565LLVMValueRef LLVMBuildAlloca(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
2566LLVMValueRef LLVMBuildArrayAlloca(LLVMBuilderRef, LLVMTypeRef Ty,
2567 LLVMValueRef Val, const char *Name);
2568LLVMValueRef LLVMBuildFree(LLVMBuilderRef, LLVMValueRef PointerVal);
2569LLVMValueRef LLVMBuildLoad(LLVMBuilderRef, LLVMValueRef PointerVal,
2570 const char *Name);
2571LLVMValueRef LLVMBuildStore(LLVMBuilderRef, LLVMValueRef Val, LLVMValueRef Ptr);
2572LLVMValueRef LLVMBuildGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
2573 LLVMValueRef *Indices, unsigned NumIndices,
2574 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002575LLVMValueRef LLVMBuildInBoundsGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
2576 LLVMValueRef *Indices, unsigned NumIndices,
2577 const char *Name);
2578LLVMValueRef LLVMBuildStructGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
2579 unsigned Idx, const char *Name);
2580LLVMValueRef LLVMBuildGlobalString(LLVMBuilderRef B, const char *Str,
2581 const char *Name);
2582LLVMValueRef LLVMBuildGlobalStringPtr(LLVMBuilderRef B, const char *Str,
2583 const char *Name);
Chris Lattner2cc6f9d2012-03-22 03:54:15 +00002584LLVMBool LLVMGetVolatile(LLVMValueRef MemoryAccessInst);
2585void LLVMSetVolatile(LLVMValueRef MemoryAccessInst, LLVMBool IsVolatile);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002586
2587/* Casts */
2588LLVMValueRef LLVMBuildTrunc(LLVMBuilderRef, LLVMValueRef Val,
2589 LLVMTypeRef DestTy, const char *Name);
2590LLVMValueRef LLVMBuildZExt(LLVMBuilderRef, LLVMValueRef Val,
2591 LLVMTypeRef DestTy, const char *Name);
2592LLVMValueRef LLVMBuildSExt(LLVMBuilderRef, LLVMValueRef Val,
2593 LLVMTypeRef DestTy, const char *Name);
2594LLVMValueRef LLVMBuildFPToUI(LLVMBuilderRef, LLVMValueRef Val,
2595 LLVMTypeRef DestTy, const char *Name);
2596LLVMValueRef LLVMBuildFPToSI(LLVMBuilderRef, LLVMValueRef Val,
2597 LLVMTypeRef DestTy, const char *Name);
2598LLVMValueRef LLVMBuildUIToFP(LLVMBuilderRef, LLVMValueRef Val,
2599 LLVMTypeRef DestTy, const char *Name);
2600LLVMValueRef LLVMBuildSIToFP(LLVMBuilderRef, LLVMValueRef Val,
2601 LLVMTypeRef DestTy, const char *Name);
2602LLVMValueRef LLVMBuildFPTrunc(LLVMBuilderRef, LLVMValueRef Val,
2603 LLVMTypeRef DestTy, const char *Name);
2604LLVMValueRef LLVMBuildFPExt(LLVMBuilderRef, LLVMValueRef Val,
2605 LLVMTypeRef DestTy, const char *Name);
2606LLVMValueRef LLVMBuildPtrToInt(LLVMBuilderRef, LLVMValueRef Val,
2607 LLVMTypeRef DestTy, const char *Name);
2608LLVMValueRef LLVMBuildIntToPtr(LLVMBuilderRef, LLVMValueRef Val,
2609 LLVMTypeRef DestTy, const char *Name);
2610LLVMValueRef LLVMBuildBitCast(LLVMBuilderRef, LLVMValueRef Val,
2611 LLVMTypeRef DestTy, const char *Name);
Matt Arsenaultb03bd4d2013-11-15 01:34:59 +00002612LLVMValueRef LLVMBuildAddrSpaceCast(LLVMBuilderRef, LLVMValueRef Val,
2613 LLVMTypeRef DestTy, const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002614LLVMValueRef LLVMBuildZExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
2615 LLVMTypeRef DestTy, const char *Name);
2616LLVMValueRef LLVMBuildSExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
2617 LLVMTypeRef DestTy, const char *Name);
2618LLVMValueRef LLVMBuildTruncOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
2619 LLVMTypeRef DestTy, const char *Name);
Erick Tryzelaar31831792010-02-28 05:51:27 +00002620LLVMValueRef LLVMBuildCast(LLVMBuilderRef B, LLVMOpcode Op, LLVMValueRef Val,
2621 LLVMTypeRef DestTy, const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002622LLVMValueRef LLVMBuildPointerCast(LLVMBuilderRef, LLVMValueRef Val,
2623 LLVMTypeRef DestTy, const char *Name);
Duncan Sands9d786d72009-11-23 10:49:03 +00002624LLVMValueRef LLVMBuildIntCast(LLVMBuilderRef, LLVMValueRef Val, /*Signed cast!*/
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002625 LLVMTypeRef DestTy, const char *Name);
2626LLVMValueRef LLVMBuildFPCast(LLVMBuilderRef, LLVMValueRef Val,
2627 LLVMTypeRef DestTy, const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002628
2629/* Comparisons */
2630LLVMValueRef LLVMBuildICmp(LLVMBuilderRef, LLVMIntPredicate Op,
2631 LLVMValueRef LHS, LLVMValueRef RHS,
2632 const char *Name);
2633LLVMValueRef LLVMBuildFCmp(LLVMBuilderRef, LLVMRealPredicate Op,
2634 LLVMValueRef LHS, LLVMValueRef RHS,
2635 const char *Name);
2636
2637/* Miscellaneous instructions */
2638LLVMValueRef LLVMBuildPhi(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
2639LLVMValueRef LLVMBuildCall(LLVMBuilderRef, LLVMValueRef Fn,
2640 LLVMValueRef *Args, unsigned NumArgs,
2641 const char *Name);
2642LLVMValueRef LLVMBuildSelect(LLVMBuilderRef, LLVMValueRef If,
2643 LLVMValueRef Then, LLVMValueRef Else,
2644 const char *Name);
2645LLVMValueRef LLVMBuildVAArg(LLVMBuilderRef, LLVMValueRef List, LLVMTypeRef Ty,
2646 const char *Name);
2647LLVMValueRef LLVMBuildExtractElement(LLVMBuilderRef, LLVMValueRef VecVal,
2648 LLVMValueRef Index, const char *Name);
2649LLVMValueRef LLVMBuildInsertElement(LLVMBuilderRef, LLVMValueRef VecVal,
2650 LLVMValueRef EltVal, LLVMValueRef Index,
2651 const char *Name);
2652LLVMValueRef LLVMBuildShuffleVector(LLVMBuilderRef, LLVMValueRef V1,
2653 LLVMValueRef V2, LLVMValueRef Mask,
2654 const char *Name);
Dan Gohmand5104a52008-11-03 22:55:43 +00002655LLVMValueRef LLVMBuildExtractValue(LLVMBuilderRef, LLVMValueRef AggVal,
2656 unsigned Index, const char *Name);
2657LLVMValueRef LLVMBuildInsertValue(LLVMBuilderRef, LLVMValueRef AggVal,
2658 LLVMValueRef EltVal, unsigned Index,
2659 const char *Name);
Gordon Henriksen76a03742007-09-18 03:18:57 +00002660
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002661LLVMValueRef LLVMBuildIsNull(LLVMBuilderRef, LLVMValueRef Val,
2662 const char *Name);
2663LLVMValueRef LLVMBuildIsNotNull(LLVMBuilderRef, LLVMValueRef Val,
2664 const char *Name);
2665LLVMValueRef LLVMBuildPtrDiff(LLVMBuilderRef, LLVMValueRef LHS,
2666 LLVMValueRef RHS, const char *Name);
Filip Pizlo0d3f7ec2013-11-20 00:07:49 +00002667LLVMValueRef LLVMBuildFence(LLVMBuilderRef B, LLVMAtomicOrdering ordering,
2668 LLVMBool singleThread, const char *Name);
2669LLVMValueRef LLVMBuildAtomicRMW(LLVMBuilderRef B, LLVMAtomicRMWBinOp op,
NAKAMURA Takumia3a81352013-10-23 17:56:29 +00002670 LLVMValueRef PTR, LLVMValueRef Val,
2671 LLVMAtomicOrdering ordering,
Carlo Kok8c6719b2013-04-23 13:21:19 +00002672 LLVMBool singleThread);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002673
Gregory Szorc34c863a2012-03-21 03:54:29 +00002674/**
2675 * @}
2676 */
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00002677
Gregory Szorc34c863a2012-03-21 03:54:29 +00002678/**
2679 * @defgroup LLVMCCoreModuleProvider Module Providers
2680 *
2681 * @{
2682 */
Gordon Henriksen0a68fe22007-12-12 01:04:30 +00002683
Gregory Szorc34c863a2012-03-21 03:54:29 +00002684/**
2685 * Changes the type of M so it can be passed to FunctionPassManagers and the
Jeffrey Yasskin091217b2010-01-27 20:34:15 +00002686 * JIT. They take ModuleProviders for historical reasons.
Gordon Henriksen0a68fe22007-12-12 01:04:30 +00002687 */
2688LLVMModuleProviderRef
2689LLVMCreateModuleProviderForExistingModule(LLVMModuleRef M);
2690
Gregory Szorc34c863a2012-03-21 03:54:29 +00002691/**
2692 * Destroys the module M.
Gordon Henriksen0a68fe22007-12-12 01:04:30 +00002693 */
Jeffrey Yasskin091217b2010-01-27 20:34:15 +00002694void LLVMDisposeModuleProvider(LLVMModuleProviderRef M);
Gordon Henriksen0a68fe22007-12-12 01:04:30 +00002695
Gregory Szorc34c863a2012-03-21 03:54:29 +00002696/**
2697 * @}
2698 */
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00002699
Gregory Szorc34c863a2012-03-21 03:54:29 +00002700/**
2701 * @defgroup LLVMCCoreMemoryBuffers Memory Buffers
2702 *
2703 * @{
2704 */
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00002705
Chris Lattner25963c62010-01-09 22:27:07 +00002706LLVMBool LLVMCreateMemoryBufferWithContentsOfFile(const char *Path,
2707 LLVMMemoryBufferRef *OutMemBuf,
2708 char **OutMessage);
2709LLVMBool LLVMCreateMemoryBufferWithSTDIN(LLVMMemoryBufferRef *OutMemBuf,
2710 char **OutMessage);
Bill Wendling526276a2013-02-14 19:11:28 +00002711LLVMMemoryBufferRef LLVMCreateMemoryBufferWithMemoryRange(const char *InputData,
2712 size_t InputDataLength,
2713 const char *BufferName,
Bill Wendlingc9baa962013-02-14 19:39:14 +00002714 LLVMBool RequiresNullTerminator);
Bill Wendling526276a2013-02-14 19:11:28 +00002715LLVMMemoryBufferRef LLVMCreateMemoryBufferWithMemoryRangeCopy(const char *InputData,
2716 size_t InputDataLength,
2717 const char *BufferName);
Tom Stellard62c03202013-04-18 19:50:53 +00002718const char *LLVMGetBufferStart(LLVMMemoryBufferRef MemBuf);
Tom Stellardb7fb7242013-04-16 23:12:51 +00002719size_t LLVMGetBufferSize(LLVMMemoryBufferRef MemBuf);
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00002720void LLVMDisposeMemoryBuffer(LLVMMemoryBufferRef MemBuf);
2721
Gregory Szorc34c863a2012-03-21 03:54:29 +00002722/**
2723 * @}
2724 */
2725
2726/**
2727 * @defgroup LLVMCCorePassRegistry Pass Registry
2728 *
2729 * @{
2730 */
Owen Anderson4698c5d2010-10-07 17:55:47 +00002731
2732/** Return the global pass registry, for use with initialization functions.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002733 @see llvm::PassRegistry::getPassRegistry */
Owen Anderson4698c5d2010-10-07 17:55:47 +00002734LLVMPassRegistryRef LLVMGetGlobalPassRegistry(void);
Gordon Henriksen878114b2008-03-16 04:20:44 +00002735
Gregory Szorc34c863a2012-03-21 03:54:29 +00002736/**
2737 * @}
2738 */
2739
2740/**
2741 * @defgroup LLVMCCorePassManagers Pass Managers
2742 *
2743 * @{
2744 */
Gordon Henriksen878114b2008-03-16 04:20:44 +00002745
2746/** Constructs a new whole-module pass pipeline. This type of pipeline is
2747 suitable for link-time optimization and whole-module transformations.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002748 @see llvm::PassManager::PassManager */
Gordon Henriksena735a9c2008-05-04 12:55:34 +00002749LLVMPassManagerRef LLVMCreatePassManager(void);
Gordon Henriksen878114b2008-03-16 04:20:44 +00002750
2751/** Constructs a new function-by-function pass pipeline over the module
2752 provider. It does not take ownership of the module provider. This type of
2753 pipeline is suitable for code generation and JIT compilation tasks.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002754 @see llvm::FunctionPassManager::FunctionPassManager */
Erick Tryzelaarad0e0cb2010-03-02 23:58:54 +00002755LLVMPassManagerRef LLVMCreateFunctionPassManagerForModule(LLVMModuleRef M);
2756
2757/** Deprecated: Use LLVMCreateFunctionPassManagerForModule instead. */
Gordon Henriksen878114b2008-03-16 04:20:44 +00002758LLVMPassManagerRef LLVMCreateFunctionPassManager(LLVMModuleProviderRef MP);
2759
2760/** Initializes, executes on the provided module, and finalizes all of the
2761 passes scheduled in the pass manager. Returns 1 if any of the passes
Gregory Szorc34c863a2012-03-21 03:54:29 +00002762 modified the module, 0 otherwise.
2763 @see llvm::PassManager::run(Module&) */
Chris Lattner25963c62010-01-09 22:27:07 +00002764LLVMBool LLVMRunPassManager(LLVMPassManagerRef PM, LLVMModuleRef M);
Gordon Henriksen878114b2008-03-16 04:20:44 +00002765
2766/** Initializes all of the function passes scheduled in the function pass
2767 manager. Returns 1 if any of the passes modified the module, 0 otherwise.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002768 @see llvm::FunctionPassManager::doInitialization */
Chris Lattner25963c62010-01-09 22:27:07 +00002769LLVMBool LLVMInitializeFunctionPassManager(LLVMPassManagerRef FPM);
Gordon Henriksen878114b2008-03-16 04:20:44 +00002770
2771/** Executes all of the function passes scheduled in the function pass manager
2772 on the provided function. Returns 1 if any of the passes modified the
2773 function, false otherwise.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002774 @see llvm::FunctionPassManager::run(Function&) */
Chris Lattner25963c62010-01-09 22:27:07 +00002775LLVMBool LLVMRunFunctionPassManager(LLVMPassManagerRef FPM, LLVMValueRef F);
Gordon Henriksen878114b2008-03-16 04:20:44 +00002776
2777/** Finalizes all of the function passes scheduled in in the function pass
2778 manager. Returns 1 if any of the passes modified the module, 0 otherwise.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002779 @see llvm::FunctionPassManager::doFinalization */
Chris Lattner25963c62010-01-09 22:27:07 +00002780LLVMBool LLVMFinalizeFunctionPassManager(LLVMPassManagerRef FPM);
Gordon Henriksen878114b2008-03-16 04:20:44 +00002781
2782/** Frees the memory of a pass pipeline. For function pipelines, does not free
2783 the module provider.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002784 @see llvm::PassManagerBase::~PassManagerBase. */
Gordon Henriksen878114b2008-03-16 04:20:44 +00002785void LLVMDisposePassManager(LLVMPassManagerRef PM);
2786
Gregory Szorc34c863a2012-03-21 03:54:29 +00002787/**
2788 * @}
2789 */
2790
2791/**
Duncan Sands1cba0a82013-02-17 16:35:51 +00002792 * @defgroup LLVMCCoreThreading Threading
2793 *
2794 * Handle the structures needed to make LLVM safe for multithreading.
2795 *
2796 * @{
2797 */
2798
2799/** Allocate and initialize structures needed to make LLVM safe for
2800 multithreading. The return value indicates whether multithreaded
2801 initialization succeeded. Must be executed in isolation from all
2802 other LLVM api calls.
2803 @see llvm::llvm_start_multithreaded */
Benjamin Kramer325ec892013-10-23 16:57:34 +00002804LLVMBool LLVMStartMultithreaded(void);
Duncan Sands1cba0a82013-02-17 16:35:51 +00002805
2806/** Deallocate structures necessary to make LLVM safe for multithreading.
2807 Must be executed in isolation from all other LLVM api calls.
2808 @see llvm::llvm_stop_multithreaded */
Benjamin Kramer325ec892013-10-23 16:57:34 +00002809void LLVMStopMultithreaded(void);
Duncan Sands1cba0a82013-02-17 16:35:51 +00002810
2811/** Check whether LLVM is executing in thread-safe mode or not.
2812 @see llvm::llvm_is_multithreaded */
Benjamin Kramer325ec892013-10-23 16:57:34 +00002813LLVMBool LLVMIsMultithreaded(void);
Duncan Sands1cba0a82013-02-17 16:35:51 +00002814
2815/**
2816 * @}
2817 */
2818
2819/**
Gregory Szorc34c863a2012-03-21 03:54:29 +00002820 * @}
2821 */
2822
2823/**
2824 * @}
2825 */
Gordon Henriksen878114b2008-03-16 04:20:44 +00002826
Gordon Henriksen76a03742007-09-18 03:18:57 +00002827#ifdef __cplusplus
2828}
Evan Cheng2e254d02013-04-04 17:40:53 +00002829#endif /* !defined(__cplusplus) */
Gordon Henriksen7330acd2007-10-05 23:59:36 +00002830
Evan Cheng2e254d02013-04-04 17:40:53 +00002831#endif /* !defined(LLVM_C_CORE_H) */