b9a8e4af568f37c4ef4d331dc776812c06bb5c22
[oota-llvm.git] / include / llvm-c / Core.h
1 /*===-- llvm-c/Core.h - Core Library C Interface ------------------*- C -*-===*\
2 |*                                                                            *|
3 |*                     The LLVM Compiler Infrastructure                       *|
4 |*                                                                            *|
5 |* This file is distributed under the University of Illinois Open Source      *|
6 |* License. See LICENSE.TXT for details.                                      *|
7 |*                                                                            *|
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 |*                                                                            *|
26 |* 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 |*                                                                            *|
31 \*===----------------------------------------------------------------------===*/
32
33 #ifndef LLVM_C_CORE_H
34 #define LLVM_C_CORE_H
35
36 #include "llvm/System/DataTypes.h"
37
38 #ifdef __cplusplus
39
40 /* Need these includes to support the LLVM 'cast' template for the C++ 'wrap' 
41    and 'unwrap' conversion functions. */
42 #include "llvm/Module.h"
43 #include "llvm/PassRegistry.h"
44 #include "llvm/Support/IRBuilder.h"
45
46 extern "C" {
47 #endif
48
49
50 typedef int LLVMBool;
51
52 /* Opaque types. */
53
54 /**
55  * The top-level container for all LLVM global data.  See the LLVMContext class.
56  */
57 typedef struct LLVMOpaqueContext *LLVMContextRef;
58
59 /**
60  * The top-level container for all other LLVM Intermediate Representation (IR)
61  * objects. See the llvm::Module class.
62  */
63 typedef struct LLVMOpaqueModule *LLVMModuleRef;
64
65 /**
66  * Each value in the LLVM IR has a type, an LLVMTypeRef. See the llvm::Type
67  * class.
68  */
69 typedef struct LLVMOpaqueType *LLVMTypeRef;
70
71 /**
72  * When building recursive types using LLVMRefineType, LLVMTypeRef values may
73  * become invalid; use LLVMTypeHandleRef to resolve this problem. See the
74  * llvm::AbstractTypeHolder class.
75  */
76 typedef struct LLVMOpaqueTypeHandle *LLVMTypeHandleRef;
77
78 typedef struct LLVMOpaqueValue *LLVMValueRef;
79 typedef struct LLVMOpaqueBasicBlock *LLVMBasicBlockRef;
80 typedef struct LLVMOpaqueBuilder *LLVMBuilderRef;
81
82 /* Interface used to provide a module to JIT or interpreter.  This is now just a
83  * synonym for llvm::Module, but we have to keep using the different type to
84  * keep binary compatibility.
85  */
86 typedef struct LLVMOpaqueModuleProvider *LLVMModuleProviderRef;
87
88 /* Used to provide a module to JIT or interpreter.
89  * See the llvm::MemoryBuffer class.
90  */
91 typedef struct LLVMOpaqueMemoryBuffer *LLVMMemoryBufferRef;
92
93 /** See the llvm::PassManagerBase class. */
94 typedef struct LLVMOpaquePassManager *LLVMPassManagerRef;
95
96 /** See the llvm::PassRegistry class. */
97 typedef struct LLVMOpaquePassRegistry *LLVMPassRegistryRef;
98
99 /** Used to get the users and usees of a Value. See the llvm::Use class. */
100 typedef struct LLVMOpaqueUse *LLVMUseRef;
101
102 typedef enum {
103     LLVMZExtAttribute       = 1<<0,
104     LLVMSExtAttribute       = 1<<1,
105     LLVMNoReturnAttribute   = 1<<2,
106     LLVMInRegAttribute      = 1<<3,
107     LLVMStructRetAttribute  = 1<<4,
108     LLVMNoUnwindAttribute   = 1<<5,
109     LLVMNoAliasAttribute    = 1<<6,
110     LLVMByValAttribute      = 1<<7,
111     LLVMNestAttribute       = 1<<8,
112     LLVMReadNoneAttribute   = 1<<9,
113     LLVMReadOnlyAttribute   = 1<<10,
114     LLVMNoInlineAttribute   = 1<<11,
115     LLVMAlwaysInlineAttribute    = 1<<12,
116     LLVMOptimizeForSizeAttribute = 1<<13,
117     LLVMStackProtectAttribute    = 1<<14,
118     LLVMStackProtectReqAttribute = 1<<15,
119     LLVMAlignment = 31<<16,
120     LLVMNoCaptureAttribute  = 1<<21,
121     LLVMNoRedZoneAttribute  = 1<<22,
122     LLVMNoImplicitFloatAttribute = 1<<23,
123     LLVMNakedAttribute      = 1<<24,
124     LLVMInlineHintAttribute = 1<<25,
125     LLVMStackAlignment = 7<<26
126 } LLVMAttribute;
127
128 typedef enum {
129   /* Terminator Instructions */
130   LLVMRet            = 1,
131   LLVMBr             = 2,
132   LLVMSwitch         = 3,
133   LLVMIndirectBr     = 4,
134   LLVMInvoke         = 5,
135   LLVMUnwind         = 6,
136   LLVMUnreachable    = 7,
137
138   /* Standard Binary Operators */
139   LLVMAdd            = 8,
140   LLVMFAdd           = 9,
141   LLVMSub            = 10,
142   LLVMFSub           = 11,
143   LLVMMul            = 12,
144   LLVMFMul           = 13,
145   LLVMUDiv           = 14,
146   LLVMSDiv           = 15,
147   LLVMFDiv           = 16,
148   LLVMURem           = 17,
149   LLVMSRem           = 18,
150   LLVMFRem           = 19,
151
152   /* Logical Operators */
153   LLVMShl            = 20,
154   LLVMLShr           = 21,
155   LLVMAShr           = 22,
156   LLVMAnd            = 23,
157   LLVMOr             = 24,
158   LLVMXor            = 25,
159
160   /* Memory Operators */
161   LLVMAlloca         = 26,
162   LLVMLoad           = 27,
163   LLVMStore          = 28,
164   LLVMGetElementPtr  = 29,
165
166   /* Cast Operators */
167   LLVMTrunc          = 30,
168   LLVMZExt           = 31,
169   LLVMSExt           = 32,
170   LLVMFPToUI         = 33,
171   LLVMFPToSI         = 34,
172   LLVMUIToFP         = 35,
173   LLVMSIToFP         = 36,
174   LLVMFPTrunc        = 37,
175   LLVMFPExt          = 38,
176   LLVMPtrToInt       = 39,
177   LLVMIntToPtr       = 40,
178   LLVMBitCast        = 41,
179
180   /* Other Operators */
181   LLVMICmp           = 42,
182   LLVMFCmp           = 43,
183   LLVMPHI            = 44,
184   LLVMCall           = 45,
185   LLVMSelect         = 46,
186   /* UserOp1 */
187   /* UserOp2 */
188   LLVMVAArg          = 49,
189   LLVMExtractElement = 50,
190   LLVMInsertElement  = 51,
191   LLVMShuffleVector  = 52,
192   LLVMExtractValue   = 53,
193   LLVMInsertValue    = 54
194 } LLVMOpcode;
195
196 typedef enum {
197   LLVMVoidTypeKind,        /**< type with no size */
198   LLVMFloatTypeKind,       /**< 32 bit floating point type */
199   LLVMDoubleTypeKind,      /**< 64 bit floating point type */
200   LLVMX86_FP80TypeKind,    /**< 80 bit floating point type (X87) */
201   LLVMFP128TypeKind,       /**< 128 bit floating point type (112-bit mantissa)*/
202   LLVMPPC_FP128TypeKind,   /**< 128 bit floating point type (two 64-bits) */
203   LLVMLabelTypeKind,       /**< Labels */
204   LLVMIntegerTypeKind,     /**< Arbitrary bit width integers */
205   LLVMFunctionTypeKind,    /**< Functions */
206   LLVMStructTypeKind,      /**< Structures */
207   LLVMArrayTypeKind,       /**< Arrays */
208   LLVMPointerTypeKind,     /**< Pointers */
209   LLVMOpaqueTypeKind,      /**< Opaque: type with unknown structure */
210   LLVMVectorTypeKind,      /**< SIMD 'packed' format, or other vector type */
211   LLVMMetadataTypeKind,    /**< Metadata */
212   LLVMX86_MMXTypeKind      /**< X86 MMX */
213 } LLVMTypeKind;
214
215 typedef enum {
216   LLVMExternalLinkage,    /**< Externally visible function */
217   LLVMAvailableExternallyLinkage,
218   LLVMLinkOnceAnyLinkage, /**< Keep one copy of function when linking (inline)*/
219   LLVMLinkOnceODRLinkage, /**< Same, but only replaced by something
220                             equivalent. */
221   LLVMWeakAnyLinkage,     /**< Keep one copy of function when linking (weak) */
222   LLVMWeakODRLinkage,     /**< Same, but only replaced by something
223                             equivalent. */
224   LLVMAppendingLinkage,   /**< Special purpose, only applies to global arrays */
225   LLVMInternalLinkage,    /**< Rename collisions when linking (static
226                                functions) */
227   LLVMPrivateLinkage,     /**< Like Internal, but omit from symbol table */
228   LLVMDLLImportLinkage,   /**< Function to be imported from DLL */
229   LLVMDLLExportLinkage,   /**< Function to be accessible from DLL */
230   LLVMExternalWeakLinkage,/**< ExternalWeak linkage description */
231   LLVMGhostLinkage,       /**< Obsolete */
232   LLVMCommonLinkage,      /**< Tentative definitions */
233   LLVMLinkerPrivateLinkage, /**< Like Private, but linker removes. */
234   LLVMLinkerPrivateWeakLinkage, /**< Like LinkerPrivate, but is weak. */
235   LLVMLinkerPrivateWeakDefAutoLinkage /**< Like LinkerPrivateWeak, but possibly
236                                            hidden. */
237 } LLVMLinkage;
238
239 typedef enum {
240   LLVMDefaultVisibility,  /**< The GV is visible */
241   LLVMHiddenVisibility,   /**< The GV is hidden */
242   LLVMProtectedVisibility /**< The GV is protected */
243 } LLVMVisibility;
244
245 typedef enum {
246   LLVMCCallConv           = 0,
247   LLVMFastCallConv        = 8,
248   LLVMColdCallConv        = 9,
249   LLVMX86StdcallCallConv  = 64,
250   LLVMX86FastcallCallConv = 65
251 } LLVMCallConv;
252
253 typedef enum {
254   LLVMIntEQ = 32, /**< equal */
255   LLVMIntNE,      /**< not equal */
256   LLVMIntUGT,     /**< unsigned greater than */
257   LLVMIntUGE,     /**< unsigned greater or equal */
258   LLVMIntULT,     /**< unsigned less than */
259   LLVMIntULE,     /**< unsigned less or equal */
260   LLVMIntSGT,     /**< signed greater than */
261   LLVMIntSGE,     /**< signed greater or equal */
262   LLVMIntSLT,     /**< signed less than */
263   LLVMIntSLE      /**< signed less or equal */
264 } LLVMIntPredicate;
265
266 typedef enum {
267   LLVMRealPredicateFalse, /**< Always false (always folded) */
268   LLVMRealOEQ,            /**< True if ordered and equal */
269   LLVMRealOGT,            /**< True if ordered and greater than */
270   LLVMRealOGE,            /**< True if ordered and greater than or equal */
271   LLVMRealOLT,            /**< True if ordered and less than */
272   LLVMRealOLE,            /**< True if ordered and less than or equal */
273   LLVMRealONE,            /**< True if ordered and operands are unequal */
274   LLVMRealORD,            /**< True if ordered (no nans) */
275   LLVMRealUNO,            /**< True if unordered: isnan(X) | isnan(Y) */
276   LLVMRealUEQ,            /**< True if unordered or equal */
277   LLVMRealUGT,            /**< True if unordered or greater than */
278   LLVMRealUGE,            /**< True if unordered, greater than, or equal */
279   LLVMRealULT,            /**< True if unordered or less than */
280   LLVMRealULE,            /**< True if unordered, less than, or equal */
281   LLVMRealUNE,            /**< True if unordered or not equal */
282   LLVMRealPredicateTrue   /**< Always true (always folded) */
283 } LLVMRealPredicate;
284
285
286 /*===-- Error handling ----------------------------------------------------===*/
287
288 void LLVMDisposeMessage(char *Message);
289
290
291 /*===-- Contexts ----------------------------------------------------------===*/
292
293 /* Create and destroy contexts. */
294 LLVMContextRef LLVMContextCreate(void);
295 LLVMContextRef LLVMGetGlobalContext(void);
296 void LLVMContextDispose(LLVMContextRef C);
297
298 unsigned LLVMGetMDKindIDInContext(LLVMContextRef C, const char* Name,
299                                   unsigned SLen);
300 unsigned LLVMGetMDKindID(const char* Name, unsigned SLen);
301
302 /*===-- Modules -----------------------------------------------------------===*/
303
304 /* Create and destroy modules. */ 
305 /** See llvm::Module::Module. */
306 LLVMModuleRef LLVMModuleCreateWithName(const char *ModuleID);
307 LLVMModuleRef LLVMModuleCreateWithNameInContext(const char *ModuleID,
308                                                 LLVMContextRef C);
309
310 /** See llvm::Module::~Module. */
311 void LLVMDisposeModule(LLVMModuleRef M);
312
313 /** Data layout. See Module::getDataLayout. */
314 const char *LLVMGetDataLayout(LLVMModuleRef M);
315 void LLVMSetDataLayout(LLVMModuleRef M, const char *Triple);
316
317 /** Target triple. See Module::getTargetTriple. */
318 const char *LLVMGetTarget(LLVMModuleRef M);
319 void LLVMSetTarget(LLVMModuleRef M, const char *Triple);
320
321 /** See Module::addTypeName. */
322 LLVMBool LLVMAddTypeName(LLVMModuleRef M, const char *Name, LLVMTypeRef Ty);
323 void LLVMDeleteTypeName(LLVMModuleRef M, const char *Name);
324 LLVMTypeRef LLVMGetTypeByName(LLVMModuleRef M, const char *Name);
325
326 /** See Module::dump. */
327 void LLVMDumpModule(LLVMModuleRef M);
328
329 /** See Module::setModuleInlineAsm. */
330 void LLVMSetModuleInlineAsm(LLVMModuleRef M, const char *Asm);
331
332 /** See Module::getContext. */
333 LLVMContextRef LLVMGetModuleContext(LLVMModuleRef M);
334
335 /*===-- Types -------------------------------------------------------------===*/
336
337 /* LLVM types conform to the following hierarchy:
338  * 
339  *   types:
340  *     integer type
341  *     real type
342  *     function type
343  *     sequence types:
344  *       array type
345  *       pointer type
346  *       vector type
347  *     void type
348  *     label type
349  *     opaque type
350  */
351
352 /** See llvm::LLVMTypeKind::getTypeID. */
353 LLVMTypeKind LLVMGetTypeKind(LLVMTypeRef Ty);
354
355 /** See llvm::LLVMType::getContext. */
356 LLVMContextRef LLVMGetTypeContext(LLVMTypeRef Ty);
357
358 /* Operations on integer types */
359 LLVMTypeRef LLVMInt1TypeInContext(LLVMContextRef C);
360 LLVMTypeRef LLVMInt8TypeInContext(LLVMContextRef C);
361 LLVMTypeRef LLVMInt16TypeInContext(LLVMContextRef C);
362 LLVMTypeRef LLVMInt32TypeInContext(LLVMContextRef C);
363 LLVMTypeRef LLVMInt64TypeInContext(LLVMContextRef C);
364 LLVMTypeRef LLVMIntTypeInContext(LLVMContextRef C, unsigned NumBits);
365
366 LLVMTypeRef LLVMInt1Type(void);
367 LLVMTypeRef LLVMInt8Type(void);
368 LLVMTypeRef LLVMInt16Type(void);
369 LLVMTypeRef LLVMInt32Type(void);
370 LLVMTypeRef LLVMInt64Type(void);
371 LLVMTypeRef LLVMIntType(unsigned NumBits);
372 unsigned LLVMGetIntTypeWidth(LLVMTypeRef IntegerTy);
373
374 /* Operations on real types */
375 LLVMTypeRef LLVMFloatTypeInContext(LLVMContextRef C);
376 LLVMTypeRef LLVMDoubleTypeInContext(LLVMContextRef C);
377 LLVMTypeRef LLVMX86FP80TypeInContext(LLVMContextRef C);
378 LLVMTypeRef LLVMFP128TypeInContext(LLVMContextRef C);
379 LLVMTypeRef LLVMPPCFP128TypeInContext(LLVMContextRef C);
380
381 LLVMTypeRef LLVMFloatType(void);
382 LLVMTypeRef LLVMDoubleType(void);
383 LLVMTypeRef LLVMX86FP80Type(void);
384 LLVMTypeRef LLVMFP128Type(void);
385 LLVMTypeRef LLVMPPCFP128Type(void);
386
387 /* Operations on function types */
388 LLVMTypeRef LLVMFunctionType(LLVMTypeRef ReturnType,
389                              LLVMTypeRef *ParamTypes, unsigned ParamCount,
390                              LLVMBool IsVarArg);
391 LLVMBool LLVMIsFunctionVarArg(LLVMTypeRef FunctionTy);
392 LLVMTypeRef LLVMGetReturnType(LLVMTypeRef FunctionTy);
393 unsigned LLVMCountParamTypes(LLVMTypeRef FunctionTy);
394 void LLVMGetParamTypes(LLVMTypeRef FunctionTy, LLVMTypeRef *Dest);
395
396 /* Operations on struct types */
397 LLVMTypeRef LLVMStructTypeInContext(LLVMContextRef C, LLVMTypeRef *ElementTypes,
398                                     unsigned ElementCount, LLVMBool Packed);
399 LLVMTypeRef LLVMStructType(LLVMTypeRef *ElementTypes, unsigned ElementCount,
400                            LLVMBool Packed);
401 unsigned LLVMCountStructElementTypes(LLVMTypeRef StructTy);
402 void LLVMGetStructElementTypes(LLVMTypeRef StructTy, LLVMTypeRef *Dest);
403 LLVMBool LLVMIsPackedStruct(LLVMTypeRef StructTy);
404
405 /* Operations on array, pointer, and vector types (sequence types) */
406 LLVMTypeRef LLVMArrayType(LLVMTypeRef ElementType, unsigned ElementCount);
407 LLVMTypeRef LLVMPointerType(LLVMTypeRef ElementType, unsigned AddressSpace);
408 LLVMTypeRef LLVMVectorType(LLVMTypeRef ElementType, unsigned ElementCount);
409
410 LLVMTypeRef LLVMGetElementType(LLVMTypeRef Ty);
411 unsigned LLVMGetArrayLength(LLVMTypeRef ArrayTy);
412 unsigned LLVMGetPointerAddressSpace(LLVMTypeRef PointerTy);
413 unsigned LLVMGetVectorSize(LLVMTypeRef VectorTy);
414
415 /* Operations on other types */
416 LLVMTypeRef LLVMVoidTypeInContext(LLVMContextRef C);
417 LLVMTypeRef LLVMLabelTypeInContext(LLVMContextRef C);
418 LLVMTypeRef LLVMOpaqueTypeInContext(LLVMContextRef C);
419 LLVMTypeRef LLVMX86MMXTypeInContext(LLVMContextRef C);
420
421 LLVMTypeRef LLVMVoidType(void);
422 LLVMTypeRef LLVMLabelType(void);
423 LLVMTypeRef LLVMOpaqueType(void);
424 LLVMTypeRef LLVMX86MMXType(void);
425
426 /* Operations on type handles */
427 LLVMTypeHandleRef LLVMCreateTypeHandle(LLVMTypeRef PotentiallyAbstractTy);
428 void LLVMRefineType(LLVMTypeRef AbstractTy, LLVMTypeRef ConcreteTy);
429 LLVMTypeRef LLVMResolveTypeHandle(LLVMTypeHandleRef TypeHandle);
430 void LLVMDisposeTypeHandle(LLVMTypeHandleRef TypeHandle);
431
432
433 /*===-- Values ------------------------------------------------------------===*/
434
435 /* The bulk of LLVM's object model consists of values, which comprise a very
436  * rich type hierarchy.
437  */
438
439 #define LLVM_FOR_EACH_VALUE_SUBCLASS(macro) \
440   macro(Argument)                           \
441   macro(BasicBlock)                         \
442   macro(InlineAsm)                          \
443   macro(User)                               \
444     macro(Constant)                         \
445       macro(ConstantAggregateZero)          \
446       macro(ConstantArray)                  \
447       macro(ConstantExpr)                   \
448       macro(ConstantFP)                     \
449       macro(ConstantInt)                    \
450       macro(ConstantPointerNull)            \
451       macro(ConstantStruct)                 \
452       macro(ConstantVector)                 \
453       macro(GlobalValue)                    \
454         macro(Function)                     \
455         macro(GlobalAlias)                  \
456         macro(GlobalVariable)               \
457       macro(UndefValue)                     \
458     macro(Instruction)                      \
459       macro(BinaryOperator)                 \
460       macro(CallInst)                       \
461         macro(IntrinsicInst)                \
462           macro(DbgInfoIntrinsic)           \
463             macro(DbgDeclareInst)           \
464           macro(EHSelectorInst)             \
465           macro(MemIntrinsic)               \
466             macro(MemCpyInst)               \
467             macro(MemMoveInst)              \
468             macro(MemSetInst)               \
469       macro(CmpInst)                        \
470       macro(FCmpInst)                       \
471       macro(ICmpInst)                       \
472       macro(ExtractElementInst)             \
473       macro(GetElementPtrInst)              \
474       macro(InsertElementInst)              \
475       macro(InsertValueInst)                \
476       macro(PHINode)                        \
477       macro(SelectInst)                     \
478       macro(ShuffleVectorInst)              \
479       macro(StoreInst)                      \
480       macro(TerminatorInst)                 \
481         macro(BranchInst)                   \
482         macro(InvokeInst)                   \
483         macro(ReturnInst)                   \
484         macro(SwitchInst)                   \
485         macro(UnreachableInst)              \
486         macro(UnwindInst)                   \
487     macro(UnaryInstruction)                 \
488       macro(AllocaInst)                     \
489       macro(CastInst)                       \
490         macro(BitCastInst)                  \
491         macro(FPExtInst)                    \
492         macro(FPToSIInst)                   \
493         macro(FPToUIInst)                   \
494         macro(FPTruncInst)                  \
495         macro(IntToPtrInst)                 \
496         macro(PtrToIntInst)                 \
497         macro(SExtInst)                     \
498         macro(SIToFPInst)                   \
499         macro(TruncInst)                    \
500         macro(UIToFPInst)                   \
501         macro(ZExtInst)                     \
502       macro(ExtractValueInst)               \
503       macro(LoadInst)                       \
504       macro(VAArgInst)
505
506 /* Operations on all values */
507 LLVMTypeRef LLVMTypeOf(LLVMValueRef Val);
508 const char *LLVMGetValueName(LLVMValueRef Val);
509 void LLVMSetValueName(LLVMValueRef Val, const char *Name);
510 void LLVMDumpValue(LLVMValueRef Val);
511 void LLVMReplaceAllUsesWith(LLVMValueRef OldVal, LLVMValueRef NewVal);
512 int LLVMHasMetadata(LLVMValueRef Val);
513 LLVMValueRef LLVMGetMetadata(LLVMValueRef Val, unsigned KindID);
514 void LLVMSetMetadata(LLVMValueRef Val, unsigned KindID, LLVMValueRef Node);
515
516 /* Conversion functions. Return the input value if it is an instance of the
517    specified class, otherwise NULL. See llvm::dyn_cast_or_null<>. */
518 #define LLVM_DECLARE_VALUE_CAST(name) \
519   LLVMValueRef LLVMIsA##name(LLVMValueRef Val);
520 LLVM_FOR_EACH_VALUE_SUBCLASS(LLVM_DECLARE_VALUE_CAST)
521
522 /* Operations on Uses */
523 LLVMUseRef LLVMGetFirstUse(LLVMValueRef Val);
524 LLVMUseRef LLVMGetNextUse(LLVMUseRef U);
525 LLVMValueRef LLVMGetUser(LLVMUseRef U);
526 LLVMValueRef LLVMGetUsedValue(LLVMUseRef U);
527
528 /* Operations on Users */
529 LLVMValueRef LLVMGetOperand(LLVMValueRef Val, unsigned Index);
530 void LLVMSetOperand(LLVMValueRef User, unsigned Index, LLVMValueRef Val);
531 int LLVMGetNumOperands(LLVMValueRef Val);
532
533 /* Operations on constants of any type */
534 LLVMValueRef LLVMConstNull(LLVMTypeRef Ty); /* all zeroes */
535 LLVMValueRef LLVMConstAllOnes(LLVMTypeRef Ty); /* only for int/vector */
536 LLVMValueRef LLVMGetUndef(LLVMTypeRef Ty);
537 LLVMBool LLVMIsConstant(LLVMValueRef Val);
538 LLVMBool LLVMIsNull(LLVMValueRef Val);
539 LLVMBool LLVMIsUndef(LLVMValueRef Val);
540 LLVMValueRef LLVMConstPointerNull(LLVMTypeRef Ty);
541
542 /* Operations on metadata */
543 LLVMValueRef LLVMMDStringInContext(LLVMContextRef C, const char *Str,
544                                    unsigned SLen);
545 LLVMValueRef LLVMMDString(const char *Str, unsigned SLen);
546 LLVMValueRef LLVMMDNodeInContext(LLVMContextRef C, LLVMValueRef *Vals,
547                                  unsigned Count);
548 LLVMValueRef LLVMMDNode(LLVMValueRef *Vals, unsigned Count);
549
550 /* Operations on scalar constants */
551 LLVMValueRef LLVMConstInt(LLVMTypeRef IntTy, unsigned long long N,
552                           LLVMBool SignExtend);
553 LLVMValueRef LLVMConstIntOfArbitraryPrecision(LLVMTypeRef IntTy,
554                                               unsigned NumWords,
555                                               const uint64_t Words[]);
556 LLVMValueRef LLVMConstIntOfString(LLVMTypeRef IntTy, const char *Text,
557                                   uint8_t Radix);
558 LLVMValueRef LLVMConstIntOfStringAndSize(LLVMTypeRef IntTy, const char *Text,
559                                          unsigned SLen, uint8_t Radix);
560 LLVMValueRef LLVMConstReal(LLVMTypeRef RealTy, double N);
561 LLVMValueRef LLVMConstRealOfString(LLVMTypeRef RealTy, const char *Text);
562 LLVMValueRef LLVMConstRealOfStringAndSize(LLVMTypeRef RealTy, const char *Text,
563                                           unsigned SLen);
564 unsigned long long LLVMConstIntGetZExtValue(LLVMValueRef ConstantVal);
565 long long LLVMConstIntGetSExtValue(LLVMValueRef ConstantVal);
566
567
568 /* Operations on composite constants */
569 LLVMValueRef LLVMConstStringInContext(LLVMContextRef C, const char *Str,
570                                       unsigned Length, LLVMBool DontNullTerminate);
571 LLVMValueRef LLVMConstStructInContext(LLVMContextRef C, 
572                                       LLVMValueRef *ConstantVals,
573                                       unsigned Count, LLVMBool Packed);
574
575 LLVMValueRef LLVMConstString(const char *Str, unsigned Length,
576                              LLVMBool DontNullTerminate);
577 LLVMValueRef LLVMConstArray(LLVMTypeRef ElementTy,
578                             LLVMValueRef *ConstantVals, unsigned Length);
579 LLVMValueRef LLVMConstStruct(LLVMValueRef *ConstantVals, unsigned Count,
580                              LLVMBool Packed);
581 LLVMValueRef LLVMConstVector(LLVMValueRef *ScalarConstantVals, unsigned Size);
582
583 /* Constant expressions */
584 LLVMOpcode LLVMGetConstOpcode(LLVMValueRef ConstantVal);
585 LLVMValueRef LLVMAlignOf(LLVMTypeRef Ty);
586 LLVMValueRef LLVMSizeOf(LLVMTypeRef Ty);
587 LLVMValueRef LLVMConstNeg(LLVMValueRef ConstantVal);
588 LLVMValueRef LLVMConstNSWNeg(LLVMValueRef ConstantVal);
589 LLVMValueRef LLVMConstNUWNeg(LLVMValueRef ConstantVal);
590 LLVMValueRef LLVMConstFNeg(LLVMValueRef ConstantVal);
591 LLVMValueRef LLVMConstNot(LLVMValueRef ConstantVal);
592 LLVMValueRef LLVMConstAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
593 LLVMValueRef LLVMConstNSWAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
594 LLVMValueRef LLVMConstNUWAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
595 LLVMValueRef LLVMConstFAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
596 LLVMValueRef LLVMConstSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
597 LLVMValueRef LLVMConstNSWSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
598 LLVMValueRef LLVMConstNUWSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
599 LLVMValueRef LLVMConstFSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
600 LLVMValueRef LLVMConstMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
601 LLVMValueRef LLVMConstNSWMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
602 LLVMValueRef LLVMConstNUWMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
603 LLVMValueRef LLVMConstFMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
604 LLVMValueRef LLVMConstUDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
605 LLVMValueRef LLVMConstSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
606 LLVMValueRef LLVMConstExactSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
607 LLVMValueRef LLVMConstFDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
608 LLVMValueRef LLVMConstURem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
609 LLVMValueRef LLVMConstSRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
610 LLVMValueRef LLVMConstFRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
611 LLVMValueRef LLVMConstAnd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
612 LLVMValueRef LLVMConstOr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
613 LLVMValueRef LLVMConstXor(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
614 LLVMValueRef LLVMConstICmp(LLVMIntPredicate Predicate,
615                            LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
616 LLVMValueRef LLVMConstFCmp(LLVMRealPredicate Predicate,
617                            LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
618 LLVMValueRef LLVMConstShl(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
619 LLVMValueRef LLVMConstLShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
620 LLVMValueRef LLVMConstAShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
621 LLVMValueRef LLVMConstGEP(LLVMValueRef ConstantVal,
622                           LLVMValueRef *ConstantIndices, unsigned NumIndices);
623 LLVMValueRef LLVMConstInBoundsGEP(LLVMValueRef ConstantVal,
624                                   LLVMValueRef *ConstantIndices,
625                                   unsigned NumIndices);
626 LLVMValueRef LLVMConstTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
627 LLVMValueRef LLVMConstSExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
628 LLVMValueRef LLVMConstZExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
629 LLVMValueRef LLVMConstFPTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
630 LLVMValueRef LLVMConstFPExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
631 LLVMValueRef LLVMConstUIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
632 LLVMValueRef LLVMConstSIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
633 LLVMValueRef LLVMConstFPToUI(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
634 LLVMValueRef LLVMConstFPToSI(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
635 LLVMValueRef LLVMConstPtrToInt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
636 LLVMValueRef LLVMConstIntToPtr(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
637 LLVMValueRef LLVMConstBitCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
638 LLVMValueRef LLVMConstZExtOrBitCast(LLVMValueRef ConstantVal,
639                                     LLVMTypeRef ToType);
640 LLVMValueRef LLVMConstSExtOrBitCast(LLVMValueRef ConstantVal,
641                                     LLVMTypeRef ToType);
642 LLVMValueRef LLVMConstTruncOrBitCast(LLVMValueRef ConstantVal,
643                                      LLVMTypeRef ToType);
644 LLVMValueRef LLVMConstPointerCast(LLVMValueRef ConstantVal,
645                                   LLVMTypeRef ToType);
646 LLVMValueRef LLVMConstIntCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType,
647                               LLVMBool isSigned);
648 LLVMValueRef LLVMConstFPCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
649 LLVMValueRef LLVMConstSelect(LLVMValueRef ConstantCondition,
650                              LLVMValueRef ConstantIfTrue,
651                              LLVMValueRef ConstantIfFalse);
652 LLVMValueRef LLVMConstExtractElement(LLVMValueRef VectorConstant,
653                                      LLVMValueRef IndexConstant);
654 LLVMValueRef LLVMConstInsertElement(LLVMValueRef VectorConstant,
655                                     LLVMValueRef ElementValueConstant,
656                                     LLVMValueRef IndexConstant);
657 LLVMValueRef LLVMConstShuffleVector(LLVMValueRef VectorAConstant,
658                                     LLVMValueRef VectorBConstant,
659                                     LLVMValueRef MaskConstant);
660 LLVMValueRef LLVMConstExtractValue(LLVMValueRef AggConstant, unsigned *IdxList,
661                                    unsigned NumIdx);
662 LLVMValueRef LLVMConstInsertValue(LLVMValueRef AggConstant,
663                                   LLVMValueRef ElementValueConstant,
664                                   unsigned *IdxList, unsigned NumIdx);
665 LLVMValueRef LLVMConstInlineAsm(LLVMTypeRef Ty,
666                                 const char *AsmString, const char *Constraints,
667                                 LLVMBool HasSideEffects, LLVMBool IsAlignStack);
668 LLVMValueRef LLVMBlockAddress(LLVMValueRef F, LLVMBasicBlockRef BB);
669
670 /* Operations on global variables, functions, and aliases (globals) */
671 LLVMModuleRef LLVMGetGlobalParent(LLVMValueRef Global);
672 LLVMBool LLVMIsDeclaration(LLVMValueRef Global);
673 LLVMLinkage LLVMGetLinkage(LLVMValueRef Global);
674 void LLVMSetLinkage(LLVMValueRef Global, LLVMLinkage Linkage);
675 const char *LLVMGetSection(LLVMValueRef Global);
676 void LLVMSetSection(LLVMValueRef Global, const char *Section);
677 LLVMVisibility LLVMGetVisibility(LLVMValueRef Global);
678 void LLVMSetVisibility(LLVMValueRef Global, LLVMVisibility Viz);
679 unsigned LLVMGetAlignment(LLVMValueRef Global);
680 void LLVMSetAlignment(LLVMValueRef Global, unsigned Bytes);
681
682 /* Operations on global variables */
683 LLVMValueRef LLVMAddGlobal(LLVMModuleRef M, LLVMTypeRef Ty, const char *Name);
684 LLVMValueRef LLVMAddGlobalInAddressSpace(LLVMModuleRef M, LLVMTypeRef Ty,
685                                          const char *Name,
686                                          unsigned AddressSpace);
687 LLVMValueRef LLVMGetNamedGlobal(LLVMModuleRef M, const char *Name);
688 LLVMValueRef LLVMGetFirstGlobal(LLVMModuleRef M);
689 LLVMValueRef LLVMGetLastGlobal(LLVMModuleRef M);
690 LLVMValueRef LLVMGetNextGlobal(LLVMValueRef GlobalVar);
691 LLVMValueRef LLVMGetPreviousGlobal(LLVMValueRef GlobalVar);
692 void LLVMDeleteGlobal(LLVMValueRef GlobalVar);
693 LLVMValueRef LLVMGetInitializer(LLVMValueRef GlobalVar);
694 void LLVMSetInitializer(LLVMValueRef GlobalVar, LLVMValueRef ConstantVal);
695 LLVMBool LLVMIsThreadLocal(LLVMValueRef GlobalVar);
696 void LLVMSetThreadLocal(LLVMValueRef GlobalVar, LLVMBool IsThreadLocal);
697 LLVMBool LLVMIsGlobalConstant(LLVMValueRef GlobalVar);
698 void LLVMSetGlobalConstant(LLVMValueRef GlobalVar, LLVMBool IsConstant);
699
700 /* Operations on aliases */
701 LLVMValueRef LLVMAddAlias(LLVMModuleRef M, LLVMTypeRef Ty, LLVMValueRef Aliasee,
702                           const char *Name);
703
704 /* Operations on functions */
705 LLVMValueRef LLVMAddFunction(LLVMModuleRef M, const char *Name,
706                              LLVMTypeRef FunctionTy);
707 LLVMValueRef LLVMGetNamedFunction(LLVMModuleRef M, const char *Name);
708 LLVMValueRef LLVMGetFirstFunction(LLVMModuleRef M);
709 LLVMValueRef LLVMGetLastFunction(LLVMModuleRef M);
710 LLVMValueRef LLVMGetNextFunction(LLVMValueRef Fn);
711 LLVMValueRef LLVMGetPreviousFunction(LLVMValueRef Fn);
712 void LLVMDeleteFunction(LLVMValueRef Fn);
713 unsigned LLVMGetIntrinsicID(LLVMValueRef Fn);
714 unsigned LLVMGetFunctionCallConv(LLVMValueRef Fn);
715 void LLVMSetFunctionCallConv(LLVMValueRef Fn, unsigned CC);
716 const char *LLVMGetGC(LLVMValueRef Fn);
717 void LLVMSetGC(LLVMValueRef Fn, const char *Name);
718 void LLVMAddFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA);
719 LLVMAttribute LLVMGetFunctionAttr(LLVMValueRef Fn);
720 void LLVMRemoveFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA);
721
722 /* Operations on parameters */
723 unsigned LLVMCountParams(LLVMValueRef Fn);
724 void LLVMGetParams(LLVMValueRef Fn, LLVMValueRef *Params);
725 LLVMValueRef LLVMGetParam(LLVMValueRef Fn, unsigned Index);
726 LLVMValueRef LLVMGetParamParent(LLVMValueRef Inst);
727 LLVMValueRef LLVMGetFirstParam(LLVMValueRef Fn);
728 LLVMValueRef LLVMGetLastParam(LLVMValueRef Fn);
729 LLVMValueRef LLVMGetNextParam(LLVMValueRef Arg);
730 LLVMValueRef LLVMGetPreviousParam(LLVMValueRef Arg);
731 void LLVMAddAttribute(LLVMValueRef Arg, LLVMAttribute PA);
732 void LLVMRemoveAttribute(LLVMValueRef Arg, LLVMAttribute PA);
733 LLVMAttribute LLVMGetAttribute(LLVMValueRef Arg);
734 void LLVMSetParamAlignment(LLVMValueRef Arg, unsigned align);
735
736 /* Operations on basic blocks */
737 LLVMValueRef LLVMBasicBlockAsValue(LLVMBasicBlockRef BB);
738 LLVMBool LLVMValueIsBasicBlock(LLVMValueRef Val);
739 LLVMBasicBlockRef LLVMValueAsBasicBlock(LLVMValueRef Val);
740 LLVMValueRef LLVMGetBasicBlockParent(LLVMBasicBlockRef BB);
741 unsigned LLVMCountBasicBlocks(LLVMValueRef Fn);
742 void LLVMGetBasicBlocks(LLVMValueRef Fn, LLVMBasicBlockRef *BasicBlocks);
743 LLVMBasicBlockRef LLVMGetFirstBasicBlock(LLVMValueRef Fn);
744 LLVMBasicBlockRef LLVMGetLastBasicBlock(LLVMValueRef Fn);
745 LLVMBasicBlockRef LLVMGetNextBasicBlock(LLVMBasicBlockRef BB);
746 LLVMBasicBlockRef LLVMGetPreviousBasicBlock(LLVMBasicBlockRef BB);
747 LLVMBasicBlockRef LLVMGetEntryBasicBlock(LLVMValueRef Fn);
748
749 LLVMBasicBlockRef LLVMAppendBasicBlockInContext(LLVMContextRef C,
750                                                 LLVMValueRef Fn,
751                                                 const char *Name);
752 LLVMBasicBlockRef LLVMInsertBasicBlockInContext(LLVMContextRef C,
753                                                 LLVMBasicBlockRef BB,
754                                                 const char *Name);
755
756 LLVMBasicBlockRef LLVMAppendBasicBlock(LLVMValueRef Fn, const char *Name);
757 LLVMBasicBlockRef LLVMInsertBasicBlock(LLVMBasicBlockRef InsertBeforeBB,
758                                        const char *Name);
759 void LLVMDeleteBasicBlock(LLVMBasicBlockRef BB);
760
761 void LLVMMoveBasicBlockBefore(LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos);
762 void LLVMMoveBasicBlockAfter(LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos);
763
764 /* Operations on instructions */
765 LLVMBasicBlockRef LLVMGetInstructionParent(LLVMValueRef Inst);
766 LLVMValueRef LLVMGetFirstInstruction(LLVMBasicBlockRef BB);
767 LLVMValueRef LLVMGetLastInstruction(LLVMBasicBlockRef BB);
768 LLVMValueRef LLVMGetNextInstruction(LLVMValueRef Inst);
769 LLVMValueRef LLVMGetPreviousInstruction(LLVMValueRef Inst);
770
771 /* Operations on call sites */
772 void LLVMSetInstructionCallConv(LLVMValueRef Instr, unsigned CC);
773 unsigned LLVMGetInstructionCallConv(LLVMValueRef Instr);
774 void LLVMAddInstrAttribute(LLVMValueRef Instr, unsigned index, LLVMAttribute);
775 void LLVMRemoveInstrAttribute(LLVMValueRef Instr, unsigned index, 
776                               LLVMAttribute);
777 void LLVMSetInstrParamAlignment(LLVMValueRef Instr, unsigned index, 
778                                 unsigned align);
779
780 /* Operations on call instructions (only) */
781 LLVMBool LLVMIsTailCall(LLVMValueRef CallInst);
782 void LLVMSetTailCall(LLVMValueRef CallInst, LLVMBool IsTailCall);
783
784 /* Operations on phi nodes */
785 void LLVMAddIncoming(LLVMValueRef PhiNode, LLVMValueRef *IncomingValues,
786                      LLVMBasicBlockRef *IncomingBlocks, unsigned Count);
787 unsigned LLVMCountIncoming(LLVMValueRef PhiNode);
788 LLVMValueRef LLVMGetIncomingValue(LLVMValueRef PhiNode, unsigned Index);
789 LLVMBasicBlockRef LLVMGetIncomingBlock(LLVMValueRef PhiNode, unsigned Index);
790
791 /*===-- Instruction builders ----------------------------------------------===*/
792
793 /* An instruction builder represents a point within a basic block, and is the
794  * exclusive means of building instructions using the C interface.
795  */
796
797 LLVMBuilderRef LLVMCreateBuilderInContext(LLVMContextRef C);
798 LLVMBuilderRef LLVMCreateBuilder(void);
799 void LLVMPositionBuilder(LLVMBuilderRef Builder, LLVMBasicBlockRef Block,
800                          LLVMValueRef Instr);
801 void LLVMPositionBuilderBefore(LLVMBuilderRef Builder, LLVMValueRef Instr);
802 void LLVMPositionBuilderAtEnd(LLVMBuilderRef Builder, LLVMBasicBlockRef Block);
803 LLVMBasicBlockRef LLVMGetInsertBlock(LLVMBuilderRef Builder);
804 void LLVMClearInsertionPosition(LLVMBuilderRef Builder);
805 void LLVMInsertIntoBuilder(LLVMBuilderRef Builder, LLVMValueRef Instr);
806 void LLVMInsertIntoBuilderWithName(LLVMBuilderRef Builder, LLVMValueRef Instr,
807                                    const char *Name);
808 void LLVMDisposeBuilder(LLVMBuilderRef Builder);
809
810 /* Metadata */
811 void LLVMSetCurrentDebugLocation(LLVMBuilderRef Builder, LLVMValueRef L);
812 LLVMValueRef LLVMGetCurrentDebugLocation(LLVMBuilderRef Builder);
813 void LLVMSetInstDebugLocation(LLVMBuilderRef Builder, LLVMValueRef Inst);
814
815 /* Terminators */
816 LLVMValueRef LLVMBuildRetVoid(LLVMBuilderRef);
817 LLVMValueRef LLVMBuildRet(LLVMBuilderRef, LLVMValueRef V);
818 LLVMValueRef LLVMBuildAggregateRet(LLVMBuilderRef, LLVMValueRef *RetVals,
819                                    unsigned N);
820 LLVMValueRef LLVMBuildBr(LLVMBuilderRef, LLVMBasicBlockRef Dest);
821 LLVMValueRef LLVMBuildCondBr(LLVMBuilderRef, LLVMValueRef If,
822                              LLVMBasicBlockRef Then, LLVMBasicBlockRef Else);
823 LLVMValueRef LLVMBuildSwitch(LLVMBuilderRef, LLVMValueRef V,
824                              LLVMBasicBlockRef Else, unsigned NumCases);
825 LLVMValueRef LLVMBuildIndirectBr(LLVMBuilderRef B, LLVMValueRef Addr,
826                                  unsigned NumDests);
827 LLVMValueRef LLVMBuildInvoke(LLVMBuilderRef, LLVMValueRef Fn,
828                              LLVMValueRef *Args, unsigned NumArgs,
829                              LLVMBasicBlockRef Then, LLVMBasicBlockRef Catch,
830                              const char *Name);
831 LLVMValueRef LLVMBuildUnwind(LLVMBuilderRef);
832 LLVMValueRef LLVMBuildUnreachable(LLVMBuilderRef);
833
834 /* Add a case to the switch instruction */
835 void LLVMAddCase(LLVMValueRef Switch, LLVMValueRef OnVal,
836                  LLVMBasicBlockRef Dest);
837
838 /* Add a destination to the indirectbr instruction */
839 void LLVMAddDestination(LLVMValueRef IndirectBr, LLVMBasicBlockRef Dest);
840
841 /* Arithmetic */
842 LLVMValueRef LLVMBuildAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
843                           const char *Name);
844 LLVMValueRef LLVMBuildNSWAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
845                              const char *Name);
846 LLVMValueRef LLVMBuildNUWAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
847                              const char *Name);
848 LLVMValueRef LLVMBuildFAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
849                            const char *Name);
850 LLVMValueRef LLVMBuildSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
851                           const char *Name);
852 LLVMValueRef LLVMBuildNSWSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
853                              const char *Name);
854 LLVMValueRef LLVMBuildNUWSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
855                              const char *Name);
856 LLVMValueRef LLVMBuildFSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
857                            const char *Name);
858 LLVMValueRef LLVMBuildMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
859                           const char *Name);
860 LLVMValueRef LLVMBuildNSWMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
861                              const char *Name);
862 LLVMValueRef LLVMBuildNUWMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
863                              const char *Name);
864 LLVMValueRef LLVMBuildFMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
865                            const char *Name);
866 LLVMValueRef LLVMBuildUDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
867                            const char *Name);
868 LLVMValueRef LLVMBuildSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
869                            const char *Name);
870 LLVMValueRef LLVMBuildExactSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
871                                 const char *Name);
872 LLVMValueRef LLVMBuildFDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
873                            const char *Name);
874 LLVMValueRef LLVMBuildURem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
875                            const char *Name);
876 LLVMValueRef LLVMBuildSRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
877                            const char *Name);
878 LLVMValueRef LLVMBuildFRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
879                            const char *Name);
880 LLVMValueRef LLVMBuildShl(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
881                            const char *Name);
882 LLVMValueRef LLVMBuildLShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
883                            const char *Name);
884 LLVMValueRef LLVMBuildAShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
885                            const char *Name);
886 LLVMValueRef LLVMBuildAnd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
887                           const char *Name);
888 LLVMValueRef LLVMBuildOr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
889                           const char *Name);
890 LLVMValueRef LLVMBuildXor(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
891                           const char *Name);
892 LLVMValueRef LLVMBuildBinOp(LLVMBuilderRef B, LLVMOpcode Op,
893                             LLVMValueRef LHS, LLVMValueRef RHS,
894                             const char *Name);
895 LLVMValueRef LLVMBuildNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name);
896 LLVMValueRef LLVMBuildNSWNeg(LLVMBuilderRef B, LLVMValueRef V,
897                              const char *Name);
898 LLVMValueRef LLVMBuildNUWNeg(LLVMBuilderRef B, LLVMValueRef V,
899                              const char *Name);
900 LLVMValueRef LLVMBuildFNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name);
901 LLVMValueRef LLVMBuildNot(LLVMBuilderRef, LLVMValueRef V, const char *Name);
902
903 /* Memory */
904 LLVMValueRef LLVMBuildMalloc(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
905 LLVMValueRef LLVMBuildArrayMalloc(LLVMBuilderRef, LLVMTypeRef Ty,
906                                   LLVMValueRef Val, const char *Name);
907 LLVMValueRef LLVMBuildAlloca(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
908 LLVMValueRef LLVMBuildArrayAlloca(LLVMBuilderRef, LLVMTypeRef Ty,
909                                   LLVMValueRef Val, const char *Name);
910 LLVMValueRef LLVMBuildFree(LLVMBuilderRef, LLVMValueRef PointerVal);
911 LLVMValueRef LLVMBuildLoad(LLVMBuilderRef, LLVMValueRef PointerVal,
912                            const char *Name);
913 LLVMValueRef LLVMBuildStore(LLVMBuilderRef, LLVMValueRef Val, LLVMValueRef Ptr);
914 LLVMValueRef LLVMBuildGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
915                           LLVMValueRef *Indices, unsigned NumIndices,
916                           const char *Name);
917 LLVMValueRef LLVMBuildInBoundsGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
918                                   LLVMValueRef *Indices, unsigned NumIndices,
919                                   const char *Name);
920 LLVMValueRef LLVMBuildStructGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
921                                 unsigned Idx, const char *Name);
922 LLVMValueRef LLVMBuildGlobalString(LLVMBuilderRef B, const char *Str,
923                                    const char *Name);
924 LLVMValueRef LLVMBuildGlobalStringPtr(LLVMBuilderRef B, const char *Str,
925                                       const char *Name);
926
927 /* Casts */
928 LLVMValueRef LLVMBuildTrunc(LLVMBuilderRef, LLVMValueRef Val,
929                             LLVMTypeRef DestTy, const char *Name);
930 LLVMValueRef LLVMBuildZExt(LLVMBuilderRef, LLVMValueRef Val,
931                            LLVMTypeRef DestTy, const char *Name);
932 LLVMValueRef LLVMBuildSExt(LLVMBuilderRef, LLVMValueRef Val,
933                            LLVMTypeRef DestTy, const char *Name);
934 LLVMValueRef LLVMBuildFPToUI(LLVMBuilderRef, LLVMValueRef Val,
935                              LLVMTypeRef DestTy, const char *Name);
936 LLVMValueRef LLVMBuildFPToSI(LLVMBuilderRef, LLVMValueRef Val,
937                              LLVMTypeRef DestTy, const char *Name);
938 LLVMValueRef LLVMBuildUIToFP(LLVMBuilderRef, LLVMValueRef Val,
939                              LLVMTypeRef DestTy, const char *Name);
940 LLVMValueRef LLVMBuildSIToFP(LLVMBuilderRef, LLVMValueRef Val,
941                              LLVMTypeRef DestTy, const char *Name);
942 LLVMValueRef LLVMBuildFPTrunc(LLVMBuilderRef, LLVMValueRef Val,
943                               LLVMTypeRef DestTy, const char *Name);
944 LLVMValueRef LLVMBuildFPExt(LLVMBuilderRef, LLVMValueRef Val,
945                             LLVMTypeRef DestTy, const char *Name);
946 LLVMValueRef LLVMBuildPtrToInt(LLVMBuilderRef, LLVMValueRef Val,
947                                LLVMTypeRef DestTy, const char *Name);
948 LLVMValueRef LLVMBuildIntToPtr(LLVMBuilderRef, LLVMValueRef Val,
949                                LLVMTypeRef DestTy, const char *Name);
950 LLVMValueRef LLVMBuildBitCast(LLVMBuilderRef, LLVMValueRef Val,
951                               LLVMTypeRef DestTy, const char *Name);
952 LLVMValueRef LLVMBuildZExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
953                                     LLVMTypeRef DestTy, const char *Name);
954 LLVMValueRef LLVMBuildSExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
955                                     LLVMTypeRef DestTy, const char *Name);
956 LLVMValueRef LLVMBuildTruncOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
957                                      LLVMTypeRef DestTy, const char *Name);
958 LLVMValueRef LLVMBuildCast(LLVMBuilderRef B, LLVMOpcode Op, LLVMValueRef Val,
959                            LLVMTypeRef DestTy, const char *Name);
960 LLVMValueRef LLVMBuildPointerCast(LLVMBuilderRef, LLVMValueRef Val,
961                                   LLVMTypeRef DestTy, const char *Name);
962 LLVMValueRef LLVMBuildIntCast(LLVMBuilderRef, LLVMValueRef Val, /*Signed cast!*/
963                               LLVMTypeRef DestTy, const char *Name);
964 LLVMValueRef LLVMBuildFPCast(LLVMBuilderRef, LLVMValueRef Val,
965                              LLVMTypeRef DestTy, const char *Name);
966
967 /* Comparisons */
968 LLVMValueRef LLVMBuildICmp(LLVMBuilderRef, LLVMIntPredicate Op,
969                            LLVMValueRef LHS, LLVMValueRef RHS,
970                            const char *Name);
971 LLVMValueRef LLVMBuildFCmp(LLVMBuilderRef, LLVMRealPredicate Op,
972                            LLVMValueRef LHS, LLVMValueRef RHS,
973                            const char *Name);
974
975 /* Miscellaneous instructions */
976 LLVMValueRef LLVMBuildPhi(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
977 LLVMValueRef LLVMBuildCall(LLVMBuilderRef, LLVMValueRef Fn,
978                            LLVMValueRef *Args, unsigned NumArgs,
979                            const char *Name);
980 LLVMValueRef LLVMBuildSelect(LLVMBuilderRef, LLVMValueRef If,
981                              LLVMValueRef Then, LLVMValueRef Else,
982                              const char *Name);
983 LLVMValueRef LLVMBuildVAArg(LLVMBuilderRef, LLVMValueRef List, LLVMTypeRef Ty,
984                             const char *Name);
985 LLVMValueRef LLVMBuildExtractElement(LLVMBuilderRef, LLVMValueRef VecVal,
986                                      LLVMValueRef Index, const char *Name);
987 LLVMValueRef LLVMBuildInsertElement(LLVMBuilderRef, LLVMValueRef VecVal,
988                                     LLVMValueRef EltVal, LLVMValueRef Index,
989                                     const char *Name);
990 LLVMValueRef LLVMBuildShuffleVector(LLVMBuilderRef, LLVMValueRef V1,
991                                     LLVMValueRef V2, LLVMValueRef Mask,
992                                     const char *Name);
993 LLVMValueRef LLVMBuildExtractValue(LLVMBuilderRef, LLVMValueRef AggVal,
994                                    unsigned Index, const char *Name);
995 LLVMValueRef LLVMBuildInsertValue(LLVMBuilderRef, LLVMValueRef AggVal,
996                                   LLVMValueRef EltVal, unsigned Index,
997                                   const char *Name);
998
999 LLVMValueRef LLVMBuildIsNull(LLVMBuilderRef, LLVMValueRef Val,
1000                              const char *Name);
1001 LLVMValueRef LLVMBuildIsNotNull(LLVMBuilderRef, LLVMValueRef Val,
1002                                 const char *Name);
1003 LLVMValueRef LLVMBuildPtrDiff(LLVMBuilderRef, LLVMValueRef LHS,
1004                               LLVMValueRef RHS, const char *Name);
1005
1006
1007 /*===-- Module providers --------------------------------------------------===*/
1008
1009 /* Changes the type of M so it can be passed to FunctionPassManagers and the
1010  * JIT.  They take ModuleProviders for historical reasons.
1011  */
1012 LLVMModuleProviderRef
1013 LLVMCreateModuleProviderForExistingModule(LLVMModuleRef M);
1014
1015 /* Destroys the module M.
1016  */
1017 void LLVMDisposeModuleProvider(LLVMModuleProviderRef M);
1018
1019
1020 /*===-- Memory buffers ----------------------------------------------------===*/
1021
1022 LLVMBool LLVMCreateMemoryBufferWithContentsOfFile(const char *Path,
1023                                                   LLVMMemoryBufferRef *OutMemBuf,
1024                                                   char **OutMessage);
1025 LLVMBool LLVMCreateMemoryBufferWithSTDIN(LLVMMemoryBufferRef *OutMemBuf,
1026                                          char **OutMessage);
1027 void LLVMDisposeMemoryBuffer(LLVMMemoryBufferRef MemBuf);
1028
1029 /*===-- Pass Registry -----------------------------------------------------===*/
1030
1031 /** Return the global pass registry, for use with initialization functions.
1032     See llvm::PassRegistry::getPassRegistry. */
1033 LLVMPassRegistryRef LLVMGetGlobalPassRegistry(void);
1034
1035 /*===-- Pass Managers -----------------------------------------------------===*/
1036
1037 /** Constructs a new whole-module pass pipeline. This type of pipeline is
1038     suitable for link-time optimization and whole-module transformations.
1039     See llvm::PassManager::PassManager. */
1040 LLVMPassManagerRef LLVMCreatePassManager(void);
1041
1042 /** Constructs a new function-by-function pass pipeline over the module
1043     provider. It does not take ownership of the module provider. This type of
1044     pipeline is suitable for code generation and JIT compilation tasks.
1045     See llvm::FunctionPassManager::FunctionPassManager. */
1046 LLVMPassManagerRef LLVMCreateFunctionPassManagerForModule(LLVMModuleRef M);
1047
1048 /** Deprecated: Use LLVMCreateFunctionPassManagerForModule instead. */
1049 LLVMPassManagerRef LLVMCreateFunctionPassManager(LLVMModuleProviderRef MP);
1050
1051 /** Initializes, executes on the provided module, and finalizes all of the
1052     passes scheduled in the pass manager. Returns 1 if any of the passes
1053     modified the module, 0 otherwise. See llvm::PassManager::run(Module&). */
1054 LLVMBool LLVMRunPassManager(LLVMPassManagerRef PM, LLVMModuleRef M);
1055
1056 /** Initializes all of the function passes scheduled in the function pass
1057     manager. Returns 1 if any of the passes modified the module, 0 otherwise.
1058     See llvm::FunctionPassManager::doInitialization. */
1059 LLVMBool LLVMInitializeFunctionPassManager(LLVMPassManagerRef FPM);
1060
1061 /** Executes all of the function passes scheduled in the function pass manager
1062     on the provided function. Returns 1 if any of the passes modified the
1063     function, false otherwise.
1064     See llvm::FunctionPassManager::run(Function&). */
1065 LLVMBool LLVMRunFunctionPassManager(LLVMPassManagerRef FPM, LLVMValueRef F);
1066
1067 /** Finalizes all of the function passes scheduled in in the function pass
1068     manager. Returns 1 if any of the passes modified the module, 0 otherwise.
1069     See llvm::FunctionPassManager::doFinalization. */
1070 LLVMBool LLVMFinalizeFunctionPassManager(LLVMPassManagerRef FPM);
1071
1072 /** Frees the memory of a pass pipeline. For function pipelines, does not free
1073     the module provider.
1074     See llvm::PassManagerBase::~PassManagerBase. */
1075 void LLVMDisposePassManager(LLVMPassManagerRef PM);
1076
1077
1078 #ifdef __cplusplus
1079 }
1080
1081 namespace llvm {
1082   class MemoryBuffer;
1083   class PassManagerBase;
1084   
1085   #define DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref)   \
1086     inline ty *unwrap(ref P) {                          \
1087       return reinterpret_cast<ty*>(P);                  \
1088     }                                                   \
1089                                                         \
1090     inline ref wrap(const ty *P) {                      \
1091       return reinterpret_cast<ref>(const_cast<ty*>(P)); \
1092     }
1093   
1094   #define DEFINE_ISA_CONVERSION_FUNCTIONS(ty, ref)  \
1095     DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref)         \
1096                                                         \
1097     template<typename T>                                \
1098     inline T *unwrap(ref P) {                           \
1099       return cast<T>(unwrap(P));                        \
1100     }
1101   
1102   #define DEFINE_STDCXX_CONVERSION_FUNCTIONS(ty, ref)   \
1103     DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref)         \
1104                                                         \
1105     template<typename T>                                \
1106     inline T *unwrap(ref P) {                           \
1107       T *Q = (T*)unwrap(P);                             \
1108       assert(Q && "Invalid cast!");                     \
1109       return Q;                                         \
1110     }
1111   
1112   DEFINE_ISA_CONVERSION_FUNCTIONS   (Type,               LLVMTypeRef          )
1113   DEFINE_ISA_CONVERSION_FUNCTIONS   (Value,              LLVMValueRef         )
1114   DEFINE_SIMPLE_CONVERSION_FUNCTIONS(Module,             LLVMModuleRef        )
1115   DEFINE_SIMPLE_CONVERSION_FUNCTIONS(BasicBlock,         LLVMBasicBlockRef    )
1116   DEFINE_SIMPLE_CONVERSION_FUNCTIONS(IRBuilder<>,        LLVMBuilderRef       )
1117   DEFINE_SIMPLE_CONVERSION_FUNCTIONS(PATypeHolder,       LLVMTypeHandleRef    )
1118   DEFINE_SIMPLE_CONVERSION_FUNCTIONS(MemoryBuffer,       LLVMMemoryBufferRef  )
1119   DEFINE_SIMPLE_CONVERSION_FUNCTIONS(LLVMContext,        LLVMContextRef       )
1120   DEFINE_SIMPLE_CONVERSION_FUNCTIONS(Use,                LLVMUseRef           )
1121   DEFINE_STDCXX_CONVERSION_FUNCTIONS(PassManagerBase,    LLVMPassManagerRef   )
1122   DEFINE_STDCXX_CONVERSION_FUNCTIONS(PassRegistry,       LLVMPassRegistryRef  )
1123   /* LLVMModuleProviderRef exists for historical reasons, but now just holds a
1124    * Module.
1125    */
1126   inline Module *unwrap(LLVMModuleProviderRef MP) {
1127     return reinterpret_cast<Module*>(MP);
1128   }
1129   
1130   #undef DEFINE_STDCXX_CONVERSION_FUNCTIONS
1131   #undef DEFINE_ISA_CONVERSION_FUNCTIONS
1132   #undef DEFINE_SIMPLE_CONVERSION_FUNCTIONS
1133
1134   /* Specialized opaque context conversions.
1135    */
1136   inline LLVMContext **unwrap(LLVMContextRef* Tys) {
1137     return reinterpret_cast<LLVMContext**>(Tys);
1138   }
1139   
1140   inline LLVMContextRef *wrap(const LLVMContext **Tys) {
1141     return reinterpret_cast<LLVMContextRef*>(const_cast<LLVMContext**>(Tys));
1142   }
1143   
1144   /* Specialized opaque type conversions.
1145    */
1146   inline Type **unwrap(LLVMTypeRef* Tys) {
1147     return reinterpret_cast<Type**>(Tys);
1148   }
1149   
1150   inline LLVMTypeRef *wrap(const Type **Tys) {
1151     return reinterpret_cast<LLVMTypeRef*>(const_cast<Type**>(Tys));
1152   }
1153   
1154   /* Specialized opaque value conversions.
1155    */ 
1156   inline Value **unwrap(LLVMValueRef *Vals) {
1157     return reinterpret_cast<Value**>(Vals);
1158   }
1159   
1160   template<typename T>
1161   inline T **unwrap(LLVMValueRef *Vals, unsigned Length) {
1162     #if DEBUG
1163     for (LLVMValueRef *I = Vals, *E = Vals + Length; I != E; ++I)
1164       cast<T>(*I);
1165     #endif
1166     return reinterpret_cast<T**>(Vals);
1167   }
1168   
1169   inline LLVMValueRef *wrap(const Value **Vals) {
1170     return reinterpret_cast<LLVMValueRef*>(const_cast<Value**>(Vals));
1171   }
1172 }
1173
1174 #endif /* !defined(__cplusplus) */
1175
1176 #endif /* !defined(LLVM_C_CORE_H) */