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