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