blob: 2eccc11aa468fa40e70172f2e49c07e0aed8d00c [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
71/**
Gordon Henriksena49d4352008-03-07 19:13:06 +000072 * When building recursive types using LLVMRefineType, LLVMTypeRef values may
73 * become invalid; use LLVMTypeHandleRef to resolve this problem. See the
74 * llvm::AbstractTypeHolder class.
Gordon Henriksen4a4d7352007-12-30 17:46:33 +000075 */
Gordon Henriksenffb48762007-10-07 00:13:35 +000076typedef struct LLVMOpaqueTypeHandle *LLVMTypeHandleRef;
Gordon Henriksen4a4d7352007-12-30 17:46:33 +000077
Gordon Henriksen76a03742007-09-18 03:18:57 +000078typedef struct LLVMOpaqueValue *LLVMValueRef;
Gordon Henriksenc23b66c2007-09-26 20:56:12 +000079typedef struct LLVMOpaqueBasicBlock *LLVMBasicBlockRef;
80typedef struct LLVMOpaqueBuilder *LLVMBuilderRef;
Gordon Henriksen34eb6d82007-12-19 22:30:40 +000081
Jeffrey Yasskin091217b2010-01-27 20:34:15 +000082/* Interface used to provide a module to JIT or interpreter. This is now just a
83 * synonym for llvm::Module, but we have to keep using the different type to
84 * keep binary compatibility.
Gordon Henriksen34eb6d82007-12-19 22:30:40 +000085 */
Gordon Henriksen0a68fe22007-12-12 01:04:30 +000086typedef struct LLVMOpaqueModuleProvider *LLVMModuleProviderRef;
Gordon Henriksen76a03742007-09-18 03:18:57 +000087
Gordon Henriksen34eb6d82007-12-19 22:30:40 +000088/* Used to provide a module to JIT or interpreter.
89 * See the llvm::MemoryBuffer class.
90 */
91typedef struct LLVMOpaqueMemoryBuffer *LLVMMemoryBufferRef;
92
Gordon Henriksen878114b2008-03-16 04:20:44 +000093/** See the llvm::PassManagerBase class. */
94typedef struct LLVMOpaquePassManager *LLVMPassManagerRef;
95
Owen Anderson4698c5d2010-10-07 17:55:47 +000096/** See the llvm::PassRegistry class. */
97typedef struct LLVMOpaquePassRegistry *LLVMPassRegistryRef;
98
Erick Tryzelaar9f9857e2010-03-02 20:32:28 +000099/** Used to get the users and usees of a Value. See the llvm::Use class. */
100typedef struct LLVMOpaqueUse *LLVMUseRef;
Chris Lattner40cf28d2009-10-12 04:01:02 +0000101
Gordon Henriksen76a03742007-09-18 03:18:57 +0000102typedef enum {
Devang Patel4c758ea2008-09-25 21:00:45 +0000103 LLVMZExtAttribute = 1<<0,
104 LLVMSExtAttribute = 1<<1,
105 LLVMNoReturnAttribute = 1<<2,
106 LLVMInRegAttribute = 1<<3,
107 LLVMStructRetAttribute = 1<<4,
108 LLVMNoUnwindAttribute = 1<<5,
109 LLVMNoAliasAttribute = 1<<6,
110 LLVMByValAttribute = 1<<7,
111 LLVMNestAttribute = 1<<8,
112 LLVMReadNoneAttribute = 1<<9,
Anton Korobeynikovc8ce7b082009-07-17 18:07:26 +0000113 LLVMReadOnlyAttribute = 1<<10,
Anton Korobeynikov9750be92009-07-17 18:57:16 +0000114 LLVMNoInlineAttribute = 1<<11,
115 LLVMAlwaysInlineAttribute = 1<<12,
116 LLVMOptimizeForSizeAttribute = 1<<13,
117 LLVMStackProtectAttribute = 1<<14,
118 LLVMStackProtectReqAttribute = 1<<15,
Erick Tryzelaar8f69fea2010-03-03 23:51:25 +0000119 LLVMAlignment = 31<<16,
Anton Korobeynikov9750be92009-07-17 18:57:16 +0000120 LLVMNoCaptureAttribute = 1<<21,
121 LLVMNoRedZoneAttribute = 1<<22,
122 LLVMNoImplicitFloatAttribute = 1<<23,
Jakob Stoklund Olesen74bb06c2010-02-06 01:16:28 +0000123 LLVMNakedAttribute = 1<<24,
Erick Tryzelaar8f69fea2010-03-03 23:51:25 +0000124 LLVMInlineHintAttribute = 1<<25,
125 LLVMStackAlignment = 7<<26
Devang Patel4c758ea2008-09-25 21:00:45 +0000126} LLVMAttribute;
Gordon Henriksen2d9cc212008-04-28 17:37:06 +0000127
128typedef enum {
Bill Wendlingda52cec2010-02-15 20:53:17 +0000129 /* Terminator Instructions */
Chris Lattner40cf28d2009-10-12 04:01:02 +0000130 LLVMRet = 1,
131 LLVMBr = 2,
132 LLVMSwitch = 3,
Bill Wendling07d6d762010-02-15 20:50:51 +0000133 LLVMIndirectBr = 4,
134 LLVMInvoke = 5,
135 LLVMUnwind = 6,
136 LLVMUnreachable = 7,
137
Bill Wendlingda52cec2010-02-15 20:53:17 +0000138 /* Standard Binary Operators */
Bill Wendling07d6d762010-02-15 20:50:51 +0000139 LLVMAdd = 8,
140 LLVMFAdd = 9,
141 LLVMSub = 10,
142 LLVMFSub = 11,
143 LLVMMul = 12,
144 LLVMFMul = 13,
145 LLVMUDiv = 14,
146 LLVMSDiv = 15,
147 LLVMFDiv = 16,
148 LLVMURem = 17,
149 LLVMSRem = 18,
150 LLVMFRem = 19,
151
Bill Wendlingda52cec2010-02-15 20:53:17 +0000152 /* Logical Operators */
Bill Wendling07d6d762010-02-15 20:50:51 +0000153 LLVMShl = 20,
154 LLVMLShr = 21,
155 LLVMAShr = 22,
156 LLVMAnd = 23,
157 LLVMOr = 24,
158 LLVMXor = 25,
159
Bill Wendlingda52cec2010-02-15 20:53:17 +0000160 /* Memory Operators */
Bill Wendling07d6d762010-02-15 20:50:51 +0000161 LLVMAlloca = 26,
162 LLVMLoad = 27,
163 LLVMStore = 28,
164 LLVMGetElementPtr = 29,
165
Bill Wendlingda52cec2010-02-15 20:53:17 +0000166 /* Cast Operators */
Erick Tryzelaar5bf1a322010-02-16 03:45:23 +0000167 LLVMTrunc = 30,
Bill Wendling07d6d762010-02-15 20:50:51 +0000168 LLVMZExt = 31,
169 LLVMSExt = 32,
170 LLVMFPToUI = 33,
171 LLVMFPToSI = 34,
172 LLVMUIToFP = 35,
173 LLVMSIToFP = 36,
174 LLVMFPTrunc = 37,
175 LLVMFPExt = 38,
176 LLVMPtrToInt = 39,
177 LLVMIntToPtr = 40,
178 LLVMBitCast = 41,
179
Bill Wendlingda52cec2010-02-15 20:53:17 +0000180 /* Other Operators */
Bill Wendling07d6d762010-02-15 20:50:51 +0000181 LLVMICmp = 42,
182 LLVMFCmp = 43,
183 LLVMPHI = 44,
184 LLVMCall = 45,
185 LLVMSelect = 46,
Bill Wendlingda52cec2010-02-15 20:53:17 +0000186 /* UserOp1 */
187 /* UserOp2 */
Bill Wendling07d6d762010-02-15 20:50:51 +0000188 LLVMVAArg = 49,
189 LLVMExtractElement = 50,
190 LLVMInsertElement = 51,
191 LLVMShuffleVector = 52,
192 LLVMExtractValue = 53,
193 LLVMInsertValue = 54
Chris Lattner40cf28d2009-10-12 04:01:02 +0000194} LLVMOpcode;
195
196typedef enum {
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000197 LLVMVoidTypeKind, /**< type with no size */
198 LLVMFloatTypeKind, /**< 32 bit floating point type */
199 LLVMDoubleTypeKind, /**< 64 bit floating point type */
200 LLVMX86_FP80TypeKind, /**< 80 bit floating point type (X87) */
201 LLVMFP128TypeKind, /**< 128 bit floating point type (112-bit mantissa)*/
202 LLVMPPC_FP128TypeKind, /**< 128 bit floating point type (two 64-bits) */
203 LLVMLabelTypeKind, /**< Labels */
204 LLVMIntegerTypeKind, /**< Arbitrary bit width integers */
205 LLVMFunctionTypeKind, /**< Functions */
206 LLVMStructTypeKind, /**< Structures */
207 LLVMArrayTypeKind, /**< Arrays */
208 LLVMPointerTypeKind, /**< Pointers */
209 LLVMOpaqueTypeKind, /**< Opaque: type with unknown structure */
Chris Lattnerdac44ec2009-07-15 22:00:31 +0000210 LLVMVectorTypeKind, /**< SIMD 'packed' format, or other vector type */
Dale Johannesenbaa5d042010-09-10 20:55:01 +0000211 LLVMMetadataTypeKind, /**< Metadata */
212 LLVMX86_MMXTypeKind /**< X86 MMX */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000213} LLVMTypeKind;
214
215typedef enum {
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000216 LLVMExternalLinkage, /**< Externally visible function */
Chris Lattner2dba0f02009-04-13 06:25:37 +0000217 LLVMAvailableExternallyLinkage,
Duncan Sands12da8ce2009-03-07 15:45:40 +0000218 LLVMLinkOnceAnyLinkage, /**< Keep one copy of function when linking (inline)*/
219 LLVMLinkOnceODRLinkage, /**< Same, but only replaced by something
220 equivalent. */
221 LLVMWeakAnyLinkage, /**< Keep one copy of function when linking (weak) */
222 LLVMWeakODRLinkage, /**< Same, but only replaced by something
223 equivalent. */
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000224 LLVMAppendingLinkage, /**< Special purpose, only applies to global arrays */
225 LLVMInternalLinkage, /**< Rename collisions when linking (static
226 functions) */
Duncan Sands12da8ce2009-03-07 15:45:40 +0000227 LLVMPrivateLinkage, /**< Like Internal, but omit from symbol table */
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000228 LLVMDLLImportLinkage, /**< Function to be imported from DLL */
229 LLVMDLLExportLinkage, /**< Function to be accessible from DLL */
Duncan Sandse2881052009-03-11 08:08:06 +0000230 LLVMExternalWeakLinkage,/**< ExternalWeak linkage description */
Jeffrey Yasskin091217b2010-01-27 20:34:15 +0000231 LLVMGhostLinkage, /**< Obsolete */
Bill Wendling002b1672009-07-20 18:22:52 +0000232 LLVMCommonLinkage, /**< Tentative definitions */
Bill Wendling03bcd6e2010-07-01 21:55:59 +0000233 LLVMLinkerPrivateLinkage, /**< Like Private, but linker removes. */
Bill Wendling578ee402010-08-20 22:05:50 +0000234 LLVMLinkerPrivateWeakLinkage, /**< Like LinkerPrivate, but is weak. */
235 LLVMLinkerPrivateWeakDefAutoLinkage /**< Like LinkerPrivateWeak, but possibly
236 hidden. */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000237} LLVMLinkage;
238
239typedef enum {
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000240 LLVMDefaultVisibility, /**< The GV is visible */
241 LLVMHiddenVisibility, /**< The GV is hidden */
242 LLVMProtectedVisibility /**< The GV is protected */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000243} LLVMVisibility;
244
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000245typedef enum {
246 LLVMCCallConv = 0,
247 LLVMFastCallConv = 8,
248 LLVMColdCallConv = 9,
249 LLVMX86StdcallCallConv = 64,
250 LLVMX86FastcallCallConv = 65
251} LLVMCallConv;
252
253typedef enum {
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000254 LLVMIntEQ = 32, /**< equal */
255 LLVMIntNE, /**< not equal */
256 LLVMIntUGT, /**< unsigned greater than */
257 LLVMIntUGE, /**< unsigned greater or equal */
258 LLVMIntULT, /**< unsigned less than */
259 LLVMIntULE, /**< unsigned less or equal */
260 LLVMIntSGT, /**< signed greater than */
261 LLVMIntSGE, /**< signed greater or equal */
262 LLVMIntSLT, /**< signed less than */
263 LLVMIntSLE /**< signed less or equal */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000264} LLVMIntPredicate;
265
266typedef enum {
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000267 LLVMRealPredicateFalse, /**< Always false (always folded) */
268 LLVMRealOEQ, /**< True if ordered and equal */
269 LLVMRealOGT, /**< True if ordered and greater than */
270 LLVMRealOGE, /**< True if ordered and greater than or equal */
271 LLVMRealOLT, /**< True if ordered and less than */
272 LLVMRealOLE, /**< True if ordered and less than or equal */
273 LLVMRealONE, /**< True if ordered and operands are unequal */
274 LLVMRealORD, /**< True if ordered (no nans) */
275 LLVMRealUNO, /**< True if unordered: isnan(X) | isnan(Y) */
276 LLVMRealUEQ, /**< True if unordered or equal */
277 LLVMRealUGT, /**< True if unordered or greater than */
278 LLVMRealUGE, /**< True if unordered, greater than, or equal */
279 LLVMRealULT, /**< True if unordered or less than */
280 LLVMRealULE, /**< True if unordered, less than, or equal */
281 LLVMRealUNE, /**< True if unordered or not equal */
282 LLVMRealPredicateTrue /**< Always true (always folded) */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000283} LLVMRealPredicate;
284
Nick Lewycky0db26542011-05-15 07:20:34 +0000285void LLVMInitializeCore(LLVMPassRegistryRef R);
286
Gordon Henriksen76a03742007-09-18 03:18:57 +0000287
Gordon Henriksen34eb6d82007-12-19 22:30:40 +0000288/*===-- Error handling ----------------------------------------------------===*/
289
290void LLVMDisposeMessage(char *Message);
291
292
Erick Tryzelaard8531fa2010-02-28 09:45:59 +0000293/*===-- Contexts ----------------------------------------------------------===*/
Gordon Henriksen76a03742007-09-18 03:18:57 +0000294
Owen Anderson6773d382009-07-01 16:58:40 +0000295/* Create and destroy contexts. */
Erick Tryzelaarf34cb0c2009-08-30 23:38:06 +0000296LLVMContextRef LLVMContextCreate(void);
297LLVMContextRef LLVMGetGlobalContext(void);
Owen Anderson6773d382009-07-01 16:58:40 +0000298void LLVMContextDispose(LLVMContextRef C);
299
Erick Tryzelaard8531fa2010-02-28 09:45:59 +0000300unsigned LLVMGetMDKindIDInContext(LLVMContextRef C, const char* Name,
301 unsigned SLen);
302unsigned LLVMGetMDKindID(const char* Name, unsigned SLen);
303
304/*===-- Modules -----------------------------------------------------------===*/
305
Gordon Henriksen76a03742007-09-18 03:18:57 +0000306/* Create and destroy modules. */
Gordon Henriksena49d4352008-03-07 19:13:06 +0000307/** See llvm::Module::Module. */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000308LLVMModuleRef LLVMModuleCreateWithName(const char *ModuleID);
Owen Anderson31d44e42009-07-02 07:17:57 +0000309LLVMModuleRef LLVMModuleCreateWithNameInContext(const char *ModuleID,
310 LLVMContextRef C);
Gordon Henriksena49d4352008-03-07 19:13:06 +0000311
312/** See llvm::Module::~Module. */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000313void LLVMDisposeModule(LLVMModuleRef M);
314
Gordon Henriksena49d4352008-03-07 19:13:06 +0000315/** Data layout. See Module::getDataLayout. */
Gordon Henriksen05568bb2007-12-27 20:13:47 +0000316const char *LLVMGetDataLayout(LLVMModuleRef M);
317void LLVMSetDataLayout(LLVMModuleRef M, const char *Triple);
318
Gordon Henriksena49d4352008-03-07 19:13:06 +0000319/** Target triple. See Module::getTargetTriple. */
Gordon Henriksen05568bb2007-12-27 20:13:47 +0000320const char *LLVMGetTarget(LLVMModuleRef M);
321void LLVMSetTarget(LLVMModuleRef M, const char *Triple);
322
Gordon Henriksena49d4352008-03-07 19:13:06 +0000323/** See Module::addTypeName. */
Chris Lattner25963c62010-01-09 22:27:07 +0000324LLVMBool LLVMAddTypeName(LLVMModuleRef M, const char *Name, LLVMTypeRef Ty);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000325void LLVMDeleteTypeName(LLVMModuleRef M, const char *Name);
Chris Lattner7f318242009-07-06 17:29:59 +0000326LLVMTypeRef LLVMGetTypeByName(LLVMModuleRef M, const char *Name);
Rafael Espindola7c0cb2b2011-02-18 16:35:37 +0000327const char *LLVMGetTypeName(LLVMModuleRef M, LLVMTypeRef Ty);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000328
Gordon Henriksen6c6075e2008-03-14 23:58:56 +0000329/** See Module::dump. */
330void LLVMDumpModule(LLVMModuleRef M);
331
Chris Lattner26941452010-04-10 17:52:58 +0000332/** See Module::setModuleInlineAsm. */
333void LLVMSetModuleInlineAsm(LLVMModuleRef M, const char *Asm);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000334
Chris Lattnera7e04b02010-11-28 20:03:44 +0000335/** See Module::getContext. */
336LLVMContextRef LLVMGetModuleContext(LLVMModuleRef M);
337
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000338/*===-- Types -------------------------------------------------------------===*/
Gordon Henriksen76a03742007-09-18 03:18:57 +0000339
340/* LLVM types conform to the following hierarchy:
341 *
342 * types:
343 * integer type
344 * real type
345 * function type
346 * sequence types:
347 * array type
348 * pointer type
349 * vector type
350 * void type
351 * label type
352 * opaque type
353 */
354
Gordon Henriksena49d4352008-03-07 19:13:06 +0000355/** See llvm::LLVMTypeKind::getTypeID. */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000356LLVMTypeKind LLVMGetTypeKind(LLVMTypeRef Ty);
Gordon Henriksena49d4352008-03-07 19:13:06 +0000357
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000358/** See llvm::LLVMType::getContext. */
359LLVMContextRef LLVMGetTypeContext(LLVMTypeRef Ty);
360
Gordon Henriksen76a03742007-09-18 03:18:57 +0000361/* Operations on integer types */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000362LLVMTypeRef LLVMInt1TypeInContext(LLVMContextRef C);
363LLVMTypeRef LLVMInt8TypeInContext(LLVMContextRef C);
364LLVMTypeRef LLVMInt16TypeInContext(LLVMContextRef C);
365LLVMTypeRef LLVMInt32TypeInContext(LLVMContextRef C);
366LLVMTypeRef LLVMInt64TypeInContext(LLVMContextRef C);
367LLVMTypeRef LLVMIntTypeInContext(LLVMContextRef C, unsigned NumBits);
368
Gordon Henriksena735a9c2008-05-04 12:55:34 +0000369LLVMTypeRef LLVMInt1Type(void);
370LLVMTypeRef LLVMInt8Type(void);
371LLVMTypeRef LLVMInt16Type(void);
372LLVMTypeRef LLVMInt32Type(void);
373LLVMTypeRef LLVMInt64Type(void);
Gordon Henriksened7beaa2007-10-06 16:05:20 +0000374LLVMTypeRef LLVMIntType(unsigned NumBits);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000375unsigned LLVMGetIntTypeWidth(LLVMTypeRef IntegerTy);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000376
377/* Operations on real types */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000378LLVMTypeRef LLVMFloatTypeInContext(LLVMContextRef C);
379LLVMTypeRef LLVMDoubleTypeInContext(LLVMContextRef C);
380LLVMTypeRef LLVMX86FP80TypeInContext(LLVMContextRef C);
381LLVMTypeRef LLVMFP128TypeInContext(LLVMContextRef C);
382LLVMTypeRef LLVMPPCFP128TypeInContext(LLVMContextRef C);
383
Gordon Henriksena735a9c2008-05-04 12:55:34 +0000384LLVMTypeRef LLVMFloatType(void);
385LLVMTypeRef LLVMDoubleType(void);
386LLVMTypeRef LLVMX86FP80Type(void);
387LLVMTypeRef LLVMFP128Type(void);
388LLVMTypeRef LLVMPPCFP128Type(void);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000389
390/* Operations on function types */
Gordon Henriksened7beaa2007-10-06 16:05:20 +0000391LLVMTypeRef LLVMFunctionType(LLVMTypeRef ReturnType,
392 LLVMTypeRef *ParamTypes, unsigned ParamCount,
Chris Lattner25963c62010-01-09 22:27:07 +0000393 LLVMBool IsVarArg);
394LLVMBool LLVMIsFunctionVarArg(LLVMTypeRef FunctionTy);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000395LLVMTypeRef LLVMGetReturnType(LLVMTypeRef FunctionTy);
396unsigned LLVMCountParamTypes(LLVMTypeRef FunctionTy);
397void LLVMGetParamTypes(LLVMTypeRef FunctionTy, LLVMTypeRef *Dest);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000398
399/* Operations on struct types */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000400LLVMTypeRef LLVMStructTypeInContext(LLVMContextRef C, LLVMTypeRef *ElementTypes,
Chris Lattner25963c62010-01-09 22:27:07 +0000401 unsigned ElementCount, LLVMBool Packed);
Gordon Henriksened7beaa2007-10-06 16:05:20 +0000402LLVMTypeRef LLVMStructType(LLVMTypeRef *ElementTypes, unsigned ElementCount,
Chris Lattner25963c62010-01-09 22:27:07 +0000403 LLVMBool Packed);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000404unsigned LLVMCountStructElementTypes(LLVMTypeRef StructTy);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000405void LLVMGetStructElementTypes(LLVMTypeRef StructTy, LLVMTypeRef *Dest);
Chris Lattner25963c62010-01-09 22:27:07 +0000406LLVMBool LLVMIsPackedStruct(LLVMTypeRef StructTy);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000407
408/* Operations on array, pointer, and vector types (sequence types) */
Gordon Henriksened7beaa2007-10-06 16:05:20 +0000409LLVMTypeRef LLVMArrayType(LLVMTypeRef ElementType, unsigned ElementCount);
Gordon Henriksen5a3fe032007-12-17 16:08:32 +0000410LLVMTypeRef LLVMPointerType(LLVMTypeRef ElementType, unsigned AddressSpace);
Gordon Henriksened7beaa2007-10-06 16:05:20 +0000411LLVMTypeRef LLVMVectorType(LLVMTypeRef ElementType, unsigned ElementCount);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000412
413LLVMTypeRef LLVMGetElementType(LLVMTypeRef Ty);
414unsigned LLVMGetArrayLength(LLVMTypeRef ArrayTy);
Gordon Henriksen5a3fe032007-12-17 16:08:32 +0000415unsigned LLVMGetPointerAddressSpace(LLVMTypeRef PointerTy);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000416unsigned LLVMGetVectorSize(LLVMTypeRef VectorTy);
417
418/* Operations on other types */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000419LLVMTypeRef LLVMVoidTypeInContext(LLVMContextRef C);
420LLVMTypeRef LLVMLabelTypeInContext(LLVMContextRef C);
421LLVMTypeRef LLVMOpaqueTypeInContext(LLVMContextRef C);
Dale Johannesen95b67af2010-09-10 21:58:02 +0000422LLVMTypeRef LLVMX86MMXTypeInContext(LLVMContextRef C);
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000423
Gordon Henriksena735a9c2008-05-04 12:55:34 +0000424LLVMTypeRef LLVMVoidType(void);
425LLVMTypeRef LLVMLabelType(void);
426LLVMTypeRef LLVMOpaqueType(void);
Dale Johannesen95b67af2010-09-10 21:58:02 +0000427LLVMTypeRef LLVMX86MMXType(void);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000428
Gordon Henriksenffb48762007-10-07 00:13:35 +0000429/* Operations on type handles */
430LLVMTypeHandleRef LLVMCreateTypeHandle(LLVMTypeRef PotentiallyAbstractTy);
431void LLVMRefineType(LLVMTypeRef AbstractTy, LLVMTypeRef ConcreteTy);
432LLVMTypeRef LLVMResolveTypeHandle(LLVMTypeHandleRef TypeHandle);
433void LLVMDisposeTypeHandle(LLVMTypeHandleRef TypeHandle);
434
Gordon Henriksen76a03742007-09-18 03:18:57 +0000435
436/*===-- Values ------------------------------------------------------------===*/
437
438/* The bulk of LLVM's object model consists of values, which comprise a very
439 * rich type hierarchy.
Gordon Henriksen76a03742007-09-18 03:18:57 +0000440 */
441
Gordon Henriksen29e38942008-12-19 18:39:45 +0000442#define LLVM_FOR_EACH_VALUE_SUBCLASS(macro) \
443 macro(Argument) \
444 macro(BasicBlock) \
445 macro(InlineAsm) \
446 macro(User) \
447 macro(Constant) \
448 macro(ConstantAggregateZero) \
449 macro(ConstantArray) \
450 macro(ConstantExpr) \
451 macro(ConstantFP) \
452 macro(ConstantInt) \
453 macro(ConstantPointerNull) \
454 macro(ConstantStruct) \
455 macro(ConstantVector) \
456 macro(GlobalValue) \
457 macro(Function) \
458 macro(GlobalAlias) \
459 macro(GlobalVariable) \
460 macro(UndefValue) \
461 macro(Instruction) \
462 macro(BinaryOperator) \
463 macro(CallInst) \
464 macro(IntrinsicInst) \
465 macro(DbgInfoIntrinsic) \
466 macro(DbgDeclareInst) \
Gordon Henriksen29e38942008-12-19 18:39:45 +0000467 macro(EHSelectorInst) \
468 macro(MemIntrinsic) \
469 macro(MemCpyInst) \
470 macro(MemMoveInst) \
471 macro(MemSetInst) \
472 macro(CmpInst) \
473 macro(FCmpInst) \
474 macro(ICmpInst) \
Gordon Henriksen29e38942008-12-19 18:39:45 +0000475 macro(ExtractElementInst) \
476 macro(GetElementPtrInst) \
477 macro(InsertElementInst) \
478 macro(InsertValueInst) \
479 macro(PHINode) \
480 macro(SelectInst) \
481 macro(ShuffleVectorInst) \
482 macro(StoreInst) \
483 macro(TerminatorInst) \
484 macro(BranchInst) \
485 macro(InvokeInst) \
486 macro(ReturnInst) \
487 macro(SwitchInst) \
488 macro(UnreachableInst) \
489 macro(UnwindInst) \
490 macro(UnaryInstruction) \
Victor Hernandez8acf2952009-10-23 21:09:37 +0000491 macro(AllocaInst) \
Gordon Henriksen29e38942008-12-19 18:39:45 +0000492 macro(CastInst) \
Gordon Henriksen05a868f2008-12-19 18:51:17 +0000493 macro(BitCastInst) \
494 macro(FPExtInst) \
495 macro(FPToSIInst) \
496 macro(FPToUIInst) \
497 macro(FPTruncInst) \
498 macro(IntToPtrInst) \
499 macro(PtrToIntInst) \
500 macro(SExtInst) \
501 macro(SIToFPInst) \
502 macro(TruncInst) \
503 macro(UIToFPInst) \
504 macro(ZExtInst) \
505 macro(ExtractValueInst) \
Gordon Henriksen05a868f2008-12-19 18:51:17 +0000506 macro(LoadInst) \
507 macro(VAArgInst)
Gordon Henriksen29e38942008-12-19 18:39:45 +0000508
Gordon Henriksen76a03742007-09-18 03:18:57 +0000509/* Operations on all values */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000510LLVMTypeRef LLVMTypeOf(LLVMValueRef Val);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000511const char *LLVMGetValueName(LLVMValueRef Val);
512void LLVMSetValueName(LLVMValueRef Val, const char *Name);
Gordon Henriksen1d0d24c2007-10-06 00:08:49 +0000513void LLVMDumpValue(LLVMValueRef Val);
Chris Lattner40cf28d2009-10-12 04:01:02 +0000514void LLVMReplaceAllUsesWith(LLVMValueRef OldVal, LLVMValueRef NewVal);
Erick Tryzelaard8531fa2010-02-28 09:45:59 +0000515int LLVMHasMetadata(LLVMValueRef Val);
516LLVMValueRef LLVMGetMetadata(LLVMValueRef Val, unsigned KindID);
517void LLVMSetMetadata(LLVMValueRef Val, unsigned KindID, LLVMValueRef Node);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000518
Gordon Henriksen29e38942008-12-19 18:39:45 +0000519/* Conversion functions. Return the input value if it is an instance of the
520 specified class, otherwise NULL. See llvm::dyn_cast_or_null<>. */
521#define LLVM_DECLARE_VALUE_CAST(name) \
522 LLVMValueRef LLVMIsA##name(LLVMValueRef Val);
523LLVM_FOR_EACH_VALUE_SUBCLASS(LLVM_DECLARE_VALUE_CAST)
524
Chris Lattner40cf28d2009-10-12 04:01:02 +0000525/* Operations on Uses */
Erick Tryzelaar9f9857e2010-03-02 20:32:28 +0000526LLVMUseRef LLVMGetFirstUse(LLVMValueRef Val);
527LLVMUseRef LLVMGetNextUse(LLVMUseRef U);
528LLVMValueRef LLVMGetUser(LLVMUseRef U);
529LLVMValueRef LLVMGetUsedValue(LLVMUseRef U);
Chris Lattner40cf28d2009-10-12 04:01:02 +0000530
531/* Operations on Users */
532LLVMValueRef LLVMGetOperand(LLVMValueRef Val, unsigned Index);
Erick Tryzelaarb4d48702010-08-20 14:51:22 +0000533void LLVMSetOperand(LLVMValueRef User, unsigned Index, LLVMValueRef Val);
534int LLVMGetNumOperands(LLVMValueRef Val);
Chris Lattner40cf28d2009-10-12 04:01:02 +0000535
Gordon Henriksen76a03742007-09-18 03:18:57 +0000536/* Operations on constants of any type */
Gordon Henriksen1046c732007-10-06 15:11:06 +0000537LLVMValueRef LLVMConstNull(LLVMTypeRef Ty); /* all zeroes */
538LLVMValueRef LLVMConstAllOnes(LLVMTypeRef Ty); /* only for int/vector */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000539LLVMValueRef LLVMGetUndef(LLVMTypeRef Ty);
Chris Lattner25963c62010-01-09 22:27:07 +0000540LLVMBool LLVMIsConstant(LLVMValueRef Val);
541LLVMBool LLVMIsNull(LLVMValueRef Val);
542LLVMBool LLVMIsUndef(LLVMValueRef Val);
Chris Lattner7f318242009-07-06 17:29:59 +0000543LLVMValueRef LLVMConstPointerNull(LLVMTypeRef Ty);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000544
Erick Tryzelaard8531fa2010-02-28 09:45:59 +0000545/* Operations on metadata */
546LLVMValueRef LLVMMDStringInContext(LLVMContextRef C, const char *Str,
547 unsigned SLen);
548LLVMValueRef LLVMMDString(const char *Str, unsigned SLen);
549LLVMValueRef LLVMMDNodeInContext(LLVMContextRef C, LLVMValueRef *Vals,
550 unsigned Count);
551LLVMValueRef LLVMMDNode(LLVMValueRef *Vals, unsigned Count);
552
Gordon Henriksen76a03742007-09-18 03:18:57 +0000553/* Operations on scalar constants */
Gordon Henriksen1046c732007-10-06 15:11:06 +0000554LLVMValueRef LLVMConstInt(LLVMTypeRef IntTy, unsigned long long N,
Chris Lattner25963c62010-01-09 22:27:07 +0000555 LLVMBool SignExtend);
Chris Lattner4329e072010-11-23 02:47:22 +0000556LLVMValueRef LLVMConstIntOfArbitraryPrecision(LLVMTypeRef IntTy,
557 unsigned NumWords,
558 const uint64_t Words[]);
Erick Tryzelaardd991352009-08-16 23:36:46 +0000559LLVMValueRef LLVMConstIntOfString(LLVMTypeRef IntTy, const char *Text,
560 uint8_t Radix);
561LLVMValueRef LLVMConstIntOfStringAndSize(LLVMTypeRef IntTy, const char *Text,
562 unsigned SLen, uint8_t Radix);
Gordon Henriksen1046c732007-10-06 15:11:06 +0000563LLVMValueRef LLVMConstReal(LLVMTypeRef RealTy, double N);
Gordon Henriksen931e1212008-02-02 01:07:50 +0000564LLVMValueRef LLVMConstRealOfString(LLVMTypeRef RealTy, const char *Text);
Erick Tryzelaardd991352009-08-16 23:36:46 +0000565LLVMValueRef LLVMConstRealOfStringAndSize(LLVMTypeRef RealTy, const char *Text,
566 unsigned SLen);
Chris Lattner40cf28d2009-10-12 04:01:02 +0000567unsigned long long LLVMConstIntGetZExtValue(LLVMValueRef ConstantVal);
568long long LLVMConstIntGetSExtValue(LLVMValueRef ConstantVal);
Erick Tryzelaardd991352009-08-16 23:36:46 +0000569
Gordon Henriksen76a03742007-09-18 03:18:57 +0000570
571/* Operations on composite constants */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000572LLVMValueRef LLVMConstStringInContext(LLVMContextRef C, const char *Str,
Chris Lattner25963c62010-01-09 22:27:07 +0000573 unsigned Length, LLVMBool DontNullTerminate);
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000574LLVMValueRef LLVMConstStructInContext(LLVMContextRef C,
575 LLVMValueRef *ConstantVals,
Chris Lattner25963c62010-01-09 22:27:07 +0000576 unsigned Count, LLVMBool Packed);
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000577
Gordon Henriksen1046c732007-10-06 15:11:06 +0000578LLVMValueRef LLVMConstString(const char *Str, unsigned Length,
Chris Lattner25963c62010-01-09 22:27:07 +0000579 LLVMBool DontNullTerminate);
Gordon Henriksen2ad5aef2008-04-25 03:21:19 +0000580LLVMValueRef LLVMConstArray(LLVMTypeRef ElementTy,
Gordon Henriksen1046c732007-10-06 15:11:06 +0000581 LLVMValueRef *ConstantVals, unsigned Length);
582LLVMValueRef LLVMConstStruct(LLVMValueRef *ConstantVals, unsigned Count,
Chris Lattner25963c62010-01-09 22:27:07 +0000583 LLVMBool Packed);
Gordon Henriksen1046c732007-10-06 15:11:06 +0000584LLVMValueRef LLVMConstVector(LLVMValueRef *ScalarConstantVals, unsigned Size);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000585
Gordon Henriksen7ce31762007-10-06 14:29:36 +0000586/* Constant expressions */
Chris Lattner40cf28d2009-10-12 04:01:02 +0000587LLVMOpcode LLVMGetConstOpcode(LLVMValueRef ConstantVal);
Erick Tryzelaarfd529d72009-08-19 08:36:49 +0000588LLVMValueRef LLVMAlignOf(LLVMTypeRef Ty);
Gordon Henriksen7ce31762007-10-06 14:29:36 +0000589LLVMValueRef LLVMSizeOf(LLVMTypeRef Ty);
590LLVMValueRef LLVMConstNeg(LLVMValueRef ConstantVal);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +0000591LLVMValueRef LLVMConstNSWNeg(LLVMValueRef ConstantVal);
592LLVMValueRef LLVMConstNUWNeg(LLVMValueRef ConstantVal);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +0000593LLVMValueRef LLVMConstFNeg(LLVMValueRef ConstantVal);
Gordon Henriksen7ce31762007-10-06 14:29:36 +0000594LLVMValueRef LLVMConstNot(LLVMValueRef ConstantVal);
595LLVMValueRef LLVMConstAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Dan Gohmane4ca02d2009-09-03 23:34:49 +0000596LLVMValueRef LLVMConstNSWAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +0000597LLVMValueRef LLVMConstNUWAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +0000598LLVMValueRef LLVMConstFAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Gordon Henriksen7ce31762007-10-06 14:29:36 +0000599LLVMValueRef LLVMConstSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +0000600LLVMValueRef LLVMConstNSWSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
601LLVMValueRef LLVMConstNUWSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +0000602LLVMValueRef LLVMConstFSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Gordon Henriksen7ce31762007-10-06 14:29:36 +0000603LLVMValueRef LLVMConstMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +0000604LLVMValueRef LLVMConstNSWMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
605LLVMValueRef LLVMConstNUWMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +0000606LLVMValueRef LLVMConstFMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Gordon Henriksen7ce31762007-10-06 14:29:36 +0000607LLVMValueRef LLVMConstUDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
608LLVMValueRef LLVMConstSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Dan Gohmane4ca02d2009-09-03 23:34:49 +0000609LLVMValueRef LLVMConstExactSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Gordon Henriksen7ce31762007-10-06 14:29:36 +0000610LLVMValueRef LLVMConstFDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
611LLVMValueRef LLVMConstURem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
612LLVMValueRef LLVMConstSRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
613LLVMValueRef LLVMConstFRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
614LLVMValueRef LLVMConstAnd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
615LLVMValueRef LLVMConstOr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
616LLVMValueRef LLVMConstXor(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
617LLVMValueRef LLVMConstICmp(LLVMIntPredicate Predicate,
618 LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
619LLVMValueRef LLVMConstFCmp(LLVMRealPredicate Predicate,
620 LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
621LLVMValueRef LLVMConstShl(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
622LLVMValueRef LLVMConstLShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
623LLVMValueRef LLVMConstAShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
624LLVMValueRef LLVMConstGEP(LLVMValueRef ConstantVal,
625 LLVMValueRef *ConstantIndices, unsigned NumIndices);
Dan Gohmane4ca02d2009-09-03 23:34:49 +0000626LLVMValueRef LLVMConstInBoundsGEP(LLVMValueRef ConstantVal,
627 LLVMValueRef *ConstantIndices,
628 unsigned NumIndices);
Gordon Henriksen7ce31762007-10-06 14:29:36 +0000629LLVMValueRef LLVMConstTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
630LLVMValueRef LLVMConstSExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
631LLVMValueRef LLVMConstZExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
632LLVMValueRef LLVMConstFPTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
633LLVMValueRef LLVMConstFPExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
634LLVMValueRef LLVMConstUIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
635LLVMValueRef LLVMConstSIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
636LLVMValueRef LLVMConstFPToUI(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
637LLVMValueRef LLVMConstFPToSI(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
638LLVMValueRef LLVMConstPtrToInt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
639LLVMValueRef LLVMConstIntToPtr(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
640LLVMValueRef LLVMConstBitCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +0000641LLVMValueRef LLVMConstZExtOrBitCast(LLVMValueRef ConstantVal,
642 LLVMTypeRef ToType);
643LLVMValueRef LLVMConstSExtOrBitCast(LLVMValueRef ConstantVal,
644 LLVMTypeRef ToType);
645LLVMValueRef LLVMConstTruncOrBitCast(LLVMValueRef ConstantVal,
646 LLVMTypeRef ToType);
647LLVMValueRef LLVMConstPointerCast(LLVMValueRef ConstantVal,
648 LLVMTypeRef ToType);
649LLVMValueRef LLVMConstIntCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType,
Chris Lattner25963c62010-01-09 22:27:07 +0000650 LLVMBool isSigned);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +0000651LLVMValueRef LLVMConstFPCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
Gordon Henriksen7ce31762007-10-06 14:29:36 +0000652LLVMValueRef LLVMConstSelect(LLVMValueRef ConstantCondition,
653 LLVMValueRef ConstantIfTrue,
654 LLVMValueRef ConstantIfFalse);
655LLVMValueRef LLVMConstExtractElement(LLVMValueRef VectorConstant,
656 LLVMValueRef IndexConstant);
657LLVMValueRef LLVMConstInsertElement(LLVMValueRef VectorConstant,
658 LLVMValueRef ElementValueConstant,
659 LLVMValueRef IndexConstant);
660LLVMValueRef LLVMConstShuffleVector(LLVMValueRef VectorAConstant,
661 LLVMValueRef VectorBConstant,
662 LLVMValueRef MaskConstant);
Dan Gohmand5104a52008-11-03 22:55:43 +0000663LLVMValueRef LLVMConstExtractValue(LLVMValueRef AggConstant, unsigned *IdxList,
664 unsigned NumIdx);
665LLVMValueRef LLVMConstInsertValue(LLVMValueRef AggConstant,
666 LLVMValueRef ElementValueConstant,
667 unsigned *IdxList, unsigned NumIdx);
Chris Lattner25963c62010-01-09 22:27:07 +0000668LLVMValueRef LLVMConstInlineAsm(LLVMTypeRef Ty,
Chris Lattner3d1f5522008-12-17 21:39:50 +0000669 const char *AsmString, const char *Constraints,
Chris Lattner25963c62010-01-09 22:27:07 +0000670 LLVMBool HasSideEffects, LLVMBool IsAlignStack);
Erick Tryzelaar0fb26ef2010-02-28 09:46:06 +0000671LLVMValueRef LLVMBlockAddress(LLVMValueRef F, LLVMBasicBlockRef BB);
Gordon Henriksen7ce31762007-10-06 14:29:36 +0000672
Gordon Henriksen76a03742007-09-18 03:18:57 +0000673/* Operations on global variables, functions, and aliases (globals) */
Gordon Henriksen265f7802008-03-19 01:11:35 +0000674LLVMModuleRef LLVMGetGlobalParent(LLVMValueRef Global);
Chris Lattner25963c62010-01-09 22:27:07 +0000675LLVMBool LLVMIsDeclaration(LLVMValueRef Global);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000676LLVMLinkage LLVMGetLinkage(LLVMValueRef Global);
677void LLVMSetLinkage(LLVMValueRef Global, LLVMLinkage Linkage);
678const char *LLVMGetSection(LLVMValueRef Global);
679void LLVMSetSection(LLVMValueRef Global, const char *Section);
680LLVMVisibility LLVMGetVisibility(LLVMValueRef Global);
681void LLVMSetVisibility(LLVMValueRef Global, LLVMVisibility Viz);
682unsigned LLVMGetAlignment(LLVMValueRef Global);
683void LLVMSetAlignment(LLVMValueRef Global, unsigned Bytes);
684
685/* Operations on global variables */
686LLVMValueRef LLVMAddGlobal(LLVMModuleRef M, LLVMTypeRef Ty, const char *Name);
Erick Tryzelaar06894b32010-02-28 09:46:13 +0000687LLVMValueRef LLVMAddGlobalInAddressSpace(LLVMModuleRef M, LLVMTypeRef Ty,
688 const char *Name,
689 unsigned AddressSpace);
Gordon Henriksen783f7bb2007-10-08 03:45:09 +0000690LLVMValueRef LLVMGetNamedGlobal(LLVMModuleRef M, const char *Name);
Gordon Henriksen07a45f42008-03-23 22:21:29 +0000691LLVMValueRef LLVMGetFirstGlobal(LLVMModuleRef M);
692LLVMValueRef LLVMGetLastGlobal(LLVMModuleRef M);
693LLVMValueRef LLVMGetNextGlobal(LLVMValueRef GlobalVar);
694LLVMValueRef LLVMGetPreviousGlobal(LLVMValueRef GlobalVar);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000695void LLVMDeleteGlobal(LLVMValueRef GlobalVar);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000696LLVMValueRef LLVMGetInitializer(LLVMValueRef GlobalVar);
697void LLVMSetInitializer(LLVMValueRef GlobalVar, LLVMValueRef ConstantVal);
Chris Lattner25963c62010-01-09 22:27:07 +0000698LLVMBool LLVMIsThreadLocal(LLVMValueRef GlobalVar);
699void LLVMSetThreadLocal(LLVMValueRef GlobalVar, LLVMBool IsThreadLocal);
700LLVMBool LLVMIsGlobalConstant(LLVMValueRef GlobalVar);
701void LLVMSetGlobalConstant(LLVMValueRef GlobalVar, LLVMBool IsConstant);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000702
Chris Lattner3d1f5522008-12-17 21:39:50 +0000703/* Operations on aliases */
704LLVMValueRef LLVMAddAlias(LLVMModuleRef M, LLVMTypeRef Ty, LLVMValueRef Aliasee,
705 const char *Name);
706
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000707/* Operations on functions */
708LLVMValueRef LLVMAddFunction(LLVMModuleRef M, const char *Name,
709 LLVMTypeRef FunctionTy);
Gordon Henriksen783f7bb2007-10-08 03:45:09 +0000710LLVMValueRef LLVMGetNamedFunction(LLVMModuleRef M, const char *Name);
Gordon Henriksen054817c2008-03-19 03:47:18 +0000711LLVMValueRef LLVMGetFirstFunction(LLVMModuleRef M);
712LLVMValueRef LLVMGetLastFunction(LLVMModuleRef M);
713LLVMValueRef LLVMGetNextFunction(LLVMValueRef Fn);
714LLVMValueRef LLVMGetPreviousFunction(LLVMValueRef Fn);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000715void LLVMDeleteFunction(LLVMValueRef Fn);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000716unsigned LLVMGetIntrinsicID(LLVMValueRef Fn);
717unsigned LLVMGetFunctionCallConv(LLVMValueRef Fn);
718void LLVMSetFunctionCallConv(LLVMValueRef Fn, unsigned CC);
Gordon Henriksend930f912008-08-17 18:44:35 +0000719const char *LLVMGetGC(LLVMValueRef Fn);
720void LLVMSetGC(LLVMValueRef Fn, const char *Name);
Duncan Sands7374a012009-05-06 12:21:17 +0000721void LLVMAddFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA);
Chris Lattner40cf28d2009-10-12 04:01:02 +0000722LLVMAttribute LLVMGetFunctionAttr(LLVMValueRef Fn);
Duncan Sands7374a012009-05-06 12:21:17 +0000723void LLVMRemoveFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000724
Gordon Henriksen265f7802008-03-19 01:11:35 +0000725/* Operations on parameters */
726unsigned LLVMCountParams(LLVMValueRef Fn);
727void LLVMGetParams(LLVMValueRef Fn, LLVMValueRef *Params);
728LLVMValueRef LLVMGetParam(LLVMValueRef Fn, unsigned Index);
729LLVMValueRef LLVMGetParamParent(LLVMValueRef Inst);
Gordon Henriksen07a45f42008-03-23 22:21:29 +0000730LLVMValueRef LLVMGetFirstParam(LLVMValueRef Fn);
731LLVMValueRef LLVMGetLastParam(LLVMValueRef Fn);
732LLVMValueRef LLVMGetNextParam(LLVMValueRef Arg);
733LLVMValueRef LLVMGetPreviousParam(LLVMValueRef Arg);
Devang Patel4c758ea2008-09-25 21:00:45 +0000734void LLVMAddAttribute(LLVMValueRef Arg, LLVMAttribute PA);
735void LLVMRemoveAttribute(LLVMValueRef Arg, LLVMAttribute PA);
Chris Lattner40cf28d2009-10-12 04:01:02 +0000736LLVMAttribute LLVMGetAttribute(LLVMValueRef Arg);
Gordon Henriksen2d9cc212008-04-28 17:37:06 +0000737void LLVMSetParamAlignment(LLVMValueRef Arg, unsigned align);
Gordon Henriksen265f7802008-03-19 01:11:35 +0000738
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000739/* Operations on basic blocks */
Gordon Henriksen07a45f42008-03-23 22:21:29 +0000740LLVMValueRef LLVMBasicBlockAsValue(LLVMBasicBlockRef BB);
Chris Lattner25963c62010-01-09 22:27:07 +0000741LLVMBool LLVMValueIsBasicBlock(LLVMValueRef Val);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000742LLVMBasicBlockRef LLVMValueAsBasicBlock(LLVMValueRef Val);
Gordon Henriksen07a45f42008-03-23 22:21:29 +0000743LLVMValueRef LLVMGetBasicBlockParent(LLVMBasicBlockRef BB);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000744unsigned LLVMCountBasicBlocks(LLVMValueRef Fn);
745void LLVMGetBasicBlocks(LLVMValueRef Fn, LLVMBasicBlockRef *BasicBlocks);
Gordon Henriksen054817c2008-03-19 03:47:18 +0000746LLVMBasicBlockRef LLVMGetFirstBasicBlock(LLVMValueRef Fn);
747LLVMBasicBlockRef LLVMGetLastBasicBlock(LLVMValueRef Fn);
748LLVMBasicBlockRef LLVMGetNextBasicBlock(LLVMBasicBlockRef BB);
749LLVMBasicBlockRef LLVMGetPreviousBasicBlock(LLVMBasicBlockRef BB);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000750LLVMBasicBlockRef LLVMGetEntryBasicBlock(LLVMValueRef Fn);
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000751
752LLVMBasicBlockRef LLVMAppendBasicBlockInContext(LLVMContextRef C,
753 LLVMValueRef Fn,
754 const char *Name);
755LLVMBasicBlockRef LLVMInsertBasicBlockInContext(LLVMContextRef C,
756 LLVMBasicBlockRef BB,
757 const char *Name);
758
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000759LLVMBasicBlockRef LLVMAppendBasicBlock(LLVMValueRef Fn, const char *Name);
760LLVMBasicBlockRef LLVMInsertBasicBlock(LLVMBasicBlockRef InsertBeforeBB,
761 const char *Name);
762void LLVMDeleteBasicBlock(LLVMBasicBlockRef BB);
763
Duncan Sandsb1d61aa2010-07-19 15:31:07 +0000764void LLVMMoveBasicBlockBefore(LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos);
765void LLVMMoveBasicBlockAfter(LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos);
766
Gordon Henriksen265f7802008-03-19 01:11:35 +0000767/* Operations on instructions */
768LLVMBasicBlockRef LLVMGetInstructionParent(LLVMValueRef Inst);
Gordon Henriksen054817c2008-03-19 03:47:18 +0000769LLVMValueRef LLVMGetFirstInstruction(LLVMBasicBlockRef BB);
770LLVMValueRef LLVMGetLastInstruction(LLVMBasicBlockRef BB);
771LLVMValueRef LLVMGetNextInstruction(LLVMValueRef Inst);
772LLVMValueRef LLVMGetPreviousInstruction(LLVMValueRef Inst);
Gordon Henriksen265f7802008-03-19 01:11:35 +0000773
Gordon Henriksen1158c532007-12-29 20:45:00 +0000774/* Operations on call sites */
775void LLVMSetInstructionCallConv(LLVMValueRef Instr, unsigned CC);
776unsigned LLVMGetInstructionCallConv(LLVMValueRef Instr);
Devang Patel4c758ea2008-09-25 21:00:45 +0000777void LLVMAddInstrAttribute(LLVMValueRef Instr, unsigned index, LLVMAttribute);
778void LLVMRemoveInstrAttribute(LLVMValueRef Instr, unsigned index,
779 LLVMAttribute);
Gordon Henriksen2d9cc212008-04-28 17:37:06 +0000780void LLVMSetInstrParamAlignment(LLVMValueRef Instr, unsigned index,
781 unsigned align);
Gordon Henriksen1158c532007-12-29 20:45:00 +0000782
Gordon Henrikseneeb65372008-08-30 16:34:54 +0000783/* Operations on call instructions (only) */
Chris Lattner25963c62010-01-09 22:27:07 +0000784LLVMBool LLVMIsTailCall(LLVMValueRef CallInst);
785void LLVMSetTailCall(LLVMValueRef CallInst, LLVMBool IsTailCall);
Gordon Henrikseneeb65372008-08-30 16:34:54 +0000786
Gordon Henriksen44dd8fb2007-10-08 18:14:39 +0000787/* Operations on phi nodes */
788void LLVMAddIncoming(LLVMValueRef PhiNode, LLVMValueRef *IncomingValues,
789 LLVMBasicBlockRef *IncomingBlocks, unsigned Count);
790unsigned LLVMCountIncoming(LLVMValueRef PhiNode);
791LLVMValueRef LLVMGetIncomingValue(LLVMValueRef PhiNode, unsigned Index);
792LLVMBasicBlockRef LLVMGetIncomingBlock(LLVMValueRef PhiNode, unsigned Index);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000793
794/*===-- Instruction builders ----------------------------------------------===*/
795
796/* An instruction builder represents a point within a basic block, and is the
797 * exclusive means of building instructions using the C interface.
798 */
799
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000800LLVMBuilderRef LLVMCreateBuilderInContext(LLVMContextRef C);
Gordon Henriksena735a9c2008-05-04 12:55:34 +0000801LLVMBuilderRef LLVMCreateBuilder(void);
Gordon Henriksen054817c2008-03-19 03:47:18 +0000802void LLVMPositionBuilder(LLVMBuilderRef Builder, LLVMBasicBlockRef Block,
803 LLVMValueRef Instr);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000804void LLVMPositionBuilderBefore(LLVMBuilderRef Builder, LLVMValueRef Instr);
805void LLVMPositionBuilderAtEnd(LLVMBuilderRef Builder, LLVMBasicBlockRef Block);
Gordon Henriksen265f7802008-03-19 01:11:35 +0000806LLVMBasicBlockRef LLVMGetInsertBlock(LLVMBuilderRef Builder);
Chris Lattner3d1f5522008-12-17 21:39:50 +0000807void LLVMClearInsertionPosition(LLVMBuilderRef Builder);
808void LLVMInsertIntoBuilder(LLVMBuilderRef Builder, LLVMValueRef Instr);
Erick Tryzelaar9813bea2009-08-16 02:20:57 +0000809void LLVMInsertIntoBuilderWithName(LLVMBuilderRef Builder, LLVMValueRef Instr,
810 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000811void LLVMDisposeBuilder(LLVMBuilderRef Builder);
812
Erick Tryzelaard8531fa2010-02-28 09:45:59 +0000813/* Metadata */
814void LLVMSetCurrentDebugLocation(LLVMBuilderRef Builder, LLVMValueRef L);
815LLVMValueRef LLVMGetCurrentDebugLocation(LLVMBuilderRef Builder);
816void LLVMSetInstDebugLocation(LLVMBuilderRef Builder, LLVMValueRef Inst);
817
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000818/* Terminators */
819LLVMValueRef LLVMBuildRetVoid(LLVMBuilderRef);
820LLVMValueRef LLVMBuildRet(LLVMBuilderRef, LLVMValueRef V);
Erick Tryzelaarfd529d72009-08-19 08:36:49 +0000821LLVMValueRef LLVMBuildAggregateRet(LLVMBuilderRef, LLVMValueRef *RetVals,
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +0000822 unsigned N);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000823LLVMValueRef LLVMBuildBr(LLVMBuilderRef, LLVMBasicBlockRef Dest);
824LLVMValueRef LLVMBuildCondBr(LLVMBuilderRef, LLVMValueRef If,
825 LLVMBasicBlockRef Then, LLVMBasicBlockRef Else);
826LLVMValueRef LLVMBuildSwitch(LLVMBuilderRef, LLVMValueRef V,
827 LLVMBasicBlockRef Else, unsigned NumCases);
Erick Tryzelaar0fb26ef2010-02-28 09:46:06 +0000828LLVMValueRef LLVMBuildIndirectBr(LLVMBuilderRef B, LLVMValueRef Addr,
829 unsigned NumDests);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000830LLVMValueRef LLVMBuildInvoke(LLVMBuilderRef, LLVMValueRef Fn,
831 LLVMValueRef *Args, unsigned NumArgs,
832 LLVMBasicBlockRef Then, LLVMBasicBlockRef Catch,
833 const char *Name);
834LLVMValueRef LLVMBuildUnwind(LLVMBuilderRef);
835LLVMValueRef LLVMBuildUnreachable(LLVMBuilderRef);
836
Gordon Henriksen097102c2008-01-01 05:50:53 +0000837/* Add a case to the switch instruction */
838void LLVMAddCase(LLVMValueRef Switch, LLVMValueRef OnVal,
839 LLVMBasicBlockRef Dest);
840
Erick Tryzelaar0fb26ef2010-02-28 09:46:06 +0000841/* Add a destination to the indirectbr instruction */
842void LLVMAddDestination(LLVMValueRef IndirectBr, LLVMBasicBlockRef Dest);
843
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000844/* Arithmetic */
845LLVMValueRef LLVMBuildAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
846 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +0000847LLVMValueRef LLVMBuildNSWAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
848 const char *Name);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +0000849LLVMValueRef LLVMBuildNUWAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
850 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +0000851LLVMValueRef LLVMBuildFAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
852 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000853LLVMValueRef LLVMBuildSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
854 const char *Name);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +0000855LLVMValueRef LLVMBuildNSWSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
856 const char *Name);
857LLVMValueRef LLVMBuildNUWSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
858 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +0000859LLVMValueRef LLVMBuildFSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
860 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000861LLVMValueRef LLVMBuildMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
862 const char *Name);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +0000863LLVMValueRef LLVMBuildNSWMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
864 const char *Name);
865LLVMValueRef LLVMBuildNUWMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
866 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +0000867LLVMValueRef LLVMBuildFMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
868 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000869LLVMValueRef LLVMBuildUDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
870 const char *Name);
871LLVMValueRef LLVMBuildSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
872 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +0000873LLVMValueRef LLVMBuildExactSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
874 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000875LLVMValueRef LLVMBuildFDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
876 const char *Name);
877LLVMValueRef LLVMBuildURem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
878 const char *Name);
879LLVMValueRef LLVMBuildSRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
880 const char *Name);
881LLVMValueRef LLVMBuildFRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
882 const char *Name);
883LLVMValueRef LLVMBuildShl(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
884 const char *Name);
885LLVMValueRef LLVMBuildLShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
886 const char *Name);
887LLVMValueRef LLVMBuildAShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
888 const char *Name);
889LLVMValueRef LLVMBuildAnd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
890 const char *Name);
891LLVMValueRef LLVMBuildOr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
892 const char *Name);
893LLVMValueRef LLVMBuildXor(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
894 const char *Name);
Erick Tryzelaar31831792010-02-28 05:51:27 +0000895LLVMValueRef LLVMBuildBinOp(LLVMBuilderRef B, LLVMOpcode Op,
896 LLVMValueRef LHS, LLVMValueRef RHS,
897 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000898LLVMValueRef LLVMBuildNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +0000899LLVMValueRef LLVMBuildNSWNeg(LLVMBuilderRef B, LLVMValueRef V,
900 const char *Name);
901LLVMValueRef LLVMBuildNUWNeg(LLVMBuilderRef B, LLVMValueRef V,
902 const char *Name);
Dan Gohmanf919bd62009-09-28 21:51:41 +0000903LLVMValueRef LLVMBuildFNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000904LLVMValueRef LLVMBuildNot(LLVMBuilderRef, LLVMValueRef V, const char *Name);
905
906/* Memory */
907LLVMValueRef LLVMBuildMalloc(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
908LLVMValueRef LLVMBuildArrayMalloc(LLVMBuilderRef, LLVMTypeRef Ty,
909 LLVMValueRef Val, const char *Name);
910LLVMValueRef LLVMBuildAlloca(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
911LLVMValueRef LLVMBuildArrayAlloca(LLVMBuilderRef, LLVMTypeRef Ty,
912 LLVMValueRef Val, const char *Name);
913LLVMValueRef LLVMBuildFree(LLVMBuilderRef, LLVMValueRef PointerVal);
914LLVMValueRef LLVMBuildLoad(LLVMBuilderRef, LLVMValueRef PointerVal,
915 const char *Name);
916LLVMValueRef LLVMBuildStore(LLVMBuilderRef, LLVMValueRef Val, LLVMValueRef Ptr);
917LLVMValueRef LLVMBuildGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
918 LLVMValueRef *Indices, unsigned NumIndices,
919 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +0000920LLVMValueRef LLVMBuildInBoundsGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
921 LLVMValueRef *Indices, unsigned NumIndices,
922 const char *Name);
923LLVMValueRef LLVMBuildStructGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
924 unsigned Idx, const char *Name);
925LLVMValueRef LLVMBuildGlobalString(LLVMBuilderRef B, const char *Str,
926 const char *Name);
927LLVMValueRef LLVMBuildGlobalStringPtr(LLVMBuilderRef B, const char *Str,
928 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000929
930/* Casts */
931LLVMValueRef LLVMBuildTrunc(LLVMBuilderRef, LLVMValueRef Val,
932 LLVMTypeRef DestTy, const char *Name);
933LLVMValueRef LLVMBuildZExt(LLVMBuilderRef, LLVMValueRef Val,
934 LLVMTypeRef DestTy, const char *Name);
935LLVMValueRef LLVMBuildSExt(LLVMBuilderRef, LLVMValueRef Val,
936 LLVMTypeRef DestTy, const char *Name);
937LLVMValueRef LLVMBuildFPToUI(LLVMBuilderRef, LLVMValueRef Val,
938 LLVMTypeRef DestTy, const char *Name);
939LLVMValueRef LLVMBuildFPToSI(LLVMBuilderRef, LLVMValueRef Val,
940 LLVMTypeRef DestTy, const char *Name);
941LLVMValueRef LLVMBuildUIToFP(LLVMBuilderRef, LLVMValueRef Val,
942 LLVMTypeRef DestTy, const char *Name);
943LLVMValueRef LLVMBuildSIToFP(LLVMBuilderRef, LLVMValueRef Val,
944 LLVMTypeRef DestTy, const char *Name);
945LLVMValueRef LLVMBuildFPTrunc(LLVMBuilderRef, LLVMValueRef Val,
946 LLVMTypeRef DestTy, const char *Name);
947LLVMValueRef LLVMBuildFPExt(LLVMBuilderRef, LLVMValueRef Val,
948 LLVMTypeRef DestTy, const char *Name);
949LLVMValueRef LLVMBuildPtrToInt(LLVMBuilderRef, LLVMValueRef Val,
950 LLVMTypeRef DestTy, const char *Name);
951LLVMValueRef LLVMBuildIntToPtr(LLVMBuilderRef, LLVMValueRef Val,
952 LLVMTypeRef DestTy, const char *Name);
953LLVMValueRef LLVMBuildBitCast(LLVMBuilderRef, LLVMValueRef Val,
954 LLVMTypeRef DestTy, const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +0000955LLVMValueRef LLVMBuildZExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
956 LLVMTypeRef DestTy, const char *Name);
957LLVMValueRef LLVMBuildSExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
958 LLVMTypeRef DestTy, const char *Name);
959LLVMValueRef LLVMBuildTruncOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
960 LLVMTypeRef DestTy, const char *Name);
Erick Tryzelaar31831792010-02-28 05:51:27 +0000961LLVMValueRef LLVMBuildCast(LLVMBuilderRef B, LLVMOpcode Op, LLVMValueRef Val,
962 LLVMTypeRef DestTy, const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +0000963LLVMValueRef LLVMBuildPointerCast(LLVMBuilderRef, LLVMValueRef Val,
964 LLVMTypeRef DestTy, const char *Name);
Duncan Sands9d786d72009-11-23 10:49:03 +0000965LLVMValueRef LLVMBuildIntCast(LLVMBuilderRef, LLVMValueRef Val, /*Signed cast!*/
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +0000966 LLVMTypeRef DestTy, const char *Name);
967LLVMValueRef LLVMBuildFPCast(LLVMBuilderRef, LLVMValueRef Val,
968 LLVMTypeRef DestTy, const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000969
970/* Comparisons */
971LLVMValueRef LLVMBuildICmp(LLVMBuilderRef, LLVMIntPredicate Op,
972 LLVMValueRef LHS, LLVMValueRef RHS,
973 const char *Name);
974LLVMValueRef LLVMBuildFCmp(LLVMBuilderRef, LLVMRealPredicate Op,
975 LLVMValueRef LHS, LLVMValueRef RHS,
976 const char *Name);
977
978/* Miscellaneous instructions */
979LLVMValueRef LLVMBuildPhi(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
980LLVMValueRef LLVMBuildCall(LLVMBuilderRef, LLVMValueRef Fn,
981 LLVMValueRef *Args, unsigned NumArgs,
982 const char *Name);
983LLVMValueRef LLVMBuildSelect(LLVMBuilderRef, LLVMValueRef If,
984 LLVMValueRef Then, LLVMValueRef Else,
985 const char *Name);
986LLVMValueRef LLVMBuildVAArg(LLVMBuilderRef, LLVMValueRef List, LLVMTypeRef Ty,
987 const char *Name);
988LLVMValueRef LLVMBuildExtractElement(LLVMBuilderRef, LLVMValueRef VecVal,
989 LLVMValueRef Index, const char *Name);
990LLVMValueRef LLVMBuildInsertElement(LLVMBuilderRef, LLVMValueRef VecVal,
991 LLVMValueRef EltVal, LLVMValueRef Index,
992 const char *Name);
993LLVMValueRef LLVMBuildShuffleVector(LLVMBuilderRef, LLVMValueRef V1,
994 LLVMValueRef V2, LLVMValueRef Mask,
995 const char *Name);
Dan Gohmand5104a52008-11-03 22:55:43 +0000996LLVMValueRef LLVMBuildExtractValue(LLVMBuilderRef, LLVMValueRef AggVal,
997 unsigned Index, const char *Name);
998LLVMValueRef LLVMBuildInsertValue(LLVMBuilderRef, LLVMValueRef AggVal,
999 LLVMValueRef EltVal, unsigned Index,
1000 const char *Name);
Gordon Henriksen76a03742007-09-18 03:18:57 +00001001
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00001002LLVMValueRef LLVMBuildIsNull(LLVMBuilderRef, LLVMValueRef Val,
1003 const char *Name);
1004LLVMValueRef LLVMBuildIsNotNull(LLVMBuilderRef, LLVMValueRef Val,
1005 const char *Name);
1006LLVMValueRef LLVMBuildPtrDiff(LLVMBuilderRef, LLVMValueRef LHS,
1007 LLVMValueRef RHS, const char *Name);
1008
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00001009
Gordon Henriksen0a68fe22007-12-12 01:04:30 +00001010/*===-- Module providers --------------------------------------------------===*/
1011
Jeffrey Yasskin091217b2010-01-27 20:34:15 +00001012/* Changes the type of M so it can be passed to FunctionPassManagers and the
1013 * JIT. They take ModuleProviders for historical reasons.
Gordon Henriksen0a68fe22007-12-12 01:04:30 +00001014 */
1015LLVMModuleProviderRef
1016LLVMCreateModuleProviderForExistingModule(LLVMModuleRef M);
1017
Jeffrey Yasskin091217b2010-01-27 20:34:15 +00001018/* Destroys the module M.
Gordon Henriksen0a68fe22007-12-12 01:04:30 +00001019 */
Jeffrey Yasskin091217b2010-01-27 20:34:15 +00001020void LLVMDisposeModuleProvider(LLVMModuleProviderRef M);
Gordon Henriksen0a68fe22007-12-12 01:04:30 +00001021
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00001022
1023/*===-- Memory buffers ----------------------------------------------------===*/
1024
Chris Lattner25963c62010-01-09 22:27:07 +00001025LLVMBool LLVMCreateMemoryBufferWithContentsOfFile(const char *Path,
1026 LLVMMemoryBufferRef *OutMemBuf,
1027 char **OutMessage);
1028LLVMBool LLVMCreateMemoryBufferWithSTDIN(LLVMMemoryBufferRef *OutMemBuf,
1029 char **OutMessage);
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00001030void LLVMDisposeMemoryBuffer(LLVMMemoryBufferRef MemBuf);
1031
Owen Anderson4698c5d2010-10-07 17:55:47 +00001032/*===-- Pass Registry -----------------------------------------------------===*/
1033
1034/** Return the global pass registry, for use with initialization functions.
1035 See llvm::PassRegistry::getPassRegistry. */
1036LLVMPassRegistryRef LLVMGetGlobalPassRegistry(void);
Gordon Henriksen878114b2008-03-16 04:20:44 +00001037
1038/*===-- Pass Managers -----------------------------------------------------===*/
1039
1040/** Constructs a new whole-module pass pipeline. This type of pipeline is
1041 suitable for link-time optimization and whole-module transformations.
1042 See llvm::PassManager::PassManager. */
Gordon Henriksena735a9c2008-05-04 12:55:34 +00001043LLVMPassManagerRef LLVMCreatePassManager(void);
Gordon Henriksen878114b2008-03-16 04:20:44 +00001044
1045/** Constructs a new function-by-function pass pipeline over the module
1046 provider. It does not take ownership of the module provider. This type of
1047 pipeline is suitable for code generation and JIT compilation tasks.
1048 See llvm::FunctionPassManager::FunctionPassManager. */
Erick Tryzelaarad0e0cb2010-03-02 23:58:54 +00001049LLVMPassManagerRef LLVMCreateFunctionPassManagerForModule(LLVMModuleRef M);
1050
1051/** Deprecated: Use LLVMCreateFunctionPassManagerForModule instead. */
Gordon Henriksen878114b2008-03-16 04:20:44 +00001052LLVMPassManagerRef LLVMCreateFunctionPassManager(LLVMModuleProviderRef MP);
1053
1054/** Initializes, executes on the provided module, and finalizes all of the
1055 passes scheduled in the pass manager. Returns 1 if any of the passes
1056 modified the module, 0 otherwise. See llvm::PassManager::run(Module&). */
Chris Lattner25963c62010-01-09 22:27:07 +00001057LLVMBool LLVMRunPassManager(LLVMPassManagerRef PM, LLVMModuleRef M);
Gordon Henriksen878114b2008-03-16 04:20:44 +00001058
1059/** Initializes all of the function passes scheduled in the function pass
1060 manager. Returns 1 if any of the passes modified the module, 0 otherwise.
1061 See llvm::FunctionPassManager::doInitialization. */
Chris Lattner25963c62010-01-09 22:27:07 +00001062LLVMBool LLVMInitializeFunctionPassManager(LLVMPassManagerRef FPM);
Gordon Henriksen878114b2008-03-16 04:20:44 +00001063
1064/** Executes all of the function passes scheduled in the function pass manager
1065 on the provided function. Returns 1 if any of the passes modified the
1066 function, false otherwise.
1067 See llvm::FunctionPassManager::run(Function&). */
Chris Lattner25963c62010-01-09 22:27:07 +00001068LLVMBool LLVMRunFunctionPassManager(LLVMPassManagerRef FPM, LLVMValueRef F);
Gordon Henriksen878114b2008-03-16 04:20:44 +00001069
1070/** Finalizes all of the function passes scheduled in in the function pass
1071 manager. Returns 1 if any of the passes modified the module, 0 otherwise.
1072 See llvm::FunctionPassManager::doFinalization. */
Chris Lattner25963c62010-01-09 22:27:07 +00001073LLVMBool LLVMFinalizeFunctionPassManager(LLVMPassManagerRef FPM);
Gordon Henriksen878114b2008-03-16 04:20:44 +00001074
1075/** Frees the memory of a pass pipeline. For function pipelines, does not free
1076 the module provider.
1077 See llvm::PassManagerBase::~PassManagerBase. */
1078void LLVMDisposePassManager(LLVMPassManagerRef PM);
1079
1080
Gordon Henriksen76a03742007-09-18 03:18:57 +00001081#ifdef __cplusplus
1082}
Gordon Henriksen76a03742007-09-18 03:18:57 +00001083
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001084namespace llvm {
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00001085 class MemoryBuffer;
Gordon Henriksen96571492008-03-16 15:55:43 +00001086 class PassManagerBase;
Gordon Henriksen0a68fe22007-12-12 01:04:30 +00001087
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00001088 #define DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \
1089 inline ty *unwrap(ref P) { \
1090 return reinterpret_cast<ty*>(P); \
1091 } \
1092 \
1093 inline ref wrap(const ty *P) { \
1094 return reinterpret_cast<ref>(const_cast<ty*>(P)); \
1095 }
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001096
Gordon Henriksen878114b2008-03-16 04:20:44 +00001097 #define DEFINE_ISA_CONVERSION_FUNCTIONS(ty, ref) \
1098 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \
1099 \
1100 template<typename T> \
1101 inline T *unwrap(ref P) { \
1102 return cast<T>(unwrap(P)); \
1103 }
1104
1105 #define DEFINE_STDCXX_CONVERSION_FUNCTIONS(ty, ref) \
1106 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \
1107 \
1108 template<typename T> \
1109 inline T *unwrap(ref P) { \
Chris Lattner7ba06612010-01-22 06:49:46 +00001110 T *Q = (T*)unwrap(P); \
Gordon Henriksen878114b2008-03-16 04:20:44 +00001111 assert(Q && "Invalid cast!"); \
1112 return Q; \
1113 }
1114
1115 DEFINE_ISA_CONVERSION_FUNCTIONS (Type, LLVMTypeRef )
1116 DEFINE_ISA_CONVERSION_FUNCTIONS (Value, LLVMValueRef )
Gordon Henriksen823f9732007-12-27 18:25:59 +00001117 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(Module, LLVMModuleRef )
1118 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(BasicBlock, LLVMBasicBlockRef )
Eric Christopher59278832008-08-08 19:39:37 +00001119 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(IRBuilder<>, LLVMBuilderRef )
Gordon Henriksen823f9732007-12-27 18:25:59 +00001120 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(PATypeHolder, LLVMTypeHandleRef )
Gordon Henriksen823f9732007-12-27 18:25:59 +00001121 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(MemoryBuffer, LLVMMemoryBufferRef )
Owen Anderson6773d382009-07-01 16:58:40 +00001122 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(LLVMContext, LLVMContextRef )
Erick Tryzelaar9f9857e2010-03-02 20:32:28 +00001123 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(Use, LLVMUseRef )
Gordon Henriksen878114b2008-03-16 04:20:44 +00001124 DEFINE_STDCXX_CONVERSION_FUNCTIONS(PassManagerBase, LLVMPassManagerRef )
Owen Anderson4698c5d2010-10-07 17:55:47 +00001125 DEFINE_STDCXX_CONVERSION_FUNCTIONS(PassRegistry, LLVMPassRegistryRef )
Jeffrey Yasskin091217b2010-01-27 20:34:15 +00001126 /* LLVMModuleProviderRef exists for historical reasons, but now just holds a
1127 * Module.
1128 */
1129 inline Module *unwrap(LLVMModuleProviderRef MP) {
1130 return reinterpret_cast<Module*>(MP);
1131 }
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001132
Gordon Henriksen878114b2008-03-16 04:20:44 +00001133 #undef DEFINE_STDCXX_CONVERSION_FUNCTIONS
1134 #undef DEFINE_ISA_CONVERSION_FUNCTIONS
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00001135 #undef DEFINE_SIMPLE_CONVERSION_FUNCTIONS
Erick Tryzelaar262332f2009-08-14 00:01:31 +00001136
1137 /* Specialized opaque context conversions.
1138 */
1139 inline LLVMContext **unwrap(LLVMContextRef* Tys) {
1140 return reinterpret_cast<LLVMContext**>(Tys);
1141 }
1142
1143 inline LLVMContextRef *wrap(const LLVMContext **Tys) {
1144 return reinterpret_cast<LLVMContextRef*>(const_cast<LLVMContext**>(Tys));
1145 }
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001146
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00001147 /* Specialized opaque type conversions.
1148 */
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001149 inline Type **unwrap(LLVMTypeRef* Tys) {
1150 return reinterpret_cast<Type**>(Tys);
1151 }
1152
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001153 inline LLVMTypeRef *wrap(const Type **Tys) {
1154 return reinterpret_cast<LLVMTypeRef*>(const_cast<Type**>(Tys));
1155 }
1156
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00001157 /* Specialized opaque value conversions.
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001158 */
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001159 inline Value **unwrap(LLVMValueRef *Vals) {
1160 return reinterpret_cast<Value**>(Vals);
1161 }
1162
1163 template<typename T>
1164 inline T **unwrap(LLVMValueRef *Vals, unsigned Length) {
1165 #if DEBUG
Chris Lattnerb7971152009-07-10 18:28:19 +00001166 for (LLVMValueRef *I = Vals, *E = Vals + Length; I != E; ++I)
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001167 cast<T>(*I);
1168 #endif
Hans Wennborg8f7edbf2011-06-04 16:00:19 +00001169 (void)Length;
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001170 return reinterpret_cast<T**>(Vals);
1171 }
1172
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001173 inline LLVMValueRef *wrap(const Value **Vals) {
1174 return reinterpret_cast<LLVMValueRef*>(const_cast<Value**>(Vals));
1175 }
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001176}
1177
1178#endif /* !defined(__cplusplus) */
1179
1180#endif /* !defined(LLVM_C_CORE_H) */