blob: 2bb7323cdeee393c40f826ee41b41f7f751c291c [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,
Bill Wendlingda52cec2010-02-15 20:53:17 +0000182 /* UserOp1 */
183 /* UserOp2 */
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,
198 LLVMLandingPad = 59
Bill Wendling2641d132011-07-27 21:00:28 +0000199
Chris Lattner40cf28d2009-10-12 04:01:02 +0000200} LLVMOpcode;
201
202typedef enum {
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000203 LLVMVoidTypeKind, /**< type with no size */
204 LLVMFloatTypeKind, /**< 32 bit floating point type */
205 LLVMDoubleTypeKind, /**< 64 bit floating point type */
206 LLVMX86_FP80TypeKind, /**< 80 bit floating point type (X87) */
207 LLVMFP128TypeKind, /**< 128 bit floating point type (112-bit mantissa)*/
208 LLVMPPC_FP128TypeKind, /**< 128 bit floating point type (two 64-bits) */
209 LLVMLabelTypeKind, /**< Labels */
210 LLVMIntegerTypeKind, /**< Arbitrary bit width integers */
211 LLVMFunctionTypeKind, /**< Functions */
212 LLVMStructTypeKind, /**< Structures */
213 LLVMArrayTypeKind, /**< Arrays */
214 LLVMPointerTypeKind, /**< Pointers */
Chris Lattnerdac44ec2009-07-15 22:00:31 +0000215 LLVMVectorTypeKind, /**< SIMD 'packed' format, or other vector type */
Dale Johannesenbaa5d042010-09-10 20:55:01 +0000216 LLVMMetadataTypeKind, /**< Metadata */
217 LLVMX86_MMXTypeKind /**< X86 MMX */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000218} LLVMTypeKind;
219
220typedef enum {
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000221 LLVMExternalLinkage, /**< Externally visible function */
Chris Lattner2dba0f02009-04-13 06:25:37 +0000222 LLVMAvailableExternallyLinkage,
Duncan Sands12da8ce2009-03-07 15:45:40 +0000223 LLVMLinkOnceAnyLinkage, /**< Keep one copy of function when linking (inline)*/
224 LLVMLinkOnceODRLinkage, /**< Same, but only replaced by something
225 equivalent. */
226 LLVMWeakAnyLinkage, /**< Keep one copy of function when linking (weak) */
227 LLVMWeakODRLinkage, /**< Same, but only replaced by something
228 equivalent. */
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000229 LLVMAppendingLinkage, /**< Special purpose, only applies to global arrays */
230 LLVMInternalLinkage, /**< Rename collisions when linking (static
231 functions) */
Duncan Sands12da8ce2009-03-07 15:45:40 +0000232 LLVMPrivateLinkage, /**< Like Internal, but omit from symbol table */
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000233 LLVMDLLImportLinkage, /**< Function to be imported from DLL */
234 LLVMDLLExportLinkage, /**< Function to be accessible from DLL */
Duncan Sandse2881052009-03-11 08:08:06 +0000235 LLVMExternalWeakLinkage,/**< ExternalWeak linkage description */
Jeffrey Yasskin091217b2010-01-27 20:34:15 +0000236 LLVMGhostLinkage, /**< Obsolete */
Bill Wendling002b1672009-07-20 18:22:52 +0000237 LLVMCommonLinkage, /**< Tentative definitions */
Bill Wendling03bcd6e2010-07-01 21:55:59 +0000238 LLVMLinkerPrivateLinkage, /**< Like Private, but linker removes. */
Bill Wendling578ee402010-08-20 22:05:50 +0000239 LLVMLinkerPrivateWeakLinkage, /**< Like LinkerPrivate, but is weak. */
240 LLVMLinkerPrivateWeakDefAutoLinkage /**< Like LinkerPrivateWeak, but possibly
241 hidden. */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000242} LLVMLinkage;
243
244typedef enum {
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000245 LLVMDefaultVisibility, /**< The GV is visible */
246 LLVMHiddenVisibility, /**< The GV is hidden */
247 LLVMProtectedVisibility /**< The GV is protected */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000248} LLVMVisibility;
249
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000250typedef enum {
251 LLVMCCallConv = 0,
252 LLVMFastCallConv = 8,
253 LLVMColdCallConv = 9,
254 LLVMX86StdcallCallConv = 64,
255 LLVMX86FastcallCallConv = 65
256} LLVMCallConv;
257
258typedef enum {
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000259 LLVMIntEQ = 32, /**< equal */
260 LLVMIntNE, /**< not equal */
261 LLVMIntUGT, /**< unsigned greater than */
262 LLVMIntUGE, /**< unsigned greater or equal */
263 LLVMIntULT, /**< unsigned less than */
264 LLVMIntULE, /**< unsigned less or equal */
265 LLVMIntSGT, /**< signed greater than */
266 LLVMIntSGE, /**< signed greater or equal */
267 LLVMIntSLT, /**< signed less than */
268 LLVMIntSLE /**< signed less or equal */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000269} LLVMIntPredicate;
270
271typedef enum {
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000272 LLVMRealPredicateFalse, /**< Always false (always folded) */
273 LLVMRealOEQ, /**< True if ordered and equal */
274 LLVMRealOGT, /**< True if ordered and greater than */
275 LLVMRealOGE, /**< True if ordered and greater than or equal */
276 LLVMRealOLT, /**< True if ordered and less than */
277 LLVMRealOLE, /**< True if ordered and less than or equal */
278 LLVMRealONE, /**< True if ordered and operands are unequal */
279 LLVMRealORD, /**< True if ordered (no nans) */
280 LLVMRealUNO, /**< True if unordered: isnan(X) | isnan(Y) */
281 LLVMRealUEQ, /**< True if unordered or equal */
282 LLVMRealUGT, /**< True if unordered or greater than */
283 LLVMRealUGE, /**< True if unordered, greater than, or equal */
284 LLVMRealULT, /**< True if unordered or less than */
285 LLVMRealULE, /**< True if unordered, less than, or equal */
286 LLVMRealUNE, /**< True if unordered or not equal */
287 LLVMRealPredicateTrue /**< Always true (always folded) */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000288} LLVMRealPredicate;
289
Bill Wendlingfae14752011-08-12 20:24:12 +0000290typedef enum {
291 LLVMLandingPadCatch, /**< A catch clause */
292 LLVMLandingPadFilter /**< A filter clause */
293} LLVMLandingPadClauseTy;
294
Nick Lewycky0db26542011-05-15 07:20:34 +0000295void LLVMInitializeCore(LLVMPassRegistryRef R);
296
Gordon Henriksen76a03742007-09-18 03:18:57 +0000297
Gordon Henriksen34eb6d82007-12-19 22:30:40 +0000298/*===-- Error handling ----------------------------------------------------===*/
299
300void LLVMDisposeMessage(char *Message);
301
302
Erick Tryzelaard8531fa2010-02-28 09:45:59 +0000303/*===-- Contexts ----------------------------------------------------------===*/
Gordon Henriksen76a03742007-09-18 03:18:57 +0000304
Owen Anderson6773d382009-07-01 16:58:40 +0000305/* Create and destroy contexts. */
Erick Tryzelaarf34cb0c2009-08-30 23:38:06 +0000306LLVMContextRef LLVMContextCreate(void);
307LLVMContextRef LLVMGetGlobalContext(void);
Owen Anderson6773d382009-07-01 16:58:40 +0000308void LLVMContextDispose(LLVMContextRef C);
309
Erick Tryzelaard8531fa2010-02-28 09:45:59 +0000310unsigned LLVMGetMDKindIDInContext(LLVMContextRef C, const char* Name,
311 unsigned SLen);
312unsigned LLVMGetMDKindID(const char* Name, unsigned SLen);
313
314/*===-- Modules -----------------------------------------------------------===*/
315
Gordon Henriksen76a03742007-09-18 03:18:57 +0000316/* Create and destroy modules. */
Gordon Henriksena49d4352008-03-07 19:13:06 +0000317/** See llvm::Module::Module. */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000318LLVMModuleRef LLVMModuleCreateWithName(const char *ModuleID);
Owen Anderson31d44e42009-07-02 07:17:57 +0000319LLVMModuleRef LLVMModuleCreateWithNameInContext(const char *ModuleID,
320 LLVMContextRef C);
Gordon Henriksena49d4352008-03-07 19:13:06 +0000321
322/** See llvm::Module::~Module. */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000323void LLVMDisposeModule(LLVMModuleRef M);
324
Gordon Henriksena49d4352008-03-07 19:13:06 +0000325/** Data layout. See Module::getDataLayout. */
Gordon Henriksen05568bb2007-12-27 20:13:47 +0000326const char *LLVMGetDataLayout(LLVMModuleRef M);
327void LLVMSetDataLayout(LLVMModuleRef M, const char *Triple);
328
Gordon Henriksena49d4352008-03-07 19:13:06 +0000329/** Target triple. See Module::getTargetTriple. */
Gordon Henriksen05568bb2007-12-27 20:13:47 +0000330const char *LLVMGetTarget(LLVMModuleRef M);
331void LLVMSetTarget(LLVMModuleRef M, const char *Triple);
332
Gordon Henriksen6c6075e2008-03-14 23:58:56 +0000333/** See Module::dump. */
334void LLVMDumpModule(LLVMModuleRef M);
335
Chris Lattner26941452010-04-10 17:52:58 +0000336/** See Module::setModuleInlineAsm. */
337void LLVMSetModuleInlineAsm(LLVMModuleRef M, const char *Asm);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000338
Chris Lattnera7e04b02010-11-28 20:03:44 +0000339/** See Module::getContext. */
340LLVMContextRef LLVMGetModuleContext(LLVMModuleRef M);
341
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000342/*===-- Types -------------------------------------------------------------===*/
Gordon Henriksen76a03742007-09-18 03:18:57 +0000343
344/* LLVM types conform to the following hierarchy:
345 *
346 * types:
347 * integer type
348 * real type
349 * function type
350 * sequence types:
351 * array type
352 * pointer type
353 * vector type
354 * void type
355 * label type
356 * opaque type
357 */
358
Gordon Henriksena49d4352008-03-07 19:13:06 +0000359/** See llvm::LLVMTypeKind::getTypeID. */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000360LLVMTypeKind LLVMGetTypeKind(LLVMTypeRef Ty);
Torok Edwin1cd9ade2011-10-06 12:13:28 +0000361LLVMBool LLVMTypeIsSized(LLVMTypeRef Ty);
Gordon Henriksena49d4352008-03-07 19:13:06 +0000362
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000363/** See llvm::LLVMType::getContext. */
364LLVMContextRef LLVMGetTypeContext(LLVMTypeRef Ty);
365
Gordon Henriksen76a03742007-09-18 03:18:57 +0000366/* Operations on integer types */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000367LLVMTypeRef LLVMInt1TypeInContext(LLVMContextRef C);
368LLVMTypeRef LLVMInt8TypeInContext(LLVMContextRef C);
369LLVMTypeRef LLVMInt16TypeInContext(LLVMContextRef C);
370LLVMTypeRef LLVMInt32TypeInContext(LLVMContextRef C);
371LLVMTypeRef LLVMInt64TypeInContext(LLVMContextRef C);
372LLVMTypeRef LLVMIntTypeInContext(LLVMContextRef C, unsigned NumBits);
373
Gordon Henriksena735a9c2008-05-04 12:55:34 +0000374LLVMTypeRef LLVMInt1Type(void);
375LLVMTypeRef LLVMInt8Type(void);
376LLVMTypeRef LLVMInt16Type(void);
377LLVMTypeRef LLVMInt32Type(void);
378LLVMTypeRef LLVMInt64Type(void);
Gordon Henriksened7beaa2007-10-06 16:05:20 +0000379LLVMTypeRef LLVMIntType(unsigned NumBits);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000380unsigned LLVMGetIntTypeWidth(LLVMTypeRef IntegerTy);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000381
382/* Operations on real types */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000383LLVMTypeRef LLVMFloatTypeInContext(LLVMContextRef C);
384LLVMTypeRef LLVMDoubleTypeInContext(LLVMContextRef C);
385LLVMTypeRef LLVMX86FP80TypeInContext(LLVMContextRef C);
386LLVMTypeRef LLVMFP128TypeInContext(LLVMContextRef C);
387LLVMTypeRef LLVMPPCFP128TypeInContext(LLVMContextRef C);
388
Gordon Henriksena735a9c2008-05-04 12:55:34 +0000389LLVMTypeRef LLVMFloatType(void);
390LLVMTypeRef LLVMDoubleType(void);
391LLVMTypeRef LLVMX86FP80Type(void);
392LLVMTypeRef LLVMFP128Type(void);
393LLVMTypeRef LLVMPPCFP128Type(void);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000394
395/* Operations on function types */
Gordon Henriksened7beaa2007-10-06 16:05:20 +0000396LLVMTypeRef LLVMFunctionType(LLVMTypeRef ReturnType,
397 LLVMTypeRef *ParamTypes, unsigned ParamCount,
Chris Lattner25963c62010-01-09 22:27:07 +0000398 LLVMBool IsVarArg);
399LLVMBool LLVMIsFunctionVarArg(LLVMTypeRef FunctionTy);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000400LLVMTypeRef LLVMGetReturnType(LLVMTypeRef FunctionTy);
401unsigned LLVMCountParamTypes(LLVMTypeRef FunctionTy);
402void LLVMGetParamTypes(LLVMTypeRef FunctionTy, LLVMTypeRef *Dest);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000403
404/* Operations on struct types */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000405LLVMTypeRef LLVMStructTypeInContext(LLVMContextRef C, LLVMTypeRef *ElementTypes,
Chris Lattner25963c62010-01-09 22:27:07 +0000406 unsigned ElementCount, LLVMBool Packed);
Gordon Henriksened7beaa2007-10-06 16:05:20 +0000407LLVMTypeRef LLVMStructType(LLVMTypeRef *ElementTypes, unsigned ElementCount,
Chris Lattner25963c62010-01-09 22:27:07 +0000408 LLVMBool Packed);
Chris Lattnere71ccde2011-07-14 05:53:17 +0000409LLVMTypeRef LLVMStructCreateNamed(LLVMContextRef C, const char *Name);
Torok Edwin0d5f6ae2011-10-06 12:12:50 +0000410const char *LLVMGetStructName(LLVMTypeRef Ty);
Chris Lattnere71ccde2011-07-14 05:53:17 +0000411void LLVMStructSetBody(LLVMTypeRef StructTy, LLVMTypeRef *ElementTypes,
412 unsigned ElementCount, LLVMBool Packed);
413
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000414unsigned LLVMCountStructElementTypes(LLVMTypeRef StructTy);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000415void LLVMGetStructElementTypes(LLVMTypeRef StructTy, LLVMTypeRef *Dest);
Chris Lattner25963c62010-01-09 22:27:07 +0000416LLVMBool LLVMIsPackedStruct(LLVMTypeRef StructTy);
Chris Lattner17cf05b2011-07-14 16:20:28 +0000417LLVMBool LLVMIsOpaqueStruct(LLVMTypeRef StructTy);
418
419LLVMTypeRef LLVMGetTypeByName(LLVMModuleRef M, const char *Name);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000420
421/* Operations on array, pointer, and vector types (sequence types) */
Gordon Henriksened7beaa2007-10-06 16:05:20 +0000422LLVMTypeRef LLVMArrayType(LLVMTypeRef ElementType, unsigned ElementCount);
Gordon Henriksen5a3fe032007-12-17 16:08:32 +0000423LLVMTypeRef LLVMPointerType(LLVMTypeRef ElementType, unsigned AddressSpace);
Gordon Henriksened7beaa2007-10-06 16:05:20 +0000424LLVMTypeRef LLVMVectorType(LLVMTypeRef ElementType, unsigned ElementCount);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000425
426LLVMTypeRef LLVMGetElementType(LLVMTypeRef Ty);
427unsigned LLVMGetArrayLength(LLVMTypeRef ArrayTy);
Gordon Henriksen5a3fe032007-12-17 16:08:32 +0000428unsigned LLVMGetPointerAddressSpace(LLVMTypeRef PointerTy);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000429unsigned LLVMGetVectorSize(LLVMTypeRef VectorTy);
430
431/* Operations on other types */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000432LLVMTypeRef LLVMVoidTypeInContext(LLVMContextRef C);
433LLVMTypeRef LLVMLabelTypeInContext(LLVMContextRef C);
Dale Johannesen95b67af2010-09-10 21:58:02 +0000434LLVMTypeRef LLVMX86MMXTypeInContext(LLVMContextRef C);
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000435
Gordon Henriksena735a9c2008-05-04 12:55:34 +0000436LLVMTypeRef LLVMVoidType(void);
437LLVMTypeRef LLVMLabelType(void);
Dale Johannesen95b67af2010-09-10 21:58:02 +0000438LLVMTypeRef LLVMX86MMXType(void);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000439
Gordon Henriksen76a03742007-09-18 03:18:57 +0000440/*===-- Values ------------------------------------------------------------===*/
441
442/* The bulk of LLVM's object model consists of values, which comprise a very
443 * rich type hierarchy.
Gordon Henriksen76a03742007-09-18 03:18:57 +0000444 */
445
Gordon Henriksen29e38942008-12-19 18:39:45 +0000446#define LLVM_FOR_EACH_VALUE_SUBCLASS(macro) \
447 macro(Argument) \
448 macro(BasicBlock) \
449 macro(InlineAsm) \
450 macro(User) \
451 macro(Constant) \
452 macro(ConstantAggregateZero) \
453 macro(ConstantArray) \
454 macro(ConstantExpr) \
455 macro(ConstantFP) \
456 macro(ConstantInt) \
457 macro(ConstantPointerNull) \
458 macro(ConstantStruct) \
459 macro(ConstantVector) \
460 macro(GlobalValue) \
461 macro(Function) \
462 macro(GlobalAlias) \
463 macro(GlobalVariable) \
464 macro(UndefValue) \
465 macro(Instruction) \
466 macro(BinaryOperator) \
467 macro(CallInst) \
468 macro(IntrinsicInst) \
469 macro(DbgInfoIntrinsic) \
470 macro(DbgDeclareInst) \
Gordon Henriksen29e38942008-12-19 18:39:45 +0000471 macro(EHSelectorInst) \
472 macro(MemIntrinsic) \
473 macro(MemCpyInst) \
474 macro(MemMoveInst) \
475 macro(MemSetInst) \
476 macro(CmpInst) \
477 macro(FCmpInst) \
478 macro(ICmpInst) \
Gordon Henriksen29e38942008-12-19 18:39:45 +0000479 macro(ExtractElementInst) \
480 macro(GetElementPtrInst) \
481 macro(InsertElementInst) \
482 macro(InsertValueInst) \
Bill Wendlingfae14752011-08-12 20:24:12 +0000483 macro(LandingPadInst) \
Gordon Henriksen29e38942008-12-19 18:39:45 +0000484 macro(PHINode) \
485 macro(SelectInst) \
486 macro(ShuffleVectorInst) \
487 macro(StoreInst) \
488 macro(TerminatorInst) \
489 macro(BranchInst) \
490 macro(InvokeInst) \
491 macro(ReturnInst) \
492 macro(SwitchInst) \
493 macro(UnreachableInst) \
Bill Wendlingf891bf82011-07-31 06:30:59 +0000494 macro(ResumeInst) \
Gordon Henriksen29e38942008-12-19 18:39:45 +0000495 macro(UnaryInstruction) \
Victor Hernandez8acf2952009-10-23 21:09:37 +0000496 macro(AllocaInst) \
Gordon Henriksen29e38942008-12-19 18:39:45 +0000497 macro(CastInst) \
Gordon Henriksen05a868f2008-12-19 18:51:17 +0000498 macro(BitCastInst) \
499 macro(FPExtInst) \
500 macro(FPToSIInst) \
501 macro(FPToUIInst) \
502 macro(FPTruncInst) \
503 macro(IntToPtrInst) \
504 macro(PtrToIntInst) \
505 macro(SExtInst) \
506 macro(SIToFPInst) \
507 macro(TruncInst) \
508 macro(UIToFPInst) \
509 macro(ZExtInst) \
510 macro(ExtractValueInst) \
Gordon Henriksen05a868f2008-12-19 18:51:17 +0000511 macro(LoadInst) \
512 macro(VAArgInst)
Gordon Henriksen29e38942008-12-19 18:39:45 +0000513
Gordon Henriksen76a03742007-09-18 03:18:57 +0000514/* Operations on all values */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000515LLVMTypeRef LLVMTypeOf(LLVMValueRef Val);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000516const char *LLVMGetValueName(LLVMValueRef Val);
517void LLVMSetValueName(LLVMValueRef Val, const char *Name);
Gordon Henriksen1d0d24c2007-10-06 00:08:49 +0000518void LLVMDumpValue(LLVMValueRef Val);
Chris Lattner40cf28d2009-10-12 04:01:02 +0000519void LLVMReplaceAllUsesWith(LLVMValueRef OldVal, LLVMValueRef NewVal);
Erick Tryzelaard8531fa2010-02-28 09:45:59 +0000520int LLVMHasMetadata(LLVMValueRef Val);
521LLVMValueRef LLVMGetMetadata(LLVMValueRef Val, unsigned KindID);
522void LLVMSetMetadata(LLVMValueRef Val, unsigned KindID, LLVMValueRef Node);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000523
Gordon Henriksen29e38942008-12-19 18:39:45 +0000524/* Conversion functions. Return the input value if it is an instance of the
525 specified class, otherwise NULL. See llvm::dyn_cast_or_null<>. */
526#define LLVM_DECLARE_VALUE_CAST(name) \
527 LLVMValueRef LLVMIsA##name(LLVMValueRef Val);
528LLVM_FOR_EACH_VALUE_SUBCLASS(LLVM_DECLARE_VALUE_CAST)
529
Chris Lattner40cf28d2009-10-12 04:01:02 +0000530/* Operations on Uses */
Erick Tryzelaar9f9857e2010-03-02 20:32:28 +0000531LLVMUseRef LLVMGetFirstUse(LLVMValueRef Val);
532LLVMUseRef LLVMGetNextUse(LLVMUseRef U);
533LLVMValueRef LLVMGetUser(LLVMUseRef U);
534LLVMValueRef LLVMGetUsedValue(LLVMUseRef U);
Chris Lattner40cf28d2009-10-12 04:01:02 +0000535
536/* Operations on Users */
537LLVMValueRef LLVMGetOperand(LLVMValueRef Val, unsigned Index);
Erick Tryzelaarb4d48702010-08-20 14:51:22 +0000538void LLVMSetOperand(LLVMValueRef User, unsigned Index, LLVMValueRef Val);
539int LLVMGetNumOperands(LLVMValueRef Val);
Chris Lattner40cf28d2009-10-12 04:01:02 +0000540
Gordon Henriksen76a03742007-09-18 03:18:57 +0000541/* Operations on constants of any type */
Gordon Henriksen1046c732007-10-06 15:11:06 +0000542LLVMValueRef LLVMConstNull(LLVMTypeRef Ty); /* all zeroes */
543LLVMValueRef LLVMConstAllOnes(LLVMTypeRef Ty); /* only for int/vector */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000544LLVMValueRef LLVMGetUndef(LLVMTypeRef Ty);
Chris Lattner25963c62010-01-09 22:27:07 +0000545LLVMBool LLVMIsConstant(LLVMValueRef Val);
546LLVMBool LLVMIsNull(LLVMValueRef Val);
547LLVMBool LLVMIsUndef(LLVMValueRef Val);
Chris Lattner7f318242009-07-06 17:29:59 +0000548LLVMValueRef LLVMConstPointerNull(LLVMTypeRef Ty);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000549
Erick Tryzelaard8531fa2010-02-28 09:45:59 +0000550/* Operations on metadata */
551LLVMValueRef LLVMMDStringInContext(LLVMContextRef C, const char *Str,
552 unsigned SLen);
553LLVMValueRef LLVMMDString(const char *Str, unsigned SLen);
554LLVMValueRef LLVMMDNodeInContext(LLVMContextRef C, LLVMValueRef *Vals,
555 unsigned Count);
556LLVMValueRef LLVMMDNode(LLVMValueRef *Vals, unsigned Count);
Torok Edwinfec812e2011-10-06 12:13:11 +0000557const char *LLVMGetMDString(LLVMValueRef V, unsigned* Len);
558int LLVMGetMDNodeNumOperands(LLVMValueRef V);
559LLVMValueRef *LLVMGetMDNodeOperand(LLVMValueRef V, unsigned i);
560unsigned LLVMGetNamedMetadataNumOperands(LLVMModuleRef M, const char* name);
561void LLVMGetNamedMetadataOperands(LLVMModuleRef M, const char* name, LLVMValueRef *Dest);
Erick Tryzelaard8531fa2010-02-28 09:45:59 +0000562
Gordon Henriksen76a03742007-09-18 03:18:57 +0000563/* Operations on scalar constants */
Gordon Henriksen1046c732007-10-06 15:11:06 +0000564LLVMValueRef LLVMConstInt(LLVMTypeRef IntTy, unsigned long long N,
Chris Lattner25963c62010-01-09 22:27:07 +0000565 LLVMBool SignExtend);
Chris Lattner4329e072010-11-23 02:47:22 +0000566LLVMValueRef LLVMConstIntOfArbitraryPrecision(LLVMTypeRef IntTy,
567 unsigned NumWords,
568 const uint64_t Words[]);
Erick Tryzelaardd991352009-08-16 23:36:46 +0000569LLVMValueRef LLVMConstIntOfString(LLVMTypeRef IntTy, const char *Text,
570 uint8_t Radix);
571LLVMValueRef LLVMConstIntOfStringAndSize(LLVMTypeRef IntTy, const char *Text,
572 unsigned SLen, uint8_t Radix);
Gordon Henriksen1046c732007-10-06 15:11:06 +0000573LLVMValueRef LLVMConstReal(LLVMTypeRef RealTy, double N);
Gordon Henriksen931e1212008-02-02 01:07:50 +0000574LLVMValueRef LLVMConstRealOfString(LLVMTypeRef RealTy, const char *Text);
Erick Tryzelaardd991352009-08-16 23:36:46 +0000575LLVMValueRef LLVMConstRealOfStringAndSize(LLVMTypeRef RealTy, const char *Text,
576 unsigned SLen);
Chris Lattner40cf28d2009-10-12 04:01:02 +0000577unsigned long long LLVMConstIntGetZExtValue(LLVMValueRef ConstantVal);
578long long LLVMConstIntGetSExtValue(LLVMValueRef ConstantVal);
Erick Tryzelaardd991352009-08-16 23:36:46 +0000579
Gordon Henriksen76a03742007-09-18 03:18:57 +0000580
581/* Operations on composite constants */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000582LLVMValueRef LLVMConstStringInContext(LLVMContextRef C, const char *Str,
Chris Lattner25963c62010-01-09 22:27:07 +0000583 unsigned Length, LLVMBool DontNullTerminate);
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000584LLVMValueRef LLVMConstStructInContext(LLVMContextRef C,
585 LLVMValueRef *ConstantVals,
Chris Lattner25963c62010-01-09 22:27:07 +0000586 unsigned Count, LLVMBool Packed);
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000587
Gordon Henriksen1046c732007-10-06 15:11:06 +0000588LLVMValueRef LLVMConstString(const char *Str, unsigned Length,
Chris Lattner25963c62010-01-09 22:27:07 +0000589 LLVMBool DontNullTerminate);
Gordon Henriksen2ad5aef2008-04-25 03:21:19 +0000590LLVMValueRef LLVMConstArray(LLVMTypeRef ElementTy,
Gordon Henriksen1046c732007-10-06 15:11:06 +0000591 LLVMValueRef *ConstantVals, unsigned Length);
592LLVMValueRef LLVMConstStruct(LLVMValueRef *ConstantVals, unsigned Count,
Chris Lattner25963c62010-01-09 22:27:07 +0000593 LLVMBool Packed);
Rafael Espindola784ad242011-07-14 19:09:08 +0000594LLVMValueRef LLVMConstNamedStruct(LLVMTypeRef StructTy,
595 LLVMValueRef *ConstantVals,
596 unsigned Count);
Gordon Henriksen1046c732007-10-06 15:11:06 +0000597LLVMValueRef LLVMConstVector(LLVMValueRef *ScalarConstantVals, unsigned Size);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000598
Gordon Henriksen7ce31762007-10-06 14:29:36 +0000599/* Constant expressions */
Chris Lattner40cf28d2009-10-12 04:01:02 +0000600LLVMOpcode LLVMGetConstOpcode(LLVMValueRef ConstantVal);
Erick Tryzelaarfd529d72009-08-19 08:36:49 +0000601LLVMValueRef LLVMAlignOf(LLVMTypeRef Ty);
Gordon Henriksen7ce31762007-10-06 14:29:36 +0000602LLVMValueRef LLVMSizeOf(LLVMTypeRef Ty);
603LLVMValueRef LLVMConstNeg(LLVMValueRef ConstantVal);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +0000604LLVMValueRef LLVMConstNSWNeg(LLVMValueRef ConstantVal);
605LLVMValueRef LLVMConstNUWNeg(LLVMValueRef ConstantVal);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +0000606LLVMValueRef LLVMConstFNeg(LLVMValueRef ConstantVal);
Gordon Henriksen7ce31762007-10-06 14:29:36 +0000607LLVMValueRef LLVMConstNot(LLVMValueRef ConstantVal);
608LLVMValueRef LLVMConstAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Dan Gohmane4ca02d2009-09-03 23:34:49 +0000609LLVMValueRef LLVMConstNSWAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +0000610LLVMValueRef LLVMConstNUWAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +0000611LLVMValueRef LLVMConstFAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Gordon Henriksen7ce31762007-10-06 14:29:36 +0000612LLVMValueRef LLVMConstSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +0000613LLVMValueRef LLVMConstNSWSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
614LLVMValueRef LLVMConstNUWSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +0000615LLVMValueRef LLVMConstFSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Gordon Henriksen7ce31762007-10-06 14:29:36 +0000616LLVMValueRef LLVMConstMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +0000617LLVMValueRef LLVMConstNSWMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
618LLVMValueRef LLVMConstNUWMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +0000619LLVMValueRef LLVMConstFMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Gordon Henriksen7ce31762007-10-06 14:29:36 +0000620LLVMValueRef LLVMConstUDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
621LLVMValueRef LLVMConstSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Dan Gohmane4ca02d2009-09-03 23:34:49 +0000622LLVMValueRef LLVMConstExactSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Gordon Henriksen7ce31762007-10-06 14:29:36 +0000623LLVMValueRef LLVMConstFDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
624LLVMValueRef LLVMConstURem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
625LLVMValueRef LLVMConstSRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
626LLVMValueRef LLVMConstFRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
627LLVMValueRef LLVMConstAnd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
628LLVMValueRef LLVMConstOr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
629LLVMValueRef LLVMConstXor(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
630LLVMValueRef LLVMConstICmp(LLVMIntPredicate Predicate,
631 LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
632LLVMValueRef LLVMConstFCmp(LLVMRealPredicate Predicate,
633 LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
634LLVMValueRef LLVMConstShl(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
635LLVMValueRef LLVMConstLShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
636LLVMValueRef LLVMConstAShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
637LLVMValueRef LLVMConstGEP(LLVMValueRef ConstantVal,
638 LLVMValueRef *ConstantIndices, unsigned NumIndices);
Dan Gohmane4ca02d2009-09-03 23:34:49 +0000639LLVMValueRef LLVMConstInBoundsGEP(LLVMValueRef ConstantVal,
640 LLVMValueRef *ConstantIndices,
641 unsigned NumIndices);
Gordon Henriksen7ce31762007-10-06 14:29:36 +0000642LLVMValueRef LLVMConstTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
643LLVMValueRef LLVMConstSExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
644LLVMValueRef LLVMConstZExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
645LLVMValueRef LLVMConstFPTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
646LLVMValueRef LLVMConstFPExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
647LLVMValueRef LLVMConstUIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
648LLVMValueRef LLVMConstSIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
649LLVMValueRef LLVMConstFPToUI(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
650LLVMValueRef LLVMConstFPToSI(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
651LLVMValueRef LLVMConstPtrToInt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
652LLVMValueRef LLVMConstIntToPtr(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
653LLVMValueRef LLVMConstBitCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +0000654LLVMValueRef LLVMConstZExtOrBitCast(LLVMValueRef ConstantVal,
655 LLVMTypeRef ToType);
656LLVMValueRef LLVMConstSExtOrBitCast(LLVMValueRef ConstantVal,
657 LLVMTypeRef ToType);
658LLVMValueRef LLVMConstTruncOrBitCast(LLVMValueRef ConstantVal,
659 LLVMTypeRef ToType);
660LLVMValueRef LLVMConstPointerCast(LLVMValueRef ConstantVal,
661 LLVMTypeRef ToType);
662LLVMValueRef LLVMConstIntCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType,
Chris Lattner25963c62010-01-09 22:27:07 +0000663 LLVMBool isSigned);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +0000664LLVMValueRef LLVMConstFPCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
Gordon Henriksen7ce31762007-10-06 14:29:36 +0000665LLVMValueRef LLVMConstSelect(LLVMValueRef ConstantCondition,
666 LLVMValueRef ConstantIfTrue,
667 LLVMValueRef ConstantIfFalse);
668LLVMValueRef LLVMConstExtractElement(LLVMValueRef VectorConstant,
669 LLVMValueRef IndexConstant);
670LLVMValueRef LLVMConstInsertElement(LLVMValueRef VectorConstant,
671 LLVMValueRef ElementValueConstant,
672 LLVMValueRef IndexConstant);
673LLVMValueRef LLVMConstShuffleVector(LLVMValueRef VectorAConstant,
674 LLVMValueRef VectorBConstant,
675 LLVMValueRef MaskConstant);
Dan Gohmand5104a52008-11-03 22:55:43 +0000676LLVMValueRef LLVMConstExtractValue(LLVMValueRef AggConstant, unsigned *IdxList,
677 unsigned NumIdx);
678LLVMValueRef LLVMConstInsertValue(LLVMValueRef AggConstant,
679 LLVMValueRef ElementValueConstant,
680 unsigned *IdxList, unsigned NumIdx);
Chris Lattner25963c62010-01-09 22:27:07 +0000681LLVMValueRef LLVMConstInlineAsm(LLVMTypeRef Ty,
Chris Lattner3d1f5522008-12-17 21:39:50 +0000682 const char *AsmString, const char *Constraints,
Chris Lattner25963c62010-01-09 22:27:07 +0000683 LLVMBool HasSideEffects, LLVMBool IsAlignStack);
Erick Tryzelaar0fb26ef2010-02-28 09:46:06 +0000684LLVMValueRef LLVMBlockAddress(LLVMValueRef F, LLVMBasicBlockRef BB);
Gordon Henriksen7ce31762007-10-06 14:29:36 +0000685
Gordon Henriksen76a03742007-09-18 03:18:57 +0000686/* Operations on global variables, functions, and aliases (globals) */
Gordon Henriksen265f7802008-03-19 01:11:35 +0000687LLVMModuleRef LLVMGetGlobalParent(LLVMValueRef Global);
Chris Lattner25963c62010-01-09 22:27:07 +0000688LLVMBool LLVMIsDeclaration(LLVMValueRef Global);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000689LLVMLinkage LLVMGetLinkage(LLVMValueRef Global);
690void LLVMSetLinkage(LLVMValueRef Global, LLVMLinkage Linkage);
691const char *LLVMGetSection(LLVMValueRef Global);
692void LLVMSetSection(LLVMValueRef Global, const char *Section);
693LLVMVisibility LLVMGetVisibility(LLVMValueRef Global);
694void LLVMSetVisibility(LLVMValueRef Global, LLVMVisibility Viz);
695unsigned LLVMGetAlignment(LLVMValueRef Global);
696void LLVMSetAlignment(LLVMValueRef Global, unsigned Bytes);
697
698/* Operations on global variables */
699LLVMValueRef LLVMAddGlobal(LLVMModuleRef M, LLVMTypeRef Ty, const char *Name);
Erick Tryzelaar06894b32010-02-28 09:46:13 +0000700LLVMValueRef LLVMAddGlobalInAddressSpace(LLVMModuleRef M, LLVMTypeRef Ty,
701 const char *Name,
702 unsigned AddressSpace);
Gordon Henriksen783f7bb2007-10-08 03:45:09 +0000703LLVMValueRef LLVMGetNamedGlobal(LLVMModuleRef M, const char *Name);
Gordon Henriksen07a45f42008-03-23 22:21:29 +0000704LLVMValueRef LLVMGetFirstGlobal(LLVMModuleRef M);
705LLVMValueRef LLVMGetLastGlobal(LLVMModuleRef M);
706LLVMValueRef LLVMGetNextGlobal(LLVMValueRef GlobalVar);
707LLVMValueRef LLVMGetPreviousGlobal(LLVMValueRef GlobalVar);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000708void LLVMDeleteGlobal(LLVMValueRef GlobalVar);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000709LLVMValueRef LLVMGetInitializer(LLVMValueRef GlobalVar);
710void LLVMSetInitializer(LLVMValueRef GlobalVar, LLVMValueRef ConstantVal);
Chris Lattner25963c62010-01-09 22:27:07 +0000711LLVMBool LLVMIsThreadLocal(LLVMValueRef GlobalVar);
712void LLVMSetThreadLocal(LLVMValueRef GlobalVar, LLVMBool IsThreadLocal);
713LLVMBool LLVMIsGlobalConstant(LLVMValueRef GlobalVar);
714void LLVMSetGlobalConstant(LLVMValueRef GlobalVar, LLVMBool IsConstant);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000715
Chris Lattner3d1f5522008-12-17 21:39:50 +0000716/* Operations on aliases */
717LLVMValueRef LLVMAddAlias(LLVMModuleRef M, LLVMTypeRef Ty, LLVMValueRef Aliasee,
718 const char *Name);
719
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000720/* Operations on functions */
721LLVMValueRef LLVMAddFunction(LLVMModuleRef M, const char *Name,
722 LLVMTypeRef FunctionTy);
Gordon Henriksen783f7bb2007-10-08 03:45:09 +0000723LLVMValueRef LLVMGetNamedFunction(LLVMModuleRef M, const char *Name);
Gordon Henriksen054817c2008-03-19 03:47:18 +0000724LLVMValueRef LLVMGetFirstFunction(LLVMModuleRef M);
725LLVMValueRef LLVMGetLastFunction(LLVMModuleRef M);
726LLVMValueRef LLVMGetNextFunction(LLVMValueRef Fn);
727LLVMValueRef LLVMGetPreviousFunction(LLVMValueRef Fn);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000728void LLVMDeleteFunction(LLVMValueRef Fn);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000729unsigned LLVMGetIntrinsicID(LLVMValueRef Fn);
730unsigned LLVMGetFunctionCallConv(LLVMValueRef Fn);
731void LLVMSetFunctionCallConv(LLVMValueRef Fn, unsigned CC);
Gordon Henriksend930f912008-08-17 18:44:35 +0000732const char *LLVMGetGC(LLVMValueRef Fn);
733void LLVMSetGC(LLVMValueRef Fn, const char *Name);
Duncan Sands7374a012009-05-06 12:21:17 +0000734void LLVMAddFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA);
Chris Lattner40cf28d2009-10-12 04:01:02 +0000735LLVMAttribute LLVMGetFunctionAttr(LLVMValueRef Fn);
Duncan Sands7374a012009-05-06 12:21:17 +0000736void LLVMRemoveFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000737
Gordon Henriksen265f7802008-03-19 01:11:35 +0000738/* Operations on parameters */
739unsigned LLVMCountParams(LLVMValueRef Fn);
740void LLVMGetParams(LLVMValueRef Fn, LLVMValueRef *Params);
741LLVMValueRef LLVMGetParam(LLVMValueRef Fn, unsigned Index);
742LLVMValueRef LLVMGetParamParent(LLVMValueRef Inst);
Gordon Henriksen07a45f42008-03-23 22:21:29 +0000743LLVMValueRef LLVMGetFirstParam(LLVMValueRef Fn);
744LLVMValueRef LLVMGetLastParam(LLVMValueRef Fn);
745LLVMValueRef LLVMGetNextParam(LLVMValueRef Arg);
746LLVMValueRef LLVMGetPreviousParam(LLVMValueRef Arg);
Devang Patel4c758ea2008-09-25 21:00:45 +0000747void LLVMAddAttribute(LLVMValueRef Arg, LLVMAttribute PA);
748void LLVMRemoveAttribute(LLVMValueRef Arg, LLVMAttribute PA);
Chris Lattner40cf28d2009-10-12 04:01:02 +0000749LLVMAttribute LLVMGetAttribute(LLVMValueRef Arg);
Gordon Henriksen2d9cc212008-04-28 17:37:06 +0000750void LLVMSetParamAlignment(LLVMValueRef Arg, unsigned align);
Gordon Henriksen265f7802008-03-19 01:11:35 +0000751
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000752/* Operations on basic blocks */
Gordon Henriksen07a45f42008-03-23 22:21:29 +0000753LLVMValueRef LLVMBasicBlockAsValue(LLVMBasicBlockRef BB);
Chris Lattner25963c62010-01-09 22:27:07 +0000754LLVMBool LLVMValueIsBasicBlock(LLVMValueRef Val);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000755LLVMBasicBlockRef LLVMValueAsBasicBlock(LLVMValueRef Val);
Gordon Henriksen07a45f42008-03-23 22:21:29 +0000756LLVMValueRef LLVMGetBasicBlockParent(LLVMBasicBlockRef BB);
Nate Begeman43c322b2011-08-23 20:27:46 +0000757LLVMValueRef LLVMGetBasicBlockTerminator(LLVMBasicBlockRef BB);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000758unsigned LLVMCountBasicBlocks(LLVMValueRef Fn);
759void LLVMGetBasicBlocks(LLVMValueRef Fn, LLVMBasicBlockRef *BasicBlocks);
Gordon Henriksen054817c2008-03-19 03:47:18 +0000760LLVMBasicBlockRef LLVMGetFirstBasicBlock(LLVMValueRef Fn);
761LLVMBasicBlockRef LLVMGetLastBasicBlock(LLVMValueRef Fn);
762LLVMBasicBlockRef LLVMGetNextBasicBlock(LLVMBasicBlockRef BB);
763LLVMBasicBlockRef LLVMGetPreviousBasicBlock(LLVMBasicBlockRef BB);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000764LLVMBasicBlockRef LLVMGetEntryBasicBlock(LLVMValueRef Fn);
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000765
766LLVMBasicBlockRef LLVMAppendBasicBlockInContext(LLVMContextRef C,
767 LLVMValueRef Fn,
768 const char *Name);
769LLVMBasicBlockRef LLVMInsertBasicBlockInContext(LLVMContextRef C,
770 LLVMBasicBlockRef BB,
771 const char *Name);
772
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000773LLVMBasicBlockRef LLVMAppendBasicBlock(LLVMValueRef Fn, const char *Name);
774LLVMBasicBlockRef LLVMInsertBasicBlock(LLVMBasicBlockRef InsertBeforeBB,
775 const char *Name);
776void LLVMDeleteBasicBlock(LLVMBasicBlockRef BB);
Nate Begeman43c322b2011-08-23 20:27:46 +0000777void LLVMRemoveBasicBlockFromParent(LLVMBasicBlockRef BB);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000778
Duncan Sandsb1d61aa2010-07-19 15:31:07 +0000779void LLVMMoveBasicBlockBefore(LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos);
780void LLVMMoveBasicBlockAfter(LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos);
781
Gordon Henriksen054817c2008-03-19 03:47:18 +0000782LLVMValueRef LLVMGetFirstInstruction(LLVMBasicBlockRef BB);
783LLVMValueRef LLVMGetLastInstruction(LLVMBasicBlockRef BB);
Nate Begeman43c322b2011-08-23 20:27:46 +0000784
785/* Operations on instructions */
786LLVMBasicBlockRef LLVMGetInstructionParent(LLVMValueRef Inst);
Gordon Henriksen054817c2008-03-19 03:47:18 +0000787LLVMValueRef LLVMGetNextInstruction(LLVMValueRef Inst);
788LLVMValueRef LLVMGetPreviousInstruction(LLVMValueRef Inst);
Devang Pateldbebc6f2011-10-03 20:59:18 +0000789void LLVMInstructionEraseFromParent(LLVMValueRef Inst);
Torok Edwin60c40de2011-10-06 12:13:20 +0000790LLVMIntPredicate LLVMGetICmpPredicate(LLVMValueRef Inst);
Gordon Henriksen265f7802008-03-19 01:11:35 +0000791
Gordon Henriksen1158c532007-12-29 20:45:00 +0000792/* Operations on call sites */
793void LLVMSetInstructionCallConv(LLVMValueRef Instr, unsigned CC);
794unsigned LLVMGetInstructionCallConv(LLVMValueRef Instr);
Devang Patel4c758ea2008-09-25 21:00:45 +0000795void LLVMAddInstrAttribute(LLVMValueRef Instr, unsigned index, LLVMAttribute);
796void LLVMRemoveInstrAttribute(LLVMValueRef Instr, unsigned index,
797 LLVMAttribute);
Gordon Henriksen2d9cc212008-04-28 17:37:06 +0000798void LLVMSetInstrParamAlignment(LLVMValueRef Instr, unsigned index,
799 unsigned align);
Gordon Henriksen1158c532007-12-29 20:45:00 +0000800
Gordon Henrikseneeb65372008-08-30 16:34:54 +0000801/* Operations on call instructions (only) */
Chris Lattner25963c62010-01-09 22:27:07 +0000802LLVMBool LLVMIsTailCall(LLVMValueRef CallInst);
803void LLVMSetTailCall(LLVMValueRef CallInst, LLVMBool IsTailCall);
Gordon Henrikseneeb65372008-08-30 16:34:54 +0000804
Nate Begeman43c322b2011-08-23 20:27:46 +0000805/* Operations on switch instructions (only) */
806LLVMBasicBlockRef LLVMGetSwitchDefaultDest(LLVMValueRef SwitchInstr);
807
Gordon Henriksen44dd8fb2007-10-08 18:14:39 +0000808/* Operations on phi nodes */
809void LLVMAddIncoming(LLVMValueRef PhiNode, LLVMValueRef *IncomingValues,
810 LLVMBasicBlockRef *IncomingBlocks, unsigned Count);
811unsigned LLVMCountIncoming(LLVMValueRef PhiNode);
812LLVMValueRef LLVMGetIncomingValue(LLVMValueRef PhiNode, unsigned Index);
813LLVMBasicBlockRef LLVMGetIncomingBlock(LLVMValueRef PhiNode, unsigned Index);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000814
815/*===-- Instruction builders ----------------------------------------------===*/
816
817/* An instruction builder represents a point within a basic block, and is the
818 * exclusive means of building instructions using the C interface.
819 */
820
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000821LLVMBuilderRef LLVMCreateBuilderInContext(LLVMContextRef C);
Gordon Henriksena735a9c2008-05-04 12:55:34 +0000822LLVMBuilderRef LLVMCreateBuilder(void);
Gordon Henriksen054817c2008-03-19 03:47:18 +0000823void LLVMPositionBuilder(LLVMBuilderRef Builder, LLVMBasicBlockRef Block,
824 LLVMValueRef Instr);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000825void LLVMPositionBuilderBefore(LLVMBuilderRef Builder, LLVMValueRef Instr);
826void LLVMPositionBuilderAtEnd(LLVMBuilderRef Builder, LLVMBasicBlockRef Block);
Gordon Henriksen265f7802008-03-19 01:11:35 +0000827LLVMBasicBlockRef LLVMGetInsertBlock(LLVMBuilderRef Builder);
Chris Lattner3d1f5522008-12-17 21:39:50 +0000828void LLVMClearInsertionPosition(LLVMBuilderRef Builder);
829void LLVMInsertIntoBuilder(LLVMBuilderRef Builder, LLVMValueRef Instr);
Erick Tryzelaar9813bea2009-08-16 02:20:57 +0000830void LLVMInsertIntoBuilderWithName(LLVMBuilderRef Builder, LLVMValueRef Instr,
831 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000832void LLVMDisposeBuilder(LLVMBuilderRef Builder);
833
Erick Tryzelaard8531fa2010-02-28 09:45:59 +0000834/* Metadata */
835void LLVMSetCurrentDebugLocation(LLVMBuilderRef Builder, LLVMValueRef L);
836LLVMValueRef LLVMGetCurrentDebugLocation(LLVMBuilderRef Builder);
837void LLVMSetInstDebugLocation(LLVMBuilderRef Builder, LLVMValueRef Inst);
838
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000839/* Terminators */
840LLVMValueRef LLVMBuildRetVoid(LLVMBuilderRef);
841LLVMValueRef LLVMBuildRet(LLVMBuilderRef, LLVMValueRef V);
Erick Tryzelaarfd529d72009-08-19 08:36:49 +0000842LLVMValueRef LLVMBuildAggregateRet(LLVMBuilderRef, LLVMValueRef *RetVals,
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +0000843 unsigned N);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000844LLVMValueRef LLVMBuildBr(LLVMBuilderRef, LLVMBasicBlockRef Dest);
845LLVMValueRef LLVMBuildCondBr(LLVMBuilderRef, LLVMValueRef If,
846 LLVMBasicBlockRef Then, LLVMBasicBlockRef Else);
847LLVMValueRef LLVMBuildSwitch(LLVMBuilderRef, LLVMValueRef V,
848 LLVMBasicBlockRef Else, unsigned NumCases);
Erick Tryzelaar0fb26ef2010-02-28 09:46:06 +0000849LLVMValueRef LLVMBuildIndirectBr(LLVMBuilderRef B, LLVMValueRef Addr,
850 unsigned NumDests);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000851LLVMValueRef LLVMBuildInvoke(LLVMBuilderRef, LLVMValueRef Fn,
852 LLVMValueRef *Args, unsigned NumArgs,
853 LLVMBasicBlockRef Then, LLVMBasicBlockRef Catch,
854 const char *Name);
Benjamin Kramer5a6568832011-08-19 01:36:54 +0000855LLVMValueRef LLVMBuildLandingPad(LLVMBuilderRef B, LLVMTypeRef Ty,
856 LLVMValueRef PersFn, unsigned NumClauses,
857 const char *Name);
Bill Wendlingf891bf82011-07-31 06:30:59 +0000858LLVMValueRef LLVMBuildResume(LLVMBuilderRef B, LLVMValueRef Exn);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000859LLVMValueRef LLVMBuildUnreachable(LLVMBuilderRef);
860
Gordon Henriksen097102c2008-01-01 05:50:53 +0000861/* Add a case to the switch instruction */
862void LLVMAddCase(LLVMValueRef Switch, LLVMValueRef OnVal,
863 LLVMBasicBlockRef Dest);
864
Erick Tryzelaar0fb26ef2010-02-28 09:46:06 +0000865/* Add a destination to the indirectbr instruction */
866void LLVMAddDestination(LLVMValueRef IndirectBr, LLVMBasicBlockRef Dest);
867
Bill Wendlingfae14752011-08-12 20:24:12 +0000868/* Add a catch or filter clause to the landingpad instruction */
869void LLVMAddClause(LLVMValueRef LandingPad, LLVMValueRef ClauseVal);
870
871/* Set the 'cleanup' flag in the landingpad instruction */
872void LLVMSetCleanup(LLVMValueRef LandingPad, LLVMBool Val);
873
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000874/* Arithmetic */
875LLVMValueRef LLVMBuildAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
876 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +0000877LLVMValueRef LLVMBuildNSWAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
878 const char *Name);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +0000879LLVMValueRef LLVMBuildNUWAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
880 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +0000881LLVMValueRef LLVMBuildFAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
882 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000883LLVMValueRef LLVMBuildSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
884 const char *Name);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +0000885LLVMValueRef LLVMBuildNSWSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
886 const char *Name);
887LLVMValueRef LLVMBuildNUWSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
888 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +0000889LLVMValueRef LLVMBuildFSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
890 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000891LLVMValueRef LLVMBuildMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
892 const char *Name);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +0000893LLVMValueRef LLVMBuildNSWMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
894 const char *Name);
895LLVMValueRef LLVMBuildNUWMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
896 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +0000897LLVMValueRef LLVMBuildFMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
898 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000899LLVMValueRef LLVMBuildUDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
900 const char *Name);
901LLVMValueRef LLVMBuildSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
902 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +0000903LLVMValueRef LLVMBuildExactSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
904 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000905LLVMValueRef LLVMBuildFDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
906 const char *Name);
907LLVMValueRef LLVMBuildURem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
908 const char *Name);
909LLVMValueRef LLVMBuildSRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
910 const char *Name);
911LLVMValueRef LLVMBuildFRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
912 const char *Name);
913LLVMValueRef LLVMBuildShl(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
914 const char *Name);
915LLVMValueRef LLVMBuildLShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
916 const char *Name);
917LLVMValueRef LLVMBuildAShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
918 const char *Name);
919LLVMValueRef LLVMBuildAnd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
920 const char *Name);
921LLVMValueRef LLVMBuildOr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
922 const char *Name);
923LLVMValueRef LLVMBuildXor(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
924 const char *Name);
Erick Tryzelaar31831792010-02-28 05:51:27 +0000925LLVMValueRef LLVMBuildBinOp(LLVMBuilderRef B, LLVMOpcode Op,
926 LLVMValueRef LHS, LLVMValueRef RHS,
927 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000928LLVMValueRef LLVMBuildNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +0000929LLVMValueRef LLVMBuildNSWNeg(LLVMBuilderRef B, LLVMValueRef V,
930 const char *Name);
931LLVMValueRef LLVMBuildNUWNeg(LLVMBuilderRef B, LLVMValueRef V,
932 const char *Name);
Dan Gohmanf919bd62009-09-28 21:51:41 +0000933LLVMValueRef LLVMBuildFNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000934LLVMValueRef LLVMBuildNot(LLVMBuilderRef, LLVMValueRef V, const char *Name);
935
936/* Memory */
937LLVMValueRef LLVMBuildMalloc(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
938LLVMValueRef LLVMBuildArrayMalloc(LLVMBuilderRef, LLVMTypeRef Ty,
939 LLVMValueRef Val, const char *Name);
940LLVMValueRef LLVMBuildAlloca(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
941LLVMValueRef LLVMBuildArrayAlloca(LLVMBuilderRef, LLVMTypeRef Ty,
942 LLVMValueRef Val, const char *Name);
943LLVMValueRef LLVMBuildFree(LLVMBuilderRef, LLVMValueRef PointerVal);
944LLVMValueRef LLVMBuildLoad(LLVMBuilderRef, LLVMValueRef PointerVal,
945 const char *Name);
946LLVMValueRef LLVMBuildStore(LLVMBuilderRef, LLVMValueRef Val, LLVMValueRef Ptr);
947LLVMValueRef LLVMBuildGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
948 LLVMValueRef *Indices, unsigned NumIndices,
949 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +0000950LLVMValueRef LLVMBuildInBoundsGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
951 LLVMValueRef *Indices, unsigned NumIndices,
952 const char *Name);
953LLVMValueRef LLVMBuildStructGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
954 unsigned Idx, const char *Name);
955LLVMValueRef LLVMBuildGlobalString(LLVMBuilderRef B, const char *Str,
956 const char *Name);
957LLVMValueRef LLVMBuildGlobalStringPtr(LLVMBuilderRef B, const char *Str,
958 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000959
960/* Casts */
961LLVMValueRef LLVMBuildTrunc(LLVMBuilderRef, LLVMValueRef Val,
962 LLVMTypeRef DestTy, const char *Name);
963LLVMValueRef LLVMBuildZExt(LLVMBuilderRef, LLVMValueRef Val,
964 LLVMTypeRef DestTy, const char *Name);
965LLVMValueRef LLVMBuildSExt(LLVMBuilderRef, LLVMValueRef Val,
966 LLVMTypeRef DestTy, const char *Name);
967LLVMValueRef LLVMBuildFPToUI(LLVMBuilderRef, LLVMValueRef Val,
968 LLVMTypeRef DestTy, const char *Name);
969LLVMValueRef LLVMBuildFPToSI(LLVMBuilderRef, LLVMValueRef Val,
970 LLVMTypeRef DestTy, const char *Name);
971LLVMValueRef LLVMBuildUIToFP(LLVMBuilderRef, LLVMValueRef Val,
972 LLVMTypeRef DestTy, const char *Name);
973LLVMValueRef LLVMBuildSIToFP(LLVMBuilderRef, LLVMValueRef Val,
974 LLVMTypeRef DestTy, const char *Name);
975LLVMValueRef LLVMBuildFPTrunc(LLVMBuilderRef, LLVMValueRef Val,
976 LLVMTypeRef DestTy, const char *Name);
977LLVMValueRef LLVMBuildFPExt(LLVMBuilderRef, LLVMValueRef Val,
978 LLVMTypeRef DestTy, const char *Name);
979LLVMValueRef LLVMBuildPtrToInt(LLVMBuilderRef, LLVMValueRef Val,
980 LLVMTypeRef DestTy, const char *Name);
981LLVMValueRef LLVMBuildIntToPtr(LLVMBuilderRef, LLVMValueRef Val,
982 LLVMTypeRef DestTy, const char *Name);
983LLVMValueRef LLVMBuildBitCast(LLVMBuilderRef, LLVMValueRef Val,
984 LLVMTypeRef DestTy, const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +0000985LLVMValueRef LLVMBuildZExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
986 LLVMTypeRef DestTy, const char *Name);
987LLVMValueRef LLVMBuildSExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
988 LLVMTypeRef DestTy, const char *Name);
989LLVMValueRef LLVMBuildTruncOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
990 LLVMTypeRef DestTy, const char *Name);
Erick Tryzelaar31831792010-02-28 05:51:27 +0000991LLVMValueRef LLVMBuildCast(LLVMBuilderRef B, LLVMOpcode Op, LLVMValueRef Val,
992 LLVMTypeRef DestTy, const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +0000993LLVMValueRef LLVMBuildPointerCast(LLVMBuilderRef, LLVMValueRef Val,
994 LLVMTypeRef DestTy, const char *Name);
Duncan Sands9d786d72009-11-23 10:49:03 +0000995LLVMValueRef LLVMBuildIntCast(LLVMBuilderRef, LLVMValueRef Val, /*Signed cast!*/
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +0000996 LLVMTypeRef DestTy, const char *Name);
997LLVMValueRef LLVMBuildFPCast(LLVMBuilderRef, LLVMValueRef Val,
998 LLVMTypeRef DestTy, const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000999
1000/* Comparisons */
1001LLVMValueRef LLVMBuildICmp(LLVMBuilderRef, LLVMIntPredicate Op,
1002 LLVMValueRef LHS, LLVMValueRef RHS,
1003 const char *Name);
1004LLVMValueRef LLVMBuildFCmp(LLVMBuilderRef, LLVMRealPredicate Op,
1005 LLVMValueRef LHS, LLVMValueRef RHS,
1006 const char *Name);
1007
1008/* Miscellaneous instructions */
1009LLVMValueRef LLVMBuildPhi(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
1010LLVMValueRef LLVMBuildCall(LLVMBuilderRef, LLVMValueRef Fn,
1011 LLVMValueRef *Args, unsigned NumArgs,
1012 const char *Name);
1013LLVMValueRef LLVMBuildSelect(LLVMBuilderRef, LLVMValueRef If,
1014 LLVMValueRef Then, LLVMValueRef Else,
1015 const char *Name);
1016LLVMValueRef LLVMBuildVAArg(LLVMBuilderRef, LLVMValueRef List, LLVMTypeRef Ty,
1017 const char *Name);
1018LLVMValueRef LLVMBuildExtractElement(LLVMBuilderRef, LLVMValueRef VecVal,
1019 LLVMValueRef Index, const char *Name);
1020LLVMValueRef LLVMBuildInsertElement(LLVMBuilderRef, LLVMValueRef VecVal,
1021 LLVMValueRef EltVal, LLVMValueRef Index,
1022 const char *Name);
1023LLVMValueRef LLVMBuildShuffleVector(LLVMBuilderRef, LLVMValueRef V1,
1024 LLVMValueRef V2, LLVMValueRef Mask,
1025 const char *Name);
Dan Gohmand5104a52008-11-03 22:55:43 +00001026LLVMValueRef LLVMBuildExtractValue(LLVMBuilderRef, LLVMValueRef AggVal,
1027 unsigned Index, const char *Name);
1028LLVMValueRef LLVMBuildInsertValue(LLVMBuilderRef, LLVMValueRef AggVal,
1029 LLVMValueRef EltVal, unsigned Index,
1030 const char *Name);
Gordon Henriksen76a03742007-09-18 03:18:57 +00001031
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00001032LLVMValueRef LLVMBuildIsNull(LLVMBuilderRef, LLVMValueRef Val,
1033 const char *Name);
1034LLVMValueRef LLVMBuildIsNotNull(LLVMBuilderRef, LLVMValueRef Val,
1035 const char *Name);
1036LLVMValueRef LLVMBuildPtrDiff(LLVMBuilderRef, LLVMValueRef LHS,
1037 LLVMValueRef RHS, const char *Name);
1038
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00001039
Gordon Henriksen0a68fe22007-12-12 01:04:30 +00001040/*===-- Module providers --------------------------------------------------===*/
1041
Jeffrey Yasskin091217b2010-01-27 20:34:15 +00001042/* Changes the type of M so it can be passed to FunctionPassManagers and the
1043 * JIT. They take ModuleProviders for historical reasons.
Gordon Henriksen0a68fe22007-12-12 01:04:30 +00001044 */
1045LLVMModuleProviderRef
1046LLVMCreateModuleProviderForExistingModule(LLVMModuleRef M);
1047
Jeffrey Yasskin091217b2010-01-27 20:34:15 +00001048/* Destroys the module M.
Gordon Henriksen0a68fe22007-12-12 01:04:30 +00001049 */
Jeffrey Yasskin091217b2010-01-27 20:34:15 +00001050void LLVMDisposeModuleProvider(LLVMModuleProviderRef M);
Gordon Henriksen0a68fe22007-12-12 01:04:30 +00001051
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00001052
1053/*===-- Memory buffers ----------------------------------------------------===*/
1054
Chris Lattner25963c62010-01-09 22:27:07 +00001055LLVMBool LLVMCreateMemoryBufferWithContentsOfFile(const char *Path,
1056 LLVMMemoryBufferRef *OutMemBuf,
1057 char **OutMessage);
1058LLVMBool LLVMCreateMemoryBufferWithSTDIN(LLVMMemoryBufferRef *OutMemBuf,
1059 char **OutMessage);
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00001060void LLVMDisposeMemoryBuffer(LLVMMemoryBufferRef MemBuf);
1061
Owen Anderson4698c5d2010-10-07 17:55:47 +00001062/*===-- Pass Registry -----------------------------------------------------===*/
1063
1064/** Return the global pass registry, for use with initialization functions.
1065 See llvm::PassRegistry::getPassRegistry. */
1066LLVMPassRegistryRef LLVMGetGlobalPassRegistry(void);
Gordon Henriksen878114b2008-03-16 04:20:44 +00001067
1068/*===-- Pass Managers -----------------------------------------------------===*/
1069
1070/** Constructs a new whole-module pass pipeline. This type of pipeline is
1071 suitable for link-time optimization and whole-module transformations.
1072 See llvm::PassManager::PassManager. */
Gordon Henriksena735a9c2008-05-04 12:55:34 +00001073LLVMPassManagerRef LLVMCreatePassManager(void);
Gordon Henriksen878114b2008-03-16 04:20:44 +00001074
1075/** Constructs a new function-by-function pass pipeline over the module
1076 provider. It does not take ownership of the module provider. This type of
1077 pipeline is suitable for code generation and JIT compilation tasks.
1078 See llvm::FunctionPassManager::FunctionPassManager. */
Erick Tryzelaarad0e0cb2010-03-02 23:58:54 +00001079LLVMPassManagerRef LLVMCreateFunctionPassManagerForModule(LLVMModuleRef M);
1080
1081/** Deprecated: Use LLVMCreateFunctionPassManagerForModule instead. */
Gordon Henriksen878114b2008-03-16 04:20:44 +00001082LLVMPassManagerRef LLVMCreateFunctionPassManager(LLVMModuleProviderRef MP);
1083
1084/** Initializes, executes on the provided module, and finalizes all of the
1085 passes scheduled in the pass manager. Returns 1 if any of the passes
1086 modified the module, 0 otherwise. See llvm::PassManager::run(Module&). */
Chris Lattner25963c62010-01-09 22:27:07 +00001087LLVMBool LLVMRunPassManager(LLVMPassManagerRef PM, LLVMModuleRef M);
Gordon Henriksen878114b2008-03-16 04:20:44 +00001088
1089/** Initializes all of the function passes scheduled in the function pass
1090 manager. Returns 1 if any of the passes modified the module, 0 otherwise.
1091 See llvm::FunctionPassManager::doInitialization. */
Chris Lattner25963c62010-01-09 22:27:07 +00001092LLVMBool LLVMInitializeFunctionPassManager(LLVMPassManagerRef FPM);
Gordon Henriksen878114b2008-03-16 04:20:44 +00001093
1094/** Executes all of the function passes scheduled in the function pass manager
1095 on the provided function. Returns 1 if any of the passes modified the
1096 function, false otherwise.
1097 See llvm::FunctionPassManager::run(Function&). */
Chris Lattner25963c62010-01-09 22:27:07 +00001098LLVMBool LLVMRunFunctionPassManager(LLVMPassManagerRef FPM, LLVMValueRef F);
Gordon Henriksen878114b2008-03-16 04:20:44 +00001099
1100/** Finalizes all of the function passes scheduled in in the function pass
1101 manager. Returns 1 if any of the passes modified the module, 0 otherwise.
1102 See llvm::FunctionPassManager::doFinalization. */
Chris Lattner25963c62010-01-09 22:27:07 +00001103LLVMBool LLVMFinalizeFunctionPassManager(LLVMPassManagerRef FPM);
Gordon Henriksen878114b2008-03-16 04:20:44 +00001104
1105/** Frees the memory of a pass pipeline. For function pipelines, does not free
1106 the module provider.
1107 See llvm::PassManagerBase::~PassManagerBase. */
1108void LLVMDisposePassManager(LLVMPassManagerRef PM);
1109
1110
Gordon Henriksen76a03742007-09-18 03:18:57 +00001111#ifdef __cplusplus
1112}
Gordon Henriksen76a03742007-09-18 03:18:57 +00001113
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001114namespace llvm {
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00001115 class MemoryBuffer;
Gordon Henriksen96571492008-03-16 15:55:43 +00001116 class PassManagerBase;
Gordon Henriksen0a68fe22007-12-12 01:04:30 +00001117
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00001118 #define DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \
1119 inline ty *unwrap(ref P) { \
1120 return reinterpret_cast<ty*>(P); \
1121 } \
1122 \
1123 inline ref wrap(const ty *P) { \
1124 return reinterpret_cast<ref>(const_cast<ty*>(P)); \
1125 }
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001126
Gordon Henriksen878114b2008-03-16 04:20:44 +00001127 #define DEFINE_ISA_CONVERSION_FUNCTIONS(ty, ref) \
1128 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \
1129 \
1130 template<typename T> \
1131 inline T *unwrap(ref P) { \
1132 return cast<T>(unwrap(P)); \
1133 }
1134
1135 #define DEFINE_STDCXX_CONVERSION_FUNCTIONS(ty, ref) \
1136 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \
1137 \
1138 template<typename T> \
1139 inline T *unwrap(ref P) { \
Chris Lattner7ba06612010-01-22 06:49:46 +00001140 T *Q = (T*)unwrap(P); \
Gordon Henriksen878114b2008-03-16 04:20:44 +00001141 assert(Q && "Invalid cast!"); \
1142 return Q; \
1143 }
1144
1145 DEFINE_ISA_CONVERSION_FUNCTIONS (Type, LLVMTypeRef )
1146 DEFINE_ISA_CONVERSION_FUNCTIONS (Value, LLVMValueRef )
Gordon Henriksen823f9732007-12-27 18:25:59 +00001147 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(Module, LLVMModuleRef )
1148 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(BasicBlock, LLVMBasicBlockRef )
Eric Christopher59278832008-08-08 19:39:37 +00001149 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(IRBuilder<>, LLVMBuilderRef )
Gordon Henriksen823f9732007-12-27 18:25:59 +00001150 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(MemoryBuffer, LLVMMemoryBufferRef )
Owen Anderson6773d382009-07-01 16:58:40 +00001151 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(LLVMContext, LLVMContextRef )
Erick Tryzelaar9f9857e2010-03-02 20:32:28 +00001152 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(Use, LLVMUseRef )
Gordon Henriksen878114b2008-03-16 04:20:44 +00001153 DEFINE_STDCXX_CONVERSION_FUNCTIONS(PassManagerBase, LLVMPassManagerRef )
Owen Anderson4698c5d2010-10-07 17:55:47 +00001154 DEFINE_STDCXX_CONVERSION_FUNCTIONS(PassRegistry, LLVMPassRegistryRef )
Jeffrey Yasskin091217b2010-01-27 20:34:15 +00001155 /* LLVMModuleProviderRef exists for historical reasons, but now just holds a
1156 * Module.
1157 */
1158 inline Module *unwrap(LLVMModuleProviderRef MP) {
1159 return reinterpret_cast<Module*>(MP);
1160 }
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001161
Gordon Henriksen878114b2008-03-16 04:20:44 +00001162 #undef DEFINE_STDCXX_CONVERSION_FUNCTIONS
1163 #undef DEFINE_ISA_CONVERSION_FUNCTIONS
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00001164 #undef DEFINE_SIMPLE_CONVERSION_FUNCTIONS
Erick Tryzelaar262332f2009-08-14 00:01:31 +00001165
1166 /* Specialized opaque context conversions.
1167 */
1168 inline LLVMContext **unwrap(LLVMContextRef* Tys) {
1169 return reinterpret_cast<LLVMContext**>(Tys);
1170 }
1171
1172 inline LLVMContextRef *wrap(const LLVMContext **Tys) {
1173 return reinterpret_cast<LLVMContextRef*>(const_cast<LLVMContext**>(Tys));
1174 }
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001175
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00001176 /* Specialized opaque type conversions.
1177 */
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001178 inline Type **unwrap(LLVMTypeRef* Tys) {
1179 return reinterpret_cast<Type**>(Tys);
1180 }
1181
Chris Lattner229907c2011-07-18 04:54:35 +00001182 inline LLVMTypeRef *wrap(Type **Tys) {
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001183 return reinterpret_cast<LLVMTypeRef*>(const_cast<Type**>(Tys));
1184 }
1185
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00001186 /* Specialized opaque value conversions.
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001187 */
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001188 inline Value **unwrap(LLVMValueRef *Vals) {
1189 return reinterpret_cast<Value**>(Vals);
1190 }
1191
1192 template<typename T>
1193 inline T **unwrap(LLVMValueRef *Vals, unsigned Length) {
1194 #if DEBUG
Chris Lattnerb7971152009-07-10 18:28:19 +00001195 for (LLVMValueRef *I = Vals, *E = Vals + Length; I != E; ++I)
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001196 cast<T>(*I);
1197 #endif
Hans Wennborg8f7edbf2011-06-04 16:00:19 +00001198 (void)Length;
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001199 return reinterpret_cast<T**>(Vals);
1200 }
1201
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001202 inline LLVMValueRef *wrap(const Value **Vals) {
1203 return reinterpret_cast<LLVMValueRef*>(const_cast<Value**>(Vals));
1204 }
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001205}
1206
1207#endif /* !defined(__cplusplus) */
1208
1209#endif /* !defined(LLVM_C_CORE_H) */