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