blob: 6a5325924557093b73d5ee303cee9977481c179c [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|* *|
13|* LLVM uses a polymorphic type hierarchy which C cannot represent, therefore *|
14|* parameters must be passed as base types. Despite the declared types, most *|
15|* of the functions provided operate only on branches of the type hierarchy. *|
16|* The declared parameter names are descriptive and specify which type is *|
17|* required. Additionally, each type hierarchy is documented along with the *|
18|* functions that operate upon it. For more detail, refer to LLVM's C++ code. *|
19|* If in doubt, refer to Core.cpp, which performs paramter downcasts in the *|
20|* form unwrap<RequiredType>(Param). *|
21|* *|
22|* Many exotic languages can interoperate with C code but have a harder time *|
23|* with C++ due to name mangling. So in addition to C, this interface enables *|
24|* tools written in such languages. *|
25|* *|
Gordon Henriksen7330acd2007-10-05 23:59:36 +000026|* When included into a C++ source file, also declares 'wrap' and 'unwrap' *|
27|* helpers to perform opaque reference<-->pointer conversions. These helpers *|
28|* are shorter and more tightly typed than writing the casts by hand when *|
29|* authoring bindings. In assert builds, they will do runtime type checking. *|
30|* *|
Gordon Henriksen76a03742007-09-18 03:18:57 +000031\*===----------------------------------------------------------------------===*/
32
33#ifndef LLVM_C_CORE_H
34#define LLVM_C_CORE_H
35
Michael J. Spencerab425d82010-11-29 18:47:54 +000036#include "llvm/Support/DataTypes.h"
Erick Tryzelaardd991352009-08-16 23:36:46 +000037
Gordon Henriksen76a03742007-09-18 03:18:57 +000038#ifdef __cplusplus
Gordon Henriksen7330acd2007-10-05 23:59:36 +000039
40/* Need these includes to support the LLVM 'cast' template for the C++ 'wrap'
41 and 'unwrap' conversion functions. */
42#include "llvm/Module.h"
Owen Anderson4698c5d2010-10-07 17:55:47 +000043#include "llvm/PassRegistry.h"
Duncan Sandsa07136e2008-04-13 06:22:09 +000044#include "llvm/Support/IRBuilder.h"
Gordon Henriksen7330acd2007-10-05 23:59:36 +000045
Gordon Henriksen76a03742007-09-18 03:18:57 +000046extern "C" {
47#endif
48
49
Chris Lattner25963c62010-01-09 22:27:07 +000050typedef int LLVMBool;
51
Gordon Henriksen76a03742007-09-18 03:18:57 +000052/* Opaque types. */
Gordon Henriksen4a4d7352007-12-30 17:46:33 +000053
54/**
Owen Anderson6773d382009-07-01 16:58:40 +000055 * The top-level container for all LLVM global data. See the LLVMContext class.
56 */
Erick Tryzelaar262332f2009-08-14 00:01:31 +000057typedef struct LLVMOpaqueContext *LLVMContextRef;
Owen Anderson6773d382009-07-01 16:58:40 +000058
59/**
Gordon Henriksen4a4d7352007-12-30 17:46:33 +000060 * The top-level container for all other LLVM Intermediate Representation (IR)
61 * objects. See the llvm::Module class.
62 */
Gordon Henriksen76a03742007-09-18 03:18:57 +000063typedef struct LLVMOpaqueModule *LLVMModuleRef;
Gordon Henriksen4a4d7352007-12-30 17:46:33 +000064
65/**
Gordon Henriksena49d4352008-03-07 19:13:06 +000066 * Each value in the LLVM IR has a type, an LLVMTypeRef. See the llvm::Type
67 * class.
Gordon Henriksen4a4d7352007-12-30 17:46:33 +000068 */
Gordon Henriksen76a03742007-09-18 03:18:57 +000069typedef struct LLVMOpaqueType *LLVMTypeRef;
Gordon Henriksen4a4d7352007-12-30 17:46:33 +000070
Gordon Henriksen76a03742007-09-18 03:18:57 +000071typedef struct LLVMOpaqueValue *LLVMValueRef;
Gordon Henriksenc23b66c2007-09-26 20:56:12 +000072typedef struct LLVMOpaqueBasicBlock *LLVMBasicBlockRef;
73typedef struct LLVMOpaqueBuilder *LLVMBuilderRef;
Gordon Henriksen34eb6d82007-12-19 22:30:40 +000074
Jeffrey Yasskin091217b2010-01-27 20:34:15 +000075/* Interface used to provide a module to JIT or interpreter. This is now just a
76 * synonym for llvm::Module, but we have to keep using the different type to
77 * keep binary compatibility.
Gordon Henriksen34eb6d82007-12-19 22:30:40 +000078 */
Gordon Henriksen0a68fe22007-12-12 01:04:30 +000079typedef struct LLVMOpaqueModuleProvider *LLVMModuleProviderRef;
Gordon Henriksen76a03742007-09-18 03:18:57 +000080
Gordon Henriksen34eb6d82007-12-19 22:30:40 +000081/* Used to provide a module to JIT or interpreter.
82 * See the llvm::MemoryBuffer class.
83 */
84typedef struct LLVMOpaqueMemoryBuffer *LLVMMemoryBufferRef;
85
Gordon Henriksen878114b2008-03-16 04:20:44 +000086/** See the llvm::PassManagerBase class. */
87typedef struct LLVMOpaquePassManager *LLVMPassManagerRef;
88
Owen Anderson4698c5d2010-10-07 17:55:47 +000089/** See the llvm::PassRegistry class. */
90typedef struct LLVMOpaquePassRegistry *LLVMPassRegistryRef;
91
Erick Tryzelaar9f9857e2010-03-02 20:32:28 +000092/** Used to get the users and usees of a Value. See the llvm::Use class. */
93typedef struct LLVMOpaqueUse *LLVMUseRef;
Chris Lattner40cf28d2009-10-12 04:01:02 +000094
Gordon Henriksen76a03742007-09-18 03:18:57 +000095typedef enum {
Devang Patel4c758ea2008-09-25 21:00:45 +000096 LLVMZExtAttribute = 1<<0,
97 LLVMSExtAttribute = 1<<1,
98 LLVMNoReturnAttribute = 1<<2,
99 LLVMInRegAttribute = 1<<3,
100 LLVMStructRetAttribute = 1<<4,
101 LLVMNoUnwindAttribute = 1<<5,
102 LLVMNoAliasAttribute = 1<<6,
103 LLVMByValAttribute = 1<<7,
104 LLVMNestAttribute = 1<<8,
105 LLVMReadNoneAttribute = 1<<9,
Anton Korobeynikovc8ce7b082009-07-17 18:07:26 +0000106 LLVMReadOnlyAttribute = 1<<10,
Anton Korobeynikov9750be92009-07-17 18:57:16 +0000107 LLVMNoInlineAttribute = 1<<11,
108 LLVMAlwaysInlineAttribute = 1<<12,
109 LLVMOptimizeForSizeAttribute = 1<<13,
110 LLVMStackProtectAttribute = 1<<14,
111 LLVMStackProtectReqAttribute = 1<<15,
Erick Tryzelaar8f69fea2010-03-03 23:51:25 +0000112 LLVMAlignment = 31<<16,
Anton Korobeynikov9750be92009-07-17 18:57:16 +0000113 LLVMNoCaptureAttribute = 1<<21,
114 LLVMNoRedZoneAttribute = 1<<22,
115 LLVMNoImplicitFloatAttribute = 1<<23,
Jakob Stoklund Olesen74bb06c2010-02-06 01:16:28 +0000116 LLVMNakedAttribute = 1<<24,
Erick Tryzelaar8f69fea2010-03-03 23:51:25 +0000117 LLVMInlineHintAttribute = 1<<25,
Torok Edwin1db48c02011-10-06 12:13:32 +0000118 LLVMStackAlignment = 7<<26,
119 LLVMReturnsTwice = 1 << 29,
120 LLVMUWTable = 1 << 30,
121 LLVMNonLazyBind = 1 << 31
Devang Patel4c758ea2008-09-25 21:00:45 +0000122} LLVMAttribute;
Gordon Henriksen2d9cc212008-04-28 17:37:06 +0000123
124typedef enum {
Bill Wendlingda52cec2010-02-15 20:53:17 +0000125 /* Terminator Instructions */
Chris Lattner40cf28d2009-10-12 04:01:02 +0000126 LLVMRet = 1,
127 LLVMBr = 2,
128 LLVMSwitch = 3,
Bill Wendling07d6d762010-02-15 20:50:51 +0000129 LLVMIndirectBr = 4,
130 LLVMInvoke = 5,
Bill Wendling46ffaa92011-08-02 06:20:17 +0000131 /* removed 6 due to API changes */
Bill Wendling2641d132011-07-27 21:00:28 +0000132 LLVMUnreachable = 7,
Bill Wendling07d6d762010-02-15 20:50:51 +0000133
Bill Wendlingda52cec2010-02-15 20:53:17 +0000134 /* Standard Binary Operators */
Bill Wendling2641d132011-07-27 21:00:28 +0000135 LLVMAdd = 8,
136 LLVMFAdd = 9,
137 LLVMSub = 10,
138 LLVMFSub = 11,
139 LLVMMul = 12,
140 LLVMFMul = 13,
141 LLVMUDiv = 14,
142 LLVMSDiv = 15,
143 LLVMFDiv = 16,
144 LLVMURem = 17,
145 LLVMSRem = 18,
146 LLVMFRem = 19,
Bill Wendling07d6d762010-02-15 20:50:51 +0000147
Bill Wendlingda52cec2010-02-15 20:53:17 +0000148 /* Logical Operators */
Bill Wendling2641d132011-07-27 21:00:28 +0000149 LLVMShl = 20,
150 LLVMLShr = 21,
151 LLVMAShr = 22,
152 LLVMAnd = 23,
153 LLVMOr = 24,
154 LLVMXor = 25,
Bill Wendling07d6d762010-02-15 20:50:51 +0000155
Bill Wendlingda52cec2010-02-15 20:53:17 +0000156 /* Memory Operators */
Bill Wendling2641d132011-07-27 21:00:28 +0000157 LLVMAlloca = 26,
158 LLVMLoad = 27,
159 LLVMStore = 28,
160 LLVMGetElementPtr = 29,
Bill Wendling07d6d762010-02-15 20:50:51 +0000161
Bill Wendlingda52cec2010-02-15 20:53:17 +0000162 /* Cast Operators */
Bill Wendling2641d132011-07-27 21:00:28 +0000163 LLVMTrunc = 30,
164 LLVMZExt = 31,
165 LLVMSExt = 32,
166 LLVMFPToUI = 33,
167 LLVMFPToSI = 34,
168 LLVMUIToFP = 35,
169 LLVMSIToFP = 36,
170 LLVMFPTrunc = 37,
171 LLVMFPExt = 38,
172 LLVMPtrToInt = 39,
173 LLVMIntToPtr = 40,
174 LLVMBitCast = 41,
Bill Wendling07d6d762010-02-15 20:50:51 +0000175
Bill Wendlingda52cec2010-02-15 20:53:17 +0000176 /* Other Operators */
Bill Wendling2641d132011-07-27 21:00:28 +0000177 LLVMICmp = 42,
178 LLVMFCmp = 43,
179 LLVMPHI = 44,
180 LLVMCall = 45,
181 LLVMSelect = 46,
Torok Edwin05dc9d62011-10-06 12:39:34 +0000182 LLVMUserOp1 = 47,
183 LLVMUserOp2 = 48,
Bill Wendling2641d132011-07-27 21:00:28 +0000184 LLVMVAArg = 49,
185 LLVMExtractElement = 50,
186 LLVMInsertElement = 51,
187 LLVMShuffleVector = 52,
188 LLVMExtractValue = 53,
189 LLVMInsertValue = 54,
Eli Friedman4fc946c2011-07-27 18:59:19 +0000190
191 /* Atomic operators */
Bill Wendling2641d132011-07-27 21:00:28 +0000192 LLVMFence = 55,
Eli Friedmanc9a551e2011-07-28 21:48:00 +0000193 LLVMAtomicCmpXchg = 56,
Bill Wendlingf891bf82011-07-31 06:30:59 +0000194 LLVMAtomicRMW = 57,
195
196 /* Exception Handling Operators */
Bill Wendlingfae14752011-08-12 20:24:12 +0000197 LLVMResume = 58,
Torok Edwin05dc9d62011-10-06 12:39:34 +0000198 LLVMLandingPad = 59,
199 LLVMUnwind = 60
200
Bill Wendling2641d132011-07-27 21:00:28 +0000201
Chris Lattner40cf28d2009-10-12 04:01:02 +0000202} LLVMOpcode;
203
204typedef enum {
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000205 LLVMVoidTypeKind, /**< type with no size */
206 LLVMFloatTypeKind, /**< 32 bit floating point type */
207 LLVMDoubleTypeKind, /**< 64 bit floating point type */
208 LLVMX86_FP80TypeKind, /**< 80 bit floating point type (X87) */
209 LLVMFP128TypeKind, /**< 128 bit floating point type (112-bit mantissa)*/
210 LLVMPPC_FP128TypeKind, /**< 128 bit floating point type (two 64-bits) */
211 LLVMLabelTypeKind, /**< Labels */
212 LLVMIntegerTypeKind, /**< Arbitrary bit width integers */
213 LLVMFunctionTypeKind, /**< Functions */
214 LLVMStructTypeKind, /**< Structures */
215 LLVMArrayTypeKind, /**< Arrays */
216 LLVMPointerTypeKind, /**< Pointers */
Chris Lattnerdac44ec2009-07-15 22:00:31 +0000217 LLVMVectorTypeKind, /**< SIMD 'packed' format, or other vector type */
Dale Johannesenbaa5d042010-09-10 20:55:01 +0000218 LLVMMetadataTypeKind, /**< Metadata */
219 LLVMX86_MMXTypeKind /**< X86 MMX */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000220} LLVMTypeKind;
221
222typedef enum {
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000223 LLVMExternalLinkage, /**< Externally visible function */
Chris Lattner2dba0f02009-04-13 06:25:37 +0000224 LLVMAvailableExternallyLinkage,
Duncan Sands12da8ce2009-03-07 15:45:40 +0000225 LLVMLinkOnceAnyLinkage, /**< Keep one copy of function when linking (inline)*/
226 LLVMLinkOnceODRLinkage, /**< Same, but only replaced by something
227 equivalent. */
228 LLVMWeakAnyLinkage, /**< Keep one copy of function when linking (weak) */
229 LLVMWeakODRLinkage, /**< Same, but only replaced by something
230 equivalent. */
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000231 LLVMAppendingLinkage, /**< Special purpose, only applies to global arrays */
232 LLVMInternalLinkage, /**< Rename collisions when linking (static
233 functions) */
Duncan Sands12da8ce2009-03-07 15:45:40 +0000234 LLVMPrivateLinkage, /**< Like Internal, but omit from symbol table */
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000235 LLVMDLLImportLinkage, /**< Function to be imported from DLL */
236 LLVMDLLExportLinkage, /**< Function to be accessible from DLL */
Duncan Sandse2881052009-03-11 08:08:06 +0000237 LLVMExternalWeakLinkage,/**< ExternalWeak linkage description */
Jeffrey Yasskin091217b2010-01-27 20:34:15 +0000238 LLVMGhostLinkage, /**< Obsolete */
Bill Wendling002b1672009-07-20 18:22:52 +0000239 LLVMCommonLinkage, /**< Tentative definitions */
Bill Wendling03bcd6e2010-07-01 21:55:59 +0000240 LLVMLinkerPrivateLinkage, /**< Like Private, but linker removes. */
Bill Wendling578ee402010-08-20 22:05:50 +0000241 LLVMLinkerPrivateWeakLinkage, /**< Like LinkerPrivate, but is weak. */
242 LLVMLinkerPrivateWeakDefAutoLinkage /**< Like LinkerPrivateWeak, but possibly
243 hidden. */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000244} LLVMLinkage;
245
246typedef enum {
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000247 LLVMDefaultVisibility, /**< The GV is visible */
248 LLVMHiddenVisibility, /**< The GV is hidden */
249 LLVMProtectedVisibility /**< The GV is protected */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000250} LLVMVisibility;
251
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000252typedef enum {
253 LLVMCCallConv = 0,
254 LLVMFastCallConv = 8,
255 LLVMColdCallConv = 9,
256 LLVMX86StdcallCallConv = 64,
257 LLVMX86FastcallCallConv = 65
258} LLVMCallConv;
259
260typedef enum {
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000261 LLVMIntEQ = 32, /**< equal */
262 LLVMIntNE, /**< not equal */
263 LLVMIntUGT, /**< unsigned greater than */
264 LLVMIntUGE, /**< unsigned greater or equal */
265 LLVMIntULT, /**< unsigned less than */
266 LLVMIntULE, /**< unsigned less or equal */
267 LLVMIntSGT, /**< signed greater than */
268 LLVMIntSGE, /**< signed greater or equal */
269 LLVMIntSLT, /**< signed less than */
270 LLVMIntSLE /**< signed less or equal */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000271} LLVMIntPredicate;
272
273typedef enum {
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000274 LLVMRealPredicateFalse, /**< Always false (always folded) */
275 LLVMRealOEQ, /**< True if ordered and equal */
276 LLVMRealOGT, /**< True if ordered and greater than */
277 LLVMRealOGE, /**< True if ordered and greater than or equal */
278 LLVMRealOLT, /**< True if ordered and less than */
279 LLVMRealOLE, /**< True if ordered and less than or equal */
280 LLVMRealONE, /**< True if ordered and operands are unequal */
281 LLVMRealORD, /**< True if ordered (no nans) */
282 LLVMRealUNO, /**< True if unordered: isnan(X) | isnan(Y) */
283 LLVMRealUEQ, /**< True if unordered or equal */
284 LLVMRealUGT, /**< True if unordered or greater than */
285 LLVMRealUGE, /**< True if unordered, greater than, or equal */
286 LLVMRealULT, /**< True if unordered or less than */
287 LLVMRealULE, /**< True if unordered, less than, or equal */
288 LLVMRealUNE, /**< True if unordered or not equal */
289 LLVMRealPredicateTrue /**< Always true (always folded) */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000290} LLVMRealPredicate;
291
Bill Wendlingfae14752011-08-12 20:24:12 +0000292typedef enum {
293 LLVMLandingPadCatch, /**< A catch clause */
294 LLVMLandingPadFilter /**< A filter clause */
295} LLVMLandingPadClauseTy;
296
Nick Lewycky0db26542011-05-15 07:20:34 +0000297void LLVMInitializeCore(LLVMPassRegistryRef R);
298
Gordon Henriksen76a03742007-09-18 03:18:57 +0000299
Gordon Henriksen34eb6d82007-12-19 22:30:40 +0000300/*===-- Error handling ----------------------------------------------------===*/
301
302void LLVMDisposeMessage(char *Message);
303
304
Erick Tryzelaard8531fa2010-02-28 09:45:59 +0000305/*===-- Contexts ----------------------------------------------------------===*/
Gordon Henriksen76a03742007-09-18 03:18:57 +0000306
Owen Anderson6773d382009-07-01 16:58:40 +0000307/* Create and destroy contexts. */
Erick Tryzelaarf34cb0c2009-08-30 23:38:06 +0000308LLVMContextRef LLVMContextCreate(void);
309LLVMContextRef LLVMGetGlobalContext(void);
Owen Anderson6773d382009-07-01 16:58:40 +0000310void LLVMContextDispose(LLVMContextRef C);
311
Erick Tryzelaard8531fa2010-02-28 09:45:59 +0000312unsigned LLVMGetMDKindIDInContext(LLVMContextRef C, const char* Name,
313 unsigned SLen);
314unsigned LLVMGetMDKindID(const char* Name, unsigned SLen);
315
316/*===-- Modules -----------------------------------------------------------===*/
317
Gordon Henriksen76a03742007-09-18 03:18:57 +0000318/* Create and destroy modules. */
Gordon Henriksena49d4352008-03-07 19:13:06 +0000319/** See llvm::Module::Module. */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000320LLVMModuleRef LLVMModuleCreateWithName(const char *ModuleID);
Owen Anderson31d44e42009-07-02 07:17:57 +0000321LLVMModuleRef LLVMModuleCreateWithNameInContext(const char *ModuleID,
322 LLVMContextRef C);
Gordon Henriksena49d4352008-03-07 19:13:06 +0000323
324/** See llvm::Module::~Module. */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000325void LLVMDisposeModule(LLVMModuleRef M);
326
Gordon Henriksena49d4352008-03-07 19:13:06 +0000327/** Data layout. See Module::getDataLayout. */
Gordon Henriksen05568bb2007-12-27 20:13:47 +0000328const char *LLVMGetDataLayout(LLVMModuleRef M);
329void LLVMSetDataLayout(LLVMModuleRef M, const char *Triple);
330
Gordon Henriksena49d4352008-03-07 19:13:06 +0000331/** Target triple. See Module::getTargetTriple. */
Gordon Henriksen05568bb2007-12-27 20:13:47 +0000332const char *LLVMGetTarget(LLVMModuleRef M);
333void LLVMSetTarget(LLVMModuleRef M, const char *Triple);
334
Gordon Henriksen6c6075e2008-03-14 23:58:56 +0000335/** See Module::dump. */
336void LLVMDumpModule(LLVMModuleRef M);
337
Chris Lattner26941452010-04-10 17:52:58 +0000338/** See Module::setModuleInlineAsm. */
339void LLVMSetModuleInlineAsm(LLVMModuleRef M, const char *Asm);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000340
Chris Lattnera7e04b02010-11-28 20:03:44 +0000341/** See Module::getContext. */
342LLVMContextRef LLVMGetModuleContext(LLVMModuleRef M);
343
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000344/*===-- Types -------------------------------------------------------------===*/
Gordon Henriksen76a03742007-09-18 03:18:57 +0000345
346/* LLVM types conform to the following hierarchy:
347 *
348 * types:
349 * integer type
350 * real type
351 * function type
352 * sequence types:
353 * array type
354 * pointer type
355 * vector type
356 * void type
357 * label type
358 * opaque type
359 */
360
Gordon Henriksena49d4352008-03-07 19:13:06 +0000361/** See llvm::LLVMTypeKind::getTypeID. */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000362LLVMTypeKind LLVMGetTypeKind(LLVMTypeRef Ty);
Torok Edwin1cd9ade2011-10-06 12:13:28 +0000363LLVMBool LLVMTypeIsSized(LLVMTypeRef Ty);
Gordon Henriksena49d4352008-03-07 19:13:06 +0000364
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000365/** See llvm::LLVMType::getContext. */
366LLVMContextRef LLVMGetTypeContext(LLVMTypeRef Ty);
367
Gordon Henriksen76a03742007-09-18 03:18:57 +0000368/* Operations on integer types */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000369LLVMTypeRef LLVMInt1TypeInContext(LLVMContextRef C);
370LLVMTypeRef LLVMInt8TypeInContext(LLVMContextRef C);
371LLVMTypeRef LLVMInt16TypeInContext(LLVMContextRef C);
372LLVMTypeRef LLVMInt32TypeInContext(LLVMContextRef C);
373LLVMTypeRef LLVMInt64TypeInContext(LLVMContextRef C);
374LLVMTypeRef LLVMIntTypeInContext(LLVMContextRef C, unsigned NumBits);
375
Gordon Henriksena735a9c2008-05-04 12:55:34 +0000376LLVMTypeRef LLVMInt1Type(void);
377LLVMTypeRef LLVMInt8Type(void);
378LLVMTypeRef LLVMInt16Type(void);
379LLVMTypeRef LLVMInt32Type(void);
380LLVMTypeRef LLVMInt64Type(void);
Gordon Henriksened7beaa2007-10-06 16:05:20 +0000381LLVMTypeRef LLVMIntType(unsigned NumBits);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000382unsigned LLVMGetIntTypeWidth(LLVMTypeRef IntegerTy);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000383
384/* Operations on real types */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000385LLVMTypeRef LLVMFloatTypeInContext(LLVMContextRef C);
386LLVMTypeRef LLVMDoubleTypeInContext(LLVMContextRef C);
387LLVMTypeRef LLVMX86FP80TypeInContext(LLVMContextRef C);
388LLVMTypeRef LLVMFP128TypeInContext(LLVMContextRef C);
389LLVMTypeRef LLVMPPCFP128TypeInContext(LLVMContextRef C);
390
Gordon Henriksena735a9c2008-05-04 12:55:34 +0000391LLVMTypeRef LLVMFloatType(void);
392LLVMTypeRef LLVMDoubleType(void);
393LLVMTypeRef LLVMX86FP80Type(void);
394LLVMTypeRef LLVMFP128Type(void);
395LLVMTypeRef LLVMPPCFP128Type(void);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000396
397/* Operations on function types */
Gordon Henriksened7beaa2007-10-06 16:05:20 +0000398LLVMTypeRef LLVMFunctionType(LLVMTypeRef ReturnType,
399 LLVMTypeRef *ParamTypes, unsigned ParamCount,
Chris Lattner25963c62010-01-09 22:27:07 +0000400 LLVMBool IsVarArg);
401LLVMBool LLVMIsFunctionVarArg(LLVMTypeRef FunctionTy);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000402LLVMTypeRef LLVMGetReturnType(LLVMTypeRef FunctionTy);
403unsigned LLVMCountParamTypes(LLVMTypeRef FunctionTy);
404void LLVMGetParamTypes(LLVMTypeRef FunctionTy, LLVMTypeRef *Dest);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000405
406/* Operations on struct types */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000407LLVMTypeRef LLVMStructTypeInContext(LLVMContextRef C, LLVMTypeRef *ElementTypes,
Chris Lattner25963c62010-01-09 22:27:07 +0000408 unsigned ElementCount, LLVMBool Packed);
Gordon Henriksened7beaa2007-10-06 16:05:20 +0000409LLVMTypeRef LLVMStructType(LLVMTypeRef *ElementTypes, unsigned ElementCount,
Chris Lattner25963c62010-01-09 22:27:07 +0000410 LLVMBool Packed);
Chris Lattnere71ccde2011-07-14 05:53:17 +0000411LLVMTypeRef LLVMStructCreateNamed(LLVMContextRef C, const char *Name);
Torok Edwin0d5f6ae2011-10-06 12:12:50 +0000412const char *LLVMGetStructName(LLVMTypeRef Ty);
Chris Lattnere71ccde2011-07-14 05:53:17 +0000413void LLVMStructSetBody(LLVMTypeRef StructTy, LLVMTypeRef *ElementTypes,
414 unsigned ElementCount, LLVMBool Packed);
415
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000416unsigned LLVMCountStructElementTypes(LLVMTypeRef StructTy);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000417void LLVMGetStructElementTypes(LLVMTypeRef StructTy, LLVMTypeRef *Dest);
Chris Lattner25963c62010-01-09 22:27:07 +0000418LLVMBool LLVMIsPackedStruct(LLVMTypeRef StructTy);
Chris Lattner17cf05b2011-07-14 16:20:28 +0000419LLVMBool LLVMIsOpaqueStruct(LLVMTypeRef StructTy);
420
421LLVMTypeRef LLVMGetTypeByName(LLVMModuleRef M, const char *Name);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000422
423/* Operations on array, pointer, and vector types (sequence types) */
Gordon Henriksened7beaa2007-10-06 16:05:20 +0000424LLVMTypeRef LLVMArrayType(LLVMTypeRef ElementType, unsigned ElementCount);
Gordon Henriksen5a3fe032007-12-17 16:08:32 +0000425LLVMTypeRef LLVMPointerType(LLVMTypeRef ElementType, unsigned AddressSpace);
Gordon Henriksened7beaa2007-10-06 16:05:20 +0000426LLVMTypeRef LLVMVectorType(LLVMTypeRef ElementType, unsigned ElementCount);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000427
428LLVMTypeRef LLVMGetElementType(LLVMTypeRef Ty);
429unsigned LLVMGetArrayLength(LLVMTypeRef ArrayTy);
Gordon Henriksen5a3fe032007-12-17 16:08:32 +0000430unsigned LLVMGetPointerAddressSpace(LLVMTypeRef PointerTy);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000431unsigned LLVMGetVectorSize(LLVMTypeRef VectorTy);
432
433/* Operations on other types */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000434LLVMTypeRef LLVMVoidTypeInContext(LLVMContextRef C);
435LLVMTypeRef LLVMLabelTypeInContext(LLVMContextRef C);
Dale Johannesen95b67af2010-09-10 21:58:02 +0000436LLVMTypeRef LLVMX86MMXTypeInContext(LLVMContextRef C);
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000437
Gordon Henriksena735a9c2008-05-04 12:55:34 +0000438LLVMTypeRef LLVMVoidType(void);
439LLVMTypeRef LLVMLabelType(void);
Dale Johannesen95b67af2010-09-10 21:58:02 +0000440LLVMTypeRef LLVMX86MMXType(void);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000441
Gordon Henriksen76a03742007-09-18 03:18:57 +0000442/*===-- Values ------------------------------------------------------------===*/
443
444/* The bulk of LLVM's object model consists of values, which comprise a very
445 * rich type hierarchy.
Gordon Henriksen76a03742007-09-18 03:18:57 +0000446 */
447
Gordon Henriksen29e38942008-12-19 18:39:45 +0000448#define LLVM_FOR_EACH_VALUE_SUBCLASS(macro) \
449 macro(Argument) \
450 macro(BasicBlock) \
451 macro(InlineAsm) \
452 macro(User) \
453 macro(Constant) \
454 macro(ConstantAggregateZero) \
455 macro(ConstantArray) \
456 macro(ConstantExpr) \
457 macro(ConstantFP) \
458 macro(ConstantInt) \
459 macro(ConstantPointerNull) \
460 macro(ConstantStruct) \
461 macro(ConstantVector) \
462 macro(GlobalValue) \
463 macro(Function) \
464 macro(GlobalAlias) \
465 macro(GlobalVariable) \
466 macro(UndefValue) \
467 macro(Instruction) \
468 macro(BinaryOperator) \
469 macro(CallInst) \
470 macro(IntrinsicInst) \
471 macro(DbgInfoIntrinsic) \
472 macro(DbgDeclareInst) \
Gordon Henriksen29e38942008-12-19 18:39:45 +0000473 macro(EHSelectorInst) \
474 macro(MemIntrinsic) \
475 macro(MemCpyInst) \
476 macro(MemMoveInst) \
477 macro(MemSetInst) \
478 macro(CmpInst) \
479 macro(FCmpInst) \
480 macro(ICmpInst) \
Gordon Henriksen29e38942008-12-19 18:39:45 +0000481 macro(ExtractElementInst) \
482 macro(GetElementPtrInst) \
483 macro(InsertElementInst) \
484 macro(InsertValueInst) \
Bill Wendlingfae14752011-08-12 20:24:12 +0000485 macro(LandingPadInst) \
Gordon Henriksen29e38942008-12-19 18:39:45 +0000486 macro(PHINode) \
487 macro(SelectInst) \
488 macro(ShuffleVectorInst) \
489 macro(StoreInst) \
490 macro(TerminatorInst) \
491 macro(BranchInst) \
492 macro(InvokeInst) \
493 macro(ReturnInst) \
494 macro(SwitchInst) \
495 macro(UnreachableInst) \
Bill Wendlingf891bf82011-07-31 06:30:59 +0000496 macro(ResumeInst) \
Gordon Henriksen29e38942008-12-19 18:39:45 +0000497 macro(UnaryInstruction) \
Victor Hernandez8acf2952009-10-23 21:09:37 +0000498 macro(AllocaInst) \
Gordon Henriksen29e38942008-12-19 18:39:45 +0000499 macro(CastInst) \
Gordon Henriksen05a868f2008-12-19 18:51:17 +0000500 macro(BitCastInst) \
501 macro(FPExtInst) \
502 macro(FPToSIInst) \
503 macro(FPToUIInst) \
504 macro(FPTruncInst) \
505 macro(IntToPtrInst) \
506 macro(PtrToIntInst) \
507 macro(SExtInst) \
508 macro(SIToFPInst) \
509 macro(TruncInst) \
510 macro(UIToFPInst) \
511 macro(ZExtInst) \
512 macro(ExtractValueInst) \
Gordon Henriksen05a868f2008-12-19 18:51:17 +0000513 macro(LoadInst) \
514 macro(VAArgInst)
Gordon Henriksen29e38942008-12-19 18:39:45 +0000515
Gordon Henriksen76a03742007-09-18 03:18:57 +0000516/* Operations on all values */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000517LLVMTypeRef LLVMTypeOf(LLVMValueRef Val);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000518const char *LLVMGetValueName(LLVMValueRef Val);
519void LLVMSetValueName(LLVMValueRef Val, const char *Name);
Gordon Henriksen1d0d24c2007-10-06 00:08:49 +0000520void LLVMDumpValue(LLVMValueRef Val);
Chris Lattner40cf28d2009-10-12 04:01:02 +0000521void LLVMReplaceAllUsesWith(LLVMValueRef OldVal, LLVMValueRef NewVal);
Erick Tryzelaard8531fa2010-02-28 09:45:59 +0000522int LLVMHasMetadata(LLVMValueRef Val);
523LLVMValueRef LLVMGetMetadata(LLVMValueRef Val, unsigned KindID);
524void LLVMSetMetadata(LLVMValueRef Val, unsigned KindID, LLVMValueRef Node);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000525
Gordon Henriksen29e38942008-12-19 18:39:45 +0000526/* Conversion functions. Return the input value if it is an instance of the
527 specified class, otherwise NULL. See llvm::dyn_cast_or_null<>. */
528#define LLVM_DECLARE_VALUE_CAST(name) \
529 LLVMValueRef LLVMIsA##name(LLVMValueRef Val);
530LLVM_FOR_EACH_VALUE_SUBCLASS(LLVM_DECLARE_VALUE_CAST)
531
Chris Lattner40cf28d2009-10-12 04:01:02 +0000532/* Operations on Uses */
Erick Tryzelaar9f9857e2010-03-02 20:32:28 +0000533LLVMUseRef LLVMGetFirstUse(LLVMValueRef Val);
534LLVMUseRef LLVMGetNextUse(LLVMUseRef U);
535LLVMValueRef LLVMGetUser(LLVMUseRef U);
536LLVMValueRef LLVMGetUsedValue(LLVMUseRef U);
Chris Lattner40cf28d2009-10-12 04:01:02 +0000537
538/* Operations on Users */
539LLVMValueRef LLVMGetOperand(LLVMValueRef Val, unsigned Index);
Erick Tryzelaarb4d48702010-08-20 14:51:22 +0000540void LLVMSetOperand(LLVMValueRef User, unsigned Index, LLVMValueRef Val);
541int LLVMGetNumOperands(LLVMValueRef Val);
Chris Lattner40cf28d2009-10-12 04:01:02 +0000542
Gordon Henriksen76a03742007-09-18 03:18:57 +0000543/* Operations on constants of any type */
Gordon Henriksen1046c732007-10-06 15:11:06 +0000544LLVMValueRef LLVMConstNull(LLVMTypeRef Ty); /* all zeroes */
545LLVMValueRef LLVMConstAllOnes(LLVMTypeRef Ty); /* only for int/vector */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000546LLVMValueRef LLVMGetUndef(LLVMTypeRef Ty);
Chris Lattner25963c62010-01-09 22:27:07 +0000547LLVMBool LLVMIsConstant(LLVMValueRef Val);
548LLVMBool LLVMIsNull(LLVMValueRef Val);
549LLVMBool LLVMIsUndef(LLVMValueRef Val);
Chris Lattner7f318242009-07-06 17:29:59 +0000550LLVMValueRef LLVMConstPointerNull(LLVMTypeRef Ty);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000551
Erick Tryzelaard8531fa2010-02-28 09:45:59 +0000552/* Operations on metadata */
553LLVMValueRef LLVMMDStringInContext(LLVMContextRef C, const char *Str,
554 unsigned SLen);
555LLVMValueRef LLVMMDString(const char *Str, unsigned SLen);
556LLVMValueRef LLVMMDNodeInContext(LLVMContextRef C, LLVMValueRef *Vals,
557 unsigned Count);
558LLVMValueRef LLVMMDNode(LLVMValueRef *Vals, unsigned Count);
Torok Edwinfec812e2011-10-06 12:13:11 +0000559const char *LLVMGetMDString(LLVMValueRef V, unsigned* Len);
560int LLVMGetMDNodeNumOperands(LLVMValueRef V);
561LLVMValueRef *LLVMGetMDNodeOperand(LLVMValueRef V, unsigned i);
562unsigned LLVMGetNamedMetadataNumOperands(LLVMModuleRef M, const char* name);
563void LLVMGetNamedMetadataOperands(LLVMModuleRef M, const char* name, LLVMValueRef *Dest);
Erick Tryzelaard8531fa2010-02-28 09:45:59 +0000564
Gordon Henriksen76a03742007-09-18 03:18:57 +0000565/* Operations on scalar constants */
Gordon Henriksen1046c732007-10-06 15:11:06 +0000566LLVMValueRef LLVMConstInt(LLVMTypeRef IntTy, unsigned long long N,
Chris Lattner25963c62010-01-09 22:27:07 +0000567 LLVMBool SignExtend);
Chris Lattner4329e072010-11-23 02:47:22 +0000568LLVMValueRef LLVMConstIntOfArbitraryPrecision(LLVMTypeRef IntTy,
569 unsigned NumWords,
570 const uint64_t Words[]);
Erick Tryzelaardd991352009-08-16 23:36:46 +0000571LLVMValueRef LLVMConstIntOfString(LLVMTypeRef IntTy, const char *Text,
572 uint8_t Radix);
573LLVMValueRef LLVMConstIntOfStringAndSize(LLVMTypeRef IntTy, const char *Text,
574 unsigned SLen, uint8_t Radix);
Gordon Henriksen1046c732007-10-06 15:11:06 +0000575LLVMValueRef LLVMConstReal(LLVMTypeRef RealTy, double N);
Gordon Henriksen931e1212008-02-02 01:07:50 +0000576LLVMValueRef LLVMConstRealOfString(LLVMTypeRef RealTy, const char *Text);
Erick Tryzelaardd991352009-08-16 23:36:46 +0000577LLVMValueRef LLVMConstRealOfStringAndSize(LLVMTypeRef RealTy, const char *Text,
578 unsigned SLen);
Chris Lattner40cf28d2009-10-12 04:01:02 +0000579unsigned long long LLVMConstIntGetZExtValue(LLVMValueRef ConstantVal);
580long long LLVMConstIntGetSExtValue(LLVMValueRef ConstantVal);
Erick Tryzelaardd991352009-08-16 23:36:46 +0000581
Gordon Henriksen76a03742007-09-18 03:18:57 +0000582
583/* Operations on composite constants */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000584LLVMValueRef LLVMConstStringInContext(LLVMContextRef C, const char *Str,
Chris Lattner25963c62010-01-09 22:27:07 +0000585 unsigned Length, LLVMBool DontNullTerminate);
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000586LLVMValueRef LLVMConstStructInContext(LLVMContextRef C,
587 LLVMValueRef *ConstantVals,
Chris Lattner25963c62010-01-09 22:27:07 +0000588 unsigned Count, LLVMBool Packed);
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000589
Gordon Henriksen1046c732007-10-06 15:11:06 +0000590LLVMValueRef LLVMConstString(const char *Str, unsigned Length,
Chris Lattner25963c62010-01-09 22:27:07 +0000591 LLVMBool DontNullTerminate);
Gordon Henriksen2ad5aef2008-04-25 03:21:19 +0000592LLVMValueRef LLVMConstArray(LLVMTypeRef ElementTy,
Gordon Henriksen1046c732007-10-06 15:11:06 +0000593 LLVMValueRef *ConstantVals, unsigned Length);
594LLVMValueRef LLVMConstStruct(LLVMValueRef *ConstantVals, unsigned Count,
Chris Lattner25963c62010-01-09 22:27:07 +0000595 LLVMBool Packed);
Rafael Espindola784ad242011-07-14 19:09:08 +0000596LLVMValueRef LLVMConstNamedStruct(LLVMTypeRef StructTy,
597 LLVMValueRef *ConstantVals,
598 unsigned Count);
Gordon Henriksen1046c732007-10-06 15:11:06 +0000599LLVMValueRef LLVMConstVector(LLVMValueRef *ScalarConstantVals, unsigned Size);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000600
Gordon Henriksen7ce31762007-10-06 14:29:36 +0000601/* Constant expressions */
Chris Lattner40cf28d2009-10-12 04:01:02 +0000602LLVMOpcode LLVMGetConstOpcode(LLVMValueRef ConstantVal);
Erick Tryzelaarfd529d72009-08-19 08:36:49 +0000603LLVMValueRef LLVMAlignOf(LLVMTypeRef Ty);
Gordon Henriksen7ce31762007-10-06 14:29:36 +0000604LLVMValueRef LLVMSizeOf(LLVMTypeRef Ty);
605LLVMValueRef LLVMConstNeg(LLVMValueRef ConstantVal);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +0000606LLVMValueRef LLVMConstNSWNeg(LLVMValueRef ConstantVal);
607LLVMValueRef LLVMConstNUWNeg(LLVMValueRef ConstantVal);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +0000608LLVMValueRef LLVMConstFNeg(LLVMValueRef ConstantVal);
Gordon Henriksen7ce31762007-10-06 14:29:36 +0000609LLVMValueRef LLVMConstNot(LLVMValueRef ConstantVal);
610LLVMValueRef LLVMConstAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Dan Gohmane4ca02d2009-09-03 23:34:49 +0000611LLVMValueRef LLVMConstNSWAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +0000612LLVMValueRef LLVMConstNUWAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +0000613LLVMValueRef LLVMConstFAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Gordon Henriksen7ce31762007-10-06 14:29:36 +0000614LLVMValueRef LLVMConstSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +0000615LLVMValueRef LLVMConstNSWSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
616LLVMValueRef LLVMConstNUWSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +0000617LLVMValueRef LLVMConstFSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Gordon Henriksen7ce31762007-10-06 14:29:36 +0000618LLVMValueRef LLVMConstMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +0000619LLVMValueRef LLVMConstNSWMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
620LLVMValueRef LLVMConstNUWMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +0000621LLVMValueRef LLVMConstFMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Gordon Henriksen7ce31762007-10-06 14:29:36 +0000622LLVMValueRef LLVMConstUDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
623LLVMValueRef LLVMConstSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Dan Gohmane4ca02d2009-09-03 23:34:49 +0000624LLVMValueRef LLVMConstExactSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Gordon Henriksen7ce31762007-10-06 14:29:36 +0000625LLVMValueRef LLVMConstFDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
626LLVMValueRef LLVMConstURem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
627LLVMValueRef LLVMConstSRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
628LLVMValueRef LLVMConstFRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
629LLVMValueRef LLVMConstAnd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
630LLVMValueRef LLVMConstOr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
631LLVMValueRef LLVMConstXor(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
632LLVMValueRef LLVMConstICmp(LLVMIntPredicate Predicate,
633 LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
634LLVMValueRef LLVMConstFCmp(LLVMRealPredicate Predicate,
635 LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
636LLVMValueRef LLVMConstShl(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
637LLVMValueRef LLVMConstLShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
638LLVMValueRef LLVMConstAShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
639LLVMValueRef LLVMConstGEP(LLVMValueRef ConstantVal,
640 LLVMValueRef *ConstantIndices, unsigned NumIndices);
Dan Gohmane4ca02d2009-09-03 23:34:49 +0000641LLVMValueRef LLVMConstInBoundsGEP(LLVMValueRef ConstantVal,
642 LLVMValueRef *ConstantIndices,
643 unsigned NumIndices);
Gordon Henriksen7ce31762007-10-06 14:29:36 +0000644LLVMValueRef LLVMConstTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
645LLVMValueRef LLVMConstSExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
646LLVMValueRef LLVMConstZExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
647LLVMValueRef LLVMConstFPTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
648LLVMValueRef LLVMConstFPExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
649LLVMValueRef LLVMConstUIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
650LLVMValueRef LLVMConstSIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
651LLVMValueRef LLVMConstFPToUI(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
652LLVMValueRef LLVMConstFPToSI(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
653LLVMValueRef LLVMConstPtrToInt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
654LLVMValueRef LLVMConstIntToPtr(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
655LLVMValueRef LLVMConstBitCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +0000656LLVMValueRef LLVMConstZExtOrBitCast(LLVMValueRef ConstantVal,
657 LLVMTypeRef ToType);
658LLVMValueRef LLVMConstSExtOrBitCast(LLVMValueRef ConstantVal,
659 LLVMTypeRef ToType);
660LLVMValueRef LLVMConstTruncOrBitCast(LLVMValueRef ConstantVal,
661 LLVMTypeRef ToType);
662LLVMValueRef LLVMConstPointerCast(LLVMValueRef ConstantVal,
663 LLVMTypeRef ToType);
664LLVMValueRef LLVMConstIntCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType,
Chris Lattner25963c62010-01-09 22:27:07 +0000665 LLVMBool isSigned);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +0000666LLVMValueRef LLVMConstFPCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
Gordon Henriksen7ce31762007-10-06 14:29:36 +0000667LLVMValueRef LLVMConstSelect(LLVMValueRef ConstantCondition,
668 LLVMValueRef ConstantIfTrue,
669 LLVMValueRef ConstantIfFalse);
670LLVMValueRef LLVMConstExtractElement(LLVMValueRef VectorConstant,
671 LLVMValueRef IndexConstant);
672LLVMValueRef LLVMConstInsertElement(LLVMValueRef VectorConstant,
673 LLVMValueRef ElementValueConstant,
674 LLVMValueRef IndexConstant);
675LLVMValueRef LLVMConstShuffleVector(LLVMValueRef VectorAConstant,
676 LLVMValueRef VectorBConstant,
677 LLVMValueRef MaskConstant);
Dan Gohmand5104a52008-11-03 22:55:43 +0000678LLVMValueRef LLVMConstExtractValue(LLVMValueRef AggConstant, unsigned *IdxList,
679 unsigned NumIdx);
680LLVMValueRef LLVMConstInsertValue(LLVMValueRef AggConstant,
681 LLVMValueRef ElementValueConstant,
682 unsigned *IdxList, unsigned NumIdx);
Chris Lattner25963c62010-01-09 22:27:07 +0000683LLVMValueRef LLVMConstInlineAsm(LLVMTypeRef Ty,
Chris Lattner3d1f5522008-12-17 21:39:50 +0000684 const char *AsmString, const char *Constraints,
Chris Lattner25963c62010-01-09 22:27:07 +0000685 LLVMBool HasSideEffects, LLVMBool IsAlignStack);
Erick Tryzelaar0fb26ef2010-02-28 09:46:06 +0000686LLVMValueRef LLVMBlockAddress(LLVMValueRef F, LLVMBasicBlockRef BB);
Gordon Henriksen7ce31762007-10-06 14:29:36 +0000687
Gordon Henriksen76a03742007-09-18 03:18:57 +0000688/* Operations on global variables, functions, and aliases (globals) */
Gordon Henriksen265f7802008-03-19 01:11:35 +0000689LLVMModuleRef LLVMGetGlobalParent(LLVMValueRef Global);
Chris Lattner25963c62010-01-09 22:27:07 +0000690LLVMBool LLVMIsDeclaration(LLVMValueRef Global);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000691LLVMLinkage LLVMGetLinkage(LLVMValueRef Global);
692void LLVMSetLinkage(LLVMValueRef Global, LLVMLinkage Linkage);
693const char *LLVMGetSection(LLVMValueRef Global);
694void LLVMSetSection(LLVMValueRef Global, const char *Section);
695LLVMVisibility LLVMGetVisibility(LLVMValueRef Global);
696void LLVMSetVisibility(LLVMValueRef Global, LLVMVisibility Viz);
697unsigned LLVMGetAlignment(LLVMValueRef Global);
698void LLVMSetAlignment(LLVMValueRef Global, unsigned Bytes);
699
700/* Operations on global variables */
701LLVMValueRef LLVMAddGlobal(LLVMModuleRef M, LLVMTypeRef Ty, const char *Name);
Erick Tryzelaar06894b32010-02-28 09:46:13 +0000702LLVMValueRef LLVMAddGlobalInAddressSpace(LLVMModuleRef M, LLVMTypeRef Ty,
703 const char *Name,
704 unsigned AddressSpace);
Gordon Henriksen783f7bb2007-10-08 03:45:09 +0000705LLVMValueRef LLVMGetNamedGlobal(LLVMModuleRef M, const char *Name);
Gordon Henriksen07a45f42008-03-23 22:21:29 +0000706LLVMValueRef LLVMGetFirstGlobal(LLVMModuleRef M);
707LLVMValueRef LLVMGetLastGlobal(LLVMModuleRef M);
708LLVMValueRef LLVMGetNextGlobal(LLVMValueRef GlobalVar);
709LLVMValueRef LLVMGetPreviousGlobal(LLVMValueRef GlobalVar);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000710void LLVMDeleteGlobal(LLVMValueRef GlobalVar);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000711LLVMValueRef LLVMGetInitializer(LLVMValueRef GlobalVar);
712void LLVMSetInitializer(LLVMValueRef GlobalVar, LLVMValueRef ConstantVal);
Chris Lattner25963c62010-01-09 22:27:07 +0000713LLVMBool LLVMIsThreadLocal(LLVMValueRef GlobalVar);
714void LLVMSetThreadLocal(LLVMValueRef GlobalVar, LLVMBool IsThreadLocal);
715LLVMBool LLVMIsGlobalConstant(LLVMValueRef GlobalVar);
716void LLVMSetGlobalConstant(LLVMValueRef GlobalVar, LLVMBool IsConstant);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000717
Chris Lattner3d1f5522008-12-17 21:39:50 +0000718/* Operations on aliases */
719LLVMValueRef LLVMAddAlias(LLVMModuleRef M, LLVMTypeRef Ty, LLVMValueRef Aliasee,
720 const char *Name);
721
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000722/* Operations on functions */
723LLVMValueRef LLVMAddFunction(LLVMModuleRef M, const char *Name,
724 LLVMTypeRef FunctionTy);
Gordon Henriksen783f7bb2007-10-08 03:45:09 +0000725LLVMValueRef LLVMGetNamedFunction(LLVMModuleRef M, const char *Name);
Gordon Henriksen054817c2008-03-19 03:47:18 +0000726LLVMValueRef LLVMGetFirstFunction(LLVMModuleRef M);
727LLVMValueRef LLVMGetLastFunction(LLVMModuleRef M);
728LLVMValueRef LLVMGetNextFunction(LLVMValueRef Fn);
729LLVMValueRef LLVMGetPreviousFunction(LLVMValueRef Fn);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000730void LLVMDeleteFunction(LLVMValueRef Fn);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000731unsigned LLVMGetIntrinsicID(LLVMValueRef Fn);
732unsigned LLVMGetFunctionCallConv(LLVMValueRef Fn);
733void LLVMSetFunctionCallConv(LLVMValueRef Fn, unsigned CC);
Gordon Henriksend930f912008-08-17 18:44:35 +0000734const char *LLVMGetGC(LLVMValueRef Fn);
735void LLVMSetGC(LLVMValueRef Fn, const char *Name);
Duncan Sands7374a012009-05-06 12:21:17 +0000736void LLVMAddFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA);
Chris Lattner40cf28d2009-10-12 04:01:02 +0000737LLVMAttribute LLVMGetFunctionAttr(LLVMValueRef Fn);
Duncan Sands7374a012009-05-06 12:21:17 +0000738void LLVMRemoveFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000739
Gordon Henriksen265f7802008-03-19 01:11:35 +0000740/* Operations on parameters */
741unsigned LLVMCountParams(LLVMValueRef Fn);
742void LLVMGetParams(LLVMValueRef Fn, LLVMValueRef *Params);
743LLVMValueRef LLVMGetParam(LLVMValueRef Fn, unsigned Index);
744LLVMValueRef LLVMGetParamParent(LLVMValueRef Inst);
Gordon Henriksen07a45f42008-03-23 22:21:29 +0000745LLVMValueRef LLVMGetFirstParam(LLVMValueRef Fn);
746LLVMValueRef LLVMGetLastParam(LLVMValueRef Fn);
747LLVMValueRef LLVMGetNextParam(LLVMValueRef Arg);
748LLVMValueRef LLVMGetPreviousParam(LLVMValueRef Arg);
Devang Patel4c758ea2008-09-25 21:00:45 +0000749void LLVMAddAttribute(LLVMValueRef Arg, LLVMAttribute PA);
750void LLVMRemoveAttribute(LLVMValueRef Arg, LLVMAttribute PA);
Chris Lattner40cf28d2009-10-12 04:01:02 +0000751LLVMAttribute LLVMGetAttribute(LLVMValueRef Arg);
Gordon Henriksen2d9cc212008-04-28 17:37:06 +0000752void LLVMSetParamAlignment(LLVMValueRef Arg, unsigned align);
Gordon Henriksen265f7802008-03-19 01:11:35 +0000753
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000754/* Operations on basic blocks */
Gordon Henriksen07a45f42008-03-23 22:21:29 +0000755LLVMValueRef LLVMBasicBlockAsValue(LLVMBasicBlockRef BB);
Chris Lattner25963c62010-01-09 22:27:07 +0000756LLVMBool LLVMValueIsBasicBlock(LLVMValueRef Val);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000757LLVMBasicBlockRef LLVMValueAsBasicBlock(LLVMValueRef Val);
Gordon Henriksen07a45f42008-03-23 22:21:29 +0000758LLVMValueRef LLVMGetBasicBlockParent(LLVMBasicBlockRef BB);
Nate Begeman43c322b2011-08-23 20:27:46 +0000759LLVMValueRef LLVMGetBasicBlockTerminator(LLVMBasicBlockRef BB);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000760unsigned LLVMCountBasicBlocks(LLVMValueRef Fn);
761void LLVMGetBasicBlocks(LLVMValueRef Fn, LLVMBasicBlockRef *BasicBlocks);
Gordon Henriksen054817c2008-03-19 03:47:18 +0000762LLVMBasicBlockRef LLVMGetFirstBasicBlock(LLVMValueRef Fn);
763LLVMBasicBlockRef LLVMGetLastBasicBlock(LLVMValueRef Fn);
764LLVMBasicBlockRef LLVMGetNextBasicBlock(LLVMBasicBlockRef BB);
765LLVMBasicBlockRef LLVMGetPreviousBasicBlock(LLVMBasicBlockRef BB);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000766LLVMBasicBlockRef LLVMGetEntryBasicBlock(LLVMValueRef Fn);
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000767
768LLVMBasicBlockRef LLVMAppendBasicBlockInContext(LLVMContextRef C,
769 LLVMValueRef Fn,
770 const char *Name);
771LLVMBasicBlockRef LLVMInsertBasicBlockInContext(LLVMContextRef C,
772 LLVMBasicBlockRef BB,
773 const char *Name);
774
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000775LLVMBasicBlockRef LLVMAppendBasicBlock(LLVMValueRef Fn, const char *Name);
776LLVMBasicBlockRef LLVMInsertBasicBlock(LLVMBasicBlockRef InsertBeforeBB,
777 const char *Name);
778void LLVMDeleteBasicBlock(LLVMBasicBlockRef BB);
Nate Begeman43c322b2011-08-23 20:27:46 +0000779void LLVMRemoveBasicBlockFromParent(LLVMBasicBlockRef BB);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000780
Duncan Sandsb1d61aa2010-07-19 15:31:07 +0000781void LLVMMoveBasicBlockBefore(LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos);
782void LLVMMoveBasicBlockAfter(LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos);
783
Gordon Henriksen054817c2008-03-19 03:47:18 +0000784LLVMValueRef LLVMGetFirstInstruction(LLVMBasicBlockRef BB);
785LLVMValueRef LLVMGetLastInstruction(LLVMBasicBlockRef BB);
Nate Begeman43c322b2011-08-23 20:27:46 +0000786
787/* Operations on instructions */
788LLVMBasicBlockRef LLVMGetInstructionParent(LLVMValueRef Inst);
Gordon Henriksen054817c2008-03-19 03:47:18 +0000789LLVMValueRef LLVMGetNextInstruction(LLVMValueRef Inst);
790LLVMValueRef LLVMGetPreviousInstruction(LLVMValueRef Inst);
Devang Pateldbebc6f2011-10-03 20:59:18 +0000791void LLVMInstructionEraseFromParent(LLVMValueRef Inst);
Torok Edwinab6158e2011-10-14 20:37:49 +0000792LLVMOpcode LLVMGetInstructionOpcode(LLVMValueRef Inst);
Torok Edwin60c40de2011-10-06 12:13:20 +0000793LLVMIntPredicate LLVMGetICmpPredicate(LLVMValueRef Inst);
Gordon Henriksen265f7802008-03-19 01:11:35 +0000794
Gordon Henriksen1158c532007-12-29 20:45:00 +0000795/* Operations on call sites */
796void LLVMSetInstructionCallConv(LLVMValueRef Instr, unsigned CC);
797unsigned LLVMGetInstructionCallConv(LLVMValueRef Instr);
Devang Patel4c758ea2008-09-25 21:00:45 +0000798void LLVMAddInstrAttribute(LLVMValueRef Instr, unsigned index, LLVMAttribute);
799void LLVMRemoveInstrAttribute(LLVMValueRef Instr, unsigned index,
800 LLVMAttribute);
Gordon Henriksen2d9cc212008-04-28 17:37:06 +0000801void LLVMSetInstrParamAlignment(LLVMValueRef Instr, unsigned index,
802 unsigned align);
Gordon Henriksen1158c532007-12-29 20:45:00 +0000803
Gordon Henrikseneeb65372008-08-30 16:34:54 +0000804/* Operations on call instructions (only) */
Chris Lattner25963c62010-01-09 22:27:07 +0000805LLVMBool LLVMIsTailCall(LLVMValueRef CallInst);
806void LLVMSetTailCall(LLVMValueRef CallInst, LLVMBool IsTailCall);
Gordon Henrikseneeb65372008-08-30 16:34:54 +0000807
Nate Begeman43c322b2011-08-23 20:27:46 +0000808/* Operations on switch instructions (only) */
809LLVMBasicBlockRef LLVMGetSwitchDefaultDest(LLVMValueRef SwitchInstr);
810
Gordon Henriksen44dd8fb2007-10-08 18:14:39 +0000811/* Operations on phi nodes */
812void LLVMAddIncoming(LLVMValueRef PhiNode, LLVMValueRef *IncomingValues,
813 LLVMBasicBlockRef *IncomingBlocks, unsigned Count);
814unsigned LLVMCountIncoming(LLVMValueRef PhiNode);
815LLVMValueRef LLVMGetIncomingValue(LLVMValueRef PhiNode, unsigned Index);
816LLVMBasicBlockRef LLVMGetIncomingBlock(LLVMValueRef PhiNode, unsigned Index);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000817
818/*===-- Instruction builders ----------------------------------------------===*/
819
820/* An instruction builder represents a point within a basic block, and is the
821 * exclusive means of building instructions using the C interface.
822 */
823
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000824LLVMBuilderRef LLVMCreateBuilderInContext(LLVMContextRef C);
Gordon Henriksena735a9c2008-05-04 12:55:34 +0000825LLVMBuilderRef LLVMCreateBuilder(void);
Gordon Henriksen054817c2008-03-19 03:47:18 +0000826void LLVMPositionBuilder(LLVMBuilderRef Builder, LLVMBasicBlockRef Block,
827 LLVMValueRef Instr);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000828void LLVMPositionBuilderBefore(LLVMBuilderRef Builder, LLVMValueRef Instr);
829void LLVMPositionBuilderAtEnd(LLVMBuilderRef Builder, LLVMBasicBlockRef Block);
Gordon Henriksen265f7802008-03-19 01:11:35 +0000830LLVMBasicBlockRef LLVMGetInsertBlock(LLVMBuilderRef Builder);
Chris Lattner3d1f5522008-12-17 21:39:50 +0000831void LLVMClearInsertionPosition(LLVMBuilderRef Builder);
832void LLVMInsertIntoBuilder(LLVMBuilderRef Builder, LLVMValueRef Instr);
Erick Tryzelaar9813bea2009-08-16 02:20:57 +0000833void LLVMInsertIntoBuilderWithName(LLVMBuilderRef Builder, LLVMValueRef Instr,
834 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000835void LLVMDisposeBuilder(LLVMBuilderRef Builder);
836
Erick Tryzelaard8531fa2010-02-28 09:45:59 +0000837/* Metadata */
838void LLVMSetCurrentDebugLocation(LLVMBuilderRef Builder, LLVMValueRef L);
839LLVMValueRef LLVMGetCurrentDebugLocation(LLVMBuilderRef Builder);
840void LLVMSetInstDebugLocation(LLVMBuilderRef Builder, LLVMValueRef Inst);
841
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000842/* Terminators */
843LLVMValueRef LLVMBuildRetVoid(LLVMBuilderRef);
844LLVMValueRef LLVMBuildRet(LLVMBuilderRef, LLVMValueRef V);
Erick Tryzelaarfd529d72009-08-19 08:36:49 +0000845LLVMValueRef LLVMBuildAggregateRet(LLVMBuilderRef, LLVMValueRef *RetVals,
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +0000846 unsigned N);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000847LLVMValueRef LLVMBuildBr(LLVMBuilderRef, LLVMBasicBlockRef Dest);
848LLVMValueRef LLVMBuildCondBr(LLVMBuilderRef, LLVMValueRef If,
849 LLVMBasicBlockRef Then, LLVMBasicBlockRef Else);
850LLVMValueRef LLVMBuildSwitch(LLVMBuilderRef, LLVMValueRef V,
851 LLVMBasicBlockRef Else, unsigned NumCases);
Erick Tryzelaar0fb26ef2010-02-28 09:46:06 +0000852LLVMValueRef LLVMBuildIndirectBr(LLVMBuilderRef B, LLVMValueRef Addr,
853 unsigned NumDests);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000854LLVMValueRef LLVMBuildInvoke(LLVMBuilderRef, LLVMValueRef Fn,
855 LLVMValueRef *Args, unsigned NumArgs,
856 LLVMBasicBlockRef Then, LLVMBasicBlockRef Catch,
857 const char *Name);
Benjamin Kramer5a6568832011-08-19 01:36:54 +0000858LLVMValueRef LLVMBuildLandingPad(LLVMBuilderRef B, LLVMTypeRef Ty,
859 LLVMValueRef PersFn, unsigned NumClauses,
860 const char *Name);
Bill Wendlingf891bf82011-07-31 06:30:59 +0000861LLVMValueRef LLVMBuildResume(LLVMBuilderRef B, LLVMValueRef Exn);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000862LLVMValueRef LLVMBuildUnreachable(LLVMBuilderRef);
863
Gordon Henriksen097102c2008-01-01 05:50:53 +0000864/* Add a case to the switch instruction */
865void LLVMAddCase(LLVMValueRef Switch, LLVMValueRef OnVal,
866 LLVMBasicBlockRef Dest);
867
Erick Tryzelaar0fb26ef2010-02-28 09:46:06 +0000868/* Add a destination to the indirectbr instruction */
869void LLVMAddDestination(LLVMValueRef IndirectBr, LLVMBasicBlockRef Dest);
870
Bill Wendlingfae14752011-08-12 20:24:12 +0000871/* Add a catch or filter clause to the landingpad instruction */
872void LLVMAddClause(LLVMValueRef LandingPad, LLVMValueRef ClauseVal);
873
874/* Set the 'cleanup' flag in the landingpad instruction */
875void LLVMSetCleanup(LLVMValueRef LandingPad, LLVMBool Val);
876
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000877/* Arithmetic */
878LLVMValueRef LLVMBuildAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
879 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +0000880LLVMValueRef LLVMBuildNSWAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
881 const char *Name);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +0000882LLVMValueRef LLVMBuildNUWAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
883 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +0000884LLVMValueRef LLVMBuildFAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
885 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000886LLVMValueRef LLVMBuildSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
887 const char *Name);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +0000888LLVMValueRef LLVMBuildNSWSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
889 const char *Name);
890LLVMValueRef LLVMBuildNUWSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
891 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +0000892LLVMValueRef LLVMBuildFSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
893 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000894LLVMValueRef LLVMBuildMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
895 const char *Name);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +0000896LLVMValueRef LLVMBuildNSWMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
897 const char *Name);
898LLVMValueRef LLVMBuildNUWMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
899 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +0000900LLVMValueRef LLVMBuildFMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
901 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000902LLVMValueRef LLVMBuildUDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
903 const char *Name);
904LLVMValueRef LLVMBuildSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
905 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +0000906LLVMValueRef LLVMBuildExactSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
907 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000908LLVMValueRef LLVMBuildFDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
909 const char *Name);
910LLVMValueRef LLVMBuildURem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
911 const char *Name);
912LLVMValueRef LLVMBuildSRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
913 const char *Name);
914LLVMValueRef LLVMBuildFRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
915 const char *Name);
916LLVMValueRef LLVMBuildShl(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
917 const char *Name);
918LLVMValueRef LLVMBuildLShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
919 const char *Name);
920LLVMValueRef LLVMBuildAShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
921 const char *Name);
922LLVMValueRef LLVMBuildAnd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
923 const char *Name);
924LLVMValueRef LLVMBuildOr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
925 const char *Name);
926LLVMValueRef LLVMBuildXor(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
927 const char *Name);
Erick Tryzelaar31831792010-02-28 05:51:27 +0000928LLVMValueRef LLVMBuildBinOp(LLVMBuilderRef B, LLVMOpcode Op,
929 LLVMValueRef LHS, LLVMValueRef RHS,
930 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000931LLVMValueRef LLVMBuildNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +0000932LLVMValueRef LLVMBuildNSWNeg(LLVMBuilderRef B, LLVMValueRef V,
933 const char *Name);
934LLVMValueRef LLVMBuildNUWNeg(LLVMBuilderRef B, LLVMValueRef V,
935 const char *Name);
Dan Gohmanf919bd62009-09-28 21:51:41 +0000936LLVMValueRef LLVMBuildFNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000937LLVMValueRef LLVMBuildNot(LLVMBuilderRef, LLVMValueRef V, const char *Name);
938
939/* Memory */
940LLVMValueRef LLVMBuildMalloc(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
941LLVMValueRef LLVMBuildArrayMalloc(LLVMBuilderRef, LLVMTypeRef Ty,
942 LLVMValueRef Val, const char *Name);
943LLVMValueRef LLVMBuildAlloca(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
944LLVMValueRef LLVMBuildArrayAlloca(LLVMBuilderRef, LLVMTypeRef Ty,
945 LLVMValueRef Val, const char *Name);
946LLVMValueRef LLVMBuildFree(LLVMBuilderRef, LLVMValueRef PointerVal);
947LLVMValueRef LLVMBuildLoad(LLVMBuilderRef, LLVMValueRef PointerVal,
948 const char *Name);
949LLVMValueRef LLVMBuildStore(LLVMBuilderRef, LLVMValueRef Val, LLVMValueRef Ptr);
950LLVMValueRef LLVMBuildGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
951 LLVMValueRef *Indices, unsigned NumIndices,
952 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +0000953LLVMValueRef LLVMBuildInBoundsGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
954 LLVMValueRef *Indices, unsigned NumIndices,
955 const char *Name);
956LLVMValueRef LLVMBuildStructGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
957 unsigned Idx, const char *Name);
958LLVMValueRef LLVMBuildGlobalString(LLVMBuilderRef B, const char *Str,
959 const char *Name);
960LLVMValueRef LLVMBuildGlobalStringPtr(LLVMBuilderRef B, const char *Str,
961 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000962
963/* Casts */
964LLVMValueRef LLVMBuildTrunc(LLVMBuilderRef, LLVMValueRef Val,
965 LLVMTypeRef DestTy, const char *Name);
966LLVMValueRef LLVMBuildZExt(LLVMBuilderRef, LLVMValueRef Val,
967 LLVMTypeRef DestTy, const char *Name);
968LLVMValueRef LLVMBuildSExt(LLVMBuilderRef, LLVMValueRef Val,
969 LLVMTypeRef DestTy, const char *Name);
970LLVMValueRef LLVMBuildFPToUI(LLVMBuilderRef, LLVMValueRef Val,
971 LLVMTypeRef DestTy, const char *Name);
972LLVMValueRef LLVMBuildFPToSI(LLVMBuilderRef, LLVMValueRef Val,
973 LLVMTypeRef DestTy, const char *Name);
974LLVMValueRef LLVMBuildUIToFP(LLVMBuilderRef, LLVMValueRef Val,
975 LLVMTypeRef DestTy, const char *Name);
976LLVMValueRef LLVMBuildSIToFP(LLVMBuilderRef, LLVMValueRef Val,
977 LLVMTypeRef DestTy, const char *Name);
978LLVMValueRef LLVMBuildFPTrunc(LLVMBuilderRef, LLVMValueRef Val,
979 LLVMTypeRef DestTy, const char *Name);
980LLVMValueRef LLVMBuildFPExt(LLVMBuilderRef, LLVMValueRef Val,
981 LLVMTypeRef DestTy, const char *Name);
982LLVMValueRef LLVMBuildPtrToInt(LLVMBuilderRef, LLVMValueRef Val,
983 LLVMTypeRef DestTy, const char *Name);
984LLVMValueRef LLVMBuildIntToPtr(LLVMBuilderRef, LLVMValueRef Val,
985 LLVMTypeRef DestTy, const char *Name);
986LLVMValueRef LLVMBuildBitCast(LLVMBuilderRef, LLVMValueRef Val,
987 LLVMTypeRef DestTy, const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +0000988LLVMValueRef LLVMBuildZExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
989 LLVMTypeRef DestTy, const char *Name);
990LLVMValueRef LLVMBuildSExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
991 LLVMTypeRef DestTy, const char *Name);
992LLVMValueRef LLVMBuildTruncOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
993 LLVMTypeRef DestTy, const char *Name);
Erick Tryzelaar31831792010-02-28 05:51:27 +0000994LLVMValueRef LLVMBuildCast(LLVMBuilderRef B, LLVMOpcode Op, LLVMValueRef Val,
995 LLVMTypeRef DestTy, const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +0000996LLVMValueRef LLVMBuildPointerCast(LLVMBuilderRef, LLVMValueRef Val,
997 LLVMTypeRef DestTy, const char *Name);
Duncan Sands9d786d72009-11-23 10:49:03 +0000998LLVMValueRef LLVMBuildIntCast(LLVMBuilderRef, LLVMValueRef Val, /*Signed cast!*/
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +0000999 LLVMTypeRef DestTy, const char *Name);
1000LLVMValueRef LLVMBuildFPCast(LLVMBuilderRef, LLVMValueRef Val,
1001 LLVMTypeRef DestTy, const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00001002
1003/* Comparisons */
1004LLVMValueRef LLVMBuildICmp(LLVMBuilderRef, LLVMIntPredicate Op,
1005 LLVMValueRef LHS, LLVMValueRef RHS,
1006 const char *Name);
1007LLVMValueRef LLVMBuildFCmp(LLVMBuilderRef, LLVMRealPredicate Op,
1008 LLVMValueRef LHS, LLVMValueRef RHS,
1009 const char *Name);
1010
1011/* Miscellaneous instructions */
1012LLVMValueRef LLVMBuildPhi(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
1013LLVMValueRef LLVMBuildCall(LLVMBuilderRef, LLVMValueRef Fn,
1014 LLVMValueRef *Args, unsigned NumArgs,
1015 const char *Name);
1016LLVMValueRef LLVMBuildSelect(LLVMBuilderRef, LLVMValueRef If,
1017 LLVMValueRef Then, LLVMValueRef Else,
1018 const char *Name);
1019LLVMValueRef LLVMBuildVAArg(LLVMBuilderRef, LLVMValueRef List, LLVMTypeRef Ty,
1020 const char *Name);
1021LLVMValueRef LLVMBuildExtractElement(LLVMBuilderRef, LLVMValueRef VecVal,
1022 LLVMValueRef Index, const char *Name);
1023LLVMValueRef LLVMBuildInsertElement(LLVMBuilderRef, LLVMValueRef VecVal,
1024 LLVMValueRef EltVal, LLVMValueRef Index,
1025 const char *Name);
1026LLVMValueRef LLVMBuildShuffleVector(LLVMBuilderRef, LLVMValueRef V1,
1027 LLVMValueRef V2, LLVMValueRef Mask,
1028 const char *Name);
Dan Gohmand5104a52008-11-03 22:55:43 +00001029LLVMValueRef LLVMBuildExtractValue(LLVMBuilderRef, LLVMValueRef AggVal,
1030 unsigned Index, const char *Name);
1031LLVMValueRef LLVMBuildInsertValue(LLVMBuilderRef, LLVMValueRef AggVal,
1032 LLVMValueRef EltVal, unsigned Index,
1033 const char *Name);
Gordon Henriksen76a03742007-09-18 03:18:57 +00001034
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00001035LLVMValueRef LLVMBuildIsNull(LLVMBuilderRef, LLVMValueRef Val,
1036 const char *Name);
1037LLVMValueRef LLVMBuildIsNotNull(LLVMBuilderRef, LLVMValueRef Val,
1038 const char *Name);
1039LLVMValueRef LLVMBuildPtrDiff(LLVMBuilderRef, LLVMValueRef LHS,
1040 LLVMValueRef RHS, const char *Name);
1041
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00001042
Gordon Henriksen0a68fe22007-12-12 01:04:30 +00001043/*===-- Module providers --------------------------------------------------===*/
1044
Jeffrey Yasskin091217b2010-01-27 20:34:15 +00001045/* Changes the type of M so it can be passed to FunctionPassManagers and the
1046 * JIT. They take ModuleProviders for historical reasons.
Gordon Henriksen0a68fe22007-12-12 01:04:30 +00001047 */
1048LLVMModuleProviderRef
1049LLVMCreateModuleProviderForExistingModule(LLVMModuleRef M);
1050
Jeffrey Yasskin091217b2010-01-27 20:34:15 +00001051/* Destroys the module M.
Gordon Henriksen0a68fe22007-12-12 01:04:30 +00001052 */
Jeffrey Yasskin091217b2010-01-27 20:34:15 +00001053void LLVMDisposeModuleProvider(LLVMModuleProviderRef M);
Gordon Henriksen0a68fe22007-12-12 01:04:30 +00001054
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00001055
1056/*===-- Memory buffers ----------------------------------------------------===*/
1057
Chris Lattner25963c62010-01-09 22:27:07 +00001058LLVMBool LLVMCreateMemoryBufferWithContentsOfFile(const char *Path,
1059 LLVMMemoryBufferRef *OutMemBuf,
1060 char **OutMessage);
1061LLVMBool LLVMCreateMemoryBufferWithSTDIN(LLVMMemoryBufferRef *OutMemBuf,
1062 char **OutMessage);
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00001063void LLVMDisposeMemoryBuffer(LLVMMemoryBufferRef MemBuf);
1064
Owen Anderson4698c5d2010-10-07 17:55:47 +00001065/*===-- Pass Registry -----------------------------------------------------===*/
1066
1067/** Return the global pass registry, for use with initialization functions.
1068 See llvm::PassRegistry::getPassRegistry. */
1069LLVMPassRegistryRef LLVMGetGlobalPassRegistry(void);
Gordon Henriksen878114b2008-03-16 04:20:44 +00001070
1071/*===-- Pass Managers -----------------------------------------------------===*/
1072
1073/** Constructs a new whole-module pass pipeline. This type of pipeline is
1074 suitable for link-time optimization and whole-module transformations.
1075 See llvm::PassManager::PassManager. */
Gordon Henriksena735a9c2008-05-04 12:55:34 +00001076LLVMPassManagerRef LLVMCreatePassManager(void);
Gordon Henriksen878114b2008-03-16 04:20:44 +00001077
1078/** Constructs a new function-by-function pass pipeline over the module
1079 provider. It does not take ownership of the module provider. This type of
1080 pipeline is suitable for code generation and JIT compilation tasks.
1081 See llvm::FunctionPassManager::FunctionPassManager. */
Erick Tryzelaarad0e0cb2010-03-02 23:58:54 +00001082LLVMPassManagerRef LLVMCreateFunctionPassManagerForModule(LLVMModuleRef M);
1083
1084/** Deprecated: Use LLVMCreateFunctionPassManagerForModule instead. */
Gordon Henriksen878114b2008-03-16 04:20:44 +00001085LLVMPassManagerRef LLVMCreateFunctionPassManager(LLVMModuleProviderRef MP);
1086
1087/** Initializes, executes on the provided module, and finalizes all of the
1088 passes scheduled in the pass manager. Returns 1 if any of the passes
1089 modified the module, 0 otherwise. See llvm::PassManager::run(Module&). */
Chris Lattner25963c62010-01-09 22:27:07 +00001090LLVMBool LLVMRunPassManager(LLVMPassManagerRef PM, LLVMModuleRef M);
Gordon Henriksen878114b2008-03-16 04:20:44 +00001091
1092/** Initializes all of the function passes scheduled in the function pass
1093 manager. Returns 1 if any of the passes modified the module, 0 otherwise.
1094 See llvm::FunctionPassManager::doInitialization. */
Chris Lattner25963c62010-01-09 22:27:07 +00001095LLVMBool LLVMInitializeFunctionPassManager(LLVMPassManagerRef FPM);
Gordon Henriksen878114b2008-03-16 04:20:44 +00001096
1097/** Executes all of the function passes scheduled in the function pass manager
1098 on the provided function. Returns 1 if any of the passes modified the
1099 function, false otherwise.
1100 See llvm::FunctionPassManager::run(Function&). */
Chris Lattner25963c62010-01-09 22:27:07 +00001101LLVMBool LLVMRunFunctionPassManager(LLVMPassManagerRef FPM, LLVMValueRef F);
Gordon Henriksen878114b2008-03-16 04:20:44 +00001102
1103/** Finalizes all of the function passes scheduled in in the function pass
1104 manager. Returns 1 if any of the passes modified the module, 0 otherwise.
1105 See llvm::FunctionPassManager::doFinalization. */
Chris Lattner25963c62010-01-09 22:27:07 +00001106LLVMBool LLVMFinalizeFunctionPassManager(LLVMPassManagerRef FPM);
Gordon Henriksen878114b2008-03-16 04:20:44 +00001107
1108/** Frees the memory of a pass pipeline. For function pipelines, does not free
1109 the module provider.
1110 See llvm::PassManagerBase::~PassManagerBase. */
1111void LLVMDisposePassManager(LLVMPassManagerRef PM);
1112
1113
Gordon Henriksen76a03742007-09-18 03:18:57 +00001114#ifdef __cplusplus
1115}
Gordon Henriksen76a03742007-09-18 03:18:57 +00001116
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001117namespace llvm {
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00001118 class MemoryBuffer;
Gordon Henriksen96571492008-03-16 15:55:43 +00001119 class PassManagerBase;
Gordon Henriksen0a68fe22007-12-12 01:04:30 +00001120
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00001121 #define DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \
1122 inline ty *unwrap(ref P) { \
1123 return reinterpret_cast<ty*>(P); \
1124 } \
1125 \
1126 inline ref wrap(const ty *P) { \
1127 return reinterpret_cast<ref>(const_cast<ty*>(P)); \
1128 }
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001129
Gordon Henriksen878114b2008-03-16 04:20:44 +00001130 #define DEFINE_ISA_CONVERSION_FUNCTIONS(ty, ref) \
1131 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \
1132 \
1133 template<typename T> \
1134 inline T *unwrap(ref P) { \
1135 return cast<T>(unwrap(P)); \
1136 }
1137
1138 #define DEFINE_STDCXX_CONVERSION_FUNCTIONS(ty, ref) \
1139 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \
1140 \
1141 template<typename T> \
1142 inline T *unwrap(ref P) { \
Chris Lattner7ba06612010-01-22 06:49:46 +00001143 T *Q = (T*)unwrap(P); \
Gordon Henriksen878114b2008-03-16 04:20:44 +00001144 assert(Q && "Invalid cast!"); \
1145 return Q; \
1146 }
1147
1148 DEFINE_ISA_CONVERSION_FUNCTIONS (Type, LLVMTypeRef )
1149 DEFINE_ISA_CONVERSION_FUNCTIONS (Value, LLVMValueRef )
Gordon Henriksen823f9732007-12-27 18:25:59 +00001150 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(Module, LLVMModuleRef )
1151 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(BasicBlock, LLVMBasicBlockRef )
Eric Christopher59278832008-08-08 19:39:37 +00001152 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(IRBuilder<>, LLVMBuilderRef )
Gordon Henriksen823f9732007-12-27 18:25:59 +00001153 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(MemoryBuffer, LLVMMemoryBufferRef )
Owen Anderson6773d382009-07-01 16:58:40 +00001154 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(LLVMContext, LLVMContextRef )
Erick Tryzelaar9f9857e2010-03-02 20:32:28 +00001155 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(Use, LLVMUseRef )
Gordon Henriksen878114b2008-03-16 04:20:44 +00001156 DEFINE_STDCXX_CONVERSION_FUNCTIONS(PassManagerBase, LLVMPassManagerRef )
Owen Anderson4698c5d2010-10-07 17:55:47 +00001157 DEFINE_STDCXX_CONVERSION_FUNCTIONS(PassRegistry, LLVMPassRegistryRef )
Jeffrey Yasskin091217b2010-01-27 20:34:15 +00001158 /* LLVMModuleProviderRef exists for historical reasons, but now just holds a
1159 * Module.
1160 */
1161 inline Module *unwrap(LLVMModuleProviderRef MP) {
1162 return reinterpret_cast<Module*>(MP);
1163 }
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001164
Gordon Henriksen878114b2008-03-16 04:20:44 +00001165 #undef DEFINE_STDCXX_CONVERSION_FUNCTIONS
1166 #undef DEFINE_ISA_CONVERSION_FUNCTIONS
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00001167 #undef DEFINE_SIMPLE_CONVERSION_FUNCTIONS
Erick Tryzelaar262332f2009-08-14 00:01:31 +00001168
1169 /* Specialized opaque context conversions.
1170 */
1171 inline LLVMContext **unwrap(LLVMContextRef* Tys) {
1172 return reinterpret_cast<LLVMContext**>(Tys);
1173 }
1174
1175 inline LLVMContextRef *wrap(const LLVMContext **Tys) {
1176 return reinterpret_cast<LLVMContextRef*>(const_cast<LLVMContext**>(Tys));
1177 }
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001178
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00001179 /* Specialized opaque type conversions.
1180 */
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001181 inline Type **unwrap(LLVMTypeRef* Tys) {
1182 return reinterpret_cast<Type**>(Tys);
1183 }
1184
Chris Lattner229907c2011-07-18 04:54:35 +00001185 inline LLVMTypeRef *wrap(Type **Tys) {
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001186 return reinterpret_cast<LLVMTypeRef*>(const_cast<Type**>(Tys));
1187 }
1188
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00001189 /* Specialized opaque value conversions.
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001190 */
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001191 inline Value **unwrap(LLVMValueRef *Vals) {
1192 return reinterpret_cast<Value**>(Vals);
1193 }
1194
1195 template<typename T>
1196 inline T **unwrap(LLVMValueRef *Vals, unsigned Length) {
1197 #if DEBUG
Chris Lattnerb7971152009-07-10 18:28:19 +00001198 for (LLVMValueRef *I = Vals, *E = Vals + Length; I != E; ++I)
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001199 cast<T>(*I);
1200 #endif
Hans Wennborg8f7edbf2011-06-04 16:00:19 +00001201 (void)Length;
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001202 return reinterpret_cast<T**>(Vals);
1203 }
1204
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001205 inline LLVMValueRef *wrap(const Value **Vals) {
1206 return reinterpret_cast<LLVMValueRef*>(const_cast<Value**>(Vals));
1207 }
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001208}
1209
1210#endif /* !defined(__cplusplus) */
1211
1212#endif /* !defined(LLVM_C_CORE_H) */