blob: 52b8b1c046b57cc93cdbf1a2e636125a4e7c75e5 [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
Gordon Henriksen76a03742007-09-18 03:18:57 +000020#ifdef __cplusplus
Gordon Henriksen7330acd2007-10-05 23:59:36 +000021
22/* Need these includes to support the LLVM 'cast' template for the C++ 'wrap'
23 and 'unwrap' conversion functions. */
24#include "llvm/Module.h"
Owen Anderson4698c5d2010-10-07 17:55:47 +000025#include "llvm/PassRegistry.h"
Duncan Sandsa07136e2008-04-13 06:22:09 +000026#include "llvm/Support/IRBuilder.h"
Gordon Henriksen7330acd2007-10-05 23:59:36 +000027
Gordon Henriksen76a03742007-09-18 03:18:57 +000028extern "C" {
29#endif
30
Gregory Szorc34c863a2012-03-21 03:54:29 +000031/**
32 * @defgroup LLVMC LLVM-C: C interface to LLVM
33 *
34 * This module exposes parts of the LLVM library as a C API.
35 *
36 * @{
37 */
38
39/**
40 * @defgroup LLVMCTransforms Transforms
41 */
42
43/**
44 * @defgroup LLVMCCore Core
45 *
46 * This modules provide an interface to libLLVMCore, which implements
47 * the LLVM intermediate representation as well as other related types
48 * and utilities.
49 *
50 * LLVM uses a polymorphic type hierarchy which C cannot represent, therefore
51 * parameters must be passed as base types. Despite the declared types, most
52 * of the functions provided operate only on branches of the type hierarchy.
53 * The declared parameter names are descriptive and specify which type is
54 * required. Additionally, each type hierarchy is documented along with the
55 * functions that operate upon it. For more detail, refer to LLVM's C++ code.
56 * If in doubt, refer to Core.cpp, which performs paramter downcasts in the
57 * form unwrap<RequiredType>(Param).
58 *
59 * Many exotic languages can interoperate with C code but have a harder time
60 * with C++ due to name mangling. So in addition to C, this interface enables
61 * tools written in such languages.
62 *
63 * When included into a C++ source file, also declares 'wrap' and 'unwrap'
64 * helpers to perform opaque reference<-->pointer conversions. These helpers
65 * are shorter and more tightly typed than writing the casts by hand when
66 * authoring bindings. In assert builds, they will do runtime type checking.
67 *
68 * @{
69 */
70
71/**
72 * @defgroup LLVMCCoreTypes Types and Enumerations
73 *
74 * @{
75 */
Gordon Henriksen76a03742007-09-18 03:18:57 +000076
Chris Lattner25963c62010-01-09 22:27:07 +000077typedef int LLVMBool;
78
Gordon Henriksen76a03742007-09-18 03:18:57 +000079/* Opaque types. */
Gordon Henriksen4a4d7352007-12-30 17:46:33 +000080
81/**
Gregory Szorc34c863a2012-03-21 03:54:29 +000082 * The top-level container for all LLVM global data. See the LLVMContext class.
Owen Anderson6773d382009-07-01 16:58:40 +000083 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +000084typedef struct LLVMOpaqueContext *LLVMContextRef;
Owen Anderson6773d382009-07-01 16:58:40 +000085
86/**
Gordon Henriksen4a4d7352007-12-30 17:46:33 +000087 * The top-level container for all other LLVM Intermediate Representation (IR)
Gregory Szorc34c863a2012-03-21 03:54:29 +000088 * objects.
89 *
90 * @see llvm::Module
Gordon Henriksen4a4d7352007-12-30 17:46:33 +000091 */
Gordon Henriksen76a03742007-09-18 03:18:57 +000092typedef struct LLVMOpaqueModule *LLVMModuleRef;
Gordon Henriksen4a4d7352007-12-30 17:46:33 +000093
94/**
Gregory Szorc34c863a2012-03-21 03:54:29 +000095 * Each value in the LLVM IR has a type, an LLVMTypeRef.
96 *
97 * @see llvm::Type
Gordon Henriksen4a4d7352007-12-30 17:46:33 +000098 */
Gordon Henriksen76a03742007-09-18 03:18:57 +000099typedef struct LLVMOpaqueType *LLVMTypeRef;
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000100
Gregory Szorc34c863a2012-03-21 03:54:29 +0000101/**
102 * Represents an individual value in LLVM IR.
103 *
104 * This models llvm::Value.
105 */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000106typedef struct LLVMOpaqueValue *LLVMValueRef;
Gregory Szorc34c863a2012-03-21 03:54:29 +0000107
108/**
109 * Represents a basic block of instruction in LLVM IR.
110 *
111 * This models llvm::BasicBlock.
112 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000113typedef struct LLVMOpaqueBasicBlock *LLVMBasicBlockRef;
Gregory Szorc34c863a2012-03-21 03:54:29 +0000114
115/**
116 * Represents an LLVM basic block builder.
117 *
118 * This models llvm::IRBuilder.
119 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000120typedef struct LLVMOpaqueBuilder *LLVMBuilderRef;
Gordon Henriksen34eb6d82007-12-19 22:30:40 +0000121
Gregory Szorc34c863a2012-03-21 03:54:29 +0000122/**
123 * Interface used to provide a module to JIT or interpreter.
124 * This is now just a synonym for llvm::Module, but we have to keep using the
125 * different type to keep binary compatibility.
Gordon Henriksen34eb6d82007-12-19 22:30:40 +0000126 */
Gordon Henriksen0a68fe22007-12-12 01:04:30 +0000127typedef struct LLVMOpaqueModuleProvider *LLVMModuleProviderRef;
Gordon Henriksen76a03742007-09-18 03:18:57 +0000128
Gregory Szorc34c863a2012-03-21 03:54:29 +0000129/**
130 * Used to provide a module to JIT or interpreter.
131 *
132 * @see llvm::MemoryBuffer
Gordon Henriksen34eb6d82007-12-19 22:30:40 +0000133 */
134typedef struct LLVMOpaqueMemoryBuffer *LLVMMemoryBufferRef;
135
Gregory Szorc34c863a2012-03-21 03:54:29 +0000136/** @see llvm::PassManagerBase */
Gordon Henriksen878114b2008-03-16 04:20:44 +0000137typedef struct LLVMOpaquePassManager *LLVMPassManagerRef;
138
Gregory Szorc34c863a2012-03-21 03:54:29 +0000139/** @see llvm::PassRegistry */
Owen Anderson4698c5d2010-10-07 17:55:47 +0000140typedef struct LLVMOpaquePassRegistry *LLVMPassRegistryRef;
141
Gregory Szorc34c863a2012-03-21 03:54:29 +0000142/**
143 * Used to get the users and usees of a Value.
144 *
145 * @see llvm::Use */
Erick Tryzelaar9f9857e2010-03-02 20:32:28 +0000146typedef struct LLVMOpaqueUse *LLVMUseRef;
Chris Lattner40cf28d2009-10-12 04:01:02 +0000147
Gordon Henriksen76a03742007-09-18 03:18:57 +0000148typedef enum {
Devang Patel4c758ea2008-09-25 21:00:45 +0000149 LLVMZExtAttribute = 1<<0,
150 LLVMSExtAttribute = 1<<1,
151 LLVMNoReturnAttribute = 1<<2,
152 LLVMInRegAttribute = 1<<3,
153 LLVMStructRetAttribute = 1<<4,
154 LLVMNoUnwindAttribute = 1<<5,
155 LLVMNoAliasAttribute = 1<<6,
156 LLVMByValAttribute = 1<<7,
157 LLVMNestAttribute = 1<<8,
158 LLVMReadNoneAttribute = 1<<9,
Anton Korobeynikovc8ce7b082009-07-17 18:07:26 +0000159 LLVMReadOnlyAttribute = 1<<10,
Anton Korobeynikov9750be92009-07-17 18:57:16 +0000160 LLVMNoInlineAttribute = 1<<11,
161 LLVMAlwaysInlineAttribute = 1<<12,
162 LLVMOptimizeForSizeAttribute = 1<<13,
163 LLVMStackProtectAttribute = 1<<14,
164 LLVMStackProtectReqAttribute = 1<<15,
Erick Tryzelaar8f69fea2010-03-03 23:51:25 +0000165 LLVMAlignment = 31<<16,
Anton Korobeynikov9750be92009-07-17 18:57:16 +0000166 LLVMNoCaptureAttribute = 1<<21,
167 LLVMNoRedZoneAttribute = 1<<22,
168 LLVMNoImplicitFloatAttribute = 1<<23,
Jakob Stoklund Olesen74bb06c2010-02-06 01:16:28 +0000169 LLVMNakedAttribute = 1<<24,
Erick Tryzelaar8f69fea2010-03-03 23:51:25 +0000170 LLVMInlineHintAttribute = 1<<25,
Torok Edwin1db48c02011-10-06 12:13:32 +0000171 LLVMStackAlignment = 7<<26,
172 LLVMReturnsTwice = 1 << 29,
173 LLVMUWTable = 1 << 30,
Chandler Carruth44d69d92012-01-25 07:40:15 +0000174 LLVMNonLazyBind = 1 << 31
175
176 // FIXME: This attribute is currently not included in the C API as
177 // a temporary measure until the API/ABI impact to the C API is understood
178 // and the path forward agreed upon.
179 //LLVMAddressSafety = 1ULL << 32
Devang Patel4c758ea2008-09-25 21:00:45 +0000180} LLVMAttribute;
Gordon Henriksen2d9cc212008-04-28 17:37:06 +0000181
182typedef enum {
Bill Wendlingda52cec2010-02-15 20:53:17 +0000183 /* Terminator Instructions */
Chris Lattner40cf28d2009-10-12 04:01:02 +0000184 LLVMRet = 1,
185 LLVMBr = 2,
186 LLVMSwitch = 3,
Bill Wendling07d6d762010-02-15 20:50:51 +0000187 LLVMIndirectBr = 4,
188 LLVMInvoke = 5,
Bill Wendling46ffaa92011-08-02 06:20:17 +0000189 /* removed 6 due to API changes */
Bill Wendling2641d132011-07-27 21:00:28 +0000190 LLVMUnreachable = 7,
Bill Wendling07d6d762010-02-15 20:50:51 +0000191
Bill Wendlingda52cec2010-02-15 20:53:17 +0000192 /* Standard Binary Operators */
Bill Wendling2641d132011-07-27 21:00:28 +0000193 LLVMAdd = 8,
194 LLVMFAdd = 9,
195 LLVMSub = 10,
196 LLVMFSub = 11,
197 LLVMMul = 12,
198 LLVMFMul = 13,
199 LLVMUDiv = 14,
200 LLVMSDiv = 15,
201 LLVMFDiv = 16,
202 LLVMURem = 17,
203 LLVMSRem = 18,
204 LLVMFRem = 19,
Bill Wendling07d6d762010-02-15 20:50:51 +0000205
Bill Wendlingda52cec2010-02-15 20:53:17 +0000206 /* Logical Operators */
Bill Wendling2641d132011-07-27 21:00:28 +0000207 LLVMShl = 20,
208 LLVMLShr = 21,
209 LLVMAShr = 22,
210 LLVMAnd = 23,
211 LLVMOr = 24,
212 LLVMXor = 25,
Bill Wendling07d6d762010-02-15 20:50:51 +0000213
Bill Wendlingda52cec2010-02-15 20:53:17 +0000214 /* Memory Operators */
Bill Wendling2641d132011-07-27 21:00:28 +0000215 LLVMAlloca = 26,
216 LLVMLoad = 27,
217 LLVMStore = 28,
218 LLVMGetElementPtr = 29,
Bill Wendling07d6d762010-02-15 20:50:51 +0000219
Bill Wendlingda52cec2010-02-15 20:53:17 +0000220 /* Cast Operators */
Bill Wendling2641d132011-07-27 21:00:28 +0000221 LLVMTrunc = 30,
222 LLVMZExt = 31,
223 LLVMSExt = 32,
224 LLVMFPToUI = 33,
225 LLVMFPToSI = 34,
226 LLVMUIToFP = 35,
227 LLVMSIToFP = 36,
228 LLVMFPTrunc = 37,
229 LLVMFPExt = 38,
230 LLVMPtrToInt = 39,
231 LLVMIntToPtr = 40,
232 LLVMBitCast = 41,
Bill Wendling07d6d762010-02-15 20:50:51 +0000233
Bill Wendlingda52cec2010-02-15 20:53:17 +0000234 /* Other Operators */
Bill Wendling2641d132011-07-27 21:00:28 +0000235 LLVMICmp = 42,
236 LLVMFCmp = 43,
237 LLVMPHI = 44,
238 LLVMCall = 45,
239 LLVMSelect = 46,
Torok Edwin05dc9d62011-10-06 12:39:34 +0000240 LLVMUserOp1 = 47,
241 LLVMUserOp2 = 48,
Bill Wendling2641d132011-07-27 21:00:28 +0000242 LLVMVAArg = 49,
243 LLVMExtractElement = 50,
244 LLVMInsertElement = 51,
245 LLVMShuffleVector = 52,
246 LLVMExtractValue = 53,
247 LLVMInsertValue = 54,
Eli Friedman4fc946c2011-07-27 18:59:19 +0000248
249 /* Atomic operators */
Bill Wendling2641d132011-07-27 21:00:28 +0000250 LLVMFence = 55,
Eli Friedmanc9a551e2011-07-28 21:48:00 +0000251 LLVMAtomicCmpXchg = 56,
Bill Wendlingf891bf82011-07-31 06:30:59 +0000252 LLVMAtomicRMW = 57,
253
254 /* Exception Handling Operators */
Bill Wendlingfae14752011-08-12 20:24:12 +0000255 LLVMResume = 58,
Bill Wendling0aef16a2012-02-06 21:44:22 +0000256 LLVMLandingPad = 59
Bill Wendling2641d132011-07-27 21:00:28 +0000257
Chris Lattner40cf28d2009-10-12 04:01:02 +0000258} LLVMOpcode;
259
260typedef enum {
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000261 LLVMVoidTypeKind, /**< type with no size */
Dan Gohman518cda42011-12-17 00:04:22 +0000262 LLVMHalfTypeKind, /**< 16 bit floating point type */
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000263 LLVMFloatTypeKind, /**< 32 bit floating point type */
264 LLVMDoubleTypeKind, /**< 64 bit floating point type */
265 LLVMX86_FP80TypeKind, /**< 80 bit floating point type (X87) */
266 LLVMFP128TypeKind, /**< 128 bit floating point type (112-bit mantissa)*/
267 LLVMPPC_FP128TypeKind, /**< 128 bit floating point type (two 64-bits) */
268 LLVMLabelTypeKind, /**< Labels */
269 LLVMIntegerTypeKind, /**< Arbitrary bit width integers */
270 LLVMFunctionTypeKind, /**< Functions */
271 LLVMStructTypeKind, /**< Structures */
272 LLVMArrayTypeKind, /**< Arrays */
273 LLVMPointerTypeKind, /**< Pointers */
Chris Lattnerdac44ec2009-07-15 22:00:31 +0000274 LLVMVectorTypeKind, /**< SIMD 'packed' format, or other vector type */
Dale Johannesenbaa5d042010-09-10 20:55:01 +0000275 LLVMMetadataTypeKind, /**< Metadata */
276 LLVMX86_MMXTypeKind /**< X86 MMX */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000277} LLVMTypeKind;
278
279typedef enum {
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000280 LLVMExternalLinkage, /**< Externally visible function */
Chris Lattner2dba0f02009-04-13 06:25:37 +0000281 LLVMAvailableExternallyLinkage,
Duncan Sands12da8ce2009-03-07 15:45:40 +0000282 LLVMLinkOnceAnyLinkage, /**< Keep one copy of function when linking (inline)*/
283 LLVMLinkOnceODRLinkage, /**< Same, but only replaced by something
284 equivalent. */
285 LLVMWeakAnyLinkage, /**< Keep one copy of function when linking (weak) */
286 LLVMWeakODRLinkage, /**< Same, but only replaced by something
287 equivalent. */
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000288 LLVMAppendingLinkage, /**< Special purpose, only applies to global arrays */
289 LLVMInternalLinkage, /**< Rename collisions when linking (static
290 functions) */
Duncan Sands12da8ce2009-03-07 15:45:40 +0000291 LLVMPrivateLinkage, /**< Like Internal, but omit from symbol table */
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000292 LLVMDLLImportLinkage, /**< Function to be imported from DLL */
293 LLVMDLLExportLinkage, /**< Function to be accessible from DLL */
Duncan Sandse2881052009-03-11 08:08:06 +0000294 LLVMExternalWeakLinkage,/**< ExternalWeak linkage description */
Jeffrey Yasskin091217b2010-01-27 20:34:15 +0000295 LLVMGhostLinkage, /**< Obsolete */
Bill Wendling002b1672009-07-20 18:22:52 +0000296 LLVMCommonLinkage, /**< Tentative definitions */
Bill Wendling03bcd6e2010-07-01 21:55:59 +0000297 LLVMLinkerPrivateLinkage, /**< Like Private, but linker removes. */
Bill Wendling578ee402010-08-20 22:05:50 +0000298 LLVMLinkerPrivateWeakLinkage, /**< Like LinkerPrivate, but is weak. */
299 LLVMLinkerPrivateWeakDefAutoLinkage /**< Like LinkerPrivateWeak, but possibly
300 hidden. */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000301} LLVMLinkage;
302
303typedef enum {
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000304 LLVMDefaultVisibility, /**< The GV is visible */
305 LLVMHiddenVisibility, /**< The GV is hidden */
306 LLVMProtectedVisibility /**< The GV is protected */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000307} LLVMVisibility;
308
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000309typedef enum {
310 LLVMCCallConv = 0,
311 LLVMFastCallConv = 8,
312 LLVMColdCallConv = 9,
313 LLVMX86StdcallCallConv = 64,
314 LLVMX86FastcallCallConv = 65
315} LLVMCallConv;
316
317typedef enum {
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000318 LLVMIntEQ = 32, /**< equal */
319 LLVMIntNE, /**< not equal */
320 LLVMIntUGT, /**< unsigned greater than */
321 LLVMIntUGE, /**< unsigned greater or equal */
322 LLVMIntULT, /**< unsigned less than */
323 LLVMIntULE, /**< unsigned less or equal */
324 LLVMIntSGT, /**< signed greater than */
325 LLVMIntSGE, /**< signed greater or equal */
326 LLVMIntSLT, /**< signed less than */
327 LLVMIntSLE /**< signed less or equal */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000328} LLVMIntPredicate;
329
330typedef enum {
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000331 LLVMRealPredicateFalse, /**< Always false (always folded) */
332 LLVMRealOEQ, /**< True if ordered and equal */
333 LLVMRealOGT, /**< True if ordered and greater than */
334 LLVMRealOGE, /**< True if ordered and greater than or equal */
335 LLVMRealOLT, /**< True if ordered and less than */
336 LLVMRealOLE, /**< True if ordered and less than or equal */
337 LLVMRealONE, /**< True if ordered and operands are unequal */
338 LLVMRealORD, /**< True if ordered (no nans) */
339 LLVMRealUNO, /**< True if unordered: isnan(X) | isnan(Y) */
340 LLVMRealUEQ, /**< True if unordered or equal */
341 LLVMRealUGT, /**< True if unordered or greater than */
342 LLVMRealUGE, /**< True if unordered, greater than, or equal */
343 LLVMRealULT, /**< True if unordered or less than */
344 LLVMRealULE, /**< True if unordered, less than, or equal */
345 LLVMRealUNE, /**< True if unordered or not equal */
346 LLVMRealPredicateTrue /**< Always true (always folded) */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000347} LLVMRealPredicate;
348
Bill Wendlingfae14752011-08-12 20:24:12 +0000349typedef enum {
350 LLVMLandingPadCatch, /**< A catch clause */
351 LLVMLandingPadFilter /**< A filter clause */
352} LLVMLandingPadClauseTy;
353
Gregory Szorc34c863a2012-03-21 03:54:29 +0000354/**
355 * @}
356 */
357
Nick Lewycky0db26542011-05-15 07:20:34 +0000358void LLVMInitializeCore(LLVMPassRegistryRef R);
359
Gordon Henriksen76a03742007-09-18 03:18:57 +0000360
Gordon Henriksen34eb6d82007-12-19 22:30:40 +0000361/*===-- Error handling ----------------------------------------------------===*/
362
363void LLVMDisposeMessage(char *Message);
364
365
Gregory Szorc34c863a2012-03-21 03:54:29 +0000366/**
367 * @defgroup LLVMCCoreContext Contexts
368 *
369 * Contexts are execution states for the core LLVM IR system.
370 *
371 * Most types are tied to a context instance. Multiple contexts can
372 * exist simultaneously. A single context is not thread safe. However,
373 * different contexts can execute on different threads simultaneously.
374 *
375 * @{
376 */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000377
Gregory Szorc34c863a2012-03-21 03:54:29 +0000378/**
379 * Create a new context.
380 *
381 * Every call to this function should be paired with a call to
382 * LLVMContextDispose() or the context will leak memory.
383 */
Erick Tryzelaarf34cb0c2009-08-30 23:38:06 +0000384LLVMContextRef LLVMContextCreate(void);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000385
386/**
387 * Obtain the global context instance.
388 */
Erick Tryzelaarf34cb0c2009-08-30 23:38:06 +0000389LLVMContextRef LLVMGetGlobalContext(void);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000390
391/**
392 * Destroy a context instance.
393 *
394 * This should be called for every call to LLVMContextCreate() or memory
395 * will be leaked.
396 */
Owen Anderson6773d382009-07-01 16:58:40 +0000397void LLVMContextDispose(LLVMContextRef C);
398
Erick Tryzelaard8531fa2010-02-28 09:45:59 +0000399unsigned LLVMGetMDKindIDInContext(LLVMContextRef C, const char* Name,
400 unsigned SLen);
401unsigned LLVMGetMDKindID(const char* Name, unsigned SLen);
402
Gregory Szorc34c863a2012-03-21 03:54:29 +0000403/**
404 * @}
405 */
406
Gregory Szorc52d26602012-03-21 07:28:27 +0000407/**
408 * @defgroup LLVMCCoreModule Modules
Gregory Szorc34c863a2012-03-21 03:54:29 +0000409 *
410 * Modules represent the top-level structure in a LLVM program. An LLVM
411 * module is effectively a translation unit or a collection of
412 * translation units merged together.
413 *
414 * @{
415 */
416
Gregory Szorc34c863a2012-03-21 03:54:29 +0000417/**
418 * Create a new, empty module in the global context.
419 *
420 * This is equivalent to calling LLVMModuleCreateWithNameInContext with
421 * LLVMGetGlobalContext() as the context parameter.
422 *
423 * Every invocation should be paired with LLVMDisposeModule() or memory
424 * will be leaked.
425 */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000426LLVMModuleRef LLVMModuleCreateWithName(const char *ModuleID);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000427
428/**
429 * Create a new, empty module in a specific context.
430 *
431 * Every invocation should be paired with LLVMDisposeModule() or memory
432 * will be leaked.
433 */
Owen Anderson31d44e42009-07-02 07:17:57 +0000434LLVMModuleRef LLVMModuleCreateWithNameInContext(const char *ModuleID,
435 LLVMContextRef C);
Gordon Henriksena49d4352008-03-07 19:13:06 +0000436
Gregory Szorc34c863a2012-03-21 03:54:29 +0000437/**
438 * Destroy a module instance.
439 *
440 * This must be called for every created module or memory will be
441 * leaked.
442 */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000443void LLVMDisposeModule(LLVMModuleRef M);
444
Gregory Szorc34c863a2012-03-21 03:54:29 +0000445/**
446 * Obtain the data layout for a module.
447 *
448 * @see Module::getDataLayout()
449 */
Gordon Henriksen05568bb2007-12-27 20:13:47 +0000450const char *LLVMGetDataLayout(LLVMModuleRef M);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000451
452/**
453 * Set the data layout for a module.
454 *
455 * @see Module::setDataLayout()
456 */
Gordon Henriksen05568bb2007-12-27 20:13:47 +0000457void LLVMSetDataLayout(LLVMModuleRef M, const char *Triple);
458
Gregory Szorc34c863a2012-03-21 03:54:29 +0000459/**
460 * Obtain the target triple for a module.
461 *
462 * @see Module::getTargetTriple()
463 */
Gordon Henriksen05568bb2007-12-27 20:13:47 +0000464const char *LLVMGetTarget(LLVMModuleRef M);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000465
466/**
467 * Set the target triple for a module.
468 *
469 * @see Module::setTargetTriple()
470 */
Gordon Henriksen05568bb2007-12-27 20:13:47 +0000471void LLVMSetTarget(LLVMModuleRef M, const char *Triple);
472
Gregory Szorc34c863a2012-03-21 03:54:29 +0000473/**
474 * Dump a representation of a module to stderr.
475 *
476 * @see Module::dump()
477 */
Gordon Henriksen6c6075e2008-03-14 23:58:56 +0000478void LLVMDumpModule(LLVMModuleRef M);
479
Gregory Szorc34c863a2012-03-21 03:54:29 +0000480/**
481 * Set inline assembly for a module.
482 *
483 * @see Module::setModuleInlineAsm()
484 */
Chris Lattner26941452010-04-10 17:52:58 +0000485void LLVMSetModuleInlineAsm(LLVMModuleRef M, const char *Asm);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000486
Gregory Szorc34c863a2012-03-21 03:54:29 +0000487/**
488 * Obtain the context to which this module is associated.
489 *
490 * @see Module::getContext()
491 */
Chris Lattnera7e04b02010-11-28 20:03:44 +0000492LLVMContextRef LLVMGetModuleContext(LLVMModuleRef M);
493
Gregory Szorc34c863a2012-03-21 03:54:29 +0000494/**
495 * Obtain a Type from a module by its registered name.
496 */
497LLVMTypeRef LLVMGetTypeByName(LLVMModuleRef M, const char *Name);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000498
Gregory Szorc34c863a2012-03-21 03:54:29 +0000499/**
500 * Obtain the number of operands for named metadata in a module.
501 *
502 * @see llvm::Module::getNamedMetadata()
503 */
504unsigned LLVMGetNamedMetadataNumOperands(LLVMModuleRef M, const char* name);
505
506/**
507 * Obtain the named metadata operands for a module.
508 *
509 * The passed LLVMValueRef pointer should refer to an array of
510 * LLVMValueRef at least LLVMGetNamedMetadataNumOperands long. This
511 * array will be populated with the LLVMValueRef instances. Each
512 * instance corresponds to a llvm::MDNode.
513 *
514 * @see llvm::Module::getNamedMetadata()
515 * @see llvm::MDNode::getOperand()
516 */
517void LLVMGetNamedMetadataOperands(LLVMModuleRef M, const char* name, LLVMValueRef *Dest);
518
519/**
520 * Add an operand to named metadata.
521 *
522 * @see llvm::Module::getNamedMetadata()
523 * @see llvm::MDNode::addOperand()
524 */
525void LLVMAddNamedMetadataOperand(LLVMModuleRef M, const char* name,
526 LLVMValueRef Val);
527
Gregory Szorc52d26602012-03-21 07:28:27 +0000528/**
529 * Add a function to a module under a specified name.
530 *
531 * @see llvm::Function::Create()
532 */
533LLVMValueRef LLVMAddFunction(LLVMModuleRef M, const char *Name,
534 LLVMTypeRef FunctionTy);
535
536/**
537 * Obtain a Function value from a Module by its name.
538 *
539 * The returned value corresponds to a llvm::Function value.
540 *
541 * @see llvm::Module::getFunction()
542 */
543LLVMValueRef LLVMGetNamedFunction(LLVMModuleRef M, const char *Name);
544
545/**
546 * Obtain an iterator to the first Function in a Module.
547 *
548 * @see llvm::Module::begin()
549 */
550LLVMValueRef LLVMGetFirstFunction(LLVMModuleRef M);
551
552/**
553 * Obtain an iterator to the last Function in a Module.
554 *
555 * @see llvm::Module::end()
556 */
557LLVMValueRef LLVMGetLastFunction(LLVMModuleRef M);
558
559/**
560 * Advance a Function iterator to the next Function.
561 *
562 * Returns NULL if the iterator was already at the end and there are no more
563 * functions.
564 */
565LLVMValueRef LLVMGetNextFunction(LLVMValueRef Fn);
566
567/**
568 * Decrement a Function iterator to the previous Function.
569 *
570 * Returns NULL if the iterator was already at the beginning and there are
571 * no previous functions.
572 */
573LLVMValueRef LLVMGetPreviousFunction(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000574
575/**
576 * @}
577 */
578
579/**
580 * @defgroup LLVMCCoreType Types
581 *
582 * Types represent the type of a value.
583 *
584 * Types are associated with a context instance. The context internally
585 * deduplicates types so there is only 1 instance of a specific type
586 * alive at a time. In other words, a unique type is shared among all
587 * consumers within a context.
588 *
589 * A Type in the C API corresponds to llvm::Type.
590 *
591 * Types have the following hierarchy:
592 *
Gordon Henriksen76a03742007-09-18 03:18:57 +0000593 * types:
594 * integer type
595 * real type
596 * function type
597 * sequence types:
598 * array type
599 * pointer type
600 * vector type
601 * void type
602 * label type
603 * opaque type
Gregory Szorc34c863a2012-03-21 03:54:29 +0000604 *
605 * @{
Gordon Henriksen76a03742007-09-18 03:18:57 +0000606 */
607
Gregory Szorc34c863a2012-03-21 03:54:29 +0000608/**
609 * Obtain the enumerated type of a Type instance.
610 *
611 * @see llvm::Type:getTypeID()
612 */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000613LLVMTypeKind LLVMGetTypeKind(LLVMTypeRef Ty);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000614
615/**
616 * Whether the type has a known size.
617 *
618 * Things that don't have a size are abstract types, labels, and void.a
619 *
620 * @see llvm::Type::isSized()
621 */
Torok Edwin1cd9ade2011-10-06 12:13:28 +0000622LLVMBool LLVMTypeIsSized(LLVMTypeRef Ty);
Gordon Henriksena49d4352008-03-07 19:13:06 +0000623
Gregory Szorc34c863a2012-03-21 03:54:29 +0000624/**
625 * Obtain the context to which this type instance is associated.
626 *
627 * @see llvm::Type::getContext()
628 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000629LLVMContextRef LLVMGetTypeContext(LLVMTypeRef Ty);
630
Gregory Szorc34c863a2012-03-21 03:54:29 +0000631/**
632 * @defgroup LLVMCCoreTypeInt Integer Types
633 *
634 * Functions in this section operate on integer types.
635 *
636 * @{
637 */
638
639/**
640 * Obtain an integer type from a context with specified bit width.
641 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000642LLVMTypeRef LLVMInt1TypeInContext(LLVMContextRef C);
643LLVMTypeRef LLVMInt8TypeInContext(LLVMContextRef C);
644LLVMTypeRef LLVMInt16TypeInContext(LLVMContextRef C);
645LLVMTypeRef LLVMInt32TypeInContext(LLVMContextRef C);
646LLVMTypeRef LLVMInt64TypeInContext(LLVMContextRef C);
647LLVMTypeRef LLVMIntTypeInContext(LLVMContextRef C, unsigned NumBits);
648
Gregory Szorc34c863a2012-03-21 03:54:29 +0000649/**
650 * Obtain an integer type from the global context with a specified bit
651 * width.
652 */
Gordon Henriksena735a9c2008-05-04 12:55:34 +0000653LLVMTypeRef LLVMInt1Type(void);
654LLVMTypeRef LLVMInt8Type(void);
655LLVMTypeRef LLVMInt16Type(void);
656LLVMTypeRef LLVMInt32Type(void);
657LLVMTypeRef LLVMInt64Type(void);
Gordon Henriksened7beaa2007-10-06 16:05:20 +0000658LLVMTypeRef LLVMIntType(unsigned NumBits);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000659unsigned LLVMGetIntTypeWidth(LLVMTypeRef IntegerTy);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000660
Gregory Szorc34c863a2012-03-21 03:54:29 +0000661/**
662 * @}
663 */
664
665/**
666 * @defgroup LLVMCCoreTypeFloat Floating Point Types
667 *
668 * @{
669 */
670
671/**
672 * Obtain a 16-bit floating point type from a context.
673 */
Dan Gohman518cda42011-12-17 00:04:22 +0000674LLVMTypeRef LLVMHalfTypeInContext(LLVMContextRef C);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000675
676/**
677 * Obtain a 32-bit floating point type from a context.
678 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000679LLVMTypeRef LLVMFloatTypeInContext(LLVMContextRef C);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000680
681/**
682 * Obtain a 64-bit floating point type from a context.
683 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000684LLVMTypeRef LLVMDoubleTypeInContext(LLVMContextRef C);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000685
686/**
687 * Obtain a 80-bit floating point type (X87) from a context.
688 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000689LLVMTypeRef LLVMX86FP80TypeInContext(LLVMContextRef C);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000690
691/**
692 * Obtain a 128-bit floating point type (112-bit mantissa) from a
693 * context.
694 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000695LLVMTypeRef LLVMFP128TypeInContext(LLVMContextRef C);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000696
697/**
698 * Obtain a 128-bit floating point type (two 64-bits) from a context.
699 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000700LLVMTypeRef LLVMPPCFP128TypeInContext(LLVMContextRef C);
701
Gregory Szorc34c863a2012-03-21 03:54:29 +0000702/**
703 * Obtain a floating point type from the global context.
704 *
705 * These map to the functions in this group of the same name.
706 */
Dan Gohman518cda42011-12-17 00:04:22 +0000707LLVMTypeRef LLVMHalfType(void);
Gordon Henriksena735a9c2008-05-04 12:55:34 +0000708LLVMTypeRef LLVMFloatType(void);
709LLVMTypeRef LLVMDoubleType(void);
710LLVMTypeRef LLVMX86FP80Type(void);
711LLVMTypeRef LLVMFP128Type(void);
712LLVMTypeRef LLVMPPCFP128Type(void);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000713
Gregory Szorc34c863a2012-03-21 03:54:29 +0000714/**
715 * @}
716 */
717
718/**
719 * @defgroup LLVMCCoreTypeFunction Function Types
720 *
721 * @{
722 */
723
724/**
725 * Obtain a function type consisting of a specified signature.
726 *
727 * The function is defined as a tuple of a return Type, a list of
728 * parameter types, and whether the function is variadic.
729 */
Gordon Henriksened7beaa2007-10-06 16:05:20 +0000730LLVMTypeRef LLVMFunctionType(LLVMTypeRef ReturnType,
731 LLVMTypeRef *ParamTypes, unsigned ParamCount,
Chris Lattner25963c62010-01-09 22:27:07 +0000732 LLVMBool IsVarArg);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000733
734/**
735 * Returns whether a function type is variadic.
736 */
Chris Lattner25963c62010-01-09 22:27:07 +0000737LLVMBool LLVMIsFunctionVarArg(LLVMTypeRef FunctionTy);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000738
739/**
740 * Obtain the Type this function Type returns.
741 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000742LLVMTypeRef LLVMGetReturnType(LLVMTypeRef FunctionTy);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000743
744/**
745 * Obtain the number of parameters this function accepts.
746 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000747unsigned LLVMCountParamTypes(LLVMTypeRef FunctionTy);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000748
749/**
750 * Obtain the types of a function's parameters.
751 *
752 * The Dest parameter should point to a pre-allocated array of
753 * LLVMTypeRef at least LLVMCountParamTypes() large. On return, the
754 * first LLVMCountParamTypes() entries in the array will be populated
755 * with LLVMTypeRef instances.
756 *
757 * @param FunctionTy The function type to operate on.
758 * @param Dest Memory address of an array to be filled with result.
759 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000760void LLVMGetParamTypes(LLVMTypeRef FunctionTy, LLVMTypeRef *Dest);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000761
Gregory Szorc34c863a2012-03-21 03:54:29 +0000762/**
763 * @}
764 */
765
766/**
767 * @defgroup LLVMCCoreTypeStruct Structure Types
768 *
769 * These functions relate to LLVMTypeRef instances.
770 *
771 * @see llvm::StructType
772 *
773 * @{
774 */
775
776/**
777 * Create a new structure type in a context.
778 *
779 * A structure is specified by a list of inner elements/types and
780 * whether these can be packed together.
781 *
782 * @see llvm::StructType::create()
783 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000784LLVMTypeRef LLVMStructTypeInContext(LLVMContextRef C, LLVMTypeRef *ElementTypes,
Chris Lattner25963c62010-01-09 22:27:07 +0000785 unsigned ElementCount, LLVMBool Packed);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000786
787/**
788 * Create a new structure type in the global context.
789 *
790 * @see llvm::StructType::create()
791 */
Gordon Henriksened7beaa2007-10-06 16:05:20 +0000792LLVMTypeRef LLVMStructType(LLVMTypeRef *ElementTypes, unsigned ElementCount,
Chris Lattner25963c62010-01-09 22:27:07 +0000793 LLVMBool Packed);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000794
795/**
796 * Create an empty structure in a context having a specified name.
797 *
798 * @see llvm::StructType::create()
799 */
Chris Lattnere71ccde2011-07-14 05:53:17 +0000800LLVMTypeRef LLVMStructCreateNamed(LLVMContextRef C, const char *Name);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000801
802/**
803 * Obtain the name of a structure.
804 *
805 * @see llvm::StructType::getName()
806 */
Torok Edwin0d5f6ae2011-10-06 12:12:50 +0000807const char *LLVMGetStructName(LLVMTypeRef Ty);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000808
809/**
810 * Set the contents of a structure type.
811 *
812 * @see llvm::StructType::setBody()
813 */
Chris Lattnere71ccde2011-07-14 05:53:17 +0000814void LLVMStructSetBody(LLVMTypeRef StructTy, LLVMTypeRef *ElementTypes,
815 unsigned ElementCount, LLVMBool Packed);
816
Gregory Szorc34c863a2012-03-21 03:54:29 +0000817/**
818 * Get the number of elements defined inside the structure.
819 *
820 * @see llvm::StructType::getNumElements()
821 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000822unsigned LLVMCountStructElementTypes(LLVMTypeRef StructTy);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000823
824/**
825 * Get the elements within a structure.
826 *
827 * The function is passed the address of a pre-allocated array of
828 * LLVMTypeRef at least LLVMCountStructElementTypes() long. After
829 * invocation, this array will be populated with the structure's
830 * elements. The objects in the destination array will have a lifetime
831 * of the structure type itself, which is the lifetime of the context it
832 * is contained in.
833 */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000834void LLVMGetStructElementTypes(LLVMTypeRef StructTy, LLVMTypeRef *Dest);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000835
836/**
837 * Determine whether a structure is packed.
838 *
839 * @see llvm::StructType::isPacked()
840 */
Chris Lattner25963c62010-01-09 22:27:07 +0000841LLVMBool LLVMIsPackedStruct(LLVMTypeRef StructTy);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000842
843/**
844 * Determine whether a structure is opaque.
845 *
846 * @see llvm::StructType::isOpaque()
847 */
Chris Lattner17cf05b2011-07-14 16:20:28 +0000848LLVMBool LLVMIsOpaqueStruct(LLVMTypeRef StructTy);
849
Gregory Szorc34c863a2012-03-21 03:54:29 +0000850/**
851 * @}
852 */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000853
Gregory Szorc34c863a2012-03-21 03:54:29 +0000854
855/**
856 * @defgroup LLVMCCoreTypeSequential Sequential Types
857 *
858 * Sequential types represents "arrays" of types. This is a super class
859 * for array, vector, and pointer types.
860 *
861 * @{
862 */
863
864/**
865 * Obtain the type of elements within a sequential type.
866 *
867 * This works on array, vector, and pointer types.
868 *
869 * @see llvm::SequentialType::getElementType()
870 */
871LLVMTypeRef LLVMGetElementType(LLVMTypeRef Ty);
872
873/**
874 * Create a fixed size array type that refers to a specific type.
875 *
876 * The created type will exist in the context that its element type
877 * exists in.
878 *
879 * @see llvm::ArrayType::get()
880 */
Gordon Henriksened7beaa2007-10-06 16:05:20 +0000881LLVMTypeRef LLVMArrayType(LLVMTypeRef ElementType, unsigned ElementCount);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000882
883/**
884 * Obtain the length of an array type.
885 *
886 * This only works on types that represent arrays.
887 *
888 * @see llvm::ArrayType::getNumElements()
889 */
890unsigned LLVMGetArrayLength(LLVMTypeRef ArrayTy);
891
892/**
893 * Create a pointer type that points to a defined type.
894 *
895 * The created type will exist in the context that its pointee type
896 * exists in.
897 *
898 * @see llvm::PointerType::get()
899 */
Gordon Henriksen5a3fe032007-12-17 16:08:32 +0000900LLVMTypeRef LLVMPointerType(LLVMTypeRef ElementType, unsigned AddressSpace);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000901
902/**
903 * Obtain the address space of a pointer type.
904 *
905 * This only works on types that represent pointers.
906 *
907 * @see llvm::PointerType::getAddressSpace()
908 */
909unsigned LLVMGetPointerAddressSpace(LLVMTypeRef PointerTy);
910
911/**
912 * Create a vector type that contains a defined type and has a specific
913 * number of elements.
914 *
915 * The created type will exist in the context thats its element type
916 * exists in.
917 *
918 * @see llvm::VectorType::get()
919 */
Gordon Henriksened7beaa2007-10-06 16:05:20 +0000920LLVMTypeRef LLVMVectorType(LLVMTypeRef ElementType, unsigned ElementCount);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000921
Gregory Szorc34c863a2012-03-21 03:54:29 +0000922/**
923 * Obtain the number of elements in a vector type.
924 *
925 * This only works on types that represent vectors.
926 *
927 * @see llvm::VectorType::getNumElements()
928 */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000929unsigned LLVMGetVectorSize(LLVMTypeRef VectorTy);
930
Gregory Szorc34c863a2012-03-21 03:54:29 +0000931/**
932 * @}
933 */
934
935/**
936 * @defgroup LLVMCCoreTypeOther Other Types
937 *
938 * @{
939 */
940
941/**
942 * Create a void type in a context.
943 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000944LLVMTypeRef LLVMVoidTypeInContext(LLVMContextRef C);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000945
946/**
947 * Create a label type in a context.
948 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000949LLVMTypeRef LLVMLabelTypeInContext(LLVMContextRef C);
Gregory Szorc34c863a2012-03-21 03:54:29 +0000950
951/**
952 * Create a X86 MMX type in a context.
953 */
Dale Johannesen95b67af2010-09-10 21:58:02 +0000954LLVMTypeRef LLVMX86MMXTypeInContext(LLVMContextRef C);
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000955
Gregory Szorc34c863a2012-03-21 03:54:29 +0000956/**
957 * These are similar to the above functions except they operate on the
958 * global context.
959 */
Gordon Henriksena735a9c2008-05-04 12:55:34 +0000960LLVMTypeRef LLVMVoidType(void);
961LLVMTypeRef LLVMLabelType(void);
Dale Johannesen95b67af2010-09-10 21:58:02 +0000962LLVMTypeRef LLVMX86MMXType(void);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000963
Gregory Szorc34c863a2012-03-21 03:54:29 +0000964/**
965 * @}
966 */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000967
Gregory Szorc34c863a2012-03-21 03:54:29 +0000968/**
969 * @}
970 */
971
972/**
973 * @defgroup LLVMCCoreValues Values
974 *
975 * The bulk of LLVM's object model consists of values, which comprise a very
Gordon Henriksen76a03742007-09-18 03:18:57 +0000976 * rich type hierarchy.
Gregory Szorc34c863a2012-03-21 03:54:29 +0000977 *
978 * LLVMValueRef essentially represents llvm::Value. There is a rich
979 * hierarchy of classes within this type. Depending on the instance
980 * obtain, not all APIs are available.
981 *
982 * Callers can determine the type of a LLVMValueRef by calling the
983 * LLVMIsA* family of functions (e.g. LLVMIsAArgument()). These
984 * functions are defined by a macro, so it isn't obvious which are
985 * available by looking at the Doxygen source code. Instead, look at the
986 * source definition of LLVM_FOR_EACH_VALUE_SUBCLASS and note the list
987 * of value names given. These value names also correspond to classes in
988 * the llvm::Value hierarchy.
989 *
990 * @{
Gordon Henriksen76a03742007-09-18 03:18:57 +0000991 */
992
Gordon Henriksen29e38942008-12-19 18:39:45 +0000993#define LLVM_FOR_EACH_VALUE_SUBCLASS(macro) \
994 macro(Argument) \
995 macro(BasicBlock) \
996 macro(InlineAsm) \
Torok Edwind09b7572011-10-14 20:37:56 +0000997 macro(MDNode) \
998 macro(MDString) \
Gordon Henriksen29e38942008-12-19 18:39:45 +0000999 macro(User) \
1000 macro(Constant) \
Torok Edwind09b7572011-10-14 20:37:56 +00001001 macro(BlockAddress) \
Gordon Henriksen29e38942008-12-19 18:39:45 +00001002 macro(ConstantAggregateZero) \
1003 macro(ConstantArray) \
1004 macro(ConstantExpr) \
1005 macro(ConstantFP) \
1006 macro(ConstantInt) \
1007 macro(ConstantPointerNull) \
1008 macro(ConstantStruct) \
1009 macro(ConstantVector) \
1010 macro(GlobalValue) \
1011 macro(Function) \
1012 macro(GlobalAlias) \
1013 macro(GlobalVariable) \
1014 macro(UndefValue) \
1015 macro(Instruction) \
1016 macro(BinaryOperator) \
1017 macro(CallInst) \
1018 macro(IntrinsicInst) \
1019 macro(DbgInfoIntrinsic) \
1020 macro(DbgDeclareInst) \
Gordon Henriksen29e38942008-12-19 18:39:45 +00001021 macro(MemIntrinsic) \
1022 macro(MemCpyInst) \
1023 macro(MemMoveInst) \
1024 macro(MemSetInst) \
1025 macro(CmpInst) \
Torok Edwind09b7572011-10-14 20:37:56 +00001026 macro(FCmpInst) \
1027 macro(ICmpInst) \
Gordon Henriksen29e38942008-12-19 18:39:45 +00001028 macro(ExtractElementInst) \
1029 macro(GetElementPtrInst) \
1030 macro(InsertElementInst) \
1031 macro(InsertValueInst) \
Bill Wendlingfae14752011-08-12 20:24:12 +00001032 macro(LandingPadInst) \
Gordon Henriksen29e38942008-12-19 18:39:45 +00001033 macro(PHINode) \
1034 macro(SelectInst) \
1035 macro(ShuffleVectorInst) \
1036 macro(StoreInst) \
1037 macro(TerminatorInst) \
1038 macro(BranchInst) \
Torok Edwind09b7572011-10-14 20:37:56 +00001039 macro(IndirectBrInst) \
Gordon Henriksen29e38942008-12-19 18:39:45 +00001040 macro(InvokeInst) \
1041 macro(ReturnInst) \
1042 macro(SwitchInst) \
1043 macro(UnreachableInst) \
Bill Wendlingf891bf82011-07-31 06:30:59 +00001044 macro(ResumeInst) \
Gordon Henriksen29e38942008-12-19 18:39:45 +00001045 macro(UnaryInstruction) \
Victor Hernandez8acf2952009-10-23 21:09:37 +00001046 macro(AllocaInst) \
Gordon Henriksen29e38942008-12-19 18:39:45 +00001047 macro(CastInst) \
Gordon Henriksen05a868f2008-12-19 18:51:17 +00001048 macro(BitCastInst) \
1049 macro(FPExtInst) \
1050 macro(FPToSIInst) \
1051 macro(FPToUIInst) \
1052 macro(FPTruncInst) \
1053 macro(IntToPtrInst) \
1054 macro(PtrToIntInst) \
1055 macro(SExtInst) \
1056 macro(SIToFPInst) \
1057 macro(TruncInst) \
1058 macro(UIToFPInst) \
1059 macro(ZExtInst) \
1060 macro(ExtractValueInst) \
Gordon Henriksen05a868f2008-12-19 18:51:17 +00001061 macro(LoadInst) \
1062 macro(VAArgInst)
Gordon Henriksen29e38942008-12-19 18:39:45 +00001063
Gregory Szorc34c863a2012-03-21 03:54:29 +00001064/**
1065 * @defgroup LLVMCCoreValueGeneral General APIs
1066 *
1067 * Functions in this section work on all LLVMValueRef instances,
1068 * regardless of their sub-type. They correspond to functions available
1069 * on llvm::Value.
1070 *
1071 * @{
1072 */
Gordon Henriksen76a03742007-09-18 03:18:57 +00001073
Gregory Szorc34c863a2012-03-21 03:54:29 +00001074/**
1075 * Obtain the type of a value.
1076 *
1077 * @see llvm::Value::getType()
1078 */
1079LLVMTypeRef LLVMTypeOf(LLVMValueRef Val);
1080
1081/**
1082 * Obtain the string name of a value.
1083 *
1084 * @see llvm::Value::getName()
1085 */
1086const char *LLVMGetValueName(LLVMValueRef Val);
1087
1088/**
1089 * Set the string name of a value.
1090 *
1091 * @see llvm::Value::setName()
1092 */
1093void LLVMSetValueName(LLVMValueRef Val, const char *Name);
1094
1095/**
1096 * Dump a representation of a value to stderr.
1097 *
1098 * @see llvm::Value::dump()
1099 */
1100void LLVMDumpValue(LLVMValueRef Val);
1101
1102/**
1103 * Replace all uses of a value with another one.
1104 *
1105 * @see llvm::Value::replaceAllUsesWith()
1106 */
1107void LLVMReplaceAllUsesWith(LLVMValueRef OldVal, LLVMValueRef NewVal);
1108
1109/**
1110 * Determine whether the specified constant instance is constant.
1111 */
1112LLVMBool LLVMIsConstant(LLVMValueRef Val);
1113
1114/**
1115 * Determine whether a value instance is undefined.
1116 */
1117LLVMBool LLVMIsUndef(LLVMValueRef Val);
1118
1119/**
1120 * Convert value instances between types.
1121 *
1122 * Internally, a LLVMValueRef is "pinned" to a specific type. This
1123 * series of functions allows you to cast an instance to a specific
1124 * type.
1125 *
1126 * If the cast is not valid for the specified type, NULL is returned.
1127 *
1128 * @see llvm::dyn_cast_or_null<>
1129 */
Gordon Henriksen29e38942008-12-19 18:39:45 +00001130#define LLVM_DECLARE_VALUE_CAST(name) \
1131 LLVMValueRef LLVMIsA##name(LLVMValueRef Val);
1132LLVM_FOR_EACH_VALUE_SUBCLASS(LLVM_DECLARE_VALUE_CAST)
1133
Gregory Szorc34c863a2012-03-21 03:54:29 +00001134/**
1135 * @}
1136 */
1137
1138/**
1139 * @defgroup LLVMCCoreValueUses Usage
1140 *
1141 * This module defines functions that allow you to inspect the uses of a
1142 * LLVMValueRef.
1143 *
1144 * It is possible to obtain a LLVMUseRef for any LLVMValueRef instance.
1145 * Each LLVMUseRef (which corresponds to a llvm::Use instance) holds a
1146 * llvm::User and llvm::Value.
1147 *
1148 * @{
1149 */
1150
1151/**
1152 * Obtain the first use of a value.
1153 *
1154 * Uses are obtained in an iterator fashion. First, call this function
1155 * to obtain a reference to the first use. Then, call LLVMGetNextUse()
1156 * on that instance and all subsequently obtained instances untl
1157 * LLVMGetNextUse() returns NULL.
1158 *
1159 * @see llvm::Value::use_begin()
1160 */
Erick Tryzelaar9f9857e2010-03-02 20:32:28 +00001161LLVMUseRef LLVMGetFirstUse(LLVMValueRef Val);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001162
1163/**
1164 * Obtain the next use of a value.
1165 *
1166 * This effectively advances the iterator. It returns NULL if you are on
1167 * the final use and no more are available.
1168 */
Erick Tryzelaar9f9857e2010-03-02 20:32:28 +00001169LLVMUseRef LLVMGetNextUse(LLVMUseRef U);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001170
1171/**
1172 * Obtain the user value for a user.
1173 *
1174 * The returned value corresponds to a llvm::User type.
1175 *
1176 * @see llvm::Use::getUser()
1177 */
Erick Tryzelaar9f9857e2010-03-02 20:32:28 +00001178LLVMValueRef LLVMGetUser(LLVMUseRef U);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001179
1180/**
1181 * Obtain the value this use corresponds to.
1182 *
1183 * @see llvm::Use::get().
1184 */
Erick Tryzelaar9f9857e2010-03-02 20:32:28 +00001185LLVMValueRef LLVMGetUsedValue(LLVMUseRef U);
Chris Lattner40cf28d2009-10-12 04:01:02 +00001186
Gregory Szorc34c863a2012-03-21 03:54:29 +00001187/**
1188 * @}
1189 */
1190
1191/**
Gregory Szorc52d26602012-03-21 07:28:27 +00001192 * @defgroup LLVMCCoreValueUser User value
Gregory Szorc34c863a2012-03-21 03:54:29 +00001193 *
1194 * Function in this group pertain to LLVMValueRef instances that descent
1195 * from llvm::User. This includes constants, instructions, and
1196 * operators.
1197 *
1198 * @{
1199 */
1200
1201/**
1202 * Obtain an operand at a specific index in a llvm::User value.
1203 *
1204 * @see llvm::User::getOperand()
1205 */
Chris Lattner40cf28d2009-10-12 04:01:02 +00001206LLVMValueRef LLVMGetOperand(LLVMValueRef Val, unsigned Index);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001207
1208/**
1209 * Set an operand at a specific index in a llvm::User value.
1210 *
1211 * @see llvm::User::setOperand()
1212 */
Erick Tryzelaarb4d48702010-08-20 14:51:22 +00001213void LLVMSetOperand(LLVMValueRef User, unsigned Index, LLVMValueRef Val);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001214
1215/**
1216 * Obtain the number of operands in a llvm::User value.
1217 *
1218 * @see llvm::User::getNumOperands()
1219 */
Erick Tryzelaarb4d48702010-08-20 14:51:22 +00001220int LLVMGetNumOperands(LLVMValueRef Val);
Chris Lattner40cf28d2009-10-12 04:01:02 +00001221
Gregory Szorc34c863a2012-03-21 03:54:29 +00001222/**
1223 * @}
1224 */
1225
1226/**
Gregory Szorc52d26602012-03-21 07:28:27 +00001227 * @defgroup LLVMCCoreValueConstant Constants
Gregory Szorc34c863a2012-03-21 03:54:29 +00001228 *
1229 * This section contains APIs for interacting with LLVMValueRef that
1230 * correspond to llvm::Constant instances.
1231 *
1232 * These functions will work for any LLVMValueRef in the llvm::Constant
1233 * class hierarchy.
1234 *
1235 * @{
1236 */
1237
1238/**
1239 * Obtain a constant value referring to the null instance of a type.
1240 *
1241 * @see llvm::Constant::getNullValue()
1242 */
Gordon Henriksen1046c732007-10-06 15:11:06 +00001243LLVMValueRef LLVMConstNull(LLVMTypeRef Ty); /* all zeroes */
Gregory Szorc34c863a2012-03-21 03:54:29 +00001244
1245/**
1246 * Obtain a constant value referring to the instance of a type
1247 * consisting of all ones.
1248 *
1249 * This is only valid for integer types.
1250 *
1251 * @see llvm::Constant::getAllOnesValue()
1252 */
1253LLVMValueRef LLVMConstAllOnes(LLVMTypeRef Ty);
1254
1255/**
1256 * Obtain a constant value referring to an undefined value of a type.
1257 *
1258 * @see llvm::UndefValue::get()
1259 */
Gordon Henriksen76a03742007-09-18 03:18:57 +00001260LLVMValueRef LLVMGetUndef(LLVMTypeRef Ty);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001261
1262/**
1263 * Determine whether a value instance is null.
1264 *
1265 * @see llvm::Constant::isNullValue()
1266 */
Chris Lattner25963c62010-01-09 22:27:07 +00001267LLVMBool LLVMIsNull(LLVMValueRef Val);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001268
1269/**
1270 * Obtain a constant that is a constant pointer pointing to NULL for a
1271 * specified type.
1272 */
Chris Lattner7f318242009-07-06 17:29:59 +00001273LLVMValueRef LLVMConstPointerNull(LLVMTypeRef Ty);
Gordon Henriksen76a03742007-09-18 03:18:57 +00001274
Gregory Szorc34c863a2012-03-21 03:54:29 +00001275/**
1276 * @defgroup LLVMCCoreValueConstantScalar Scalar constants
1277 *
1278 * Functions in this group model LLVMValueRef instances that correspond
1279 * to constants referring to scalar types.
1280 *
1281 * For integer types, the LLVMTypeRef parameter should correspond to a
1282 * llvm::IntegerType instance and the returned LLVMValueRef will
1283 * correspond to a llvm::ConstantInt.
1284 *
1285 * For floating point types, the LLVMTypeRef returned corresponds to a
1286 * llvm::ConstantFP.
1287 *
1288 * @{
1289 */
Erick Tryzelaard8531fa2010-02-28 09:45:59 +00001290
Gregory Szorc34c863a2012-03-21 03:54:29 +00001291/**
1292 * Obtain a constant value for an integer type.
1293 *
1294 * The returned value corresponds to a llvm::ConstantInt.
1295 *
1296 * @see llvm::ConstantInt::get()
1297 *
1298 * @param IntTy Integer type to obtain value of.
1299 * @param N The value the returned instance should refer to.
1300 * @param SignExtend Whether to sign extend the produced value.
1301 */
Gordon Henriksen1046c732007-10-06 15:11:06 +00001302LLVMValueRef LLVMConstInt(LLVMTypeRef IntTy, unsigned long long N,
Chris Lattner25963c62010-01-09 22:27:07 +00001303 LLVMBool SignExtend);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001304
1305/**
1306 * Obtain a constant value for an integer of arbitrary precision.
1307 *
1308 * @see llvm::ConstantInt::get()
1309 */
Chris Lattner4329e072010-11-23 02:47:22 +00001310LLVMValueRef LLVMConstIntOfArbitraryPrecision(LLVMTypeRef IntTy,
1311 unsigned NumWords,
1312 const uint64_t Words[]);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001313
1314/**
1315 * Obtain a constant value for an integer parsed from a string.
1316 *
1317 * A similar API, LLVMConstIntOfStringAndSize is also available. If the
1318 * string's length is available, it is preferred to call that function
1319 * instead.
1320 *
1321 * @see llvm::ConstantInt::get()
1322 */
Erick Tryzelaardd991352009-08-16 23:36:46 +00001323LLVMValueRef LLVMConstIntOfString(LLVMTypeRef IntTy, const char *Text,
1324 uint8_t Radix);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001325
1326/**
1327 * Obtain a constant value for an integer parsed from a string with
1328 * specified length.
1329 *
1330 * @see llvm::ConstantInt::get()
1331 */
Erick Tryzelaardd991352009-08-16 23:36:46 +00001332LLVMValueRef LLVMConstIntOfStringAndSize(LLVMTypeRef IntTy, const char *Text,
1333 unsigned SLen, uint8_t Radix);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001334
1335/**
1336 * Obtain a constant value referring to a double floating point value.
1337 */
Gordon Henriksen1046c732007-10-06 15:11:06 +00001338LLVMValueRef LLVMConstReal(LLVMTypeRef RealTy, double N);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001339
1340/**
1341 * Obtain a constant for a floating point value parsed from a string.
1342 *
1343 * A similar API, LLVMConstRealOfStringAndSize is also available. It
1344 * should be used if the input string's length is known.
1345 */
Gordon Henriksen931e1212008-02-02 01:07:50 +00001346LLVMValueRef LLVMConstRealOfString(LLVMTypeRef RealTy, const char *Text);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001347
1348/**
1349 * Obtain a constant for a floating point value parsed from a string.
1350 */
Erick Tryzelaardd991352009-08-16 23:36:46 +00001351LLVMValueRef LLVMConstRealOfStringAndSize(LLVMTypeRef RealTy, const char *Text,
1352 unsigned SLen);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001353
1354/**
1355 * Obtain the zero extended value for an integer constant value.
1356 *
1357 * @see llvm::ConstantInt::getZExtValue()
1358 */
Chris Lattner40cf28d2009-10-12 04:01:02 +00001359unsigned long long LLVMConstIntGetZExtValue(LLVMValueRef ConstantVal);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001360
1361/**
1362 * Obtain the sign extended value for an integer constant value.
1363 *
1364 * @see llvm::ConstantInt::getSExtValue()
1365 */
Chris Lattner40cf28d2009-10-12 04:01:02 +00001366long long LLVMConstIntGetSExtValue(LLVMValueRef ConstantVal);
Erick Tryzelaardd991352009-08-16 23:36:46 +00001367
Gregory Szorc34c863a2012-03-21 03:54:29 +00001368/**
1369 * @}
1370 */
1371
1372/**
Gregory Szorc52d26602012-03-21 07:28:27 +00001373 * @defgroup LLVMCCoreValueConstantComposite Composite Constants
1374 *
1375 * Functions in this group operate on composite constants.
Gregory Szorc34c863a2012-03-21 03:54:29 +00001376 *
1377 * @{
1378 */
1379
1380/**
Gregory Szorc52d26602012-03-21 07:28:27 +00001381 * Create a ConstantDataSequential and initialize it with a string.
Gregory Szorc34c863a2012-03-21 03:54:29 +00001382 *
Gregory Szorc52d26602012-03-21 07:28:27 +00001383 * @see llvm::ConstantDataArray::getString()
Gregory Szorc34c863a2012-03-21 03:54:29 +00001384 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +00001385LLVMValueRef LLVMConstStringInContext(LLVMContextRef C, const char *Str,
Chris Lattner25963c62010-01-09 22:27:07 +00001386 unsigned Length, LLVMBool DontNullTerminate);
Gregory Szorc52d26602012-03-21 07:28:27 +00001387
1388/**
1389 * Create a ConstantDataSequential with string content in the global context.
1390 *
1391 * This is the same as LLVMConstStringInContext except it operates on the
1392 * global context.
1393 *
1394 * @see LLVMConstStringInContext()
1395 * @see llvm::ConstantDataArray::getString()
1396 */
1397LLVMValueRef LLVMConstString(const char *Str, unsigned Length,
1398 LLVMBool DontNullTerminate);
1399
1400/**
1401 * Create an anonymous ConstantStruct with the specified values.
1402 *
1403 * @see llvm::ConstantStruct::getAnon()
1404 */
1405LLVMValueRef LLVMConstStructInContext(LLVMContextRef C,
Erick Tryzelaar262332f2009-08-14 00:01:31 +00001406 LLVMValueRef *ConstantVals,
Chris Lattner25963c62010-01-09 22:27:07 +00001407 unsigned Count, LLVMBool Packed);
Erick Tryzelaar262332f2009-08-14 00:01:31 +00001408
Gregory Szorc52d26602012-03-21 07:28:27 +00001409/**
1410 * Create a ConstantStruct in the global Context.
1411 *
1412 * This is the same as LLVMConstStructInContext except it operates on the
1413 * global Context.
1414 *
1415 * @see LLVMConstStructInContext()
1416 */
Gordon Henriksen1046c732007-10-06 15:11:06 +00001417LLVMValueRef LLVMConstStruct(LLVMValueRef *ConstantVals, unsigned Count,
Chris Lattner25963c62010-01-09 22:27:07 +00001418 LLVMBool Packed);
Gregory Szorc52d26602012-03-21 07:28:27 +00001419
1420/**
1421 * Create a ConstantArray from values.
1422 *
1423 * @see llvm::ConstantArray::get()
1424 */
1425LLVMValueRef LLVMConstArray(LLVMTypeRef ElementTy,
1426 LLVMValueRef *ConstantVals, unsigned Length);
1427
1428/**
1429 * Create a non-anonymous ConstantStruct from values.
1430 *
1431 * @see llvm::ConstantStruct::get()
1432 */
Rafael Espindola784ad242011-07-14 19:09:08 +00001433LLVMValueRef LLVMConstNamedStruct(LLVMTypeRef StructTy,
1434 LLVMValueRef *ConstantVals,
1435 unsigned Count);
Gregory Szorc52d26602012-03-21 07:28:27 +00001436
1437/**
1438 * Create a ConstantVector from values.
1439 *
1440 * @see llvm::ConstantVector::get()
1441 */
Gordon Henriksen1046c732007-10-06 15:11:06 +00001442LLVMValueRef LLVMConstVector(LLVMValueRef *ScalarConstantVals, unsigned Size);
Gordon Henriksen76a03742007-09-18 03:18:57 +00001443
Gregory Szorc52d26602012-03-21 07:28:27 +00001444/**
1445 * @}
1446 */
1447
1448/**
1449 * @defgroup LLVMCCoreValueConstantExpressions Constant Expressions
1450 *
1451 * Functions in this group correspond to APIs on llvm::ConstantExpr.
1452 *
1453 * @see llvm::ConstantExpr.
1454 *
1455 * @{
1456 */
Chris Lattner40cf28d2009-10-12 04:01:02 +00001457LLVMOpcode LLVMGetConstOpcode(LLVMValueRef ConstantVal);
Erick Tryzelaarfd529d72009-08-19 08:36:49 +00001458LLVMValueRef LLVMAlignOf(LLVMTypeRef Ty);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001459LLVMValueRef LLVMSizeOf(LLVMTypeRef Ty);
1460LLVMValueRef LLVMConstNeg(LLVMValueRef ConstantVal);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +00001461LLVMValueRef LLVMConstNSWNeg(LLVMValueRef ConstantVal);
1462LLVMValueRef LLVMConstNUWNeg(LLVMValueRef ConstantVal);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +00001463LLVMValueRef LLVMConstFNeg(LLVMValueRef ConstantVal);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001464LLVMValueRef LLVMConstNot(LLVMValueRef ConstantVal);
1465LLVMValueRef LLVMConstAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Dan Gohmane4ca02d2009-09-03 23:34:49 +00001466LLVMValueRef LLVMConstNSWAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +00001467LLVMValueRef LLVMConstNUWAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +00001468LLVMValueRef LLVMConstFAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001469LLVMValueRef LLVMConstSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +00001470LLVMValueRef LLVMConstNSWSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1471LLVMValueRef LLVMConstNUWSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +00001472LLVMValueRef LLVMConstFSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001473LLVMValueRef LLVMConstMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +00001474LLVMValueRef LLVMConstNSWMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1475LLVMValueRef LLVMConstNUWMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +00001476LLVMValueRef LLVMConstFMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001477LLVMValueRef LLVMConstUDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1478LLVMValueRef LLVMConstSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Dan Gohmane4ca02d2009-09-03 23:34:49 +00001479LLVMValueRef LLVMConstExactSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001480LLVMValueRef LLVMConstFDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1481LLVMValueRef LLVMConstURem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1482LLVMValueRef LLVMConstSRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1483LLVMValueRef LLVMConstFRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1484LLVMValueRef LLVMConstAnd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1485LLVMValueRef LLVMConstOr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1486LLVMValueRef LLVMConstXor(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1487LLVMValueRef LLVMConstICmp(LLVMIntPredicate Predicate,
1488 LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1489LLVMValueRef LLVMConstFCmp(LLVMRealPredicate Predicate,
1490 LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1491LLVMValueRef LLVMConstShl(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1492LLVMValueRef LLVMConstLShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1493LLVMValueRef LLVMConstAShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
1494LLVMValueRef LLVMConstGEP(LLVMValueRef ConstantVal,
1495 LLVMValueRef *ConstantIndices, unsigned NumIndices);
Dan Gohmane4ca02d2009-09-03 23:34:49 +00001496LLVMValueRef LLVMConstInBoundsGEP(LLVMValueRef ConstantVal,
1497 LLVMValueRef *ConstantIndices,
1498 unsigned NumIndices);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001499LLVMValueRef LLVMConstTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1500LLVMValueRef LLVMConstSExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1501LLVMValueRef LLVMConstZExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1502LLVMValueRef LLVMConstFPTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1503LLVMValueRef LLVMConstFPExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1504LLVMValueRef LLVMConstUIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1505LLVMValueRef LLVMConstSIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1506LLVMValueRef LLVMConstFPToUI(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1507LLVMValueRef LLVMConstFPToSI(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1508LLVMValueRef LLVMConstPtrToInt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1509LLVMValueRef LLVMConstIntToPtr(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
1510LLVMValueRef LLVMConstBitCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +00001511LLVMValueRef LLVMConstZExtOrBitCast(LLVMValueRef ConstantVal,
1512 LLVMTypeRef ToType);
1513LLVMValueRef LLVMConstSExtOrBitCast(LLVMValueRef ConstantVal,
1514 LLVMTypeRef ToType);
1515LLVMValueRef LLVMConstTruncOrBitCast(LLVMValueRef ConstantVal,
1516 LLVMTypeRef ToType);
1517LLVMValueRef LLVMConstPointerCast(LLVMValueRef ConstantVal,
1518 LLVMTypeRef ToType);
1519LLVMValueRef LLVMConstIntCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType,
Chris Lattner25963c62010-01-09 22:27:07 +00001520 LLVMBool isSigned);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +00001521LLVMValueRef LLVMConstFPCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001522LLVMValueRef LLVMConstSelect(LLVMValueRef ConstantCondition,
1523 LLVMValueRef ConstantIfTrue,
1524 LLVMValueRef ConstantIfFalse);
1525LLVMValueRef LLVMConstExtractElement(LLVMValueRef VectorConstant,
1526 LLVMValueRef IndexConstant);
1527LLVMValueRef LLVMConstInsertElement(LLVMValueRef VectorConstant,
1528 LLVMValueRef ElementValueConstant,
1529 LLVMValueRef IndexConstant);
1530LLVMValueRef LLVMConstShuffleVector(LLVMValueRef VectorAConstant,
1531 LLVMValueRef VectorBConstant,
1532 LLVMValueRef MaskConstant);
Dan Gohmand5104a52008-11-03 22:55:43 +00001533LLVMValueRef LLVMConstExtractValue(LLVMValueRef AggConstant, unsigned *IdxList,
1534 unsigned NumIdx);
1535LLVMValueRef LLVMConstInsertValue(LLVMValueRef AggConstant,
1536 LLVMValueRef ElementValueConstant,
1537 unsigned *IdxList, unsigned NumIdx);
Chris Lattner25963c62010-01-09 22:27:07 +00001538LLVMValueRef LLVMConstInlineAsm(LLVMTypeRef Ty,
Chris Lattner3d1f5522008-12-17 21:39:50 +00001539 const char *AsmString, const char *Constraints,
Chris Lattner25963c62010-01-09 22:27:07 +00001540 LLVMBool HasSideEffects, LLVMBool IsAlignStack);
Erick Tryzelaar0fb26ef2010-02-28 09:46:06 +00001541LLVMValueRef LLVMBlockAddress(LLVMValueRef F, LLVMBasicBlockRef BB);
Gordon Henriksen7ce31762007-10-06 14:29:36 +00001542
Gregory Szorc52d26602012-03-21 07:28:27 +00001543/**
1544 * @}
1545 */
1546
1547/**
1548 * @defgroup LLVMCCoreValueConstantGlobals Global Values
1549 *
1550 * This group contains functions that operate on global values. Functions in
1551 * this group relate to functions in the llvm::GlobalValue class tree.
1552 *
1553 * @see llvm::GlobalValue
1554 *
1555 * @{
1556 */
1557
Gordon Henriksen265f7802008-03-19 01:11:35 +00001558LLVMModuleRef LLVMGetGlobalParent(LLVMValueRef Global);
Chris Lattner25963c62010-01-09 22:27:07 +00001559LLVMBool LLVMIsDeclaration(LLVMValueRef Global);
Gordon Henriksen76a03742007-09-18 03:18:57 +00001560LLVMLinkage LLVMGetLinkage(LLVMValueRef Global);
1561void LLVMSetLinkage(LLVMValueRef Global, LLVMLinkage Linkage);
1562const char *LLVMGetSection(LLVMValueRef Global);
1563void LLVMSetSection(LLVMValueRef Global, const char *Section);
1564LLVMVisibility LLVMGetVisibility(LLVMValueRef Global);
1565void LLVMSetVisibility(LLVMValueRef Global, LLVMVisibility Viz);
1566unsigned LLVMGetAlignment(LLVMValueRef Global);
1567void LLVMSetAlignment(LLVMValueRef Global, unsigned Bytes);
1568
Gregory Szorc52d26602012-03-21 07:28:27 +00001569/**
1570 * @defgroup LLVMCoreValueConstantGlobalVariable Global Variables
1571 *
1572 * This group contains functions that operate on global variable values.
1573 *
1574 * @see llvm::GlobalVariable
1575 *
1576 * @{
1577 */
Gordon Henriksen76a03742007-09-18 03:18:57 +00001578LLVMValueRef LLVMAddGlobal(LLVMModuleRef M, LLVMTypeRef Ty, const char *Name);
Erick Tryzelaar06894b32010-02-28 09:46:13 +00001579LLVMValueRef LLVMAddGlobalInAddressSpace(LLVMModuleRef M, LLVMTypeRef Ty,
1580 const char *Name,
1581 unsigned AddressSpace);
Gordon Henriksen783f7bb2007-10-08 03:45:09 +00001582LLVMValueRef LLVMGetNamedGlobal(LLVMModuleRef M, const char *Name);
Gordon Henriksen07a45f42008-03-23 22:21:29 +00001583LLVMValueRef LLVMGetFirstGlobal(LLVMModuleRef M);
1584LLVMValueRef LLVMGetLastGlobal(LLVMModuleRef M);
1585LLVMValueRef LLVMGetNextGlobal(LLVMValueRef GlobalVar);
1586LLVMValueRef LLVMGetPreviousGlobal(LLVMValueRef GlobalVar);
Gordon Henriksen76a03742007-09-18 03:18:57 +00001587void LLVMDeleteGlobal(LLVMValueRef GlobalVar);
Gordon Henriksen76a03742007-09-18 03:18:57 +00001588LLVMValueRef LLVMGetInitializer(LLVMValueRef GlobalVar);
1589void LLVMSetInitializer(LLVMValueRef GlobalVar, LLVMValueRef ConstantVal);
Chris Lattner25963c62010-01-09 22:27:07 +00001590LLVMBool LLVMIsThreadLocal(LLVMValueRef GlobalVar);
1591void LLVMSetThreadLocal(LLVMValueRef GlobalVar, LLVMBool IsThreadLocal);
1592LLVMBool LLVMIsGlobalConstant(LLVMValueRef GlobalVar);
1593void LLVMSetGlobalConstant(LLVMValueRef GlobalVar, LLVMBool IsConstant);
Gordon Henriksen76a03742007-09-18 03:18:57 +00001594
Gregory Szorc52d26602012-03-21 07:28:27 +00001595/**
1596 * @}
1597 */
1598
1599/**
1600 * @defgroup LLVMCoreValueConstantGlobalAlias Global Aliases
1601 *
1602 * This group contains function that operate on global alias values.
1603 *
1604 * @see llvm::GlobalAlias
1605 *
1606 * @{
1607 */
Chris Lattner3d1f5522008-12-17 21:39:50 +00001608LLVMValueRef LLVMAddAlias(LLVMModuleRef M, LLVMTypeRef Ty, LLVMValueRef Aliasee,
1609 const char *Name);
1610
Gregory Szorc34c863a2012-03-21 03:54:29 +00001611/**
1612 * @}
1613 */
1614
1615/**
1616 * @defgroup LLVMCCoreValueFunction Function values
1617 *
1618 * Functions in this group operate on LLVMValueRef instances that
1619 * correspond to llvm::Function instances.
1620 *
1621 * @see llvm::Function
1622 *
1623 * @{
1624 */
1625
1626/**
1627 * Remove a function from its containing module and deletes it.
1628 *
1629 * @see llvm::Function::eraseFromParent()
1630 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00001631void LLVMDeleteFunction(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001632
1633/**
1634 * Obtain the ID number from a function instance.
1635 *
1636 * @see llvm::Function::getIntrinsicID()
1637 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00001638unsigned LLVMGetIntrinsicID(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001639
1640/**
1641 * Obtain the calling function of a function.
1642 *
1643 * The returned value corresponds to the LLVMCallConv enumeration.
1644 *
1645 * @see llvm::Function::getCallingConv()
1646 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00001647unsigned LLVMGetFunctionCallConv(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001648
1649/**
1650 * Set the calling convention of a function.
1651 *
1652 * @see llvm::Function::setCallingConv()
1653 *
1654 * @param Fn Function to operate on
1655 * @param CC LLVMCallConv to set calling convention to
1656 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00001657void LLVMSetFunctionCallConv(LLVMValueRef Fn, unsigned CC);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001658
1659/**
1660 * Obtain the name of the garbage collector to use during code
1661 * generation.
1662 *
1663 * @see llvm::Function::getGC()
1664 */
Gordon Henriksend930f912008-08-17 18:44:35 +00001665const char *LLVMGetGC(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001666
1667/**
1668 * Define the garbage collector to use during code generation.
1669 *
1670 * @see llvm::Function::setGC()
1671 */
Gordon Henriksend930f912008-08-17 18:44:35 +00001672void LLVMSetGC(LLVMValueRef Fn, const char *Name);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001673
1674/**
1675 * Add an attribute to a function.
1676 *
1677 * @see llvm::Function::addAttribute()
1678 */
Duncan Sands7374a012009-05-06 12:21:17 +00001679void LLVMAddFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001680
1681/**
1682 * Obtain an attribute from a function.
1683 *
1684 * @see llvm::Function::getAttributes()
1685 */
Chris Lattner40cf28d2009-10-12 04:01:02 +00001686LLVMAttribute LLVMGetFunctionAttr(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001687
1688/**
1689 * Remove an attribute from a function.
1690 */
Duncan Sands7374a012009-05-06 12:21:17 +00001691void LLVMRemoveFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00001692
Gregory Szorc34c863a2012-03-21 03:54:29 +00001693/**
1694 * @defgroup LLVMCCoreValueFunctionParameters Function Parameters
1695 *
1696 * Functions in this group relate to arguments/parameters on functions.
1697 *
1698 * Functions in this group expect LLVMValueRef instances that correspond
1699 * to llvm::Function instances.
1700 *
1701 * @{
1702 */
1703
1704/**
1705 * Obtain the number of parameters in a function.
1706 *
1707 * @see llvm::Function::arg_size()
1708 */
Gordon Henriksen265f7802008-03-19 01:11:35 +00001709unsigned LLVMCountParams(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001710
1711/**
1712 * Obtain the parameters in a function.
1713 *
1714 * The takes a pointer to a pre-allocated array of LLVMValueRef that is
1715 * at least LLVMCountParams() long. This array will be filled with
1716 * LLVMValueRef instances which correspond to the parameters the
1717 * function receives. Each LLVMValueRef corresponds to a llvm::Argument
1718 * instance.
1719 *
1720 * @see llvm::Function::arg_begin()
1721 */
Gordon Henriksen265f7802008-03-19 01:11:35 +00001722void LLVMGetParams(LLVMValueRef Fn, LLVMValueRef *Params);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001723
1724/**
1725 * Obtain the parameter at the specified index.
1726 *
1727 * Parameters are indexed from 0.
1728 *
1729 * @see llvm::Function::arg_begin()
1730 */
Gordon Henriksen265f7802008-03-19 01:11:35 +00001731LLVMValueRef LLVMGetParam(LLVMValueRef Fn, unsigned Index);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001732
1733/**
1734 * Obtain the function to which this argument belongs.
1735 *
1736 * Unlike other functions in this group, this one takes a LLVMValueRef
1737 * that corresponds to a llvm::Attribute.
1738 *
1739 * The returned LLVMValueRef is the llvm::Function to which this
1740 * argument belongs.
1741 */
Gordon Henriksen265f7802008-03-19 01:11:35 +00001742LLVMValueRef LLVMGetParamParent(LLVMValueRef Inst);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001743
1744/**
1745 * Obtain the first parameter to a function.
1746 *
1747 * @see llvm::Function::arg_begin()
1748 */
Gordon Henriksen07a45f42008-03-23 22:21:29 +00001749LLVMValueRef LLVMGetFirstParam(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001750
1751/**
1752 * Obtain the last parameter to a function.
1753 *
1754 * @see llvm::Function::arg_end()
1755 */
Gordon Henriksen07a45f42008-03-23 22:21:29 +00001756LLVMValueRef LLVMGetLastParam(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001757
1758/**
1759 * Obtain the next parameter to a function.
1760 *
1761 * This takes a LLVMValueRef obtained from LLVMGetFirstParam() (which is
1762 * actually a wrapped iterator) and obtains the next parameter from the
1763 * underlying iterator.
1764 */
Gordon Henriksen07a45f42008-03-23 22:21:29 +00001765LLVMValueRef LLVMGetNextParam(LLVMValueRef Arg);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001766
1767/**
1768 * Obtain the previous parameter to a function.
1769 *
1770 * This is the opposite of LLVMGetNextParam().
1771 */
Gordon Henriksen07a45f42008-03-23 22:21:29 +00001772LLVMValueRef LLVMGetPreviousParam(LLVMValueRef Arg);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001773
1774/**
1775 * Add an attribute to a function argument.
1776 *
1777 * @see llvm::Argument::addAttr()
1778 */
Devang Patel4c758ea2008-09-25 21:00:45 +00001779void LLVMAddAttribute(LLVMValueRef Arg, LLVMAttribute PA);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001780
1781/**
1782 * Remove an attribute from a function argument.
1783 *
1784 * @see llvm::Argument::removeAttr()
1785 */
Devang Patel4c758ea2008-09-25 21:00:45 +00001786void LLVMRemoveAttribute(LLVMValueRef Arg, LLVMAttribute PA);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001787
1788/**
1789 * Get an attribute from a function argument.
1790 */
Chris Lattner40cf28d2009-10-12 04:01:02 +00001791LLVMAttribute LLVMGetAttribute(LLVMValueRef Arg);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001792
1793/**
1794 * Set the alignment for a function parameter.
1795 *
1796 * @see llvm::Argument::addAttr()
1797 * @see llvm::Attribute::constructAlignmentFromInt()
1798 */
Gordon Henriksen2d9cc212008-04-28 17:37:06 +00001799void LLVMSetParamAlignment(LLVMValueRef Arg, unsigned align);
Gordon Henriksen265f7802008-03-19 01:11:35 +00001800
Gregory Szorc34c863a2012-03-21 03:54:29 +00001801/**
1802 * @}
1803 */
1804
1805/**
1806 * @}
1807 */
1808
1809/**
Gregory Szorc52d26602012-03-21 07:28:27 +00001810 * @}
1811 */
1812
1813/**
1814 * @}
1815 */
1816
1817/**
1818 * @defgroup LLVMCCoreValueMetadata Metadata
1819 *
1820 * @{
1821 */
1822
1823/**
1824 * Obtain a MDString value from a context.
1825 *
1826 * The returned instance corresponds to the llvm::MDString class.
1827 *
1828 * The instance is specified by string data of a specified length. The
1829 * string content is copied, so the backing memory can be freed after
1830 * this function returns.
1831 */
1832LLVMValueRef LLVMMDStringInContext(LLVMContextRef C, const char *Str,
1833 unsigned SLen);
1834
1835/**
1836 * Obtain a MDString value from the global context.
1837 */
1838LLVMValueRef LLVMMDString(const char *Str, unsigned SLen);
1839
1840/**
1841 * Obtain a MDNode value from a context.
1842 *
1843 * The returned value corresponds to the llvm::MDNode class.
1844 */
1845LLVMValueRef LLVMMDNodeInContext(LLVMContextRef C, LLVMValueRef *Vals,
1846 unsigned Count);
1847
1848/**
1849 * Obtain a MDNode value from the global context.
1850 */
1851LLVMValueRef LLVMMDNode(LLVMValueRef *Vals, unsigned Count);
1852
1853/**
1854 * Obtain the underlying string from a MDString value.
1855 *
1856 * @param V Instance to obtain string from.
1857 * @param Len Memory address which will hold length of returned string.
1858 * @return String data in MDString.
1859 */
1860const char *LLVMGetMDString(LLVMValueRef V, unsigned* Len);
1861
1862/**
1863 * @}
1864 */
1865
1866/**
Gregory Szorc34c863a2012-03-21 03:54:29 +00001867 * @defgroup LLVMCCoreValueBasicBlock Basic Block
1868 *
1869 * A basic block represents a single entry single exit section of code.
1870 * Basic blocks contain a list of instructions which form the body of
1871 * the block.
1872 *
1873 * Basic blocks belong to functions. They have the type of label.
1874 *
1875 * Basic blocks are themselves values. However, the C API models them as
1876 * LLVMBasicBlockRef.
1877 *
1878 * @see llvm::BasicBlock
1879 *
1880 * @{
1881 */
1882
1883/**
1884 * Convert a basic block instance to a value type.
1885 */
Gordon Henriksen07a45f42008-03-23 22:21:29 +00001886LLVMValueRef LLVMBasicBlockAsValue(LLVMBasicBlockRef BB);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001887
1888/**
1889 * Determine whether a LLVMValueRef is itself a basic block.
1890 */
Chris Lattner25963c62010-01-09 22:27:07 +00001891LLVMBool LLVMValueIsBasicBlock(LLVMValueRef Val);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001892
1893/**
1894 * Convert a LLVMValueRef to a LLVMBasicBlockRef instance.
1895 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00001896LLVMBasicBlockRef LLVMValueAsBasicBlock(LLVMValueRef Val);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001897
1898/**
1899 * Obtain the function to which a basic block belongs.
1900 *
1901 * @see llvm::BasicBlock::getParent()
1902 */
Gordon Henriksen07a45f42008-03-23 22:21:29 +00001903LLVMValueRef LLVMGetBasicBlockParent(LLVMBasicBlockRef BB);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001904
1905/**
1906 * Obtain the terminator instruction for a basic block.
1907 *
1908 * If the basic block does not have a terminator (it is not well-formed
1909 * if it doesn't), then NULL is returned.
1910 *
1911 * The returned LLVMValueRef corresponds to a llvm::TerminatorInst.
1912 *
1913 * @see llvm::BasicBlock::getTerminator()
1914 */
Nate Begeman43c322b2011-08-23 20:27:46 +00001915LLVMValueRef LLVMGetBasicBlockTerminator(LLVMBasicBlockRef BB);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001916
1917/**
1918 * Obtain the number of basic blocks in a function.
1919 *
1920 * @param Fn Function value to operate on.
1921 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00001922unsigned LLVMCountBasicBlocks(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001923
1924/**
1925 * Obtain all of the basic blocks in a function.
1926 *
1927 * This operates on a function value. The BasicBlocks parameter is a
1928 * pointer to a pre-allocated array of LLVMBasicBlockRef of at least
1929 * LLVMCountBasicBlocks() in length. This array is populated with
1930 * LLVMBasicBlockRef instances.
1931 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00001932void LLVMGetBasicBlocks(LLVMValueRef Fn, LLVMBasicBlockRef *BasicBlocks);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001933
1934/**
1935 * Obtain the first basic block in a function.
1936 *
1937 * The returned basic block can be used as an iterator. You will likely
1938 * eventually call into LLVMGetNextBasicBlock() with it.
1939 *
1940 * @see llvm::Function::begin()
1941 */
Gordon Henriksen054817c2008-03-19 03:47:18 +00001942LLVMBasicBlockRef LLVMGetFirstBasicBlock(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001943
1944/**
1945 * Obtain the last basic block in a function.
1946 *
1947 * @see llvm::Function::end()
1948 */
Gordon Henriksen054817c2008-03-19 03:47:18 +00001949LLVMBasicBlockRef LLVMGetLastBasicBlock(LLVMValueRef Fn);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001950
1951/**
1952 * Advance a basic block iterator.
1953 */
Gordon Henriksen054817c2008-03-19 03:47:18 +00001954LLVMBasicBlockRef LLVMGetNextBasicBlock(LLVMBasicBlockRef BB);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001955
1956/**
1957 * Go backwards in a basic block iterator.
1958 */
Gordon Henriksen054817c2008-03-19 03:47:18 +00001959LLVMBasicBlockRef LLVMGetPreviousBasicBlock(LLVMBasicBlockRef BB);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001960
1961/**
1962 * Obtain the basic block that corresponds to the entry point of a
1963 * function.
1964 *
1965 * @see llvm::Function::getEntryBlock()
1966 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00001967LLVMBasicBlockRef LLVMGetEntryBasicBlock(LLVMValueRef Fn);
Erick Tryzelaar262332f2009-08-14 00:01:31 +00001968
Gregory Szorc34c863a2012-03-21 03:54:29 +00001969/**
1970 * Append a basic block to the end of a function.
1971 *
1972 * @see llvm::BasicBlock::Create()
1973 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +00001974LLVMBasicBlockRef LLVMAppendBasicBlockInContext(LLVMContextRef C,
1975 LLVMValueRef Fn,
1976 const char *Name);
Gregory Szorc34c863a2012-03-21 03:54:29 +00001977
1978/**
1979 * Append a basic block to the end of a function using the global
1980 * context.
1981 *
1982 * @see llvm::BasicBlock::Create()
1983 */
1984LLVMBasicBlockRef LLVMAppendBasicBlock(LLVMValueRef Fn, const char *Name);
1985
1986/**
1987 * Insert a basic block in a function before another basic block.
1988 *
1989 * The function to add to is determined by the function of the
1990 * passed basic block.
1991 *
1992 * @see llvm::BasicBlock::Create()
1993 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +00001994LLVMBasicBlockRef LLVMInsertBasicBlockInContext(LLVMContextRef C,
1995 LLVMBasicBlockRef BB,
1996 const char *Name);
1997
Gregory Szorc34c863a2012-03-21 03:54:29 +00001998/**
1999 * Insert a basic block in a function using the global context.
2000 *
2001 * @see llvm::BasicBlock::Create()
2002 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002003LLVMBasicBlockRef LLVMInsertBasicBlock(LLVMBasicBlockRef InsertBeforeBB,
2004 const char *Name);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002005
2006/**
2007 * Remove a basic block from a function and delete it.
2008 *
2009 * This deletes the basic block from its containing function and deletes
2010 * the basic block itself.
2011 *
2012 * @see llvm::BasicBlock::eraseFromParent()
2013 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002014void LLVMDeleteBasicBlock(LLVMBasicBlockRef BB);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002015
2016/**
2017 * Remove a basic block from a function.
2018 *
2019 * This deletes the basic block from its containing function but keep
2020 * the basic block alive.
2021 *
2022 * @see llvm::BasicBlock::removeFromParent()
2023 */
Nate Begeman43c322b2011-08-23 20:27:46 +00002024void LLVMRemoveBasicBlockFromParent(LLVMBasicBlockRef BB);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002025
Gregory Szorc34c863a2012-03-21 03:54:29 +00002026/**
2027 * Move a basic block to before another one.
2028 *
2029 * @see llvm::BasicBlock::moveBefore()
2030 */
Duncan Sandsb1d61aa2010-07-19 15:31:07 +00002031void LLVMMoveBasicBlockBefore(LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002032
2033/**
2034 * Move a basic block to after another one.
2035 *
2036 * @see llvm::BasicBlock::moveAfter()
2037 */
Duncan Sandsb1d61aa2010-07-19 15:31:07 +00002038void LLVMMoveBasicBlockAfter(LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos);
2039
Gregory Szorc34c863a2012-03-21 03:54:29 +00002040/**
2041 * Obtain the first instruction in a basic block.
2042 *
2043 * The returned LLVMValueRef corresponds to a llvm::Instruction
2044 * instance.
2045 */
Gordon Henriksen054817c2008-03-19 03:47:18 +00002046LLVMValueRef LLVMGetFirstInstruction(LLVMBasicBlockRef BB);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002047
2048/**
2049 * Obtain the last instruction in a basic block.
2050 *
2051 * The returned LLVMValueRef corresponds to a LLVM:Instruction.
2052 */
Gordon Henriksen054817c2008-03-19 03:47:18 +00002053LLVMValueRef LLVMGetLastInstruction(LLVMBasicBlockRef BB);
Nate Begeman43c322b2011-08-23 20:27:46 +00002054
Gregory Szorc34c863a2012-03-21 03:54:29 +00002055/**
2056 * @}
2057 */
2058
2059/**
2060 * @defgroup LLVMCCoreValueInstruction Instructions
2061 *
2062 * Functions in this group relate to the inspection and manipulation of
2063 * individual instructions.
2064 *
2065 * In the C++ API, an instruction is modeled by llvm::Instruction. This
2066 * class has a large number of descendents. llvm::Instruction is a
2067 * llvm::Value and in the C API, instructions are modeled by
2068 * LLVMValueRef.
2069 *
2070 * This group also contains sub-groups which operate on specific
2071 * llvm::Instruction types, e.g. llvm::CallInst.
2072 *
2073 * @{
2074 */
2075
2076/**
2077 * Determine whether an instruction has any metadata attached.
2078 */
2079int LLVMHasMetadata(LLVMValueRef Val);
2080
2081/**
2082 * Return metadata associated with an instruction value.
2083 */
2084LLVMValueRef LLVMGetMetadata(LLVMValueRef Val, unsigned KindID);
2085
2086/**
2087 * Set metadata associated with an instruction value.
2088 */
2089void LLVMSetMetadata(LLVMValueRef Val, unsigned KindID, LLVMValueRef Node);
2090
2091/**
2092 * Obtain the basic block to which an instruction belongs.
2093 *
2094 * @see llvm::Instruction::getParent()
2095 */
Nate Begeman43c322b2011-08-23 20:27:46 +00002096LLVMBasicBlockRef LLVMGetInstructionParent(LLVMValueRef Inst);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002097
2098/**
2099 * Obtain the instruction that occurs after the one specified.
2100 *
2101 * The next instruction will be from the same basic block.
2102 *
2103 * If this is the last instruction in a basic block, NULL will be
2104 * returned.
2105 */
Gordon Henriksen054817c2008-03-19 03:47:18 +00002106LLVMValueRef LLVMGetNextInstruction(LLVMValueRef Inst);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002107
2108/**
2109 * Obtain the instruction that occured before this one.
2110 *
2111 * If the instruction is the first instruction in a basic block, NULL
2112 * will be returned.
2113 */
Gordon Henriksen054817c2008-03-19 03:47:18 +00002114LLVMValueRef LLVMGetPreviousInstruction(LLVMValueRef Inst);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002115
2116/**
2117 * Remove and delete an instruction.
2118 *
2119 * The instruction specified is removed from its containing building
2120 * block and then deleted.
2121 *
2122 * @see llvm::Instruction::eraseFromParent()
2123 */
Devang Pateldbebc6f2011-10-03 20:59:18 +00002124void LLVMInstructionEraseFromParent(LLVMValueRef Inst);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002125
2126/**
2127 * Obtain the code opcode for an individual instruction.
2128 *
2129 * @see llvm::Instruction::getOpCode()
2130 */
Torok Edwinab6158e2011-10-14 20:37:49 +00002131LLVMOpcode LLVMGetInstructionOpcode(LLVMValueRef Inst);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002132
2133/**
2134 * Obtain the predicate of an instruction.
2135 *
2136 * This is only valid for instructions that correspond to llvm::ICmpInst
2137 * or llvm::ConstantExpr whose opcode is llvm::Instruction::ICmp.
2138 *
2139 * @see llvm::ICmpInst::getPredicate()
2140 */
Torok Edwin60c40de2011-10-06 12:13:20 +00002141LLVMIntPredicate LLVMGetICmpPredicate(LLVMValueRef Inst);
Gordon Henriksen265f7802008-03-19 01:11:35 +00002142
Gregory Szorc34c863a2012-03-21 03:54:29 +00002143/**
2144 * @defgroup LLVMCCoreValueInstructionCall Call Sites and Invocations
2145 *
2146 * Functions in this group apply to instructions that refer to call
2147 * sites and invocations. These correspond to C++ types in the
2148 * llvm::CallInst class tree.
2149 *
2150 * @{
2151 */
2152
2153/**
2154 * Set the calling convention for a call instruction.
2155 *
2156 * This expects an LLVMValueRef that corresponds to a llvm::CallInst or
2157 * llvm::InvokeInst.
2158 *
2159 * @see llvm::CallInst::setCallingConv()
2160 * @see llvm::InvokeInst::setCallingConv()
2161 */
Gordon Henriksen1158c532007-12-29 20:45:00 +00002162void LLVMSetInstructionCallConv(LLVMValueRef Instr, unsigned CC);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002163
2164/**
2165 * Obtain the calling convention for a call instruction.
2166 *
2167 * This is the opposite of LLVMSetInstructionCallConv(). Reads its
2168 * usage.
2169 *
2170 * @see LLVMSetInstructionCallConv()
2171 */
Gordon Henriksen1158c532007-12-29 20:45:00 +00002172unsigned LLVMGetInstructionCallConv(LLVMValueRef Instr);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002173
2174
Devang Patel4c758ea2008-09-25 21:00:45 +00002175void LLVMAddInstrAttribute(LLVMValueRef Instr, unsigned index, LLVMAttribute);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002176void LLVMRemoveInstrAttribute(LLVMValueRef Instr, unsigned index,
Devang Patel4c758ea2008-09-25 21:00:45 +00002177 LLVMAttribute);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002178void LLVMSetInstrParamAlignment(LLVMValueRef Instr, unsigned index,
Gordon Henriksen2d9cc212008-04-28 17:37:06 +00002179 unsigned align);
Gordon Henriksen1158c532007-12-29 20:45:00 +00002180
Gregory Szorc34c863a2012-03-21 03:54:29 +00002181/**
2182 * Obtain whether a call instruction is a tail call.
2183 *
2184 * This only works on llvm::CallInst instructions.
2185 *
2186 * @see llvm::CallInst::isTailCall()
2187 */
Chris Lattner25963c62010-01-09 22:27:07 +00002188LLVMBool LLVMIsTailCall(LLVMValueRef CallInst);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002189
2190/**
2191 * Set whether a call instruction is a tail call.
2192 *
2193 * This only works on llvm::CallInst instructions.
2194 *
2195 * @see llvm::CallInst::setTailCall()
2196 */
Chris Lattner25963c62010-01-09 22:27:07 +00002197void LLVMSetTailCall(LLVMValueRef CallInst, LLVMBool IsTailCall);
Gordon Henrikseneeb65372008-08-30 16:34:54 +00002198
Gregory Szorc34c863a2012-03-21 03:54:29 +00002199/**
2200 * @}
2201 */
2202
2203/**
2204 * Obtain the default destination basic block of a switch instruction.
2205 *
2206 * This only works on llvm::SwitchInst instructions.
2207 *
2208 * @see llvm::SwitchInst::getDefaultDest()
2209 */
Nate Begeman43c322b2011-08-23 20:27:46 +00002210LLVMBasicBlockRef LLVMGetSwitchDefaultDest(LLVMValueRef SwitchInstr);
2211
Gregory Szorc34c863a2012-03-21 03:54:29 +00002212/**
2213 * @defgroup LLVMCCoreValueInstructionPHINode PHI Nodes
2214 *
2215 * Functions in this group only apply to instructions that map to
2216 * llvm::PHINode instances.
2217 *
2218 * @{
2219 */
2220
2221/**
2222 * Add an incoming value to the end of a PHI list.
2223 */
Gordon Henriksen44dd8fb2007-10-08 18:14:39 +00002224void LLVMAddIncoming(LLVMValueRef PhiNode, LLVMValueRef *IncomingValues,
2225 LLVMBasicBlockRef *IncomingBlocks, unsigned Count);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002226
2227/**
2228 * Obtain the number of incoming basic blocks to a PHI node.
2229 */
Gordon Henriksen44dd8fb2007-10-08 18:14:39 +00002230unsigned LLVMCountIncoming(LLVMValueRef PhiNode);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002231
2232/**
2233 * Obtain an incoming value to a PHI node as a LLVMValueRef.
2234 */
Gordon Henriksen44dd8fb2007-10-08 18:14:39 +00002235LLVMValueRef LLVMGetIncomingValue(LLVMValueRef PhiNode, unsigned Index);
Gregory Szorc34c863a2012-03-21 03:54:29 +00002236
2237/**
2238 * Obtain an incoming value to a PHI node as a LLVMBasicBlockRef.
2239 */
Gordon Henriksen44dd8fb2007-10-08 18:14:39 +00002240LLVMBasicBlockRef LLVMGetIncomingBlock(LLVMValueRef PhiNode, unsigned Index);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002241
Gregory Szorc34c863a2012-03-21 03:54:29 +00002242/**
2243 * @}
2244 */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002245
Gregory Szorc34c863a2012-03-21 03:54:29 +00002246/**
2247 * @}
2248 */
2249
2250/**
2251 * @}
2252 */
2253
2254/**
2255 * @defgroup LLVMCCoreInstructionBuilder Instruction Builders
2256 *
2257 * An instruction builder represents a point within a basic block and is
2258 * the exclusive means of building instructions using the C interface.
2259 *
2260 * @{
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002261 */
2262
Erick Tryzelaar262332f2009-08-14 00:01:31 +00002263LLVMBuilderRef LLVMCreateBuilderInContext(LLVMContextRef C);
Gordon Henriksena735a9c2008-05-04 12:55:34 +00002264LLVMBuilderRef LLVMCreateBuilder(void);
Gordon Henriksen054817c2008-03-19 03:47:18 +00002265void LLVMPositionBuilder(LLVMBuilderRef Builder, LLVMBasicBlockRef Block,
2266 LLVMValueRef Instr);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002267void LLVMPositionBuilderBefore(LLVMBuilderRef Builder, LLVMValueRef Instr);
2268void LLVMPositionBuilderAtEnd(LLVMBuilderRef Builder, LLVMBasicBlockRef Block);
Gordon Henriksen265f7802008-03-19 01:11:35 +00002269LLVMBasicBlockRef LLVMGetInsertBlock(LLVMBuilderRef Builder);
Chris Lattner3d1f5522008-12-17 21:39:50 +00002270void LLVMClearInsertionPosition(LLVMBuilderRef Builder);
2271void LLVMInsertIntoBuilder(LLVMBuilderRef Builder, LLVMValueRef Instr);
Erick Tryzelaar9813bea2009-08-16 02:20:57 +00002272void LLVMInsertIntoBuilderWithName(LLVMBuilderRef Builder, LLVMValueRef Instr,
2273 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002274void LLVMDisposeBuilder(LLVMBuilderRef Builder);
2275
Erick Tryzelaard8531fa2010-02-28 09:45:59 +00002276/* Metadata */
2277void LLVMSetCurrentDebugLocation(LLVMBuilderRef Builder, LLVMValueRef L);
2278LLVMValueRef LLVMGetCurrentDebugLocation(LLVMBuilderRef Builder);
2279void LLVMSetInstDebugLocation(LLVMBuilderRef Builder, LLVMValueRef Inst);
2280
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002281/* Terminators */
2282LLVMValueRef LLVMBuildRetVoid(LLVMBuilderRef);
2283LLVMValueRef LLVMBuildRet(LLVMBuilderRef, LLVMValueRef V);
Erick Tryzelaarfd529d72009-08-19 08:36:49 +00002284LLVMValueRef LLVMBuildAggregateRet(LLVMBuilderRef, LLVMValueRef *RetVals,
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002285 unsigned N);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002286LLVMValueRef LLVMBuildBr(LLVMBuilderRef, LLVMBasicBlockRef Dest);
2287LLVMValueRef LLVMBuildCondBr(LLVMBuilderRef, LLVMValueRef If,
2288 LLVMBasicBlockRef Then, LLVMBasicBlockRef Else);
2289LLVMValueRef LLVMBuildSwitch(LLVMBuilderRef, LLVMValueRef V,
2290 LLVMBasicBlockRef Else, unsigned NumCases);
Erick Tryzelaar0fb26ef2010-02-28 09:46:06 +00002291LLVMValueRef LLVMBuildIndirectBr(LLVMBuilderRef B, LLVMValueRef Addr,
2292 unsigned NumDests);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002293LLVMValueRef LLVMBuildInvoke(LLVMBuilderRef, LLVMValueRef Fn,
2294 LLVMValueRef *Args, unsigned NumArgs,
2295 LLVMBasicBlockRef Then, LLVMBasicBlockRef Catch,
2296 const char *Name);
Benjamin Kramer5a6568832011-08-19 01:36:54 +00002297LLVMValueRef LLVMBuildLandingPad(LLVMBuilderRef B, LLVMTypeRef Ty,
2298 LLVMValueRef PersFn, unsigned NumClauses,
2299 const char *Name);
Bill Wendlingf891bf82011-07-31 06:30:59 +00002300LLVMValueRef LLVMBuildResume(LLVMBuilderRef B, LLVMValueRef Exn);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002301LLVMValueRef LLVMBuildUnreachable(LLVMBuilderRef);
2302
Gordon Henriksen097102c2008-01-01 05:50:53 +00002303/* Add a case to the switch instruction */
2304void LLVMAddCase(LLVMValueRef Switch, LLVMValueRef OnVal,
2305 LLVMBasicBlockRef Dest);
2306
Erick Tryzelaar0fb26ef2010-02-28 09:46:06 +00002307/* Add a destination to the indirectbr instruction */
2308void LLVMAddDestination(LLVMValueRef IndirectBr, LLVMBasicBlockRef Dest);
2309
Bill Wendlingfae14752011-08-12 20:24:12 +00002310/* Add a catch or filter clause to the landingpad instruction */
2311void LLVMAddClause(LLVMValueRef LandingPad, LLVMValueRef ClauseVal);
2312
2313/* Set the 'cleanup' flag in the landingpad instruction */
2314void LLVMSetCleanup(LLVMValueRef LandingPad, LLVMBool Val);
2315
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002316/* Arithmetic */
2317LLVMValueRef LLVMBuildAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2318 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002319LLVMValueRef LLVMBuildNSWAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2320 const char *Name);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +00002321LLVMValueRef LLVMBuildNUWAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2322 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002323LLVMValueRef LLVMBuildFAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2324 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002325LLVMValueRef LLVMBuildSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2326 const char *Name);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +00002327LLVMValueRef LLVMBuildNSWSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2328 const char *Name);
2329LLVMValueRef LLVMBuildNUWSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2330 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002331LLVMValueRef LLVMBuildFSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2332 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002333LLVMValueRef LLVMBuildMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2334 const char *Name);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +00002335LLVMValueRef LLVMBuildNSWMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2336 const char *Name);
2337LLVMValueRef LLVMBuildNUWMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2338 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002339LLVMValueRef LLVMBuildFMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2340 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002341LLVMValueRef LLVMBuildUDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2342 const char *Name);
2343LLVMValueRef LLVMBuildSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2344 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002345LLVMValueRef LLVMBuildExactSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2346 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002347LLVMValueRef LLVMBuildFDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2348 const char *Name);
2349LLVMValueRef LLVMBuildURem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2350 const char *Name);
2351LLVMValueRef LLVMBuildSRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2352 const char *Name);
2353LLVMValueRef LLVMBuildFRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2354 const char *Name);
2355LLVMValueRef LLVMBuildShl(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2356 const char *Name);
2357LLVMValueRef LLVMBuildLShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2358 const char *Name);
2359LLVMValueRef LLVMBuildAShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2360 const char *Name);
2361LLVMValueRef LLVMBuildAnd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2362 const char *Name);
2363LLVMValueRef LLVMBuildOr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2364 const char *Name);
2365LLVMValueRef LLVMBuildXor(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2366 const char *Name);
Erick Tryzelaar31831792010-02-28 05:51:27 +00002367LLVMValueRef LLVMBuildBinOp(LLVMBuilderRef B, LLVMOpcode Op,
2368 LLVMValueRef LHS, LLVMValueRef RHS,
2369 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002370LLVMValueRef LLVMBuildNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +00002371LLVMValueRef LLVMBuildNSWNeg(LLVMBuilderRef B, LLVMValueRef V,
2372 const char *Name);
2373LLVMValueRef LLVMBuildNUWNeg(LLVMBuilderRef B, LLVMValueRef V,
2374 const char *Name);
Dan Gohmanf919bd62009-09-28 21:51:41 +00002375LLVMValueRef LLVMBuildFNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002376LLVMValueRef LLVMBuildNot(LLVMBuilderRef, LLVMValueRef V, const char *Name);
2377
2378/* Memory */
2379LLVMValueRef LLVMBuildMalloc(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
2380LLVMValueRef LLVMBuildArrayMalloc(LLVMBuilderRef, LLVMTypeRef Ty,
2381 LLVMValueRef Val, const char *Name);
2382LLVMValueRef LLVMBuildAlloca(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
2383LLVMValueRef LLVMBuildArrayAlloca(LLVMBuilderRef, LLVMTypeRef Ty,
2384 LLVMValueRef Val, const char *Name);
2385LLVMValueRef LLVMBuildFree(LLVMBuilderRef, LLVMValueRef PointerVal);
2386LLVMValueRef LLVMBuildLoad(LLVMBuilderRef, LLVMValueRef PointerVal,
2387 const char *Name);
2388LLVMValueRef LLVMBuildStore(LLVMBuilderRef, LLVMValueRef Val, LLVMValueRef Ptr);
2389LLVMValueRef LLVMBuildGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
2390 LLVMValueRef *Indices, unsigned NumIndices,
2391 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002392LLVMValueRef LLVMBuildInBoundsGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
2393 LLVMValueRef *Indices, unsigned NumIndices,
2394 const char *Name);
2395LLVMValueRef LLVMBuildStructGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
2396 unsigned Idx, const char *Name);
2397LLVMValueRef LLVMBuildGlobalString(LLVMBuilderRef B, const char *Str,
2398 const char *Name);
2399LLVMValueRef LLVMBuildGlobalStringPtr(LLVMBuilderRef B, const char *Str,
2400 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002401
2402/* Casts */
2403LLVMValueRef LLVMBuildTrunc(LLVMBuilderRef, LLVMValueRef Val,
2404 LLVMTypeRef DestTy, const char *Name);
2405LLVMValueRef LLVMBuildZExt(LLVMBuilderRef, LLVMValueRef Val,
2406 LLVMTypeRef DestTy, const char *Name);
2407LLVMValueRef LLVMBuildSExt(LLVMBuilderRef, LLVMValueRef Val,
2408 LLVMTypeRef DestTy, const char *Name);
2409LLVMValueRef LLVMBuildFPToUI(LLVMBuilderRef, LLVMValueRef Val,
2410 LLVMTypeRef DestTy, const char *Name);
2411LLVMValueRef LLVMBuildFPToSI(LLVMBuilderRef, LLVMValueRef Val,
2412 LLVMTypeRef DestTy, const char *Name);
2413LLVMValueRef LLVMBuildUIToFP(LLVMBuilderRef, LLVMValueRef Val,
2414 LLVMTypeRef DestTy, const char *Name);
2415LLVMValueRef LLVMBuildSIToFP(LLVMBuilderRef, LLVMValueRef Val,
2416 LLVMTypeRef DestTy, const char *Name);
2417LLVMValueRef LLVMBuildFPTrunc(LLVMBuilderRef, LLVMValueRef Val,
2418 LLVMTypeRef DestTy, const char *Name);
2419LLVMValueRef LLVMBuildFPExt(LLVMBuilderRef, LLVMValueRef Val,
2420 LLVMTypeRef DestTy, const char *Name);
2421LLVMValueRef LLVMBuildPtrToInt(LLVMBuilderRef, LLVMValueRef Val,
2422 LLVMTypeRef DestTy, const char *Name);
2423LLVMValueRef LLVMBuildIntToPtr(LLVMBuilderRef, LLVMValueRef Val,
2424 LLVMTypeRef DestTy, const char *Name);
2425LLVMValueRef LLVMBuildBitCast(LLVMBuilderRef, LLVMValueRef Val,
2426 LLVMTypeRef DestTy, const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002427LLVMValueRef LLVMBuildZExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
2428 LLVMTypeRef DestTy, const char *Name);
2429LLVMValueRef LLVMBuildSExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
2430 LLVMTypeRef DestTy, const char *Name);
2431LLVMValueRef LLVMBuildTruncOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
2432 LLVMTypeRef DestTy, const char *Name);
Erick Tryzelaar31831792010-02-28 05:51:27 +00002433LLVMValueRef LLVMBuildCast(LLVMBuilderRef B, LLVMOpcode Op, LLVMValueRef Val,
2434 LLVMTypeRef DestTy, const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002435LLVMValueRef LLVMBuildPointerCast(LLVMBuilderRef, LLVMValueRef Val,
2436 LLVMTypeRef DestTy, const char *Name);
Duncan Sands9d786d72009-11-23 10:49:03 +00002437LLVMValueRef LLVMBuildIntCast(LLVMBuilderRef, LLVMValueRef Val, /*Signed cast!*/
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002438 LLVMTypeRef DestTy, const char *Name);
2439LLVMValueRef LLVMBuildFPCast(LLVMBuilderRef, LLVMValueRef Val,
2440 LLVMTypeRef DestTy, const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00002441
2442/* Comparisons */
2443LLVMValueRef LLVMBuildICmp(LLVMBuilderRef, LLVMIntPredicate Op,
2444 LLVMValueRef LHS, LLVMValueRef RHS,
2445 const char *Name);
2446LLVMValueRef LLVMBuildFCmp(LLVMBuilderRef, LLVMRealPredicate Op,
2447 LLVMValueRef LHS, LLVMValueRef RHS,
2448 const char *Name);
2449
2450/* Miscellaneous instructions */
2451LLVMValueRef LLVMBuildPhi(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
2452LLVMValueRef LLVMBuildCall(LLVMBuilderRef, LLVMValueRef Fn,
2453 LLVMValueRef *Args, unsigned NumArgs,
2454 const char *Name);
2455LLVMValueRef LLVMBuildSelect(LLVMBuilderRef, LLVMValueRef If,
2456 LLVMValueRef Then, LLVMValueRef Else,
2457 const char *Name);
2458LLVMValueRef LLVMBuildVAArg(LLVMBuilderRef, LLVMValueRef List, LLVMTypeRef Ty,
2459 const char *Name);
2460LLVMValueRef LLVMBuildExtractElement(LLVMBuilderRef, LLVMValueRef VecVal,
2461 LLVMValueRef Index, const char *Name);
2462LLVMValueRef LLVMBuildInsertElement(LLVMBuilderRef, LLVMValueRef VecVal,
2463 LLVMValueRef EltVal, LLVMValueRef Index,
2464 const char *Name);
2465LLVMValueRef LLVMBuildShuffleVector(LLVMBuilderRef, LLVMValueRef V1,
2466 LLVMValueRef V2, LLVMValueRef Mask,
2467 const char *Name);
Dan Gohmand5104a52008-11-03 22:55:43 +00002468LLVMValueRef LLVMBuildExtractValue(LLVMBuilderRef, LLVMValueRef AggVal,
2469 unsigned Index, const char *Name);
2470LLVMValueRef LLVMBuildInsertValue(LLVMBuilderRef, LLVMValueRef AggVal,
2471 LLVMValueRef EltVal, unsigned Index,
2472 const char *Name);
Gordon Henriksen76a03742007-09-18 03:18:57 +00002473
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00002474LLVMValueRef LLVMBuildIsNull(LLVMBuilderRef, LLVMValueRef Val,
2475 const char *Name);
2476LLVMValueRef LLVMBuildIsNotNull(LLVMBuilderRef, LLVMValueRef Val,
2477 const char *Name);
2478LLVMValueRef LLVMBuildPtrDiff(LLVMBuilderRef, LLVMValueRef LHS,
2479 LLVMValueRef RHS, const char *Name);
2480
Gregory Szorc34c863a2012-03-21 03:54:29 +00002481/**
2482 * @}
2483 */
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00002484
Gregory Szorc34c863a2012-03-21 03:54:29 +00002485/**
2486 * @defgroup LLVMCCoreModuleProvider Module Providers
2487 *
2488 * @{
2489 */
Gordon Henriksen0a68fe22007-12-12 01:04:30 +00002490
Gregory Szorc34c863a2012-03-21 03:54:29 +00002491/**
2492 * Changes the type of M so it can be passed to FunctionPassManagers and the
Jeffrey Yasskin091217b2010-01-27 20:34:15 +00002493 * JIT. They take ModuleProviders for historical reasons.
Gordon Henriksen0a68fe22007-12-12 01:04:30 +00002494 */
2495LLVMModuleProviderRef
2496LLVMCreateModuleProviderForExistingModule(LLVMModuleRef M);
2497
Gregory Szorc34c863a2012-03-21 03:54:29 +00002498/**
2499 * Destroys the module M.
Gordon Henriksen0a68fe22007-12-12 01:04:30 +00002500 */
Jeffrey Yasskin091217b2010-01-27 20:34:15 +00002501void LLVMDisposeModuleProvider(LLVMModuleProviderRef M);
Gordon Henriksen0a68fe22007-12-12 01:04:30 +00002502
Gregory Szorc34c863a2012-03-21 03:54:29 +00002503/**
2504 * @}
2505 */
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00002506
Gregory Szorc34c863a2012-03-21 03:54:29 +00002507/**
2508 * @defgroup LLVMCCoreMemoryBuffers Memory Buffers
2509 *
2510 * @{
2511 */
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00002512
Chris Lattner25963c62010-01-09 22:27:07 +00002513LLVMBool LLVMCreateMemoryBufferWithContentsOfFile(const char *Path,
2514 LLVMMemoryBufferRef *OutMemBuf,
2515 char **OutMessage);
2516LLVMBool LLVMCreateMemoryBufferWithSTDIN(LLVMMemoryBufferRef *OutMemBuf,
2517 char **OutMessage);
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00002518void LLVMDisposeMemoryBuffer(LLVMMemoryBufferRef MemBuf);
2519
Gregory Szorc34c863a2012-03-21 03:54:29 +00002520/**
2521 * @}
2522 */
2523
2524/**
2525 * @defgroup LLVMCCorePassRegistry Pass Registry
2526 *
2527 * @{
2528 */
Owen Anderson4698c5d2010-10-07 17:55:47 +00002529
2530/** Return the global pass registry, for use with initialization functions.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002531 @see llvm::PassRegistry::getPassRegistry */
Owen Anderson4698c5d2010-10-07 17:55:47 +00002532LLVMPassRegistryRef LLVMGetGlobalPassRegistry(void);
Gordon Henriksen878114b2008-03-16 04:20:44 +00002533
Gregory Szorc34c863a2012-03-21 03:54:29 +00002534/**
2535 * @}
2536 */
2537
2538/**
2539 * @defgroup LLVMCCorePassManagers Pass Managers
2540 *
2541 * @{
2542 */
Gordon Henriksen878114b2008-03-16 04:20:44 +00002543
2544/** Constructs a new whole-module pass pipeline. This type of pipeline is
2545 suitable for link-time optimization and whole-module transformations.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002546 @see llvm::PassManager::PassManager */
Gordon Henriksena735a9c2008-05-04 12:55:34 +00002547LLVMPassManagerRef LLVMCreatePassManager(void);
Gordon Henriksen878114b2008-03-16 04:20:44 +00002548
2549/** Constructs a new function-by-function pass pipeline over the module
2550 provider. It does not take ownership of the module provider. This type of
2551 pipeline is suitable for code generation and JIT compilation tasks.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002552 @see llvm::FunctionPassManager::FunctionPassManager */
Erick Tryzelaarad0e0cb2010-03-02 23:58:54 +00002553LLVMPassManagerRef LLVMCreateFunctionPassManagerForModule(LLVMModuleRef M);
2554
2555/** Deprecated: Use LLVMCreateFunctionPassManagerForModule instead. */
Gordon Henriksen878114b2008-03-16 04:20:44 +00002556LLVMPassManagerRef LLVMCreateFunctionPassManager(LLVMModuleProviderRef MP);
2557
2558/** Initializes, executes on the provided module, and finalizes all of the
2559 passes scheduled in the pass manager. Returns 1 if any of the passes
Gregory Szorc34c863a2012-03-21 03:54:29 +00002560 modified the module, 0 otherwise.
2561 @see llvm::PassManager::run(Module&) */
Chris Lattner25963c62010-01-09 22:27:07 +00002562LLVMBool LLVMRunPassManager(LLVMPassManagerRef PM, LLVMModuleRef M);
Gordon Henriksen878114b2008-03-16 04:20:44 +00002563
2564/** Initializes all of the function passes scheduled in the function pass
2565 manager. Returns 1 if any of the passes modified the module, 0 otherwise.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002566 @see llvm::FunctionPassManager::doInitialization */
Chris Lattner25963c62010-01-09 22:27:07 +00002567LLVMBool LLVMInitializeFunctionPassManager(LLVMPassManagerRef FPM);
Gordon Henriksen878114b2008-03-16 04:20:44 +00002568
2569/** Executes all of the function passes scheduled in the function pass manager
2570 on the provided function. Returns 1 if any of the passes modified the
2571 function, false otherwise.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002572 @see llvm::FunctionPassManager::run(Function&) */
Chris Lattner25963c62010-01-09 22:27:07 +00002573LLVMBool LLVMRunFunctionPassManager(LLVMPassManagerRef FPM, LLVMValueRef F);
Gordon Henriksen878114b2008-03-16 04:20:44 +00002574
2575/** Finalizes all of the function passes scheduled in in the function pass
2576 manager. Returns 1 if any of the passes modified the module, 0 otherwise.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002577 @see llvm::FunctionPassManager::doFinalization */
Chris Lattner25963c62010-01-09 22:27:07 +00002578LLVMBool LLVMFinalizeFunctionPassManager(LLVMPassManagerRef FPM);
Gordon Henriksen878114b2008-03-16 04:20:44 +00002579
2580/** Frees the memory of a pass pipeline. For function pipelines, does not free
2581 the module provider.
Gregory Szorc34c863a2012-03-21 03:54:29 +00002582 @see llvm::PassManagerBase::~PassManagerBase. */
Gordon Henriksen878114b2008-03-16 04:20:44 +00002583void LLVMDisposePassManager(LLVMPassManagerRef PM);
2584
Gregory Szorc34c863a2012-03-21 03:54:29 +00002585/**
2586 * @}
2587 */
2588
2589/**
2590 * @}
2591 */
2592
2593/**
2594 * @}
2595 */
Gordon Henriksen878114b2008-03-16 04:20:44 +00002596
Gordon Henriksen76a03742007-09-18 03:18:57 +00002597#ifdef __cplusplus
2598}
Gordon Henriksen76a03742007-09-18 03:18:57 +00002599
Gordon Henriksen7330acd2007-10-05 23:59:36 +00002600namespace llvm {
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00002601 class MemoryBuffer;
Gordon Henriksen96571492008-03-16 15:55:43 +00002602 class PassManagerBase;
Gordon Henriksen0a68fe22007-12-12 01:04:30 +00002603
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00002604 #define DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \
2605 inline ty *unwrap(ref P) { \
2606 return reinterpret_cast<ty*>(P); \
2607 } \
2608 \
2609 inline ref wrap(const ty *P) { \
2610 return reinterpret_cast<ref>(const_cast<ty*>(P)); \
2611 }
Gordon Henriksen7330acd2007-10-05 23:59:36 +00002612
Gordon Henriksen878114b2008-03-16 04:20:44 +00002613 #define DEFINE_ISA_CONVERSION_FUNCTIONS(ty, ref) \
2614 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \
2615 \
2616 template<typename T> \
2617 inline T *unwrap(ref P) { \
2618 return cast<T>(unwrap(P)); \
2619 }
2620
2621 #define DEFINE_STDCXX_CONVERSION_FUNCTIONS(ty, ref) \
2622 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \
2623 \
2624 template<typename T> \
2625 inline T *unwrap(ref P) { \
Chris Lattner7ba06612010-01-22 06:49:46 +00002626 T *Q = (T*)unwrap(P); \
Gordon Henriksen878114b2008-03-16 04:20:44 +00002627 assert(Q && "Invalid cast!"); \
2628 return Q; \
2629 }
2630
2631 DEFINE_ISA_CONVERSION_FUNCTIONS (Type, LLVMTypeRef )
2632 DEFINE_ISA_CONVERSION_FUNCTIONS (Value, LLVMValueRef )
Gordon Henriksen823f9732007-12-27 18:25:59 +00002633 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(Module, LLVMModuleRef )
2634 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(BasicBlock, LLVMBasicBlockRef )
Eric Christopher59278832008-08-08 19:39:37 +00002635 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(IRBuilder<>, LLVMBuilderRef )
Gordon Henriksen823f9732007-12-27 18:25:59 +00002636 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(MemoryBuffer, LLVMMemoryBufferRef )
Owen Anderson6773d382009-07-01 16:58:40 +00002637 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(LLVMContext, LLVMContextRef )
Erick Tryzelaar9f9857e2010-03-02 20:32:28 +00002638 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(Use, LLVMUseRef )
Gordon Henriksen878114b2008-03-16 04:20:44 +00002639 DEFINE_STDCXX_CONVERSION_FUNCTIONS(PassManagerBase, LLVMPassManagerRef )
Owen Anderson4698c5d2010-10-07 17:55:47 +00002640 DEFINE_STDCXX_CONVERSION_FUNCTIONS(PassRegistry, LLVMPassRegistryRef )
Jeffrey Yasskin091217b2010-01-27 20:34:15 +00002641 /* LLVMModuleProviderRef exists for historical reasons, but now just holds a
2642 * Module.
2643 */
2644 inline Module *unwrap(LLVMModuleProviderRef MP) {
2645 return reinterpret_cast<Module*>(MP);
2646 }
Gordon Henriksen7330acd2007-10-05 23:59:36 +00002647
Gordon Henriksen878114b2008-03-16 04:20:44 +00002648 #undef DEFINE_STDCXX_CONVERSION_FUNCTIONS
2649 #undef DEFINE_ISA_CONVERSION_FUNCTIONS
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00002650 #undef DEFINE_SIMPLE_CONVERSION_FUNCTIONS
Erick Tryzelaar262332f2009-08-14 00:01:31 +00002651
2652 /* Specialized opaque context conversions.
2653 */
2654 inline LLVMContext **unwrap(LLVMContextRef* Tys) {
2655 return reinterpret_cast<LLVMContext**>(Tys);
2656 }
2657
2658 inline LLVMContextRef *wrap(const LLVMContext **Tys) {
2659 return reinterpret_cast<LLVMContextRef*>(const_cast<LLVMContext**>(Tys));
2660 }
Gordon Henriksen7330acd2007-10-05 23:59:36 +00002661
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00002662 /* Specialized opaque type conversions.
2663 */
Gordon Henriksen7330acd2007-10-05 23:59:36 +00002664 inline Type **unwrap(LLVMTypeRef* Tys) {
2665 return reinterpret_cast<Type**>(Tys);
2666 }
2667
Chris Lattner229907c2011-07-18 04:54:35 +00002668 inline LLVMTypeRef *wrap(Type **Tys) {
Gordon Henriksen7330acd2007-10-05 23:59:36 +00002669 return reinterpret_cast<LLVMTypeRef*>(const_cast<Type**>(Tys));
2670 }
2671
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00002672 /* Specialized opaque value conversions.
Gordon Henriksen7330acd2007-10-05 23:59:36 +00002673 */
Gordon Henriksen7330acd2007-10-05 23:59:36 +00002674 inline Value **unwrap(LLVMValueRef *Vals) {
2675 return reinterpret_cast<Value**>(Vals);
2676 }
2677
2678 template<typename T>
2679 inline T **unwrap(LLVMValueRef *Vals, unsigned Length) {
2680 #if DEBUG
Chris Lattnerb7971152009-07-10 18:28:19 +00002681 for (LLVMValueRef *I = Vals, *E = Vals + Length; I != E; ++I)
Gordon Henriksen7330acd2007-10-05 23:59:36 +00002682 cast<T>(*I);
2683 #endif
Hans Wennborg8f7edbf2011-06-04 16:00:19 +00002684 (void)Length;
Gordon Henriksen7330acd2007-10-05 23:59:36 +00002685 return reinterpret_cast<T**>(Vals);
2686 }
2687
Gordon Henriksen7330acd2007-10-05 23:59:36 +00002688 inline LLVMValueRef *wrap(const Value **Vals) {
2689 return reinterpret_cast<LLVMValueRef*>(const_cast<Value**>(Vals));
2690 }
Gordon Henriksen7330acd2007-10-05 23:59:36 +00002691}
2692
2693#endif /* !defined(__cplusplus) */
2694
2695#endif /* !defined(LLVM_C_CORE_H) */