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"
52 * The top-level container for all LLVM global data. See the LLVMContext class.
54 typedef struct LLVMOpaqueContext *LLVMContextRef;
57 * The top-level container for all other LLVM Intermediate Representation (IR)
58 * objects. See the llvm::Module class.
60 typedef struct LLVMOpaqueModule *LLVMModuleRef;
63 * Each value in the LLVM IR has a type, an LLVMTypeRef. See the llvm::Type
66 typedef struct LLVMOpaqueType *LLVMTypeRef;
69 * When building recursive types using LLVMRefineType, LLVMTypeRef values may
70 * become invalid; use LLVMTypeHandleRef to resolve this problem. See the
71 * llvm::AbstractTypeHolder class.
73 typedef struct LLVMOpaqueTypeHandle *LLVMTypeHandleRef;
75 typedef struct LLVMOpaqueValue *LLVMValueRef;
76 typedef struct LLVMOpaqueBasicBlock *LLVMBasicBlockRef;
77 typedef struct LLVMOpaqueBuilder *LLVMBuilderRef;
79 /* Used to provide a module to JIT or interpreter.
80 * See the llvm::ModuleProvider class.
82 typedef struct LLVMOpaqueModuleProvider *LLVMModuleProviderRef;
84 /* Used to provide a module to JIT or interpreter.
85 * See the llvm::MemoryBuffer class.
87 typedef struct LLVMOpaqueMemoryBuffer *LLVMMemoryBufferRef;
89 /** See the llvm::PassManagerBase class. */
90 typedef struct LLVMOpaquePassManager *LLVMPassManagerRef;
93 * Used to iterate through the uses of a Value, allowing access to all Values
94 * that use this Value. See the llvm::Use and llvm::value_use_iterator classes.
96 typedef struct LLVMOpaqueUseIterator *LLVMUseIteratorRef;
99 LLVMZExtAttribute = 1<<0,
100 LLVMSExtAttribute = 1<<1,
101 LLVMNoReturnAttribute = 1<<2,
102 LLVMInRegAttribute = 1<<3,
103 LLVMStructRetAttribute = 1<<4,
104 LLVMNoUnwindAttribute = 1<<5,
105 LLVMNoAliasAttribute = 1<<6,
106 LLVMByValAttribute = 1<<7,
107 LLVMNestAttribute = 1<<8,
108 LLVMReadNoneAttribute = 1<<9,
109 LLVMReadOnlyAttribute = 1<<10,
110 LLVMNoInlineAttribute = 1<<11,
111 LLVMAlwaysInlineAttribute = 1<<12,
112 LLVMOptimizeForSizeAttribute = 1<<13,
113 LLVMStackProtectAttribute = 1<<14,
114 LLVMStackProtectReqAttribute = 1<<15,
115 LLVMNoCaptureAttribute = 1<<21,
116 LLVMNoRedZoneAttribute = 1<<22,
117 LLVMNoImplicitFloatAttribute = 1<<23,
118 LLVMNakedAttribute = 1<<24,
119 LLVMInlineHintAttribute = 1<<25
152 LLVMGetElementPtr = 30,
171 LLVMExtractElement = 51,
172 LLVMInsertElement = 52,
173 LLVMShuffleVector = 53,
174 LLVMExtractValue = 54,
179 LLVMVoidTypeKind, /**< type with no size */
180 LLVMFloatTypeKind, /**< 32 bit floating point type */
181 LLVMDoubleTypeKind, /**< 64 bit floating point type */
182 LLVMX86_FP80TypeKind, /**< 80 bit floating point type (X87) */
183 LLVMFP128TypeKind, /**< 128 bit floating point type (112-bit mantissa)*/
184 LLVMPPC_FP128TypeKind, /**< 128 bit floating point type (two 64-bits) */
185 LLVMLabelTypeKind, /**< Labels */
186 LLVMIntegerTypeKind, /**< Arbitrary bit width integers */
187 LLVMFunctionTypeKind, /**< Functions */
188 LLVMStructTypeKind, /**< Structures */
189 LLVMArrayTypeKind, /**< Arrays */
190 LLVMPointerTypeKind, /**< Pointers */
191 LLVMOpaqueTypeKind, /**< Opaque: type with unknown structure */
192 LLVMVectorTypeKind, /**< SIMD 'packed' format, or other vector type */
193 LLVMMetadataTypeKind /**< Metadata */
197 LLVMExternalLinkage, /**< Externally visible function */
198 LLVMAvailableExternallyLinkage,
199 LLVMLinkOnceAnyLinkage, /**< Keep one copy of function when linking (inline)*/
200 LLVMLinkOnceODRLinkage, /**< Same, but only replaced by something
202 LLVMWeakAnyLinkage, /**< Keep one copy of function when linking (weak) */
203 LLVMWeakODRLinkage, /**< Same, but only replaced by something
205 LLVMAppendingLinkage, /**< Special purpose, only applies to global arrays */
206 LLVMInternalLinkage, /**< Rename collisions when linking (static
208 LLVMPrivateLinkage, /**< Like Internal, but omit from symbol table */
209 LLVMDLLImportLinkage, /**< Function to be imported from DLL */
210 LLVMDLLExportLinkage, /**< Function to be accessible from DLL */
211 LLVMExternalWeakLinkage,/**< ExternalWeak linkage description */
212 LLVMGhostLinkage, /**< Stand-in functions for streaming fns from
214 LLVMCommonLinkage, /**< Tentative definitions */
215 LLVMLinkerPrivateLinkage /**< Like Private, but linker removes. */
219 LLVMDefaultVisibility, /**< The GV is visible */
220 LLVMHiddenVisibility, /**< The GV is hidden */
221 LLVMProtectedVisibility /**< The GV is protected */
226 LLVMFastCallConv = 8,
227 LLVMColdCallConv = 9,
228 LLVMX86StdcallCallConv = 64,
229 LLVMX86FastcallCallConv = 65
233 LLVMIntEQ = 32, /**< equal */
234 LLVMIntNE, /**< not equal */
235 LLVMIntUGT, /**< unsigned greater than */
236 LLVMIntUGE, /**< unsigned greater or equal */
237 LLVMIntULT, /**< unsigned less than */
238 LLVMIntULE, /**< unsigned less or equal */
239 LLVMIntSGT, /**< signed greater than */
240 LLVMIntSGE, /**< signed greater or equal */
241 LLVMIntSLT, /**< signed less than */
242 LLVMIntSLE /**< signed less or equal */
246 LLVMRealPredicateFalse, /**< Always false (always folded) */
247 LLVMRealOEQ, /**< True if ordered and equal */
248 LLVMRealOGT, /**< True if ordered and greater than */
249 LLVMRealOGE, /**< True if ordered and greater than or equal */
250 LLVMRealOLT, /**< True if ordered and less than */
251 LLVMRealOLE, /**< True if ordered and less than or equal */
252 LLVMRealONE, /**< True if ordered and operands are unequal */
253 LLVMRealORD, /**< True if ordered (no nans) */
254 LLVMRealUNO, /**< True if unordered: isnan(X) | isnan(Y) */
255 LLVMRealUEQ, /**< True if unordered or equal */
256 LLVMRealUGT, /**< True if unordered or greater than */
257 LLVMRealUGE, /**< True if unordered, greater than, or equal */
258 LLVMRealULT, /**< True if unordered or less than */
259 LLVMRealULE, /**< True if unordered, less than, or equal */
260 LLVMRealUNE, /**< True if unordered or not equal */
261 LLVMRealPredicateTrue /**< Always true (always folded) */
265 /*===-- Error handling ----------------------------------------------------===*/
267 void LLVMDisposeMessage(char *Message);
270 /*===-- Modules -----------------------------------------------------------===*/
272 /* Create and destroy contexts. */
273 LLVMContextRef LLVMContextCreate(void);
274 LLVMContextRef LLVMGetGlobalContext(void);
275 void LLVMContextDispose(LLVMContextRef C);
277 /* Create and destroy modules. */
278 /** See llvm::Module::Module. */
279 LLVMModuleRef LLVMModuleCreateWithName(const char *ModuleID);
280 LLVMModuleRef LLVMModuleCreateWithNameInContext(const char *ModuleID,
283 /** See llvm::Module::~Module. */
284 void LLVMDisposeModule(LLVMModuleRef M);
286 /** Data layout. See Module::getDataLayout. */
287 const char *LLVMGetDataLayout(LLVMModuleRef M);
288 void LLVMSetDataLayout(LLVMModuleRef M, const char *Triple);
290 /** Target triple. See Module::getTargetTriple. */
291 const char *LLVMGetTarget(LLVMModuleRef M);
292 void LLVMSetTarget(LLVMModuleRef M, const char *Triple);
294 /** See Module::addTypeName. */
295 int LLVMAddTypeName(LLVMModuleRef M, const char *Name, LLVMTypeRef Ty);
296 void LLVMDeleteTypeName(LLVMModuleRef M, const char *Name);
297 LLVMTypeRef LLVMGetTypeByName(LLVMModuleRef M, const char *Name);
299 /** See Module::dump. */
300 void LLVMDumpModule(LLVMModuleRef M);
303 /*===-- Types -------------------------------------------------------------===*/
305 /* LLVM types conform to the following hierarchy:
320 /** See llvm::LLVMTypeKind::getTypeID. */
321 LLVMTypeKind LLVMGetTypeKind(LLVMTypeRef Ty);
323 /** See llvm::LLVMType::getContext. */
324 LLVMContextRef LLVMGetTypeContext(LLVMTypeRef Ty);
326 /* Operations on integer types */
327 LLVMTypeRef LLVMInt1TypeInContext(LLVMContextRef C);
328 LLVMTypeRef LLVMInt8TypeInContext(LLVMContextRef C);
329 LLVMTypeRef LLVMInt16TypeInContext(LLVMContextRef C);
330 LLVMTypeRef LLVMInt32TypeInContext(LLVMContextRef C);
331 LLVMTypeRef LLVMInt64TypeInContext(LLVMContextRef C);
332 LLVMTypeRef LLVMIntTypeInContext(LLVMContextRef C, unsigned NumBits);
334 LLVMTypeRef LLVMInt1Type(void);
335 LLVMTypeRef LLVMInt8Type(void);
336 LLVMTypeRef LLVMInt16Type(void);
337 LLVMTypeRef LLVMInt32Type(void);
338 LLVMTypeRef LLVMInt64Type(void);
339 LLVMTypeRef LLVMIntType(unsigned NumBits);
340 unsigned LLVMGetIntTypeWidth(LLVMTypeRef IntegerTy);
342 /* Operations on real types */
343 LLVMTypeRef LLVMFloatTypeInContext(LLVMContextRef C);
344 LLVMTypeRef LLVMDoubleTypeInContext(LLVMContextRef C);
345 LLVMTypeRef LLVMX86FP80TypeInContext(LLVMContextRef C);
346 LLVMTypeRef LLVMFP128TypeInContext(LLVMContextRef C);
347 LLVMTypeRef LLVMPPCFP128TypeInContext(LLVMContextRef C);
349 LLVMTypeRef LLVMFloatType(void);
350 LLVMTypeRef LLVMDoubleType(void);
351 LLVMTypeRef LLVMX86FP80Type(void);
352 LLVMTypeRef LLVMFP128Type(void);
353 LLVMTypeRef LLVMPPCFP128Type(void);
355 /* Operations on function types */
356 LLVMTypeRef LLVMFunctionType(LLVMTypeRef ReturnType,
357 LLVMTypeRef *ParamTypes, unsigned ParamCount,
359 int LLVMIsFunctionVarArg(LLVMTypeRef FunctionTy);
360 LLVMTypeRef LLVMGetReturnType(LLVMTypeRef FunctionTy);
361 unsigned LLVMCountParamTypes(LLVMTypeRef FunctionTy);
362 void LLVMGetParamTypes(LLVMTypeRef FunctionTy, LLVMTypeRef *Dest);
364 /* Operations on struct types */
365 LLVMTypeRef LLVMStructTypeInContext(LLVMContextRef C, LLVMTypeRef *ElementTypes,
366 unsigned ElementCount, int Packed);
367 LLVMTypeRef LLVMStructType(LLVMTypeRef *ElementTypes, unsigned ElementCount,
369 unsigned LLVMCountStructElementTypes(LLVMTypeRef StructTy);
370 void LLVMGetStructElementTypes(LLVMTypeRef StructTy, LLVMTypeRef *Dest);
371 int LLVMIsPackedStruct(LLVMTypeRef StructTy);
373 /* Operations on array, pointer, and vector types (sequence types) */
374 LLVMTypeRef LLVMArrayType(LLVMTypeRef ElementType, unsigned ElementCount);
375 LLVMTypeRef LLVMPointerType(LLVMTypeRef ElementType, unsigned AddressSpace);
376 LLVMTypeRef LLVMVectorType(LLVMTypeRef ElementType, unsigned ElementCount);
378 LLVMTypeRef LLVMGetElementType(LLVMTypeRef Ty);
379 unsigned LLVMGetArrayLength(LLVMTypeRef ArrayTy);
380 unsigned LLVMGetPointerAddressSpace(LLVMTypeRef PointerTy);
381 unsigned LLVMGetVectorSize(LLVMTypeRef VectorTy);
383 /* Operations on other types */
384 LLVMTypeRef LLVMVoidTypeInContext(LLVMContextRef C);
385 LLVMTypeRef LLVMLabelTypeInContext(LLVMContextRef C);
386 LLVMTypeRef LLVMOpaqueTypeInContext(LLVMContextRef C);
388 LLVMTypeRef LLVMVoidType(void);
389 LLVMTypeRef LLVMLabelType(void);
390 LLVMTypeRef LLVMOpaqueType(void);
392 /* Operations on type handles */
393 LLVMTypeHandleRef LLVMCreateTypeHandle(LLVMTypeRef PotentiallyAbstractTy);
394 void LLVMRefineType(LLVMTypeRef AbstractTy, LLVMTypeRef ConcreteTy);
395 LLVMTypeRef LLVMResolveTypeHandle(LLVMTypeHandleRef TypeHandle);
396 void LLVMDisposeTypeHandle(LLVMTypeHandleRef TypeHandle);
399 /*===-- Values ------------------------------------------------------------===*/
401 /* The bulk of LLVM's object model consists of values, which comprise a very
402 * rich type hierarchy.
405 #define LLVM_FOR_EACH_VALUE_SUBCLASS(macro) \
411 macro(ConstantAggregateZero) \
412 macro(ConstantArray) \
413 macro(ConstantExpr) \
416 macro(ConstantPointerNull) \
417 macro(ConstantStruct) \
418 macro(ConstantVector) \
422 macro(GlobalVariable) \
425 macro(BinaryOperator) \
427 macro(IntrinsicInst) \
428 macro(DbgInfoIntrinsic) \
429 macro(DbgDeclareInst) \
430 macro(DbgFuncStartInst) \
431 macro(DbgRegionEndInst) \
432 macro(DbgRegionStartInst) \
433 macro(DbgStopPointInst) \
434 macro(EHSelectorInst) \
435 macro(MemIntrinsic) \
442 macro(ExtractElementInst) \
443 macro(GetElementPtrInst) \
444 macro(InsertElementInst) \
445 macro(InsertValueInst) \
448 macro(ShuffleVectorInst) \
450 macro(TerminatorInst) \
455 macro(UnreachableInst) \
457 macro(UnaryInstruction) \
465 macro(IntToPtrInst) \
466 macro(PtrToIntInst) \
472 macro(ExtractValueInst) \
476 /* Operations on all values */
477 LLVMTypeRef LLVMTypeOf(LLVMValueRef Val);
478 const char *LLVMGetValueName(LLVMValueRef Val);
479 void LLVMSetValueName(LLVMValueRef Val, const char *Name);
480 void LLVMDumpValue(LLVMValueRef Val);
481 void LLVMReplaceAllUsesWith(LLVMValueRef OldVal, LLVMValueRef NewVal);
483 /* Conversion functions. Return the input value if it is an instance of the
484 specified class, otherwise NULL. See llvm::dyn_cast_or_null<>. */
485 #define LLVM_DECLARE_VALUE_CAST(name) \
486 LLVMValueRef LLVMIsA##name(LLVMValueRef Val);
487 LLVM_FOR_EACH_VALUE_SUBCLASS(LLVM_DECLARE_VALUE_CAST)
489 /* Operations on Uses */
490 LLVMUseIteratorRef LLVMGetFirstUse(LLVMValueRef Val);
491 LLVMUseIteratorRef LLVMGetNextUse(LLVMUseIteratorRef U);
492 LLVMValueRef LLVMGetUser(LLVMUseIteratorRef U);
493 LLVMValueRef LLVMGetUsedValue(LLVMUseIteratorRef U);
495 /* Operations on Users */
496 LLVMValueRef LLVMGetOperand(LLVMValueRef Val, unsigned Index);
498 /* Operations on constants of any type */
499 LLVMValueRef LLVMConstNull(LLVMTypeRef Ty); /* all zeroes */
500 LLVMValueRef LLVMConstAllOnes(LLVMTypeRef Ty); /* only for int/vector */
501 LLVMValueRef LLVMGetUndef(LLVMTypeRef Ty);
502 int LLVMIsConstant(LLVMValueRef Val);
503 int LLVMIsNull(LLVMValueRef Val);
504 int LLVMIsUndef(LLVMValueRef Val);
505 LLVMValueRef LLVMConstPointerNull(LLVMTypeRef Ty);
507 /* Operations on scalar constants */
508 LLVMValueRef LLVMConstInt(LLVMTypeRef IntTy, unsigned long long N,
510 LLVMValueRef LLVMConstIntOfString(LLVMTypeRef IntTy, const char *Text,
512 LLVMValueRef LLVMConstIntOfStringAndSize(LLVMTypeRef IntTy, const char *Text,
513 unsigned SLen, uint8_t Radix);
514 LLVMValueRef LLVMConstReal(LLVMTypeRef RealTy, double N);
515 LLVMValueRef LLVMConstRealOfString(LLVMTypeRef RealTy, const char *Text);
516 LLVMValueRef LLVMConstRealOfStringAndSize(LLVMTypeRef RealTy, const char *Text,
518 unsigned long long LLVMConstIntGetZExtValue(LLVMValueRef ConstantVal);
519 long long LLVMConstIntGetSExtValue(LLVMValueRef ConstantVal);
522 /* Operations on composite constants */
523 LLVMValueRef LLVMConstStringInContext(LLVMContextRef C, const char *Str,
524 unsigned Length, int DontNullTerminate);
525 LLVMValueRef LLVMConstStructInContext(LLVMContextRef C,
526 LLVMValueRef *ConstantVals,
527 unsigned Count, int Packed);
529 LLVMValueRef LLVMConstString(const char *Str, unsigned Length,
530 int DontNullTerminate);
531 LLVMValueRef LLVMConstArray(LLVMTypeRef ElementTy,
532 LLVMValueRef *ConstantVals, unsigned Length);
533 LLVMValueRef LLVMConstStruct(LLVMValueRef *ConstantVals, unsigned Count,
535 LLVMValueRef LLVMConstVector(LLVMValueRef *ScalarConstantVals, unsigned Size);
537 /* Constant expressions */
538 LLVMOpcode LLVMGetConstOpcode(LLVMValueRef ConstantVal);
539 LLVMValueRef LLVMAlignOf(LLVMTypeRef Ty);
540 LLVMValueRef LLVMSizeOf(LLVMTypeRef Ty);
541 LLVMValueRef LLVMConstNeg(LLVMValueRef ConstantVal);
542 LLVMValueRef LLVMConstFNeg(LLVMValueRef ConstantVal);
543 LLVMValueRef LLVMConstNot(LLVMValueRef ConstantVal);
544 LLVMValueRef LLVMConstAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
545 LLVMValueRef LLVMConstNSWAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
546 LLVMValueRef LLVMConstFAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
547 LLVMValueRef LLVMConstSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
548 LLVMValueRef LLVMConstFSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
549 LLVMValueRef LLVMConstMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
550 LLVMValueRef LLVMConstFMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
551 LLVMValueRef LLVMConstUDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
552 LLVMValueRef LLVMConstSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
553 LLVMValueRef LLVMConstExactSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
554 LLVMValueRef LLVMConstFDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
555 LLVMValueRef LLVMConstURem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
556 LLVMValueRef LLVMConstSRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
557 LLVMValueRef LLVMConstFRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
558 LLVMValueRef LLVMConstAnd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
559 LLVMValueRef LLVMConstOr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
560 LLVMValueRef LLVMConstXor(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
561 LLVMValueRef LLVMConstICmp(LLVMIntPredicate Predicate,
562 LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
563 LLVMValueRef LLVMConstFCmp(LLVMRealPredicate Predicate,
564 LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
565 LLVMValueRef LLVMConstShl(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
566 LLVMValueRef LLVMConstLShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
567 LLVMValueRef LLVMConstAShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
568 LLVMValueRef LLVMConstGEP(LLVMValueRef ConstantVal,
569 LLVMValueRef *ConstantIndices, unsigned NumIndices);
570 LLVMValueRef LLVMConstInBoundsGEP(LLVMValueRef ConstantVal,
571 LLVMValueRef *ConstantIndices,
572 unsigned NumIndices);
573 LLVMValueRef LLVMConstTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
574 LLVMValueRef LLVMConstSExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
575 LLVMValueRef LLVMConstZExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
576 LLVMValueRef LLVMConstFPTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
577 LLVMValueRef LLVMConstFPExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
578 LLVMValueRef LLVMConstUIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
579 LLVMValueRef LLVMConstSIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
580 LLVMValueRef LLVMConstFPToUI(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
581 LLVMValueRef LLVMConstFPToSI(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
582 LLVMValueRef LLVMConstPtrToInt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
583 LLVMValueRef LLVMConstIntToPtr(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
584 LLVMValueRef LLVMConstBitCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
585 LLVMValueRef LLVMConstZExtOrBitCast(LLVMValueRef ConstantVal,
587 LLVMValueRef LLVMConstSExtOrBitCast(LLVMValueRef ConstantVal,
589 LLVMValueRef LLVMConstTruncOrBitCast(LLVMValueRef ConstantVal,
591 LLVMValueRef LLVMConstPointerCast(LLVMValueRef ConstantVal,
593 LLVMValueRef LLVMConstIntCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType,
595 LLVMValueRef LLVMConstFPCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
596 LLVMValueRef LLVMConstSelect(LLVMValueRef ConstantCondition,
597 LLVMValueRef ConstantIfTrue,
598 LLVMValueRef ConstantIfFalse);
599 LLVMValueRef LLVMConstExtractElement(LLVMValueRef VectorConstant,
600 LLVMValueRef IndexConstant);
601 LLVMValueRef LLVMConstInsertElement(LLVMValueRef VectorConstant,
602 LLVMValueRef ElementValueConstant,
603 LLVMValueRef IndexConstant);
604 LLVMValueRef LLVMConstShuffleVector(LLVMValueRef VectorAConstant,
605 LLVMValueRef VectorBConstant,
606 LLVMValueRef MaskConstant);
607 LLVMValueRef LLVMConstExtractValue(LLVMValueRef AggConstant, unsigned *IdxList,
609 LLVMValueRef LLVMConstInsertValue(LLVMValueRef AggConstant,
610 LLVMValueRef ElementValueConstant,
611 unsigned *IdxList, unsigned NumIdx);
612 LLVMValueRef LLVMConstInlineAsm(LLVMTypeRef Ty,
613 const char *AsmString, const char *Constraints,
616 /* Operations on global variables, functions, and aliases (globals) */
617 LLVMModuleRef LLVMGetGlobalParent(LLVMValueRef Global);
618 int LLVMIsDeclaration(LLVMValueRef Global);
619 LLVMLinkage LLVMGetLinkage(LLVMValueRef Global);
620 void LLVMSetLinkage(LLVMValueRef Global, LLVMLinkage Linkage);
621 const char *LLVMGetSection(LLVMValueRef Global);
622 void LLVMSetSection(LLVMValueRef Global, const char *Section);
623 LLVMVisibility LLVMGetVisibility(LLVMValueRef Global);
624 void LLVMSetVisibility(LLVMValueRef Global, LLVMVisibility Viz);
625 unsigned LLVMGetAlignment(LLVMValueRef Global);
626 void LLVMSetAlignment(LLVMValueRef Global, unsigned Bytes);
628 /* Operations on global variables */
629 LLVMValueRef LLVMAddGlobal(LLVMModuleRef M, LLVMTypeRef Ty, const char *Name);
630 LLVMValueRef LLVMGetNamedGlobal(LLVMModuleRef M, const char *Name);
631 LLVMValueRef LLVMGetFirstGlobal(LLVMModuleRef M);
632 LLVMValueRef LLVMGetLastGlobal(LLVMModuleRef M);
633 LLVMValueRef LLVMGetNextGlobal(LLVMValueRef GlobalVar);
634 LLVMValueRef LLVMGetPreviousGlobal(LLVMValueRef GlobalVar);
635 void LLVMDeleteGlobal(LLVMValueRef GlobalVar);
636 LLVMValueRef LLVMGetInitializer(LLVMValueRef GlobalVar);
637 void LLVMSetInitializer(LLVMValueRef GlobalVar, LLVMValueRef ConstantVal);
638 int LLVMIsThreadLocal(LLVMValueRef GlobalVar);
639 void LLVMSetThreadLocal(LLVMValueRef GlobalVar, int IsThreadLocal);
640 int LLVMIsGlobalConstant(LLVMValueRef GlobalVar);
641 void LLVMSetGlobalConstant(LLVMValueRef GlobalVar, int IsConstant);
643 /* Operations on aliases */
644 LLVMValueRef LLVMAddAlias(LLVMModuleRef M, LLVMTypeRef Ty, LLVMValueRef Aliasee,
647 /* Operations on functions */
648 LLVMValueRef LLVMAddFunction(LLVMModuleRef M, const char *Name,
649 LLVMTypeRef FunctionTy);
650 LLVMValueRef LLVMGetNamedFunction(LLVMModuleRef M, const char *Name);
651 LLVMValueRef LLVMGetFirstFunction(LLVMModuleRef M);
652 LLVMValueRef LLVMGetLastFunction(LLVMModuleRef M);
653 LLVMValueRef LLVMGetNextFunction(LLVMValueRef Fn);
654 LLVMValueRef LLVMGetPreviousFunction(LLVMValueRef Fn);
655 void LLVMDeleteFunction(LLVMValueRef Fn);
656 unsigned LLVMGetIntrinsicID(LLVMValueRef Fn);
657 unsigned LLVMGetFunctionCallConv(LLVMValueRef Fn);
658 void LLVMSetFunctionCallConv(LLVMValueRef Fn, unsigned CC);
659 const char *LLVMGetGC(LLVMValueRef Fn);
660 void LLVMSetGC(LLVMValueRef Fn, const char *Name);
661 void LLVMAddFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA);
662 LLVMAttribute LLVMGetFunctionAttr(LLVMValueRef Fn);
663 void LLVMRemoveFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA);
665 /* Operations on parameters */
666 unsigned LLVMCountParams(LLVMValueRef Fn);
667 void LLVMGetParams(LLVMValueRef Fn, LLVMValueRef *Params);
668 LLVMValueRef LLVMGetParam(LLVMValueRef Fn, unsigned Index);
669 LLVMValueRef LLVMGetParamParent(LLVMValueRef Inst);
670 LLVMValueRef LLVMGetFirstParam(LLVMValueRef Fn);
671 LLVMValueRef LLVMGetLastParam(LLVMValueRef Fn);
672 LLVMValueRef LLVMGetNextParam(LLVMValueRef Arg);
673 LLVMValueRef LLVMGetPreviousParam(LLVMValueRef Arg);
674 void LLVMAddAttribute(LLVMValueRef Arg, LLVMAttribute PA);
675 void LLVMRemoveAttribute(LLVMValueRef Arg, LLVMAttribute PA);
676 LLVMAttribute LLVMGetAttribute(LLVMValueRef Arg);
677 void LLVMSetParamAlignment(LLVMValueRef Arg, unsigned align);
679 /* Operations on basic blocks */
680 LLVMValueRef LLVMBasicBlockAsValue(LLVMBasicBlockRef BB);
681 int LLVMValueIsBasicBlock(LLVMValueRef Val);
682 LLVMBasicBlockRef LLVMValueAsBasicBlock(LLVMValueRef Val);
683 LLVMValueRef LLVMGetBasicBlockParent(LLVMBasicBlockRef BB);
684 unsigned LLVMCountBasicBlocks(LLVMValueRef Fn);
685 void LLVMGetBasicBlocks(LLVMValueRef Fn, LLVMBasicBlockRef *BasicBlocks);
686 LLVMBasicBlockRef LLVMGetFirstBasicBlock(LLVMValueRef Fn);
687 LLVMBasicBlockRef LLVMGetLastBasicBlock(LLVMValueRef Fn);
688 LLVMBasicBlockRef LLVMGetNextBasicBlock(LLVMBasicBlockRef BB);
689 LLVMBasicBlockRef LLVMGetPreviousBasicBlock(LLVMBasicBlockRef BB);
690 LLVMBasicBlockRef LLVMGetEntryBasicBlock(LLVMValueRef Fn);
692 LLVMBasicBlockRef LLVMAppendBasicBlockInContext(LLVMContextRef C,
695 LLVMBasicBlockRef LLVMInsertBasicBlockInContext(LLVMContextRef C,
696 LLVMBasicBlockRef BB,
699 LLVMBasicBlockRef LLVMAppendBasicBlock(LLVMValueRef Fn, const char *Name);
700 LLVMBasicBlockRef LLVMInsertBasicBlock(LLVMBasicBlockRef InsertBeforeBB,
702 void LLVMDeleteBasicBlock(LLVMBasicBlockRef BB);
704 /* Operations on instructions */
705 LLVMBasicBlockRef LLVMGetInstructionParent(LLVMValueRef Inst);
706 LLVMValueRef LLVMGetFirstInstruction(LLVMBasicBlockRef BB);
707 LLVMValueRef LLVMGetLastInstruction(LLVMBasicBlockRef BB);
708 LLVMValueRef LLVMGetNextInstruction(LLVMValueRef Inst);
709 LLVMValueRef LLVMGetPreviousInstruction(LLVMValueRef Inst);
711 /* Operations on call sites */
712 void LLVMSetInstructionCallConv(LLVMValueRef Instr, unsigned CC);
713 unsigned LLVMGetInstructionCallConv(LLVMValueRef Instr);
714 void LLVMAddInstrAttribute(LLVMValueRef Instr, unsigned index, LLVMAttribute);
715 void LLVMRemoveInstrAttribute(LLVMValueRef Instr, unsigned index,
717 void LLVMSetInstrParamAlignment(LLVMValueRef Instr, unsigned index,
720 /* Operations on call instructions (only) */
721 int LLVMIsTailCall(LLVMValueRef CallInst);
722 void LLVMSetTailCall(LLVMValueRef CallInst, int IsTailCall);
724 /* Operations on phi nodes */
725 void LLVMAddIncoming(LLVMValueRef PhiNode, LLVMValueRef *IncomingValues,
726 LLVMBasicBlockRef *IncomingBlocks, unsigned Count);
727 unsigned LLVMCountIncoming(LLVMValueRef PhiNode);
728 LLVMValueRef LLVMGetIncomingValue(LLVMValueRef PhiNode, unsigned Index);
729 LLVMBasicBlockRef LLVMGetIncomingBlock(LLVMValueRef PhiNode, unsigned Index);
731 /*===-- Instruction builders ----------------------------------------------===*/
733 /* An instruction builder represents a point within a basic block, and is the
734 * exclusive means of building instructions using the C interface.
737 LLVMBuilderRef LLVMCreateBuilderInContext(LLVMContextRef C);
738 LLVMBuilderRef LLVMCreateBuilder(void);
739 void LLVMPositionBuilder(LLVMBuilderRef Builder, LLVMBasicBlockRef Block,
741 void LLVMPositionBuilderBefore(LLVMBuilderRef Builder, LLVMValueRef Instr);
742 void LLVMPositionBuilderAtEnd(LLVMBuilderRef Builder, LLVMBasicBlockRef Block);
743 LLVMBasicBlockRef LLVMGetInsertBlock(LLVMBuilderRef Builder);
744 void LLVMClearInsertionPosition(LLVMBuilderRef Builder);
745 void LLVMInsertIntoBuilder(LLVMBuilderRef Builder, LLVMValueRef Instr);
746 void LLVMInsertIntoBuilderWithName(LLVMBuilderRef Builder, LLVMValueRef Instr,
748 void LLVMDisposeBuilder(LLVMBuilderRef Builder);
751 LLVMValueRef LLVMBuildRetVoid(LLVMBuilderRef);
752 LLVMValueRef LLVMBuildRet(LLVMBuilderRef, LLVMValueRef V);
753 LLVMValueRef LLVMBuildAggregateRet(LLVMBuilderRef, LLVMValueRef *RetVals,
755 LLVMValueRef LLVMBuildBr(LLVMBuilderRef, LLVMBasicBlockRef Dest);
756 LLVMValueRef LLVMBuildCondBr(LLVMBuilderRef, LLVMValueRef If,
757 LLVMBasicBlockRef Then, LLVMBasicBlockRef Else);
758 LLVMValueRef LLVMBuildSwitch(LLVMBuilderRef, LLVMValueRef V,
759 LLVMBasicBlockRef Else, unsigned NumCases);
760 LLVMValueRef LLVMBuildInvoke(LLVMBuilderRef, LLVMValueRef Fn,
761 LLVMValueRef *Args, unsigned NumArgs,
762 LLVMBasicBlockRef Then, LLVMBasicBlockRef Catch,
764 LLVMValueRef LLVMBuildUnwind(LLVMBuilderRef);
765 LLVMValueRef LLVMBuildUnreachable(LLVMBuilderRef);
767 /* Add a case to the switch instruction */
768 void LLVMAddCase(LLVMValueRef Switch, LLVMValueRef OnVal,
769 LLVMBasicBlockRef Dest);
772 LLVMValueRef LLVMBuildAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
774 LLVMValueRef LLVMBuildNSWAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
776 LLVMValueRef LLVMBuildFAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
778 LLVMValueRef LLVMBuildSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
780 LLVMValueRef LLVMBuildFSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
782 LLVMValueRef LLVMBuildMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
784 LLVMValueRef LLVMBuildFMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
786 LLVMValueRef LLVMBuildUDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
788 LLVMValueRef LLVMBuildSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
790 LLVMValueRef LLVMBuildExactSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
792 LLVMValueRef LLVMBuildFDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
794 LLVMValueRef LLVMBuildURem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
796 LLVMValueRef LLVMBuildSRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
798 LLVMValueRef LLVMBuildFRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
800 LLVMValueRef LLVMBuildShl(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
802 LLVMValueRef LLVMBuildLShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
804 LLVMValueRef LLVMBuildAShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
806 LLVMValueRef LLVMBuildAnd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
808 LLVMValueRef LLVMBuildOr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
810 LLVMValueRef LLVMBuildXor(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
812 LLVMValueRef LLVMBuildNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name);
813 LLVMValueRef LLVMBuildFNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name);
814 LLVMValueRef LLVMBuildNot(LLVMBuilderRef, LLVMValueRef V, const char *Name);
817 LLVMValueRef LLVMBuildMalloc(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
818 LLVMValueRef LLVMBuildArrayMalloc(LLVMBuilderRef, LLVMTypeRef Ty,
819 LLVMValueRef Val, const char *Name);
820 LLVMValueRef LLVMBuildAlloca(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
821 LLVMValueRef LLVMBuildArrayAlloca(LLVMBuilderRef, LLVMTypeRef Ty,
822 LLVMValueRef Val, const char *Name);
823 LLVMValueRef LLVMBuildFree(LLVMBuilderRef, LLVMValueRef PointerVal);
824 LLVMValueRef LLVMBuildLoad(LLVMBuilderRef, LLVMValueRef PointerVal,
826 LLVMValueRef LLVMBuildStore(LLVMBuilderRef, LLVMValueRef Val, LLVMValueRef Ptr);
827 LLVMValueRef LLVMBuildGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
828 LLVMValueRef *Indices, unsigned NumIndices,
830 LLVMValueRef LLVMBuildInBoundsGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
831 LLVMValueRef *Indices, unsigned NumIndices,
833 LLVMValueRef LLVMBuildStructGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
834 unsigned Idx, const char *Name);
835 LLVMValueRef LLVMBuildGlobalString(LLVMBuilderRef B, const char *Str,
837 LLVMValueRef LLVMBuildGlobalStringPtr(LLVMBuilderRef B, const char *Str,
841 LLVMValueRef LLVMBuildTrunc(LLVMBuilderRef, LLVMValueRef Val,
842 LLVMTypeRef DestTy, const char *Name);
843 LLVMValueRef LLVMBuildZExt(LLVMBuilderRef, LLVMValueRef Val,
844 LLVMTypeRef DestTy, const char *Name);
845 LLVMValueRef LLVMBuildSExt(LLVMBuilderRef, LLVMValueRef Val,
846 LLVMTypeRef DestTy, const char *Name);
847 LLVMValueRef LLVMBuildFPToUI(LLVMBuilderRef, LLVMValueRef Val,
848 LLVMTypeRef DestTy, const char *Name);
849 LLVMValueRef LLVMBuildFPToSI(LLVMBuilderRef, LLVMValueRef Val,
850 LLVMTypeRef DestTy, const char *Name);
851 LLVMValueRef LLVMBuildUIToFP(LLVMBuilderRef, LLVMValueRef Val,
852 LLVMTypeRef DestTy, const char *Name);
853 LLVMValueRef LLVMBuildSIToFP(LLVMBuilderRef, LLVMValueRef Val,
854 LLVMTypeRef DestTy, const char *Name);
855 LLVMValueRef LLVMBuildFPTrunc(LLVMBuilderRef, LLVMValueRef Val,
856 LLVMTypeRef DestTy, const char *Name);
857 LLVMValueRef LLVMBuildFPExt(LLVMBuilderRef, LLVMValueRef Val,
858 LLVMTypeRef DestTy, const char *Name);
859 LLVMValueRef LLVMBuildPtrToInt(LLVMBuilderRef, LLVMValueRef Val,
860 LLVMTypeRef DestTy, const char *Name);
861 LLVMValueRef LLVMBuildIntToPtr(LLVMBuilderRef, LLVMValueRef Val,
862 LLVMTypeRef DestTy, const char *Name);
863 LLVMValueRef LLVMBuildBitCast(LLVMBuilderRef, LLVMValueRef Val,
864 LLVMTypeRef DestTy, const char *Name);
865 LLVMValueRef LLVMBuildZExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
866 LLVMTypeRef DestTy, const char *Name);
867 LLVMValueRef LLVMBuildSExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
868 LLVMTypeRef DestTy, const char *Name);
869 LLVMValueRef LLVMBuildTruncOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
870 LLVMTypeRef DestTy, const char *Name);
871 LLVMValueRef LLVMBuildPointerCast(LLVMBuilderRef, LLVMValueRef Val,
872 LLVMTypeRef DestTy, const char *Name);
873 LLVMValueRef LLVMBuildIntCast(LLVMBuilderRef, LLVMValueRef Val,
874 LLVMTypeRef DestTy, const char *Name);
875 LLVMValueRef LLVMBuildFPCast(LLVMBuilderRef, LLVMValueRef Val,
876 LLVMTypeRef DestTy, const char *Name);
879 LLVMValueRef LLVMBuildICmp(LLVMBuilderRef, LLVMIntPredicate Op,
880 LLVMValueRef LHS, LLVMValueRef RHS,
882 LLVMValueRef LLVMBuildFCmp(LLVMBuilderRef, LLVMRealPredicate Op,
883 LLVMValueRef LHS, LLVMValueRef RHS,
886 /* Miscellaneous instructions */
887 LLVMValueRef LLVMBuildPhi(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
888 LLVMValueRef LLVMBuildCall(LLVMBuilderRef, LLVMValueRef Fn,
889 LLVMValueRef *Args, unsigned NumArgs,
891 LLVMValueRef LLVMBuildSelect(LLVMBuilderRef, LLVMValueRef If,
892 LLVMValueRef Then, LLVMValueRef Else,
894 LLVMValueRef LLVMBuildVAArg(LLVMBuilderRef, LLVMValueRef List, LLVMTypeRef Ty,
896 LLVMValueRef LLVMBuildExtractElement(LLVMBuilderRef, LLVMValueRef VecVal,
897 LLVMValueRef Index, const char *Name);
898 LLVMValueRef LLVMBuildInsertElement(LLVMBuilderRef, LLVMValueRef VecVal,
899 LLVMValueRef EltVal, LLVMValueRef Index,
901 LLVMValueRef LLVMBuildShuffleVector(LLVMBuilderRef, LLVMValueRef V1,
902 LLVMValueRef V2, LLVMValueRef Mask,
904 LLVMValueRef LLVMBuildExtractValue(LLVMBuilderRef, LLVMValueRef AggVal,
905 unsigned Index, const char *Name);
906 LLVMValueRef LLVMBuildInsertValue(LLVMBuilderRef, LLVMValueRef AggVal,
907 LLVMValueRef EltVal, unsigned Index,
910 LLVMValueRef LLVMBuildIsNull(LLVMBuilderRef, LLVMValueRef Val,
912 LLVMValueRef LLVMBuildIsNotNull(LLVMBuilderRef, LLVMValueRef Val,
914 LLVMValueRef LLVMBuildPtrDiff(LLVMBuilderRef, LLVMValueRef LHS,
915 LLVMValueRef RHS, const char *Name);
918 /*===-- Module providers --------------------------------------------------===*/
920 /* Encapsulates the module M in a module provider, taking ownership of the
922 * See the constructor llvm::ExistingModuleProvider::ExistingModuleProvider.
924 LLVMModuleProviderRef
925 LLVMCreateModuleProviderForExistingModule(LLVMModuleRef M);
927 /* Destroys the module provider MP as well as the contained module.
928 * See the destructor llvm::ModuleProvider::~ModuleProvider.
930 void LLVMDisposeModuleProvider(LLVMModuleProviderRef MP);
933 /*===-- Memory buffers ----------------------------------------------------===*/
935 int LLVMCreateMemoryBufferWithContentsOfFile(const char *Path,
936 LLVMMemoryBufferRef *OutMemBuf,
938 int LLVMCreateMemoryBufferWithSTDIN(LLVMMemoryBufferRef *OutMemBuf,
940 void LLVMDisposeMemoryBuffer(LLVMMemoryBufferRef MemBuf);
943 /*===-- Pass Managers -----------------------------------------------------===*/
945 /** Constructs a new whole-module pass pipeline. This type of pipeline is
946 suitable for link-time optimization and whole-module transformations.
947 See llvm::PassManager::PassManager. */
948 LLVMPassManagerRef LLVMCreatePassManager(void);
950 /** Constructs a new function-by-function pass pipeline over the module
951 provider. It does not take ownership of the module provider. This type of
952 pipeline is suitable for code generation and JIT compilation tasks.
953 See llvm::FunctionPassManager::FunctionPassManager. */
954 LLVMPassManagerRef LLVMCreateFunctionPassManager(LLVMModuleProviderRef MP);
956 /** Initializes, executes on the provided module, and finalizes all of the
957 passes scheduled in the pass manager. Returns 1 if any of the passes
958 modified the module, 0 otherwise. See llvm::PassManager::run(Module&). */
959 int LLVMRunPassManager(LLVMPassManagerRef PM, LLVMModuleRef M);
961 /** Initializes all of the function passes scheduled in the function pass
962 manager. Returns 1 if any of the passes modified the module, 0 otherwise.
963 See llvm::FunctionPassManager::doInitialization. */
964 int LLVMInitializeFunctionPassManager(LLVMPassManagerRef FPM);
966 /** Executes all of the function passes scheduled in the function pass manager
967 on the provided function. Returns 1 if any of the passes modified the
968 function, false otherwise.
969 See llvm::FunctionPassManager::run(Function&). */
970 int LLVMRunFunctionPassManager(LLVMPassManagerRef FPM, LLVMValueRef F);
972 /** Finalizes all of the function passes scheduled in in the function pass
973 manager. Returns 1 if any of the passes modified the module, 0 otherwise.
974 See llvm::FunctionPassManager::doFinalization. */
975 int LLVMFinalizeFunctionPassManager(LLVMPassManagerRef FPM);
977 /** Frees the memory of a pass pipeline. For function pipelines, does not free
979 See llvm::PassManagerBase::~PassManagerBase. */
980 void LLVMDisposePassManager(LLVMPassManagerRef PM);
987 class ModuleProvider;
989 class PassManagerBase;
991 #define DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \
992 inline ty *unwrap(ref P) { \
993 return reinterpret_cast<ty*>(P); \
996 inline ref wrap(const ty *P) { \
997 return reinterpret_cast<ref>(const_cast<ty*>(P)); \
1000 #define DEFINE_ISA_CONVERSION_FUNCTIONS(ty, ref) \
1001 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \
1003 template<typename T> \
1004 inline T *unwrap(ref P) { \
1005 return cast<T>(unwrap(P)); \
1008 #define DEFINE_STDCXX_CONVERSION_FUNCTIONS(ty, ref) \
1009 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \
1011 template<typename T> \
1012 inline T *unwrap(ref P) { \
1013 T *Q = dynamic_cast<T*>(unwrap(P)); \
1014 assert(Q && "Invalid cast!"); \
1018 DEFINE_ISA_CONVERSION_FUNCTIONS (Type, LLVMTypeRef )
1019 DEFINE_ISA_CONVERSION_FUNCTIONS (Value, LLVMValueRef )
1020 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(Module, LLVMModuleRef )
1021 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(BasicBlock, LLVMBasicBlockRef )
1022 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(IRBuilder<>, LLVMBuilderRef )
1023 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(PATypeHolder, LLVMTypeHandleRef )
1024 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ModuleProvider, LLVMModuleProviderRef)
1025 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(MemoryBuffer, LLVMMemoryBufferRef )
1026 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(LLVMContext, LLVMContextRef )
1027 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(Use, LLVMUseIteratorRef )
1028 DEFINE_STDCXX_CONVERSION_FUNCTIONS(PassManagerBase, LLVMPassManagerRef )
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) */