blob: 4d14af1e06bd0eb13bfe57daf277a7841c3daf9d [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,
Bill Wendling46ffaa92011-08-02 06:20:17 +0000128 /* removed 6 due to API changes */
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,
Bill Wendlingf891bf82011-07-31 06:30:59 +0000191 LLVMAtomicRMW = 57,
192
193 /* Exception Handling Operators */
Bill Wendlingfae14752011-08-12 20:24:12 +0000194 LLVMResume = 58,
195 LLVMLandingPad = 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 Wendlingfae14752011-08-12 20:24:12 +0000287typedef enum {
288 LLVMLandingPadCatch, /**< A catch clause */
289 LLVMLandingPadFilter /**< 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);
Torok Edwin1cd9ade2011-10-06 12:13:28 +0000358LLVMBool LLVMTypeIsSized(LLVMTypeRef Ty);
Gordon Henriksena49d4352008-03-07 19:13:06 +0000359
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000360/** See llvm::LLVMType::getContext. */
361LLVMContextRef LLVMGetTypeContext(LLVMTypeRef Ty);
362
Gordon Henriksen76a03742007-09-18 03:18:57 +0000363/* Operations on integer types */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000364LLVMTypeRef LLVMInt1TypeInContext(LLVMContextRef C);
365LLVMTypeRef LLVMInt8TypeInContext(LLVMContextRef C);
366LLVMTypeRef LLVMInt16TypeInContext(LLVMContextRef C);
367LLVMTypeRef LLVMInt32TypeInContext(LLVMContextRef C);
368LLVMTypeRef LLVMInt64TypeInContext(LLVMContextRef C);
369LLVMTypeRef LLVMIntTypeInContext(LLVMContextRef C, unsigned NumBits);
370
Gordon Henriksena735a9c2008-05-04 12:55:34 +0000371LLVMTypeRef LLVMInt1Type(void);
372LLVMTypeRef LLVMInt8Type(void);
373LLVMTypeRef LLVMInt16Type(void);
374LLVMTypeRef LLVMInt32Type(void);
375LLVMTypeRef LLVMInt64Type(void);
Gordon Henriksened7beaa2007-10-06 16:05:20 +0000376LLVMTypeRef LLVMIntType(unsigned NumBits);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000377unsigned LLVMGetIntTypeWidth(LLVMTypeRef IntegerTy);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000378
379/* Operations on real types */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000380LLVMTypeRef LLVMFloatTypeInContext(LLVMContextRef C);
381LLVMTypeRef LLVMDoubleTypeInContext(LLVMContextRef C);
382LLVMTypeRef LLVMX86FP80TypeInContext(LLVMContextRef C);
383LLVMTypeRef LLVMFP128TypeInContext(LLVMContextRef C);
384LLVMTypeRef LLVMPPCFP128TypeInContext(LLVMContextRef C);
385
Gordon Henriksena735a9c2008-05-04 12:55:34 +0000386LLVMTypeRef LLVMFloatType(void);
387LLVMTypeRef LLVMDoubleType(void);
388LLVMTypeRef LLVMX86FP80Type(void);
389LLVMTypeRef LLVMFP128Type(void);
390LLVMTypeRef LLVMPPCFP128Type(void);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000391
392/* Operations on function types */
Gordon Henriksened7beaa2007-10-06 16:05:20 +0000393LLVMTypeRef LLVMFunctionType(LLVMTypeRef ReturnType,
394 LLVMTypeRef *ParamTypes, unsigned ParamCount,
Chris Lattner25963c62010-01-09 22:27:07 +0000395 LLVMBool IsVarArg);
396LLVMBool LLVMIsFunctionVarArg(LLVMTypeRef FunctionTy);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000397LLVMTypeRef LLVMGetReturnType(LLVMTypeRef FunctionTy);
398unsigned LLVMCountParamTypes(LLVMTypeRef FunctionTy);
399void LLVMGetParamTypes(LLVMTypeRef FunctionTy, LLVMTypeRef *Dest);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000400
401/* Operations on struct types */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000402LLVMTypeRef LLVMStructTypeInContext(LLVMContextRef C, LLVMTypeRef *ElementTypes,
Chris Lattner25963c62010-01-09 22:27:07 +0000403 unsigned ElementCount, LLVMBool Packed);
Gordon Henriksened7beaa2007-10-06 16:05:20 +0000404LLVMTypeRef LLVMStructType(LLVMTypeRef *ElementTypes, unsigned ElementCount,
Chris Lattner25963c62010-01-09 22:27:07 +0000405 LLVMBool Packed);
Chris Lattnere71ccde2011-07-14 05:53:17 +0000406LLVMTypeRef LLVMStructCreateNamed(LLVMContextRef C, const char *Name);
Torok Edwin0d5f6ae2011-10-06 12:12:50 +0000407const char *LLVMGetStructName(LLVMTypeRef Ty);
Chris Lattnere71ccde2011-07-14 05:53:17 +0000408void LLVMStructSetBody(LLVMTypeRef StructTy, LLVMTypeRef *ElementTypes,
409 unsigned ElementCount, LLVMBool Packed);
410
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000411unsigned LLVMCountStructElementTypes(LLVMTypeRef StructTy);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000412void LLVMGetStructElementTypes(LLVMTypeRef StructTy, LLVMTypeRef *Dest);
Chris Lattner25963c62010-01-09 22:27:07 +0000413LLVMBool LLVMIsPackedStruct(LLVMTypeRef StructTy);
Chris Lattner17cf05b2011-07-14 16:20:28 +0000414LLVMBool LLVMIsOpaqueStruct(LLVMTypeRef StructTy);
415
416LLVMTypeRef LLVMGetTypeByName(LLVMModuleRef M, const char *Name);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000417
418/* Operations on array, pointer, and vector types (sequence types) */
Gordon Henriksened7beaa2007-10-06 16:05:20 +0000419LLVMTypeRef LLVMArrayType(LLVMTypeRef ElementType, unsigned ElementCount);
Gordon Henriksen5a3fe032007-12-17 16:08:32 +0000420LLVMTypeRef LLVMPointerType(LLVMTypeRef ElementType, unsigned AddressSpace);
Gordon Henriksened7beaa2007-10-06 16:05:20 +0000421LLVMTypeRef LLVMVectorType(LLVMTypeRef ElementType, unsigned ElementCount);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000422
423LLVMTypeRef LLVMGetElementType(LLVMTypeRef Ty);
424unsigned LLVMGetArrayLength(LLVMTypeRef ArrayTy);
Gordon Henriksen5a3fe032007-12-17 16:08:32 +0000425unsigned LLVMGetPointerAddressSpace(LLVMTypeRef PointerTy);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000426unsigned LLVMGetVectorSize(LLVMTypeRef VectorTy);
427
428/* Operations on other types */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000429LLVMTypeRef LLVMVoidTypeInContext(LLVMContextRef C);
430LLVMTypeRef LLVMLabelTypeInContext(LLVMContextRef C);
Dale Johannesen95b67af2010-09-10 21:58:02 +0000431LLVMTypeRef LLVMX86MMXTypeInContext(LLVMContextRef C);
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000432
Gordon Henriksena735a9c2008-05-04 12:55:34 +0000433LLVMTypeRef LLVMVoidType(void);
434LLVMTypeRef LLVMLabelType(void);
Dale Johannesen95b67af2010-09-10 21:58:02 +0000435LLVMTypeRef LLVMX86MMXType(void);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000436
Gordon Henriksen76a03742007-09-18 03:18:57 +0000437/*===-- Values ------------------------------------------------------------===*/
438
439/* The bulk of LLVM's object model consists of values, which comprise a very
440 * rich type hierarchy.
Gordon Henriksen76a03742007-09-18 03:18:57 +0000441 */
442
Gordon Henriksen29e38942008-12-19 18:39:45 +0000443#define LLVM_FOR_EACH_VALUE_SUBCLASS(macro) \
444 macro(Argument) \
445 macro(BasicBlock) \
446 macro(InlineAsm) \
447 macro(User) \
448 macro(Constant) \
449 macro(ConstantAggregateZero) \
450 macro(ConstantArray) \
451 macro(ConstantExpr) \
452 macro(ConstantFP) \
453 macro(ConstantInt) \
454 macro(ConstantPointerNull) \
455 macro(ConstantStruct) \
456 macro(ConstantVector) \
457 macro(GlobalValue) \
458 macro(Function) \
459 macro(GlobalAlias) \
460 macro(GlobalVariable) \
461 macro(UndefValue) \
462 macro(Instruction) \
463 macro(BinaryOperator) \
464 macro(CallInst) \
465 macro(IntrinsicInst) \
466 macro(DbgInfoIntrinsic) \
467 macro(DbgDeclareInst) \
Gordon Henriksen29e38942008-12-19 18:39:45 +0000468 macro(EHSelectorInst) \
469 macro(MemIntrinsic) \
470 macro(MemCpyInst) \
471 macro(MemMoveInst) \
472 macro(MemSetInst) \
473 macro(CmpInst) \
474 macro(FCmpInst) \
475 macro(ICmpInst) \
Gordon Henriksen29e38942008-12-19 18:39:45 +0000476 macro(ExtractElementInst) \
477 macro(GetElementPtrInst) \
478 macro(InsertElementInst) \
479 macro(InsertValueInst) \
Bill Wendlingfae14752011-08-12 20:24:12 +0000480 macro(LandingPadInst) \
Gordon Henriksen29e38942008-12-19 18:39:45 +0000481 macro(PHINode) \
482 macro(SelectInst) \
483 macro(ShuffleVectorInst) \
484 macro(StoreInst) \
485 macro(TerminatorInst) \
486 macro(BranchInst) \
487 macro(InvokeInst) \
488 macro(ReturnInst) \
489 macro(SwitchInst) \
490 macro(UnreachableInst) \
Bill Wendlingf891bf82011-07-31 06:30:59 +0000491 macro(ResumeInst) \
Gordon Henriksen29e38942008-12-19 18:39:45 +0000492 macro(UnaryInstruction) \
Victor Hernandez8acf2952009-10-23 21:09:37 +0000493 macro(AllocaInst) \
Gordon Henriksen29e38942008-12-19 18:39:45 +0000494 macro(CastInst) \
Gordon Henriksen05a868f2008-12-19 18:51:17 +0000495 macro(BitCastInst) \
496 macro(FPExtInst) \
497 macro(FPToSIInst) \
498 macro(FPToUIInst) \
499 macro(FPTruncInst) \
500 macro(IntToPtrInst) \
501 macro(PtrToIntInst) \
502 macro(SExtInst) \
503 macro(SIToFPInst) \
504 macro(TruncInst) \
505 macro(UIToFPInst) \
506 macro(ZExtInst) \
507 macro(ExtractValueInst) \
Gordon Henriksen05a868f2008-12-19 18:51:17 +0000508 macro(LoadInst) \
509 macro(VAArgInst)
Gordon Henriksen29e38942008-12-19 18:39:45 +0000510
Gordon Henriksen76a03742007-09-18 03:18:57 +0000511/* Operations on all values */
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000512LLVMTypeRef LLVMTypeOf(LLVMValueRef Val);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000513const char *LLVMGetValueName(LLVMValueRef Val);
514void LLVMSetValueName(LLVMValueRef Val, const char *Name);
Gordon Henriksen1d0d24c2007-10-06 00:08:49 +0000515void LLVMDumpValue(LLVMValueRef Val);
Chris Lattner40cf28d2009-10-12 04:01:02 +0000516void LLVMReplaceAllUsesWith(LLVMValueRef OldVal, LLVMValueRef NewVal);
Erick Tryzelaard8531fa2010-02-28 09:45:59 +0000517int LLVMHasMetadata(LLVMValueRef Val);
518LLVMValueRef LLVMGetMetadata(LLVMValueRef Val, unsigned KindID);
519void LLVMSetMetadata(LLVMValueRef Val, unsigned KindID, LLVMValueRef Node);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000520
Gordon Henriksen29e38942008-12-19 18:39:45 +0000521/* Conversion functions. Return the input value if it is an instance of the
522 specified class, otherwise NULL. See llvm::dyn_cast_or_null<>. */
523#define LLVM_DECLARE_VALUE_CAST(name) \
524 LLVMValueRef LLVMIsA##name(LLVMValueRef Val);
525LLVM_FOR_EACH_VALUE_SUBCLASS(LLVM_DECLARE_VALUE_CAST)
526
Chris Lattner40cf28d2009-10-12 04:01:02 +0000527/* Operations on Uses */
Erick Tryzelaar9f9857e2010-03-02 20:32:28 +0000528LLVMUseRef LLVMGetFirstUse(LLVMValueRef Val);
529LLVMUseRef LLVMGetNextUse(LLVMUseRef U);
530LLVMValueRef LLVMGetUser(LLVMUseRef U);
531LLVMValueRef LLVMGetUsedValue(LLVMUseRef U);
Chris Lattner40cf28d2009-10-12 04:01:02 +0000532
533/* Operations on Users */
534LLVMValueRef LLVMGetOperand(LLVMValueRef Val, unsigned Index);
Erick Tryzelaarb4d48702010-08-20 14:51:22 +0000535void LLVMSetOperand(LLVMValueRef User, unsigned Index, LLVMValueRef Val);
536int LLVMGetNumOperands(LLVMValueRef Val);
Chris Lattner40cf28d2009-10-12 04:01:02 +0000537
Gordon Henriksen76a03742007-09-18 03:18:57 +0000538/* Operations on constants of any type */
Gordon Henriksen1046c732007-10-06 15:11:06 +0000539LLVMValueRef LLVMConstNull(LLVMTypeRef Ty); /* all zeroes */
540LLVMValueRef LLVMConstAllOnes(LLVMTypeRef Ty); /* only for int/vector */
Gordon Henriksen76a03742007-09-18 03:18:57 +0000541LLVMValueRef LLVMGetUndef(LLVMTypeRef Ty);
Chris Lattner25963c62010-01-09 22:27:07 +0000542LLVMBool LLVMIsConstant(LLVMValueRef Val);
543LLVMBool LLVMIsNull(LLVMValueRef Val);
544LLVMBool LLVMIsUndef(LLVMValueRef Val);
Chris Lattner7f318242009-07-06 17:29:59 +0000545LLVMValueRef LLVMConstPointerNull(LLVMTypeRef Ty);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000546
Erick Tryzelaard8531fa2010-02-28 09:45:59 +0000547/* Operations on metadata */
548LLVMValueRef LLVMMDStringInContext(LLVMContextRef C, const char *Str,
549 unsigned SLen);
550LLVMValueRef LLVMMDString(const char *Str, unsigned SLen);
551LLVMValueRef LLVMMDNodeInContext(LLVMContextRef C, LLVMValueRef *Vals,
552 unsigned Count);
553LLVMValueRef LLVMMDNode(LLVMValueRef *Vals, unsigned Count);
Torok Edwinfec812e2011-10-06 12:13:11 +0000554const char *LLVMGetMDString(LLVMValueRef V, unsigned* Len);
555int LLVMGetMDNodeNumOperands(LLVMValueRef V);
556LLVMValueRef *LLVMGetMDNodeOperand(LLVMValueRef V, unsigned i);
557unsigned LLVMGetNamedMetadataNumOperands(LLVMModuleRef M, const char* name);
558void LLVMGetNamedMetadataOperands(LLVMModuleRef M, const char* name, LLVMValueRef *Dest);
Erick Tryzelaard8531fa2010-02-28 09:45:59 +0000559
Gordon Henriksen76a03742007-09-18 03:18:57 +0000560/* Operations on scalar constants */
Gordon Henriksen1046c732007-10-06 15:11:06 +0000561LLVMValueRef LLVMConstInt(LLVMTypeRef IntTy, unsigned long long N,
Chris Lattner25963c62010-01-09 22:27:07 +0000562 LLVMBool SignExtend);
Chris Lattner4329e072010-11-23 02:47:22 +0000563LLVMValueRef LLVMConstIntOfArbitraryPrecision(LLVMTypeRef IntTy,
564 unsigned NumWords,
565 const uint64_t Words[]);
Erick Tryzelaardd991352009-08-16 23:36:46 +0000566LLVMValueRef LLVMConstIntOfString(LLVMTypeRef IntTy, const char *Text,
567 uint8_t Radix);
568LLVMValueRef LLVMConstIntOfStringAndSize(LLVMTypeRef IntTy, const char *Text,
569 unsigned SLen, uint8_t Radix);
Gordon Henriksen1046c732007-10-06 15:11:06 +0000570LLVMValueRef LLVMConstReal(LLVMTypeRef RealTy, double N);
Gordon Henriksen931e1212008-02-02 01:07:50 +0000571LLVMValueRef LLVMConstRealOfString(LLVMTypeRef RealTy, const char *Text);
Erick Tryzelaardd991352009-08-16 23:36:46 +0000572LLVMValueRef LLVMConstRealOfStringAndSize(LLVMTypeRef RealTy, const char *Text,
573 unsigned SLen);
Chris Lattner40cf28d2009-10-12 04:01:02 +0000574unsigned long long LLVMConstIntGetZExtValue(LLVMValueRef ConstantVal);
575long long LLVMConstIntGetSExtValue(LLVMValueRef ConstantVal);
Erick Tryzelaardd991352009-08-16 23:36:46 +0000576
Gordon Henriksen76a03742007-09-18 03:18:57 +0000577
578/* Operations on composite constants */
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000579LLVMValueRef LLVMConstStringInContext(LLVMContextRef C, const char *Str,
Chris Lattner25963c62010-01-09 22:27:07 +0000580 unsigned Length, LLVMBool DontNullTerminate);
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000581LLVMValueRef LLVMConstStructInContext(LLVMContextRef C,
582 LLVMValueRef *ConstantVals,
Chris Lattner25963c62010-01-09 22:27:07 +0000583 unsigned Count, LLVMBool Packed);
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000584
Gordon Henriksen1046c732007-10-06 15:11:06 +0000585LLVMValueRef LLVMConstString(const char *Str, unsigned Length,
Chris Lattner25963c62010-01-09 22:27:07 +0000586 LLVMBool DontNullTerminate);
Gordon Henriksen2ad5aef2008-04-25 03:21:19 +0000587LLVMValueRef LLVMConstArray(LLVMTypeRef ElementTy,
Gordon Henriksen1046c732007-10-06 15:11:06 +0000588 LLVMValueRef *ConstantVals, unsigned Length);
589LLVMValueRef LLVMConstStruct(LLVMValueRef *ConstantVals, unsigned Count,
Chris Lattner25963c62010-01-09 22:27:07 +0000590 LLVMBool Packed);
Rafael Espindola784ad242011-07-14 19:09:08 +0000591LLVMValueRef LLVMConstNamedStruct(LLVMTypeRef StructTy,
592 LLVMValueRef *ConstantVals,
593 unsigned Count);
Gordon Henriksen1046c732007-10-06 15:11:06 +0000594LLVMValueRef LLVMConstVector(LLVMValueRef *ScalarConstantVals, unsigned Size);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000595
Gordon Henriksen7ce31762007-10-06 14:29:36 +0000596/* Constant expressions */
Chris Lattner40cf28d2009-10-12 04:01:02 +0000597LLVMOpcode LLVMGetConstOpcode(LLVMValueRef ConstantVal);
Erick Tryzelaarfd529d72009-08-19 08:36:49 +0000598LLVMValueRef LLVMAlignOf(LLVMTypeRef Ty);
Gordon Henriksen7ce31762007-10-06 14:29:36 +0000599LLVMValueRef LLVMSizeOf(LLVMTypeRef Ty);
600LLVMValueRef LLVMConstNeg(LLVMValueRef ConstantVal);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +0000601LLVMValueRef LLVMConstNSWNeg(LLVMValueRef ConstantVal);
602LLVMValueRef LLVMConstNUWNeg(LLVMValueRef ConstantVal);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +0000603LLVMValueRef LLVMConstFNeg(LLVMValueRef ConstantVal);
Gordon Henriksen7ce31762007-10-06 14:29:36 +0000604LLVMValueRef LLVMConstNot(LLVMValueRef ConstantVal);
605LLVMValueRef LLVMConstAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Dan Gohmane4ca02d2009-09-03 23:34:49 +0000606LLVMValueRef LLVMConstNSWAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +0000607LLVMValueRef LLVMConstNUWAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +0000608LLVMValueRef LLVMConstFAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Gordon Henriksen7ce31762007-10-06 14:29:36 +0000609LLVMValueRef LLVMConstSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +0000610LLVMValueRef LLVMConstNSWSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
611LLVMValueRef LLVMConstNUWSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +0000612LLVMValueRef LLVMConstFSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Gordon Henriksen7ce31762007-10-06 14:29:36 +0000613LLVMValueRef LLVMConstMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +0000614LLVMValueRef LLVMConstNSWMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
615LLVMValueRef LLVMConstNUWMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +0000616LLVMValueRef LLVMConstFMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Gordon Henriksen7ce31762007-10-06 14:29:36 +0000617LLVMValueRef LLVMConstUDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
618LLVMValueRef LLVMConstSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Dan Gohmane4ca02d2009-09-03 23:34:49 +0000619LLVMValueRef LLVMConstExactSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
Gordon Henriksen7ce31762007-10-06 14:29:36 +0000620LLVMValueRef LLVMConstFDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
621LLVMValueRef LLVMConstURem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
622LLVMValueRef LLVMConstSRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
623LLVMValueRef LLVMConstFRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
624LLVMValueRef LLVMConstAnd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
625LLVMValueRef LLVMConstOr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
626LLVMValueRef LLVMConstXor(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
627LLVMValueRef LLVMConstICmp(LLVMIntPredicate Predicate,
628 LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
629LLVMValueRef LLVMConstFCmp(LLVMRealPredicate Predicate,
630 LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
631LLVMValueRef LLVMConstShl(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
632LLVMValueRef LLVMConstLShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
633LLVMValueRef LLVMConstAShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
634LLVMValueRef LLVMConstGEP(LLVMValueRef ConstantVal,
635 LLVMValueRef *ConstantIndices, unsigned NumIndices);
Dan Gohmane4ca02d2009-09-03 23:34:49 +0000636LLVMValueRef LLVMConstInBoundsGEP(LLVMValueRef ConstantVal,
637 LLVMValueRef *ConstantIndices,
638 unsigned NumIndices);
Gordon Henriksen7ce31762007-10-06 14:29:36 +0000639LLVMValueRef LLVMConstTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
640LLVMValueRef LLVMConstSExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
641LLVMValueRef LLVMConstZExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
642LLVMValueRef LLVMConstFPTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
643LLVMValueRef LLVMConstFPExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
644LLVMValueRef LLVMConstUIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
645LLVMValueRef LLVMConstSIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
646LLVMValueRef LLVMConstFPToUI(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
647LLVMValueRef LLVMConstFPToSI(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
648LLVMValueRef LLVMConstPtrToInt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
649LLVMValueRef LLVMConstIntToPtr(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
650LLVMValueRef LLVMConstBitCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +0000651LLVMValueRef LLVMConstZExtOrBitCast(LLVMValueRef ConstantVal,
652 LLVMTypeRef ToType);
653LLVMValueRef LLVMConstSExtOrBitCast(LLVMValueRef ConstantVal,
654 LLVMTypeRef ToType);
655LLVMValueRef LLVMConstTruncOrBitCast(LLVMValueRef ConstantVal,
656 LLVMTypeRef ToType);
657LLVMValueRef LLVMConstPointerCast(LLVMValueRef ConstantVal,
658 LLVMTypeRef ToType);
659LLVMValueRef LLVMConstIntCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType,
Chris Lattner25963c62010-01-09 22:27:07 +0000660 LLVMBool isSigned);
Erick Tryzelaar4cc690c2009-08-16 02:20:12 +0000661LLVMValueRef LLVMConstFPCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
Gordon Henriksen7ce31762007-10-06 14:29:36 +0000662LLVMValueRef LLVMConstSelect(LLVMValueRef ConstantCondition,
663 LLVMValueRef ConstantIfTrue,
664 LLVMValueRef ConstantIfFalse);
665LLVMValueRef LLVMConstExtractElement(LLVMValueRef VectorConstant,
666 LLVMValueRef IndexConstant);
667LLVMValueRef LLVMConstInsertElement(LLVMValueRef VectorConstant,
668 LLVMValueRef ElementValueConstant,
669 LLVMValueRef IndexConstant);
670LLVMValueRef LLVMConstShuffleVector(LLVMValueRef VectorAConstant,
671 LLVMValueRef VectorBConstant,
672 LLVMValueRef MaskConstant);
Dan Gohmand5104a52008-11-03 22:55:43 +0000673LLVMValueRef LLVMConstExtractValue(LLVMValueRef AggConstant, unsigned *IdxList,
674 unsigned NumIdx);
675LLVMValueRef LLVMConstInsertValue(LLVMValueRef AggConstant,
676 LLVMValueRef ElementValueConstant,
677 unsigned *IdxList, unsigned NumIdx);
Chris Lattner25963c62010-01-09 22:27:07 +0000678LLVMValueRef LLVMConstInlineAsm(LLVMTypeRef Ty,
Chris Lattner3d1f5522008-12-17 21:39:50 +0000679 const char *AsmString, const char *Constraints,
Chris Lattner25963c62010-01-09 22:27:07 +0000680 LLVMBool HasSideEffects, LLVMBool IsAlignStack);
Erick Tryzelaar0fb26ef2010-02-28 09:46:06 +0000681LLVMValueRef LLVMBlockAddress(LLVMValueRef F, LLVMBasicBlockRef BB);
Gordon Henriksen7ce31762007-10-06 14:29:36 +0000682
Gordon Henriksen76a03742007-09-18 03:18:57 +0000683/* Operations on global variables, functions, and aliases (globals) */
Gordon Henriksen265f7802008-03-19 01:11:35 +0000684LLVMModuleRef LLVMGetGlobalParent(LLVMValueRef Global);
Chris Lattner25963c62010-01-09 22:27:07 +0000685LLVMBool LLVMIsDeclaration(LLVMValueRef Global);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000686LLVMLinkage LLVMGetLinkage(LLVMValueRef Global);
687void LLVMSetLinkage(LLVMValueRef Global, LLVMLinkage Linkage);
688const char *LLVMGetSection(LLVMValueRef Global);
689void LLVMSetSection(LLVMValueRef Global, const char *Section);
690LLVMVisibility LLVMGetVisibility(LLVMValueRef Global);
691void LLVMSetVisibility(LLVMValueRef Global, LLVMVisibility Viz);
692unsigned LLVMGetAlignment(LLVMValueRef Global);
693void LLVMSetAlignment(LLVMValueRef Global, unsigned Bytes);
694
695/* Operations on global variables */
696LLVMValueRef LLVMAddGlobal(LLVMModuleRef M, LLVMTypeRef Ty, const char *Name);
Erick Tryzelaar06894b32010-02-28 09:46:13 +0000697LLVMValueRef LLVMAddGlobalInAddressSpace(LLVMModuleRef M, LLVMTypeRef Ty,
698 const char *Name,
699 unsigned AddressSpace);
Gordon Henriksen783f7bb2007-10-08 03:45:09 +0000700LLVMValueRef LLVMGetNamedGlobal(LLVMModuleRef M, const char *Name);
Gordon Henriksen07a45f42008-03-23 22:21:29 +0000701LLVMValueRef LLVMGetFirstGlobal(LLVMModuleRef M);
702LLVMValueRef LLVMGetLastGlobal(LLVMModuleRef M);
703LLVMValueRef LLVMGetNextGlobal(LLVMValueRef GlobalVar);
704LLVMValueRef LLVMGetPreviousGlobal(LLVMValueRef GlobalVar);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000705void LLVMDeleteGlobal(LLVMValueRef GlobalVar);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000706LLVMValueRef LLVMGetInitializer(LLVMValueRef GlobalVar);
707void LLVMSetInitializer(LLVMValueRef GlobalVar, LLVMValueRef ConstantVal);
Chris Lattner25963c62010-01-09 22:27:07 +0000708LLVMBool LLVMIsThreadLocal(LLVMValueRef GlobalVar);
709void LLVMSetThreadLocal(LLVMValueRef GlobalVar, LLVMBool IsThreadLocal);
710LLVMBool LLVMIsGlobalConstant(LLVMValueRef GlobalVar);
711void LLVMSetGlobalConstant(LLVMValueRef GlobalVar, LLVMBool IsConstant);
Gordon Henriksen76a03742007-09-18 03:18:57 +0000712
Chris Lattner3d1f5522008-12-17 21:39:50 +0000713/* Operations on aliases */
714LLVMValueRef LLVMAddAlias(LLVMModuleRef M, LLVMTypeRef Ty, LLVMValueRef Aliasee,
715 const char *Name);
716
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000717/* Operations on functions */
718LLVMValueRef LLVMAddFunction(LLVMModuleRef M, const char *Name,
719 LLVMTypeRef FunctionTy);
Gordon Henriksen783f7bb2007-10-08 03:45:09 +0000720LLVMValueRef LLVMGetNamedFunction(LLVMModuleRef M, const char *Name);
Gordon Henriksen054817c2008-03-19 03:47:18 +0000721LLVMValueRef LLVMGetFirstFunction(LLVMModuleRef M);
722LLVMValueRef LLVMGetLastFunction(LLVMModuleRef M);
723LLVMValueRef LLVMGetNextFunction(LLVMValueRef Fn);
724LLVMValueRef LLVMGetPreviousFunction(LLVMValueRef Fn);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000725void LLVMDeleteFunction(LLVMValueRef Fn);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000726unsigned LLVMGetIntrinsicID(LLVMValueRef Fn);
727unsigned LLVMGetFunctionCallConv(LLVMValueRef Fn);
728void LLVMSetFunctionCallConv(LLVMValueRef Fn, unsigned CC);
Gordon Henriksend930f912008-08-17 18:44:35 +0000729const char *LLVMGetGC(LLVMValueRef Fn);
730void LLVMSetGC(LLVMValueRef Fn, const char *Name);
Duncan Sands7374a012009-05-06 12:21:17 +0000731void LLVMAddFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA);
Chris Lattner40cf28d2009-10-12 04:01:02 +0000732LLVMAttribute LLVMGetFunctionAttr(LLVMValueRef Fn);
Duncan Sands7374a012009-05-06 12:21:17 +0000733void LLVMRemoveFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000734
Gordon Henriksen265f7802008-03-19 01:11:35 +0000735/* Operations on parameters */
736unsigned LLVMCountParams(LLVMValueRef Fn);
737void LLVMGetParams(LLVMValueRef Fn, LLVMValueRef *Params);
738LLVMValueRef LLVMGetParam(LLVMValueRef Fn, unsigned Index);
739LLVMValueRef LLVMGetParamParent(LLVMValueRef Inst);
Gordon Henriksen07a45f42008-03-23 22:21:29 +0000740LLVMValueRef LLVMGetFirstParam(LLVMValueRef Fn);
741LLVMValueRef LLVMGetLastParam(LLVMValueRef Fn);
742LLVMValueRef LLVMGetNextParam(LLVMValueRef Arg);
743LLVMValueRef LLVMGetPreviousParam(LLVMValueRef Arg);
Devang Patel4c758ea2008-09-25 21:00:45 +0000744void LLVMAddAttribute(LLVMValueRef Arg, LLVMAttribute PA);
745void LLVMRemoveAttribute(LLVMValueRef Arg, LLVMAttribute PA);
Chris Lattner40cf28d2009-10-12 04:01:02 +0000746LLVMAttribute LLVMGetAttribute(LLVMValueRef Arg);
Gordon Henriksen2d9cc212008-04-28 17:37:06 +0000747void LLVMSetParamAlignment(LLVMValueRef Arg, unsigned align);
Gordon Henriksen265f7802008-03-19 01:11:35 +0000748
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000749/* Operations on basic blocks */
Gordon Henriksen07a45f42008-03-23 22:21:29 +0000750LLVMValueRef LLVMBasicBlockAsValue(LLVMBasicBlockRef BB);
Chris Lattner25963c62010-01-09 22:27:07 +0000751LLVMBool LLVMValueIsBasicBlock(LLVMValueRef Val);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000752LLVMBasicBlockRef LLVMValueAsBasicBlock(LLVMValueRef Val);
Gordon Henriksen07a45f42008-03-23 22:21:29 +0000753LLVMValueRef LLVMGetBasicBlockParent(LLVMBasicBlockRef BB);
Nate Begeman43c322b2011-08-23 20:27:46 +0000754LLVMValueRef LLVMGetBasicBlockTerminator(LLVMBasicBlockRef BB);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000755unsigned LLVMCountBasicBlocks(LLVMValueRef Fn);
756void LLVMGetBasicBlocks(LLVMValueRef Fn, LLVMBasicBlockRef *BasicBlocks);
Gordon Henriksen054817c2008-03-19 03:47:18 +0000757LLVMBasicBlockRef LLVMGetFirstBasicBlock(LLVMValueRef Fn);
758LLVMBasicBlockRef LLVMGetLastBasicBlock(LLVMValueRef Fn);
759LLVMBasicBlockRef LLVMGetNextBasicBlock(LLVMBasicBlockRef BB);
760LLVMBasicBlockRef LLVMGetPreviousBasicBlock(LLVMBasicBlockRef BB);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000761LLVMBasicBlockRef LLVMGetEntryBasicBlock(LLVMValueRef Fn);
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000762
763LLVMBasicBlockRef LLVMAppendBasicBlockInContext(LLVMContextRef C,
764 LLVMValueRef Fn,
765 const char *Name);
766LLVMBasicBlockRef LLVMInsertBasicBlockInContext(LLVMContextRef C,
767 LLVMBasicBlockRef BB,
768 const char *Name);
769
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000770LLVMBasicBlockRef LLVMAppendBasicBlock(LLVMValueRef Fn, const char *Name);
771LLVMBasicBlockRef LLVMInsertBasicBlock(LLVMBasicBlockRef InsertBeforeBB,
772 const char *Name);
773void LLVMDeleteBasicBlock(LLVMBasicBlockRef BB);
Nate Begeman43c322b2011-08-23 20:27:46 +0000774void LLVMRemoveBasicBlockFromParent(LLVMBasicBlockRef BB);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000775
Duncan Sandsb1d61aa2010-07-19 15:31:07 +0000776void LLVMMoveBasicBlockBefore(LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos);
777void LLVMMoveBasicBlockAfter(LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos);
778
Gordon Henriksen054817c2008-03-19 03:47:18 +0000779LLVMValueRef LLVMGetFirstInstruction(LLVMBasicBlockRef BB);
780LLVMValueRef LLVMGetLastInstruction(LLVMBasicBlockRef BB);
Nate Begeman43c322b2011-08-23 20:27:46 +0000781
782/* Operations on instructions */
783LLVMBasicBlockRef LLVMGetInstructionParent(LLVMValueRef Inst);
Gordon Henriksen054817c2008-03-19 03:47:18 +0000784LLVMValueRef LLVMGetNextInstruction(LLVMValueRef Inst);
785LLVMValueRef LLVMGetPreviousInstruction(LLVMValueRef Inst);
Devang Pateldbebc6f2011-10-03 20:59:18 +0000786void LLVMInstructionEraseFromParent(LLVMValueRef Inst);
Torok Edwin60c40de2011-10-06 12:13:20 +0000787LLVMIntPredicate LLVMGetICmpPredicate(LLVMValueRef Inst);
Gordon Henriksen265f7802008-03-19 01:11:35 +0000788
Gordon Henriksen1158c532007-12-29 20:45:00 +0000789/* Operations on call sites */
790void LLVMSetInstructionCallConv(LLVMValueRef Instr, unsigned CC);
791unsigned LLVMGetInstructionCallConv(LLVMValueRef Instr);
Devang Patel4c758ea2008-09-25 21:00:45 +0000792void LLVMAddInstrAttribute(LLVMValueRef Instr, unsigned index, LLVMAttribute);
793void LLVMRemoveInstrAttribute(LLVMValueRef Instr, unsigned index,
794 LLVMAttribute);
Gordon Henriksen2d9cc212008-04-28 17:37:06 +0000795void LLVMSetInstrParamAlignment(LLVMValueRef Instr, unsigned index,
796 unsigned align);
Gordon Henriksen1158c532007-12-29 20:45:00 +0000797
Gordon Henrikseneeb65372008-08-30 16:34:54 +0000798/* Operations on call instructions (only) */
Chris Lattner25963c62010-01-09 22:27:07 +0000799LLVMBool LLVMIsTailCall(LLVMValueRef CallInst);
800void LLVMSetTailCall(LLVMValueRef CallInst, LLVMBool IsTailCall);
Gordon Henrikseneeb65372008-08-30 16:34:54 +0000801
Nate Begeman43c322b2011-08-23 20:27:46 +0000802/* Operations on switch instructions (only) */
803LLVMBasicBlockRef LLVMGetSwitchDefaultDest(LLVMValueRef SwitchInstr);
804
Gordon Henriksen44dd8fb2007-10-08 18:14:39 +0000805/* Operations on phi nodes */
806void LLVMAddIncoming(LLVMValueRef PhiNode, LLVMValueRef *IncomingValues,
807 LLVMBasicBlockRef *IncomingBlocks, unsigned Count);
808unsigned LLVMCountIncoming(LLVMValueRef PhiNode);
809LLVMValueRef LLVMGetIncomingValue(LLVMValueRef PhiNode, unsigned Index);
810LLVMBasicBlockRef LLVMGetIncomingBlock(LLVMValueRef PhiNode, unsigned Index);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000811
812/*===-- Instruction builders ----------------------------------------------===*/
813
814/* An instruction builder represents a point within a basic block, and is the
815 * exclusive means of building instructions using the C interface.
816 */
817
Erick Tryzelaar262332f2009-08-14 00:01:31 +0000818LLVMBuilderRef LLVMCreateBuilderInContext(LLVMContextRef C);
Gordon Henriksena735a9c2008-05-04 12:55:34 +0000819LLVMBuilderRef LLVMCreateBuilder(void);
Gordon Henriksen054817c2008-03-19 03:47:18 +0000820void LLVMPositionBuilder(LLVMBuilderRef Builder, LLVMBasicBlockRef Block,
821 LLVMValueRef Instr);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000822void LLVMPositionBuilderBefore(LLVMBuilderRef Builder, LLVMValueRef Instr);
823void LLVMPositionBuilderAtEnd(LLVMBuilderRef Builder, LLVMBasicBlockRef Block);
Gordon Henriksen265f7802008-03-19 01:11:35 +0000824LLVMBasicBlockRef LLVMGetInsertBlock(LLVMBuilderRef Builder);
Chris Lattner3d1f5522008-12-17 21:39:50 +0000825void LLVMClearInsertionPosition(LLVMBuilderRef Builder);
826void LLVMInsertIntoBuilder(LLVMBuilderRef Builder, LLVMValueRef Instr);
Erick Tryzelaar9813bea2009-08-16 02:20:57 +0000827void LLVMInsertIntoBuilderWithName(LLVMBuilderRef Builder, LLVMValueRef Instr,
828 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000829void LLVMDisposeBuilder(LLVMBuilderRef Builder);
830
Erick Tryzelaard8531fa2010-02-28 09:45:59 +0000831/* Metadata */
832void LLVMSetCurrentDebugLocation(LLVMBuilderRef Builder, LLVMValueRef L);
833LLVMValueRef LLVMGetCurrentDebugLocation(LLVMBuilderRef Builder);
834void LLVMSetInstDebugLocation(LLVMBuilderRef Builder, LLVMValueRef Inst);
835
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000836/* Terminators */
837LLVMValueRef LLVMBuildRetVoid(LLVMBuilderRef);
838LLVMValueRef LLVMBuildRet(LLVMBuilderRef, LLVMValueRef V);
Erick Tryzelaarfd529d72009-08-19 08:36:49 +0000839LLVMValueRef LLVMBuildAggregateRet(LLVMBuilderRef, LLVMValueRef *RetVals,
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +0000840 unsigned N);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000841LLVMValueRef LLVMBuildBr(LLVMBuilderRef, LLVMBasicBlockRef Dest);
842LLVMValueRef LLVMBuildCondBr(LLVMBuilderRef, LLVMValueRef If,
843 LLVMBasicBlockRef Then, LLVMBasicBlockRef Else);
844LLVMValueRef LLVMBuildSwitch(LLVMBuilderRef, LLVMValueRef V,
845 LLVMBasicBlockRef Else, unsigned NumCases);
Erick Tryzelaar0fb26ef2010-02-28 09:46:06 +0000846LLVMValueRef LLVMBuildIndirectBr(LLVMBuilderRef B, LLVMValueRef Addr,
847 unsigned NumDests);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000848LLVMValueRef LLVMBuildInvoke(LLVMBuilderRef, LLVMValueRef Fn,
849 LLVMValueRef *Args, unsigned NumArgs,
850 LLVMBasicBlockRef Then, LLVMBasicBlockRef Catch,
851 const char *Name);
Benjamin Kramer5a6568832011-08-19 01:36:54 +0000852LLVMValueRef LLVMBuildLandingPad(LLVMBuilderRef B, LLVMTypeRef Ty,
853 LLVMValueRef PersFn, unsigned NumClauses,
854 const char *Name);
Bill Wendlingf891bf82011-07-31 06:30:59 +0000855LLVMValueRef LLVMBuildResume(LLVMBuilderRef B, LLVMValueRef Exn);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000856LLVMValueRef LLVMBuildUnreachable(LLVMBuilderRef);
857
Gordon Henriksen097102c2008-01-01 05:50:53 +0000858/* Add a case to the switch instruction */
859void LLVMAddCase(LLVMValueRef Switch, LLVMValueRef OnVal,
860 LLVMBasicBlockRef Dest);
861
Erick Tryzelaar0fb26ef2010-02-28 09:46:06 +0000862/* Add a destination to the indirectbr instruction */
863void LLVMAddDestination(LLVMValueRef IndirectBr, LLVMBasicBlockRef Dest);
864
Bill Wendlingfae14752011-08-12 20:24:12 +0000865/* Add a catch or filter clause to the landingpad instruction */
866void LLVMAddClause(LLVMValueRef LandingPad, LLVMValueRef ClauseVal);
867
868/* Set the 'cleanup' flag in the landingpad instruction */
869void LLVMSetCleanup(LLVMValueRef LandingPad, LLVMBool Val);
870
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000871/* Arithmetic */
872LLVMValueRef LLVMBuildAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
873 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +0000874LLVMValueRef LLVMBuildNSWAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
875 const char *Name);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +0000876LLVMValueRef LLVMBuildNUWAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
877 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +0000878LLVMValueRef LLVMBuildFAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
879 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000880LLVMValueRef LLVMBuildSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
881 const char *Name);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +0000882LLVMValueRef LLVMBuildNSWSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
883 const char *Name);
884LLVMValueRef LLVMBuildNUWSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
885 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +0000886LLVMValueRef LLVMBuildFSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
887 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000888LLVMValueRef LLVMBuildMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
889 const char *Name);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +0000890LLVMValueRef LLVMBuildNSWMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
891 const char *Name);
892LLVMValueRef LLVMBuildNUWMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
893 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +0000894LLVMValueRef LLVMBuildFMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
895 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000896LLVMValueRef LLVMBuildUDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
897 const char *Name);
898LLVMValueRef LLVMBuildSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
899 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +0000900LLVMValueRef LLVMBuildExactSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
901 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000902LLVMValueRef LLVMBuildFDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
903 const char *Name);
904LLVMValueRef LLVMBuildURem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
905 const char *Name);
906LLVMValueRef LLVMBuildSRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
907 const char *Name);
908LLVMValueRef LLVMBuildFRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
909 const char *Name);
910LLVMValueRef LLVMBuildShl(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
911 const char *Name);
912LLVMValueRef LLVMBuildLShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
913 const char *Name);
914LLVMValueRef LLVMBuildAShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
915 const char *Name);
916LLVMValueRef LLVMBuildAnd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
917 const char *Name);
918LLVMValueRef LLVMBuildOr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
919 const char *Name);
920LLVMValueRef LLVMBuildXor(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
921 const char *Name);
Erick Tryzelaar31831792010-02-28 05:51:27 +0000922LLVMValueRef LLVMBuildBinOp(LLVMBuilderRef B, LLVMOpcode Op,
923 LLVMValueRef LHS, LLVMValueRef RHS,
924 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000925LLVMValueRef LLVMBuildNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name);
Erick Tryzelaar4c340c72010-02-28 05:51:43 +0000926LLVMValueRef LLVMBuildNSWNeg(LLVMBuilderRef B, LLVMValueRef V,
927 const char *Name);
928LLVMValueRef LLVMBuildNUWNeg(LLVMBuilderRef B, LLVMValueRef V,
929 const char *Name);
Dan Gohmanf919bd62009-09-28 21:51:41 +0000930LLVMValueRef LLVMBuildFNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000931LLVMValueRef LLVMBuildNot(LLVMBuilderRef, LLVMValueRef V, const char *Name);
932
933/* Memory */
934LLVMValueRef LLVMBuildMalloc(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
935LLVMValueRef LLVMBuildArrayMalloc(LLVMBuilderRef, LLVMTypeRef Ty,
936 LLVMValueRef Val, const char *Name);
937LLVMValueRef LLVMBuildAlloca(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
938LLVMValueRef LLVMBuildArrayAlloca(LLVMBuilderRef, LLVMTypeRef Ty,
939 LLVMValueRef Val, const char *Name);
940LLVMValueRef LLVMBuildFree(LLVMBuilderRef, LLVMValueRef PointerVal);
941LLVMValueRef LLVMBuildLoad(LLVMBuilderRef, LLVMValueRef PointerVal,
942 const char *Name);
943LLVMValueRef LLVMBuildStore(LLVMBuilderRef, LLVMValueRef Val, LLVMValueRef Ptr);
944LLVMValueRef LLVMBuildGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
945 LLVMValueRef *Indices, unsigned NumIndices,
946 const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +0000947LLVMValueRef LLVMBuildInBoundsGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
948 LLVMValueRef *Indices, unsigned NumIndices,
949 const char *Name);
950LLVMValueRef LLVMBuildStructGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
951 unsigned Idx, const char *Name);
952LLVMValueRef LLVMBuildGlobalString(LLVMBuilderRef B, const char *Str,
953 const char *Name);
954LLVMValueRef LLVMBuildGlobalStringPtr(LLVMBuilderRef B, const char *Str,
955 const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000956
957/* Casts */
958LLVMValueRef LLVMBuildTrunc(LLVMBuilderRef, LLVMValueRef Val,
959 LLVMTypeRef DestTy, const char *Name);
960LLVMValueRef LLVMBuildZExt(LLVMBuilderRef, LLVMValueRef Val,
961 LLVMTypeRef DestTy, const char *Name);
962LLVMValueRef LLVMBuildSExt(LLVMBuilderRef, LLVMValueRef Val,
963 LLVMTypeRef DestTy, const char *Name);
964LLVMValueRef LLVMBuildFPToUI(LLVMBuilderRef, LLVMValueRef Val,
965 LLVMTypeRef DestTy, const char *Name);
966LLVMValueRef LLVMBuildFPToSI(LLVMBuilderRef, LLVMValueRef Val,
967 LLVMTypeRef DestTy, const char *Name);
968LLVMValueRef LLVMBuildUIToFP(LLVMBuilderRef, LLVMValueRef Val,
969 LLVMTypeRef DestTy, const char *Name);
970LLVMValueRef LLVMBuildSIToFP(LLVMBuilderRef, LLVMValueRef Val,
971 LLVMTypeRef DestTy, const char *Name);
972LLVMValueRef LLVMBuildFPTrunc(LLVMBuilderRef, LLVMValueRef Val,
973 LLVMTypeRef DestTy, const char *Name);
974LLVMValueRef LLVMBuildFPExt(LLVMBuilderRef, LLVMValueRef Val,
975 LLVMTypeRef DestTy, const char *Name);
976LLVMValueRef LLVMBuildPtrToInt(LLVMBuilderRef, LLVMValueRef Val,
977 LLVMTypeRef DestTy, const char *Name);
978LLVMValueRef LLVMBuildIntToPtr(LLVMBuilderRef, LLVMValueRef Val,
979 LLVMTypeRef DestTy, const char *Name);
980LLVMValueRef LLVMBuildBitCast(LLVMBuilderRef, LLVMValueRef Val,
981 LLVMTypeRef DestTy, const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +0000982LLVMValueRef LLVMBuildZExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
983 LLVMTypeRef DestTy, const char *Name);
984LLVMValueRef LLVMBuildSExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
985 LLVMTypeRef DestTy, const char *Name);
986LLVMValueRef LLVMBuildTruncOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
987 LLVMTypeRef DestTy, const char *Name);
Erick Tryzelaar31831792010-02-28 05:51:27 +0000988LLVMValueRef LLVMBuildCast(LLVMBuilderRef B, LLVMOpcode Op, LLVMValueRef Val,
989 LLVMTypeRef DestTy, const char *Name);
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +0000990LLVMValueRef LLVMBuildPointerCast(LLVMBuilderRef, LLVMValueRef Val,
991 LLVMTypeRef DestTy, const char *Name);
Duncan Sands9d786d72009-11-23 10:49:03 +0000992LLVMValueRef LLVMBuildIntCast(LLVMBuilderRef, LLVMValueRef Val, /*Signed cast!*/
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +0000993 LLVMTypeRef DestTy, const char *Name);
994LLVMValueRef LLVMBuildFPCast(LLVMBuilderRef, LLVMValueRef Val,
995 LLVMTypeRef DestTy, const char *Name);
Gordon Henriksenc23b66c2007-09-26 20:56:12 +0000996
997/* Comparisons */
998LLVMValueRef LLVMBuildICmp(LLVMBuilderRef, LLVMIntPredicate Op,
999 LLVMValueRef LHS, LLVMValueRef RHS,
1000 const char *Name);
1001LLVMValueRef LLVMBuildFCmp(LLVMBuilderRef, LLVMRealPredicate Op,
1002 LLVMValueRef LHS, LLVMValueRef RHS,
1003 const char *Name);
1004
1005/* Miscellaneous instructions */
1006LLVMValueRef LLVMBuildPhi(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
1007LLVMValueRef LLVMBuildCall(LLVMBuilderRef, LLVMValueRef Fn,
1008 LLVMValueRef *Args, unsigned NumArgs,
1009 const char *Name);
1010LLVMValueRef LLVMBuildSelect(LLVMBuilderRef, LLVMValueRef If,
1011 LLVMValueRef Then, LLVMValueRef Else,
1012 const char *Name);
1013LLVMValueRef LLVMBuildVAArg(LLVMBuilderRef, LLVMValueRef List, LLVMTypeRef Ty,
1014 const char *Name);
1015LLVMValueRef LLVMBuildExtractElement(LLVMBuilderRef, LLVMValueRef VecVal,
1016 LLVMValueRef Index, const char *Name);
1017LLVMValueRef LLVMBuildInsertElement(LLVMBuilderRef, LLVMValueRef VecVal,
1018 LLVMValueRef EltVal, LLVMValueRef Index,
1019 const char *Name);
1020LLVMValueRef LLVMBuildShuffleVector(LLVMBuilderRef, LLVMValueRef V1,
1021 LLVMValueRef V2, LLVMValueRef Mask,
1022 const char *Name);
Dan Gohmand5104a52008-11-03 22:55:43 +00001023LLVMValueRef LLVMBuildExtractValue(LLVMBuilderRef, LLVMValueRef AggVal,
1024 unsigned Index, const char *Name);
1025LLVMValueRef LLVMBuildInsertValue(LLVMBuilderRef, LLVMValueRef AggVal,
1026 LLVMValueRef EltVal, unsigned Index,
1027 const char *Name);
Gordon Henriksen76a03742007-09-18 03:18:57 +00001028
Erick Tryzelaar3045b8b2009-08-16 02:19:59 +00001029LLVMValueRef LLVMBuildIsNull(LLVMBuilderRef, LLVMValueRef Val,
1030 const char *Name);
1031LLVMValueRef LLVMBuildIsNotNull(LLVMBuilderRef, LLVMValueRef Val,
1032 const char *Name);
1033LLVMValueRef LLVMBuildPtrDiff(LLVMBuilderRef, LLVMValueRef LHS,
1034 LLVMValueRef RHS, const char *Name);
1035
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00001036
Gordon Henriksen0a68fe22007-12-12 01:04:30 +00001037/*===-- Module providers --------------------------------------------------===*/
1038
Jeffrey Yasskin091217b2010-01-27 20:34:15 +00001039/* Changes the type of M so it can be passed to FunctionPassManagers and the
1040 * JIT. They take ModuleProviders for historical reasons.
Gordon Henriksen0a68fe22007-12-12 01:04:30 +00001041 */
1042LLVMModuleProviderRef
1043LLVMCreateModuleProviderForExistingModule(LLVMModuleRef M);
1044
Jeffrey Yasskin091217b2010-01-27 20:34:15 +00001045/* Destroys the module M.
Gordon Henriksen0a68fe22007-12-12 01:04:30 +00001046 */
Jeffrey Yasskin091217b2010-01-27 20:34:15 +00001047void LLVMDisposeModuleProvider(LLVMModuleProviderRef M);
Gordon Henriksen0a68fe22007-12-12 01:04:30 +00001048
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00001049
1050/*===-- Memory buffers ----------------------------------------------------===*/
1051
Chris Lattner25963c62010-01-09 22:27:07 +00001052LLVMBool LLVMCreateMemoryBufferWithContentsOfFile(const char *Path,
1053 LLVMMemoryBufferRef *OutMemBuf,
1054 char **OutMessage);
1055LLVMBool LLVMCreateMemoryBufferWithSTDIN(LLVMMemoryBufferRef *OutMemBuf,
1056 char **OutMessage);
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00001057void LLVMDisposeMemoryBuffer(LLVMMemoryBufferRef MemBuf);
1058
Owen Anderson4698c5d2010-10-07 17:55:47 +00001059/*===-- Pass Registry -----------------------------------------------------===*/
1060
1061/** Return the global pass registry, for use with initialization functions.
1062 See llvm::PassRegistry::getPassRegistry. */
1063LLVMPassRegistryRef LLVMGetGlobalPassRegistry(void);
Gordon Henriksen878114b2008-03-16 04:20:44 +00001064
1065/*===-- Pass Managers -----------------------------------------------------===*/
1066
1067/** Constructs a new whole-module pass pipeline. This type of pipeline is
1068 suitable for link-time optimization and whole-module transformations.
1069 See llvm::PassManager::PassManager. */
Gordon Henriksena735a9c2008-05-04 12:55:34 +00001070LLVMPassManagerRef LLVMCreatePassManager(void);
Gordon Henriksen878114b2008-03-16 04:20:44 +00001071
1072/** Constructs a new function-by-function pass pipeline over the module
1073 provider. It does not take ownership of the module provider. This type of
1074 pipeline is suitable for code generation and JIT compilation tasks.
1075 See llvm::FunctionPassManager::FunctionPassManager. */
Erick Tryzelaarad0e0cb2010-03-02 23:58:54 +00001076LLVMPassManagerRef LLVMCreateFunctionPassManagerForModule(LLVMModuleRef M);
1077
1078/** Deprecated: Use LLVMCreateFunctionPassManagerForModule instead. */
Gordon Henriksen878114b2008-03-16 04:20:44 +00001079LLVMPassManagerRef LLVMCreateFunctionPassManager(LLVMModuleProviderRef MP);
1080
1081/** Initializes, executes on the provided module, and finalizes all of the
1082 passes scheduled in the pass manager. Returns 1 if any of the passes
1083 modified the module, 0 otherwise. See llvm::PassManager::run(Module&). */
Chris Lattner25963c62010-01-09 22:27:07 +00001084LLVMBool LLVMRunPassManager(LLVMPassManagerRef PM, LLVMModuleRef M);
Gordon Henriksen878114b2008-03-16 04:20:44 +00001085
1086/** Initializes all of the function passes scheduled in the function pass
1087 manager. Returns 1 if any of the passes modified the module, 0 otherwise.
1088 See llvm::FunctionPassManager::doInitialization. */
Chris Lattner25963c62010-01-09 22:27:07 +00001089LLVMBool LLVMInitializeFunctionPassManager(LLVMPassManagerRef FPM);
Gordon Henriksen878114b2008-03-16 04:20:44 +00001090
1091/** Executes all of the function passes scheduled in the function pass manager
1092 on the provided function. Returns 1 if any of the passes modified the
1093 function, false otherwise.
1094 See llvm::FunctionPassManager::run(Function&). */
Chris Lattner25963c62010-01-09 22:27:07 +00001095LLVMBool LLVMRunFunctionPassManager(LLVMPassManagerRef FPM, LLVMValueRef F);
Gordon Henriksen878114b2008-03-16 04:20:44 +00001096
1097/** Finalizes all of the function passes scheduled in in the function pass
1098 manager. Returns 1 if any of the passes modified the module, 0 otherwise.
1099 See llvm::FunctionPassManager::doFinalization. */
Chris Lattner25963c62010-01-09 22:27:07 +00001100LLVMBool LLVMFinalizeFunctionPassManager(LLVMPassManagerRef FPM);
Gordon Henriksen878114b2008-03-16 04:20:44 +00001101
1102/** Frees the memory of a pass pipeline. For function pipelines, does not free
1103 the module provider.
1104 See llvm::PassManagerBase::~PassManagerBase. */
1105void LLVMDisposePassManager(LLVMPassManagerRef PM);
1106
1107
Gordon Henriksen76a03742007-09-18 03:18:57 +00001108#ifdef __cplusplus
1109}
Gordon Henriksen76a03742007-09-18 03:18:57 +00001110
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001111namespace llvm {
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00001112 class MemoryBuffer;
Gordon Henriksen96571492008-03-16 15:55:43 +00001113 class PassManagerBase;
Gordon Henriksen0a68fe22007-12-12 01:04:30 +00001114
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00001115 #define DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \
1116 inline ty *unwrap(ref P) { \
1117 return reinterpret_cast<ty*>(P); \
1118 } \
1119 \
1120 inline ref wrap(const ty *P) { \
1121 return reinterpret_cast<ref>(const_cast<ty*>(P)); \
1122 }
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001123
Gordon Henriksen878114b2008-03-16 04:20:44 +00001124 #define DEFINE_ISA_CONVERSION_FUNCTIONS(ty, ref) \
1125 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \
1126 \
1127 template<typename T> \
1128 inline T *unwrap(ref P) { \
1129 return cast<T>(unwrap(P)); \
1130 }
1131
1132 #define DEFINE_STDCXX_CONVERSION_FUNCTIONS(ty, ref) \
1133 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \
1134 \
1135 template<typename T> \
1136 inline T *unwrap(ref P) { \
Chris Lattner7ba06612010-01-22 06:49:46 +00001137 T *Q = (T*)unwrap(P); \
Gordon Henriksen878114b2008-03-16 04:20:44 +00001138 assert(Q && "Invalid cast!"); \
1139 return Q; \
1140 }
1141
1142 DEFINE_ISA_CONVERSION_FUNCTIONS (Type, LLVMTypeRef )
1143 DEFINE_ISA_CONVERSION_FUNCTIONS (Value, LLVMValueRef )
Gordon Henriksen823f9732007-12-27 18:25:59 +00001144 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(Module, LLVMModuleRef )
1145 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(BasicBlock, LLVMBasicBlockRef )
Eric Christopher59278832008-08-08 19:39:37 +00001146 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(IRBuilder<>, LLVMBuilderRef )
Gordon Henriksen823f9732007-12-27 18:25:59 +00001147 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(MemoryBuffer, LLVMMemoryBufferRef )
Owen Anderson6773d382009-07-01 16:58:40 +00001148 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(LLVMContext, LLVMContextRef )
Erick Tryzelaar9f9857e2010-03-02 20:32:28 +00001149 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(Use, LLVMUseRef )
Gordon Henriksen878114b2008-03-16 04:20:44 +00001150 DEFINE_STDCXX_CONVERSION_FUNCTIONS(PassManagerBase, LLVMPassManagerRef )
Owen Anderson4698c5d2010-10-07 17:55:47 +00001151 DEFINE_STDCXX_CONVERSION_FUNCTIONS(PassRegistry, LLVMPassRegistryRef )
Jeffrey Yasskin091217b2010-01-27 20:34:15 +00001152 /* LLVMModuleProviderRef exists for historical reasons, but now just holds a
1153 * Module.
1154 */
1155 inline Module *unwrap(LLVMModuleProviderRef MP) {
1156 return reinterpret_cast<Module*>(MP);
1157 }
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001158
Gordon Henriksen878114b2008-03-16 04:20:44 +00001159 #undef DEFINE_STDCXX_CONVERSION_FUNCTIONS
1160 #undef DEFINE_ISA_CONVERSION_FUNCTIONS
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00001161 #undef DEFINE_SIMPLE_CONVERSION_FUNCTIONS
Erick Tryzelaar262332f2009-08-14 00:01:31 +00001162
1163 /* Specialized opaque context conversions.
1164 */
1165 inline LLVMContext **unwrap(LLVMContextRef* Tys) {
1166 return reinterpret_cast<LLVMContext**>(Tys);
1167 }
1168
1169 inline LLVMContextRef *wrap(const LLVMContext **Tys) {
1170 return reinterpret_cast<LLVMContextRef*>(const_cast<LLVMContext**>(Tys));
1171 }
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001172
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00001173 /* Specialized opaque type conversions.
1174 */
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001175 inline Type **unwrap(LLVMTypeRef* Tys) {
1176 return reinterpret_cast<Type**>(Tys);
1177 }
1178
Chris Lattner229907c2011-07-18 04:54:35 +00001179 inline LLVMTypeRef *wrap(Type **Tys) {
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001180 return reinterpret_cast<LLVMTypeRef*>(const_cast<Type**>(Tys));
1181 }
1182
Gordon Henriksen34eb6d82007-12-19 22:30:40 +00001183 /* Specialized opaque value conversions.
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001184 */
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001185 inline Value **unwrap(LLVMValueRef *Vals) {
1186 return reinterpret_cast<Value**>(Vals);
1187 }
1188
1189 template<typename T>
1190 inline T **unwrap(LLVMValueRef *Vals, unsigned Length) {
1191 #if DEBUG
Chris Lattnerb7971152009-07-10 18:28:19 +00001192 for (LLVMValueRef *I = Vals, *E = Vals + Length; I != E; ++I)
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001193 cast<T>(*I);
1194 #endif
Hans Wennborg8f7edbf2011-06-04 16:00:19 +00001195 (void)Length;
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001196 return reinterpret_cast<T**>(Vals);
1197 }
1198
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001199 inline LLVMValueRef *wrap(const Value **Vals) {
1200 return reinterpret_cast<LLVMValueRef*>(const_cast<Value**>(Vals));
1201 }
Gordon Henriksen7330acd2007-10-05 23:59:36 +00001202}
1203
1204#endif /* !defined(__cplusplus) */
1205
1206#endif /* !defined(LLVM_C_CORE_H) */