1 /*===-- llvm-c/Core.h - Core Library C Interface ------------------*- C -*-===*\
3 |* The LLVM Compiler Infrastructure *|
5 |* This file is distributed under the University of Illinois Open Source *|
6 |* License. See LICENSE.TXT for details. *|
8 |*===----------------------------------------------------------------------===*|
10 |* This header declares the C interface to libLLVMCore.a, which implements *|
11 |* the LLVM intermediate representation. *|
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). *|
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. *|
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. *|
31 \*===----------------------------------------------------------------------===*/
36 #include "llvm/System/DataTypes.h"
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"
54 * The top-level container for all LLVM global data. See the LLVMContext class.
56 typedef struct LLVMOpaqueContext *LLVMContextRef;
59 * The top-level container for all other LLVM Intermediate Representation (IR)
60 * objects. See the llvm::Module class.
62 typedef struct LLVMOpaqueModule *LLVMModuleRef;
65 * Each value in the LLVM IR has a type, an LLVMTypeRef. See the llvm::Type
68 typedef struct LLVMOpaqueType *LLVMTypeRef;
71 * When building recursive types using LLVMRefineType, LLVMTypeRef values may
72 * become invalid; use LLVMTypeHandleRef to resolve this problem. See the
73 * llvm::AbstractTypeHolder class.
75 typedef struct LLVMOpaqueTypeHandle *LLVMTypeHandleRef;
77 typedef struct LLVMOpaqueValue *LLVMValueRef;
78 typedef struct LLVMOpaqueBasicBlock *LLVMBasicBlockRef;
79 typedef struct LLVMOpaqueBuilder *LLVMBuilderRef;
81 /* Interface used to provide a module to JIT or interpreter. This is now just a
82 * synonym for llvm::Module, but we have to keep using the different type to
83 * keep binary compatibility.
85 typedef struct LLVMOpaqueModuleProvider *LLVMModuleProviderRef;
87 /* Used to provide a module to JIT or interpreter.
88 * See the llvm::MemoryBuffer class.
90 typedef struct LLVMOpaqueMemoryBuffer *LLVMMemoryBufferRef;
92 /** See the llvm::PassManagerBase class. */
93 typedef struct LLVMOpaquePassManager *LLVMPassManagerRef;
96 * Used to iterate through the uses of a Value, allowing access to all Values
97 * that use this Value. See the llvm::Use and llvm::value_use_iterator classes.
99 typedef struct LLVMOpaqueUseIterator *LLVMUseIteratorRef;
102 LLVMZExtAttribute = 1<<0,
103 LLVMSExtAttribute = 1<<1,
104 LLVMNoReturnAttribute = 1<<2,
105 LLVMInRegAttribute = 1<<3,
106 LLVMStructRetAttribute = 1<<4,
107 LLVMNoUnwindAttribute = 1<<5,
108 LLVMNoAliasAttribute = 1<<6,
109 LLVMByValAttribute = 1<<7,
110 LLVMNestAttribute = 1<<8,
111 LLVMReadNoneAttribute = 1<<9,
112 LLVMReadOnlyAttribute = 1<<10,
113 LLVMNoInlineAttribute = 1<<11,
114 LLVMAlwaysInlineAttribute = 1<<12,
115 LLVMOptimizeForSizeAttribute = 1<<13,
116 LLVMStackProtectAttribute = 1<<14,
117 LLVMStackProtectReqAttribute = 1<<15,
118 LLVMNoCaptureAttribute = 1<<21,
119 LLVMNoRedZoneAttribute = 1<<22,
120 LLVMNoImplicitFloatAttribute = 1<<23,
121 LLVMNakedAttribute = 1<<24,
122 LLVMInlineHintAttribute = 1<<25
155 LLVMGetElementPtr = 30,
174 LLVMExtractElement = 51,
175 LLVMInsertElement = 52,
176 LLVMShuffleVector = 53,
177 LLVMExtractValue = 54,
182 LLVMVoidTypeKind, /**< type with no size */
183 LLVMFloatTypeKind, /**< 32 bit floating point type */
184 LLVMDoubleTypeKind, /**< 64 bit floating point type */
185 LLVMX86_FP80TypeKind, /**< 80 bit floating point type (X87) */
186 LLVMFP128TypeKind, /**< 128 bit floating point type (112-bit mantissa)*/
187 LLVMPPC_FP128TypeKind, /**< 128 bit floating point type (two 64-bits) */
188 LLVMLabelTypeKind, /**< Labels */
189 LLVMIntegerTypeKind, /**< Arbitrary bit width integers */
190 LLVMFunctionTypeKind, /**< Functions */
191 LLVMStructTypeKind, /**< Structures */
192 LLVMArrayTypeKind, /**< Arrays */
193 LLVMPointerTypeKind, /**< Pointers */
194 LLVMOpaqueTypeKind, /**< Opaque: type with unknown structure */
195 LLVMVectorTypeKind, /**< SIMD 'packed' format, or other vector type */
196 LLVMMetadataTypeKind /**< Metadata */
200 LLVMExternalLinkage, /**< Externally visible function */
201 LLVMAvailableExternallyLinkage,
202 LLVMLinkOnceAnyLinkage, /**< Keep one copy of function when linking (inline)*/
203 LLVMLinkOnceODRLinkage, /**< Same, but only replaced by something
205 LLVMWeakAnyLinkage, /**< Keep one copy of function when linking (weak) */
206 LLVMWeakODRLinkage, /**< Same, but only replaced by something
208 LLVMAppendingLinkage, /**< Special purpose, only applies to global arrays */
209 LLVMInternalLinkage, /**< Rename collisions when linking (static
211 LLVMPrivateLinkage, /**< Like Internal, but omit from symbol table */
212 LLVMDLLImportLinkage, /**< Function to be imported from DLL */
213 LLVMDLLExportLinkage, /**< Function to be accessible from DLL */
214 LLVMExternalWeakLinkage,/**< ExternalWeak linkage description */
215 LLVMGhostLinkage, /**< Obsolete */
216 LLVMCommonLinkage, /**< Tentative definitions */
217 LLVMLinkerPrivateLinkage /**< Like Private, but linker removes. */
221 LLVMDefaultVisibility, /**< The GV is visible */
222 LLVMHiddenVisibility, /**< The GV is hidden */
223 LLVMProtectedVisibility /**< The GV is protected */
228 LLVMFastCallConv = 8,
229 LLVMColdCallConv = 9,
230 LLVMX86StdcallCallConv = 64,
231 LLVMX86FastcallCallConv = 65
235 LLVMIntEQ = 32, /**< equal */
236 LLVMIntNE, /**< not equal */
237 LLVMIntUGT, /**< unsigned greater than */
238 LLVMIntUGE, /**< unsigned greater or equal */
239 LLVMIntULT, /**< unsigned less than */
240 LLVMIntULE, /**< unsigned less or equal */
241 LLVMIntSGT, /**< signed greater than */
242 LLVMIntSGE, /**< signed greater or equal */
243 LLVMIntSLT, /**< signed less than */
244 LLVMIntSLE /**< signed less or equal */
248 LLVMRealPredicateFalse, /**< Always false (always folded) */
249 LLVMRealOEQ, /**< True if ordered and equal */
250 LLVMRealOGT, /**< True if ordered and greater than */
251 LLVMRealOGE, /**< True if ordered and greater than or equal */
252 LLVMRealOLT, /**< True if ordered and less than */
253 LLVMRealOLE, /**< True if ordered and less than or equal */
254 LLVMRealONE, /**< True if ordered and operands are unequal */
255 LLVMRealORD, /**< True if ordered (no nans) */
256 LLVMRealUNO, /**< True if unordered: isnan(X) | isnan(Y) */
257 LLVMRealUEQ, /**< True if unordered or equal */
258 LLVMRealUGT, /**< True if unordered or greater than */
259 LLVMRealUGE, /**< True if unordered, greater than, or equal */
260 LLVMRealULT, /**< True if unordered or less than */
261 LLVMRealULE, /**< True if unordered, less than, or equal */
262 LLVMRealUNE, /**< True if unordered or not equal */
263 LLVMRealPredicateTrue /**< Always true (always folded) */
267 /*===-- Error handling ----------------------------------------------------===*/
269 void LLVMDisposeMessage(char *Message);
272 /*===-- Modules -----------------------------------------------------------===*/
274 /* Create and destroy contexts. */
275 LLVMContextRef LLVMContextCreate(void);
276 LLVMContextRef LLVMGetGlobalContext(void);
277 void LLVMContextDispose(LLVMContextRef C);
279 /* Create and destroy modules. */
280 /** See llvm::Module::Module. */
281 LLVMModuleRef LLVMModuleCreateWithName(const char *ModuleID);
282 LLVMModuleRef LLVMModuleCreateWithNameInContext(const char *ModuleID,
285 /** See llvm::Module::~Module. */
286 void LLVMDisposeModule(LLVMModuleRef M);
288 /** Data layout. See Module::getDataLayout. */
289 const char *LLVMGetDataLayout(LLVMModuleRef M);
290 void LLVMSetDataLayout(LLVMModuleRef M, const char *Triple);
292 /** Target triple. See Module::getTargetTriple. */
293 const char *LLVMGetTarget(LLVMModuleRef M);
294 void LLVMSetTarget(LLVMModuleRef M, const char *Triple);
296 /** See Module::addTypeName. */
297 LLVMBool LLVMAddTypeName(LLVMModuleRef M, const char *Name, LLVMTypeRef Ty);
298 void LLVMDeleteTypeName(LLVMModuleRef M, const char *Name);
299 LLVMTypeRef LLVMGetTypeByName(LLVMModuleRef M, const char *Name);
301 /** See Module::dump. */
302 void LLVMDumpModule(LLVMModuleRef M);
305 /*===-- Types -------------------------------------------------------------===*/
307 /* LLVM types conform to the following hierarchy:
322 /** See llvm::LLVMTypeKind::getTypeID. */
323 LLVMTypeKind LLVMGetTypeKind(LLVMTypeRef Ty);
325 /** See llvm::LLVMType::getContext. */
326 LLVMContextRef LLVMGetTypeContext(LLVMTypeRef Ty);
328 /* Operations on integer types */
329 LLVMTypeRef LLVMInt1TypeInContext(LLVMContextRef C);
330 LLVMTypeRef LLVMInt8TypeInContext(LLVMContextRef C);
331 LLVMTypeRef LLVMInt16TypeInContext(LLVMContextRef C);
332 LLVMTypeRef LLVMInt32TypeInContext(LLVMContextRef C);
333 LLVMTypeRef LLVMInt64TypeInContext(LLVMContextRef C);
334 LLVMTypeRef LLVMIntTypeInContext(LLVMContextRef C, unsigned NumBits);
336 LLVMTypeRef LLVMInt1Type(void);
337 LLVMTypeRef LLVMInt8Type(void);
338 LLVMTypeRef LLVMInt16Type(void);
339 LLVMTypeRef LLVMInt32Type(void);
340 LLVMTypeRef LLVMInt64Type(void);
341 LLVMTypeRef LLVMIntType(unsigned NumBits);
342 unsigned LLVMGetIntTypeWidth(LLVMTypeRef IntegerTy);
344 /* Operations on real types */
345 LLVMTypeRef LLVMFloatTypeInContext(LLVMContextRef C);
346 LLVMTypeRef LLVMDoubleTypeInContext(LLVMContextRef C);
347 LLVMTypeRef LLVMX86FP80TypeInContext(LLVMContextRef C);
348 LLVMTypeRef LLVMFP128TypeInContext(LLVMContextRef C);
349 LLVMTypeRef LLVMPPCFP128TypeInContext(LLVMContextRef C);
351 LLVMTypeRef LLVMFloatType(void);
352 LLVMTypeRef LLVMDoubleType(void);
353 LLVMTypeRef LLVMX86FP80Type(void);
354 LLVMTypeRef LLVMFP128Type(void);
355 LLVMTypeRef LLVMPPCFP128Type(void);
357 /* Operations on function types */
358 LLVMTypeRef LLVMFunctionType(LLVMTypeRef ReturnType,
359 LLVMTypeRef *ParamTypes, unsigned ParamCount,
361 LLVMBool LLVMIsFunctionVarArg(LLVMTypeRef FunctionTy);
362 LLVMTypeRef LLVMGetReturnType(LLVMTypeRef FunctionTy);
363 unsigned LLVMCountParamTypes(LLVMTypeRef FunctionTy);
364 void LLVMGetParamTypes(LLVMTypeRef FunctionTy, LLVMTypeRef *Dest);
366 /* Operations on struct types */
367 LLVMTypeRef LLVMStructTypeInContext(LLVMContextRef C, LLVMTypeRef *ElementTypes,
368 unsigned ElementCount, LLVMBool Packed);
369 LLVMTypeRef LLVMStructType(LLVMTypeRef *ElementTypes, unsigned ElementCount,
371 unsigned LLVMCountStructElementTypes(LLVMTypeRef StructTy);
372 void LLVMGetStructElementTypes(LLVMTypeRef StructTy, LLVMTypeRef *Dest);
373 LLVMBool LLVMIsPackedStruct(LLVMTypeRef StructTy);
375 /* Operations on array, pointer, and vector types (sequence types) */
376 LLVMTypeRef LLVMArrayType(LLVMTypeRef ElementType, unsigned ElementCount);
377 LLVMTypeRef LLVMPointerType(LLVMTypeRef ElementType, unsigned AddressSpace);
378 LLVMTypeRef LLVMVectorType(LLVMTypeRef ElementType, unsigned ElementCount);
380 LLVMTypeRef LLVMGetElementType(LLVMTypeRef Ty);
381 unsigned LLVMGetArrayLength(LLVMTypeRef ArrayTy);
382 unsigned LLVMGetPointerAddressSpace(LLVMTypeRef PointerTy);
383 unsigned LLVMGetVectorSize(LLVMTypeRef VectorTy);
385 /* Operations on other types */
386 LLVMTypeRef LLVMVoidTypeInContext(LLVMContextRef C);
387 LLVMTypeRef LLVMLabelTypeInContext(LLVMContextRef C);
388 LLVMTypeRef LLVMOpaqueTypeInContext(LLVMContextRef C);
390 LLVMTypeRef LLVMVoidType(void);
391 LLVMTypeRef LLVMLabelType(void);
392 LLVMTypeRef LLVMOpaqueType(void);
394 /* Operations on type handles */
395 LLVMTypeHandleRef LLVMCreateTypeHandle(LLVMTypeRef PotentiallyAbstractTy);
396 void LLVMRefineType(LLVMTypeRef AbstractTy, LLVMTypeRef ConcreteTy);
397 LLVMTypeRef LLVMResolveTypeHandle(LLVMTypeHandleRef TypeHandle);
398 void LLVMDisposeTypeHandle(LLVMTypeHandleRef TypeHandle);
401 /*===-- Values ------------------------------------------------------------===*/
403 /* The bulk of LLVM's object model consists of values, which comprise a very
404 * rich type hierarchy.
407 #define LLVM_FOR_EACH_VALUE_SUBCLASS(macro) \
413 macro(ConstantAggregateZero) \
414 macro(ConstantArray) \
415 macro(ConstantExpr) \
418 macro(ConstantPointerNull) \
419 macro(ConstantStruct) \
420 macro(ConstantVector) \
424 macro(GlobalVariable) \
427 macro(BinaryOperator) \
429 macro(IntrinsicInst) \
430 macro(DbgInfoIntrinsic) \
431 macro(DbgDeclareInst) \
432 macro(EHSelectorInst) \
433 macro(MemIntrinsic) \
440 macro(ExtractElementInst) \
441 macro(GetElementPtrInst) \
442 macro(InsertElementInst) \
443 macro(InsertValueInst) \
446 macro(ShuffleVectorInst) \
448 macro(TerminatorInst) \
453 macro(UnreachableInst) \
455 macro(UnaryInstruction) \
463 macro(IntToPtrInst) \
464 macro(PtrToIntInst) \
470 macro(ExtractValueInst) \
474 /* Operations on all values */
475 LLVMTypeRef LLVMTypeOf(LLVMValueRef Val);
476 const char *LLVMGetValueName(LLVMValueRef Val);
477 void LLVMSetValueName(LLVMValueRef Val, const char *Name);
478 void LLVMDumpValue(LLVMValueRef Val);
479 void LLVMReplaceAllUsesWith(LLVMValueRef OldVal, LLVMValueRef NewVal);
481 /* Conversion functions. Return the input value if it is an instance of the
482 specified class, otherwise NULL. See llvm::dyn_cast_or_null<>. */
483 #define LLVM_DECLARE_VALUE_CAST(name) \
484 LLVMValueRef LLVMIsA##name(LLVMValueRef Val);
485 LLVM_FOR_EACH_VALUE_SUBCLASS(LLVM_DECLARE_VALUE_CAST)
487 /* Operations on Uses */
488 LLVMUseIteratorRef LLVMGetFirstUse(LLVMValueRef Val);
489 LLVMUseIteratorRef LLVMGetNextUse(LLVMUseIteratorRef U);
490 LLVMValueRef LLVMGetUser(LLVMUseIteratorRef U);
491 LLVMValueRef LLVMGetUsedValue(LLVMUseIteratorRef U);
493 /* Operations on Users */
494 LLVMValueRef LLVMGetOperand(LLVMValueRef Val, unsigned Index);
496 /* Operations on constants of any type */
497 LLVMValueRef LLVMConstNull(LLVMTypeRef Ty); /* all zeroes */
498 LLVMValueRef LLVMConstAllOnes(LLVMTypeRef Ty); /* only for int/vector */
499 LLVMValueRef LLVMGetUndef(LLVMTypeRef Ty);
500 LLVMBool LLVMIsConstant(LLVMValueRef Val);
501 LLVMBool LLVMIsNull(LLVMValueRef Val);
502 LLVMBool LLVMIsUndef(LLVMValueRef Val);
503 LLVMValueRef LLVMConstPointerNull(LLVMTypeRef Ty);
505 /* Operations on scalar constants */
506 LLVMValueRef LLVMConstInt(LLVMTypeRef IntTy, unsigned long long N,
507 LLVMBool SignExtend);
508 LLVMValueRef LLVMConstIntOfString(LLVMTypeRef IntTy, const char *Text,
510 LLVMValueRef LLVMConstIntOfStringAndSize(LLVMTypeRef IntTy, const char *Text,
511 unsigned SLen, uint8_t Radix);
512 LLVMValueRef LLVMConstReal(LLVMTypeRef RealTy, double N);
513 LLVMValueRef LLVMConstRealOfString(LLVMTypeRef RealTy, const char *Text);
514 LLVMValueRef LLVMConstRealOfStringAndSize(LLVMTypeRef RealTy, const char *Text,
516 unsigned long long LLVMConstIntGetZExtValue(LLVMValueRef ConstantVal);
517 long long LLVMConstIntGetSExtValue(LLVMValueRef ConstantVal);
520 /* Operations on composite constants */
521 LLVMValueRef LLVMConstStringInContext(LLVMContextRef C, const char *Str,
522 unsigned Length, LLVMBool DontNullTerminate);
523 LLVMValueRef LLVMConstStructInContext(LLVMContextRef C,
524 LLVMValueRef *ConstantVals,
525 unsigned Count, LLVMBool Packed);
527 LLVMValueRef LLVMConstString(const char *Str, unsigned Length,
528 LLVMBool DontNullTerminate);
529 LLVMValueRef LLVMConstArray(LLVMTypeRef ElementTy,
530 LLVMValueRef *ConstantVals, unsigned Length);
531 LLVMValueRef LLVMConstStruct(LLVMValueRef *ConstantVals, unsigned Count,
533 LLVMValueRef LLVMConstVector(LLVMValueRef *ScalarConstantVals, unsigned Size);
535 /* Constant expressions */
536 LLVMOpcode LLVMGetConstOpcode(LLVMValueRef ConstantVal);
537 LLVMValueRef LLVMAlignOf(LLVMTypeRef Ty);
538 LLVMValueRef LLVMSizeOf(LLVMTypeRef Ty);
539 LLVMValueRef LLVMConstNeg(LLVMValueRef ConstantVal);
540 LLVMValueRef LLVMConstFNeg(LLVMValueRef ConstantVal);
541 LLVMValueRef LLVMConstNot(LLVMValueRef ConstantVal);
542 LLVMValueRef LLVMConstAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
543 LLVMValueRef LLVMConstNSWAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
544 LLVMValueRef LLVMConstFAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
545 LLVMValueRef LLVMConstSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
546 LLVMValueRef LLVMConstFSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
547 LLVMValueRef LLVMConstMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
548 LLVMValueRef LLVMConstFMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
549 LLVMValueRef LLVMConstUDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
550 LLVMValueRef LLVMConstSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
551 LLVMValueRef LLVMConstExactSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
552 LLVMValueRef LLVMConstFDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
553 LLVMValueRef LLVMConstURem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
554 LLVMValueRef LLVMConstSRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
555 LLVMValueRef LLVMConstFRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
556 LLVMValueRef LLVMConstAnd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
557 LLVMValueRef LLVMConstOr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
558 LLVMValueRef LLVMConstXor(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
559 LLVMValueRef LLVMConstICmp(LLVMIntPredicate Predicate,
560 LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
561 LLVMValueRef LLVMConstFCmp(LLVMRealPredicate Predicate,
562 LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
563 LLVMValueRef LLVMConstShl(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
564 LLVMValueRef LLVMConstLShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
565 LLVMValueRef LLVMConstAShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
566 LLVMValueRef LLVMConstGEP(LLVMValueRef ConstantVal,
567 LLVMValueRef *ConstantIndices, unsigned NumIndices);
568 LLVMValueRef LLVMConstInBoundsGEP(LLVMValueRef ConstantVal,
569 LLVMValueRef *ConstantIndices,
570 unsigned NumIndices);
571 LLVMValueRef LLVMConstTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
572 LLVMValueRef LLVMConstSExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
573 LLVMValueRef LLVMConstZExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
574 LLVMValueRef LLVMConstFPTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
575 LLVMValueRef LLVMConstFPExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
576 LLVMValueRef LLVMConstUIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
577 LLVMValueRef LLVMConstSIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
578 LLVMValueRef LLVMConstFPToUI(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
579 LLVMValueRef LLVMConstFPToSI(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
580 LLVMValueRef LLVMConstPtrToInt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
581 LLVMValueRef LLVMConstIntToPtr(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
582 LLVMValueRef LLVMConstBitCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
583 LLVMValueRef LLVMConstZExtOrBitCast(LLVMValueRef ConstantVal,
585 LLVMValueRef LLVMConstSExtOrBitCast(LLVMValueRef ConstantVal,
587 LLVMValueRef LLVMConstTruncOrBitCast(LLVMValueRef ConstantVal,
589 LLVMValueRef LLVMConstPointerCast(LLVMValueRef ConstantVal,
591 LLVMValueRef LLVMConstIntCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType,
593 LLVMValueRef LLVMConstFPCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
594 LLVMValueRef LLVMConstSelect(LLVMValueRef ConstantCondition,
595 LLVMValueRef ConstantIfTrue,
596 LLVMValueRef ConstantIfFalse);
597 LLVMValueRef LLVMConstExtractElement(LLVMValueRef VectorConstant,
598 LLVMValueRef IndexConstant);
599 LLVMValueRef LLVMConstInsertElement(LLVMValueRef VectorConstant,
600 LLVMValueRef ElementValueConstant,
601 LLVMValueRef IndexConstant);
602 LLVMValueRef LLVMConstShuffleVector(LLVMValueRef VectorAConstant,
603 LLVMValueRef VectorBConstant,
604 LLVMValueRef MaskConstant);
605 LLVMValueRef LLVMConstExtractValue(LLVMValueRef AggConstant, unsigned *IdxList,
607 LLVMValueRef LLVMConstInsertValue(LLVMValueRef AggConstant,
608 LLVMValueRef ElementValueConstant,
609 unsigned *IdxList, unsigned NumIdx);
610 LLVMValueRef LLVMConstInlineAsm(LLVMTypeRef Ty,
611 const char *AsmString, const char *Constraints,
612 LLVMBool HasSideEffects, LLVMBool IsAlignStack);
614 /* Operations on global variables, functions, and aliases (globals) */
615 LLVMModuleRef LLVMGetGlobalParent(LLVMValueRef Global);
616 LLVMBool LLVMIsDeclaration(LLVMValueRef Global);
617 LLVMLinkage LLVMGetLinkage(LLVMValueRef Global);
618 void LLVMSetLinkage(LLVMValueRef Global, LLVMLinkage Linkage);
619 const char *LLVMGetSection(LLVMValueRef Global);
620 void LLVMSetSection(LLVMValueRef Global, const char *Section);
621 LLVMVisibility LLVMGetVisibility(LLVMValueRef Global);
622 void LLVMSetVisibility(LLVMValueRef Global, LLVMVisibility Viz);
623 unsigned LLVMGetAlignment(LLVMValueRef Global);
624 void LLVMSetAlignment(LLVMValueRef Global, unsigned Bytes);
626 /* Operations on global variables */
627 LLVMValueRef LLVMAddGlobal(LLVMModuleRef M, LLVMTypeRef Ty, const char *Name);
628 LLVMValueRef LLVMGetNamedGlobal(LLVMModuleRef M, const char *Name);
629 LLVMValueRef LLVMGetFirstGlobal(LLVMModuleRef M);
630 LLVMValueRef LLVMGetLastGlobal(LLVMModuleRef M);
631 LLVMValueRef LLVMGetNextGlobal(LLVMValueRef GlobalVar);
632 LLVMValueRef LLVMGetPreviousGlobal(LLVMValueRef GlobalVar);
633 void LLVMDeleteGlobal(LLVMValueRef GlobalVar);
634 LLVMValueRef LLVMGetInitializer(LLVMValueRef GlobalVar);
635 void LLVMSetInitializer(LLVMValueRef GlobalVar, LLVMValueRef ConstantVal);
636 LLVMBool LLVMIsThreadLocal(LLVMValueRef GlobalVar);
637 void LLVMSetThreadLocal(LLVMValueRef GlobalVar, LLVMBool IsThreadLocal);
638 LLVMBool LLVMIsGlobalConstant(LLVMValueRef GlobalVar);
639 void LLVMSetGlobalConstant(LLVMValueRef GlobalVar, LLVMBool IsConstant);
641 /* Operations on aliases */
642 LLVMValueRef LLVMAddAlias(LLVMModuleRef M, LLVMTypeRef Ty, LLVMValueRef Aliasee,
645 /* Operations on functions */
646 LLVMValueRef LLVMAddFunction(LLVMModuleRef M, const char *Name,
647 LLVMTypeRef FunctionTy);
648 LLVMValueRef LLVMGetNamedFunction(LLVMModuleRef M, const char *Name);
649 LLVMValueRef LLVMGetFirstFunction(LLVMModuleRef M);
650 LLVMValueRef LLVMGetLastFunction(LLVMModuleRef M);
651 LLVMValueRef LLVMGetNextFunction(LLVMValueRef Fn);
652 LLVMValueRef LLVMGetPreviousFunction(LLVMValueRef Fn);
653 void LLVMDeleteFunction(LLVMValueRef Fn);
654 unsigned LLVMGetIntrinsicID(LLVMValueRef Fn);
655 unsigned LLVMGetFunctionCallConv(LLVMValueRef Fn);
656 void LLVMSetFunctionCallConv(LLVMValueRef Fn, unsigned CC);
657 const char *LLVMGetGC(LLVMValueRef Fn);
658 void LLVMSetGC(LLVMValueRef Fn, const char *Name);
659 void LLVMAddFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA);
660 LLVMAttribute LLVMGetFunctionAttr(LLVMValueRef Fn);
661 void LLVMRemoveFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA);
663 /* Operations on parameters */
664 unsigned LLVMCountParams(LLVMValueRef Fn);
665 void LLVMGetParams(LLVMValueRef Fn, LLVMValueRef *Params);
666 LLVMValueRef LLVMGetParam(LLVMValueRef Fn, unsigned Index);
667 LLVMValueRef LLVMGetParamParent(LLVMValueRef Inst);
668 LLVMValueRef LLVMGetFirstParam(LLVMValueRef Fn);
669 LLVMValueRef LLVMGetLastParam(LLVMValueRef Fn);
670 LLVMValueRef LLVMGetNextParam(LLVMValueRef Arg);
671 LLVMValueRef LLVMGetPreviousParam(LLVMValueRef Arg);
672 void LLVMAddAttribute(LLVMValueRef Arg, LLVMAttribute PA);
673 void LLVMRemoveAttribute(LLVMValueRef Arg, LLVMAttribute PA);
674 LLVMAttribute LLVMGetAttribute(LLVMValueRef Arg);
675 void LLVMSetParamAlignment(LLVMValueRef Arg, unsigned align);
677 /* Operations on basic blocks */
678 LLVMValueRef LLVMBasicBlockAsValue(LLVMBasicBlockRef BB);
679 LLVMBool LLVMValueIsBasicBlock(LLVMValueRef Val);
680 LLVMBasicBlockRef LLVMValueAsBasicBlock(LLVMValueRef Val);
681 LLVMValueRef LLVMGetBasicBlockParent(LLVMBasicBlockRef BB);
682 unsigned LLVMCountBasicBlocks(LLVMValueRef Fn);
683 void LLVMGetBasicBlocks(LLVMValueRef Fn, LLVMBasicBlockRef *BasicBlocks);
684 LLVMBasicBlockRef LLVMGetFirstBasicBlock(LLVMValueRef Fn);
685 LLVMBasicBlockRef LLVMGetLastBasicBlock(LLVMValueRef Fn);
686 LLVMBasicBlockRef LLVMGetNextBasicBlock(LLVMBasicBlockRef BB);
687 LLVMBasicBlockRef LLVMGetPreviousBasicBlock(LLVMBasicBlockRef BB);
688 LLVMBasicBlockRef LLVMGetEntryBasicBlock(LLVMValueRef Fn);
690 LLVMBasicBlockRef LLVMAppendBasicBlockInContext(LLVMContextRef C,
693 LLVMBasicBlockRef LLVMInsertBasicBlockInContext(LLVMContextRef C,
694 LLVMBasicBlockRef BB,
697 LLVMBasicBlockRef LLVMAppendBasicBlock(LLVMValueRef Fn, const char *Name);
698 LLVMBasicBlockRef LLVMInsertBasicBlock(LLVMBasicBlockRef InsertBeforeBB,
700 void LLVMDeleteBasicBlock(LLVMBasicBlockRef BB);
702 /* Operations on instructions */
703 LLVMBasicBlockRef LLVMGetInstructionParent(LLVMValueRef Inst);
704 LLVMValueRef LLVMGetFirstInstruction(LLVMBasicBlockRef BB);
705 LLVMValueRef LLVMGetLastInstruction(LLVMBasicBlockRef BB);
706 LLVMValueRef LLVMGetNextInstruction(LLVMValueRef Inst);
707 LLVMValueRef LLVMGetPreviousInstruction(LLVMValueRef Inst);
709 /* Operations on call sites */
710 void LLVMSetInstructionCallConv(LLVMValueRef Instr, unsigned CC);
711 unsigned LLVMGetInstructionCallConv(LLVMValueRef Instr);
712 void LLVMAddInstrAttribute(LLVMValueRef Instr, unsigned index, LLVMAttribute);
713 void LLVMRemoveInstrAttribute(LLVMValueRef Instr, unsigned index,
715 void LLVMSetInstrParamAlignment(LLVMValueRef Instr, unsigned index,
718 /* Operations on call instructions (only) */
719 LLVMBool LLVMIsTailCall(LLVMValueRef CallInst);
720 void LLVMSetTailCall(LLVMValueRef CallInst, LLVMBool IsTailCall);
722 /* Operations on phi nodes */
723 void LLVMAddIncoming(LLVMValueRef PhiNode, LLVMValueRef *IncomingValues,
724 LLVMBasicBlockRef *IncomingBlocks, unsigned Count);
725 unsigned LLVMCountIncoming(LLVMValueRef PhiNode);
726 LLVMValueRef LLVMGetIncomingValue(LLVMValueRef PhiNode, unsigned Index);
727 LLVMBasicBlockRef LLVMGetIncomingBlock(LLVMValueRef PhiNode, unsigned Index);
729 /*===-- Instruction builders ----------------------------------------------===*/
731 /* An instruction builder represents a point within a basic block, and is the
732 * exclusive means of building instructions using the C interface.
735 LLVMBuilderRef LLVMCreateBuilderInContext(LLVMContextRef C);
736 LLVMBuilderRef LLVMCreateBuilder(void);
737 void LLVMPositionBuilder(LLVMBuilderRef Builder, LLVMBasicBlockRef Block,
739 void LLVMPositionBuilderBefore(LLVMBuilderRef Builder, LLVMValueRef Instr);
740 void LLVMPositionBuilderAtEnd(LLVMBuilderRef Builder, LLVMBasicBlockRef Block);
741 LLVMBasicBlockRef LLVMGetInsertBlock(LLVMBuilderRef Builder);
742 void LLVMClearInsertionPosition(LLVMBuilderRef Builder);
743 void LLVMInsertIntoBuilder(LLVMBuilderRef Builder, LLVMValueRef Instr);
744 void LLVMInsertIntoBuilderWithName(LLVMBuilderRef Builder, LLVMValueRef Instr,
746 void LLVMDisposeBuilder(LLVMBuilderRef Builder);
749 LLVMValueRef LLVMBuildRetVoid(LLVMBuilderRef);
750 LLVMValueRef LLVMBuildRet(LLVMBuilderRef, LLVMValueRef V);
751 LLVMValueRef LLVMBuildAggregateRet(LLVMBuilderRef, LLVMValueRef *RetVals,
753 LLVMValueRef LLVMBuildBr(LLVMBuilderRef, LLVMBasicBlockRef Dest);
754 LLVMValueRef LLVMBuildCondBr(LLVMBuilderRef, LLVMValueRef If,
755 LLVMBasicBlockRef Then, LLVMBasicBlockRef Else);
756 LLVMValueRef LLVMBuildSwitch(LLVMBuilderRef, LLVMValueRef V,
757 LLVMBasicBlockRef Else, unsigned NumCases);
758 LLVMValueRef LLVMBuildInvoke(LLVMBuilderRef, LLVMValueRef Fn,
759 LLVMValueRef *Args, unsigned NumArgs,
760 LLVMBasicBlockRef Then, LLVMBasicBlockRef Catch,
762 LLVMValueRef LLVMBuildUnwind(LLVMBuilderRef);
763 LLVMValueRef LLVMBuildUnreachable(LLVMBuilderRef);
765 /* Add a case to the switch instruction */
766 void LLVMAddCase(LLVMValueRef Switch, LLVMValueRef OnVal,
767 LLVMBasicBlockRef Dest);
770 LLVMValueRef LLVMBuildAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
772 LLVMValueRef LLVMBuildNSWAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
774 LLVMValueRef LLVMBuildFAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
776 LLVMValueRef LLVMBuildSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
778 LLVMValueRef LLVMBuildFSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
780 LLVMValueRef LLVMBuildMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
782 LLVMValueRef LLVMBuildFMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
784 LLVMValueRef LLVMBuildUDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
786 LLVMValueRef LLVMBuildSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
788 LLVMValueRef LLVMBuildExactSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
790 LLVMValueRef LLVMBuildFDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
792 LLVMValueRef LLVMBuildURem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
794 LLVMValueRef LLVMBuildSRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
796 LLVMValueRef LLVMBuildFRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
798 LLVMValueRef LLVMBuildShl(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
800 LLVMValueRef LLVMBuildLShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
802 LLVMValueRef LLVMBuildAShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
804 LLVMValueRef LLVMBuildAnd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
806 LLVMValueRef LLVMBuildOr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
808 LLVMValueRef LLVMBuildXor(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
810 LLVMValueRef LLVMBuildNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name);
811 LLVMValueRef LLVMBuildFNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name);
812 LLVMValueRef LLVMBuildNot(LLVMBuilderRef, LLVMValueRef V, const char *Name);
815 LLVMValueRef LLVMBuildMalloc(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
816 LLVMValueRef LLVMBuildArrayMalloc(LLVMBuilderRef, LLVMTypeRef Ty,
817 LLVMValueRef Val, const char *Name);
818 LLVMValueRef LLVMBuildAlloca(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
819 LLVMValueRef LLVMBuildArrayAlloca(LLVMBuilderRef, LLVMTypeRef Ty,
820 LLVMValueRef Val, const char *Name);
821 LLVMValueRef LLVMBuildFree(LLVMBuilderRef, LLVMValueRef PointerVal);
822 LLVMValueRef LLVMBuildLoad(LLVMBuilderRef, LLVMValueRef PointerVal,
824 LLVMValueRef LLVMBuildStore(LLVMBuilderRef, LLVMValueRef Val, LLVMValueRef Ptr);
825 LLVMValueRef LLVMBuildGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
826 LLVMValueRef *Indices, unsigned NumIndices,
828 LLVMValueRef LLVMBuildInBoundsGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
829 LLVMValueRef *Indices, unsigned NumIndices,
831 LLVMValueRef LLVMBuildStructGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
832 unsigned Idx, const char *Name);
833 LLVMValueRef LLVMBuildGlobalString(LLVMBuilderRef B, const char *Str,
835 LLVMValueRef LLVMBuildGlobalStringPtr(LLVMBuilderRef B, const char *Str,
839 LLVMValueRef LLVMBuildTrunc(LLVMBuilderRef, LLVMValueRef Val,
840 LLVMTypeRef DestTy, const char *Name);
841 LLVMValueRef LLVMBuildZExt(LLVMBuilderRef, LLVMValueRef Val,
842 LLVMTypeRef DestTy, const char *Name);
843 LLVMValueRef LLVMBuildSExt(LLVMBuilderRef, LLVMValueRef Val,
844 LLVMTypeRef DestTy, const char *Name);
845 LLVMValueRef LLVMBuildFPToUI(LLVMBuilderRef, LLVMValueRef Val,
846 LLVMTypeRef DestTy, const char *Name);
847 LLVMValueRef LLVMBuildFPToSI(LLVMBuilderRef, LLVMValueRef Val,
848 LLVMTypeRef DestTy, const char *Name);
849 LLVMValueRef LLVMBuildUIToFP(LLVMBuilderRef, LLVMValueRef Val,
850 LLVMTypeRef DestTy, const char *Name);
851 LLVMValueRef LLVMBuildSIToFP(LLVMBuilderRef, LLVMValueRef Val,
852 LLVMTypeRef DestTy, const char *Name);
853 LLVMValueRef LLVMBuildFPTrunc(LLVMBuilderRef, LLVMValueRef Val,
854 LLVMTypeRef DestTy, const char *Name);
855 LLVMValueRef LLVMBuildFPExt(LLVMBuilderRef, LLVMValueRef Val,
856 LLVMTypeRef DestTy, const char *Name);
857 LLVMValueRef LLVMBuildPtrToInt(LLVMBuilderRef, LLVMValueRef Val,
858 LLVMTypeRef DestTy, const char *Name);
859 LLVMValueRef LLVMBuildIntToPtr(LLVMBuilderRef, LLVMValueRef Val,
860 LLVMTypeRef DestTy, const char *Name);
861 LLVMValueRef LLVMBuildBitCast(LLVMBuilderRef, LLVMValueRef Val,
862 LLVMTypeRef DestTy, const char *Name);
863 LLVMValueRef LLVMBuildZExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
864 LLVMTypeRef DestTy, const char *Name);
865 LLVMValueRef LLVMBuildSExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
866 LLVMTypeRef DestTy, const char *Name);
867 LLVMValueRef LLVMBuildTruncOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
868 LLVMTypeRef DestTy, const char *Name);
869 LLVMValueRef LLVMBuildPointerCast(LLVMBuilderRef, LLVMValueRef Val,
870 LLVMTypeRef DestTy, const char *Name);
871 LLVMValueRef LLVMBuildIntCast(LLVMBuilderRef, LLVMValueRef Val, /*Signed cast!*/
872 LLVMTypeRef DestTy, const char *Name);
873 LLVMValueRef LLVMBuildFPCast(LLVMBuilderRef, LLVMValueRef Val,
874 LLVMTypeRef DestTy, const char *Name);
877 LLVMValueRef LLVMBuildICmp(LLVMBuilderRef, LLVMIntPredicate Op,
878 LLVMValueRef LHS, LLVMValueRef RHS,
880 LLVMValueRef LLVMBuildFCmp(LLVMBuilderRef, LLVMRealPredicate Op,
881 LLVMValueRef LHS, LLVMValueRef RHS,
884 /* Miscellaneous instructions */
885 LLVMValueRef LLVMBuildPhi(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
886 LLVMValueRef LLVMBuildCall(LLVMBuilderRef, LLVMValueRef Fn,
887 LLVMValueRef *Args, unsigned NumArgs,
889 LLVMValueRef LLVMBuildSelect(LLVMBuilderRef, LLVMValueRef If,
890 LLVMValueRef Then, LLVMValueRef Else,
892 LLVMValueRef LLVMBuildVAArg(LLVMBuilderRef, LLVMValueRef List, LLVMTypeRef Ty,
894 LLVMValueRef LLVMBuildExtractElement(LLVMBuilderRef, LLVMValueRef VecVal,
895 LLVMValueRef Index, const char *Name);
896 LLVMValueRef LLVMBuildInsertElement(LLVMBuilderRef, LLVMValueRef VecVal,
897 LLVMValueRef EltVal, LLVMValueRef Index,
899 LLVMValueRef LLVMBuildShuffleVector(LLVMBuilderRef, LLVMValueRef V1,
900 LLVMValueRef V2, LLVMValueRef Mask,
902 LLVMValueRef LLVMBuildExtractValue(LLVMBuilderRef, LLVMValueRef AggVal,
903 unsigned Index, const char *Name);
904 LLVMValueRef LLVMBuildInsertValue(LLVMBuilderRef, LLVMValueRef AggVal,
905 LLVMValueRef EltVal, unsigned Index,
908 LLVMValueRef LLVMBuildIsNull(LLVMBuilderRef, LLVMValueRef Val,
910 LLVMValueRef LLVMBuildIsNotNull(LLVMBuilderRef, LLVMValueRef Val,
912 LLVMValueRef LLVMBuildPtrDiff(LLVMBuilderRef, LLVMValueRef LHS,
913 LLVMValueRef RHS, const char *Name);
916 /*===-- Module providers --------------------------------------------------===*/
918 /* Changes the type of M so it can be passed to FunctionPassManagers and the
919 * JIT. They take ModuleProviders for historical reasons.
921 LLVMModuleProviderRef
922 LLVMCreateModuleProviderForExistingModule(LLVMModuleRef M);
924 /* Destroys the module M.
926 void LLVMDisposeModuleProvider(LLVMModuleProviderRef M);
929 /*===-- Memory buffers ----------------------------------------------------===*/
931 LLVMBool LLVMCreateMemoryBufferWithContentsOfFile(const char *Path,
932 LLVMMemoryBufferRef *OutMemBuf,
934 LLVMBool LLVMCreateMemoryBufferWithSTDIN(LLVMMemoryBufferRef *OutMemBuf,
936 void LLVMDisposeMemoryBuffer(LLVMMemoryBufferRef MemBuf);
939 /*===-- Pass Managers -----------------------------------------------------===*/
941 /** Constructs a new whole-module pass pipeline. This type of pipeline is
942 suitable for link-time optimization and whole-module transformations.
943 See llvm::PassManager::PassManager. */
944 LLVMPassManagerRef LLVMCreatePassManager(void);
946 /** Constructs a new function-by-function pass pipeline over the module
947 provider. It does not take ownership of the module provider. This type of
948 pipeline is suitable for code generation and JIT compilation tasks.
949 See llvm::FunctionPassManager::FunctionPassManager. */
950 LLVMPassManagerRef LLVMCreateFunctionPassManager(LLVMModuleProviderRef MP);
952 /** Initializes, executes on the provided module, and finalizes all of the
953 passes scheduled in the pass manager. Returns 1 if any of the passes
954 modified the module, 0 otherwise. See llvm::PassManager::run(Module&). */
955 LLVMBool LLVMRunPassManager(LLVMPassManagerRef PM, LLVMModuleRef M);
957 /** Initializes all of the function passes scheduled in the function pass
958 manager. Returns 1 if any of the passes modified the module, 0 otherwise.
959 See llvm::FunctionPassManager::doInitialization. */
960 LLVMBool LLVMInitializeFunctionPassManager(LLVMPassManagerRef FPM);
962 /** Executes all of the function passes scheduled in the function pass manager
963 on the provided function. Returns 1 if any of the passes modified the
964 function, false otherwise.
965 See llvm::FunctionPassManager::run(Function&). */
966 LLVMBool LLVMRunFunctionPassManager(LLVMPassManagerRef FPM, LLVMValueRef F);
968 /** Finalizes all of the function passes scheduled in in the function pass
969 manager. Returns 1 if any of the passes modified the module, 0 otherwise.
970 See llvm::FunctionPassManager::doFinalization. */
971 LLVMBool LLVMFinalizeFunctionPassManager(LLVMPassManagerRef FPM);
973 /** Frees the memory of a pass pipeline. For function pipelines, does not free
975 See llvm::PassManagerBase::~PassManagerBase. */
976 void LLVMDisposePassManager(LLVMPassManagerRef PM);
984 class PassManagerBase;
986 #define DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \
987 inline ty *unwrap(ref P) { \
988 return reinterpret_cast<ty*>(P); \
991 inline ref wrap(const ty *P) { \
992 return reinterpret_cast<ref>(const_cast<ty*>(P)); \
995 #define DEFINE_ISA_CONVERSION_FUNCTIONS(ty, ref) \
996 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \
998 template<typename T> \
999 inline T *unwrap(ref P) { \
1000 return cast<T>(unwrap(P)); \
1003 #define DEFINE_STDCXX_CONVERSION_FUNCTIONS(ty, ref) \
1004 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \
1006 template<typename T> \
1007 inline T *unwrap(ref P) { \
1008 T *Q = (T*)unwrap(P); \
1009 assert(Q && "Invalid cast!"); \
1013 DEFINE_ISA_CONVERSION_FUNCTIONS (Type, LLVMTypeRef )
1014 DEFINE_ISA_CONVERSION_FUNCTIONS (Value, LLVMValueRef )
1015 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(Module, LLVMModuleRef )
1016 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(BasicBlock, LLVMBasicBlockRef )
1017 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(IRBuilder<>, LLVMBuilderRef )
1018 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(PATypeHolder, LLVMTypeHandleRef )
1019 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(MemoryBuffer, LLVMMemoryBufferRef )
1020 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(LLVMContext, LLVMContextRef )
1021 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(Use, LLVMUseIteratorRef )
1022 DEFINE_STDCXX_CONVERSION_FUNCTIONS(PassManagerBase, LLVMPassManagerRef )
1023 /* LLVMModuleProviderRef exists for historical reasons, but now just holds a
1026 inline Module *unwrap(LLVMModuleProviderRef MP) {
1027 return reinterpret_cast<Module*>(MP);
1030 #undef DEFINE_STDCXX_CONVERSION_FUNCTIONS
1031 #undef DEFINE_ISA_CONVERSION_FUNCTIONS
1032 #undef DEFINE_SIMPLE_CONVERSION_FUNCTIONS
1034 /* Specialized opaque context conversions.
1036 inline LLVMContext **unwrap(LLVMContextRef* Tys) {
1037 return reinterpret_cast<LLVMContext**>(Tys);
1040 inline LLVMContextRef *wrap(const LLVMContext **Tys) {
1041 return reinterpret_cast<LLVMContextRef*>(const_cast<LLVMContext**>(Tys));
1044 /* Specialized opaque type conversions.
1046 inline Type **unwrap(LLVMTypeRef* Tys) {
1047 return reinterpret_cast<Type**>(Tys);
1050 inline LLVMTypeRef *wrap(const Type **Tys) {
1051 return reinterpret_cast<LLVMTypeRef*>(const_cast<Type**>(Tys));
1054 /* Specialized opaque value conversions.
1056 inline Value **unwrap(LLVMValueRef *Vals) {
1057 return reinterpret_cast<Value**>(Vals);
1060 template<typename T>
1061 inline T **unwrap(LLVMValueRef *Vals, unsigned Length) {
1063 for (LLVMValueRef *I = Vals, *E = Vals + Length; I != E; ++I)
1066 return reinterpret_cast<T**>(Vals);
1069 inline LLVMValueRef *wrap(const Value **Vals) {
1070 return reinterpret_cast<LLVMValueRef*>(const_cast<Value**>(Vals));
1074 #endif /* !defined(__cplusplus) */
1076 #endif /* !defined(LLVM_C_CORE_H) */