blob: 69996074f274fbf0ef1f6ffe29c2bae0186061cf [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,
118 LLVMStackAlignment = 7<<26
Devang Patel4c758ea2008-09-25 21:00:45 +0000119} LLVMAttribute;
Gordon Henriksen2d9cc212008-04-28 17:37:06 +0000120
121typedef enum {
Bill Wendlingda52cec2010-02-15 20:53:17 +0000122 /* Terminator Instructions */
Chris Lattner40cf28d2009-10-12 04:01:02 +0000123 LLVMRet = 1,
124 LLVMBr = 2,
125 LLVMSwitch = 3,
Bill Wendling07d6d762010-02-15 20:50:51 +0000126 LLVMIndirectBr = 4,
127 LLVMInvoke = 5,
128 LLVMUnwind = 6,
Bill Wendling2641d132011-07-27 21:00:28 +0000129 LLVMUnreachable = 7,
Bill Wendling07d6d762010-02-15 20:50:51 +0000130
Bill Wendlingda52cec2010-02-15 20:53:17 +0000131 /* Standard Binary Operators */
Bill Wendling2641d132011-07-27 21:00:28 +0000132 LLVMAdd = 8,
133 LLVMFAdd = 9,
134 LLVMSub = 10,
135 LLVMFSub = 11,
136 LLVMMul = 12,
137 LLVMFMul = 13,
138 LLVMUDiv = 14,
139 LLVMSDiv = 15,
140 LLVMFDiv = 16,
141 LLVMURem = 17,
142 LLVMSRem = 18,
143 LLVMFRem = 19,
Bill Wendling07d6d762010-02-15 20:50:51 +0000144
Bill Wendlingda52cec2010-02-15 20:53:17 +0000145 /* Logical Operators */
Bill Wendling2641d132011-07-27 21:00:28 +0000146 LLVMShl = 20,
147 LLVMLShr = 21,
148 LLVMAShr = 22,
149 LLVMAnd = 23,
150 LLVMOr = 24,
151 LLVMXor = 25,
Bill Wendling07d6d762010-02-15 20:50:51 +0000152
Bill Wendlingda52cec2010-02-15 20:53:17 +0000153 /* Memory Operators */
Bill Wendling2641d132011-07-27 21:00:28 +0000154 LLVMAlloca = 26,
155 LLVMLoad = 27,
156 LLVMStore = 28,
157 LLVMGetElementPtr = 29,
Bill Wendling07d6d762010-02-15 20:50:51 +0000158
Bill Wendlingda52cec2010-02-15 20:53:17 +0000159 /* Cast Operators */
Bill Wendling2641d132011-07-27 21:00:28 +0000160 LLVMTrunc = 30,
161 LLVMZExt = 31,
162 LLVMSExt = 32,
163 LLVMFPToUI = 33,
164 LLVMFPToSI = 34,
165 LLVMUIToFP = 35,
166 LLVMSIToFP = 36,
167 LLVMFPTrunc = 37,
168 LLVMFPExt = 38,
169 LLVMPtrToInt = 39,
170 LLVMIntToPtr = 40,
171 LLVMBitCast = 41,
Bill Wendling07d6d762010-02-15 20:50:51 +0000172
Bill Wendlingda52cec2010-02-15 20:53:17 +0000173 /* Other Operators */
Bill Wendling2641d132011-07-27 21:00:28 +0000174 LLVMICmp = 42,
175 LLVMFCmp = 43,
176 LLVMPHI = 44,
177 LLVMCall = 45,
178 LLVMSelect = 46,
Bill Wendlingda52cec2010-02-15 20:53:17 +0000179 /* UserOp1 */
180 /* UserOp2 */
Bill Wendling2641d132011-07-27 21:00:28 +0000181 LLVMVAArg = 49,
182 LLVMExtractElement = 50,
183 LLVMInsertElement = 51,
184 LLVMShuffleVector = 52,
185 LLVMExtractValue = 53,
186 LLVMInsertValue = 54,
Eli Friedman4fc946c2011-07-27 18:59:19 +0000187
188 /* Atomic operators */
Bill Wendling2641d132011-07-27 21:00:28 +0000189 LLVMFence = 55,
Eli Friedmanc9a551e2011-07-28 21:48:00 +0000190 LLVMAtomicCmpXchg = 56,
191 LLVMAtomicRMW = 57,
Bill Wendling2641d132011-07-27 21:00:28 +0000192
193 /* Exception Handling Operators */
Eli Friedmanc9a551e2011-07-28 21:48:00 +0000194 LLVMLandingPad = 58,
195 LLVMResume = 59
Bill Wendling2641d132011-07-27 21:00:28 +0000196
Chris Lattner40cf28d2009-10-12 04:01:02 +0000197} LLVMOpcode;
198
199typedef enum {
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000200 LLVMVoidTypeKind, /**< type with no size */
201 LLVMFloatTypeKind, /**< 32 bit floating point type */
202 LLVMDoubleTypeKind, /**< 64 bit floating point type */
203 LLVMX86_FP80TypeKind, /**< 80 bit floating point type (X87) */
204 LLVMFP128TypeKind, /**< 128 bit floating point type (112-bit mantissa)*/
205 LLVMPPC_FP128TypeKind, /**< 128 bit floating point type (two 64-bits) */
206 LLVMLabelTypeKind, /**< Labels */
207 LLVMIntegerTypeKind, /**< Arbitrary bit width integers */
208 LLVMFunctionTypeKind, /**< Functions */
209 LLVMStructTypeKind, /**< Structures */
210 LLVMArrayTypeKind, /**< Arrays */
211 LLVMPointerTypeKind, /**< Pointers */
Chris Lattnerdac44ec2009-07-15 22:00:31 +0000212 LLVMVectorTypeKind, /**< SIMD 'packed' format, or other vector type */
Dale Johannesenbaa5d042010-09-10 20:55:01 +0000213 LLVMMetadataTypeKind, /**< Metadata */
214 LLVMX86_MMXTypeKind /**< X86 MMX */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000215} LLVMTypeKind;
216
217typedef enum {
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000218 LLVMExternalLinkage, /**< Externally visible function */
Chris Lattner2dba0f02009-04-13 06:25:37 +0000219 LLVMAvailableExternallyLinkage,
Duncan Sands12da8ce2009-03-07 15:45:40 +0000220 LLVMLinkOnceAnyLinkage, /**< Keep one copy of function when linking (inline)*/
221 LLVMLinkOnceODRLinkage, /**< Same, but only replaced by something
222 equivalent. */
223 LLVMWeakAnyLinkage, /**< Keep one copy of function when linking (weak) */
224 LLVMWeakODRLinkage, /**< Same, but only replaced by something
225 equivalent. */
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000226 LLVMAppendingLinkage, /**< Special purpose, only applies to global arrays */
227 LLVMInternalLinkage, /**< Rename collisions when linking (static
228 functions) */
Duncan Sands12da8ce2009-03-07 15:45:40 +0000229 LLVMPrivateLinkage, /**< Like Internal, but omit from symbol table */
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000230 LLVMDLLImportLinkage, /**< Function to be imported from DLL */
231 LLVMDLLExportLinkage, /**< Function to be accessible from DLL */
Duncan Sandse2881052009-03-11 08:08:06 +0000232 LLVMExternalWeakLinkage,/**< ExternalWeak linkage description */
Jeffrey Yasskin091217b2010-01-27 20:34:15 +0000233 LLVMGhostLinkage, /**< Obsolete */
Bill Wendling002b1672009-07-20 18:22:52 +0000234 LLVMCommonLinkage, /**< Tentative definitions */
Bill Wendling03bcd6e2010-07-01 21:55:59 +0000235 LLVMLinkerPrivateLinkage, /**< Like Private, but linker removes. */
Bill Wendling578ee402010-08-20 22:05:50 +0000236 LLVMLinkerPrivateWeakLinkage, /**< Like LinkerPrivate, but is weak. */
237 LLVMLinkerPrivateWeakDefAutoLinkage /**< Like LinkerPrivateWeak, but possibly
238 hidden. */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000239} LLVMLinkage;
240
241typedef enum {
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000242 LLVMDefaultVisibility, /**< The GV is visible */
243 LLVMHiddenVisibility, /**< The GV is hidden */
244 LLVMProtectedVisibility /**< The GV is protected */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000245} LLVMVisibility;
246
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000247typedef enum {
248 LLVMCCallConv = 0,
249 LLVMFastCallConv = 8,
250 LLVMColdCallConv = 9,
251 LLVMX86StdcallCallConv = 64,
252 LLVMX86FastcallCallConv = 65
253} LLVMCallConv;
254
255typedef enum {
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000256 LLVMIntEQ = 32, /**< equal */
257 LLVMIntNE, /**< not equal */
258 LLVMIntUGT, /**< unsigned greater than */
259 LLVMIntUGE, /**< unsigned greater or equal */
260 LLVMIntULT, /**< unsigned less than */
261 LLVMIntULE, /**< unsigned less or equal */
262 LLVMIntSGT, /**< signed greater than */
263 LLVMIntSGE, /**< signed greater or equal */
264 LLVMIntSLT, /**< signed less than */
265 LLVMIntSLE /**< signed less or equal */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000266} LLVMIntPredicate;
267
268typedef enum {
Gordon Henriksen4a4d7352007-12-30 17:46:33 +0000269 LLVMRealPredicateFalse, /**< Always false (always folded) */
270 LLVMRealOEQ, /**< True if ordered and equal */
271 LLVMRealOGT, /**< True if ordered and greater than */
272 LLVMRealOGE, /**< True if ordered and greater than or equal */
273 LLVMRealOLT, /**< True if ordered and less than */
274 LLVMRealOLE, /**< True if ordered and less than or equal */
275 LLVMRealONE, /**< True if ordered and operands are unequal */
276 LLVMRealORD, /**< True if ordered (no nans) */
277 LLVMRealUNO, /**< True if unordered: isnan(X) | isnan(Y) */
278 LLVMRealUEQ, /**< True if unordered or equal */
279 LLVMRealUGT, /**< True if unordered or greater than */
280 LLVMRealUGE, /**< True if unordered, greater than, or equal */
281 LLVMRealULT, /**< True if unordered or less than */
282 LLVMRealULE, /**< True if unordered, less than, or equal */
283 LLVMRealUNE, /**< True if unordered or not equal */
284 LLVMRealPredicateTrue /**< Always true (always folded) */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000285} LLVMRealPredicate;
286
Bill Wendling6c923bb2011-07-27 20:18:04 +0000287typedef enum {
288 LLVMCatch, /**< A catch clause */
289 LLVMFilter /**< A filter clause */
290} LLVMLandingPadClauseTy;
291
Nick Lewycky0db26542011-05-15 07:20:34 +0000292void LLVMInitializeCore(LLVMPassRegistryRef R);
293
Gordon Henriksen76a03742007-09-18 03:18:57 +0000294
Gordon Henriksen34eb6d82007-12-19 22:30:40 +0000295/*===-- Error handling ----------------------------------------------------===*/
296
297void LLVMDisposeMessage(char *Message);
298
299
Erick Tryzelaard8531fa2010-02-28 09:45:59 +0000300/*===-- Contexts ----------------------------------------------------------===*/
Gordon Henriksen76a03742007-09-18 03:18:57 +0000301
Owen Anderson6773d382009-07-01 16:58:40 +0000302/* Create and destroy contexts. */
Erick Tryzelaarf34cb0c2009-08-30 23:38:06 +0000303LLVMContextRef LLVMContextCreate(void);
304LLVMContextRef LLVMGetGlobalContext(void);
Owen Anderson6773d382009-07-01 16:58:40 +0000305void LLVMContextDispose(LLVMContextRef C);
306
Erick Tryzelaard8531fa2010-02-28 09:45:59 +0000307unsigned LLVMGetMDKindIDInContext(LLVMContextRef C, const char* Name,
308 unsigned SLen);
309unsigned LLVMGetMDKindID(const char* Name, unsigned SLen);
310
311/*===-- Modules -----------------------------------------------------------===*/
312
Gordon Henriksen76a03742007-09-18 03:18:57 +0000313/* Create and destroy modules. */
Gordon Henriksena49d4352008-03-07 19:13:06 +0000314/** See llvm::Module::Module. */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000315LLVMModuleRef LLVMModuleCreateWithName(const char *ModuleID);
Owen Anderson31d44e42009-07-02 07:17:57 +0000316LLVMModuleRef LLVMModuleCreateWithNameInContext(const char *ModuleID,
317 LLVMContextRef C);
Gordon Henriksena49d4352008-03-07 19:13:06 +0000318
319/** See llvm::Module::~Module. */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000320void LLVMDisposeModule(LLVMModuleRef M);
321
Gordon Henriksena49d4352008-03-07 19:13:06 +0000322/** Data layout. See Module::getDataLayout. */
Gordon Henriksen05568bb2007-12-27 20:13:47 +0000323const char *LLVMGetDataLayout(LLVMModuleRef M);
324void LLVMSetDataLayout(LLVMModuleRef M, const char *Triple);
325
Gordon Henriksena49d4352008-03-07 19:13:06 +0000326/** Target triple. See Module::getTargetTriple. */
Gordon Henriksen05568bb2007-12-27 20:13:47 +0000327const char *LLVMGetTarget(LLVMModuleRef M);
328void LLVMSetTarget(LLVMModuleRef M, const char *Triple);
329
Gordon Henriksen6c6075e2008-03-14 23:58:56 +0000330/** See Module::dump. */
331void LLVMDumpModule(LLVMModuleRef M);
332
Chris Lattner26941452010-04-10 17:52:58 +0000333/** See Module::setModuleInlineAsm. */
334void LLVMSetModuleInlineAsm(LLVMModuleRef M, const char *Asm);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000335
Chris Lattnera7e04b02010-11-28 20:03:44 +0000336/** See Module::getContext. */
337LLVMContextRef LLVMGetModuleContext(LLVMModuleRef M);
338
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000339/*===-- Types -------------------------------------------------------------===*/
Gordon Henriksen76a03742007-09-18 03:18:57 +0000340
341/* LLVM types conform to the following hierarchy:
342 *
343 * types:
344 * integer type
345 * real type
346 * function type
347 * sequence types:
348 * array type
349 * pointer type
350 * vector type
351 * void type
352 * label type
353 * opaque type
354 */
355
Gordon Henriksena49d4352008-03-07 19:13:06 +0000356/** See llvm::LLVMTypeKind::getTypeID. */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000357LLVMTypeKind LLVMGetTypeKind(LLVMTypeRef Ty);
Gordon Henriksena49d4352008-03-07 19:13:06 +0000358
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000359/** See llvm::LLVMType::getContext. */
360LLVMContextRef LLVMGetTypeContext(LLVMTypeRef Ty);
361
Gordon Henriksen76a03742007-09-18 03:18:57 +0000362/* Operations on integer types */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000363LLVMTypeRef LLVMInt1TypeInContext(LLVMContextRef C);
364LLVMTypeRef LLVMInt8TypeInContext(LLVMContextRef C);
365LLVMTypeRef LLVMInt16TypeInContext(LLVMContextRef C);
366LLVMTypeRef LLVMInt32TypeInContext(LLVMContextRef C);
367LLVMTypeRef LLVMInt64TypeInContext(LLVMContextRef C);
368LLVMTypeRef LLVMIntTypeInContext(LLVMContextRef C, unsigned NumBits);
369
Gordon Henriksena735a9c2008-05-04 12:55:34 +0000370LLVMTypeRef LLVMInt1Type(void);
371LLVMTypeRef LLVMInt8Type(void);
372LLVMTypeRef LLVMInt16Type(void);
373LLVMTypeRef LLVMInt32Type(void);
374LLVMTypeRef LLVMInt64Type(void);
Gordon Henriksened7beaa2007-10-06 16:05:20 +0000375LLVMTypeRef LLVMIntType(unsigned NumBits);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000376unsigned LLVMGetIntTypeWidth(LLVMTypeRef IntegerTy);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000377
378/* Operations on real types */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000379LLVMTypeRef LLVMFloatTypeInContext(LLVMContextRef C);
380LLVMTypeRef LLVMDoubleTypeInContext(LLVMContextRef C);
381LLVMTypeRef LLVMX86FP80TypeInContext(LLVMContextRef C);
382LLVMTypeRef LLVMFP128TypeInContext(LLVMContextRef C);
383LLVMTypeRef LLVMPPCFP128TypeInContext(LLVMContextRef C);
384
Gordon Henriksena735a9c2008-05-04 12:55:34 +0000385LLVMTypeRef LLVMFloatType(void);
386LLVMTypeRef LLVMDoubleType(void);
387LLVMTypeRef LLVMX86FP80Type(void);
388LLVMTypeRef LLVMFP128Type(void);
389LLVMTypeRef LLVMPPCFP128Type(void);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000390
391/* Operations on function types */
Gordon Henriksened7beaa2007-10-06 16:05:20 +0000392LLVMTypeRef LLVMFunctionType(LLVMTypeRef ReturnType,
393 LLVMTypeRef *ParamTypes, unsigned ParamCount,
Chris Lattner25963c62010-01-09 22:27:07 +0000394 LLVMBool IsVarArg);
395LLVMBool LLVMIsFunctionVarArg(LLVMTypeRef FunctionTy);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000396LLVMTypeRef LLVMGetReturnType(LLVMTypeRef FunctionTy);
397unsigned LLVMCountParamTypes(LLVMTypeRef FunctionTy);
398void LLVMGetParamTypes(LLVMTypeRef FunctionTy, LLVMTypeRef *Dest);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000399
400/* Operations on struct types */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000401LLVMTypeRef LLVMStructTypeInContext(LLVMContextRef C, LLVMTypeRef *ElementTypes,
Chris Lattner25963c62010-01-09 22:27:07 +0000402 unsigned ElementCount, LLVMBool Packed);
Gordon Henriksened7beaa2007-10-06 16:05:20 +0000403LLVMTypeRef LLVMStructType(LLVMTypeRef *ElementTypes, unsigned ElementCount,
Chris Lattner25963c62010-01-09 22:27:07 +0000404 LLVMBool Packed);
Chris Lattnere71ccde2011-07-14 05:53:17 +0000405LLVMTypeRef LLVMStructCreateNamed(LLVMContextRef C, const char *Name);
406void LLVMStructSetBody(LLVMTypeRef StructTy, LLVMTypeRef *ElementTypes,
407 unsigned ElementCount, LLVMBool Packed);
408
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000409unsigned LLVMCountStructElementTypes(LLVMTypeRef StructTy);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000410void LLVMGetStructElementTypes(LLVMTypeRef StructTy, LLVMTypeRef *Dest);
Chris Lattner25963c62010-01-09 22:27:07 +0000411LLVMBool LLVMIsPackedStruct(LLVMTypeRef StructTy);
Chris Lattner17cf05b2011-07-14 16:20:28 +0000412LLVMBool LLVMIsOpaqueStruct(LLVMTypeRef StructTy);
413
414LLVMTypeRef LLVMGetTypeByName(LLVMModuleRef M, const char *Name);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000415
416/* Operations on array, pointer, and vector types (sequence types) */
Gordon Henriksened7beaa2007-10-06 16:05:20 +0000417LLVMTypeRef LLVMArrayType(LLVMTypeRef ElementType, unsigned ElementCount);
Gordon Henriksen5a3fe032007-12-17 16:08:32 +0000418LLVMTypeRef LLVMPointerType(LLVMTypeRef ElementType, unsigned AddressSpace);
Gordon Henriksened7beaa2007-10-06 16:05:20 +0000419LLVMTypeRef LLVMVectorType(LLVMTypeRef ElementType, unsigned ElementCount);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000420
421LLVMTypeRef LLVMGetElementType(LLVMTypeRef Ty);
422unsigned LLVMGetArrayLength(LLVMTypeRef ArrayTy);
Gordon Henriksen5a3fe032007-12-17 16:08:32 +0000423unsigned LLVMGetPointerAddressSpace(LLVMTypeRef PointerTy);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000424unsigned LLVMGetVectorSize(LLVMTypeRef VectorTy);
425
426/* Operations on other types */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000427LLVMTypeRef LLVMVoidTypeInContext(LLVMContextRef C);
428LLVMTypeRef LLVMLabelTypeInContext(LLVMContextRef C);
Dale Johannesen95b67af2010-09-10 21:58:02 +0000429LLVMTypeRef LLVMX86MMXTypeInContext(LLVMContextRef C);
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000430
Gordon Henriksena735a9c2008-05-04 12:55:34 +0000431LLVMTypeRef LLVMVoidType(void);
432LLVMTypeRef LLVMLabelType(void);
Dale Johannesen95b67af2010-09-10 21:58:02 +0000433LLVMTypeRef LLVMX86MMXType(void);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000434
Gordon Henriksen76a03742007-09-18 03:18:57 +0000435/*===-- Values ------------------------------------------------------------===*/
436
437/* The bulk of LLVM's object model consists of values, which comprise a very
438 * rich type hierarchy.
Gordon Henriksen76a03742007-09-18 03:18:57 +0000439 */
440
Gordon Henriksen29e38942008-12-19 18:39:45 +0000441#define LLVM_FOR_EACH_VALUE_SUBCLASS(macro) \
442 macro(Argument) \
443 macro(BasicBlock) \
444 macro(InlineAsm) \
445 macro(User) \
446 macro(Constant) \
447 macro(ConstantAggregateZero) \
448 macro(ConstantArray) \
449 macro(ConstantExpr) \
450 macro(ConstantFP) \
451 macro(ConstantInt) \
452 macro(ConstantPointerNull) \
453 macro(ConstantStruct) \
454 macro(ConstantVector) \
455 macro(GlobalValue) \
456 macro(Function) \
457 macro(GlobalAlias) \
458 macro(GlobalVariable) \
459 macro(UndefValue) \
460 macro(Instruction) \
461 macro(BinaryOperator) \
462 macro(CallInst) \
463 macro(IntrinsicInst) \
464 macro(DbgInfoIntrinsic) \
465 macro(DbgDeclareInst) \
Gordon Henriksen29e38942008-12-19 18:39:45 +0000466 macro(EHSelectorInst) \
467 macro(MemIntrinsic) \
468 macro(MemCpyInst) \
469 macro(MemMoveInst) \
470 macro(MemSetInst) \
471 macro(CmpInst) \
472 macro(FCmpInst) \
473 macro(ICmpInst) \
Gordon Henriksen29e38942008-12-19 18:39:45 +0000474 macro(ExtractElementInst) \
475 macro(GetElementPtrInst) \
476 macro(InsertElementInst) \
477 macro(InsertValueInst) \
Bill Wendling6c923bb2011-07-27 20:18:04 +0000478 macro(LandingPadInst) \
Gordon Henriksen29e38942008-12-19 18:39:45 +0000479 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) \
Bill Wendling6c923bb2011-07-27 20:18:04 +0000490 macro(ResumeInst) \
Gordon Henriksen29e38942008-12-19 18:39:45 +0000491 macro(UnaryInstruction) \
Victor Hernandez8acf2952009-10-23 21:09:37 +0000492 macro(AllocaInst) \
Gordon Henriksen29e38942008-12-19 18:39:45 +0000493 macro(CastInst) \
Gordon Henriksen05a868f2008-12-19 18:51:17 +0000494 macro(BitCastInst) \
495 macro(FPExtInst) \
496 macro(FPToSIInst) \
497 macro(FPToUIInst) \
498 macro(FPTruncInst) \
499 macro(IntToPtrInst) \
500 macro(PtrToIntInst) \
501 macro(SExtInst) \
502 macro(SIToFPInst) \
503 macro(TruncInst) \
504 macro(UIToFPInst) \
505 macro(ZExtInst) \
506 macro(ExtractValueInst) \
Gordon Henriksen05a868f2008-12-19 18:51:17 +0000507 macro(LoadInst) \
508 macro(VAArgInst)
Gordon Henriksen29e38942008-12-19 18:39:45 +0000509
Gordon Henriksen76a03742007-09-18 03:18:57 +0000510/* Operations on all values */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000511LLVMTypeRef LLVMTypeOf(LLVMValueRef Val);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000512const char *LLVMGetValueName(LLVMValueRef Val);
513void LLVMSetValueName(LLVMValueRef Val, const char *Name);
Gordon Henriksen1d0d24c2007-10-06 00:08:49 +0000514void LLVMDumpValue(LLVMValueRef Val);
Chris Lattner40cf28d2009-10-12 04:01:02 +0000515void LLVMReplaceAllUsesWith(LLVMValueRef OldVal, LLVMValueRef NewVal);
Erick Tryzelaard8531fa2010-02-28 09:45:59 +0000516int LLVMHasMetadata(LLVMValueRef Val);
517LLVMValueRef LLVMGetMetadata(LLVMValueRef Val, unsigned KindID);
518void LLVMSetMetadata(LLVMValueRef Val, unsigned KindID, LLVMValueRef Node);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000519
Gordon Henriksen29e38942008-12-19 18:39:45 +0000520/* Conversion functions. Return the input value if it is an instance of the
521 specified class, otherwise NULL. See llvm::dyn_cast_or_null<>. */
522#define LLVM_DECLARE_VALUE_CAST(name) \
523 LLVMValueRef LLVMIsA##name(LLVMValueRef Val);
524LLVM_FOR_EACH_VALUE_SUBCLASS(LLVM_DECLARE_VALUE_CAST)
525
Chris Lattner40cf28d2009-10-12 04:01:02 +0000526/* Operations on Uses */
Erick Tryzelaar9f9857e2010-03-02 20:32:28 +0000527LLVMUseRef LLVMGetFirstUse(LLVMValueRef Val);
528LLVMUseRef LLVMGetNextUse(LLVMUseRef U);
529LLVMValueRef LLVMGetUser(LLVMUseRef U);
530LLVMValueRef LLVMGetUsedValue(LLVMUseRef U);
Chris Lattner40cf28d2009-10-12 04:01:02 +0000531
532/* Operations on Users */
533LLVMValueRef LLVMGetOperand(LLVMValueRef Val, unsigned Index);
Erick Tryzelaarb4d48702010-08-20 14:51:22 +0000534void LLVMSetOperand(LLVMValueRef User, unsigned Index, LLVMValueRef Val);
535int LLVMGetNumOperands(LLVMValueRef Val);
Chris Lattner40cf28d2009-10-12 04:01:02 +0000536
Gordon Henriksen76a03742007-09-18 03:18:57 +0000537/* Operations on constants of any type */
Gordon Henriksen1046c732007-10-06 15:11:06 +0000538LLVMValueRef LLVMConstNull(LLVMTypeRef Ty); /* all zeroes */
539LLVMValueRef LLVMConstAllOnes(LLVMTypeRef Ty); /* only for int/vector */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000540LLVMValueRef LLVMGetUndef(LLVMTypeRef Ty);
Chris Lattner25963c62010-01-09 22:27:07 +0000541LLVMBool LLVMIsConstant(LLVMValueRef Val);
542LLVMBool LLVMIsNull(LLVMValueRef Val);
543LLVMBool LLVMIsUndef(LLVMValueRef Val);
Chris Lattner7f318242009-07-06 17:29:59 +0000544LLVMValueRef LLVMConstPointerNull(LLVMTypeRef Ty);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000545
Erick Tryzelaard8531fa2010-02-28 09:45:59 +0000546/* Operations on metadata */
547LLVMValueRef LLVMMDStringInContext(LLVMContextRef C, const char *Str,
548 unsigned SLen);
549LLVMValueRef LLVMMDString(const char *Str, unsigned SLen);
550LLVMValueRef LLVMMDNodeInContext(LLVMContextRef C, LLVMValueRef *Vals,
551 unsigned Count);
552LLVMValueRef LLVMMDNode(LLVMValueRef *Vals, unsigned Count);
553
Gordon Henriksen76a03742007-09-18 03:18:57 +0000554/* Operations on scalar constants */
Gordon Henriksen1046c732007-10-06 15:11:06 +0000555LLVMValueRef LLVMConstInt(LLVMTypeRef IntTy, unsigned long long N,
Chris Lattner25963c62010-01-09 22:27:07 +0000556 LLVMBool SignExtend);
Chris Lattner4329e072010-11-23 02:47:22 +0000557LLVMValueRef LLVMConstIntOfArbitraryPrecision(LLVMTypeRef IntTy,
558 unsigned NumWords,
559 const uint64_t Words[]);
Erick Tryzelaardd991352009-08-16 23:36:46 +0000560LLVMValueRef LLVMConstIntOfString(LLVMTypeRef IntTy, const char *Text,
561 uint8_t Radix);
562LLVMValueRef LLVMConstIntOfStringAndSize(LLVMTypeRef IntTy, const char *Text,
563 unsigned SLen, uint8_t Radix);
Gordon Henriksen1046c732007-10-06 15:11:06 +0000564LLVMValueRef LLVMConstReal(LLVMTypeRef RealTy, double N);
Gordon Henriksen931e1212008-02-02 01:07:50 +0000565LLVMValueRef LLVMConstRealOfString(LLVMTypeRef RealTy, const char *Text);
Erick Tryzelaardd991352009-08-16 23:36:46 +0000566LLVMValueRef LLVMConstRealOfStringAndSize(LLVMTypeRef RealTy, const char *Text,
567 unsigned SLen);
Chris Lattner40cf28d2009-10-12 04:01:02 +0000568unsigned long long LLVMConstIntGetZExtValue(LLVMValueRef ConstantVal);
569long long LLVMConstIntGetSExtValue(LLVMValueRef ConstantVal);
Erick Tryzelaardd991352009-08-16 23:36:46 +0000570
Gordon Henriksen76a03742007-09-18 03:18:57 +0000571
572/* Operations on composite constants */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000573LLVMValueRef LLVMConstStringInContext(LLVMContextRef C, const char *Str,
Chris Lattner25963c62010-01-09 22:27:07 +0000574 unsigned Length, LLVMBool DontNullTerminate);
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000575LLVMValueRef LLVMConstStructInContext(LLVMContextRef C,
576 LLVMValueRef *ConstantVals,
Chris Lattner25963c62010-01-09 22:27:07 +0000577 unsigned Count, LLVMBool Packed);
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000578
Gordon Henriksen1046c732007-10-06 15:11:06 +0000579LLVMValueRef LLVMConstString(const char *Str, unsigned Length,
Chris Lattner25963c62010-01-09 22:27:07 +0000580 LLVMBool DontNullTerminate);
Gordon Henriksen2ad5aef2008-04-25 03:21:19 +0000581LLVMValueRef LLVMConstArray(LLVMTypeRef ElementTy,
Gordon Henriksen1046c732007-10-06 15:11:06 +0000582 LLVMValueRef *ConstantVals, unsigned Length);
583LLVMValueRef LLVMConstStruct(LLVMValueRef *ConstantVals, unsigned Count,
Chris Lattner25963c62010-01-09 22:27:07 +0000584 LLVMBool Packed);
Rafael Espindola784ad242011-07-14 19:09:08 +0000585LLVMValueRef LLVMConstNamedStruct(LLVMTypeRef StructTy,
586 LLVMValueRef *ConstantVals,
587 unsigned Count);
Gordon Henriksen1046c732007-10-06 15:11:06 +0000588LLVMValueRef LLVMConstVector(LLVMValueRef *ScalarConstantVals, unsigned Size);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000589
Gordon Henriksen7ce31762007-10-06 14:29:36 +0000590/* Constant expressions */
Chris Lattner40cf28d2009-10-12 04:01:02 +0000591LLVMOpcode LLVMGetConstOpcode(LLVMValueRef ConstantVal);
Erick Tryzelaarfd529d72009-08-19 08:36:49 +0000592LLVMValueRef LLVMAlignOf(LLVMTypeRef Ty);
Gordon Henriksen7ce31762007-10-06 14:29:36 +0000593LLVMValueRef LLVMSizeOf(LLVMTypeRef Ty);
594LLVMValueRef LLVMConstNeg(LLVMValueRef ConstantVal);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +0000595LLVMValueRef LLVMConstNSWNeg(LLVMValueRef ConstantVal);
596LLVMValueRef LLVMConstNUWNeg(LLVMValueRef ConstantVal);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +0000597LLVMValueRef LLVMConstFNeg(LLVMValueRef ConstantVal);
Gordon Henriksen7ce31762007-10-06 14:29:36 +0000598LLVMValueRef LLVMConstNot(LLVMValueRef ConstantVal);
599LLVMValueRef LLVMConstAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Dan Gohmane4ca02d2009-09-03 23:34:49 +0000600LLVMValueRef LLVMConstNSWAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +0000601LLVMValueRef LLVMConstNUWAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +0000602LLVMValueRef LLVMConstFAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Gordon Henriksen7ce31762007-10-06 14:29:36 +0000603LLVMValueRef LLVMConstSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +0000604LLVMValueRef LLVMConstNSWSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
605LLVMValueRef LLVMConstNUWSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +0000606LLVMValueRef LLVMConstFSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Gordon Henriksen7ce31762007-10-06 14:29:36 +0000607LLVMValueRef LLVMConstMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +0000608LLVMValueRef LLVMConstNSWMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
609LLVMValueRef LLVMConstNUWMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +0000610LLVMValueRef LLVMConstFMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Gordon Henriksen7ce31762007-10-06 14:29:36 +0000611LLVMValueRef LLVMConstUDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
612LLVMValueRef LLVMConstSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Dan Gohmane4ca02d2009-09-03 23:34:49 +0000613LLVMValueRef LLVMConstExactSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Gordon Henriksen7ce31762007-10-06 14:29:36 +0000614LLVMValueRef LLVMConstFDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
615LLVMValueRef LLVMConstURem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
616LLVMValueRef LLVMConstSRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
617LLVMValueRef LLVMConstFRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
618LLVMValueRef LLVMConstAnd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
619LLVMValueRef LLVMConstOr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
620LLVMValueRef LLVMConstXor(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
621LLVMValueRef LLVMConstICmp(LLVMIntPredicate Predicate,
622 LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
623LLVMValueRef LLVMConstFCmp(LLVMRealPredicate Predicate,
624 LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
625LLVMValueRef LLVMConstShl(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
626LLVMValueRef LLVMConstLShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
627LLVMValueRef LLVMConstAShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
628LLVMValueRef LLVMConstGEP(LLVMValueRef ConstantVal,
629 LLVMValueRef *ConstantIndices, unsigned NumIndices);
Dan Gohmane4ca02d2009-09-03 23:34:49 +0000630LLVMValueRef LLVMConstInBoundsGEP(LLVMValueRef ConstantVal,
631 LLVMValueRef *ConstantIndices,
632 unsigned NumIndices);
Gordon Henriksen7ce31762007-10-06 14:29:36 +0000633LLVMValueRef LLVMConstTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
634LLVMValueRef LLVMConstSExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
635LLVMValueRef LLVMConstZExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
636LLVMValueRef LLVMConstFPTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
637LLVMValueRef LLVMConstFPExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
638LLVMValueRef LLVMConstUIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
639LLVMValueRef LLVMConstSIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
640LLVMValueRef LLVMConstFPToUI(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
641LLVMValueRef LLVMConstFPToSI(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
642LLVMValueRef LLVMConstPtrToInt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
643LLVMValueRef LLVMConstIntToPtr(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
644LLVMValueRef LLVMConstBitCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +0000645LLVMValueRef LLVMConstZExtOrBitCast(LLVMValueRef ConstantVal,
646 LLVMTypeRef ToType);
647LLVMValueRef LLVMConstSExtOrBitCast(LLVMValueRef ConstantVal,
648 LLVMTypeRef ToType);
649LLVMValueRef LLVMConstTruncOrBitCast(LLVMValueRef ConstantVal,
650 LLVMTypeRef ToType);
651LLVMValueRef LLVMConstPointerCast(LLVMValueRef ConstantVal,
652 LLVMTypeRef ToType);
653LLVMValueRef LLVMConstIntCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType,
Chris Lattner25963c62010-01-09 22:27:07 +0000654 LLVMBool isSigned);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +0000655LLVMValueRef LLVMConstFPCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
Gordon Henriksen7ce31762007-10-06 14:29:36 +0000656LLVMValueRef LLVMConstSelect(LLVMValueRef ConstantCondition,
657 LLVMValueRef ConstantIfTrue,
658 LLVMValueRef ConstantIfFalse);
659LLVMValueRef LLVMConstExtractElement(LLVMValueRef VectorConstant,
660 LLVMValueRef IndexConstant);
661LLVMValueRef LLVMConstInsertElement(LLVMValueRef VectorConstant,
662 LLVMValueRef ElementValueConstant,
663 LLVMValueRef IndexConstant);
664LLVMValueRef LLVMConstShuffleVector(LLVMValueRef VectorAConstant,
665 LLVMValueRef VectorBConstant,
666 LLVMValueRef MaskConstant);
Dan Gohmand5104a52008-11-03 22:55:43 +0000667LLVMValueRef LLVMConstExtractValue(LLVMValueRef AggConstant, unsigned *IdxList,
668 unsigned NumIdx);
669LLVMValueRef LLVMConstInsertValue(LLVMValueRef AggConstant,
670 LLVMValueRef ElementValueConstant,
671 unsigned *IdxList, unsigned NumIdx);
Chris Lattner25963c62010-01-09 22:27:07 +0000672LLVMValueRef LLVMConstInlineAsm(LLVMTypeRef Ty,
Chris Lattner3d1f5522008-12-17 21:39:50 +0000673 const char *AsmString, const char *Constraints,
Chris Lattner25963c62010-01-09 22:27:07 +0000674 LLVMBool HasSideEffects, LLVMBool IsAlignStack);
Erick Tryzelaar0fb26ef2010-02-28 09:46:06 +0000675LLVMValueRef LLVMBlockAddress(LLVMValueRef F, LLVMBasicBlockRef BB);
Gordon Henriksen7ce31762007-10-06 14:29:36 +0000676
Gordon Henriksen76a03742007-09-18 03:18:57 +0000677/* Operations on global variables, functions, and aliases (globals) */
Gordon Henriksen265f7802008-03-19 01:11:35 +0000678LLVMModuleRef LLVMGetGlobalParent(LLVMValueRef Global);
Chris Lattner25963c62010-01-09 22:27:07 +0000679LLVMBool LLVMIsDeclaration(LLVMValueRef Global);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000680LLVMLinkage LLVMGetLinkage(LLVMValueRef Global);
681void LLVMSetLinkage(LLVMValueRef Global, LLVMLinkage Linkage);
682const char *LLVMGetSection(LLVMValueRef Global);
683void LLVMSetSection(LLVMValueRef Global, const char *Section);
684LLVMVisibility LLVMGetVisibility(LLVMValueRef Global);
685void LLVMSetVisibility(LLVMValueRef Global, LLVMVisibility Viz);
686unsigned LLVMGetAlignment(LLVMValueRef Global);
687void LLVMSetAlignment(LLVMValueRef Global, unsigned Bytes);
688
689/* Operations on global variables */
690LLVMValueRef LLVMAddGlobal(LLVMModuleRef M, LLVMTypeRef Ty, const char *Name);
Erick Tryzelaar06894b32010-02-28 09:46:13 +0000691LLVMValueRef LLVMAddGlobalInAddressSpace(LLVMModuleRef M, LLVMTypeRef Ty,
692 const char *Name,
693 unsigned AddressSpace);
Gordon Henriksen783f7bb2007-10-08 03:45:09 +0000694LLVMValueRef LLVMGetNamedGlobal(LLVMModuleRef M, const char *Name);
Gordon Henriksen07a45f42008-03-23 22:21:29 +0000695LLVMValueRef LLVMGetFirstGlobal(LLVMModuleRef M);
696LLVMValueRef LLVMGetLastGlobal(LLVMModuleRef M);
697LLVMValueRef LLVMGetNextGlobal(LLVMValueRef GlobalVar);
698LLVMValueRef LLVMGetPreviousGlobal(LLVMValueRef GlobalVar);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000699void LLVMDeleteGlobal(LLVMValueRef GlobalVar);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000700LLVMValueRef LLVMGetInitializer(LLVMValueRef GlobalVar);
701void LLVMSetInitializer(LLVMValueRef GlobalVar, LLVMValueRef ConstantVal);
Chris Lattner25963c62010-01-09 22:27:07 +0000702LLVMBool LLVMIsThreadLocal(LLVMValueRef GlobalVar);
703void LLVMSetThreadLocal(LLVMValueRef GlobalVar, LLVMBool IsThreadLocal);
704LLVMBool LLVMIsGlobalConstant(LLVMValueRef GlobalVar);
705void LLVMSetGlobalConstant(LLVMValueRef GlobalVar, LLVMBool IsConstant);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000706
Chris Lattner3d1f5522008-12-17 21:39:50 +0000707/* Operations on aliases */
708LLVMValueRef LLVMAddAlias(LLVMModuleRef M, LLVMTypeRef Ty, LLVMValueRef Aliasee,
709 const char *Name);
710
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000711/* Operations on functions */
712LLVMValueRef LLVMAddFunction(LLVMModuleRef M, const char *Name,
713 LLVMTypeRef FunctionTy);
Gordon Henriksen783f7bb2007-10-08 03:45:09 +0000714LLVMValueRef LLVMGetNamedFunction(LLVMModuleRef M, const char *Name);
Gordon Henriksen054817c2008-03-19 03:47:18 +0000715LLVMValueRef LLVMGetFirstFunction(LLVMModuleRef M);
716LLVMValueRef LLVMGetLastFunction(LLVMModuleRef M);
717LLVMValueRef LLVMGetNextFunction(LLVMValueRef Fn);
718LLVMValueRef LLVMGetPreviousFunction(LLVMValueRef Fn);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000719void LLVMDeleteFunction(LLVMValueRef Fn);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000720unsigned LLVMGetIntrinsicID(LLVMValueRef Fn);
721unsigned LLVMGetFunctionCallConv(LLVMValueRef Fn);
722void LLVMSetFunctionCallConv(LLVMValueRef Fn, unsigned CC);
Gordon Henriksend930f912008-08-17 18:44:35 +0000723const char *LLVMGetGC(LLVMValueRef Fn);
724void LLVMSetGC(LLVMValueRef Fn, const char *Name);
Duncan Sands7374a012009-05-06 12:21:17 +0000725void LLVMAddFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA);
Chris Lattner40cf28d2009-10-12 04:01:02 +0000726LLVMAttribute LLVMGetFunctionAttr(LLVMValueRef Fn);
Duncan Sands7374a012009-05-06 12:21:17 +0000727void LLVMRemoveFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000728
Gordon Henriksen265f7802008-03-19 01:11:35 +0000729/* Operations on parameters */
730unsigned LLVMCountParams(LLVMValueRef Fn);
731void LLVMGetParams(LLVMValueRef Fn, LLVMValueRef *Params);
732LLVMValueRef LLVMGetParam(LLVMValueRef Fn, unsigned Index);
733LLVMValueRef LLVMGetParamParent(LLVMValueRef Inst);
Gordon Henriksen07a45f42008-03-23 22:21:29 +0000734LLVMValueRef LLVMGetFirstParam(LLVMValueRef Fn);
735LLVMValueRef LLVMGetLastParam(LLVMValueRef Fn);
736LLVMValueRef LLVMGetNextParam(LLVMValueRef Arg);
737LLVMValueRef LLVMGetPreviousParam(LLVMValueRef Arg);
Devang Patel4c758ea2008-09-25 21:00:45 +0000738void LLVMAddAttribute(LLVMValueRef Arg, LLVMAttribute PA);
739void LLVMRemoveAttribute(LLVMValueRef Arg, LLVMAttribute PA);
Chris Lattner40cf28d2009-10-12 04:01:02 +0000740LLVMAttribute LLVMGetAttribute(LLVMValueRef Arg);
Gordon Henriksen2d9cc212008-04-28 17:37:06 +0000741void LLVMSetParamAlignment(LLVMValueRef Arg, unsigned align);
Gordon Henriksen265f7802008-03-19 01:11:35 +0000742
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000743/* Operations on basic blocks */
Gordon Henriksen07a45f42008-03-23 22:21:29 +0000744LLVMValueRef LLVMBasicBlockAsValue(LLVMBasicBlockRef BB);
Chris Lattner25963c62010-01-09 22:27:07 +0000745LLVMBool LLVMValueIsBasicBlock(LLVMValueRef Val);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000746LLVMBasicBlockRef LLVMValueAsBasicBlock(LLVMValueRef Val);
Gordon Henriksen07a45f42008-03-23 22:21:29 +0000747LLVMValueRef LLVMGetBasicBlockParent(LLVMBasicBlockRef BB);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000748unsigned LLVMCountBasicBlocks(LLVMValueRef Fn);
749void LLVMGetBasicBlocks(LLVMValueRef Fn, LLVMBasicBlockRef *BasicBlocks);
Gordon Henriksen054817c2008-03-19 03:47:18 +0000750LLVMBasicBlockRef LLVMGetFirstBasicBlock(LLVMValueRef Fn);
751LLVMBasicBlockRef LLVMGetLastBasicBlock(LLVMValueRef Fn);
752LLVMBasicBlockRef LLVMGetNextBasicBlock(LLVMBasicBlockRef BB);
753LLVMBasicBlockRef LLVMGetPreviousBasicBlock(LLVMBasicBlockRef BB);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000754LLVMBasicBlockRef LLVMGetEntryBasicBlock(LLVMValueRef Fn);
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000755
756LLVMBasicBlockRef LLVMAppendBasicBlockInContext(LLVMContextRef C,
757 LLVMValueRef Fn,
758 const char *Name);
759LLVMBasicBlockRef LLVMInsertBasicBlockInContext(LLVMContextRef C,
760 LLVMBasicBlockRef BB,
761 const char *Name);
762
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000763LLVMBasicBlockRef LLVMAppendBasicBlock(LLVMValueRef Fn, const char *Name);
764LLVMBasicBlockRef LLVMInsertBasicBlock(LLVMBasicBlockRef InsertBeforeBB,
765 const char *Name);
766void LLVMDeleteBasicBlock(LLVMBasicBlockRef BB);
767
Duncan Sandsb1d61aa2010-07-19 15:31:07 +0000768void LLVMMoveBasicBlockBefore(LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos);
769void LLVMMoveBasicBlockAfter(LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos);
770
Gordon Henriksen265f7802008-03-19 01:11:35 +0000771/* Operations on instructions */
772LLVMBasicBlockRef LLVMGetInstructionParent(LLVMValueRef Inst);
Gordon Henriksen054817c2008-03-19 03:47:18 +0000773LLVMValueRef LLVMGetFirstInstruction(LLVMBasicBlockRef BB);
774LLVMValueRef LLVMGetLastInstruction(LLVMBasicBlockRef BB);
775LLVMValueRef LLVMGetNextInstruction(LLVMValueRef Inst);
776LLVMValueRef LLVMGetPreviousInstruction(LLVMValueRef Inst);
Gordon Henriksen265f7802008-03-19 01:11:35 +0000777
Gordon Henriksen1158c532007-12-29 20:45:00 +0000778/* Operations on call sites */
779void LLVMSetInstructionCallConv(LLVMValueRef Instr, unsigned CC);
780unsigned LLVMGetInstructionCallConv(LLVMValueRef Instr);
Devang Patel4c758ea2008-09-25 21:00:45 +0000781void LLVMAddInstrAttribute(LLVMValueRef Instr, unsigned index, LLVMAttribute);
782void LLVMRemoveInstrAttribute(LLVMValueRef Instr, unsigned index,
783 LLVMAttribute);
Gordon Henriksen2d9cc212008-04-28 17:37:06 +0000784void LLVMSetInstrParamAlignment(LLVMValueRef Instr, unsigned index,
785 unsigned align);
Gordon Henriksen1158c532007-12-29 20:45:00 +0000786
Gordon Henrikseneeb65372008-08-30 16:34:54 +0000787/* Operations on call instructions (only) */
Chris Lattner25963c62010-01-09 22:27:07 +0000788LLVMBool LLVMIsTailCall(LLVMValueRef CallInst);
789void LLVMSetTailCall(LLVMValueRef CallInst, LLVMBool IsTailCall);
Gordon Henrikseneeb65372008-08-30 16:34:54 +0000790
Gordon Henriksen44dd8fb2007-10-08 18:14:39 +0000791/* Operations on phi nodes */
792void LLVMAddIncoming(LLVMValueRef PhiNode, LLVMValueRef *IncomingValues,
793 LLVMBasicBlockRef *IncomingBlocks, unsigned Count);
794unsigned LLVMCountIncoming(LLVMValueRef PhiNode);
795LLVMValueRef LLVMGetIncomingValue(LLVMValueRef PhiNode, unsigned Index);
796LLVMBasicBlockRef LLVMGetIncomingBlock(LLVMValueRef PhiNode, unsigned Index);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000797
798/*===-- Instruction builders ----------------------------------------------===*/
799
800/* An instruction builder represents a point within a basic block, and is the
801 * exclusive means of building instructions using the C interface.
802 */
803
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000804LLVMBuilderRef LLVMCreateBuilderInContext(LLVMContextRef C);
Gordon Henriksena735a9c2008-05-04 12:55:34 +0000805LLVMBuilderRef LLVMCreateBuilder(void);
Gordon Henriksen054817c2008-03-19 03:47:18 +0000806void LLVMPositionBuilder(LLVMBuilderRef Builder, LLVMBasicBlockRef Block,
807 LLVMValueRef Instr);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000808void LLVMPositionBuilderBefore(LLVMBuilderRef Builder, LLVMValueRef Instr);
809void LLVMPositionBuilderAtEnd(LLVMBuilderRef Builder, LLVMBasicBlockRef Block);
Gordon Henriksen265f7802008-03-19 01:11:35 +0000810LLVMBasicBlockRef LLVMGetInsertBlock(LLVMBuilderRef Builder);
Chris Lattner3d1f5522008-12-17 21:39:50 +0000811void LLVMClearInsertionPosition(LLVMBuilderRef Builder);
812void LLVMInsertIntoBuilder(LLVMBuilderRef Builder, LLVMValueRef Instr);
Erick Tryzelaar9813bea2009-08-16 02:20:57 +0000813void LLVMInsertIntoBuilderWithName(LLVMBuilderRef Builder, LLVMValueRef Instr,
814 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000815void LLVMDisposeBuilder(LLVMBuilderRef Builder);
816
Erick Tryzelaard8531fa2010-02-28 09:45:59 +0000817/* Metadata */
818void LLVMSetCurrentDebugLocation(LLVMBuilderRef Builder, LLVMValueRef L);
819LLVMValueRef LLVMGetCurrentDebugLocation(LLVMBuilderRef Builder);
820void LLVMSetInstDebugLocation(LLVMBuilderRef Builder, LLVMValueRef Inst);
821
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000822/* Terminators */
823LLVMValueRef LLVMBuildRetVoid(LLVMBuilderRef);
824LLVMValueRef LLVMBuildRet(LLVMBuilderRef, LLVMValueRef V);
Erick Tryzelaarfd529d72009-08-19 08:36:49 +0000825LLVMValueRef LLVMBuildAggregateRet(LLVMBuilderRef, LLVMValueRef *RetVals,
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +0000826 unsigned N);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000827LLVMValueRef LLVMBuildBr(LLVMBuilderRef, LLVMBasicBlockRef Dest);
828LLVMValueRef LLVMBuildCondBr(LLVMBuilderRef, LLVMValueRef If,
829 LLVMBasicBlockRef Then, LLVMBasicBlockRef Else);
830LLVMValueRef LLVMBuildSwitch(LLVMBuilderRef, LLVMValueRef V,
831 LLVMBasicBlockRef Else, unsigned NumCases);
Erick Tryzelaar0fb26ef2010-02-28 09:46:06 +0000832LLVMValueRef LLVMBuildIndirectBr(LLVMBuilderRef B, LLVMValueRef Addr,
833 unsigned NumDests);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000834LLVMValueRef LLVMBuildInvoke(LLVMBuilderRef, LLVMValueRef Fn,
835 LLVMValueRef *Args, unsigned NumArgs,
836 LLVMBasicBlockRef Then, LLVMBasicBlockRef Catch,
837 const char *Name);
838LLVMValueRef LLVMBuildUnwind(LLVMBuilderRef);
Bill Wendling6c923bb2011-07-27 20:18:04 +0000839LLVMValueRef LLVMBuildResume(LLVMBuilderRef B, LLVMValueRef Exn);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000840LLVMValueRef LLVMBuildUnreachable(LLVMBuilderRef);
841
Gordon Henriksen097102c2008-01-01 05:50:53 +0000842/* Add a case to the switch instruction */
843void LLVMAddCase(LLVMValueRef Switch, LLVMValueRef OnVal,
844 LLVMBasicBlockRef Dest);
845
Erick Tryzelaar0fb26ef2010-02-28 09:46:06 +0000846/* Add a destination to the indirectbr instruction */
847void LLVMAddDestination(LLVMValueRef IndirectBr, LLVMBasicBlockRef Dest);
848
Bill Wendling6c923bb2011-07-27 20:18:04 +0000849/* Add a clause to the landingpad instruction */
850void LLVMAddClause(LLVMValueRef LandingPad, LLVMLandingPadClauseTy ClauseTy,
851 LLVMValueRef ClauseVal);
852
853/* Set the 'cleanup' flag in the landingpad instruction */
854void LLVMSetCleanup(LLVMValueRef LandingPad, LLVMBool Val);
855
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000856/* Arithmetic */
857LLVMValueRef LLVMBuildAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
858 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +0000859LLVMValueRef LLVMBuildNSWAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
860 const char *Name);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +0000861LLVMValueRef LLVMBuildNUWAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
862 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +0000863LLVMValueRef LLVMBuildFAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
864 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000865LLVMValueRef LLVMBuildSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
866 const char *Name);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +0000867LLVMValueRef LLVMBuildNSWSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
868 const char *Name);
869LLVMValueRef LLVMBuildNUWSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
870 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +0000871LLVMValueRef LLVMBuildFSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
872 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000873LLVMValueRef LLVMBuildMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
874 const char *Name);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +0000875LLVMValueRef LLVMBuildNSWMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
876 const char *Name);
877LLVMValueRef LLVMBuildNUWMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
878 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +0000879LLVMValueRef LLVMBuildFMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
880 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000881LLVMValueRef LLVMBuildUDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
882 const char *Name);
883LLVMValueRef LLVMBuildSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
884 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +0000885LLVMValueRef LLVMBuildExactSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
886 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000887LLVMValueRef LLVMBuildFDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
888 const char *Name);
889LLVMValueRef LLVMBuildURem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
890 const char *Name);
891LLVMValueRef LLVMBuildSRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
892 const char *Name);
893LLVMValueRef LLVMBuildFRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
894 const char *Name);
895LLVMValueRef LLVMBuildShl(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
896 const char *Name);
897LLVMValueRef LLVMBuildLShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
898 const char *Name);
899LLVMValueRef LLVMBuildAShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
900 const char *Name);
901LLVMValueRef LLVMBuildAnd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
902 const char *Name);
903LLVMValueRef LLVMBuildOr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
904 const char *Name);
905LLVMValueRef LLVMBuildXor(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
906 const char *Name);
Erick Tryzelaar31831792010-02-28 05:51:27 +0000907LLVMValueRef LLVMBuildBinOp(LLVMBuilderRef B, LLVMOpcode Op,
908 LLVMValueRef LHS, LLVMValueRef RHS,
909 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000910LLVMValueRef LLVMBuildNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +0000911LLVMValueRef LLVMBuildNSWNeg(LLVMBuilderRef B, LLVMValueRef V,
912 const char *Name);
913LLVMValueRef LLVMBuildNUWNeg(LLVMBuilderRef B, LLVMValueRef V,
914 const char *Name);
Dan Gohmanf919bd62009-09-28 21:51:41 +0000915LLVMValueRef LLVMBuildFNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000916LLVMValueRef LLVMBuildNot(LLVMBuilderRef, LLVMValueRef V, const char *Name);
917
918/* Memory */
919LLVMValueRef LLVMBuildMalloc(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
920LLVMValueRef LLVMBuildArrayMalloc(LLVMBuilderRef, LLVMTypeRef Ty,
921 LLVMValueRef Val, const char *Name);
922LLVMValueRef LLVMBuildAlloca(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
923LLVMValueRef LLVMBuildArrayAlloca(LLVMBuilderRef, LLVMTypeRef Ty,
924 LLVMValueRef Val, const char *Name);
925LLVMValueRef LLVMBuildFree(LLVMBuilderRef, LLVMValueRef PointerVal);
926LLVMValueRef LLVMBuildLoad(LLVMBuilderRef, LLVMValueRef PointerVal,
927 const char *Name);
928LLVMValueRef LLVMBuildStore(LLVMBuilderRef, LLVMValueRef Val, LLVMValueRef Ptr);
929LLVMValueRef LLVMBuildGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
930 LLVMValueRef *Indices, unsigned NumIndices,
931 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +0000932LLVMValueRef LLVMBuildInBoundsGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
933 LLVMValueRef *Indices, unsigned NumIndices,
934 const char *Name);
935LLVMValueRef LLVMBuildStructGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
936 unsigned Idx, const char *Name);
937LLVMValueRef LLVMBuildGlobalString(LLVMBuilderRef B, const char *Str,
938 const char *Name);
939LLVMValueRef LLVMBuildGlobalStringPtr(LLVMBuilderRef B, const char *Str,
940 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000941
942/* Casts */
943LLVMValueRef LLVMBuildTrunc(LLVMBuilderRef, LLVMValueRef Val,
944 LLVMTypeRef DestTy, const char *Name);
945LLVMValueRef LLVMBuildZExt(LLVMBuilderRef, LLVMValueRef Val,
946 LLVMTypeRef DestTy, const char *Name);
947LLVMValueRef LLVMBuildSExt(LLVMBuilderRef, LLVMValueRef Val,
948 LLVMTypeRef DestTy, const char *Name);
949LLVMValueRef LLVMBuildFPToUI(LLVMBuilderRef, LLVMValueRef Val,
950 LLVMTypeRef DestTy, const char *Name);
951LLVMValueRef LLVMBuildFPToSI(LLVMBuilderRef, LLVMValueRef Val,
952 LLVMTypeRef DestTy, const char *Name);
953LLVMValueRef LLVMBuildUIToFP(LLVMBuilderRef, LLVMValueRef Val,
954 LLVMTypeRef DestTy, const char *Name);
955LLVMValueRef LLVMBuildSIToFP(LLVMBuilderRef, LLVMValueRef Val,
956 LLVMTypeRef DestTy, const char *Name);
957LLVMValueRef LLVMBuildFPTrunc(LLVMBuilderRef, LLVMValueRef Val,
958 LLVMTypeRef DestTy, const char *Name);
959LLVMValueRef LLVMBuildFPExt(LLVMBuilderRef, LLVMValueRef Val,
960 LLVMTypeRef DestTy, const char *Name);
961LLVMValueRef LLVMBuildPtrToInt(LLVMBuilderRef, LLVMValueRef Val,
962 LLVMTypeRef DestTy, const char *Name);
963LLVMValueRef LLVMBuildIntToPtr(LLVMBuilderRef, LLVMValueRef Val,
964 LLVMTypeRef DestTy, const char *Name);
965LLVMValueRef LLVMBuildBitCast(LLVMBuilderRef, LLVMValueRef Val,
966 LLVMTypeRef DestTy, const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +0000967LLVMValueRef LLVMBuildZExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
968 LLVMTypeRef DestTy, const char *Name);
969LLVMValueRef LLVMBuildSExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
970 LLVMTypeRef DestTy, const char *Name);
971LLVMValueRef LLVMBuildTruncOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
972 LLVMTypeRef DestTy, const char *Name);
Erick Tryzelaar31831792010-02-28 05:51:27 +0000973LLVMValueRef LLVMBuildCast(LLVMBuilderRef B, LLVMOpcode Op, LLVMValueRef Val,
974 LLVMTypeRef DestTy, const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +0000975LLVMValueRef LLVMBuildPointerCast(LLVMBuilderRef, LLVMValueRef Val,
976 LLVMTypeRef DestTy, const char *Name);
Duncan Sands9d786d72009-11-23 10:49:03 +0000977LLVMValueRef LLVMBuildIntCast(LLVMBuilderRef, LLVMValueRef Val, /*Signed cast!*/
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +0000978 LLVMTypeRef DestTy, const char *Name);
979LLVMValueRef LLVMBuildFPCast(LLVMBuilderRef, LLVMValueRef Val,
980 LLVMTypeRef DestTy, const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000981
982/* Comparisons */
983LLVMValueRef LLVMBuildICmp(LLVMBuilderRef, LLVMIntPredicate Op,
984 LLVMValueRef LHS, LLVMValueRef RHS,
985 const char *Name);
986LLVMValueRef LLVMBuildFCmp(LLVMBuilderRef, LLVMRealPredicate Op,
987 LLVMValueRef LHS, LLVMValueRef RHS,
988 const char *Name);
989
990/* Miscellaneous instructions */
991LLVMValueRef LLVMBuildPhi(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
992LLVMValueRef LLVMBuildCall(LLVMBuilderRef, LLVMValueRef Fn,
993 LLVMValueRef *Args, unsigned NumArgs,
994 const char *Name);
995LLVMValueRef LLVMBuildSelect(LLVMBuilderRef, LLVMValueRef If,
996 LLVMValueRef Then, LLVMValueRef Else,
997 const char *Name);
998LLVMValueRef LLVMBuildVAArg(LLVMBuilderRef, LLVMValueRef List, LLVMTypeRef Ty,
999 const char *Name);
1000LLVMValueRef LLVMBuildExtractElement(LLVMBuilderRef, LLVMValueRef VecVal,
1001 LLVMValueRef Index, const char *Name);
1002LLVMValueRef LLVMBuildInsertElement(LLVMBuilderRef, LLVMValueRef VecVal,
1003 LLVMValueRef EltVal, LLVMValueRef Index,
1004 const char *Name);
1005LLVMValueRef LLVMBuildShuffleVector(LLVMBuilderRef, LLVMValueRef V1,
1006 LLVMValueRef V2, LLVMValueRef Mask,
1007 const char *Name);
Dan Gohmand5104a52008-11-03 22:55:43 +00001008LLVMValueRef LLVMBuildExtractValue(LLVMBuilderRef, LLVMValueRef AggVal,
1009 unsigned Index, const char *Name);
1010LLVMValueRef LLVMBuildInsertValue(LLVMBuilderRef, LLVMValueRef AggVal,
1011 LLVMValueRef EltVal, unsigned Index,
1012 const char *Name);
Gordon Henriksen76a03742007-09-18 03:18:57 +00001013
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00001014LLVMValueRef LLVMBuildIsNull(LLVMBuilderRef, LLVMValueRef Val,
1015 const char *Name);
1016LLVMValueRef LLVMBuildIsNotNull(LLVMBuilderRef, LLVMValueRef Val,
1017 const char *Name);
1018LLVMValueRef LLVMBuildPtrDiff(LLVMBuilderRef, LLVMValueRef LHS,
1019 LLVMValueRef RHS, const char *Name);
1020
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00001021
Gordon Henriksen0a68fe22007-12-12 01:04:30 +00001022/*===-- Module providers --------------------------------------------------===*/
1023
Jeffrey Yasskin091217b2010-01-27 20:34:15 +00001024/* Changes the type of M so it can be passed to FunctionPassManagers and the
1025 * JIT. They take ModuleProviders for historical reasons.
Gordon Henriksen0a68fe22007-12-12 01:04:30 +00001026 */
1027LLVMModuleProviderRef
1028LLVMCreateModuleProviderForExistingModule(LLVMModuleRef M);
1029
Jeffrey Yasskin091217b2010-01-27 20:34:15 +00001030/* Destroys the module M.
Gordon Henriksen0a68fe22007-12-12 01:04:30 +00001031 */
Jeffrey Yasskin091217b2010-01-27 20:34:15 +00001032void LLVMDisposeModuleProvider(LLVMModuleProviderRef M);
Gordon Henriksen0a68fe22007-12-12 01:04:30 +00001033
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00001034
1035/*===-- Memory buffers ----------------------------------------------------===*/
1036
Chris Lattner25963c62010-01-09 22:27:07 +00001037LLVMBool LLVMCreateMemoryBufferWithContentsOfFile(const char *Path,
1038 LLVMMemoryBufferRef *OutMemBuf,
1039 char **OutMessage);
1040LLVMBool LLVMCreateMemoryBufferWithSTDIN(LLVMMemoryBufferRef *OutMemBuf,
1041 char **OutMessage);
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00001042void LLVMDisposeMemoryBuffer(LLVMMemoryBufferRef MemBuf);
1043
Owen Anderson4698c5d2010-10-07 17:55:47 +00001044/*===-- Pass Registry -----------------------------------------------------===*/
1045
1046/** Return the global pass registry, for use with initialization functions.
1047 See llvm::PassRegistry::getPassRegistry. */
1048LLVMPassRegistryRef LLVMGetGlobalPassRegistry(void);
Gordon Henriksen878114b2008-03-16 04:20:44 +00001049
1050/*===-- Pass Managers -----------------------------------------------------===*/
1051
1052/** Constructs a new whole-module pass pipeline. This type of pipeline is
1053 suitable for link-time optimization and whole-module transformations.
1054 See llvm::PassManager::PassManager. */
Gordon Henriksena735a9c2008-05-04 12:55:34 +00001055LLVMPassManagerRef LLVMCreatePassManager(void);
Gordon Henriksen878114b2008-03-16 04:20:44 +00001056
1057/** Constructs a new function-by-function pass pipeline over the module
1058 provider. It does not take ownership of the module provider. This type of
1059 pipeline is suitable for code generation and JIT compilation tasks.
1060 See llvm::FunctionPassManager::FunctionPassManager. */
Erick Tryzelaarad0e0cb2010-03-02 23:58:54 +00001061LLVMPassManagerRef LLVMCreateFunctionPassManagerForModule(LLVMModuleRef M);
1062
1063/** Deprecated: Use LLVMCreateFunctionPassManagerForModule instead. */
Gordon Henriksen878114b2008-03-16 04:20:44 +00001064LLVMPassManagerRef LLVMCreateFunctionPassManager(LLVMModuleProviderRef MP);
1065
1066/** Initializes, executes on the provided module, and finalizes all of the
1067 passes scheduled in the pass manager. Returns 1 if any of the passes
1068 modified the module, 0 otherwise. See llvm::PassManager::run(Module&). */
Chris Lattner25963c62010-01-09 22:27:07 +00001069LLVMBool LLVMRunPassManager(LLVMPassManagerRef PM, LLVMModuleRef M);
Gordon Henriksen878114b2008-03-16 04:20:44 +00001070
1071/** Initializes all of the function passes scheduled in the function pass
1072 manager. Returns 1 if any of the passes modified the module, 0 otherwise.
1073 See llvm::FunctionPassManager::doInitialization. */
Chris Lattner25963c62010-01-09 22:27:07 +00001074LLVMBool LLVMInitializeFunctionPassManager(LLVMPassManagerRef FPM);
Gordon Henriksen878114b2008-03-16 04:20:44 +00001075
1076/** Executes all of the function passes scheduled in the function pass manager
1077 on the provided function. Returns 1 if any of the passes modified the
1078 function, false otherwise.
1079 See llvm::FunctionPassManager::run(Function&). */
Chris Lattner25963c62010-01-09 22:27:07 +00001080LLVMBool LLVMRunFunctionPassManager(LLVMPassManagerRef FPM, LLVMValueRef F);
Gordon Henriksen878114b2008-03-16 04:20:44 +00001081
1082/** Finalizes all of the function passes scheduled in in the function pass
1083 manager. Returns 1 if any of the passes modified the module, 0 otherwise.
1084 See llvm::FunctionPassManager::doFinalization. */
Chris Lattner25963c62010-01-09 22:27:07 +00001085LLVMBool LLVMFinalizeFunctionPassManager(LLVMPassManagerRef FPM);
Gordon Henriksen878114b2008-03-16 04:20:44 +00001086
1087/** Frees the memory of a pass pipeline. For function pipelines, does not free
1088 the module provider.
1089 See llvm::PassManagerBase::~PassManagerBase. */
1090void LLVMDisposePassManager(LLVMPassManagerRef PM);
1091
1092
Gordon Henriksen76a03742007-09-18 03:18:57 +00001093#ifdef __cplusplus
1094}
Gordon Henriksen76a03742007-09-18 03:18:57 +00001095
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001096namespace llvm {
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00001097 class MemoryBuffer;
Gordon Henriksen96571492008-03-16 15:55:43 +00001098 class PassManagerBase;
Gordon Henriksen0a68fe22007-12-12 01:04:30 +00001099
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00001100 #define DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \
1101 inline ty *unwrap(ref P) { \
1102 return reinterpret_cast<ty*>(P); \
1103 } \
1104 \
1105 inline ref wrap(const ty *P) { \
1106 return reinterpret_cast<ref>(const_cast<ty*>(P)); \
1107 }
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001108
Gordon Henriksen878114b2008-03-16 04:20:44 +00001109 #define DEFINE_ISA_CONVERSION_FUNCTIONS(ty, ref) \
1110 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \
1111 \
1112 template<typename T> \
1113 inline T *unwrap(ref P) { \
1114 return cast<T>(unwrap(P)); \
1115 }
1116
1117 #define DEFINE_STDCXX_CONVERSION_FUNCTIONS(ty, ref) \
1118 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \
1119 \
1120 template<typename T> \
1121 inline T *unwrap(ref P) { \
Chris Lattner7ba06612010-01-22 06:49:46 +00001122 T *Q = (T*)unwrap(P); \
Gordon Henriksen878114b2008-03-16 04:20:44 +00001123 assert(Q && "Invalid cast!"); \
1124 return Q; \
1125 }
1126
1127 DEFINE_ISA_CONVERSION_FUNCTIONS (Type, LLVMTypeRef )
1128 DEFINE_ISA_CONVERSION_FUNCTIONS (Value, LLVMValueRef )
Gordon Henriksen823f9732007-12-27 18:25:59 +00001129 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(Module, LLVMModuleRef )
1130 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(BasicBlock, LLVMBasicBlockRef )
Eric Christopher59278832008-08-08 19:39:37 +00001131 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(IRBuilder<>, LLVMBuilderRef )
Gordon Henriksen823f9732007-12-27 18:25:59 +00001132 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(MemoryBuffer, LLVMMemoryBufferRef )
Owen Anderson6773d382009-07-01 16:58:40 +00001133 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(LLVMContext, LLVMContextRef )
Erick Tryzelaar9f9857e2010-03-02 20:32:28 +00001134 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(Use, LLVMUseRef )
Gordon Henriksen878114b2008-03-16 04:20:44 +00001135 DEFINE_STDCXX_CONVERSION_FUNCTIONS(PassManagerBase, LLVMPassManagerRef )
Owen Anderson4698c5d2010-10-07 17:55:47 +00001136 DEFINE_STDCXX_CONVERSION_FUNCTIONS(PassRegistry, LLVMPassRegistryRef )
Jeffrey Yasskin091217b2010-01-27 20:34:15 +00001137 /* LLVMModuleProviderRef exists for historical reasons, but now just holds a
1138 * Module.
1139 */
1140 inline Module *unwrap(LLVMModuleProviderRef MP) {
1141 return reinterpret_cast<Module*>(MP);
1142 }
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001143
Gordon Henriksen878114b2008-03-16 04:20:44 +00001144 #undef DEFINE_STDCXX_CONVERSION_FUNCTIONS
1145 #undef DEFINE_ISA_CONVERSION_FUNCTIONS
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00001146 #undef DEFINE_SIMPLE_CONVERSION_FUNCTIONS
Erick Tryzelaar262332f2009-08-14 00:01:31 +00001147
1148 /* Specialized opaque context conversions.
1149 */
1150 inline LLVMContext **unwrap(LLVMContextRef* Tys) {
1151 return reinterpret_cast<LLVMContext**>(Tys);
1152 }
1153
1154 inline LLVMContextRef *wrap(const LLVMContext **Tys) {
1155 return reinterpret_cast<LLVMContextRef*>(const_cast<LLVMContext**>(Tys));
1156 }
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001157
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00001158 /* Specialized opaque type conversions.
1159 */
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001160 inline Type **unwrap(LLVMTypeRef* Tys) {
1161 return reinterpret_cast<Type**>(Tys);
1162 }
1163
Chris Lattner229907c2011-07-18 04:54:35 +00001164 inline LLVMTypeRef *wrap(Type **Tys) {
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001165 return reinterpret_cast<LLVMTypeRef*>(const_cast<Type**>(Tys));
1166 }
1167
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00001168 /* Specialized opaque value conversions.
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001169 */
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001170 inline Value **unwrap(LLVMValueRef *Vals) {
1171 return reinterpret_cast<Value**>(Vals);
1172 }
1173
1174 template<typename T>
1175 inline T **unwrap(LLVMValueRef *Vals, unsigned Length) {
1176 #if DEBUG
Chris Lattnerb7971152009-07-10 18:28:19 +00001177 for (LLVMValueRef *I = Vals, *E = Vals + Length; I != E; ++I)
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001178 cast<T>(*I);
1179 #endif
Hans Wennborg8f7edbf2011-06-04 16:00:19 +00001180 (void)Length;
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001181 return reinterpret_cast<T**>(Vals);
1182 }
1183
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001184 inline LLVMValueRef *wrap(const Value **Vals) {
1185 return reinterpret_cast<LLVMValueRef*>(const_cast<Value**>(Vals));
1186 }
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001187}
1188
1189#endif /* !defined(__cplusplus) */
1190
1191#endif /* !defined(LLVM_C_CORE_H) */