blob: 10e9a80bcb52bdb5cc4ca9dba4d4c9c0a94443f7 [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 Edwin60c40de2011-10-06 12:13:20 +0000792LLVMIntPredicate LLVMGetICmpPredicate(LLVMValueRef Inst);
Gordon Henriksen265f7802008-03-19 01:11:35 +0000793
Gordon Henriksen1158c532007-12-29 20:45:00 +0000794/* Operations on call sites */
795void LLVMSetInstructionCallConv(LLVMValueRef Instr, unsigned CC);
796unsigned LLVMGetInstructionCallConv(LLVMValueRef Instr);
Devang Patel4c758ea2008-09-25 21:00:45 +0000797void LLVMAddInstrAttribute(LLVMValueRef Instr, unsigned index, LLVMAttribute);
798void LLVMRemoveInstrAttribute(LLVMValueRef Instr, unsigned index,
799 LLVMAttribute);
Gordon Henriksen2d9cc212008-04-28 17:37:06 +0000800void LLVMSetInstrParamAlignment(LLVMValueRef Instr, unsigned index,
801 unsigned align);
Gordon Henriksen1158c532007-12-29 20:45:00 +0000802
Gordon Henrikseneeb65372008-08-30 16:34:54 +0000803/* Operations on call instructions (only) */
Chris Lattner25963c62010-01-09 22:27:07 +0000804LLVMBool LLVMIsTailCall(LLVMValueRef CallInst);
805void LLVMSetTailCall(LLVMValueRef CallInst, LLVMBool IsTailCall);
Gordon Henrikseneeb65372008-08-30 16:34:54 +0000806
Nate Begeman43c322b2011-08-23 20:27:46 +0000807/* Operations on switch instructions (only) */
808LLVMBasicBlockRef LLVMGetSwitchDefaultDest(LLVMValueRef SwitchInstr);
809
Gordon Henriksen44dd8fb2007-10-08 18:14:39 +0000810/* Operations on phi nodes */
811void LLVMAddIncoming(LLVMValueRef PhiNode, LLVMValueRef *IncomingValues,
812 LLVMBasicBlockRef *IncomingBlocks, unsigned Count);
813unsigned LLVMCountIncoming(LLVMValueRef PhiNode);
814LLVMValueRef LLVMGetIncomingValue(LLVMValueRef PhiNode, unsigned Index);
815LLVMBasicBlockRef LLVMGetIncomingBlock(LLVMValueRef PhiNode, unsigned Index);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000816
817/*===-- Instruction builders ----------------------------------------------===*/
818
819/* An instruction builder represents a point within a basic block, and is the
820 * exclusive means of building instructions using the C interface.
821 */
822
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000823LLVMBuilderRef LLVMCreateBuilderInContext(LLVMContextRef C);
Gordon Henriksena735a9c2008-05-04 12:55:34 +0000824LLVMBuilderRef LLVMCreateBuilder(void);
Gordon Henriksen054817c2008-03-19 03:47:18 +0000825void LLVMPositionBuilder(LLVMBuilderRef Builder, LLVMBasicBlockRef Block,
826 LLVMValueRef Instr);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000827void LLVMPositionBuilderBefore(LLVMBuilderRef Builder, LLVMValueRef Instr);
828void LLVMPositionBuilderAtEnd(LLVMBuilderRef Builder, LLVMBasicBlockRef Block);
Gordon Henriksen265f7802008-03-19 01:11:35 +0000829LLVMBasicBlockRef LLVMGetInsertBlock(LLVMBuilderRef Builder);
Chris Lattner3d1f5522008-12-17 21:39:50 +0000830void LLVMClearInsertionPosition(LLVMBuilderRef Builder);
831void LLVMInsertIntoBuilder(LLVMBuilderRef Builder, LLVMValueRef Instr);
Erick Tryzelaar9813bea2009-08-16 02:20:57 +0000832void LLVMInsertIntoBuilderWithName(LLVMBuilderRef Builder, LLVMValueRef Instr,
833 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000834void LLVMDisposeBuilder(LLVMBuilderRef Builder);
835
Erick Tryzelaard8531fa2010-02-28 09:45:59 +0000836/* Metadata */
837void LLVMSetCurrentDebugLocation(LLVMBuilderRef Builder, LLVMValueRef L);
838LLVMValueRef LLVMGetCurrentDebugLocation(LLVMBuilderRef Builder);
839void LLVMSetInstDebugLocation(LLVMBuilderRef Builder, LLVMValueRef Inst);
840
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000841/* Terminators */
842LLVMValueRef LLVMBuildRetVoid(LLVMBuilderRef);
843LLVMValueRef LLVMBuildRet(LLVMBuilderRef, LLVMValueRef V);
Erick Tryzelaarfd529d72009-08-19 08:36:49 +0000844LLVMValueRef LLVMBuildAggregateRet(LLVMBuilderRef, LLVMValueRef *RetVals,
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +0000845 unsigned N);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000846LLVMValueRef LLVMBuildBr(LLVMBuilderRef, LLVMBasicBlockRef Dest);
847LLVMValueRef LLVMBuildCondBr(LLVMBuilderRef, LLVMValueRef If,
848 LLVMBasicBlockRef Then, LLVMBasicBlockRef Else);
849LLVMValueRef LLVMBuildSwitch(LLVMBuilderRef, LLVMValueRef V,
850 LLVMBasicBlockRef Else, unsigned NumCases);
Erick Tryzelaar0fb26ef2010-02-28 09:46:06 +0000851LLVMValueRef LLVMBuildIndirectBr(LLVMBuilderRef B, LLVMValueRef Addr,
852 unsigned NumDests);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000853LLVMValueRef LLVMBuildInvoke(LLVMBuilderRef, LLVMValueRef Fn,
854 LLVMValueRef *Args, unsigned NumArgs,
855 LLVMBasicBlockRef Then, LLVMBasicBlockRef Catch,
856 const char *Name);
Benjamin Kramer5a6568832011-08-19 01:36:54 +0000857LLVMValueRef LLVMBuildLandingPad(LLVMBuilderRef B, LLVMTypeRef Ty,
858 LLVMValueRef PersFn, unsigned NumClauses,
859 const char *Name);
Bill Wendlingf891bf82011-07-31 06:30:59 +0000860LLVMValueRef LLVMBuildResume(LLVMBuilderRef B, LLVMValueRef Exn);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000861LLVMValueRef LLVMBuildUnreachable(LLVMBuilderRef);
862
Gordon Henriksen097102c2008-01-01 05:50:53 +0000863/* Add a case to the switch instruction */
864void LLVMAddCase(LLVMValueRef Switch, LLVMValueRef OnVal,
865 LLVMBasicBlockRef Dest);
866
Erick Tryzelaar0fb26ef2010-02-28 09:46:06 +0000867/* Add a destination to the indirectbr instruction */
868void LLVMAddDestination(LLVMValueRef IndirectBr, LLVMBasicBlockRef Dest);
869
Bill Wendlingfae14752011-08-12 20:24:12 +0000870/* Add a catch or filter clause to the landingpad instruction */
871void LLVMAddClause(LLVMValueRef LandingPad, LLVMValueRef ClauseVal);
872
873/* Set the 'cleanup' flag in the landingpad instruction */
874void LLVMSetCleanup(LLVMValueRef LandingPad, LLVMBool Val);
875
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000876/* Arithmetic */
877LLVMValueRef LLVMBuildAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
878 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +0000879LLVMValueRef LLVMBuildNSWAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
880 const char *Name);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +0000881LLVMValueRef LLVMBuildNUWAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
882 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +0000883LLVMValueRef LLVMBuildFAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
884 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000885LLVMValueRef LLVMBuildSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
886 const char *Name);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +0000887LLVMValueRef LLVMBuildNSWSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
888 const char *Name);
889LLVMValueRef LLVMBuildNUWSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
890 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +0000891LLVMValueRef LLVMBuildFSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
892 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000893LLVMValueRef LLVMBuildMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
894 const char *Name);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +0000895LLVMValueRef LLVMBuildNSWMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
896 const char *Name);
897LLVMValueRef LLVMBuildNUWMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
898 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +0000899LLVMValueRef LLVMBuildFMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
900 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000901LLVMValueRef LLVMBuildUDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
902 const char *Name);
903LLVMValueRef LLVMBuildSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
904 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +0000905LLVMValueRef LLVMBuildExactSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
906 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000907LLVMValueRef LLVMBuildFDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
908 const char *Name);
909LLVMValueRef LLVMBuildURem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
910 const char *Name);
911LLVMValueRef LLVMBuildSRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
912 const char *Name);
913LLVMValueRef LLVMBuildFRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
914 const char *Name);
915LLVMValueRef LLVMBuildShl(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
916 const char *Name);
917LLVMValueRef LLVMBuildLShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
918 const char *Name);
919LLVMValueRef LLVMBuildAShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
920 const char *Name);
921LLVMValueRef LLVMBuildAnd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
922 const char *Name);
923LLVMValueRef LLVMBuildOr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
924 const char *Name);
925LLVMValueRef LLVMBuildXor(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
926 const char *Name);
Erick Tryzelaar31831792010-02-28 05:51:27 +0000927LLVMValueRef LLVMBuildBinOp(LLVMBuilderRef B, LLVMOpcode Op,
928 LLVMValueRef LHS, LLVMValueRef RHS,
929 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000930LLVMValueRef LLVMBuildNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +0000931LLVMValueRef LLVMBuildNSWNeg(LLVMBuilderRef B, LLVMValueRef V,
932 const char *Name);
933LLVMValueRef LLVMBuildNUWNeg(LLVMBuilderRef B, LLVMValueRef V,
934 const char *Name);
Dan Gohmanf919bd62009-09-28 21:51:41 +0000935LLVMValueRef LLVMBuildFNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000936LLVMValueRef LLVMBuildNot(LLVMBuilderRef, LLVMValueRef V, const char *Name);
937
938/* Memory */
939LLVMValueRef LLVMBuildMalloc(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
940LLVMValueRef LLVMBuildArrayMalloc(LLVMBuilderRef, LLVMTypeRef Ty,
941 LLVMValueRef Val, const char *Name);
942LLVMValueRef LLVMBuildAlloca(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
943LLVMValueRef LLVMBuildArrayAlloca(LLVMBuilderRef, LLVMTypeRef Ty,
944 LLVMValueRef Val, const char *Name);
945LLVMValueRef LLVMBuildFree(LLVMBuilderRef, LLVMValueRef PointerVal);
946LLVMValueRef LLVMBuildLoad(LLVMBuilderRef, LLVMValueRef PointerVal,
947 const char *Name);
948LLVMValueRef LLVMBuildStore(LLVMBuilderRef, LLVMValueRef Val, LLVMValueRef Ptr);
949LLVMValueRef LLVMBuildGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
950 LLVMValueRef *Indices, unsigned NumIndices,
951 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +0000952LLVMValueRef LLVMBuildInBoundsGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
953 LLVMValueRef *Indices, unsigned NumIndices,
954 const char *Name);
955LLVMValueRef LLVMBuildStructGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
956 unsigned Idx, const char *Name);
957LLVMValueRef LLVMBuildGlobalString(LLVMBuilderRef B, const char *Str,
958 const char *Name);
959LLVMValueRef LLVMBuildGlobalStringPtr(LLVMBuilderRef B, const char *Str,
960 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000961
962/* Casts */
963LLVMValueRef LLVMBuildTrunc(LLVMBuilderRef, LLVMValueRef Val,
964 LLVMTypeRef DestTy, const char *Name);
965LLVMValueRef LLVMBuildZExt(LLVMBuilderRef, LLVMValueRef Val,
966 LLVMTypeRef DestTy, const char *Name);
967LLVMValueRef LLVMBuildSExt(LLVMBuilderRef, LLVMValueRef Val,
968 LLVMTypeRef DestTy, const char *Name);
969LLVMValueRef LLVMBuildFPToUI(LLVMBuilderRef, LLVMValueRef Val,
970 LLVMTypeRef DestTy, const char *Name);
971LLVMValueRef LLVMBuildFPToSI(LLVMBuilderRef, LLVMValueRef Val,
972 LLVMTypeRef DestTy, const char *Name);
973LLVMValueRef LLVMBuildUIToFP(LLVMBuilderRef, LLVMValueRef Val,
974 LLVMTypeRef DestTy, const char *Name);
975LLVMValueRef LLVMBuildSIToFP(LLVMBuilderRef, LLVMValueRef Val,
976 LLVMTypeRef DestTy, const char *Name);
977LLVMValueRef LLVMBuildFPTrunc(LLVMBuilderRef, LLVMValueRef Val,
978 LLVMTypeRef DestTy, const char *Name);
979LLVMValueRef LLVMBuildFPExt(LLVMBuilderRef, LLVMValueRef Val,
980 LLVMTypeRef DestTy, const char *Name);
981LLVMValueRef LLVMBuildPtrToInt(LLVMBuilderRef, LLVMValueRef Val,
982 LLVMTypeRef DestTy, const char *Name);
983LLVMValueRef LLVMBuildIntToPtr(LLVMBuilderRef, LLVMValueRef Val,
984 LLVMTypeRef DestTy, const char *Name);
985LLVMValueRef LLVMBuildBitCast(LLVMBuilderRef, LLVMValueRef Val,
986 LLVMTypeRef DestTy, const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +0000987LLVMValueRef LLVMBuildZExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
988 LLVMTypeRef DestTy, const char *Name);
989LLVMValueRef LLVMBuildSExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
990 LLVMTypeRef DestTy, const char *Name);
991LLVMValueRef LLVMBuildTruncOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
992 LLVMTypeRef DestTy, const char *Name);
Erick Tryzelaar31831792010-02-28 05:51:27 +0000993LLVMValueRef LLVMBuildCast(LLVMBuilderRef B, LLVMOpcode Op, LLVMValueRef Val,
994 LLVMTypeRef DestTy, const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +0000995LLVMValueRef LLVMBuildPointerCast(LLVMBuilderRef, LLVMValueRef Val,
996 LLVMTypeRef DestTy, const char *Name);
Duncan Sands9d786d72009-11-23 10:49:03 +0000997LLVMValueRef LLVMBuildIntCast(LLVMBuilderRef, LLVMValueRef Val, /*Signed cast!*/
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +0000998 LLVMTypeRef DestTy, const char *Name);
999LLVMValueRef LLVMBuildFPCast(LLVMBuilderRef, LLVMValueRef Val,
1000 LLVMTypeRef DestTy, const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +00001001
1002/* Comparisons */
1003LLVMValueRef LLVMBuildICmp(LLVMBuilderRef, LLVMIntPredicate Op,
1004 LLVMValueRef LHS, LLVMValueRef RHS,
1005 const char *Name);
1006LLVMValueRef LLVMBuildFCmp(LLVMBuilderRef, LLVMRealPredicate Op,
1007 LLVMValueRef LHS, LLVMValueRef RHS,
1008 const char *Name);
1009
1010/* Miscellaneous instructions */
1011LLVMValueRef LLVMBuildPhi(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
1012LLVMValueRef LLVMBuildCall(LLVMBuilderRef, LLVMValueRef Fn,
1013 LLVMValueRef *Args, unsigned NumArgs,
1014 const char *Name);
1015LLVMValueRef LLVMBuildSelect(LLVMBuilderRef, LLVMValueRef If,
1016 LLVMValueRef Then, LLVMValueRef Else,
1017 const char *Name);
1018LLVMValueRef LLVMBuildVAArg(LLVMBuilderRef, LLVMValueRef List, LLVMTypeRef Ty,
1019 const char *Name);
1020LLVMValueRef LLVMBuildExtractElement(LLVMBuilderRef, LLVMValueRef VecVal,
1021 LLVMValueRef Index, const char *Name);
1022LLVMValueRef LLVMBuildInsertElement(LLVMBuilderRef, LLVMValueRef VecVal,
1023 LLVMValueRef EltVal, LLVMValueRef Index,
1024 const char *Name);
1025LLVMValueRef LLVMBuildShuffleVector(LLVMBuilderRef, LLVMValueRef V1,
1026 LLVMValueRef V2, LLVMValueRef Mask,
1027 const char *Name);
Dan Gohmand5104a52008-11-03 22:55:43 +00001028LLVMValueRef LLVMBuildExtractValue(LLVMBuilderRef, LLVMValueRef AggVal,
1029 unsigned Index, const char *Name);
1030LLVMValueRef LLVMBuildInsertValue(LLVMBuilderRef, LLVMValueRef AggVal,
1031 LLVMValueRef EltVal, unsigned Index,
1032 const char *Name);
Gordon Henriksen76a03742007-09-18 03:18:57 +00001033
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00001034LLVMValueRef LLVMBuildIsNull(LLVMBuilderRef, LLVMValueRef Val,
1035 const char *Name);
1036LLVMValueRef LLVMBuildIsNotNull(LLVMBuilderRef, LLVMValueRef Val,
1037 const char *Name);
1038LLVMValueRef LLVMBuildPtrDiff(LLVMBuilderRef, LLVMValueRef LHS,
1039 LLVMValueRef RHS, const char *Name);
1040
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00001041
Gordon Henriksen0a68fe22007-12-12 01:04:30 +00001042/*===-- Module providers --------------------------------------------------===*/
1043
Jeffrey Yasskin091217b2010-01-27 20:34:15 +00001044/* Changes the type of M so it can be passed to FunctionPassManagers and the
1045 * JIT. They take ModuleProviders for historical reasons.
Gordon Henriksen0a68fe22007-12-12 01:04:30 +00001046 */
1047LLVMModuleProviderRef
1048LLVMCreateModuleProviderForExistingModule(LLVMModuleRef M);
1049
Jeffrey Yasskin091217b2010-01-27 20:34:15 +00001050/* Destroys the module M.
Gordon Henriksen0a68fe22007-12-12 01:04:30 +00001051 */
Jeffrey Yasskin091217b2010-01-27 20:34:15 +00001052void LLVMDisposeModuleProvider(LLVMModuleProviderRef M);
Gordon Henriksen0a68fe22007-12-12 01:04:30 +00001053
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00001054
1055/*===-- Memory buffers ----------------------------------------------------===*/
1056
Chris Lattner25963c62010-01-09 22:27:07 +00001057LLVMBool LLVMCreateMemoryBufferWithContentsOfFile(const char *Path,
1058 LLVMMemoryBufferRef *OutMemBuf,
1059 char **OutMessage);
1060LLVMBool LLVMCreateMemoryBufferWithSTDIN(LLVMMemoryBufferRef *OutMemBuf,
1061 char **OutMessage);
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00001062void LLVMDisposeMemoryBuffer(LLVMMemoryBufferRef MemBuf);
1063
Owen Anderson4698c5d2010-10-07 17:55:47 +00001064/*===-- Pass Registry -----------------------------------------------------===*/
1065
1066/** Return the global pass registry, for use with initialization functions.
1067 See llvm::PassRegistry::getPassRegistry. */
1068LLVMPassRegistryRef LLVMGetGlobalPassRegistry(void);
Gordon Henriksen878114b2008-03-16 04:20:44 +00001069
1070/*===-- Pass Managers -----------------------------------------------------===*/
1071
1072/** Constructs a new whole-module pass pipeline. This type of pipeline is
1073 suitable for link-time optimization and whole-module transformations.
1074 See llvm::PassManager::PassManager. */
Gordon Henriksena735a9c2008-05-04 12:55:34 +00001075LLVMPassManagerRef LLVMCreatePassManager(void);
Gordon Henriksen878114b2008-03-16 04:20:44 +00001076
1077/** Constructs a new function-by-function pass pipeline over the module
1078 provider. It does not take ownership of the module provider. This type of
1079 pipeline is suitable for code generation and JIT compilation tasks.
1080 See llvm::FunctionPassManager::FunctionPassManager. */
Erick Tryzelaarad0e0cb2010-03-02 23:58:54 +00001081LLVMPassManagerRef LLVMCreateFunctionPassManagerForModule(LLVMModuleRef M);
1082
1083/** Deprecated: Use LLVMCreateFunctionPassManagerForModule instead. */
Gordon Henriksen878114b2008-03-16 04:20:44 +00001084LLVMPassManagerRef LLVMCreateFunctionPassManager(LLVMModuleProviderRef MP);
1085
1086/** Initializes, executes on the provided module, and finalizes all of the
1087 passes scheduled in the pass manager. Returns 1 if any of the passes
1088 modified the module, 0 otherwise. See llvm::PassManager::run(Module&). */
Chris Lattner25963c62010-01-09 22:27:07 +00001089LLVMBool LLVMRunPassManager(LLVMPassManagerRef PM, LLVMModuleRef M);
Gordon Henriksen878114b2008-03-16 04:20:44 +00001090
1091/** Initializes all of the function passes scheduled in the function pass
1092 manager. Returns 1 if any of the passes modified the module, 0 otherwise.
1093 See llvm::FunctionPassManager::doInitialization. */
Chris Lattner25963c62010-01-09 22:27:07 +00001094LLVMBool LLVMInitializeFunctionPassManager(LLVMPassManagerRef FPM);
Gordon Henriksen878114b2008-03-16 04:20:44 +00001095
1096/** Executes all of the function passes scheduled in the function pass manager
1097 on the provided function. Returns 1 if any of the passes modified the
1098 function, false otherwise.
1099 See llvm::FunctionPassManager::run(Function&). */
Chris Lattner25963c62010-01-09 22:27:07 +00001100LLVMBool LLVMRunFunctionPassManager(LLVMPassManagerRef FPM, LLVMValueRef F);
Gordon Henriksen878114b2008-03-16 04:20:44 +00001101
1102/** Finalizes all of the function passes scheduled in in the function pass
1103 manager. Returns 1 if any of the passes modified the module, 0 otherwise.
1104 See llvm::FunctionPassManager::doFinalization. */
Chris Lattner25963c62010-01-09 22:27:07 +00001105LLVMBool LLVMFinalizeFunctionPassManager(LLVMPassManagerRef FPM);
Gordon Henriksen878114b2008-03-16 04:20:44 +00001106
1107/** Frees the memory of a pass pipeline. For function pipelines, does not free
1108 the module provider.
1109 See llvm::PassManagerBase::~PassManagerBase. */
1110void LLVMDisposePassManager(LLVMPassManagerRef PM);
1111
1112
Gordon Henriksen76a03742007-09-18 03:18:57 +00001113#ifdef __cplusplus
1114}
Gordon Henriksen76a03742007-09-18 03:18:57 +00001115
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001116namespace llvm {
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00001117 class MemoryBuffer;
Gordon Henriksen96571492008-03-16 15:55:43 +00001118 class PassManagerBase;
Gordon Henriksen0a68fe22007-12-12 01:04:30 +00001119
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00001120 #define DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \
1121 inline ty *unwrap(ref P) { \
1122 return reinterpret_cast<ty*>(P); \
1123 } \
1124 \
1125 inline ref wrap(const ty *P) { \
1126 return reinterpret_cast<ref>(const_cast<ty*>(P)); \
1127 }
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001128
Gordon Henriksen878114b2008-03-16 04:20:44 +00001129 #define DEFINE_ISA_CONVERSION_FUNCTIONS(ty, ref) \
1130 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \
1131 \
1132 template<typename T> \
1133 inline T *unwrap(ref P) { \
1134 return cast<T>(unwrap(P)); \
1135 }
1136
1137 #define DEFINE_STDCXX_CONVERSION_FUNCTIONS(ty, ref) \
1138 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \
1139 \
1140 template<typename T> \
1141 inline T *unwrap(ref P) { \
Chris Lattner7ba06612010-01-22 06:49:46 +00001142 T *Q = (T*)unwrap(P); \
Gordon Henriksen878114b2008-03-16 04:20:44 +00001143 assert(Q && "Invalid cast!"); \
1144 return Q; \
1145 }
1146
1147 DEFINE_ISA_CONVERSION_FUNCTIONS (Type, LLVMTypeRef )
1148 DEFINE_ISA_CONVERSION_FUNCTIONS (Value, LLVMValueRef )
Gordon Henriksen823f9732007-12-27 18:25:59 +00001149 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(Module, LLVMModuleRef )
1150 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(BasicBlock, LLVMBasicBlockRef )
Eric Christopher59278832008-08-08 19:39:37 +00001151 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(IRBuilder<>, LLVMBuilderRef )
Gordon Henriksen823f9732007-12-27 18:25:59 +00001152 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(MemoryBuffer, LLVMMemoryBufferRef )
Owen Anderson6773d382009-07-01 16:58:40 +00001153 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(LLVMContext, LLVMContextRef )
Erick Tryzelaar9f9857e2010-03-02 20:32:28 +00001154 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(Use, LLVMUseRef )
Gordon Henriksen878114b2008-03-16 04:20:44 +00001155 DEFINE_STDCXX_CONVERSION_FUNCTIONS(PassManagerBase, LLVMPassManagerRef )
Owen Anderson4698c5d2010-10-07 17:55:47 +00001156 DEFINE_STDCXX_CONVERSION_FUNCTIONS(PassRegistry, LLVMPassRegistryRef )
Jeffrey Yasskin091217b2010-01-27 20:34:15 +00001157 /* LLVMModuleProviderRef exists for historical reasons, but now just holds a
1158 * Module.
1159 */
1160 inline Module *unwrap(LLVMModuleProviderRef MP) {
1161 return reinterpret_cast<Module*>(MP);
1162 }
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001163
Gordon Henriksen878114b2008-03-16 04:20:44 +00001164 #undef DEFINE_STDCXX_CONVERSION_FUNCTIONS
1165 #undef DEFINE_ISA_CONVERSION_FUNCTIONS
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00001166 #undef DEFINE_SIMPLE_CONVERSION_FUNCTIONS
Erick Tryzelaar262332f2009-08-14 00:01:31 +00001167
1168 /* Specialized opaque context conversions.
1169 */
1170 inline LLVMContext **unwrap(LLVMContextRef* Tys) {
1171 return reinterpret_cast<LLVMContext**>(Tys);
1172 }
1173
1174 inline LLVMContextRef *wrap(const LLVMContext **Tys) {
1175 return reinterpret_cast<LLVMContextRef*>(const_cast<LLVMContext**>(Tys));
1176 }
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001177
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00001178 /* Specialized opaque type conversions.
1179 */
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001180 inline Type **unwrap(LLVMTypeRef* Tys) {
1181 return reinterpret_cast<Type**>(Tys);
1182 }
1183
Chris Lattner229907c2011-07-18 04:54:35 +00001184 inline LLVMTypeRef *wrap(Type **Tys) {
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001185 return reinterpret_cast<LLVMTypeRef*>(const_cast<Type**>(Tys));
1186 }
1187
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00001188 /* Specialized opaque value conversions.
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001189 */
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001190 inline Value **unwrap(LLVMValueRef *Vals) {
1191 return reinterpret_cast<Value**>(Vals);
1192 }
1193
1194 template<typename T>
1195 inline T **unwrap(LLVMValueRef *Vals, unsigned Length) {
1196 #if DEBUG
Chris Lattnerb7971152009-07-10 18:28:19 +00001197 for (LLVMValueRef *I = Vals, *E = Vals + Length; I != E; ++I)
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001198 cast<T>(*I);
1199 #endif
Hans Wennborg8f7edbf2011-06-04 16:00:19 +00001200 (void)Length;
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001201 return reinterpret_cast<T**>(Vals);
1202 }
1203
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001204 inline LLVMValueRef *wrap(const Value **Vals) {
1205 return reinterpret_cast<LLVMValueRef*>(const_cast<Value**>(Vals));
1206 }
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001207}
1208
1209#endif /* !defined(__cplusplus) */
1210
1211#endif /* !defined(LLVM_C_CORE_H) */