Core.h revision 195340
1193323Sed/*===-- llvm-c/Core.h - Core Library C Interface ------------------*- C -*-===*\
2193323Sed|*                                                                            *|
3193323Sed|*                     The LLVM Compiler Infrastructure                       *|
4193323Sed|*                                                                            *|
5193323Sed|* This file is distributed under the University of Illinois Open Source      *|
6193323Sed|* License. See LICENSE.TXT for details.                                      *|
7193323Sed|*                                                                            *|
8193323Sed|*===----------------------------------------------------------------------===*|
9193323Sed|*                                                                            *|
10193323Sed|* This header declares the C interface to libLLVMCore.a, which implements    *|
11193323Sed|* the LLVM intermediate representation.                                      *|
12193323Sed|*                                                                            *|
13193323Sed|* LLVM uses a polymorphic type hierarchy which C cannot represent, therefore *|
14193323Sed|* parameters must be passed as base types. Despite the declared types, most  *|
15193323Sed|* of the functions provided operate only on branches of the type hierarchy.  *|
16193323Sed|* The declared parameter names are descriptive and specify which type is     *|
17193323Sed|* required. Additionally, each type hierarchy is documented along with the   *|
18193323Sed|* functions that operate upon it. For more detail, refer to LLVM's C++ code. *|
19193323Sed|* If in doubt, refer to Core.cpp, which performs paramter downcasts in the   *|
20193323Sed|* form unwrap<RequiredType>(Param).                                          *|
21193323Sed|*                                                                            *|
22193323Sed|* Many exotic languages can interoperate with C code but have a harder time  *|
23193323Sed|* with C++ due to name mangling. So in addition to C, this interface enables *|
24193323Sed|* tools written in such languages.                                           *|
25193323Sed|*                                                                            *|
26193323Sed|* When included into a C++ source file, also declares 'wrap' and 'unwrap'    *|
27193323Sed|* helpers to perform opaque reference<-->pointer conversions. These helpers  *|
28193323Sed|* are shorter and more tightly typed than writing the casts by hand when     *|
29193323Sed|* authoring bindings. In assert builds, they will do runtime type checking.  *|
30193323Sed|*                                                                            *|
31193323Sed\*===----------------------------------------------------------------------===*/
32193323Sed
33193323Sed#ifndef LLVM_C_CORE_H
34193323Sed#define LLVM_C_CORE_H
35193323Sed
36193323Sed#ifdef __cplusplus
37193323Sed
38193323Sed/* Need these includes to support the LLVM 'cast' template for the C++ 'wrap'
39193323Sed   and 'unwrap' conversion functions. */
40193323Sed#include "llvm/Module.h"
41193323Sed#include "llvm/Support/IRBuilder.h"
42193323Sed
43193323Sedextern "C" {
44193323Sed#endif
45193323Sed
46193323Sed
47193323Sed/* Opaque types. */
48193323Sed
49193323Sed/**
50195340Sed * The top-level container for all LLVM global data.  See the LLVMContext class.
51195340Sed */
52195340Sedtypedef struct LLVMCtxt *LLVMContextRef;
53195340Sed
54195340Sed/**
55193323Sed * The top-level container for all other LLVM Intermediate Representation (IR)
56193323Sed * objects. See the llvm::Module class.
57193323Sed */
58193323Sedtypedef struct LLVMOpaqueModule *LLVMModuleRef;
59193323Sed
60193323Sed/**
61193323Sed * Each value in the LLVM IR has a type, an LLVMTypeRef. See the llvm::Type
62193323Sed * class.
63193323Sed */
64193323Sedtypedef struct LLVMOpaqueType *LLVMTypeRef;
65193323Sed
66193323Sed/**
67193323Sed * When building recursive types using LLVMRefineType, LLVMTypeRef values may
68193323Sed * become invalid; use LLVMTypeHandleRef to resolve this problem. See the
69193323Sed * llvm::AbstractTypeHolder class.
70193323Sed */
71193323Sedtypedef struct LLVMOpaqueTypeHandle *LLVMTypeHandleRef;
72193323Sed
73193323Sedtypedef struct LLVMOpaqueValue *LLVMValueRef;
74193323Sedtypedef struct LLVMOpaqueBasicBlock *LLVMBasicBlockRef;
75193323Sedtypedef struct LLVMOpaqueBuilder *LLVMBuilderRef;
76193323Sed
77193323Sed/* Used to provide a module to JIT or interpreter.
78193323Sed * See the llvm::ModuleProvider class.
79193323Sed */
80193323Sedtypedef struct LLVMOpaqueModuleProvider *LLVMModuleProviderRef;
81193323Sed
82193323Sed/* Used to provide a module to JIT or interpreter.
83193323Sed * See the llvm::MemoryBuffer class.
84193323Sed */
85193323Sedtypedef struct LLVMOpaqueMemoryBuffer *LLVMMemoryBufferRef;
86193323Sed
87193323Sed/** See the llvm::PassManagerBase class. */
88193323Sedtypedef struct LLVMOpaquePassManager *LLVMPassManagerRef;
89193323Sed
90193323Sedtypedef enum {
91193323Sed    LLVMZExtAttribute       = 1<<0,
92193323Sed    LLVMSExtAttribute       = 1<<1,
93193323Sed    LLVMNoReturnAttribute   = 1<<2,
94193323Sed    LLVMInRegAttribute      = 1<<3,
95193323Sed    LLVMStructRetAttribute  = 1<<4,
96193323Sed    LLVMNoUnwindAttribute   = 1<<5,
97193323Sed    LLVMNoAliasAttribute    = 1<<6,
98193323Sed    LLVMByValAttribute      = 1<<7,
99193323Sed    LLVMNestAttribute       = 1<<8,
100193323Sed    LLVMReadNoneAttribute   = 1<<9,
101193323Sed    LLVMReadOnlyAttribute   = 1<<10
102193323Sed} LLVMAttribute;
103193323Sed
104193323Sedtypedef enum {
105193323Sed  LLVMVoidTypeKind,        /**< type with no size */
106193323Sed  LLVMFloatTypeKind,       /**< 32 bit floating point type */
107193323Sed  LLVMDoubleTypeKind,      /**< 64 bit floating point type */
108193323Sed  LLVMX86_FP80TypeKind,    /**< 80 bit floating point type (X87) */
109193323Sed  LLVMFP128TypeKind,       /**< 128 bit floating point type (112-bit mantissa)*/
110193323Sed  LLVMPPC_FP128TypeKind,   /**< 128 bit floating point type (two 64-bits) */
111193323Sed  LLVMLabelTypeKind,       /**< Labels */
112193323Sed  LLVMIntegerTypeKind,     /**< Arbitrary bit width integers */
113193323Sed  LLVMFunctionTypeKind,    /**< Functions */
114193323Sed  LLVMStructTypeKind,      /**< Structures */
115193323Sed  LLVMArrayTypeKind,       /**< Arrays */
116193323Sed  LLVMPointerTypeKind,     /**< Pointers */
117193323Sed  LLVMOpaqueTypeKind,      /**< Opaque: type with unknown structure */
118193323Sed  LLVMVectorTypeKind       /**< SIMD 'packed' format, or other vector type */
119193323Sed} LLVMTypeKind;
120193323Sed
121193323Sedtypedef enum {
122193323Sed  LLVMExternalLinkage,    /**< Externally visible function */
123193323Sed  LLVMAvailableExternallyLinkage,
124193323Sed  LLVMLinkOnceAnyLinkage, /**< Keep one copy of function when linking (inline)*/
125193323Sed  LLVMLinkOnceODRLinkage, /**< Same, but only replaced by something
126193323Sed                            equivalent. */
127193323Sed  LLVMWeakAnyLinkage,     /**< Keep one copy of function when linking (weak) */
128193323Sed  LLVMWeakODRLinkage,     /**< Same, but only replaced by something
129193323Sed                            equivalent. */
130193323Sed  LLVMAppendingLinkage,   /**< Special purpose, only applies to global arrays */
131193323Sed  LLVMInternalLinkage,    /**< Rename collisions when linking (static
132193323Sed                               functions) */
133193323Sed  LLVMPrivateLinkage,     /**< Like Internal, but omit from symbol table */
134193323Sed  LLVMDLLImportLinkage,   /**< Function to be imported from DLL */
135193323Sed  LLVMDLLExportLinkage,   /**< Function to be accessible from DLL */
136193323Sed  LLVMExternalWeakLinkage,/**< ExternalWeak linkage description */
137193323Sed  LLVMGhostLinkage,       /**< Stand-in functions for streaming fns from
138193323Sed                               bitcode */
139193323Sed  LLVMCommonLinkage       /**< Tentative definitions */
140193323Sed} LLVMLinkage;
141193323Sed
142193323Sedtypedef enum {
143193323Sed  LLVMDefaultVisibility,  /**< The GV is visible */
144193323Sed  LLVMHiddenVisibility,   /**< The GV is hidden */
145193323Sed  LLVMProtectedVisibility /**< The GV is protected */
146193323Sed} LLVMVisibility;
147193323Sed
148193323Sedtypedef enum {
149193323Sed  LLVMCCallConv           = 0,
150193323Sed  LLVMFastCallConv        = 8,
151193323Sed  LLVMColdCallConv        = 9,
152193323Sed  LLVMX86StdcallCallConv  = 64,
153193323Sed  LLVMX86FastcallCallConv = 65
154193323Sed} LLVMCallConv;
155193323Sed
156193323Sedtypedef enum {
157193323Sed  LLVMIntEQ = 32, /**< equal */
158193323Sed  LLVMIntNE,      /**< not equal */
159193323Sed  LLVMIntUGT,     /**< unsigned greater than */
160193323Sed  LLVMIntUGE,     /**< unsigned greater or equal */
161193323Sed  LLVMIntULT,     /**< unsigned less than */
162193323Sed  LLVMIntULE,     /**< unsigned less or equal */
163193323Sed  LLVMIntSGT,     /**< signed greater than */
164193323Sed  LLVMIntSGE,     /**< signed greater or equal */
165193323Sed  LLVMIntSLT,     /**< signed less than */
166193323Sed  LLVMIntSLE      /**< signed less or equal */
167193323Sed} LLVMIntPredicate;
168193323Sed
169193323Sedtypedef enum {
170193323Sed  LLVMRealPredicateFalse, /**< Always false (always folded) */
171193323Sed  LLVMRealOEQ,            /**< True if ordered and equal */
172193323Sed  LLVMRealOGT,            /**< True if ordered and greater than */
173193323Sed  LLVMRealOGE,            /**< True if ordered and greater than or equal */
174193323Sed  LLVMRealOLT,            /**< True if ordered and less than */
175193323Sed  LLVMRealOLE,            /**< True if ordered and less than or equal */
176193323Sed  LLVMRealONE,            /**< True if ordered and operands are unequal */
177193323Sed  LLVMRealORD,            /**< True if ordered (no nans) */
178193323Sed  LLVMRealUNO,            /**< True if unordered: isnan(X) | isnan(Y) */
179193323Sed  LLVMRealUEQ,            /**< True if unordered or equal */
180193323Sed  LLVMRealUGT,            /**< True if unordered or greater than */
181193323Sed  LLVMRealUGE,            /**< True if unordered, greater than, or equal */
182193323Sed  LLVMRealULT,            /**< True if unordered or less than */
183193323Sed  LLVMRealULE,            /**< True if unordered, less than, or equal */
184193323Sed  LLVMRealUNE,            /**< True if unordered or not equal */
185193323Sed  LLVMRealPredicateTrue   /**< Always true (always folded) */
186193323Sed} LLVMRealPredicate;
187193323Sed
188193323Sed
189193323Sed/*===-- Error handling ----------------------------------------------------===*/
190193323Sed
191193323Sedvoid LLVMDisposeMessage(char *Message);
192193323Sed
193193323Sed
194193323Sed/*===-- Modules -----------------------------------------------------------===*/
195193323Sed
196195340Sed/* Create and destroy contexts. */
197195340SedLLVMContextRef LLVMContextCreate();
198195340SedLLVMContextRef LLVMGetGlobalContext();
199195340Sedvoid LLVMContextDispose(LLVMContextRef C);
200195340Sed
201193323Sed/* Create and destroy modules. */
202193323Sed/** See llvm::Module::Module. */
203193323SedLLVMModuleRef LLVMModuleCreateWithName(const char *ModuleID);
204195340SedLLVMModuleRef LLVMModuleCreateWithNameInContext(const char *ModuleID,
205195340Sed                                                LLVMContextRef C);
206193323Sed
207193323Sed/** See llvm::Module::~Module. */
208193323Sedvoid LLVMDisposeModule(LLVMModuleRef M);
209193323Sed
210193323Sed/** Data layout. See Module::getDataLayout. */
211193323Sedconst char *LLVMGetDataLayout(LLVMModuleRef M);
212193323Sedvoid LLVMSetDataLayout(LLVMModuleRef M, const char *Triple);
213193323Sed
214193323Sed/** Target triple. See Module::getTargetTriple. */
215193323Sedconst char *LLVMGetTarget(LLVMModuleRef M);
216193323Sedvoid LLVMSetTarget(LLVMModuleRef M, const char *Triple);
217193323Sed
218193323Sed/** See Module::addTypeName. */
219193323Sedint LLVMAddTypeName(LLVMModuleRef M, const char *Name, LLVMTypeRef Ty);
220193323Sedvoid LLVMDeleteTypeName(LLVMModuleRef M, const char *Name);
221193323Sed
222193323Sed/** See Module::dump. */
223193323Sedvoid LLVMDumpModule(LLVMModuleRef M);
224193323Sed
225193323Sed
226193323Sed/*===-- Types -------------------------------------------------------------===*/
227193323Sed
228193323Sed/* LLVM types conform to the following hierarchy:
229193323Sed *
230193323Sed *   types:
231193323Sed *     integer type
232193323Sed *     real type
233193323Sed *     function type
234193323Sed *     sequence types:
235193323Sed *       array type
236193323Sed *       pointer type
237193323Sed *       vector type
238193323Sed *     void type
239193323Sed *     label type
240193323Sed *     opaque type
241193323Sed */
242193323Sed
243193323Sed/** See llvm::LLVMTypeKind::getTypeID. */
244193323SedLLVMTypeKind LLVMGetTypeKind(LLVMTypeRef Ty);
245193323Sed
246193323Sed/* Operations on integer types */
247193323SedLLVMTypeRef LLVMInt1Type(void);
248193323SedLLVMTypeRef LLVMInt8Type(void);
249193323SedLLVMTypeRef LLVMInt16Type(void);
250193323SedLLVMTypeRef LLVMInt32Type(void);
251193323SedLLVMTypeRef LLVMInt64Type(void);
252193323SedLLVMTypeRef LLVMIntType(unsigned NumBits);
253193323Sedunsigned LLVMGetIntTypeWidth(LLVMTypeRef IntegerTy);
254193323Sed
255193323Sed/* Operations on real types */
256193323SedLLVMTypeRef LLVMFloatType(void);
257193323SedLLVMTypeRef LLVMDoubleType(void);
258193323SedLLVMTypeRef LLVMX86FP80Type(void);
259193323SedLLVMTypeRef LLVMFP128Type(void);
260193323SedLLVMTypeRef LLVMPPCFP128Type(void);
261193323Sed
262193323Sed/* Operations on function types */
263193323SedLLVMTypeRef LLVMFunctionType(LLVMTypeRef ReturnType,
264193323Sed                             LLVMTypeRef *ParamTypes, unsigned ParamCount,
265193323Sed                             int IsVarArg);
266193323Sedint LLVMIsFunctionVarArg(LLVMTypeRef FunctionTy);
267193323SedLLVMTypeRef LLVMGetReturnType(LLVMTypeRef FunctionTy);
268193323Sedunsigned LLVMCountParamTypes(LLVMTypeRef FunctionTy);
269193323Sedvoid LLVMGetParamTypes(LLVMTypeRef FunctionTy, LLVMTypeRef *Dest);
270193323Sed
271193323Sed/* Operations on struct types */
272193323SedLLVMTypeRef LLVMStructType(LLVMTypeRef *ElementTypes, unsigned ElementCount,
273193323Sed                           int Packed);
274193323Sedunsigned LLVMCountStructElementTypes(LLVMTypeRef StructTy);
275193323Sedvoid LLVMGetStructElementTypes(LLVMTypeRef StructTy, LLVMTypeRef *Dest);
276193323Sedint LLVMIsPackedStruct(LLVMTypeRef StructTy);
277193323Sed
278193323Sed/* Operations on array, pointer, and vector types (sequence types) */
279193323SedLLVMTypeRef LLVMArrayType(LLVMTypeRef ElementType, unsigned ElementCount);
280193323SedLLVMTypeRef LLVMPointerType(LLVMTypeRef ElementType, unsigned AddressSpace);
281193323SedLLVMTypeRef LLVMVectorType(LLVMTypeRef ElementType, unsigned ElementCount);
282193323Sed
283193323SedLLVMTypeRef LLVMGetElementType(LLVMTypeRef Ty);
284193323Sedunsigned LLVMGetArrayLength(LLVMTypeRef ArrayTy);
285193323Sedunsigned LLVMGetPointerAddressSpace(LLVMTypeRef PointerTy);
286193323Sedunsigned LLVMGetVectorSize(LLVMTypeRef VectorTy);
287193323Sed
288193323Sed/* Operations on other types */
289193323SedLLVMTypeRef LLVMVoidType(void);
290193323SedLLVMTypeRef LLVMLabelType(void);
291193323SedLLVMTypeRef LLVMOpaqueType(void);
292193323Sed
293193323Sed/* Operations on type handles */
294193323SedLLVMTypeHandleRef LLVMCreateTypeHandle(LLVMTypeRef PotentiallyAbstractTy);
295193323Sedvoid LLVMRefineType(LLVMTypeRef AbstractTy, LLVMTypeRef ConcreteTy);
296193323SedLLVMTypeRef LLVMResolveTypeHandle(LLVMTypeHandleRef TypeHandle);
297193323Sedvoid LLVMDisposeTypeHandle(LLVMTypeHandleRef TypeHandle);
298193323Sed
299193323Sed
300193323Sed/*===-- Values ------------------------------------------------------------===*/
301193323Sed
302193323Sed/* The bulk of LLVM's object model consists of values, which comprise a very
303193323Sed * rich type hierarchy.
304193323Sed */
305193323Sed
306193323Sed#define LLVM_FOR_EACH_VALUE_SUBCLASS(macro) \
307193323Sed  macro(Argument)                           \
308193323Sed  macro(BasicBlock)                         \
309193323Sed  macro(InlineAsm)                          \
310193323Sed  macro(User)                               \
311193323Sed    macro(Constant)                         \
312193323Sed      macro(ConstantAggregateZero)          \
313193323Sed      macro(ConstantArray)                  \
314193323Sed      macro(ConstantExpr)                   \
315193323Sed      macro(ConstantFP)                     \
316193323Sed      macro(ConstantInt)                    \
317193323Sed      macro(ConstantPointerNull)            \
318193323Sed      macro(ConstantStruct)                 \
319193323Sed      macro(ConstantVector)                 \
320193323Sed      macro(GlobalValue)                    \
321193323Sed        macro(Function)                     \
322193323Sed        macro(GlobalAlias)                  \
323193323Sed        macro(GlobalVariable)               \
324193323Sed      macro(UndefValue)                     \
325193323Sed    macro(Instruction)                      \
326193323Sed      macro(BinaryOperator)                 \
327193323Sed      macro(CallInst)                       \
328193323Sed        macro(IntrinsicInst)                \
329193323Sed          macro(DbgInfoIntrinsic)           \
330193323Sed            macro(DbgDeclareInst)           \
331193323Sed            macro(DbgFuncStartInst)         \
332193323Sed            macro(DbgRegionEndInst)         \
333193323Sed            macro(DbgRegionStartInst)       \
334193323Sed            macro(DbgStopPointInst)         \
335193323Sed          macro(EHSelectorInst)             \
336193323Sed          macro(MemIntrinsic)               \
337193323Sed            macro(MemCpyInst)               \
338193323Sed            macro(MemMoveInst)              \
339193323Sed            macro(MemSetInst)               \
340193323Sed      macro(CmpInst)                        \
341193323Sed      macro(FCmpInst)                       \
342193323Sed      macro(ICmpInst)                       \
343193323Sed      macro(VFCmpInst)                      \
344193323Sed      macro(VICmpInst)                      \
345193323Sed      macro(ExtractElementInst)             \
346193323Sed      macro(GetElementPtrInst)              \
347193323Sed      macro(InsertElementInst)              \
348193323Sed      macro(InsertValueInst)                \
349193323Sed      macro(PHINode)                        \
350193323Sed      macro(SelectInst)                     \
351193323Sed      macro(ShuffleVectorInst)              \
352193323Sed      macro(StoreInst)                      \
353193323Sed      macro(TerminatorInst)                 \
354193323Sed        macro(BranchInst)                   \
355193323Sed        macro(InvokeInst)                   \
356193323Sed        macro(ReturnInst)                   \
357193323Sed        macro(SwitchInst)                   \
358193323Sed        macro(UnreachableInst)              \
359193323Sed        macro(UnwindInst)                   \
360193323Sed    macro(UnaryInstruction)                 \
361193323Sed      macro(AllocationInst)                 \
362193323Sed        macro(AllocaInst)                   \
363193323Sed        macro(MallocInst)                   \
364193323Sed      macro(CastInst)                       \
365193323Sed        macro(BitCastInst)                  \
366193323Sed        macro(FPExtInst)                    \
367193323Sed        macro(FPToSIInst)                   \
368193323Sed        macro(FPToUIInst)                   \
369193323Sed        macro(FPTruncInst)                  \
370193323Sed        macro(IntToPtrInst)                 \
371193323Sed        macro(PtrToIntInst)                 \
372193323Sed        macro(SExtInst)                     \
373193323Sed        macro(SIToFPInst)                   \
374193323Sed        macro(TruncInst)                    \
375193323Sed        macro(UIToFPInst)                   \
376193323Sed        macro(ZExtInst)                     \
377193323Sed      macro(ExtractValueInst)               \
378193323Sed      macro(FreeInst)                       \
379193323Sed      macro(LoadInst)                       \
380193323Sed      macro(VAArgInst)
381193323Sed
382193323Sed/* Operations on all values */
383193323SedLLVMTypeRef LLVMTypeOf(LLVMValueRef Val);
384193323Sedconst char *LLVMGetValueName(LLVMValueRef Val);
385193323Sedvoid LLVMSetValueName(LLVMValueRef Val, const char *Name);
386193323Sedvoid LLVMDumpValue(LLVMValueRef Val);
387193323Sed
388193323Sed/* Conversion functions. Return the input value if it is an instance of the
389193323Sed   specified class, otherwise NULL. See llvm::dyn_cast_or_null<>. */
390193323Sed#define LLVM_DECLARE_VALUE_CAST(name) \
391193323Sed  LLVMValueRef LLVMIsA##name(LLVMValueRef Val);
392193323SedLLVM_FOR_EACH_VALUE_SUBCLASS(LLVM_DECLARE_VALUE_CAST)
393193323Sed
394193323Sed/* Operations on constants of any type */
395193323SedLLVMValueRef LLVMConstNull(LLVMTypeRef Ty); /* all zeroes */
396193323SedLLVMValueRef LLVMConstAllOnes(LLVMTypeRef Ty); /* only for int/vector */
397193323SedLLVMValueRef LLVMGetUndef(LLVMTypeRef Ty);
398193323Sedint LLVMIsConstant(LLVMValueRef Val);
399193323Sedint LLVMIsNull(LLVMValueRef Val);
400193323Sedint LLVMIsUndef(LLVMValueRef Val);
401193323Sed
402193323Sed/* Operations on scalar constants */
403193323SedLLVMValueRef LLVMConstInt(LLVMTypeRef IntTy, unsigned long long N,
404193323Sed                          int SignExtend);
405193323SedLLVMValueRef LLVMConstReal(LLVMTypeRef RealTy, double N);
406193323SedLLVMValueRef LLVMConstRealOfString(LLVMTypeRef RealTy, const char *Text);
407193323Sed
408193323Sed/* Operations on composite constants */
409193323SedLLVMValueRef LLVMConstString(const char *Str, unsigned Length,
410193323Sed                             int DontNullTerminate);
411193323SedLLVMValueRef LLVMConstArray(LLVMTypeRef ElementTy,
412193323Sed                            LLVMValueRef *ConstantVals, unsigned Length);
413193323SedLLVMValueRef LLVMConstStruct(LLVMValueRef *ConstantVals, unsigned Count,
414193323Sed                             int packed);
415193323SedLLVMValueRef LLVMConstVector(LLVMValueRef *ScalarConstantVals, unsigned Size);
416193323Sed
417193323Sed/* Constant expressions */
418193323SedLLVMValueRef LLVMSizeOf(LLVMTypeRef Ty);
419193323SedLLVMValueRef LLVMConstNeg(LLVMValueRef ConstantVal);
420193323SedLLVMValueRef LLVMConstNot(LLVMValueRef ConstantVal);
421193323SedLLVMValueRef LLVMConstAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
422193323SedLLVMValueRef LLVMConstSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
423193323SedLLVMValueRef LLVMConstMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
424193323SedLLVMValueRef LLVMConstUDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
425193323SedLLVMValueRef LLVMConstSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
426193323SedLLVMValueRef LLVMConstFDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
427193323SedLLVMValueRef LLVMConstURem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
428193323SedLLVMValueRef LLVMConstSRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
429193323SedLLVMValueRef LLVMConstFRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
430193323SedLLVMValueRef LLVMConstAnd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
431193323SedLLVMValueRef LLVMConstOr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
432193323SedLLVMValueRef LLVMConstXor(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
433193323SedLLVMValueRef LLVMConstICmp(LLVMIntPredicate Predicate,
434193323Sed                           LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
435193323SedLLVMValueRef LLVMConstFCmp(LLVMRealPredicate Predicate,
436193323Sed                           LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
437193323SedLLVMValueRef LLVMConstShl(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
438193323SedLLVMValueRef LLVMConstLShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
439193323SedLLVMValueRef LLVMConstAShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
440193323SedLLVMValueRef LLVMConstGEP(LLVMValueRef ConstantVal,
441193323Sed                          LLVMValueRef *ConstantIndices, unsigned NumIndices);
442193323SedLLVMValueRef LLVMConstTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
443193323SedLLVMValueRef LLVMConstSExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
444193323SedLLVMValueRef LLVMConstZExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
445193323SedLLVMValueRef LLVMConstFPTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
446193323SedLLVMValueRef LLVMConstFPExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
447193323SedLLVMValueRef LLVMConstUIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
448193323SedLLVMValueRef LLVMConstSIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
449193323SedLLVMValueRef LLVMConstFPToUI(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
450193323SedLLVMValueRef LLVMConstFPToSI(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
451193323SedLLVMValueRef LLVMConstPtrToInt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
452193323SedLLVMValueRef LLVMConstIntToPtr(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
453193323SedLLVMValueRef LLVMConstBitCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
454193323SedLLVMValueRef LLVMConstSelect(LLVMValueRef ConstantCondition,
455193323Sed                             LLVMValueRef ConstantIfTrue,
456193323Sed                             LLVMValueRef ConstantIfFalse);
457193323SedLLVMValueRef LLVMConstExtractElement(LLVMValueRef VectorConstant,
458193323Sed                                     LLVMValueRef IndexConstant);
459193323SedLLVMValueRef LLVMConstInsertElement(LLVMValueRef VectorConstant,
460193323Sed                                    LLVMValueRef ElementValueConstant,
461193323Sed                                    LLVMValueRef IndexConstant);
462193323SedLLVMValueRef LLVMConstShuffleVector(LLVMValueRef VectorAConstant,
463193323Sed                                    LLVMValueRef VectorBConstant,
464193323Sed                                    LLVMValueRef MaskConstant);
465193323SedLLVMValueRef LLVMConstExtractValue(LLVMValueRef AggConstant, unsigned *IdxList,
466193323Sed                                   unsigned NumIdx);
467193323SedLLVMValueRef LLVMConstInsertValue(LLVMValueRef AggConstant,
468193323Sed                                  LLVMValueRef ElementValueConstant,
469193323Sed                                  unsigned *IdxList, unsigned NumIdx);
470193323SedLLVMValueRef LLVMConstInlineAsm(LLVMTypeRef Ty,
471193323Sed                                const char *AsmString, const char *Constraints,
472193323Sed                                int HasSideEffects);
473193323Sed
474193323Sed/* Operations on global variables, functions, and aliases (globals) */
475193323SedLLVMModuleRef LLVMGetGlobalParent(LLVMValueRef Global);
476193323Sedint LLVMIsDeclaration(LLVMValueRef Global);
477193323SedLLVMLinkage LLVMGetLinkage(LLVMValueRef Global);
478193323Sedvoid LLVMSetLinkage(LLVMValueRef Global, LLVMLinkage Linkage);
479193323Sedconst char *LLVMGetSection(LLVMValueRef Global);
480193323Sedvoid LLVMSetSection(LLVMValueRef Global, const char *Section);
481193323SedLLVMVisibility LLVMGetVisibility(LLVMValueRef Global);
482193323Sedvoid LLVMSetVisibility(LLVMValueRef Global, LLVMVisibility Viz);
483193323Sedunsigned LLVMGetAlignment(LLVMValueRef Global);
484193323Sedvoid LLVMSetAlignment(LLVMValueRef Global, unsigned Bytes);
485193323Sed
486193323Sed/* Operations on global variables */
487193323SedLLVMValueRef LLVMAddGlobal(LLVMModuleRef M, LLVMTypeRef Ty, const char *Name);
488193323SedLLVMValueRef LLVMGetNamedGlobal(LLVMModuleRef M, const char *Name);
489193323SedLLVMValueRef LLVMGetFirstGlobal(LLVMModuleRef M);
490193323SedLLVMValueRef LLVMGetLastGlobal(LLVMModuleRef M);
491193323SedLLVMValueRef LLVMGetNextGlobal(LLVMValueRef GlobalVar);
492193323SedLLVMValueRef LLVMGetPreviousGlobal(LLVMValueRef GlobalVar);
493193323Sedvoid LLVMDeleteGlobal(LLVMValueRef GlobalVar);
494193323SedLLVMValueRef LLVMGetInitializer(LLVMValueRef GlobalVar);
495193323Sedvoid LLVMSetInitializer(LLVMValueRef GlobalVar, LLVMValueRef ConstantVal);
496193323Sedint LLVMIsThreadLocal(LLVMValueRef GlobalVar);
497193323Sedvoid LLVMSetThreadLocal(LLVMValueRef GlobalVar, int IsThreadLocal);
498193323Sedint LLVMIsGlobalConstant(LLVMValueRef GlobalVar);
499193323Sedvoid LLVMSetGlobalConstant(LLVMValueRef GlobalVar, int IsConstant);
500193323Sed
501193323Sed/* Operations on aliases */
502193323SedLLVMValueRef LLVMAddAlias(LLVMModuleRef M, LLVMTypeRef Ty, LLVMValueRef Aliasee,
503193323Sed                          const char *Name);
504193323Sed
505193323Sed/* Operations on functions */
506193323SedLLVMValueRef LLVMAddFunction(LLVMModuleRef M, const char *Name,
507193323Sed                             LLVMTypeRef FunctionTy);
508193323SedLLVMValueRef LLVMGetNamedFunction(LLVMModuleRef M, const char *Name);
509193323SedLLVMValueRef LLVMGetFirstFunction(LLVMModuleRef M);
510193323SedLLVMValueRef LLVMGetLastFunction(LLVMModuleRef M);
511193323SedLLVMValueRef LLVMGetNextFunction(LLVMValueRef Fn);
512193323SedLLVMValueRef LLVMGetPreviousFunction(LLVMValueRef Fn);
513193323Sedvoid LLVMDeleteFunction(LLVMValueRef Fn);
514193323Sedunsigned LLVMGetIntrinsicID(LLVMValueRef Fn);
515193323Sedunsigned LLVMGetFunctionCallConv(LLVMValueRef Fn);
516193323Sedvoid LLVMSetFunctionCallConv(LLVMValueRef Fn, unsigned CC);
517193323Sedconst char *LLVMGetGC(LLVMValueRef Fn);
518193323Sedvoid LLVMSetGC(LLVMValueRef Fn, const char *Name);
519193323Sedvoid LLVMAddFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA);
520193323Sedvoid LLVMRemoveFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA);
521193323Sed
522193323Sed/* Operations on parameters */
523193323Sedunsigned LLVMCountParams(LLVMValueRef Fn);
524193323Sedvoid LLVMGetParams(LLVMValueRef Fn, LLVMValueRef *Params);
525193323SedLLVMValueRef LLVMGetParam(LLVMValueRef Fn, unsigned Index);
526193323SedLLVMValueRef LLVMGetParamParent(LLVMValueRef Inst);
527193323SedLLVMValueRef LLVMGetFirstParam(LLVMValueRef Fn);
528193323SedLLVMValueRef LLVMGetLastParam(LLVMValueRef Fn);
529193323SedLLVMValueRef LLVMGetNextParam(LLVMValueRef Arg);
530193323SedLLVMValueRef LLVMGetPreviousParam(LLVMValueRef Arg);
531193323Sedvoid LLVMAddAttribute(LLVMValueRef Arg, LLVMAttribute PA);
532193323Sedvoid LLVMRemoveAttribute(LLVMValueRef Arg, LLVMAttribute PA);
533193323Sedvoid LLVMSetParamAlignment(LLVMValueRef Arg, unsigned align);
534193323Sed
535193323Sed/* Operations on basic blocks */
536193323SedLLVMValueRef LLVMBasicBlockAsValue(LLVMBasicBlockRef BB);
537193323Sedint LLVMValueIsBasicBlock(LLVMValueRef Val);
538193323SedLLVMBasicBlockRef LLVMValueAsBasicBlock(LLVMValueRef Val);
539193323SedLLVMValueRef LLVMGetBasicBlockParent(LLVMBasicBlockRef BB);
540193323Sedunsigned LLVMCountBasicBlocks(LLVMValueRef Fn);
541193323Sedvoid LLVMGetBasicBlocks(LLVMValueRef Fn, LLVMBasicBlockRef *BasicBlocks);
542193323SedLLVMBasicBlockRef LLVMGetFirstBasicBlock(LLVMValueRef Fn);
543193323SedLLVMBasicBlockRef LLVMGetLastBasicBlock(LLVMValueRef Fn);
544193323SedLLVMBasicBlockRef LLVMGetNextBasicBlock(LLVMBasicBlockRef BB);
545193323SedLLVMBasicBlockRef LLVMGetPreviousBasicBlock(LLVMBasicBlockRef BB);
546193323SedLLVMBasicBlockRef LLVMGetEntryBasicBlock(LLVMValueRef Fn);
547193323SedLLVMBasicBlockRef LLVMAppendBasicBlock(LLVMValueRef Fn, const char *Name);
548193323SedLLVMBasicBlockRef LLVMInsertBasicBlock(LLVMBasicBlockRef InsertBeforeBB,
549193323Sed                                       const char *Name);
550193323Sedvoid LLVMDeleteBasicBlock(LLVMBasicBlockRef BB);
551193323Sed
552193323Sed/* Operations on instructions */
553193323SedLLVMBasicBlockRef LLVMGetInstructionParent(LLVMValueRef Inst);
554193323SedLLVMValueRef LLVMGetFirstInstruction(LLVMBasicBlockRef BB);
555193323SedLLVMValueRef LLVMGetLastInstruction(LLVMBasicBlockRef BB);
556193323SedLLVMValueRef LLVMGetNextInstruction(LLVMValueRef Inst);
557193323SedLLVMValueRef LLVMGetPreviousInstruction(LLVMValueRef Inst);
558193323Sed
559193323Sed/* Operations on call sites */
560193323Sedvoid LLVMSetInstructionCallConv(LLVMValueRef Instr, unsigned CC);
561193323Sedunsigned LLVMGetInstructionCallConv(LLVMValueRef Instr);
562193323Sedvoid LLVMAddInstrAttribute(LLVMValueRef Instr, unsigned index, LLVMAttribute);
563193323Sedvoid LLVMRemoveInstrAttribute(LLVMValueRef Instr, unsigned index,
564193323Sed                              LLVMAttribute);
565193323Sedvoid LLVMSetInstrParamAlignment(LLVMValueRef Instr, unsigned index,
566193323Sed                                unsigned align);
567193323Sed
568193323Sed/* Operations on call instructions (only) */
569193323Sedint LLVMIsTailCall(LLVMValueRef CallInst);
570193323Sedvoid LLVMSetTailCall(LLVMValueRef CallInst, int IsTailCall);
571193323Sed
572193323Sed/* Operations on phi nodes */
573193323Sedvoid LLVMAddIncoming(LLVMValueRef PhiNode, LLVMValueRef *IncomingValues,
574193323Sed                     LLVMBasicBlockRef *IncomingBlocks, unsigned Count);
575193323Sedunsigned LLVMCountIncoming(LLVMValueRef PhiNode);
576193323SedLLVMValueRef LLVMGetIncomingValue(LLVMValueRef PhiNode, unsigned Index);
577193323SedLLVMBasicBlockRef LLVMGetIncomingBlock(LLVMValueRef PhiNode, unsigned Index);
578193323Sed
579193323Sed/*===-- Instruction builders ----------------------------------------------===*/
580193323Sed
581193323Sed/* An instruction builder represents a point within a basic block, and is the
582193323Sed * exclusive means of building instructions using the C interface.
583193323Sed */
584193323Sed
585193323SedLLVMBuilderRef LLVMCreateBuilder(void);
586193323Sedvoid LLVMPositionBuilder(LLVMBuilderRef Builder, LLVMBasicBlockRef Block,
587193323Sed                         LLVMValueRef Instr);
588193323Sedvoid LLVMPositionBuilderBefore(LLVMBuilderRef Builder, LLVMValueRef Instr);
589193323Sedvoid LLVMPositionBuilderAtEnd(LLVMBuilderRef Builder, LLVMBasicBlockRef Block);
590193323SedLLVMBasicBlockRef LLVMGetInsertBlock(LLVMBuilderRef Builder);
591193323Sedvoid LLVMClearInsertionPosition(LLVMBuilderRef Builder);
592193323Sedvoid LLVMInsertIntoBuilder(LLVMBuilderRef Builder, LLVMValueRef Instr);
593193323Sedvoid LLVMDisposeBuilder(LLVMBuilderRef Builder);
594193323Sed
595193323Sed/* Terminators */
596193323SedLLVMValueRef LLVMBuildRetVoid(LLVMBuilderRef);
597193323SedLLVMValueRef LLVMBuildRet(LLVMBuilderRef, LLVMValueRef V);
598193323SedLLVMValueRef LLVMBuildBr(LLVMBuilderRef, LLVMBasicBlockRef Dest);
599193323SedLLVMValueRef LLVMBuildCondBr(LLVMBuilderRef, LLVMValueRef If,
600193323Sed                             LLVMBasicBlockRef Then, LLVMBasicBlockRef Else);
601193323SedLLVMValueRef LLVMBuildSwitch(LLVMBuilderRef, LLVMValueRef V,
602193323Sed                             LLVMBasicBlockRef Else, unsigned NumCases);
603193323SedLLVMValueRef LLVMBuildInvoke(LLVMBuilderRef, LLVMValueRef Fn,
604193323Sed                             LLVMValueRef *Args, unsigned NumArgs,
605193323Sed                             LLVMBasicBlockRef Then, LLVMBasicBlockRef Catch,
606193323Sed                             const char *Name);
607193323SedLLVMValueRef LLVMBuildUnwind(LLVMBuilderRef);
608193323SedLLVMValueRef LLVMBuildUnreachable(LLVMBuilderRef);
609193323Sed
610193323Sed/* Add a case to the switch instruction */
611193323Sedvoid LLVMAddCase(LLVMValueRef Switch, LLVMValueRef OnVal,
612193323Sed                 LLVMBasicBlockRef Dest);
613193323Sed
614193323Sed/* Arithmetic */
615193323SedLLVMValueRef LLVMBuildAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
616193323Sed                          const char *Name);
617193323SedLLVMValueRef LLVMBuildSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
618193323Sed                          const char *Name);
619193323SedLLVMValueRef LLVMBuildMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
620193323Sed                          const char *Name);
621193323SedLLVMValueRef LLVMBuildUDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
622193323Sed                           const char *Name);
623193323SedLLVMValueRef LLVMBuildSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
624193323Sed                           const char *Name);
625193323SedLLVMValueRef LLVMBuildFDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
626193323Sed                           const char *Name);
627193323SedLLVMValueRef LLVMBuildURem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
628193323Sed                           const char *Name);
629193323SedLLVMValueRef LLVMBuildSRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
630193323Sed                           const char *Name);
631193323SedLLVMValueRef LLVMBuildFRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
632193323Sed                           const char *Name);
633193323SedLLVMValueRef LLVMBuildShl(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
634193323Sed                           const char *Name);
635193323SedLLVMValueRef LLVMBuildLShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
636193323Sed                           const char *Name);
637193323SedLLVMValueRef LLVMBuildAShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
638193323Sed                           const char *Name);
639193323SedLLVMValueRef LLVMBuildAnd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
640193323Sed                          const char *Name);
641193323SedLLVMValueRef LLVMBuildOr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
642193323Sed                          const char *Name);
643193323SedLLVMValueRef LLVMBuildXor(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
644193323Sed                          const char *Name);
645193323SedLLVMValueRef LLVMBuildNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name);
646193323SedLLVMValueRef LLVMBuildNot(LLVMBuilderRef, LLVMValueRef V, const char *Name);
647193323Sed
648193323Sed/* Memory */
649193323SedLLVMValueRef LLVMBuildMalloc(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
650193323SedLLVMValueRef LLVMBuildArrayMalloc(LLVMBuilderRef, LLVMTypeRef Ty,
651193323Sed                                  LLVMValueRef Val, const char *Name);
652193323SedLLVMValueRef LLVMBuildAlloca(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
653193323SedLLVMValueRef LLVMBuildArrayAlloca(LLVMBuilderRef, LLVMTypeRef Ty,
654193323Sed                                  LLVMValueRef Val, const char *Name);
655193323SedLLVMValueRef LLVMBuildFree(LLVMBuilderRef, LLVMValueRef PointerVal);
656193323SedLLVMValueRef LLVMBuildLoad(LLVMBuilderRef, LLVMValueRef PointerVal,
657193323Sed                           const char *Name);
658193323SedLLVMValueRef LLVMBuildStore(LLVMBuilderRef, LLVMValueRef Val, LLVMValueRef Ptr);
659193323SedLLVMValueRef LLVMBuildGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
660193323Sed                          LLVMValueRef *Indices, unsigned NumIndices,
661193323Sed                          const char *Name);
662193323Sed
663193323Sed/* Casts */
664193323SedLLVMValueRef LLVMBuildTrunc(LLVMBuilderRef, LLVMValueRef Val,
665193323Sed                            LLVMTypeRef DestTy, const char *Name);
666193323SedLLVMValueRef LLVMBuildZExt(LLVMBuilderRef, LLVMValueRef Val,
667193323Sed                           LLVMTypeRef DestTy, const char *Name);
668193323SedLLVMValueRef LLVMBuildSExt(LLVMBuilderRef, LLVMValueRef Val,
669193323Sed                           LLVMTypeRef DestTy, const char *Name);
670193323SedLLVMValueRef LLVMBuildFPToUI(LLVMBuilderRef, LLVMValueRef Val,
671193323Sed                             LLVMTypeRef DestTy, const char *Name);
672193323SedLLVMValueRef LLVMBuildFPToSI(LLVMBuilderRef, LLVMValueRef Val,
673193323Sed                             LLVMTypeRef DestTy, const char *Name);
674193323SedLLVMValueRef LLVMBuildUIToFP(LLVMBuilderRef, LLVMValueRef Val,
675193323Sed                             LLVMTypeRef DestTy, const char *Name);
676193323SedLLVMValueRef LLVMBuildSIToFP(LLVMBuilderRef, LLVMValueRef Val,
677193323Sed                             LLVMTypeRef DestTy, const char *Name);
678193323SedLLVMValueRef LLVMBuildFPTrunc(LLVMBuilderRef, LLVMValueRef Val,
679193323Sed                              LLVMTypeRef DestTy, const char *Name);
680193323SedLLVMValueRef LLVMBuildFPExt(LLVMBuilderRef, LLVMValueRef Val,
681193323Sed                            LLVMTypeRef DestTy, const char *Name);
682193323SedLLVMValueRef LLVMBuildPtrToInt(LLVMBuilderRef, LLVMValueRef Val,
683193323Sed                               LLVMTypeRef DestTy, const char *Name);
684193323SedLLVMValueRef LLVMBuildIntToPtr(LLVMBuilderRef, LLVMValueRef Val,
685193323Sed                               LLVMTypeRef DestTy, const char *Name);
686193323SedLLVMValueRef LLVMBuildBitCast(LLVMBuilderRef, LLVMValueRef Val,
687193323Sed                              LLVMTypeRef DestTy, const char *Name);
688193323Sed
689193323Sed/* Comparisons */
690193323SedLLVMValueRef LLVMBuildICmp(LLVMBuilderRef, LLVMIntPredicate Op,
691193323Sed                           LLVMValueRef LHS, LLVMValueRef RHS,
692193323Sed                           const char *Name);
693193323SedLLVMValueRef LLVMBuildFCmp(LLVMBuilderRef, LLVMRealPredicate Op,
694193323Sed                           LLVMValueRef LHS, LLVMValueRef RHS,
695193323Sed                           const char *Name);
696193323Sed
697193323Sed/* Miscellaneous instructions */
698193323SedLLVMValueRef LLVMBuildPhi(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
699193323SedLLVMValueRef LLVMBuildCall(LLVMBuilderRef, LLVMValueRef Fn,
700193323Sed                           LLVMValueRef *Args, unsigned NumArgs,
701193323Sed                           const char *Name);
702193323SedLLVMValueRef LLVMBuildSelect(LLVMBuilderRef, LLVMValueRef If,
703193323Sed                             LLVMValueRef Then, LLVMValueRef Else,
704193323Sed                             const char *Name);
705193323SedLLVMValueRef LLVMBuildVAArg(LLVMBuilderRef, LLVMValueRef List, LLVMTypeRef Ty,
706193323Sed                            const char *Name);
707193323SedLLVMValueRef LLVMBuildExtractElement(LLVMBuilderRef, LLVMValueRef VecVal,
708193323Sed                                     LLVMValueRef Index, const char *Name);
709193323SedLLVMValueRef LLVMBuildInsertElement(LLVMBuilderRef, LLVMValueRef VecVal,
710193323Sed                                    LLVMValueRef EltVal, LLVMValueRef Index,
711193323Sed                                    const char *Name);
712193323SedLLVMValueRef LLVMBuildShuffleVector(LLVMBuilderRef, LLVMValueRef V1,
713193323Sed                                    LLVMValueRef V2, LLVMValueRef Mask,
714193323Sed                                    const char *Name);
715193323SedLLVMValueRef LLVMBuildExtractValue(LLVMBuilderRef, LLVMValueRef AggVal,
716193323Sed                                   unsigned Index, const char *Name);
717193323SedLLVMValueRef LLVMBuildInsertValue(LLVMBuilderRef, LLVMValueRef AggVal,
718193323Sed                                  LLVMValueRef EltVal, unsigned Index,
719193323Sed                                  const char *Name);
720193323Sed
721193323Sed
722193323Sed/*===-- Module providers --------------------------------------------------===*/
723193323Sed
724193323Sed/* Encapsulates the module M in a module provider, taking ownership of the
725193323Sed * module.
726193323Sed * See the constructor llvm::ExistingModuleProvider::ExistingModuleProvider.
727193323Sed */
728193323SedLLVMModuleProviderRef
729193323SedLLVMCreateModuleProviderForExistingModule(LLVMModuleRef M);
730193323Sed
731193323Sed/* Destroys the module provider MP as well as the contained module.
732193323Sed * See the destructor llvm::ModuleProvider::~ModuleProvider.
733193323Sed */
734193323Sedvoid LLVMDisposeModuleProvider(LLVMModuleProviderRef MP);
735193323Sed
736193323Sed
737193323Sed/*===-- Memory buffers ----------------------------------------------------===*/
738193323Sed
739193323Sedint LLVMCreateMemoryBufferWithContentsOfFile(const char *Path,
740193323Sed                                             LLVMMemoryBufferRef *OutMemBuf,
741193323Sed                                             char **OutMessage);
742193323Sedint LLVMCreateMemoryBufferWithSTDIN(LLVMMemoryBufferRef *OutMemBuf,
743193323Sed                                    char **OutMessage);
744193323Sedvoid LLVMDisposeMemoryBuffer(LLVMMemoryBufferRef MemBuf);
745193323Sed
746193323Sed
747193323Sed/*===-- Pass Managers -----------------------------------------------------===*/
748193323Sed
749193323Sed/** Constructs a new whole-module pass pipeline. This type of pipeline is
750193323Sed    suitable for link-time optimization and whole-module transformations.
751193323Sed    See llvm::PassManager::PassManager. */
752193323SedLLVMPassManagerRef LLVMCreatePassManager(void);
753193323Sed
754193323Sed/** Constructs a new function-by-function pass pipeline over the module
755193323Sed    provider. It does not take ownership of the module provider. This type of
756193323Sed    pipeline is suitable for code generation and JIT compilation tasks.
757193323Sed    See llvm::FunctionPassManager::FunctionPassManager. */
758193323SedLLVMPassManagerRef LLVMCreateFunctionPassManager(LLVMModuleProviderRef MP);
759193323Sed
760193323Sed/** Initializes, executes on the provided module, and finalizes all of the
761193323Sed    passes scheduled in the pass manager. Returns 1 if any of the passes
762193323Sed    modified the module, 0 otherwise. See llvm::PassManager::run(Module&). */
763193323Sedint LLVMRunPassManager(LLVMPassManagerRef PM, LLVMModuleRef M);
764193323Sed
765193323Sed/** Initializes all of the function passes scheduled in the function pass
766193323Sed    manager. Returns 1 if any of the passes modified the module, 0 otherwise.
767193323Sed    See llvm::FunctionPassManager::doInitialization. */
768193323Sedint LLVMInitializeFunctionPassManager(LLVMPassManagerRef FPM);
769193323Sed
770193323Sed/** Executes all of the function passes scheduled in the function pass manager
771193323Sed    on the provided function. Returns 1 if any of the passes modified the
772193323Sed    function, false otherwise.
773193323Sed    See llvm::FunctionPassManager::run(Function&). */
774193323Sedint LLVMRunFunctionPassManager(LLVMPassManagerRef FPM, LLVMValueRef F);
775193323Sed
776193323Sed/** Finalizes all of the function passes scheduled in in the function pass
777193323Sed    manager. Returns 1 if any of the passes modified the module, 0 otherwise.
778193323Sed    See llvm::FunctionPassManager::doFinalization. */
779193323Sedint LLVMFinalizeFunctionPassManager(LLVMPassManagerRef FPM);
780193323Sed
781193323Sed/** Frees the memory of a pass pipeline. For function pipelines, does not free
782193323Sed    the module provider.
783193323Sed    See llvm::PassManagerBase::~PassManagerBase. */
784193323Sedvoid LLVMDisposePassManager(LLVMPassManagerRef PM);
785193323Sed
786193323Sed
787193323Sed#ifdef __cplusplus
788193323Sed}
789193323Sed
790193323Sednamespace llvm {
791193323Sed  class ModuleProvider;
792193323Sed  class MemoryBuffer;
793193323Sed  class PassManagerBase;
794193323Sed
795193323Sed  #define DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref)   \
796193323Sed    inline ty *unwrap(ref P) {                          \
797193323Sed      return reinterpret_cast<ty*>(P);                  \
798193323Sed    }                                                   \
799193323Sed                                                        \
800193323Sed    inline ref wrap(const ty *P) {                      \
801193323Sed      return reinterpret_cast<ref>(const_cast<ty*>(P)); \
802193323Sed    }
803193323Sed
804193323Sed  #define DEFINE_ISA_CONVERSION_FUNCTIONS(ty, ref)  \
805193323Sed    DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref)         \
806193323Sed                                                        \
807193323Sed    template<typename T>                                \
808193323Sed    inline T *unwrap(ref P) {                           \
809193323Sed      return cast<T>(unwrap(P));                        \
810193323Sed    }
811193323Sed
812193323Sed  #define DEFINE_STDCXX_CONVERSION_FUNCTIONS(ty, ref)   \
813193323Sed    DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref)         \
814193323Sed                                                        \
815193323Sed    template<typename T>                                \
816193323Sed    inline T *unwrap(ref P) {                           \
817193323Sed      T *Q = dynamic_cast<T*>(unwrap(P));               \
818193323Sed      assert(Q && "Invalid cast!");                     \
819193323Sed      return Q;                                         \
820193323Sed    }
821193323Sed
822193323Sed  DEFINE_ISA_CONVERSION_FUNCTIONS   (Type,               LLVMTypeRef          )
823193323Sed  DEFINE_ISA_CONVERSION_FUNCTIONS   (Value,              LLVMValueRef         )
824193323Sed  DEFINE_SIMPLE_CONVERSION_FUNCTIONS(Module,             LLVMModuleRef        )
825193323Sed  DEFINE_SIMPLE_CONVERSION_FUNCTIONS(BasicBlock,         LLVMBasicBlockRef    )
826193323Sed  DEFINE_SIMPLE_CONVERSION_FUNCTIONS(IRBuilder<>,        LLVMBuilderRef       )
827193323Sed  DEFINE_SIMPLE_CONVERSION_FUNCTIONS(PATypeHolder,       LLVMTypeHandleRef    )
828193323Sed  DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ModuleProvider,     LLVMModuleProviderRef)
829193323Sed  DEFINE_SIMPLE_CONVERSION_FUNCTIONS(MemoryBuffer,       LLVMMemoryBufferRef  )
830195340Sed  DEFINE_SIMPLE_CONVERSION_FUNCTIONS(LLVMContext,        LLVMContextRef       )
831193323Sed  DEFINE_STDCXX_CONVERSION_FUNCTIONS(PassManagerBase,    LLVMPassManagerRef   )
832193323Sed
833193323Sed  #undef DEFINE_STDCXX_CONVERSION_FUNCTIONS
834193323Sed  #undef DEFINE_ISA_CONVERSION_FUNCTIONS
835193323Sed  #undef DEFINE_SIMPLE_CONVERSION_FUNCTIONS
836193323Sed
837193323Sed  /* Specialized opaque type conversions.
838193323Sed   */
839193323Sed  inline Type **unwrap(LLVMTypeRef* Tys) {
840193323Sed    return reinterpret_cast<Type**>(Tys);
841193323Sed  }
842193323Sed
843193323Sed  inline LLVMTypeRef *wrap(const Type **Tys) {
844193323Sed    return reinterpret_cast<LLVMTypeRef*>(const_cast<Type**>(Tys));
845193323Sed  }
846193323Sed
847193323Sed  /* Specialized opaque value conversions.
848193323Sed   */
849193323Sed  inline Value **unwrap(LLVMValueRef *Vals) {
850193323Sed    return reinterpret_cast<Value**>(Vals);
851193323Sed  }
852193323Sed
853193323Sed  template<typename T>
854193323Sed  inline T **unwrap(LLVMValueRef *Vals, unsigned Length) {
855193323Sed    #if DEBUG
856193323Sed    for (LLVMValueRef *I = Vals, E = Vals + Length; I != E; ++I)
857193323Sed      cast<T>(*I);
858193323Sed    #endif
859193323Sed    return reinterpret_cast<T**>(Vals);
860193323Sed  }
861193323Sed
862193323Sed  inline LLVMValueRef *wrap(const Value **Vals) {
863193323Sed    return reinterpret_cast<LLVMValueRef*>(const_cast<Value**>(Vals));
864193323Sed  }
865193323Sed}
866193323Sed
867193323Sed#endif /* !defined(__cplusplus) */
868193323Sed
869193323Sed#endif /* !defined(LLVM_C_CORE_H) */
870