Move DataTypes.h to include/llvm/System, update all users. This breaks the last
[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(FreeInst)                       \
474       macro(LoadInst)                       \
475       macro(VAArgInst)
476
477 /* Operations on all values */
478 LLVMTypeRef LLVMTypeOf(LLVMValueRef Val);
479 const char *LLVMGetValueName(LLVMValueRef Val);
480 void LLVMSetValueName(LLVMValueRef Val, const char *Name);
481 void LLVMDumpValue(LLVMValueRef Val);
482 void LLVMReplaceAllUsesWith(LLVMValueRef OldVal, LLVMValueRef NewVal);
483
484 /* Conversion functions. Return the input value if it is an instance of the
485    specified class, otherwise NULL. See llvm::dyn_cast_or_null<>. */
486 #define LLVM_DECLARE_VALUE_CAST(name) \
487   LLVMValueRef LLVMIsA##name(LLVMValueRef Val);
488 LLVM_FOR_EACH_VALUE_SUBCLASS(LLVM_DECLARE_VALUE_CAST)
489
490 /* Operations on Uses */
491 LLVMUseIteratorRef LLVMGetFirstUse(LLVMValueRef Val);
492 LLVMUseIteratorRef LLVMGetNextUse(LLVMUseIteratorRef U);
493 LLVMValueRef LLVMGetUser(LLVMUseIteratorRef U);
494 LLVMValueRef LLVMGetUsedValue(LLVMUseIteratorRef U);
495
496 /* Operations on Users */
497 LLVMValueRef LLVMGetOperand(LLVMValueRef Val, unsigned Index);
498
499 /* Operations on constants of any type */
500 LLVMValueRef LLVMConstNull(LLVMTypeRef Ty); /* all zeroes */
501 LLVMValueRef LLVMConstAllOnes(LLVMTypeRef Ty); /* only for int/vector */
502 LLVMValueRef LLVMGetUndef(LLVMTypeRef Ty);
503 int LLVMIsConstant(LLVMValueRef Val);
504 int LLVMIsNull(LLVMValueRef Val);
505 int LLVMIsUndef(LLVMValueRef Val);
506 LLVMValueRef LLVMConstPointerNull(LLVMTypeRef Ty);
507
508 /* Operations on scalar constants */
509 LLVMValueRef LLVMConstInt(LLVMTypeRef IntTy, unsigned long long N,
510                           int SignExtend);
511 LLVMValueRef LLVMConstIntOfString(LLVMTypeRef IntTy, const char *Text,
512                                   uint8_t Radix);
513 LLVMValueRef LLVMConstIntOfStringAndSize(LLVMTypeRef IntTy, const char *Text,
514                                          unsigned SLen, uint8_t Radix);
515 LLVMValueRef LLVMConstReal(LLVMTypeRef RealTy, double N);
516 LLVMValueRef LLVMConstRealOfString(LLVMTypeRef RealTy, const char *Text);
517 LLVMValueRef LLVMConstRealOfStringAndSize(LLVMTypeRef RealTy, const char *Text,
518                                           unsigned SLen);
519 unsigned long long LLVMConstIntGetZExtValue(LLVMValueRef ConstantVal);
520 long long LLVMConstIntGetSExtValue(LLVMValueRef ConstantVal);
521
522
523 /* Operations on composite constants */
524 LLVMValueRef LLVMConstStringInContext(LLVMContextRef C, const char *Str,
525                                       unsigned Length, int DontNullTerminate);
526 LLVMValueRef LLVMConstStructInContext(LLVMContextRef C, 
527                                       LLVMValueRef *ConstantVals,
528                                       unsigned Count, int Packed);
529
530 LLVMValueRef LLVMConstString(const char *Str, unsigned Length,
531                              int DontNullTerminate);
532 LLVMValueRef LLVMConstArray(LLVMTypeRef ElementTy,
533                             LLVMValueRef *ConstantVals, unsigned Length);
534 LLVMValueRef LLVMConstStruct(LLVMValueRef *ConstantVals, unsigned Count,
535                              int Packed);
536 LLVMValueRef LLVMConstVector(LLVMValueRef *ScalarConstantVals, unsigned Size);
537
538 /* Constant expressions */
539 LLVMOpcode LLVMGetConstOpcode(LLVMValueRef ConstantVal);
540 LLVMValueRef LLVMAlignOf(LLVMTypeRef Ty);
541 LLVMValueRef LLVMSizeOf(LLVMTypeRef Ty);
542 LLVMValueRef LLVMConstNeg(LLVMValueRef ConstantVal);
543 LLVMValueRef LLVMConstFNeg(LLVMValueRef ConstantVal);
544 LLVMValueRef LLVMConstNot(LLVMValueRef ConstantVal);
545 LLVMValueRef LLVMConstAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
546 LLVMValueRef LLVMConstNSWAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
547 LLVMValueRef LLVMConstFAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
548 LLVMValueRef LLVMConstSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
549 LLVMValueRef LLVMConstFSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
550 LLVMValueRef LLVMConstMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
551 LLVMValueRef LLVMConstFMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
552 LLVMValueRef LLVMConstUDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
553 LLVMValueRef LLVMConstSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
554 LLVMValueRef LLVMConstExactSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
555 LLVMValueRef LLVMConstFDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
556 LLVMValueRef LLVMConstURem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
557 LLVMValueRef LLVMConstSRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
558 LLVMValueRef LLVMConstFRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
559 LLVMValueRef LLVMConstAnd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
560 LLVMValueRef LLVMConstOr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
561 LLVMValueRef LLVMConstXor(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
562 LLVMValueRef LLVMConstICmp(LLVMIntPredicate Predicate,
563                            LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
564 LLVMValueRef LLVMConstFCmp(LLVMRealPredicate Predicate,
565                            LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
566 LLVMValueRef LLVMConstShl(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
567 LLVMValueRef LLVMConstLShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
568 LLVMValueRef LLVMConstAShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
569 LLVMValueRef LLVMConstGEP(LLVMValueRef ConstantVal,
570                           LLVMValueRef *ConstantIndices, unsigned NumIndices);
571 LLVMValueRef LLVMConstInBoundsGEP(LLVMValueRef ConstantVal,
572                                   LLVMValueRef *ConstantIndices,
573                                   unsigned NumIndices);
574 LLVMValueRef LLVMConstTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
575 LLVMValueRef LLVMConstSExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
576 LLVMValueRef LLVMConstZExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
577 LLVMValueRef LLVMConstFPTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
578 LLVMValueRef LLVMConstFPExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
579 LLVMValueRef LLVMConstUIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
580 LLVMValueRef LLVMConstSIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
581 LLVMValueRef LLVMConstFPToUI(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
582 LLVMValueRef LLVMConstFPToSI(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
583 LLVMValueRef LLVMConstPtrToInt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
584 LLVMValueRef LLVMConstIntToPtr(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
585 LLVMValueRef LLVMConstBitCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
586 LLVMValueRef LLVMConstZExtOrBitCast(LLVMValueRef ConstantVal,
587                                     LLVMTypeRef ToType);
588 LLVMValueRef LLVMConstSExtOrBitCast(LLVMValueRef ConstantVal,
589                                     LLVMTypeRef ToType);
590 LLVMValueRef LLVMConstTruncOrBitCast(LLVMValueRef ConstantVal,
591                                      LLVMTypeRef ToType);
592 LLVMValueRef LLVMConstPointerCast(LLVMValueRef ConstantVal,
593                                   LLVMTypeRef ToType);
594 LLVMValueRef LLVMConstIntCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType,
595                               unsigned isSigned);
596 LLVMValueRef LLVMConstFPCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
597 LLVMValueRef LLVMConstSelect(LLVMValueRef ConstantCondition,
598                              LLVMValueRef ConstantIfTrue,
599                              LLVMValueRef ConstantIfFalse);
600 LLVMValueRef LLVMConstExtractElement(LLVMValueRef VectorConstant,
601                                      LLVMValueRef IndexConstant);
602 LLVMValueRef LLVMConstInsertElement(LLVMValueRef VectorConstant,
603                                     LLVMValueRef ElementValueConstant,
604                                     LLVMValueRef IndexConstant);
605 LLVMValueRef LLVMConstShuffleVector(LLVMValueRef VectorAConstant,
606                                     LLVMValueRef VectorBConstant,
607                                     LLVMValueRef MaskConstant);
608 LLVMValueRef LLVMConstExtractValue(LLVMValueRef AggConstant, unsigned *IdxList,
609                                    unsigned NumIdx);
610 LLVMValueRef LLVMConstInsertValue(LLVMValueRef AggConstant,
611                                   LLVMValueRef ElementValueConstant,
612                                   unsigned *IdxList, unsigned NumIdx);
613 LLVMValueRef LLVMConstInlineAsm(LLVMTypeRef Ty, 
614                                 const char *AsmString, const char *Constraints,
615                                 int HasSideEffects);
616
617 /* Operations on global variables, functions, and aliases (globals) */
618 LLVMModuleRef LLVMGetGlobalParent(LLVMValueRef Global);
619 int LLVMIsDeclaration(LLVMValueRef Global);
620 LLVMLinkage LLVMGetLinkage(LLVMValueRef Global);
621 void LLVMSetLinkage(LLVMValueRef Global, LLVMLinkage Linkage);
622 const char *LLVMGetSection(LLVMValueRef Global);
623 void LLVMSetSection(LLVMValueRef Global, const char *Section);
624 LLVMVisibility LLVMGetVisibility(LLVMValueRef Global);
625 void LLVMSetVisibility(LLVMValueRef Global, LLVMVisibility Viz);
626 unsigned LLVMGetAlignment(LLVMValueRef Global);
627 void LLVMSetAlignment(LLVMValueRef Global, unsigned Bytes);
628
629 /* Operations on global variables */
630 LLVMValueRef LLVMAddGlobal(LLVMModuleRef M, LLVMTypeRef Ty, const char *Name);
631 LLVMValueRef LLVMGetNamedGlobal(LLVMModuleRef M, const char *Name);
632 LLVMValueRef LLVMGetFirstGlobal(LLVMModuleRef M);
633 LLVMValueRef LLVMGetLastGlobal(LLVMModuleRef M);
634 LLVMValueRef LLVMGetNextGlobal(LLVMValueRef GlobalVar);
635 LLVMValueRef LLVMGetPreviousGlobal(LLVMValueRef GlobalVar);
636 void LLVMDeleteGlobal(LLVMValueRef GlobalVar);
637 LLVMValueRef LLVMGetInitializer(LLVMValueRef GlobalVar);
638 void LLVMSetInitializer(LLVMValueRef GlobalVar, LLVMValueRef ConstantVal);
639 int LLVMIsThreadLocal(LLVMValueRef GlobalVar);
640 void LLVMSetThreadLocal(LLVMValueRef GlobalVar, int IsThreadLocal);
641 int LLVMIsGlobalConstant(LLVMValueRef GlobalVar);
642 void LLVMSetGlobalConstant(LLVMValueRef GlobalVar, int IsConstant);
643
644 /* Operations on aliases */
645 LLVMValueRef LLVMAddAlias(LLVMModuleRef M, LLVMTypeRef Ty, LLVMValueRef Aliasee,
646                           const char *Name);
647
648 /* Operations on functions */
649 LLVMValueRef LLVMAddFunction(LLVMModuleRef M, const char *Name,
650                              LLVMTypeRef FunctionTy);
651 LLVMValueRef LLVMGetNamedFunction(LLVMModuleRef M, const char *Name);
652 LLVMValueRef LLVMGetFirstFunction(LLVMModuleRef M);
653 LLVMValueRef LLVMGetLastFunction(LLVMModuleRef M);
654 LLVMValueRef LLVMGetNextFunction(LLVMValueRef Fn);
655 LLVMValueRef LLVMGetPreviousFunction(LLVMValueRef Fn);
656 void LLVMDeleteFunction(LLVMValueRef Fn);
657 unsigned LLVMGetIntrinsicID(LLVMValueRef Fn);
658 unsigned LLVMGetFunctionCallConv(LLVMValueRef Fn);
659 void LLVMSetFunctionCallConv(LLVMValueRef Fn, unsigned CC);
660 const char *LLVMGetGC(LLVMValueRef Fn);
661 void LLVMSetGC(LLVMValueRef Fn, const char *Name);
662 void LLVMAddFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA);
663 LLVMAttribute LLVMGetFunctionAttr(LLVMValueRef Fn);
664 void LLVMRemoveFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA);
665
666 /* Operations on parameters */
667 unsigned LLVMCountParams(LLVMValueRef Fn);
668 void LLVMGetParams(LLVMValueRef Fn, LLVMValueRef *Params);
669 LLVMValueRef LLVMGetParam(LLVMValueRef Fn, unsigned Index);
670 LLVMValueRef LLVMGetParamParent(LLVMValueRef Inst);
671 LLVMValueRef LLVMGetFirstParam(LLVMValueRef Fn);
672 LLVMValueRef LLVMGetLastParam(LLVMValueRef Fn);
673 LLVMValueRef LLVMGetNextParam(LLVMValueRef Arg);
674 LLVMValueRef LLVMGetPreviousParam(LLVMValueRef Arg);
675 void LLVMAddAttribute(LLVMValueRef Arg, LLVMAttribute PA);
676 void LLVMRemoveAttribute(LLVMValueRef Arg, LLVMAttribute PA);
677 LLVMAttribute LLVMGetAttribute(LLVMValueRef Arg);
678 void LLVMSetParamAlignment(LLVMValueRef Arg, unsigned align);
679
680 /* Operations on basic blocks */
681 LLVMValueRef LLVMBasicBlockAsValue(LLVMBasicBlockRef BB);
682 int LLVMValueIsBasicBlock(LLVMValueRef Val);
683 LLVMBasicBlockRef LLVMValueAsBasicBlock(LLVMValueRef Val);
684 LLVMValueRef LLVMGetBasicBlockParent(LLVMBasicBlockRef BB);
685 unsigned LLVMCountBasicBlocks(LLVMValueRef Fn);
686 void LLVMGetBasicBlocks(LLVMValueRef Fn, LLVMBasicBlockRef *BasicBlocks);
687 LLVMBasicBlockRef LLVMGetFirstBasicBlock(LLVMValueRef Fn);
688 LLVMBasicBlockRef LLVMGetLastBasicBlock(LLVMValueRef Fn);
689 LLVMBasicBlockRef LLVMGetNextBasicBlock(LLVMBasicBlockRef BB);
690 LLVMBasicBlockRef LLVMGetPreviousBasicBlock(LLVMBasicBlockRef BB);
691 LLVMBasicBlockRef LLVMGetEntryBasicBlock(LLVMValueRef Fn);
692
693 LLVMBasicBlockRef LLVMAppendBasicBlockInContext(LLVMContextRef C,
694                                                 LLVMValueRef Fn,
695                                                 const char *Name);
696 LLVMBasicBlockRef LLVMInsertBasicBlockInContext(LLVMContextRef C,
697                                                 LLVMBasicBlockRef BB,
698                                                 const char *Name);
699
700 LLVMBasicBlockRef LLVMAppendBasicBlock(LLVMValueRef Fn, const char *Name);
701 LLVMBasicBlockRef LLVMInsertBasicBlock(LLVMBasicBlockRef InsertBeforeBB,
702                                        const char *Name);
703 void LLVMDeleteBasicBlock(LLVMBasicBlockRef BB);
704
705 /* Operations on instructions */
706 LLVMBasicBlockRef LLVMGetInstructionParent(LLVMValueRef Inst);
707 LLVMValueRef LLVMGetFirstInstruction(LLVMBasicBlockRef BB);
708 LLVMValueRef LLVMGetLastInstruction(LLVMBasicBlockRef BB);
709 LLVMValueRef LLVMGetNextInstruction(LLVMValueRef Inst);
710 LLVMValueRef LLVMGetPreviousInstruction(LLVMValueRef Inst);
711
712 /* Operations on call sites */
713 void LLVMSetInstructionCallConv(LLVMValueRef Instr, unsigned CC);
714 unsigned LLVMGetInstructionCallConv(LLVMValueRef Instr);
715 void LLVMAddInstrAttribute(LLVMValueRef Instr, unsigned index, LLVMAttribute);
716 void LLVMRemoveInstrAttribute(LLVMValueRef Instr, unsigned index, 
717                               LLVMAttribute);
718 void LLVMSetInstrParamAlignment(LLVMValueRef Instr, unsigned index, 
719                                 unsigned align);
720
721 /* Operations on call instructions (only) */
722 int LLVMIsTailCall(LLVMValueRef CallInst);
723 void LLVMSetTailCall(LLVMValueRef CallInst, int IsTailCall);
724
725 /* Operations on phi nodes */
726 void LLVMAddIncoming(LLVMValueRef PhiNode, LLVMValueRef *IncomingValues,
727                      LLVMBasicBlockRef *IncomingBlocks, unsigned Count);
728 unsigned LLVMCountIncoming(LLVMValueRef PhiNode);
729 LLVMValueRef LLVMGetIncomingValue(LLVMValueRef PhiNode, unsigned Index);
730 LLVMBasicBlockRef LLVMGetIncomingBlock(LLVMValueRef PhiNode, unsigned Index);
731
732 /*===-- Instruction builders ----------------------------------------------===*/
733
734 /* An instruction builder represents a point within a basic block, and is the
735  * exclusive means of building instructions using the C interface.
736  */
737
738 LLVMBuilderRef LLVMCreateBuilderInContext(LLVMContextRef C);
739 LLVMBuilderRef LLVMCreateBuilder(void);
740 void LLVMPositionBuilder(LLVMBuilderRef Builder, LLVMBasicBlockRef Block,
741                          LLVMValueRef Instr);
742 void LLVMPositionBuilderBefore(LLVMBuilderRef Builder, LLVMValueRef Instr);
743 void LLVMPositionBuilderAtEnd(LLVMBuilderRef Builder, LLVMBasicBlockRef Block);
744 LLVMBasicBlockRef LLVMGetInsertBlock(LLVMBuilderRef Builder);
745 void LLVMClearInsertionPosition(LLVMBuilderRef Builder);
746 void LLVMInsertIntoBuilder(LLVMBuilderRef Builder, LLVMValueRef Instr);
747 void LLVMInsertIntoBuilderWithName(LLVMBuilderRef Builder, LLVMValueRef Instr,
748                                    const char *Name);
749 void LLVMDisposeBuilder(LLVMBuilderRef Builder);
750
751 /* Terminators */
752 LLVMValueRef LLVMBuildRetVoid(LLVMBuilderRef);
753 LLVMValueRef LLVMBuildRet(LLVMBuilderRef, LLVMValueRef V);
754 LLVMValueRef LLVMBuildAggregateRet(LLVMBuilderRef, LLVMValueRef *RetVals,
755                                    unsigned N);
756 LLVMValueRef LLVMBuildBr(LLVMBuilderRef, LLVMBasicBlockRef Dest);
757 LLVMValueRef LLVMBuildCondBr(LLVMBuilderRef, LLVMValueRef If,
758                              LLVMBasicBlockRef Then, LLVMBasicBlockRef Else);
759 LLVMValueRef LLVMBuildSwitch(LLVMBuilderRef, LLVMValueRef V,
760                              LLVMBasicBlockRef Else, unsigned NumCases);
761 LLVMValueRef LLVMBuildInvoke(LLVMBuilderRef, LLVMValueRef Fn,
762                              LLVMValueRef *Args, unsigned NumArgs,
763                              LLVMBasicBlockRef Then, LLVMBasicBlockRef Catch,
764                              const char *Name);
765 LLVMValueRef LLVMBuildUnwind(LLVMBuilderRef);
766 LLVMValueRef LLVMBuildUnreachable(LLVMBuilderRef);
767
768 /* Add a case to the switch instruction */
769 void LLVMAddCase(LLVMValueRef Switch, LLVMValueRef OnVal,
770                  LLVMBasicBlockRef Dest);
771
772 /* Arithmetic */
773 LLVMValueRef LLVMBuildAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
774                           const char *Name);
775 LLVMValueRef LLVMBuildNSWAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
776                              const char *Name);
777 LLVMValueRef LLVMBuildFAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
778                            const char *Name);
779 LLVMValueRef LLVMBuildSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
780                           const char *Name);
781 LLVMValueRef LLVMBuildFSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
782                            const char *Name);
783 LLVMValueRef LLVMBuildMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
784                           const char *Name);
785 LLVMValueRef LLVMBuildFMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
786                            const char *Name);
787 LLVMValueRef LLVMBuildUDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
788                            const char *Name);
789 LLVMValueRef LLVMBuildSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
790                            const char *Name);
791 LLVMValueRef LLVMBuildExactSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
792                                 const char *Name);
793 LLVMValueRef LLVMBuildFDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
794                            const char *Name);
795 LLVMValueRef LLVMBuildURem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
796                            const char *Name);
797 LLVMValueRef LLVMBuildSRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
798                            const char *Name);
799 LLVMValueRef LLVMBuildFRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
800                            const char *Name);
801 LLVMValueRef LLVMBuildShl(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
802                            const char *Name);
803 LLVMValueRef LLVMBuildLShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
804                            const char *Name);
805 LLVMValueRef LLVMBuildAShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
806                            const char *Name);
807 LLVMValueRef LLVMBuildAnd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
808                           const char *Name);
809 LLVMValueRef LLVMBuildOr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
810                           const char *Name);
811 LLVMValueRef LLVMBuildXor(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
812                           const char *Name);
813 LLVMValueRef LLVMBuildNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name);
814 LLVMValueRef LLVMBuildFNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name);
815 LLVMValueRef LLVMBuildNot(LLVMBuilderRef, LLVMValueRef V, const char *Name);
816
817 /* Memory */
818 LLVMValueRef LLVMBuildMalloc(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
819 LLVMValueRef LLVMBuildArrayMalloc(LLVMBuilderRef, LLVMTypeRef Ty,
820                                   LLVMValueRef Val, const char *Name);
821 LLVMValueRef LLVMBuildAlloca(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
822 LLVMValueRef LLVMBuildArrayAlloca(LLVMBuilderRef, LLVMTypeRef Ty,
823                                   LLVMValueRef Val, const char *Name);
824 LLVMValueRef LLVMBuildFree(LLVMBuilderRef, LLVMValueRef PointerVal);
825 LLVMValueRef LLVMBuildLoad(LLVMBuilderRef, LLVMValueRef PointerVal,
826                            const char *Name);
827 LLVMValueRef LLVMBuildStore(LLVMBuilderRef, LLVMValueRef Val, LLVMValueRef Ptr);
828 LLVMValueRef LLVMBuildGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
829                           LLVMValueRef *Indices, unsigned NumIndices,
830                           const char *Name);
831 LLVMValueRef LLVMBuildInBoundsGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
832                                   LLVMValueRef *Indices, unsigned NumIndices,
833                                   const char *Name);
834 LLVMValueRef LLVMBuildStructGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
835                                 unsigned Idx, const char *Name);
836 LLVMValueRef LLVMBuildGlobalString(LLVMBuilderRef B, const char *Str,
837                                    const char *Name);
838 LLVMValueRef LLVMBuildGlobalStringPtr(LLVMBuilderRef B, const char *Str,
839                                       const char *Name);
840
841 /* Casts */
842 LLVMValueRef LLVMBuildTrunc(LLVMBuilderRef, LLVMValueRef Val,
843                             LLVMTypeRef DestTy, const char *Name);
844 LLVMValueRef LLVMBuildZExt(LLVMBuilderRef, LLVMValueRef Val,
845                            LLVMTypeRef DestTy, const char *Name);
846 LLVMValueRef LLVMBuildSExt(LLVMBuilderRef, LLVMValueRef Val,
847                            LLVMTypeRef DestTy, const char *Name);
848 LLVMValueRef LLVMBuildFPToUI(LLVMBuilderRef, LLVMValueRef Val,
849                              LLVMTypeRef DestTy, const char *Name);
850 LLVMValueRef LLVMBuildFPToSI(LLVMBuilderRef, LLVMValueRef Val,
851                              LLVMTypeRef DestTy, const char *Name);
852 LLVMValueRef LLVMBuildUIToFP(LLVMBuilderRef, LLVMValueRef Val,
853                              LLVMTypeRef DestTy, const char *Name);
854 LLVMValueRef LLVMBuildSIToFP(LLVMBuilderRef, LLVMValueRef Val,
855                              LLVMTypeRef DestTy, const char *Name);
856 LLVMValueRef LLVMBuildFPTrunc(LLVMBuilderRef, LLVMValueRef Val,
857                               LLVMTypeRef DestTy, const char *Name);
858 LLVMValueRef LLVMBuildFPExt(LLVMBuilderRef, LLVMValueRef Val,
859                             LLVMTypeRef DestTy, const char *Name);
860 LLVMValueRef LLVMBuildPtrToInt(LLVMBuilderRef, LLVMValueRef Val,
861                                LLVMTypeRef DestTy, const char *Name);
862 LLVMValueRef LLVMBuildIntToPtr(LLVMBuilderRef, LLVMValueRef Val,
863                                LLVMTypeRef DestTy, const char *Name);
864 LLVMValueRef LLVMBuildBitCast(LLVMBuilderRef, LLVMValueRef Val,
865                               LLVMTypeRef DestTy, const char *Name);
866 LLVMValueRef LLVMBuildZExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
867                                     LLVMTypeRef DestTy, const char *Name);
868 LLVMValueRef LLVMBuildSExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
869                                     LLVMTypeRef DestTy, const char *Name);
870 LLVMValueRef LLVMBuildTruncOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
871                                      LLVMTypeRef DestTy, const char *Name);
872 LLVMValueRef LLVMBuildPointerCast(LLVMBuilderRef, LLVMValueRef Val,
873                                   LLVMTypeRef DestTy, const char *Name);
874 LLVMValueRef LLVMBuildIntCast(LLVMBuilderRef, LLVMValueRef Val,
875                               LLVMTypeRef DestTy, const char *Name);
876 LLVMValueRef LLVMBuildFPCast(LLVMBuilderRef, LLVMValueRef Val,
877                              LLVMTypeRef DestTy, const char *Name);
878
879 /* Comparisons */
880 LLVMValueRef LLVMBuildICmp(LLVMBuilderRef, LLVMIntPredicate Op,
881                            LLVMValueRef LHS, LLVMValueRef RHS,
882                            const char *Name);
883 LLVMValueRef LLVMBuildFCmp(LLVMBuilderRef, LLVMRealPredicate Op,
884                            LLVMValueRef LHS, LLVMValueRef RHS,
885                            const char *Name);
886
887 /* Miscellaneous instructions */
888 LLVMValueRef LLVMBuildPhi(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
889 LLVMValueRef LLVMBuildCall(LLVMBuilderRef, LLVMValueRef Fn,
890                            LLVMValueRef *Args, unsigned NumArgs,
891                            const char *Name);
892 LLVMValueRef LLVMBuildSelect(LLVMBuilderRef, LLVMValueRef If,
893                              LLVMValueRef Then, LLVMValueRef Else,
894                              const char *Name);
895 LLVMValueRef LLVMBuildVAArg(LLVMBuilderRef, LLVMValueRef List, LLVMTypeRef Ty,
896                             const char *Name);
897 LLVMValueRef LLVMBuildExtractElement(LLVMBuilderRef, LLVMValueRef VecVal,
898                                      LLVMValueRef Index, const char *Name);
899 LLVMValueRef LLVMBuildInsertElement(LLVMBuilderRef, LLVMValueRef VecVal,
900                                     LLVMValueRef EltVal, LLVMValueRef Index,
901                                     const char *Name);
902 LLVMValueRef LLVMBuildShuffleVector(LLVMBuilderRef, LLVMValueRef V1,
903                                     LLVMValueRef V2, LLVMValueRef Mask,
904                                     const char *Name);
905 LLVMValueRef LLVMBuildExtractValue(LLVMBuilderRef, LLVMValueRef AggVal,
906                                    unsigned Index, const char *Name);
907 LLVMValueRef LLVMBuildInsertValue(LLVMBuilderRef, LLVMValueRef AggVal,
908                                   LLVMValueRef EltVal, unsigned Index,
909                                   const char *Name);
910
911 LLVMValueRef LLVMBuildIsNull(LLVMBuilderRef, LLVMValueRef Val,
912                              const char *Name);
913 LLVMValueRef LLVMBuildIsNotNull(LLVMBuilderRef, LLVMValueRef Val,
914                                 const char *Name);
915 LLVMValueRef LLVMBuildPtrDiff(LLVMBuilderRef, LLVMValueRef LHS,
916                               LLVMValueRef RHS, const char *Name);
917
918
919 /*===-- Module providers --------------------------------------------------===*/
920
921 /* Encapsulates the module M in a module provider, taking ownership of the
922  * module.
923  * See the constructor llvm::ExistingModuleProvider::ExistingModuleProvider.
924  */
925 LLVMModuleProviderRef
926 LLVMCreateModuleProviderForExistingModule(LLVMModuleRef M);
927
928 /* Destroys the module provider MP as well as the contained module.
929  * See the destructor llvm::ModuleProvider::~ModuleProvider.
930  */
931 void LLVMDisposeModuleProvider(LLVMModuleProviderRef MP);
932
933
934 /*===-- Memory buffers ----------------------------------------------------===*/
935
936 int LLVMCreateMemoryBufferWithContentsOfFile(const char *Path,
937                                              LLVMMemoryBufferRef *OutMemBuf,
938                                              char **OutMessage);
939 int LLVMCreateMemoryBufferWithSTDIN(LLVMMemoryBufferRef *OutMemBuf,
940                                     char **OutMessage);
941 void LLVMDisposeMemoryBuffer(LLVMMemoryBufferRef MemBuf);
942
943
944 /*===-- Pass Managers -----------------------------------------------------===*/
945
946 /** Constructs a new whole-module pass pipeline. This type of pipeline is
947     suitable for link-time optimization and whole-module transformations.
948     See llvm::PassManager::PassManager. */
949 LLVMPassManagerRef LLVMCreatePassManager(void);
950
951 /** Constructs a new function-by-function pass pipeline over the module
952     provider. It does not take ownership of the module provider. This type of
953     pipeline is suitable for code generation and JIT compilation tasks.
954     See llvm::FunctionPassManager::FunctionPassManager. */
955 LLVMPassManagerRef LLVMCreateFunctionPassManager(LLVMModuleProviderRef MP);
956
957 /** Initializes, executes on the provided module, and finalizes all of the
958     passes scheduled in the pass manager. Returns 1 if any of the passes
959     modified the module, 0 otherwise. See llvm::PassManager::run(Module&). */
960 int LLVMRunPassManager(LLVMPassManagerRef PM, LLVMModuleRef M);
961
962 /** Initializes all of the function passes scheduled in the function pass
963     manager. Returns 1 if any of the passes modified the module, 0 otherwise.
964     See llvm::FunctionPassManager::doInitialization. */
965 int LLVMInitializeFunctionPassManager(LLVMPassManagerRef FPM);
966
967 /** Executes all of the function passes scheduled in the function pass manager
968     on the provided function. Returns 1 if any of the passes modified the
969     function, false otherwise.
970     See llvm::FunctionPassManager::run(Function&). */
971 int LLVMRunFunctionPassManager(LLVMPassManagerRef FPM, LLVMValueRef F);
972
973 /** Finalizes all of the function passes scheduled in in the function pass
974     manager. Returns 1 if any of the passes modified the module, 0 otherwise.
975     See llvm::FunctionPassManager::doFinalization. */
976 int LLVMFinalizeFunctionPassManager(LLVMPassManagerRef FPM);
977
978 /** Frees the memory of a pass pipeline. For function pipelines, does not free
979     the module provider.
980     See llvm::PassManagerBase::~PassManagerBase. */
981 void LLVMDisposePassManager(LLVMPassManagerRef PM);
982
983
984 #ifdef __cplusplus
985 }
986
987 namespace llvm {
988   class ModuleProvider;
989   class MemoryBuffer;
990   class PassManagerBase;
991   
992   #define DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref)   \
993     inline ty *unwrap(ref P) {                          \
994       return reinterpret_cast<ty*>(P);                  \
995     }                                                   \
996                                                         \
997     inline ref wrap(const ty *P) {                      \
998       return reinterpret_cast<ref>(const_cast<ty*>(P)); \
999     }
1000   
1001   #define DEFINE_ISA_CONVERSION_FUNCTIONS(ty, ref)  \
1002     DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref)         \
1003                                                         \
1004     template<typename T>                                \
1005     inline T *unwrap(ref P) {                           \
1006       return cast<T>(unwrap(P));                        \
1007     }
1008   
1009   #define DEFINE_STDCXX_CONVERSION_FUNCTIONS(ty, ref)   \
1010     DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref)         \
1011                                                         \
1012     template<typename T>                                \
1013     inline T *unwrap(ref P) {                           \
1014       T *Q = dynamic_cast<T*>(unwrap(P));               \
1015       assert(Q && "Invalid cast!");                     \
1016       return Q;                                         \
1017     }
1018   
1019   DEFINE_ISA_CONVERSION_FUNCTIONS   (Type,               LLVMTypeRef          )
1020   DEFINE_ISA_CONVERSION_FUNCTIONS   (Value,              LLVMValueRef         )
1021   DEFINE_SIMPLE_CONVERSION_FUNCTIONS(Module,             LLVMModuleRef        )
1022   DEFINE_SIMPLE_CONVERSION_FUNCTIONS(BasicBlock,         LLVMBasicBlockRef    )
1023   DEFINE_SIMPLE_CONVERSION_FUNCTIONS(IRBuilder<>,        LLVMBuilderRef       )
1024   DEFINE_SIMPLE_CONVERSION_FUNCTIONS(PATypeHolder,       LLVMTypeHandleRef    )
1025   DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ModuleProvider,     LLVMModuleProviderRef)
1026   DEFINE_SIMPLE_CONVERSION_FUNCTIONS(MemoryBuffer,       LLVMMemoryBufferRef  )
1027   DEFINE_SIMPLE_CONVERSION_FUNCTIONS(LLVMContext,        LLVMContextRef       )
1028   DEFINE_SIMPLE_CONVERSION_FUNCTIONS(Use,                LLVMUseIteratorRef           )
1029   DEFINE_STDCXX_CONVERSION_FUNCTIONS(PassManagerBase,    LLVMPassManagerRef   )
1030   
1031   #undef DEFINE_STDCXX_CONVERSION_FUNCTIONS
1032   #undef DEFINE_ISA_CONVERSION_FUNCTIONS
1033   #undef DEFINE_SIMPLE_CONVERSION_FUNCTIONS
1034
1035   /* Specialized opaque context conversions.
1036    */
1037   inline LLVMContext **unwrap(LLVMContextRef* Tys) {
1038     return reinterpret_cast<LLVMContext**>(Tys);
1039   }
1040   
1041   inline LLVMContextRef *wrap(const LLVMContext **Tys) {
1042     return reinterpret_cast<LLVMContextRef*>(const_cast<LLVMContext**>(Tys));
1043   }
1044   
1045   /* Specialized opaque type conversions.
1046    */
1047   inline Type **unwrap(LLVMTypeRef* Tys) {
1048     return reinterpret_cast<Type**>(Tys);
1049   }
1050   
1051   inline LLVMTypeRef *wrap(const Type **Tys) {
1052     return reinterpret_cast<LLVMTypeRef*>(const_cast<Type**>(Tys));
1053   }
1054   
1055   /* Specialized opaque value conversions.
1056    */ 
1057   inline Value **unwrap(LLVMValueRef *Vals) {
1058     return reinterpret_cast<Value**>(Vals);
1059   }
1060   
1061   template<typename T>
1062   inline T **unwrap(LLVMValueRef *Vals, unsigned Length) {
1063     #if DEBUG
1064     for (LLVMValueRef *I = Vals, *E = Vals + Length; I != E; ++I)
1065       cast<T>(*I);
1066     #endif
1067     return reinterpret_cast<T**>(Vals);
1068   }
1069   
1070   inline LLVMValueRef *wrap(const Value **Vals) {
1071     return reinterpret_cast<LLVMValueRef*>(const_cast<Value**>(Vals));
1072   }
1073 }
1074
1075 #endif /* !defined(__cplusplus) */
1076
1077 #endif /* !defined(LLVM_C_CORE_H) */