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 \*===----------------------------------------------------------------------===*/
38 /* Need these includes to support the LLVM 'cast' template for the C++ 'wrap'
39 and 'unwrap' conversion functions. */
40 #include "llvm/Module.h"
41 #include "llvm/Support/IRBuilder.h"
50 * The top-level container for all LLVM global data. See the LLVMContext class.
52 typedef struct LLVMOpaqueContext *LLVMContextRef;
55 * The top-level container for all other LLVM Intermediate Representation (IR)
56 * objects. See the llvm::Module class.
58 typedef struct LLVMOpaqueModule *LLVMModuleRef;
61 * Each value in the LLVM IR has a type, an LLVMTypeRef. See the llvm::Type
64 typedef struct LLVMOpaqueType *LLVMTypeRef;
67 * When building recursive types using LLVMRefineType, LLVMTypeRef values may
68 * become invalid; use LLVMTypeHandleRef to resolve this problem. See the
69 * llvm::AbstractTypeHolder class.
71 typedef struct LLVMOpaqueTypeHandle *LLVMTypeHandleRef;
73 typedef struct LLVMOpaqueValue *LLVMValueRef;
74 typedef struct LLVMOpaqueBasicBlock *LLVMBasicBlockRef;
75 typedef struct LLVMOpaqueBuilder *LLVMBuilderRef;
77 /* Used to provide a module to JIT or interpreter.
78 * See the llvm::ModuleProvider class.
80 typedef struct LLVMOpaqueModuleProvider *LLVMModuleProviderRef;
82 /* Used to provide a module to JIT or interpreter.
83 * See the llvm::MemoryBuffer class.
85 typedef struct LLVMOpaqueMemoryBuffer *LLVMMemoryBufferRef;
87 /** See the llvm::PassManagerBase class. */
88 typedef struct LLVMOpaquePassManager *LLVMPassManagerRef;
91 LLVMZExtAttribute = 1<<0,
92 LLVMSExtAttribute = 1<<1,
93 LLVMNoReturnAttribute = 1<<2,
94 LLVMInRegAttribute = 1<<3,
95 LLVMStructRetAttribute = 1<<4,
96 LLVMNoUnwindAttribute = 1<<5,
97 LLVMNoAliasAttribute = 1<<6,
98 LLVMByValAttribute = 1<<7,
99 LLVMNestAttribute = 1<<8,
100 LLVMReadNoneAttribute = 1<<9,
101 LLVMReadOnlyAttribute = 1<<10,
102 LLVMNoInlineAttribute = 1<<11,
103 LLVMAlwaysInlineAttribute = 1<<12,
104 LLVMOptimizeForSizeAttribute = 1<<13,
105 LLVMStackProtectAttribute = 1<<14,
106 LLVMStackProtectReqAttribute = 1<<15,
107 LLVMNoCaptureAttribute = 1<<21,
108 LLVMNoRedZoneAttribute = 1<<22,
109 LLVMNoImplicitFloatAttribute = 1<<23,
110 LLVMNakedAttribute = 1<<24
114 LLVMVoidTypeKind, /**< type with no size */
115 LLVMFloatTypeKind, /**< 32 bit floating point type */
116 LLVMDoubleTypeKind, /**< 64 bit floating point type */
117 LLVMX86_FP80TypeKind, /**< 80 bit floating point type (X87) */
118 LLVMFP128TypeKind, /**< 128 bit floating point type (112-bit mantissa)*/
119 LLVMPPC_FP128TypeKind, /**< 128 bit floating point type (two 64-bits) */
120 LLVMLabelTypeKind, /**< Labels */
121 LLVMIntegerTypeKind, /**< Arbitrary bit width integers */
122 LLVMFunctionTypeKind, /**< Functions */
123 LLVMStructTypeKind, /**< Structures */
124 LLVMArrayTypeKind, /**< Arrays */
125 LLVMPointerTypeKind, /**< Pointers */
126 LLVMOpaqueTypeKind, /**< Opaque: type with unknown structure */
127 LLVMVectorTypeKind, /**< SIMD 'packed' format, or other vector type */
128 LLVMMetadataTypeKind /**< Metadata */
132 LLVMExternalLinkage, /**< Externally visible function */
133 LLVMAvailableExternallyLinkage,
134 LLVMLinkOnceAnyLinkage, /**< Keep one copy of function when linking (inline)*/
135 LLVMLinkOnceODRLinkage, /**< Same, but only replaced by something
137 LLVMWeakAnyLinkage, /**< Keep one copy of function when linking (weak) */
138 LLVMWeakODRLinkage, /**< Same, but only replaced by something
140 LLVMAppendingLinkage, /**< Special purpose, only applies to global arrays */
141 LLVMInternalLinkage, /**< Rename collisions when linking (static
143 LLVMPrivateLinkage, /**< Like Internal, but omit from symbol table */
144 LLVMDLLImportLinkage, /**< Function to be imported from DLL */
145 LLVMDLLExportLinkage, /**< Function to be accessible from DLL */
146 LLVMExternalWeakLinkage,/**< ExternalWeak linkage description */
147 LLVMGhostLinkage, /**< Stand-in functions for streaming fns from
149 LLVMCommonLinkage, /**< Tentative definitions */
150 LLVMLinkerPrivateLinkage /**< Like Private, but linker removes. */
154 LLVMDefaultVisibility, /**< The GV is visible */
155 LLVMHiddenVisibility, /**< The GV is hidden */
156 LLVMProtectedVisibility /**< The GV is protected */
161 LLVMFastCallConv = 8,
162 LLVMColdCallConv = 9,
163 LLVMX86StdcallCallConv = 64,
164 LLVMX86FastcallCallConv = 65
168 LLVMIntEQ = 32, /**< equal */
169 LLVMIntNE, /**< not equal */
170 LLVMIntUGT, /**< unsigned greater than */
171 LLVMIntUGE, /**< unsigned greater or equal */
172 LLVMIntULT, /**< unsigned less than */
173 LLVMIntULE, /**< unsigned less or equal */
174 LLVMIntSGT, /**< signed greater than */
175 LLVMIntSGE, /**< signed greater or equal */
176 LLVMIntSLT, /**< signed less than */
177 LLVMIntSLE /**< signed less or equal */
181 LLVMRealPredicateFalse, /**< Always false (always folded) */
182 LLVMRealOEQ, /**< True if ordered and equal */
183 LLVMRealOGT, /**< True if ordered and greater than */
184 LLVMRealOGE, /**< True if ordered and greater than or equal */
185 LLVMRealOLT, /**< True if ordered and less than */
186 LLVMRealOLE, /**< True if ordered and less than or equal */
187 LLVMRealONE, /**< True if ordered and operands are unequal */
188 LLVMRealORD, /**< True if ordered (no nans) */
189 LLVMRealUNO, /**< True if unordered: isnan(X) | isnan(Y) */
190 LLVMRealUEQ, /**< True if unordered or equal */
191 LLVMRealUGT, /**< True if unordered or greater than */
192 LLVMRealUGE, /**< True if unordered, greater than, or equal */
193 LLVMRealULT, /**< True if unordered or less than */
194 LLVMRealULE, /**< True if unordered, less than, or equal */
195 LLVMRealUNE, /**< True if unordered or not equal */
196 LLVMRealPredicateTrue /**< Always true (always folded) */
200 /*===-- Error handling ----------------------------------------------------===*/
202 void LLVMDisposeMessage(char *Message);
205 /*===-- Modules -----------------------------------------------------------===*/
207 /* Create and destroy contexts. */
208 LLVMContextRef LLVMContextCreate();
209 LLVMContextRef LLVMGetGlobalContext();
210 void LLVMContextDispose(LLVMContextRef C);
212 /* Create and destroy modules. */
213 /** See llvm::Module::Module. */
214 LLVMModuleRef LLVMModuleCreateWithName(const char *ModuleID);
215 LLVMModuleRef LLVMModuleCreateWithNameInContext(const char *ModuleID,
218 /** See llvm::Module::~Module. */
219 void LLVMDisposeModule(LLVMModuleRef M);
221 /** Data layout. See Module::getDataLayout. */
222 const char *LLVMGetDataLayout(LLVMModuleRef M);
223 void LLVMSetDataLayout(LLVMModuleRef M, const char *Triple);
225 /** Target triple. See Module::getTargetTriple. */
226 const char *LLVMGetTarget(LLVMModuleRef M);
227 void LLVMSetTarget(LLVMModuleRef M, const char *Triple);
229 /** See Module::addTypeName. */
230 int LLVMAddTypeName(LLVMModuleRef M, const char *Name, LLVMTypeRef Ty);
231 void LLVMDeleteTypeName(LLVMModuleRef M, const char *Name);
232 LLVMTypeRef LLVMGetTypeByName(LLVMModuleRef M, const char *Name);
234 /** See Module::dump. */
235 void LLVMDumpModule(LLVMModuleRef M);
238 /*===-- Types -------------------------------------------------------------===*/
240 /* LLVM types conform to the following hierarchy:
255 /** See llvm::LLVMTypeKind::getTypeID. */
256 LLVMTypeKind LLVMGetTypeKind(LLVMTypeRef Ty);
258 /** See llvm::LLVMType::getContext. */
259 LLVMContextRef LLVMGetTypeContext(LLVMTypeRef Ty);
261 /* Operations on integer types */
262 LLVMTypeRef LLVMInt1TypeInContext(LLVMContextRef C);
263 LLVMTypeRef LLVMInt8TypeInContext(LLVMContextRef C);
264 LLVMTypeRef LLVMInt16TypeInContext(LLVMContextRef C);
265 LLVMTypeRef LLVMInt32TypeInContext(LLVMContextRef C);
266 LLVMTypeRef LLVMInt64TypeInContext(LLVMContextRef C);
267 LLVMTypeRef LLVMIntTypeInContext(LLVMContextRef C, unsigned NumBits);
269 LLVMTypeRef LLVMInt1Type(void);
270 LLVMTypeRef LLVMInt8Type(void);
271 LLVMTypeRef LLVMInt16Type(void);
272 LLVMTypeRef LLVMInt32Type(void);
273 LLVMTypeRef LLVMInt64Type(void);
274 LLVMTypeRef LLVMIntType(unsigned NumBits);
275 unsigned LLVMGetIntTypeWidth(LLVMTypeRef IntegerTy);
277 /* Operations on real types */
278 LLVMTypeRef LLVMFloatTypeInContext(LLVMContextRef C);
279 LLVMTypeRef LLVMDoubleTypeInContext(LLVMContextRef C);
280 LLVMTypeRef LLVMX86FP80TypeInContext(LLVMContextRef C);
281 LLVMTypeRef LLVMFP128TypeInContext(LLVMContextRef C);
282 LLVMTypeRef LLVMPPCFP128TypeInContext(LLVMContextRef C);
284 LLVMTypeRef LLVMFloatType(void);
285 LLVMTypeRef LLVMDoubleType(void);
286 LLVMTypeRef LLVMX86FP80Type(void);
287 LLVMTypeRef LLVMFP128Type(void);
288 LLVMTypeRef LLVMPPCFP128Type(void);
290 /* Operations on function types */
291 LLVMTypeRef LLVMFunctionType(LLVMTypeRef ReturnType,
292 LLVMTypeRef *ParamTypes, unsigned ParamCount,
294 int LLVMIsFunctionVarArg(LLVMTypeRef FunctionTy);
295 LLVMTypeRef LLVMGetReturnType(LLVMTypeRef FunctionTy);
296 unsigned LLVMCountParamTypes(LLVMTypeRef FunctionTy);
297 void LLVMGetParamTypes(LLVMTypeRef FunctionTy, LLVMTypeRef *Dest);
299 /* Operations on struct types */
300 LLVMTypeRef LLVMStructTypeInContext(LLVMContextRef C, LLVMTypeRef *ElementTypes,
301 unsigned ElementCount, int Packed);
302 LLVMTypeRef LLVMStructType(LLVMTypeRef *ElementTypes, unsigned ElementCount,
304 unsigned LLVMCountStructElementTypes(LLVMTypeRef StructTy);
305 void LLVMGetStructElementTypes(LLVMTypeRef StructTy, LLVMTypeRef *Dest);
306 int LLVMIsPackedStruct(LLVMTypeRef StructTy);
308 /* Operations on array, pointer, and vector types (sequence types) */
309 LLVMTypeRef LLVMArrayType(LLVMTypeRef ElementType, unsigned ElementCount);
310 LLVMTypeRef LLVMPointerType(LLVMTypeRef ElementType, unsigned AddressSpace);
311 LLVMTypeRef LLVMVectorType(LLVMTypeRef ElementType, unsigned ElementCount);
313 LLVMTypeRef LLVMGetElementType(LLVMTypeRef Ty);
314 unsigned LLVMGetArrayLength(LLVMTypeRef ArrayTy);
315 unsigned LLVMGetPointerAddressSpace(LLVMTypeRef PointerTy);
316 unsigned LLVMGetVectorSize(LLVMTypeRef VectorTy);
318 /* Operations on other types */
319 LLVMTypeRef LLVMVoidTypeInContext(LLVMContextRef C);
320 LLVMTypeRef LLVMLabelTypeInContext(LLVMContextRef C);
321 LLVMTypeRef LLVMOpaqueTypeInContext(LLVMContextRef C);
323 LLVMTypeRef LLVMVoidType(void);
324 LLVMTypeRef LLVMLabelType(void);
325 LLVMTypeRef LLVMOpaqueType(void);
327 /* Operations on type handles */
328 LLVMTypeHandleRef LLVMCreateTypeHandle(LLVMTypeRef PotentiallyAbstractTy);
329 void LLVMRefineType(LLVMTypeRef AbstractTy, LLVMTypeRef ConcreteTy);
330 LLVMTypeRef LLVMResolveTypeHandle(LLVMTypeHandleRef TypeHandle);
331 void LLVMDisposeTypeHandle(LLVMTypeHandleRef TypeHandle);
334 /*===-- Values ------------------------------------------------------------===*/
336 /* The bulk of LLVM's object model consists of values, which comprise a very
337 * rich type hierarchy.
340 #define LLVM_FOR_EACH_VALUE_SUBCLASS(macro) \
346 macro(ConstantAggregateZero) \
347 macro(ConstantArray) \
348 macro(ConstantExpr) \
351 macro(ConstantPointerNull) \
352 macro(ConstantStruct) \
353 macro(ConstantVector) \
357 macro(GlobalVariable) \
360 macro(BinaryOperator) \
362 macro(IntrinsicInst) \
363 macro(DbgInfoIntrinsic) \
364 macro(DbgDeclareInst) \
365 macro(DbgFuncStartInst) \
366 macro(DbgRegionEndInst) \
367 macro(DbgRegionStartInst) \
368 macro(DbgStopPointInst) \
369 macro(EHSelectorInst) \
370 macro(MemIntrinsic) \
377 macro(ExtractElementInst) \
378 macro(GetElementPtrInst) \
379 macro(InsertElementInst) \
380 macro(InsertValueInst) \
383 macro(ShuffleVectorInst) \
385 macro(TerminatorInst) \
390 macro(UnreachableInst) \
392 macro(UnaryInstruction) \
393 macro(AllocationInst) \
402 macro(IntToPtrInst) \
403 macro(PtrToIntInst) \
409 macro(ExtractValueInst) \
414 /* Operations on all values */
415 LLVMTypeRef LLVMTypeOf(LLVMValueRef Val);
416 const char *LLVMGetValueName(LLVMValueRef Val);
417 void LLVMSetValueName(LLVMValueRef Val, const char *Name);
418 void LLVMDumpValue(LLVMValueRef Val);
420 /* Conversion functions. Return the input value if it is an instance of the
421 specified class, otherwise NULL. See llvm::dyn_cast_or_null<>. */
422 #define LLVM_DECLARE_VALUE_CAST(name) \
423 LLVMValueRef LLVMIsA##name(LLVMValueRef Val);
424 LLVM_FOR_EACH_VALUE_SUBCLASS(LLVM_DECLARE_VALUE_CAST)
426 /* Operations on constants of any type */
427 LLVMValueRef LLVMConstNull(LLVMTypeRef Ty); /* all zeroes */
428 LLVMValueRef LLVMConstAllOnes(LLVMTypeRef Ty); /* only for int/vector */
429 LLVMValueRef LLVMGetUndef(LLVMTypeRef Ty);
430 int LLVMIsConstant(LLVMValueRef Val);
431 int LLVMIsNull(LLVMValueRef Val);
432 int LLVMIsUndef(LLVMValueRef Val);
433 LLVMValueRef LLVMConstPointerNull(LLVMTypeRef Ty);
435 /* Operations on scalar constants */
436 LLVMValueRef LLVMConstInt(LLVMTypeRef IntTy, unsigned long long N,
438 LLVMValueRef LLVMConstReal(LLVMTypeRef RealTy, double N);
439 LLVMValueRef LLVMConstRealOfString(LLVMTypeRef RealTy, const char *Text);
441 /* Operations on composite constants */
442 LLVMValueRef LLVMConstStringInContext(LLVMContextRef C, const char *Str,
443 unsigned Length, int DontNullTerminate);
444 LLVMValueRef LLVMConstStructInContext(LLVMContextRef C,
445 LLVMValueRef *ConstantVals,
446 unsigned Count, int Packed);
448 LLVMValueRef LLVMConstString(const char *Str, unsigned Length,
449 int DontNullTerminate);
450 LLVMValueRef LLVMConstArray(LLVMTypeRef ElementTy,
451 LLVMValueRef *ConstantVals, unsigned Length);
452 LLVMValueRef LLVMConstStruct(LLVMValueRef *ConstantVals, unsigned Count,
454 LLVMValueRef LLVMConstVector(LLVMValueRef *ScalarConstantVals, unsigned Size);
456 /* Constant expressions */
457 LLVMValueRef LLVMSizeOf(LLVMTypeRef Ty);
458 LLVMValueRef LLVMConstNeg(LLVMValueRef ConstantVal);
459 LLVMValueRef LLVMConstFNeg(LLVMValueRef ConstantVal);
460 LLVMValueRef LLVMConstNot(LLVMValueRef ConstantVal);
461 LLVMValueRef LLVMConstAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
462 LLVMValueRef LLVMConstNSWAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
463 LLVMValueRef LLVMConstFAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
464 LLVMValueRef LLVMConstSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
465 LLVMValueRef LLVMConstFSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
466 LLVMValueRef LLVMConstMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
467 LLVMValueRef LLVMConstFMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
468 LLVMValueRef LLVMConstUDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
469 LLVMValueRef LLVMConstSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
470 LLVMValueRef LLVMConstExactSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
471 LLVMValueRef LLVMConstFDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
472 LLVMValueRef LLVMConstURem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
473 LLVMValueRef LLVMConstSRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
474 LLVMValueRef LLVMConstFRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
475 LLVMValueRef LLVMConstAnd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
476 LLVMValueRef LLVMConstOr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
477 LLVMValueRef LLVMConstXor(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
478 LLVMValueRef LLVMConstICmp(LLVMIntPredicate Predicate,
479 LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
480 LLVMValueRef LLVMConstFCmp(LLVMRealPredicate Predicate,
481 LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
482 LLVMValueRef LLVMConstShl(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
483 LLVMValueRef LLVMConstLShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
484 LLVMValueRef LLVMConstAShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
485 LLVMValueRef LLVMConstGEP(LLVMValueRef ConstantVal,
486 LLVMValueRef *ConstantIndices, unsigned NumIndices);
487 LLVMValueRef LLVMConstInBoundsGEP(LLVMValueRef ConstantVal,
488 LLVMValueRef *ConstantIndices,
489 unsigned NumIndices);
490 LLVMValueRef LLVMConstTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
491 LLVMValueRef LLVMConstSExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
492 LLVMValueRef LLVMConstZExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
493 LLVMValueRef LLVMConstFPTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
494 LLVMValueRef LLVMConstFPExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
495 LLVMValueRef LLVMConstUIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
496 LLVMValueRef LLVMConstSIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
497 LLVMValueRef LLVMConstFPToUI(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
498 LLVMValueRef LLVMConstFPToSI(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
499 LLVMValueRef LLVMConstPtrToInt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
500 LLVMValueRef LLVMConstIntToPtr(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
501 LLVMValueRef LLVMConstBitCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
502 LLVMValueRef LLVMConstZExtOrBitCast(LLVMValueRef ConstantVal,
504 LLVMValueRef LLVMConstSExtOrBitCast(LLVMValueRef ConstantVal,
506 LLVMValueRef LLVMConstTruncOrBitCast(LLVMValueRef ConstantVal,
508 LLVMValueRef LLVMConstPointerCast(LLVMValueRef ConstantVal,
510 LLVMValueRef LLVMConstIntCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType,
512 LLVMValueRef LLVMConstFPCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
513 LLVMValueRef LLVMConstSelect(LLVMValueRef ConstantCondition,
514 LLVMValueRef ConstantIfTrue,
515 LLVMValueRef ConstantIfFalse);
516 LLVMValueRef LLVMConstExtractElement(LLVMValueRef VectorConstant,
517 LLVMValueRef IndexConstant);
518 LLVMValueRef LLVMConstInsertElement(LLVMValueRef VectorConstant,
519 LLVMValueRef ElementValueConstant,
520 LLVMValueRef IndexConstant);
521 LLVMValueRef LLVMConstShuffleVector(LLVMValueRef VectorAConstant,
522 LLVMValueRef VectorBConstant,
523 LLVMValueRef MaskConstant);
524 LLVMValueRef LLVMConstExtractValue(LLVMValueRef AggConstant, unsigned *IdxList,
526 LLVMValueRef LLVMConstInsertValue(LLVMValueRef AggConstant,
527 LLVMValueRef ElementValueConstant,
528 unsigned *IdxList, unsigned NumIdx);
529 LLVMValueRef LLVMConstInlineAsm(LLVMTypeRef Ty,
530 const char *AsmString, const char *Constraints,
533 /* Operations on global variables, functions, and aliases (globals) */
534 LLVMModuleRef LLVMGetGlobalParent(LLVMValueRef Global);
535 int LLVMIsDeclaration(LLVMValueRef Global);
536 LLVMLinkage LLVMGetLinkage(LLVMValueRef Global);
537 void LLVMSetLinkage(LLVMValueRef Global, LLVMLinkage Linkage);
538 const char *LLVMGetSection(LLVMValueRef Global);
539 void LLVMSetSection(LLVMValueRef Global, const char *Section);
540 LLVMVisibility LLVMGetVisibility(LLVMValueRef Global);
541 void LLVMSetVisibility(LLVMValueRef Global, LLVMVisibility Viz);
542 unsigned LLVMGetAlignment(LLVMValueRef Global);
543 void LLVMSetAlignment(LLVMValueRef Global, unsigned Bytes);
545 /* Operations on global variables */
546 LLVMValueRef LLVMAddGlobal(LLVMModuleRef M, LLVMTypeRef Ty, const char *Name);
547 LLVMValueRef LLVMGetNamedGlobal(LLVMModuleRef M, const char *Name);
548 LLVMValueRef LLVMGetFirstGlobal(LLVMModuleRef M);
549 LLVMValueRef LLVMGetLastGlobal(LLVMModuleRef M);
550 LLVMValueRef LLVMGetNextGlobal(LLVMValueRef GlobalVar);
551 LLVMValueRef LLVMGetPreviousGlobal(LLVMValueRef GlobalVar);
552 void LLVMDeleteGlobal(LLVMValueRef GlobalVar);
553 LLVMValueRef LLVMGetInitializer(LLVMValueRef GlobalVar);
554 void LLVMSetInitializer(LLVMValueRef GlobalVar, LLVMValueRef ConstantVal);
555 int LLVMIsThreadLocal(LLVMValueRef GlobalVar);
556 void LLVMSetThreadLocal(LLVMValueRef GlobalVar, int IsThreadLocal);
557 int LLVMIsGlobalConstant(LLVMValueRef GlobalVar);
558 void LLVMSetGlobalConstant(LLVMValueRef GlobalVar, int IsConstant);
560 /* Operations on aliases */
561 LLVMValueRef LLVMAddAlias(LLVMModuleRef M, LLVMTypeRef Ty, LLVMValueRef Aliasee,
564 /* Operations on functions */
565 LLVMValueRef LLVMAddFunction(LLVMModuleRef M, const char *Name,
566 LLVMTypeRef FunctionTy);
567 LLVMValueRef LLVMGetNamedFunction(LLVMModuleRef M, const char *Name);
568 LLVMValueRef LLVMGetFirstFunction(LLVMModuleRef M);
569 LLVMValueRef LLVMGetLastFunction(LLVMModuleRef M);
570 LLVMValueRef LLVMGetNextFunction(LLVMValueRef Fn);
571 LLVMValueRef LLVMGetPreviousFunction(LLVMValueRef Fn);
572 void LLVMDeleteFunction(LLVMValueRef Fn);
573 unsigned LLVMGetIntrinsicID(LLVMValueRef Fn);
574 unsigned LLVMGetFunctionCallConv(LLVMValueRef Fn);
575 void LLVMSetFunctionCallConv(LLVMValueRef Fn, unsigned CC);
576 const char *LLVMGetGC(LLVMValueRef Fn);
577 void LLVMSetGC(LLVMValueRef Fn, const char *Name);
578 void LLVMAddFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA);
579 void LLVMRemoveFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA);
581 /* Operations on parameters */
582 unsigned LLVMCountParams(LLVMValueRef Fn);
583 void LLVMGetParams(LLVMValueRef Fn, LLVMValueRef *Params);
584 LLVMValueRef LLVMGetParam(LLVMValueRef Fn, unsigned Index);
585 LLVMValueRef LLVMGetParamParent(LLVMValueRef Inst);
586 LLVMValueRef LLVMGetFirstParam(LLVMValueRef Fn);
587 LLVMValueRef LLVMGetLastParam(LLVMValueRef Fn);
588 LLVMValueRef LLVMGetNextParam(LLVMValueRef Arg);
589 LLVMValueRef LLVMGetPreviousParam(LLVMValueRef Arg);
590 void LLVMAddAttribute(LLVMValueRef Arg, LLVMAttribute PA);
591 void LLVMRemoveAttribute(LLVMValueRef Arg, LLVMAttribute PA);
592 void LLVMSetParamAlignment(LLVMValueRef Arg, unsigned align);
594 /* Operations on basic blocks */
595 LLVMValueRef LLVMBasicBlockAsValue(LLVMBasicBlockRef BB);
596 int LLVMValueIsBasicBlock(LLVMValueRef Val);
597 LLVMBasicBlockRef LLVMValueAsBasicBlock(LLVMValueRef Val);
598 LLVMValueRef LLVMGetBasicBlockParent(LLVMBasicBlockRef BB);
599 unsigned LLVMCountBasicBlocks(LLVMValueRef Fn);
600 void LLVMGetBasicBlocks(LLVMValueRef Fn, LLVMBasicBlockRef *BasicBlocks);
601 LLVMBasicBlockRef LLVMGetFirstBasicBlock(LLVMValueRef Fn);
602 LLVMBasicBlockRef LLVMGetLastBasicBlock(LLVMValueRef Fn);
603 LLVMBasicBlockRef LLVMGetNextBasicBlock(LLVMBasicBlockRef BB);
604 LLVMBasicBlockRef LLVMGetPreviousBasicBlock(LLVMBasicBlockRef BB);
605 LLVMBasicBlockRef LLVMGetEntryBasicBlock(LLVMValueRef Fn);
607 LLVMBasicBlockRef LLVMAppendBasicBlockInContext(LLVMContextRef C,
610 LLVMBasicBlockRef LLVMInsertBasicBlockInContext(LLVMContextRef C,
611 LLVMBasicBlockRef BB,
614 LLVMBasicBlockRef LLVMAppendBasicBlock(LLVMValueRef Fn, const char *Name);
615 LLVMBasicBlockRef LLVMInsertBasicBlock(LLVMBasicBlockRef InsertBeforeBB,
617 void LLVMDeleteBasicBlock(LLVMBasicBlockRef BB);
619 /* Operations on instructions */
620 LLVMBasicBlockRef LLVMGetInstructionParent(LLVMValueRef Inst);
621 LLVMValueRef LLVMGetFirstInstruction(LLVMBasicBlockRef BB);
622 LLVMValueRef LLVMGetLastInstruction(LLVMBasicBlockRef BB);
623 LLVMValueRef LLVMGetNextInstruction(LLVMValueRef Inst);
624 LLVMValueRef LLVMGetPreviousInstruction(LLVMValueRef Inst);
626 /* Operations on call sites */
627 void LLVMSetInstructionCallConv(LLVMValueRef Instr, unsigned CC);
628 unsigned LLVMGetInstructionCallConv(LLVMValueRef Instr);
629 void LLVMAddInstrAttribute(LLVMValueRef Instr, unsigned index, LLVMAttribute);
630 void LLVMRemoveInstrAttribute(LLVMValueRef Instr, unsigned index,
632 void LLVMSetInstrParamAlignment(LLVMValueRef Instr, unsigned index,
635 /* Operations on call instructions (only) */
636 int LLVMIsTailCall(LLVMValueRef CallInst);
637 void LLVMSetTailCall(LLVMValueRef CallInst, int IsTailCall);
639 /* Operations on phi nodes */
640 void LLVMAddIncoming(LLVMValueRef PhiNode, LLVMValueRef *IncomingValues,
641 LLVMBasicBlockRef *IncomingBlocks, unsigned Count);
642 unsigned LLVMCountIncoming(LLVMValueRef PhiNode);
643 LLVMValueRef LLVMGetIncomingValue(LLVMValueRef PhiNode, unsigned Index);
644 LLVMBasicBlockRef LLVMGetIncomingBlock(LLVMValueRef PhiNode, unsigned Index);
646 /*===-- Instruction builders ----------------------------------------------===*/
648 /* An instruction builder represents a point within a basic block, and is the
649 * exclusive means of building instructions using the C interface.
652 LLVMBuilderRef LLVMCreateBuilderInContext(LLVMContextRef C);
653 LLVMBuilderRef LLVMCreateBuilder(void);
654 void LLVMPositionBuilder(LLVMBuilderRef Builder, LLVMBasicBlockRef Block,
656 void LLVMPositionBuilderBefore(LLVMBuilderRef Builder, LLVMValueRef Instr);
657 void LLVMPositionBuilderAtEnd(LLVMBuilderRef Builder, LLVMBasicBlockRef Block);
658 LLVMBasicBlockRef LLVMGetInsertBlock(LLVMBuilderRef Builder);
659 void LLVMClearInsertionPosition(LLVMBuilderRef Builder);
660 void LLVMInsertIntoBuilder(LLVMBuilderRef Builder, LLVMValueRef Instr);
661 void LLVMDisposeBuilder(LLVMBuilderRef Builder);
664 LLVMValueRef LLVMBuildRetVoid(LLVMBuilderRef);
665 LLVMValueRef LLVMBuildRet(LLVMBuilderRef, LLVMValueRef V);
666 LLVMValueRef LLVMBuildAggregateRet(LLVMBuilderRef, LLVMValueRef RetVals,
668 LLVMValueRef LLVMBuildBr(LLVMBuilderRef, LLVMBasicBlockRef Dest);
669 LLVMValueRef LLVMBuildCondBr(LLVMBuilderRef, LLVMValueRef If,
670 LLVMBasicBlockRef Then, LLVMBasicBlockRef Else);
671 LLVMValueRef LLVMBuildSwitch(LLVMBuilderRef, LLVMValueRef V,
672 LLVMBasicBlockRef Else, unsigned NumCases);
673 LLVMValueRef LLVMBuildInvoke(LLVMBuilderRef, LLVMValueRef Fn,
674 LLVMValueRef *Args, unsigned NumArgs,
675 LLVMBasicBlockRef Then, LLVMBasicBlockRef Catch,
677 LLVMValueRef LLVMBuildUnwind(LLVMBuilderRef);
678 LLVMValueRef LLVMBuildUnreachable(LLVMBuilderRef);
680 /* Add a case to the switch instruction */
681 void LLVMAddCase(LLVMValueRef Switch, LLVMValueRef OnVal,
682 LLVMBasicBlockRef Dest);
685 LLVMValueRef LLVMBuildAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
687 LLVMValueRef LLVMBuildNSWAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
689 LLVMValueRef LLVMBuildFAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
691 LLVMValueRef LLVMBuildSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
693 LLVMValueRef LLVMBuildFSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
695 LLVMValueRef LLVMBuildMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
697 LLVMValueRef LLVMBuildFMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
699 LLVMValueRef LLVMBuildUDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
701 LLVMValueRef LLVMBuildSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
703 LLVMValueRef LLVMBuildExactSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
705 LLVMValueRef LLVMBuildFDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
707 LLVMValueRef LLVMBuildURem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
709 LLVMValueRef LLVMBuildSRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
711 LLVMValueRef LLVMBuildFRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
713 LLVMValueRef LLVMBuildShl(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
715 LLVMValueRef LLVMBuildLShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
717 LLVMValueRef LLVMBuildAShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
719 LLVMValueRef LLVMBuildAnd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
721 LLVMValueRef LLVMBuildOr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
723 LLVMValueRef LLVMBuildXor(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
725 LLVMValueRef LLVMBuildNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name);
726 LLVMValueRef LLVMBuildNot(LLVMBuilderRef, LLVMValueRef V, const char *Name);
729 LLVMValueRef LLVMBuildMalloc(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
730 LLVMValueRef LLVMBuildArrayMalloc(LLVMBuilderRef, LLVMTypeRef Ty,
731 LLVMValueRef Val, const char *Name);
732 LLVMValueRef LLVMBuildAlloca(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
733 LLVMValueRef LLVMBuildArrayAlloca(LLVMBuilderRef, LLVMTypeRef Ty,
734 LLVMValueRef Val, const char *Name);
735 LLVMValueRef LLVMBuildFree(LLVMBuilderRef, LLVMValueRef PointerVal);
736 LLVMValueRef LLVMBuildLoad(LLVMBuilderRef, LLVMValueRef PointerVal,
738 LLVMValueRef LLVMBuildStore(LLVMBuilderRef, LLVMValueRef Val, LLVMValueRef Ptr);
739 LLVMValueRef LLVMBuildGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
740 LLVMValueRef *Indices, unsigned NumIndices,
742 LLVMValueRef LLVMBuildInBoundsGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
743 LLVMValueRef *Indices, unsigned NumIndices,
745 LLVMValueRef LLVMBuildStructGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
746 unsigned Idx, const char *Name);
747 LLVMValueRef LLVMBuildGlobalString(LLVMBuilderRef B, const char *Str,
749 LLVMValueRef LLVMBuildGlobalStringPtr(LLVMBuilderRef B, const char *Str,
753 LLVMValueRef LLVMBuildTrunc(LLVMBuilderRef, LLVMValueRef Val,
754 LLVMTypeRef DestTy, const char *Name);
755 LLVMValueRef LLVMBuildZExt(LLVMBuilderRef, LLVMValueRef Val,
756 LLVMTypeRef DestTy, const char *Name);
757 LLVMValueRef LLVMBuildSExt(LLVMBuilderRef, LLVMValueRef Val,
758 LLVMTypeRef DestTy, const char *Name);
759 LLVMValueRef LLVMBuildFPToUI(LLVMBuilderRef, LLVMValueRef Val,
760 LLVMTypeRef DestTy, const char *Name);
761 LLVMValueRef LLVMBuildFPToSI(LLVMBuilderRef, LLVMValueRef Val,
762 LLVMTypeRef DestTy, const char *Name);
763 LLVMValueRef LLVMBuildUIToFP(LLVMBuilderRef, LLVMValueRef Val,
764 LLVMTypeRef DestTy, const char *Name);
765 LLVMValueRef LLVMBuildSIToFP(LLVMBuilderRef, LLVMValueRef Val,
766 LLVMTypeRef DestTy, const char *Name);
767 LLVMValueRef LLVMBuildFPTrunc(LLVMBuilderRef, LLVMValueRef Val,
768 LLVMTypeRef DestTy, const char *Name);
769 LLVMValueRef LLVMBuildFPExt(LLVMBuilderRef, LLVMValueRef Val,
770 LLVMTypeRef DestTy, const char *Name);
771 LLVMValueRef LLVMBuildPtrToInt(LLVMBuilderRef, LLVMValueRef Val,
772 LLVMTypeRef DestTy, const char *Name);
773 LLVMValueRef LLVMBuildIntToPtr(LLVMBuilderRef, LLVMValueRef Val,
774 LLVMTypeRef DestTy, const char *Name);
775 LLVMValueRef LLVMBuildBitCast(LLVMBuilderRef, LLVMValueRef Val,
776 LLVMTypeRef DestTy, const char *Name);
777 LLVMValueRef LLVMBuildZExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
778 LLVMTypeRef DestTy, const char *Name);
779 LLVMValueRef LLVMBuildSExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
780 LLVMTypeRef DestTy, const char *Name);
781 LLVMValueRef LLVMBuildTruncOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
782 LLVMTypeRef DestTy, const char *Name);
783 LLVMValueRef LLVMBuildPointerCast(LLVMBuilderRef, LLVMValueRef Val,
784 LLVMTypeRef DestTy, const char *Name);
785 LLVMValueRef LLVMBuildIntCast(LLVMBuilderRef, LLVMValueRef Val,
786 LLVMTypeRef DestTy, const char *Name);
787 LLVMValueRef LLVMBuildFPCast(LLVMBuilderRef, LLVMValueRef Val,
788 LLVMTypeRef DestTy, const char *Name);
791 LLVMValueRef LLVMBuildICmp(LLVMBuilderRef, LLVMIntPredicate Op,
792 LLVMValueRef LHS, LLVMValueRef RHS,
794 LLVMValueRef LLVMBuildFCmp(LLVMBuilderRef, LLVMRealPredicate Op,
795 LLVMValueRef LHS, LLVMValueRef RHS,
798 /* Miscellaneous instructions */
799 LLVMValueRef LLVMBuildPhi(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
800 LLVMValueRef LLVMBuildCall(LLVMBuilderRef, LLVMValueRef Fn,
801 LLVMValueRef *Args, unsigned NumArgs,
803 LLVMValueRef LLVMBuildSelect(LLVMBuilderRef, LLVMValueRef If,
804 LLVMValueRef Then, LLVMValueRef Else,
806 LLVMValueRef LLVMBuildVAArg(LLVMBuilderRef, LLVMValueRef List, LLVMTypeRef Ty,
808 LLVMValueRef LLVMBuildExtractElement(LLVMBuilderRef, LLVMValueRef VecVal,
809 LLVMValueRef Index, const char *Name);
810 LLVMValueRef LLVMBuildInsertElement(LLVMBuilderRef, LLVMValueRef VecVal,
811 LLVMValueRef EltVal, LLVMValueRef Index,
813 LLVMValueRef LLVMBuildShuffleVector(LLVMBuilderRef, LLVMValueRef V1,
814 LLVMValueRef V2, LLVMValueRef Mask,
816 LLVMValueRef LLVMBuildExtractValue(LLVMBuilderRef, LLVMValueRef AggVal,
817 unsigned Index, const char *Name);
818 LLVMValueRef LLVMBuildInsertValue(LLVMBuilderRef, LLVMValueRef AggVal,
819 LLVMValueRef EltVal, unsigned Index,
822 LLVMValueRef LLVMBuildIsNull(LLVMBuilderRef, LLVMValueRef Val,
824 LLVMValueRef LLVMBuildIsNotNull(LLVMBuilderRef, LLVMValueRef Val,
826 LLVMValueRef LLVMBuildPtrDiff(LLVMBuilderRef, LLVMValueRef LHS,
827 LLVMValueRef RHS, const char *Name);
830 /*===-- Module providers --------------------------------------------------===*/
832 /* Encapsulates the module M in a module provider, taking ownership of the
834 * See the constructor llvm::ExistingModuleProvider::ExistingModuleProvider.
836 LLVMModuleProviderRef
837 LLVMCreateModuleProviderForExistingModule(LLVMModuleRef M);
839 /* Destroys the module provider MP as well as the contained module.
840 * See the destructor llvm::ModuleProvider::~ModuleProvider.
842 void LLVMDisposeModuleProvider(LLVMModuleProviderRef MP);
845 /*===-- Memory buffers ----------------------------------------------------===*/
847 int LLVMCreateMemoryBufferWithContentsOfFile(const char *Path,
848 LLVMMemoryBufferRef *OutMemBuf,
850 int LLVMCreateMemoryBufferWithSTDIN(LLVMMemoryBufferRef *OutMemBuf,
852 void LLVMDisposeMemoryBuffer(LLVMMemoryBufferRef MemBuf);
855 /*===-- Pass Managers -----------------------------------------------------===*/
857 /** Constructs a new whole-module pass pipeline. This type of pipeline is
858 suitable for link-time optimization and whole-module transformations.
859 See llvm::PassManager::PassManager. */
860 LLVMPassManagerRef LLVMCreatePassManager(void);
862 /** Constructs a new function-by-function pass pipeline over the module
863 provider. It does not take ownership of the module provider. This type of
864 pipeline is suitable for code generation and JIT compilation tasks.
865 See llvm::FunctionPassManager::FunctionPassManager. */
866 LLVMPassManagerRef LLVMCreateFunctionPassManager(LLVMModuleProviderRef MP);
868 /** Initializes, executes on the provided module, and finalizes all of the
869 passes scheduled in the pass manager. Returns 1 if any of the passes
870 modified the module, 0 otherwise. See llvm::PassManager::run(Module&). */
871 int LLVMRunPassManager(LLVMPassManagerRef PM, LLVMModuleRef M);
873 /** Initializes all of the function passes scheduled in the function pass
874 manager. Returns 1 if any of the passes modified the module, 0 otherwise.
875 See llvm::FunctionPassManager::doInitialization. */
876 int LLVMInitializeFunctionPassManager(LLVMPassManagerRef FPM);
878 /** Executes all of the function passes scheduled in the function pass manager
879 on the provided function. Returns 1 if any of the passes modified the
880 function, false otherwise.
881 See llvm::FunctionPassManager::run(Function&). */
882 int LLVMRunFunctionPassManager(LLVMPassManagerRef FPM, LLVMValueRef F);
884 /** Finalizes all of the function passes scheduled in in the function pass
885 manager. Returns 1 if any of the passes modified the module, 0 otherwise.
886 See llvm::FunctionPassManager::doFinalization. */
887 int LLVMFinalizeFunctionPassManager(LLVMPassManagerRef FPM);
889 /** Frees the memory of a pass pipeline. For function pipelines, does not free
891 See llvm::PassManagerBase::~PassManagerBase. */
892 void LLVMDisposePassManager(LLVMPassManagerRef PM);
899 class ModuleProvider;
901 class PassManagerBase;
903 #define DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \
904 inline ty *unwrap(ref P) { \
905 return reinterpret_cast<ty*>(P); \
908 inline ref wrap(const ty *P) { \
909 return reinterpret_cast<ref>(const_cast<ty*>(P)); \
912 #define DEFINE_ISA_CONVERSION_FUNCTIONS(ty, ref) \
913 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \
915 template<typename T> \
916 inline T *unwrap(ref P) { \
917 return cast<T>(unwrap(P)); \
920 #define DEFINE_STDCXX_CONVERSION_FUNCTIONS(ty, ref) \
921 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \
923 template<typename T> \
924 inline T *unwrap(ref P) { \
925 T *Q = dynamic_cast<T*>(unwrap(P)); \
926 assert(Q && "Invalid cast!"); \
930 DEFINE_ISA_CONVERSION_FUNCTIONS (Type, LLVMTypeRef )
931 DEFINE_ISA_CONVERSION_FUNCTIONS (Value, LLVMValueRef )
932 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(Module, LLVMModuleRef )
933 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(BasicBlock, LLVMBasicBlockRef )
934 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(IRBuilder<>, LLVMBuilderRef )
935 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(PATypeHolder, LLVMTypeHandleRef )
936 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ModuleProvider, LLVMModuleProviderRef)
937 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(MemoryBuffer, LLVMMemoryBufferRef )
938 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(LLVMContext, LLVMContextRef )
939 DEFINE_STDCXX_CONVERSION_FUNCTIONS(PassManagerBase, LLVMPassManagerRef )
941 #undef DEFINE_STDCXX_CONVERSION_FUNCTIONS
942 #undef DEFINE_ISA_CONVERSION_FUNCTIONS
943 #undef DEFINE_SIMPLE_CONVERSION_FUNCTIONS
945 /* Specialized opaque context conversions.
947 inline LLVMContext **unwrap(LLVMContextRef* Tys) {
948 return reinterpret_cast<LLVMContext**>(Tys);
951 inline LLVMContextRef *wrap(const LLVMContext **Tys) {
952 return reinterpret_cast<LLVMContextRef*>(const_cast<LLVMContext**>(Tys));
955 /* Specialized opaque type conversions.
957 inline Type **unwrap(LLVMTypeRef* Tys) {
958 return reinterpret_cast<Type**>(Tys);
961 inline LLVMTypeRef *wrap(const Type **Tys) {
962 return reinterpret_cast<LLVMTypeRef*>(const_cast<Type**>(Tys));
965 /* Specialized opaque value conversions.
967 inline Value **unwrap(LLVMValueRef *Vals) {
968 return reinterpret_cast<Value**>(Vals);
972 inline T **unwrap(LLVMValueRef *Vals, unsigned Length) {
974 for (LLVMValueRef *I = Vals, *E = Vals + Length; I != E; ++I)
977 return reinterpret_cast<T**>(Vals);
980 inline LLVMValueRef *wrap(const Value **Vals) {
981 return reinterpret_cast<LLVMValueRef*>(const_cast<Value**>(Vals));
985 #endif /* !defined(__cplusplus) */
987 #endif /* !defined(LLVM_C_CORE_H) */